diff --git a/.scratch/customer-rework/HANDOFF-2026-09-05-API-SUMMARY-WIP.md b/.scratch/customer-rework/HANDOFF-2026-09-05-API-SUMMARY-WIP.md
new file mode 100644
index 0000000..0d5cf02
--- /dev/null
+++ b/.scratch/customer-rework/HANDOFF-2026-09-05-API-SUMMARY-WIP.md
@@ -0,0 +1,81 @@
+# 交接篇:票 11 API-SUMMARY 重写进行中(SESSION 2,2026-09-05)
+
+> 换机交接。上篇 `.scratch/customer-rework/HANDOFF-2026-09-05.md` 交接到本会话已完成票 09/12/10;
+> 本篇从**票 11 第 2 项(API-SUMMARY.md 整篇重写,素材已采齐、正文未落笔)**处交接。
+
+## 0. 会话框架(先读)
+
+- **模式**:wayfinder「Work through the map」,地图 `.scratch/customer-rework/map.md`。
+- **用户既定指令**:「继续做,把整张 map 做完」。票据在 `.scratch/customer-rework/issues/`。
+- **纪律**:每票收尾=票内追加 `## Answer` + `Status: resolved` → rework map.md「Decisions so far」追加一行索引。
+- **Do not**:票据/ADR/map 已记录的内容不重述,按路径引用(下同)。
+
+## 1. 当前进度
+
+| 票 | 状态 |
+|---|---|
+| 09(F6/F7/F8/F10)、12(战略协议) | resolved(Answer 见各票文件) |
+| 10 回归重测 | **resolved**——五项验收全过,报告 `.scratch/customer-rework/RETEST-REPORT.md`;冒烟 `tmp/smoke-t10.py` 43 步全绿;服务已停、环境已还原 |
+| **11 文档同步** | **进行中**(五项清单见 `issues/11-docs-sync.md`):
① customer-module/map.md 返工增补段 —— 未做
② **API-SUMMARY.md 重写 —— 素材齐备,正文未落笔(本篇 §2 是全部素材)**
③ `.scratch/customer-module/HANDOFF-2026-09-05.md` 新篇(旧篇不改写)—— 未做
④ crm-customer/CONTEXT.md 同步 —— 未做
⑤ URL 对账脚本零差异 + 票 11 Answer/resolved + rework map 加 11 行 + map Status 收官 —— 未做 |
+
+## 2. API-SUMMARY 重写素材包(核心交接,事实均已在源码/冒烟实证)
+
+### 2.1 权威端点清单
+
+脚本产物 `tmp/dump_api_out.txt`(crm-customer + crm-rule + crm-preference 全部 controller:类级前缀 + 动词 + 路径 + 参数行),`tmp/dump_params_out.txt` 为路径-only 版。要点:
+
+**crm-customer**(写=POST 表单、读=GET 查询参数;全部无 @PathVariable/PUT/DELETE):
+
+- `CustomerWorkspaceController /api/customer/workspace`:POST `/page`、POST `/board/summary`、POST `/board/cards`——表单绑定 `CustomerWorkspacePageParam`
+- `CustomerController /api/customer`:POST `/create`(CustomerCreateDTO)、POST `/edit`(**id + CustomerUpdateDTO**)、GET `/detail?id=`、POST `/page`(CustomerPageParam)、POST `/search`(CustomerSearchParam)、POST `/quick-create`(CustomerQuickCreateDTO)、GET `/contacts?customerId=`、GET `/check-name?name=&excludeId=`、GET `/check-credit-code?creditCode=`、GET `/company-lookup?companyName=`、POST `/company-lookup/batch-update?ids=`(F6)
+- `CustomerDetailController /api/customer`:GET `/detail-head?id=`、GET `/member/list?id=`、POST `/member/add`(**id + MemberAddDTO{memberUserIds[]}**)、POST `/member/remove?id=&memberUserId=`、GET `/opportunity/page?id=`、GET `/oplog/page?id=`(+OplogPageParam)、POST `/follow/add`(id + FollowCreateDTO)、GET `/follow/page?id=`
+- `CustomerContactController /api/customer/contact`:POST `/create`(ContactDTO)、POST `/edit`(**id + ContactDTO**)、POST `/delete?id=`、GET `/detail?id=`、GET `/page`(ContactPageParam=BaseParam,keyword 匹配姓名/电话/所属客户名)、GET `/search?keyword=&limit=`(**limit 默认 20**)、GET `/check-phone?phone=&excludeId=`(D26 软提示,受查重设置电话开关控制)
+- `CustomerFocusController /api/customer`:POST `/focus|/unfocus|/star|/unstar?id=`、POST `/focus-batch?ids=`
+- `CustomerOwnershipController /api/customer`:POST `/claim|/claim-batch`、`/assign`(**id+userId**)|`/assign-batch`(**ids+userId**)、`/release-pool|/release-pool-batch`、`/archive|/archive-batch`、`/restore?id=`(单数 id、批量 ids)
+- `CustomerTransferController /api/customer/transfer`:GET `/preview`、POST `/initiate`(TransferInitiateDTO:reason 必填 resign/transfer_post/region_adjust + toDirectorId 选填 + remark)、GET `/detail?id=`、GET `/page`(TransferPageParam)、POST `/assign`(**id + customerIds + assignUserId**,BatchResult 行级部分成功)、GET `/assignable?id=`(**D-07 P1 超时已知缺陷**)
+- `CustomerImportController /api/customer/import`:POST `/upload`(**MultipartFile file + importMode + duplicateStrategy 可选**)、GET `/template`、POST `/confirm?taskId=`、GET `/result?taskId=`、GET `/failures?taskId=`、GET `/page`(ImportPageParam:status/importMode)
+- `CustomerAgreementController /api/customer/agreement`(票 12 五端点):POST `/create`(AgreementDTO)、POST `/edit`(**id + AgreementDTO**,归属不可换客户)、POST `/delete?id=`、GET `/detail?id=`、GET `/list?customerId=`
+- `CustomerPingController`:GET `/api/customer/ping`
+
+**crm-rule 客户规则族**:GET `/api/rule/customer/reminder` + POST `/api/rule/customer/reminder/save`(CustomerReminderRuleDTO 表单:masterEnabled/firstTriggerEnabled/firstTriggerDays/secondIntervalEnabled/secondIntervalDays);GET `/api/rule/customer/dedup` + POST `/api/rule/customer/dedup/save`(CustomerDedupRuleDTO 表单:masterEnabled/nameEnabled/nameMatchMode(1精确2模糊)/similarityThreshold/phoneEnabled)。(crm-rule 其余族=线索池/商机池规则/方案卡模板/阶段模板/地区——**不在客户域文档范围**,勿抄进客户 API-SUMMARY)
+
+**crm-preference 平台偏好**(不在 ADR-0017 改造范围,**saved-view save 例外用 @RequestBody JSON**):GET `/api/preference/get?scopeKey=` + POST `/api/preference/save`(scopeKey + visibleKeys + columnOrder 可空 List);GET `/api/preference/view/list?scopeKey=` + POST `/api/preference/view/save`(scopeKey + JSON SavedView) + POST `/api/preference/view/delete?scopeKey=&viewId=` + POST `/api/preference/view/set-default?scopeKey=&viewId=`;GET `/api/preference/view-form/get?scopeKey=` + POST `/api/preference/view-form/save`(scopeKey + viewForm)(返工票 05)
+
+### 2.2 关键值域/事实(源码锚点)
+
+- **错误码 67001-67017** 全表见 `crm-customer/.../constant/CustomerConstants.java` L13-29(67017=CODE_AGREEMENT_INVALID 票 12 新增)。
+- **oplog action 值域 17 种**(同文件 L85-101):CREATE/UPDATE/FOLLOW/ARCHIVE/RESTORE/TRANSFER/CLAIM/POOL/STAGE_CHANGE/MEMBER_ADD/MEMBER_REMOVE + CONTACT_ADD/CONTACT_EDIT/CONTACT_DELETE(F10) + AGREEMENT_ADD/AGREEMENT_EDIT/AGREEMENT_DELETE(票 12)。⚠ `OplogPageParam` 的 @Schema 描述仍写 11 种(滞后,未改——票 11 不动代码,文档按 17 种真值写)。
+- **F7 终态**(票 09 Answer 澄清):ownerOnly 等布尔字段**未做**,viewType 单参数承载五内置视图 `CustomerWorkspaceViewType`:ASSIGNED/COLLABORATING/FOLLOW_UP_DUE/FOCUSED/RECENT;workspace 适配 mine 全五、overview 无 FOLLOW_UP_DUE、pool 仅 RECENT/FOCUSED;越界视图 SQL 自然空集不硬拒;savedViewId 叠加自定义视图(RECENT 不接)。customer_view_log 生产侧零写入 → detailHead upsert touchViewLog 收口(票 04 建壳挂账)。
+- **F8 duplicateStrategy**(票 09 Answer):upload 可选参数,SKIP 缺省/OVERWRITE,非法值 67013 拦;D24 冻结语义=作用面仅文件内重复组、overwrite=组内最后一条通过校验的行 UPDATE 生效、不触名称相似 SUSPECT;响应回显 duplicateStrategy。
+- **F6 batch-update**:`POST /api/customer/company-lookup/batch-update?ids=`(ids 表单绑定、上限 100、§C2 只补空缺、五种状态软处置、port stub 恒 NO_HIT、真实企查查接入自动激活)。
+- **groupColumn 白名单**(CustomerWorkspaceServiceImpl L185-191):`stage`→customer_stage / `star`→customer_star_level / 其他→relation_star_level;board/cards 必传 groupValue 否则 67001;**pool 看板 67001 拒绝**(「公海无卡片视图」,票 03)。
+- **scopeKey 清单**(CustomerConstants L53-81):saved-view/列/形态共用 `customer.overview` / `customer.mine` / `customer.pool`;列/形态另有 `contact.list`;view-form 公海仅 list/split(board 被拒);商机侧 `opportunity.mine`(冒烟实测)等。
+- **company-lookup 参数 = `companyName`**(旧 API-SUMMARY 写 `keyword=` 是错的,以代码为准)。
+- **AgreementDTO 字段**:customerId(新增必填,编辑以库内归属为准)/agreementLevel(1~3 必填)/amount(文本可空)/remark/fileFileId + customerName(仅出参);删协议联动清主表 strategic_agreement_level 快照。
+- **67017 语义**:等级缺失或越界/协议不存在或无权访问。
+- **旧文档 §0/§1/§5 骨架保留**:通用约定(Bearer/Result/PageResult/雪花串化/fail-open/脱敏现状/时间格式)+ 错误码表扩到 67017 + §5 销账(1 confirmSimilar、2 查重设置端点保持删除线;3 改为「页签 5 关联项目仍 --、页签 6 战略协议已上线→§2.x」;4/5 保持划出项;**新增 D-07 assignable 超时已知缺陷条目**)。
+- **计划段落结构**(重写时沿用旧骨架编号顺延):§2.1 三 workspace(含 F7 表格式 Param 说明)→ 2.2 公海与归属动作 → 2.3 新增/编辑/查重/工商(含 F6) → 2.4 商机快建+商机侧依赖 → 2.5 详情公共头部+8 页签(页签 6 引战略协议节)→ 2.6 战略协议五端点 → 2.7 联系人独立菜单 → 2.8 团队成员 → 2.9 关注/重点 → 2.10 归档/恢复 → 2.11 交割 → 2.12 导入(含 F8) → 2.13 规则设置 → 2.14 偏好三件套+scopeKey+JSON 例外 → 2.15 ping;§3 值域附录、§4 联调速查(冒烟范式改 `tmp/smoke-t10.py`)、§5 缺口。目标 <1000 行,旧文档 `.scratch/customer-module/API-SUMMARY.md`(194 行)供对照。
+
+### 2.3 票 11 后续步骤细节
+
+- **① map 增补段**:`.scratch/customer-module/map.md` 末尾(L140-142 已有「返工增补指针」一行段)扩为完整段:R1-R11 决策指针(→ rework map)+ 每张返工票(01-10、12)一行增量决策。素材=rework map「Decisions so far」11 行索引 + 各票 Answer。
+- **③ HANDOFF 新篇**:`.scratch/customer-module/HANDOFF-2026-09-05.md`(正式收工篇,区别于 customer-rework 下的交接篇);链接 RETEST-REPORT;旧 HANDOFF 不改写。
+- **④ CONTEXT.md**:`crm-customer/CONTEXT.md` 若有接口清单段,同步新 URL 契约 + 偏好能力(列/形态/saved-view)+ 战略协议。
+- **⑤ URL 对账**:写脚本从新 API-SUMMARY.md 提取全部 URL 与 `@*Mapping` 对账(可复用 `tmp/dump_api.py` 输出做基准);零差异后票 11 Answer/resolved + rework map 加 11 索引行 + 检查 map「Not yet specified」清空 → **整图收官**。
+
+## 3. 工具坑(本机实证,勿重蹈)
+
+- **PowerShell**:`-Command` 双引号串里 `$_`/`$env:` 被吞 → 一律写 .ps1 文件用 `-File`;语句分隔用 `;` 不用 `&&`。
+- **写文件范围**:Write/SearchReplace 只限 workspace(`d:\code\crm-backend-matt`)内;docs 仓 `D:\code\crm-api-docs` 等外部路径 → 先写 workspace 内 staging 再 python 复制(先例 `.scratch/customer-rework/deploy_bru.py`)。
+- **py**:统一 `py -3 -X utf8`;`-c` 内嵌脚本引号易炸 → 落 .py 文件再跑。
+- **服务起停**(如需复跑冒烟):先例 `.scratch/customer-e2e/map.md` L29(verify profile;MINIO 凭据见该处,不在本文档重复);重打包 `tmp/pack-crmapp.ps1`(fat jar 会落后源码,核对时间戳);`tmp/run-crmapp.ps1` / `tmp/stop-crmapp.ps1`。**当前服务已停**。
+- **冒烟实测参数**(写文档校对用):`tmp/smoke-t10.py`——edit 必带 `version`+`isBizNegotiated`+`isChild`;contact/create 必填 `name/jobTitleName/phone`;preference save 用 visibleKeys/columnOrder 逗号串。
+
+## 4. Suggested skills
+
+- `wayfinder`:Work through the map 模式续作,地图 `.scratch/customer-rework/`,从票 11 接续。
+- `bruno-sync`:仅当对账再需要时(当前 321=321 已闭环,无需重跑)。
+
+## 5. 验收线(票 11)
+
+文档-代码对账零差异;旧 HANDOFF 不改写(历史只增);五项清单全勾 + Answer/resolved + rework map 11 行 → 整张 map 收官。
diff --git a/.scratch/customer-rework/RETEST-REPORT.md b/.scratch/customer-rework/RETEST-REPORT.md
new file mode 100644
index 0000000..ddecb31
--- /dev/null
+++ b/.scratch/customer-rework/RETEST-REPORT.md
@@ -0,0 +1,72 @@
+# 客户模块返工 · 回归重测报告(票 10)
+
+- **日期**: 2026-09-05
+- **范围**: 返工票 01–09、12 全部改动后的回归验收(票 11 文档同步不在本报告内)
+- **结论**: **五项验收全过,收工。**
+
+## 验收线逐项结果
+
+### 1. `mvn test` 三模块全绿 ✅
+
+全 reactor `clean test -pl crm-opportunity -am`(含 rule/customer/opportunity 传递依赖):
+
+| 模块 | 用例数 | 结果 |
+|---|---|---|
+| crm-rule | 152 | 全绿 |
+| crm-customer | 158 | 全绿(基线 122,返工净增 36:风格改造 + 看板拒绝 + 查重设置 + 形态偏好 + viewTouch + 批量工商 + 战略协议 6 例 + 联系人 oplog) |
+| crm-opportunity | 242 | 全绿(偏好 scopeKey 常量接入 + tags 双归属,零逻辑变更) |
+
+基线 521(146/122/242)→ 现 552,数量随用例变化、绿为准(票面口径)。
+
+### 2. 冒烟全链 code=0 ✅
+
+脚本 `tmp/smoke-t10.py`(复用 smoke-t12m.py 范式,URL 全部现行端点),服务 = 重打包后 fat jar(新代码入包,jar 时间戳 2026-09-05 11:18,启动日志可见 `customerAgreementMapper` 注册)。
+
+**43 步 0 fail(SMOKE DONE)**,覆盖:
+
+- 登录(debug/token,verify profile)
+- 客户三 workspace 列表(mine/overview/pool)+ 看板 summary/cards(mine/overview)+ **pool 看板断言 67001 拒绝**(返工票 03 口径)
+- 建改查客户(quick-create → edit[CAS version] → detail → detail-head)
+- 联系人 CRUD(create/edit/detail/page/delete)
+- 抛公海 → 领取 → 分配(BUDDY) → 回收(ADMIN)
+- 交割只读(page + assignable,见下方 D-07 说明;initiate=名下全量口径不重做,e2e-heavy 已覆盖)
+- 导入全链(openpyxl 造文件 → upload[**含 duplicateStrategy=SKIP 且响应回显断言**,返工票 09-F8] → confirm → result 终态)
+- 偏好存取:列偏好 save/get(visibleKeys/columnOrder 回读断言)+ 形态偏好 view-form save/get(返工票 05)
+- 商机偏好存取(opportunity.mine,返工票 07)
+- **战略协议五端点 + DB 快照断言**(返工票 12:create 后快照=2 → edit 后=3 → delete 后=NULL)
+- **批量工商更新**(返工票 09-F6:ids 单查回填,stub 恒 NO_HIT)
+
+冒烟过程登记的脚本级修正(非服务缺陷):edit 需带 CAS `version` + `isBizNegotiated`;contact/edit 必填 jobTitleName/phone。
+
+**已知缺陷引用(非本次回归)**:
+- **D-07(P1)** `GET /api/customer/transfer/assignable` 稳定超时——票 05 已登记(e2e-heavy 30s×2 + probe 60s 双复现),本次历史单上 15s 超时复现,冒烟按「缺陷验证模式」记录不阻断(根因:根部门全树递归 + 逐用户 getDeptNames N+1)。
+- **D-04(P2)** 导入失败明细 `fail_reason` 列超长写不进(`Data too long for column 'fail_reason'`,服务日志实证);**D-05(P1)** is_biz_negotiated NOT NULL 无默认值——均为票 09 audit 已知项,维持原状。
+
+### 3. bruno 产出验收 ✅
+
+- 全量对账(`.scratch/customer-rework/bruno_scan_d.py`,本机 D:\ 路径版):**源码 321 钥匙 = 文档仓 321 generated 文件,new=0 / delete=0 / 钥匙冲突=0 / 无法识别=0 / 私产=0**。
+- 本次同步落盘 8 文件(票 09/12 增量):
+ - 新建 `A4 客户管理/战略协议/`(5 份:新增/编辑/删除/详情/页签列表,票 12 tag=`A4 客户管理/战略协议`——票 12 拍板「三页物理在客户详情下、单菜单归属」,对齐联系人先例)
+ - 新建 `A4 客户管理/我的客户/批量更新工商信息.bru`(F6)
+ - patch `上传导入文件并预校验.bru` ×2(客户公海 + 我的客户/客户导入 双 tag 副本:duplicateStrategy 参数行 + 请求示例行 + 响应骨架,F8)
+- A4 目录树与 v29 对齐终验:A4 七节点(公海/总览/我的客户/客户详情/联系人/查重/交割)+ 战略协议按票 12 拍板挂 A4 根;knife4j 分组同构维持(票 07 终态无漂移)。
+
+### 4. BOM 扫描 ✅
+
+全仓 `*.java` 无 `EF BB BF` 前缀(AGENTS.md 编码纪律),零命中。
+
+### 5. 风格 grep 终验 ✅
+
+`grep "@PathVariable|@PutMapping|@DeleteMapping|@RequestBody" crm-customer/` 零命中。
+
+## 用例计数明细
+
+- crm-rule 152:含提醒规则 save 表单化(票 02)+ 查重设置单例栈(票 04)
+- crm-customer 158:含 H2 集成 CustomerAgreementIntegrationTest 6 例(快照联动/归属不可换/软删/可见性继承/67017 校验)
+- crm-opportunity 242:CustomerOpportunityQueryPortImplTest 等全量(含跨模块 port)
+
+## 遗留(进票 11 / 后续 effort)
+
+- 票 11 文档同步:customer-module 三件套 + crm-customer/CONTEXT.md + URL 对账(本报告同日完成)
+- D-07 assignable 超时修复(P1,独立 effort,返工范围外)
+- 导入 D-04/D-05(已知缺陷,票 09 audit 记档)
diff --git a/.scratch/customer-rework/audit-findings.md b/.scratch/customer-rework/audit-findings.md
index c6f63a1..38e78c5 100644
--- a/.scratch/customer-rework/audit-findings.md
+++ b/.scratch/customer-rework/audit-findings.md
@@ -66,3 +66,19 @@
- 机械修:S1(64022 改码)、F3(tag 补挂,确认后)、F10(oplog 参数或记账)
- 需用户拍板(grill):F5(战略协议补 or 划出,唯一有完整原型三页的缺口)、F6(批量工商更新)、F7(内置视图过滤参数)、F8(导入重复策略)
- 划出候选确认:F4(关联项目→A5 依赖)、F9(日志导出→导出家族)
+
+## 四、处置状态(票 09 收尾回填,2026-09-05)
+
+| 条目 | 处置 | 说明 |
+|---|---|---|
+| S1 | 已修 | 实改方向与上节建议**相反**(64022 已被 `CODE_SCHEME_TPL_FIELD_INVALID` 占用):`CODE_SCHEME_TPL_INVALID` 保 64018(64018-64022 归方案卡模板段),`CODE_STAGE_TPL_SEED_PROTECTED` 64018→64024 顺延补位;段位 javadoc + 引用处 + 测试同步 |
+| F3 | 已修 | 六个 import 端点双 tag 增挂「客户公海」(a4-1-1 工具条实证导入入口,ADR-0024 多值) |
+| F4 | 划出 | 随 A5 项目域:本工程无项目管理模块,端点与页签随项目模块建立时一并落(用户 2026-09-05 拍板) |
+| F5 | 已单开票 12 | 战略协议单表 CRUD(原型三页完整);全栈实现+测试+bruno 移交 12 号票 |
+| F6 | 已修 | `POST /api/customer/company-lookup/batch-update`(ids 查询参数表单绑定;逐个单查→guardCreditCodeForWrite→§C2 只补空缺不覆盖→SKIPPED/UPDATED/NO_HIT/CONFLICT/NOT_FOUND 软处置;单批上限 100);port 为 stub 恒 NO_HIT,真实企查查 Bean 接入自动激活;+4 集成用例 |
+| F7 | 部分误报 + 已修 | 审计口径偏差:viewType 单参数已承载五内置视图(ASSIGNED/COLLABORATING/FOLLOW_UP_DUE/FOCUSED/RECENT,SQL 与测试俱全),无需新增过滤参数;真缺口=customer_view_log 生产侧零写入(RECENT 死视图,票 04 建壳挂账未兑现)→ detailHead 聚合时自动 upsert touchViewLog(实体 javadoc 明文设计意图),零新端点;+1 upsert 集成用例 |
+| F8 | 已修 | import/upload 加 `duplicateStrategy` 参数(SKIP 缺省 / OVERWRITE;非法值 67013;D24 冻结语义:作用面仅文件内重复组,overwrite=组内自上而下最后一条通过校验的行 UPDATE 生效;不触名称相似 SUSPECT——D16 独立规则);task 实体加列 duplicate_strategy、analyzer 穿参、preview DTO、executor、+3 集成用例 |
+| F9 | 划出 | 随 D2 导出家族:导出端点族整体未建,先行项不存在(用户 2026-09-05 拍板) |
+| F10 | 已修(轻方案) | 客户 oplog 扩 CONTACT_ADD/EDIT/DELETE 三操作类型;联系人 create/update/delete 三处 oplogWriter.write(detail=「新增/修改/删除联系人【名】」);独立联系人日志表方案否决(用户拍板轻方案);+1 集成用例断言三行日志 |
+
+bruno 侧 F6/F8 新参数与 F7 行为的示例同步未在本票内做,随票 10 bruno 对账步统一核补(文档仓本机 `D:\code\crm-api-docs`)。
diff --git a/.scratch/customer-rework/bru-staging/客户公海/上传导入文件并预校验.bru b/.scratch/customer-rework/bru-staging/客户公海/上传导入文件并预校验.bru
new file mode 100644
index 0000000..32a3401
--- /dev/null
+++ b/.scratch/customer-rework/bru-staging/客户公海/上传导入文件并预校验.bru
@@ -0,0 +1,65 @@
+meta {
+ name: 上传导入文件并预校验
+ type: http
+ seq: 1
+ tags: [
+ generated
+ ]
+}
+
+post {
+ url: {{baseUrl}}/api/customer/import/upload
+ body: multipartFormData
+ auth: inherit
+}
+
+body:multipartFormData {
+
+ file: @客户导入模板.xlsx
+ importMode: APPEND_ONLY
+ duplicateStrategy: SKIP
+}
+
+docs {
+ # 上传导入文件并预校验
+ `POST /api/customer/import/upload`(本行兼作对账钥匙,勿手改)
+ 文件守门(.xls/.xlsx、≤20MB、模板版本、单 sheet ≤5 万行)→ 行级判定(与执行同口径)→ 任务落待确认态(DRAFT),返回预计数 + 明细(上限 100 条)。已知缺陷 D-05(P1):is_biz_negotiated NOT NULL 无默认值且 createCustomer 未赋值——含 INSERT 行的导入必 FAILED(行不落库);D-04(P2):行异常文本超长致失败明细写不进 fail 表(0 行)。
+
+ ## 请求参数
+
+ | 参数 | 类型 | 必填 | 说明 |
+ | --- | --- | --- | --- |
+ | file | file | 是 | Excel 文件(.xlsx,multipart) |
+ | importMode | string | 是 | 导入方式:APPEND_ONLY 仅新增 / UPDATE_ONLY 仅更新 / UPSERT 有则更新 |
+ | duplicateStrategy | string | 否 | 重复策略:SKIP 不导入(默认)/ OVERWRITE 覆盖导入(返工票 09-F8) |
+
+ ## 请求示例
+
+ 请求头:Authorization: Bearer {{token}}
+ Content-Type: multipart/form-data
+
+ POST /api/customer/import/upload
+ file=@客户导入模板.xlsx
+ importMode=APPEND_ONLY
+ duplicateStrategy=SKIP
+
+ ## 响应 data 结构
+
+ ImportPreviewDTO(taskId + duplicateStrategy + totalCount/insertCount/updateCount/failCount/suspectCount + 行级明细)
+
+ ## 错误码
+
+ - 67013 导入预校验失败(文件/表头/行数/模板版本)
+
+ ## 响应示例
+
+ // 示例数据(E2E 实测真值),字段结构以上表为准
+ ```json
+ {
+ "code": 67013,
+ "success": false,
+ "message": "导入方式非法(仅新增/仅更新/新增或更新)",
+ "data": null
+ }
+ ```
+}
diff --git a/.scratch/customer-rework/bru-staging/客户导入/上传导入文件并预校验.bru b/.scratch/customer-rework/bru-staging/客户导入/上传导入文件并预校验.bru
new file mode 100644
index 0000000..32a3401
--- /dev/null
+++ b/.scratch/customer-rework/bru-staging/客户导入/上传导入文件并预校验.bru
@@ -0,0 +1,65 @@
+meta {
+ name: 上传导入文件并预校验
+ type: http
+ seq: 1
+ tags: [
+ generated
+ ]
+}
+
+post {
+ url: {{baseUrl}}/api/customer/import/upload
+ body: multipartFormData
+ auth: inherit
+}
+
+body:multipartFormData {
+
+ file: @客户导入模板.xlsx
+ importMode: APPEND_ONLY
+ duplicateStrategy: SKIP
+}
+
+docs {
+ # 上传导入文件并预校验
+ `POST /api/customer/import/upload`(本行兼作对账钥匙,勿手改)
+ 文件守门(.xls/.xlsx、≤20MB、模板版本、单 sheet ≤5 万行)→ 行级判定(与执行同口径)→ 任务落待确认态(DRAFT),返回预计数 + 明细(上限 100 条)。已知缺陷 D-05(P1):is_biz_negotiated NOT NULL 无默认值且 createCustomer 未赋值——含 INSERT 行的导入必 FAILED(行不落库);D-04(P2):行异常文本超长致失败明细写不进 fail 表(0 行)。
+
+ ## 请求参数
+
+ | 参数 | 类型 | 必填 | 说明 |
+ | --- | --- | --- | --- |
+ | file | file | 是 | Excel 文件(.xlsx,multipart) |
+ | importMode | string | 是 | 导入方式:APPEND_ONLY 仅新增 / UPDATE_ONLY 仅更新 / UPSERT 有则更新 |
+ | duplicateStrategy | string | 否 | 重复策略:SKIP 不导入(默认)/ OVERWRITE 覆盖导入(返工票 09-F8) |
+
+ ## 请求示例
+
+ 请求头:Authorization: Bearer {{token}}
+ Content-Type: multipart/form-data
+
+ POST /api/customer/import/upload
+ file=@客户导入模板.xlsx
+ importMode=APPEND_ONLY
+ duplicateStrategy=SKIP
+
+ ## 响应 data 结构
+
+ ImportPreviewDTO(taskId + duplicateStrategy + totalCount/insertCount/updateCount/failCount/suspectCount + 行级明细)
+
+ ## 错误码
+
+ - 67013 导入预校验失败(文件/表头/行数/模板版本)
+
+ ## 响应示例
+
+ // 示例数据(E2E 实测真值),字段结构以上表为准
+ ```json
+ {
+ "code": 67013,
+ "success": false,
+ "message": "导入方式非法(仅新增/仅更新/新增或更新)",
+ "data": null
+ }
+ ```
+}
diff --git a/.scratch/customer-rework/bru-staging/我的客户/批量更新工商信息.bru b/.scratch/customer-rework/bru-staging/我的客户/批量更新工商信息.bru
new file mode 100644
index 0000000..438fd9a
--- /dev/null
+++ b/.scratch/customer-rework/bru-staging/我的客户/批量更新工商信息.bru
@@ -0,0 +1,71 @@
+meta {
+ name: 批量更新工商信息
+ type: http
+ seq: 94
+ tags: [
+ generated
+ ]
+}
+
+post {
+ url: {{baseUrl}}/api/customer/company-lookup/batch-update
+ body: formUrlEncoded
+ auth: inherit
+}
+
+body:form-urlencoded {
+
+ ids: 1,2
+}
+
+docs {
+ # 批量更新工商信息
+ `POST /api/customer/company-lookup/batch-update`(本行兼作对账钥匙,勿手改)
+ a4-3-1 多选确认弹窗(你选择了N个客户,确认要批量查询并更新工商信息吗):逐客户按名称查工商源并回填空缺字段,行级部分成功返回每客户结果;单次上限 100;一期 stub 恒 NO_HIT。
+
+ ## 请求参数
+
+ | 参数 | 类型 | 必填 | 说明 |
+ | --- | --- | --- | --- |
+ | ids | string | 是 | 客户 id 列表(逗号分隔或多值同名参数,单次上限 100) |
+
+ ## 请求示例
+
+ 请求头:Authorization: Bearer {{token}}
+ Content-Type: application/x-www-form-urlencoded
+
+ POST /api/customer/company-lookup/batch-update
+ // 示例数据,非真实返回
+ ids=1,2
+
+ ## 响应 data 结构
+
+ | 字段 | 类型 | 示例值 |
+ | --- | --- | --- |
+ | [] | array | 单客户结果条目,结构如下 |
+ | [].customerId | string | 1 |
+ | [].customerName | string | 示例客户 |
+ | [].status | string | NO_HIT(UPDATED 已回填 / SKIPPED 无空缺 / NO_HIT 未命中 / CONFLICT 信用代码冲突 / NOT_FOUND 客户不存在) |
+ | [].filledFields | number | 0 |
+ | [].message | string | 工商源未查询到匹配企业 |
+
+ ## 响应示例
+
+ // 示例数据,字段结构以上表为准,非真实返回
+ ```json
+ {
+ "code": 0,
+ "success": true,
+ "message": "success",
+ "data": [
+ {
+ "customerId": "1",
+ "customerName": "示例客户",
+ "status": "NO_HIT",
+ "filledFields": 0,
+ "message": "工商源未查询到匹配企业"
+ }
+ ]
+ }
+ ```
+}
diff --git a/.scratch/customer-rework/bru-staging/战略协议/删除战略协议.bru b/.scratch/customer-rework/bru-staging/战略协议/删除战略协议.bru
new file mode 100644
index 0000000..139b233
--- /dev/null
+++ b/.scratch/customer-rework/bru-staging/战略协议/删除战略协议.bru
@@ -0,0 +1,61 @@
+meta {
+ name: 删除战略协议
+ type: http
+ seq: 3
+ tags: [
+ generated
+ ]
+}
+
+post {
+ url: {{baseUrl}}/api/customer/agreement/delete
+ body: formUrlEncoded
+ auth: inherit
+}
+
+body:form-urlencoded {
+
+ id: 1
+}
+
+docs {
+ # 删除战略协议
+ `POST /api/customer/agreement/delete`(本行兼作对账钥匙,勿手改)
+ 软删;删空后客户战略协议等级快照回 NULL=未签。权限继承所属客户(无独立 ACL),无权 67017/67002。
+
+ ## 请求参数
+
+ | 参数 | 类型 | 必填 | 说明 |
+ | --- | --- | --- | --- |
+ | id | string | 是 | 协议 id |
+
+ ## 请求示例
+
+ 请求头:Authorization: Bearer {{token}}
+ Content-Type: application/x-www-form-urlencoded
+
+ POST /api/customer/agreement/delete
+ // 示例数据,非真实返回
+ id=1
+
+ ## 响应 data 结构
+
+ null
+
+ ## 错误码
+
+ - 67017 协议不存在
+ - 67002 客户不存在或不可见
+
+ ## 响应示例
+
+ // 示例数据,字段结构以上文为准,非真实返回
+ ```json
+ {
+ "code": 0,
+ "success": true,
+ "message": "success",
+ "data": null
+ }
+ ```
+}
diff --git a/.scratch/customer-rework/bru-staging/战略协议/战略协议详情.bru b/.scratch/customer-rework/bru-staging/战略协议/战略协议详情.bru
new file mode 100644
index 0000000..3cac01d
--- /dev/null
+++ b/.scratch/customer-rework/bru-staging/战略协议/战略协议详情.bru
@@ -0,0 +1,78 @@
+meta {
+ name: 战略协议详情
+ type: http
+ seq: 4
+ tags: [
+ generated
+ ]
+}
+
+get {
+ url: {{baseUrl}}/api/customer/agreement/detail
+ body: none
+ auth: inherit
+}
+
+params:query {
+
+ id: 1
+}
+
+docs {
+ # 战略协议详情
+ `GET /api/customer/agreement/detail`(本行兼作对账钥匙,勿手改)
+ 编辑回显(a4-4-10)。权限继承所属客户(无独立 ACL),无权 67017/67002。
+
+ ## 请求参数
+
+ | 参数 | 类型 | 必填 | 说明 |
+ | --- | --- | --- | --- |
+ | id | string | 是 | 协议 id |
+
+ ## 请求示例
+
+ 请求头:Authorization: Bearer {{token}}
+
+ GET /api/customer/agreement/detail?id=1
+
+ ## 响应 data 结构
+
+ | 字段 | 类型 | 示例值 |
+ | --- | --- | --- |
+ | id | string | 1 |
+ | createTime | string | 2024-01-01 12:00:00 |
+ | updateTime | string | 2024-01-01 12:00:00 |
+ | customerId | string | 750844477165273088 |
+ | agreementLevel | number | 2 |
+ | amount | string | 500万 |
+ | remark | string | 年度战略合作 |
+ | fileFileId | string | null |
+ | customerName | string | 示例客户 |
+
+ ## 错误码
+
+ - 67017 协议不存在
+ - 67002 客户不存在或不可见
+
+ ## 响应示例
+
+ // 示例数据,字段结构以上表为准,非真实返回
+ ```json
+ {
+ "code": 0,
+ "success": true,
+ "message": "success",
+ "data": {
+ "id": "1",
+ "createTime": "2024-01-01 12:00:00",
+ "updateTime": "2024-01-01 12:00:00",
+ "customerId": "750844477165273088",
+ "agreementLevel": 2,
+ "amount": "500万",
+ "remark": "年度战略合作",
+ "fileFileId": null,
+ "customerName": "示例客户"
+ }
+ }
+ ```
+}
diff --git a/.scratch/customer-rework/bru-staging/战略协议/战略协议页签列表.bru b/.scratch/customer-rework/bru-staging/战略协议/战略协议页签列表.bru
new file mode 100644
index 0000000..75b0913
--- /dev/null
+++ b/.scratch/customer-rework/bru-staging/战略协议/战略协议页签列表.bru
@@ -0,0 +1,80 @@
+meta {
+ name: 战略协议页签列表
+ type: http
+ seq: 5
+ tags: [
+ generated
+ ]
+}
+
+get {
+ url: {{baseUrl}}/api/customer/agreement/list
+ body: none
+ auth: inherit
+}
+
+params:query {
+
+ customerId: 750844477165273088
+}
+
+docs {
+ # 战略协议页签列表
+ `GET /api/customer/agreement/list`(本行兼作对账钥匙,勿手改)
+ 客户详情页签卡片(a4-4-6),时间倒序非分页;带出客户名。权限继承所属客户(无独立 ACL),无权 67002。
+
+ ## 请求参数
+
+ | 参数 | 类型 | 必填 | 说明 |
+ | --- | --- | --- | --- |
+ | customerId | string | 是 | 所属客户 id |
+
+ ## 请求示例
+
+ 请求头:Authorization: Bearer {{token}}
+
+ GET /api/customer/agreement/list?customerId=750844477165273088
+
+ ## 响应 data 结构
+
+ | 字段 | 类型 | 示例值 |
+ | --- | --- | --- |
+ | [] | array | 协议条目,结构如下 |
+ | [].id | string | 1 |
+ | [].createTime | string | 2024-01-01 12:00:00 |
+ | [].updateTime | string | 2024-01-01 12:00:00 |
+ | [].customerId | string | 750844477165273088 |
+ | [].agreementLevel | number | 2 |
+ | [].amount | string | 500万 |
+ | [].remark | string | 年度战略合作 |
+ | [].fileFileId | string | null |
+ | [].customerName | string | 示例客户 |
+
+ ## 错误码
+
+ - 67002 客户不存在或不可见
+
+ ## 响应示例
+
+ // 示例数据,字段结构以上表为准,非真实返回
+ ```json
+ {
+ "code": 0,
+ "success": true,
+ "message": "success",
+ "data": [
+ {
+ "id": "1",
+ "createTime": "2024-01-01 12:00:00",
+ "updateTime": "2024-01-01 12:00:00",
+ "customerId": "750844477165273088",
+ "agreementLevel": 2,
+ "amount": "500万",
+ "remark": "年度战略合作",
+ "fileFileId": null,
+ "customerName": "示例客户"
+ }
+ ]
+ }
+ ```
+}
diff --git a/.scratch/customer-rework/bru-staging/战略协议/新增战略协议.bru b/.scratch/customer-rework/bru-staging/战略协议/新增战略协议.bru
new file mode 100644
index 0000000..f0f6ded
--- /dev/null
+++ b/.scratch/customer-rework/bru-staging/战略协议/新增战略协议.bru
@@ -0,0 +1,69 @@
+meta {
+ name: 新增战略协议
+ type: http
+ seq: 1
+ tags: [
+ generated
+ ]
+}
+
+post {
+ url: {{baseUrl}}/api/customer/agreement/create
+ body: formUrlEncoded
+ auth: inherit
+}
+
+body:form-urlencoded {
+
+ customerId: 750844477165273088
+ agreementLevel: 2
+ amount: 500万
+ remark:
+ fileFileId:
+}
+
+docs {
+ # 新增战略协议
+ `POST /api/customer/agreement/create`(本行兼作对账钥匙,勿手改)
+ 所属客户必填且对当前用户可见;等级 1~3 必填;写后刷新客户战略协议等级快照。权限继承所属客户(无独立 ACL),无权 67017/67002。
+
+ ## 请求参数
+
+ | 参数 | 类型 | 必填 | 说明 |
+ | --- | --- | --- | --- |
+ | customerId | string | 是 | 所属客户 id |
+ | agreementLevel | number | 是 | 战略协议等级 1~3:一级/二级/三级 |
+ | amount | string | 否 | 签订金额(文本:数字/区间/含单位) |
+ | remark | string | 否 | 备注 |
+ | fileFileId | string | 否 | 附件 fileId(crm-file 引用,单文件);下载由前端走 crm-file 通用端点 |
+
+ ## 请求示例
+
+ 请求头:Authorization: Bearer {{token}}
+ Content-Type: application/x-www-form-urlencoded
+
+ POST /api/customer/agreement/create
+ // 示例数据,非真实返回
+ customerId=750844477165273088&agreementLevel=2&amount=500万
+
+ ## 响应 data 结构
+
+ 新协议 id(string)
+
+ ## 错误码
+
+ - 67017 战略协议入参非法(等级须 1~3)/协议不存在
+ - 67002 客户不存在或不可见
+
+ ## 响应示例
+
+ // 示例数据,字段结构以上文为准,非真实返回
+ ```json
+ {
+ "code": 0,
+ "success": true,
+ "message": "success",
+ "data": "1"
+ }
+ ```
+}
diff --git a/.scratch/customer-rework/bru-staging/战略协议/编辑战略协议.bru b/.scratch/customer-rework/bru-staging/战略协议/编辑战略协议.bru
new file mode 100644
index 0000000..2faf9c2
--- /dev/null
+++ b/.scratch/customer-rework/bru-staging/战略协议/编辑战略协议.bru
@@ -0,0 +1,71 @@
+meta {
+ name: 编辑战略协议
+ type: http
+ seq: 2
+ tags: [
+ generated
+ ]
+}
+
+post {
+ url: {{baseUrl}}/api/customer/agreement/edit
+ body: formUrlEncoded
+ auth: inherit
+}
+
+body:form-urlencoded {
+
+ id: 1
+ customerId:
+ agreementLevel: 3
+ amount: 600万
+ remark:
+ fileFileId:
+}
+
+docs {
+ # 编辑战略协议
+ `POST /api/customer/agreement/edit`(本行兼作对账钥匙,勿手改)
+ 归属客户不可换(customerId 以库内归属为准,传入忽略);等级 1~3;写后刷新客户快照。权限继承所属客户(无独立 ACL),无权 67017/67002。
+
+ ## 请求参数
+
+ | 参数 | 类型 | 必填 | 说明 |
+ | --- | --- | --- | --- |
+ | id | string | 是 | 协议 id |
+ | customerId | string | 否 | 归属客户不可换:以库内归属为准,传入忽略 |
+ | agreementLevel | number | 是 | 战略协议等级 1~3:一级/二级/三级 |
+ | amount | string | 否 | 签订金额(文本:数字/区间/含单位) |
+ | remark | string | 否 | 备注 |
+ | fileFileId | string | 否 | 附件 fileId(crm-file 引用,单文件) |
+
+ ## 请求示例
+
+ 请求头:Authorization: Bearer {{token}}
+ Content-Type: application/x-www-form-urlencoded
+
+ POST /api/customer/agreement/edit
+ // 示例数据,非真实返回
+ id=1&agreementLevel=3&amount=600万
+
+ ## 响应 data 结构
+
+ null
+
+ ## 错误码
+
+ - 67017 战略协议入参非法(等级须 1~3)/协议不存在
+ - 67002 客户不存在或不可见
+
+ ## 响应示例
+
+ // 示例数据,字段结构以上文为准,非真实返回
+ ```json
+ {
+ "code": 0,
+ "success": true,
+ "message": "success",
+ "data": null
+ }
+ ```
+}
diff --git a/.scratch/customer-rework/bruno-recon-d.json b/.scratch/customer-rework/bruno-recon-d.json
new file mode 100644
index 0000000..075fd88
--- /dev/null
+++ b/.scratch/customer-rework/bruno-recon-d.json
@@ -0,0 +1,4326 @@
+{
+ "report": {
+ "source_api_count": 229,
+ "source_key_count": 321,
+ "generated_file_count": 321,
+ "private_file_count": 0,
+ "unrecognized_count": 0,
+ "key_conflicts": [],
+ "keep_count": 321,
+ "new_count": 0,
+ "delete_file_count": 0,
+ "delete_distinct_url_count": 0
+ },
+ "new": [],
+ "delete": [],
+ "docs": [
+ {
+ "path": "A0 登录界面/注销.bru",
+ "key": "POST /api/auth/logout",
+ "generated": true,
+ "folder": "A0 登录界面"
+ },
+ {
+ "path": "A0 登录界面/确认顶号登录.bru",
+ "key": "POST /api/auth/login/dingtalk/confirm",
+ "generated": true,
+ "folder": "A0 登录界面"
+ },
+ {
+ "path": "A0 登录界面/获取当前用户信息.bru",
+ "key": "GET /api/auth/me",
+ "generated": true,
+ "folder": "A0 登录界面"
+ },
+ {
+ "path": "A0 登录界面/菜单树.bru",
+ "key": "GET /api/system/menus/tree",
+ "generated": true,
+ "folder": "A0 登录界面"
+ },
+ {
+ "path": "A0 登录界面/钉钉登录.bru",
+ "key": "POST /api/auth/login/dingtalk",
+ "generated": true,
+ "folder": "A0 登录界面"
+ },
+ {
+ "path": "A2 线索管理/我的关注/保存列偏好.bru",
+ "key": "POST /api/preference/save",
+ "generated": true,
+ "folder": "我的关注"
+ },
+ {
+ "path": "A2 线索管理/我的关注/历史记录.bru",
+ "key": "GET /api/lead/history",
+ "generated": true,
+ "folder": "我的关注"
+ },
+ {
+ "path": "A2 线索管理/我的关注/取消关注.bru",
+ "key": "POST /api/lead/unfollow",
+ "generated": true,
+ "folder": "我的关注"
+ },
+ {
+ "path": "A2 线索管理/我的关注/批量取关.bru",
+ "key": "POST /api/lead/unfollow-batch",
+ "generated": true,
+ "folder": "我的关注"
+ },
+ {
+ "path": "A2 线索管理/我的关注/批量领取.bru",
+ "key": "POST /api/lead/claim-batch",
+ "generated": true,
+ "folder": "我的关注"
+ },
+ {
+ "path": "A2 线索管理/我的关注/线索分页.bru",
+ "key": "POST /api/lead/page",
+ "generated": true,
+ "folder": "我的关注"
+ },
+ {
+ "path": "A2 线索管理/我的关注/线索详情.bru",
+ "key": "GET /api/lead/detail",
+ "generated": true,
+ "folder": "我的关注"
+ },
+ {
+ "path": "A2 线索管理/我的关注/视图统计卡片.bru",
+ "key": "POST /api/lead/stats",
+ "generated": true,
+ "folder": "我的关注"
+ },
+ {
+ "path": "A2 线索管理/我的关注/读取列偏好.bru",
+ "key": "GET /api/preference/get",
+ "generated": true,
+ "folder": "我的关注"
+ },
+ {
+ "path": "A2 线索管理/我的关注/领取线索.bru",
+ "key": "POST /api/lead/claim",
+ "generated": true,
+ "folder": "我的关注"
+ },
+ {
+ "path": "A2 线索管理/我的线索/保存列偏好.bru",
+ "key": "POST /api/preference/save",
+ "generated": true,
+ "folder": "我的线索"
+ },
+ {
+ "path": "A2 线索管理/我的线索/保存反馈草稿.bru",
+ "key": "POST /api/lead/feedback-draft",
+ "generated": true,
+ "folder": "我的线索"
+ },
+ {
+ "path": "A2 线索管理/我的线索/删除线索.bru",
+ "key": "POST /api/lead/delete",
+ "generated": true,
+ "folder": "我的线索"
+ },
+ {
+ "path": "A2 线索管理/我的线索/历史记录.bru",
+ "key": "GET /api/lead/history",
+ "generated": true,
+ "folder": "我的线索"
+ },
+ {
+ "path": "A2 线索管理/我的线索/批量释放.bru",
+ "key": "POST /api/lead/release-batch",
+ "generated": true,
+ "folder": "我的线索"
+ },
+ {
+ "path": "A2 线索管理/我的线索/提交反馈.bru",
+ "key": "POST /api/lead/feedback-submit",
+ "generated": true,
+ "folder": "我的线索"
+ },
+ {
+ "path": "A2 线索管理/我的线索/新建线索.bru",
+ "key": "POST /api/lead/create",
+ "generated": true,
+ "folder": "我的线索"
+ },
+ {
+ "path": "A2 线索管理/我的线索/线索分页.bru",
+ "key": "POST /api/lead/page",
+ "generated": true,
+ "folder": "我的线索"
+ },
+ {
+ "path": "A2 线索管理/我的线索/线索详情.bru",
+ "key": "GET /api/lead/detail",
+ "generated": true,
+ "folder": "我的线索"
+ },
+ {
+ "path": "A2 线索管理/我的线索/编辑线索.bru",
+ "key": "POST /api/lead/edit",
+ "generated": true,
+ "folder": "我的线索"
+ },
+ {
+ "path": "A2 线索管理/我的线索/视图统计卡片.bru",
+ "key": "POST /api/lead/stats",
+ "generated": true,
+ "folder": "我的线索"
+ },
+ {
+ "path": "A2 线索管理/我的线索/读取列偏好.bru",
+ "key": "GET /api/preference/get",
+ "generated": true,
+ "folder": "我的线索"
+ },
+ {
+ "path": "A2 线索管理/我的线索/转商机.bru",
+ "key": "POST /api/lead/convert",
+ "generated": true,
+ "folder": "我的线索"
+ },
+ {
+ "path": "A2 线索管理/我的线索/释放线索.bru",
+ "key": "POST /api/lead/release",
+ "generated": true,
+ "folder": "我的线索"
+ },
+ {
+ "path": "A2 线索管理/线索公海/保存列偏好.bru",
+ "key": "POST /api/preference/save",
+ "generated": true,
+ "folder": "线索公海"
+ },
+ {
+ "path": "A2 线索管理/线索公海/关注线索.bru",
+ "key": "POST /api/lead/follow",
+ "generated": true,
+ "folder": "线索公海"
+ },
+ {
+ "path": "A2 线索管理/线索公海/历史记录.bru",
+ "key": "GET /api/lead/history",
+ "generated": true,
+ "folder": "线索公海"
+ },
+ {
+ "path": "A2 线索管理/线索公海/取消关注.bru",
+ "key": "POST /api/lead/unfollow",
+ "generated": true,
+ "folder": "线索公海"
+ },
+ {
+ "path": "A2 线索管理/线索公海/批量关注.bru",
+ "key": "POST /api/lead/follow-batch",
+ "generated": true,
+ "folder": "线索公海"
+ },
+ {
+ "path": "A2 线索管理/线索公海/批量领取.bru",
+ "key": "POST /api/lead/claim-batch",
+ "generated": true,
+ "folder": "线索公海"
+ },
+ {
+ "path": "A2 线索管理/线索公海/线索分页.bru",
+ "key": "POST /api/lead/page",
+ "generated": true,
+ "folder": "线索公海"
+ },
+ {
+ "path": "A2 线索管理/线索公海/线索详情.bru",
+ "key": "GET /api/lead/detail",
+ "generated": true,
+ "folder": "线索公海"
+ },
+ {
+ "path": "A2 线索管理/线索公海/视图统计卡片.bru",
+ "key": "POST /api/lead/stats",
+ "generated": true,
+ "folder": "线索公海"
+ },
+ {
+ "path": "A2 线索管理/线索公海/读取列偏好.bru",
+ "key": "GET /api/preference/get",
+ "generated": true,
+ "folder": "线索公海"
+ },
+ {
+ "path": "A2 线索管理/线索公海/释放线索.bru",
+ "key": "POST /api/lead/release",
+ "generated": true,
+ "folder": "线索公海"
+ },
+ {
+ "path": "A2 线索管理/线索公海/领取线索.bru",
+ "key": "POST /api/lead/claim",
+ "generated": true,
+ "folder": "线索公海"
+ },
+ {
+ "path": "A2 线索管理/线索管理/保存列偏好.bru",
+ "key": "POST /api/preference/save",
+ "generated": true,
+ "folder": "线索管理"
+ },
+ {
+ "path": "A2 线索管理/线索管理/分配线索到池.bru",
+ "key": "POST /api/lead/assign-pool",
+ "generated": true,
+ "folder": "线索管理"
+ },
+ {
+ "path": "A2 线索管理/线索管理/分配线索到销售.bru",
+ "key": "POST /api/lead/assign-user",
+ "generated": true,
+ "folder": "线索管理"
+ },
+ {
+ "path": "A2 线索管理/线索管理/删除线索.bru",
+ "key": "POST /api/lead/delete",
+ "generated": true,
+ "folder": "线索管理"
+ },
+ {
+ "path": "A2 线索管理/线索管理/历史记录.bru",
+ "key": "GET /api/lead/history",
+ "generated": true,
+ "folder": "线索管理"
+ },
+ {
+ "path": "A2 线索管理/线索管理/批量分配到池.bru",
+ "key": "POST /api/lead/assign-pool-batch",
+ "generated": true,
+ "folder": "线索管理"
+ },
+ {
+ "path": "A2 线索管理/线索管理/批量分配到销售.bru",
+ "key": "POST /api/lead/assign-user-batch",
+ "generated": true,
+ "folder": "线索管理"
+ },
+ {
+ "path": "A2 线索管理/线索管理/批量删除.bru",
+ "key": "POST /api/lead/delete-batch",
+ "generated": true,
+ "folder": "线索管理"
+ },
+ {
+ "path": "A2 线索管理/线索管理/批量激活.bru",
+ "key": "POST /api/lead/activate-batch",
+ "generated": true,
+ "folder": "线索管理"
+ },
+ {
+ "path": "A2 线索管理/线索管理/新建线索.bru",
+ "key": "POST /api/lead/create",
+ "generated": true,
+ "folder": "线索管理"
+ },
+ {
+ "path": "A2 线索管理/线索管理/激活线索.bru",
+ "key": "POST /api/lead/activate",
+ "generated": true,
+ "folder": "线索管理"
+ },
+ {
+ "path": "A2 线索管理/线索管理/线索分页.bru",
+ "key": "POST /api/lead/page",
+ "generated": true,
+ "folder": "线索管理"
+ },
+ {
+ "path": "A2 线索管理/线索管理/线索详情.bru",
+ "key": "GET /api/lead/detail",
+ "generated": true,
+ "folder": "线索管理"
+ },
+ {
+ "path": "A2 线索管理/线索管理/视图统计卡片.bru",
+ "key": "POST /api/lead/stats",
+ "generated": true,
+ "folder": "线索管理"
+ },
+ {
+ "path": "A2 线索管理/线索管理/读取列偏好.bru",
+ "key": "GET /api/preference/get",
+ "generated": true,
+ "folder": "线索管理"
+ },
+ {
+ "path": "A2 线索管理/线索设置/公海池分页列表.bru",
+ "key": "POST /api/rule/pool/page",
+ "generated": true,
+ "folder": "线索设置"
+ },
+ {
+ "path": "A2 线索管理/线索设置/公海池详情.bru",
+ "key": "GET /api/rule/pool/detail",
+ "generated": true,
+ "folder": "线索设置"
+ },
+ {
+ "path": "A2 线索管理/线索设置/删除公海池.bru",
+ "key": "POST /api/rule/pool/delete",
+ "generated": true,
+ "folder": "线索设置"
+ },
+ {
+ "path": "A2 线索管理/线索设置/批量删除公海池.bru",
+ "key": "POST /api/rule/pool/delete-batch",
+ "generated": true,
+ "folder": "线索设置"
+ },
+ {
+ "path": "A2 线索管理/线索设置/新建编辑公海池.bru",
+ "key": "POST /api/rule/pool/saveOrUpdate",
+ "generated": true,
+ "folder": "线索设置"
+ },
+ {
+ "path": "A3 商机管理/商机公海/保存列偏好.bru",
+ "key": "POST /api/preference/save",
+ "generated": true,
+ "folder": "商机公海"
+ },
+ {
+ "path": "A3 商机管理/商机公海/保存视图形态.bru",
+ "key": "POST /api/preference/view-form/save",
+ "generated": true,
+ "folder": "商机公海"
+ },
+ {
+ "path": "A3 商机管理/商机公海/商机分页.bru",
+ "key": "POST /api/opportunity/page",
+ "generated": true,
+ "folder": "商机公海"
+ },
+ {
+ "path": "A3 商机管理/商机公海/读取列偏好.bru",
+ "key": "GET /api/preference/get",
+ "generated": true,
+ "folder": "商机公海"
+ },
+ {
+ "path": "A3 商机管理/商机公海/读取视图形态.bru",
+ "key": "GET /api/preference/view-form/get",
+ "generated": true,
+ "folder": "商机公海"
+ },
+ {
+ "path": "A3 商机管理/商机公海/看板列表/看板阶段卡片.bru",
+ "key": "POST /api/opportunity/board/cards",
+ "generated": true,
+ "folder": "看板列表"
+ },
+ {
+ "path": "A3 商机管理/商机公海/看板列表/看板阶段汇总.bru",
+ "key": "POST /api/opportunity/board/stage-summary",
+ "generated": true,
+ "folder": "看板列表"
+ },
+ {
+ "path": "A3 商机管理/商机管理/保存列偏好.bru",
+ "key": "POST /api/preference/save",
+ "generated": true,
+ "folder": "商机管理"
+ },
+ {
+ "path": "A3 商机管理/商机管理/保存视图形态.bru",
+ "key": "POST /api/preference/view-form/save",
+ "generated": true,
+ "folder": "商机管理"
+ },
+ {
+ "path": "A3 商机管理/商机管理/商机分页.bru",
+ "key": "POST /api/opportunity/page",
+ "generated": true,
+ "folder": "商机管理"
+ },
+ {
+ "path": "A3 商机管理/商机管理/读取列偏好.bru",
+ "key": "GET /api/preference/get",
+ "generated": true,
+ "folder": "商机管理"
+ },
+ {
+ "path": "A3 商机管理/商机管理/读取视图形态.bru",
+ "key": "GET /api/preference/view-form/get",
+ "generated": true,
+ "folder": "商机管理"
+ },
+ {
+ "path": "A3 商机管理/商机管理/看板列表/看板阶段卡片.bru",
+ "key": "POST /api/opportunity/board/cards",
+ "generated": true,
+ "folder": "看板列表"
+ },
+ {
+ "path": "A3 商机管理/商机管理/看板列表/看板阶段汇总.bru",
+ "key": "POST /api/opportunity/board/stage-summary",
+ "generated": true,
+ "folder": "看板列表"
+ },
+ {
+ "path": "A3 商机管理/商机详情/主体/上报访问.bru",
+ "key": "POST /api/opportunity/view-touch",
+ "generated": true,
+ "folder": "主体"
+ },
+ {
+ "path": "A3 商机管理/商机详情/主体/关注商机.bru",
+ "key": "POST /api/opportunity/focus",
+ "generated": true,
+ "folder": "主体"
+ },
+ {
+ "path": "A3 商机管理/商机详情/主体/切换阶段.bru",
+ "key": "POST /api/opportunity/stage/switch",
+ "generated": true,
+ "folder": "主体"
+ },
+ {
+ "path": "A3 商机管理/商机详情/主体/取关商机.bru",
+ "key": "POST /api/opportunity/unfocus",
+ "generated": true,
+ "folder": "主体"
+ },
+ {
+ "path": "A3 商机管理/商机详情/主体/商机详情.bru",
+ "key": "GET /api/opportunity/detail",
+ "generated": true,
+ "folder": "主体"
+ },
+ {
+ "path": "A3 商机管理/商机详情/主体/批量关注.bru",
+ "key": "POST /api/opportunity/focus-batch",
+ "generated": true,
+ "folder": "主体"
+ },
+ {
+ "path": "A3 商机管理/商机详情/主体/编辑商机.bru",
+ "key": "POST /api/opportunity/edit",
+ "generated": true,
+ "folder": "主体"
+ },
+ {
+ "path": "A3 商机管理/商机详情/主体/阶段推进历史.bru",
+ "key": "GET /api/opportunity/stage/history",
+ "generated": true,
+ "folder": "主体"
+ },
+ {
+ "path": "A3 商机管理/商机详情/主体/阶段推进指引.bru",
+ "key": "GET /api/opportunity/stage/progress",
+ "generated": true,
+ "folder": "主体"
+ },
+ {
+ "path": "A3 商机管理/商机详情/勘察/删除勘察.bru",
+ "key": "POST /api/opportunity/site-survey/delete",
+ "generated": true,
+ "folder": "勘察"
+ },
+ {
+ "path": "A3 商机管理/商机详情/勘察/勘察分页.bru",
+ "key": "POST /api/opportunity/site-survey/page",
+ "generated": true,
+ "folder": "勘察"
+ },
+ {
+ "path": "A3 商机管理/商机详情/勘察/新增勘察.bru",
+ "key": "POST /api/opportunity/site-survey/add",
+ "generated": true,
+ "folder": "勘察"
+ },
+ {
+ "path": "A3 商机管理/商机详情/团队/团队成员列表.bru",
+ "key": "GET /api/opportunity/team/list",
+ "generated": true,
+ "folder": "团队"
+ },
+ {
+ "path": "A3 商机管理/商机详情/团队/批量添加团队成员.bru",
+ "key": "POST /api/opportunity/team/add",
+ "generated": true,
+ "folder": "团队"
+ },
+ {
+ "path": "A3 商机管理/商机详情/团队/移除团队成员.bru",
+ "key": "POST /api/opportunity/team/delete",
+ "generated": true,
+ "folder": "团队"
+ },
+ {
+ "path": "A3 商机管理/商机详情/团队/编辑团队成员.bru",
+ "key": "POST /api/opportunity/team/update",
+ "generated": true,
+ "folder": "团队"
+ },
+ {
+ "path": "A3 商机管理/商机详情/客户/候选客户搜索.bru",
+ "key": "POST /api/opportunity/customer/search",
+ "generated": true,
+ "folder": "客户"
+ },
+ {
+ "path": "A3 商机管理/商机详情/客户/客户列表.bru",
+ "key": "GET /api/opportunity/customer/list",
+ "generated": true,
+ "folder": "客户"
+ },
+ {
+ "path": "A3 商机管理/商机详情/客户/按客户查联系人.bru",
+ "key": "GET /api/opportunity/customer/contacts",
+ "generated": true,
+ "folder": "客户"
+ },
+ {
+ "path": "A3 商机管理/商机详情/客户/添加关联客户.bru",
+ "key": "POST /api/opportunity/customer/add",
+ "generated": true,
+ "folder": "客户"
+ },
+ {
+ "path": "A3 商机管理/商机详情/客户/设为主要意向客户.bru",
+ "key": "POST /api/opportunity/customer/set-primary",
+ "generated": true,
+ "folder": "客户"
+ },
+ {
+ "path": "A3 商机管理/商机详情/工作计划/删除工作计划.bru",
+ "key": "POST /api/opportunity/workplan/delete",
+ "generated": true,
+ "folder": "工作计划"
+ },
+ {
+ "path": "A3 商机管理/商机详情/工作计划/工作计划列表.bru",
+ "key": "GET /api/opportunity/workplan/list",
+ "generated": true,
+ "folder": "工作计划"
+ },
+ {
+ "path": "A3 商机管理/商机详情/工作计划/新增工作计划.bru",
+ "key": "POST /api/opportunity/workplan/add",
+ "generated": true,
+ "folder": "工作计划"
+ },
+ {
+ "path": "A3 商机管理/商机详情/工作计划/编辑工作计划.bru",
+ "key": "POST /api/opportunity/workplan/update",
+ "generated": true,
+ "folder": "工作计划"
+ },
+ {
+ "path": "A3 商机管理/商机详情/方案卡/保存方案卡.bru",
+ "key": "POST /api/opportunity/scheme-card/save",
+ "generated": true,
+ "folder": "方案卡"
+ },
+ {
+ "path": "A3 商机管理/商机详情/方案卡/可选模板版本.bru",
+ "key": "GET /api/opportunity/scheme-card/selectable-templates",
+ "generated": true,
+ "folder": "方案卡"
+ },
+ {
+ "path": "A3 商机管理/商机详情/方案卡/提交方案卡.bru",
+ "key": "POST /api/opportunity/scheme-card/submit",
+ "generated": true,
+ "folder": "方案卡"
+ },
+ {
+ "path": "A3 商机管理/商机详情/方案卡/方案卡列表.bru",
+ "key": "GET /api/opportunity/scheme-card/list",
+ "generated": true,
+ "folder": "方案卡"
+ },
+ {
+ "path": "A3 商机管理/商机详情/方案卡/方案卡详情.bru",
+ "key": "GET /api/opportunity/scheme-card/detail",
+ "generated": true,
+ "folder": "方案卡"
+ },
+ {
+ "path": "A3 商机管理/商机详情/日志/操作日志分页.bru",
+ "key": "POST /api/opportunity/oplog/page",
+ "generated": true,
+ "folder": "日志"
+ },
+ {
+ "path": "A3 商机管理/商机详情/跟进/删除跟进.bru",
+ "key": "POST /api/opportunity/follow/delete",
+ "generated": true,
+ "folder": "跟进"
+ },
+ {
+ "path": "A3 商机管理/商机详情/跟进/新增跟进.bru",
+ "key": "POST /api/opportunity/follow/add",
+ "generated": true,
+ "folder": "跟进"
+ },
+ {
+ "path": "A3 商机管理/商机详情/跟进/跟进分页.bru",
+ "key": "POST /api/opportunity/follow/page",
+ "generated": true,
+ "folder": "跟进"
+ },
+ {
+ "path": "A3 商机管理/商机详情/附件/删除附件.bru",
+ "key": "POST /api/opportunity/attachment/delete",
+ "generated": true,
+ "folder": "附件"
+ },
+ {
+ "path": "A3 商机管理/商机详情/附件/新增附件.bru",
+ "key": "POST /api/opportunity/attachment/add",
+ "generated": true,
+ "folder": "附件"
+ },
+ {
+ "path": "A3 商机管理/商机详情/附件/附件列表.bru",
+ "key": "GET /api/opportunity/attachment/list",
+ "generated": true,
+ "folder": "附件"
+ },
+ {
+ "path": "A3 商机管理/新建商机/可关联线索下拉.bru",
+ "key": "GET /api/opportunity/convertible-leads",
+ "generated": true,
+ "folder": "新建商机"
+ },
+ {
+ "path": "A3 商机管理/新建商机/新建商机.bru",
+ "key": "POST /api/opportunity",
+ "generated": true,
+ "folder": "新建商机"
+ },
+ {
+ "path": "A3 商机管理/状态流转/关闭商机.bru",
+ "key": "POST /api/opportunity/close",
+ "generated": true,
+ "folder": "状态流转"
+ },
+ {
+ "path": "A3 商机管理/状态流转/分配商机.bru",
+ "key": "POST /api/opportunity/assign",
+ "generated": true,
+ "folder": "状态流转"
+ },
+ {
+ "path": "A3 商机管理/状态流转/取消暂缓.bru",
+ "key": "POST /api/opportunity/resume",
+ "generated": true,
+ "folder": "状态流转"
+ },
+ {
+ "path": "A3 商机管理/状态流转/批量关闭.bru",
+ "key": "POST /api/opportunity/close-batch",
+ "generated": true,
+ "folder": "状态流转"
+ },
+ {
+ "path": "A3 商机管理/状态流转/批量分配.bru",
+ "key": "POST /api/opportunity/assign-batch",
+ "generated": true,
+ "folder": "状态流转"
+ },
+ {
+ "path": "A3 商机管理/状态流转/批量领取.bru",
+ "key": "POST /api/opportunity/claim-batch",
+ "generated": true,
+ "folder": "状态流转"
+ },
+ {
+ "path": "A3 商机管理/状态流转/抛公海.bru",
+ "key": "POST /api/opportunity/release-pool",
+ "generated": true,
+ "folder": "状态流转"
+ },
+ {
+ "path": "A3 商机管理/状态流转/暂缓.bru",
+ "key": "POST /api/opportunity/pause",
+ "generated": true,
+ "folder": "状态流转"
+ },
+ {
+ "path": "A3 商机管理/状态流转/移交商机.bru",
+ "key": "POST /api/opportunity/handover",
+ "generated": true,
+ "folder": "状态流转"
+ },
+ {
+ "path": "A3 商机管理/状态流转/重启商机.bru",
+ "key": "POST /api/opportunity/reopen",
+ "generated": true,
+ "folder": "状态流转"
+ },
+ {
+ "path": "A3 商机管理/状态流转/领取商机.bru",
+ "key": "POST /api/opportunity/claim",
+ "generated": true,
+ "folder": "状态流转"
+ },
+ {
+ "path": "A3 商机管理/销售机会/保存列偏好.bru",
+ "key": "POST /api/preference/save",
+ "generated": true,
+ "folder": "销售机会"
+ },
+ {
+ "path": "A3 商机管理/销售机会/保存视图形态.bru",
+ "key": "POST /api/preference/view-form/save",
+ "generated": true,
+ "folder": "销售机会"
+ },
+ {
+ "path": "A3 商机管理/销售机会/商机侧客户搜索.bru",
+ "key": "POST /api/customer/search",
+ "generated": true,
+ "folder": "销售机会"
+ },
+ {
+ "path": "A3 商机管理/销售机会/商机分页.bru",
+ "key": "POST /api/opportunity/page",
+ "generated": true,
+ "folder": "销售机会"
+ },
+ {
+ "path": "A3 商机管理/销售机会/按客户查联系人列表.bru",
+ "key": "GET /api/customer/contacts",
+ "generated": true,
+ "folder": "销售机会"
+ },
+ {
+ "path": "A3 商机管理/销售机会/读取列偏好.bru",
+ "key": "GET /api/preference/get",
+ "generated": true,
+ "folder": "销售机会"
+ },
+ {
+ "path": "A3 商机管理/销售机会/读取视图形态.bru",
+ "key": "GET /api/preference/view-form/get",
+ "generated": true,
+ "folder": "销售机会"
+ },
+ {
+ "path": "A3 商机管理/销售机会/看板列表/看板阶段卡片.bru",
+ "key": "POST /api/opportunity/board/cards",
+ "generated": true,
+ "folder": "看板列表"
+ },
+ {
+ "path": "A3 商机管理/销售机会/看板列表/看板阶段汇总.bru",
+ "key": "POST /api/opportunity/board/stage-summary",
+ "generated": true,
+ "folder": "看板列表"
+ },
+ {
+ "path": "A3 商机管理/销售机会/自定义视图/保存自定义视图.bru",
+ "key": "POST /api/preference/view/save",
+ "generated": true,
+ "folder": "自定义视图"
+ },
+ {
+ "path": "A3 商机管理/销售机会/自定义视图/删除自定义视图.bru",
+ "key": "POST /api/preference/view/delete",
+ "generated": true,
+ "folder": "自定义视图"
+ },
+ {
+ "path": "A3 商机管理/销售机会/自定义视图/自定义视图列表.bru",
+ "key": "GET /api/preference/view/list",
+ "generated": true,
+ "folder": "自定义视图"
+ },
+ {
+ "path": "A3 商机管理/销售机会/自定义视图/设为默认视图.bru",
+ "key": "POST /api/preference/view/set-default",
+ "generated": true,
+ "folder": "自定义视图"
+ },
+ {
+ "path": "A4 客户管理/客户交割/交接记录分页.bru",
+ "key": "GET /api/customer/transfer/page",
+ "generated": true,
+ "folder": "客户交割"
+ },
+ {
+ "path": "A4 客户管理/客户交割/交接详情.bru",
+ "key": "GET /api/customer/transfer/detail",
+ "generated": true,
+ "folder": "客户交割"
+ },
+ {
+ "path": "A4 客户管理/客户交割/发起交接.bru",
+ "key": "POST /api/customer/transfer/initiate",
+ "generated": true,
+ "folder": "客户交割"
+ },
+ {
+ "path": "A4 客户管理/客户交割/发起前客户预览.bru",
+ "key": "GET /api/customer/transfer/preview",
+ "generated": true,
+ "folder": "客户交割"
+ },
+ {
+ "path": "A4 客户管理/客户交割/可分配销售列表.bru",
+ "key": "GET /api/customer/transfer/assignable",
+ "generated": true,
+ "folder": "客户交割"
+ },
+ {
+ "path": "A4 客户管理/客户交割/客户分配.bru",
+ "key": "POST /api/customer/transfer/assign",
+ "generated": true,
+ "folder": "客户交割"
+ },
+ {
+ "path": "A4 客户管理/客户公海/workspace 列表分页.bru",
+ "key": "POST /api/customer/workspace/page",
+ "generated": true,
+ "folder": "客户公海"
+ },
+ {
+ "path": "A4 客户管理/客户公海/上传导入文件并预校验.bru",
+ "key": "POST /api/customer/import/upload",
+ "generated": true,
+ "folder": "客户公海"
+ },
+ {
+ "path": "A4 客户管理/客户公海/下载导入模板.bru",
+ "key": "GET /api/customer/import/template",
+ "generated": true,
+ "folder": "客户公海"
+ },
+ {
+ "path": "A4 客户管理/客户公海/任务结果.bru",
+ "key": "GET /api/customer/import/result",
+ "generated": true,
+ "folder": "客户公海"
+ },
+ {
+ "path": "A4 客户管理/客户公海/保存列偏好.bru",
+ "key": "POST /api/preference/save",
+ "generated": true,
+ "folder": "客户公海"
+ },
+ {
+ "path": "A4 客户管理/客户公海/保存视图形态.bru",
+ "key": "POST /api/preference/view-form/save",
+ "generated": true,
+ "folder": "客户公海"
+ },
+ {
+ "path": "A4 客户管理/客户公海/关注客户.bru",
+ "key": "POST /api/customer/focus",
+ "generated": true,
+ "folder": "客户公海"
+ },
+ {
+ "path": "A4 客户管理/客户公海/分配客户.bru",
+ "key": "POST /api/customer/assign",
+ "generated": true,
+ "folder": "客户公海"
+ },
+ {
+ "path": "A4 客户管理/客户公海/取消关注客户.bru",
+ "key": "POST /api/customer/unfocus",
+ "generated": true,
+ "folder": "客户公海"
+ },
+ {
+ "path": "A4 客户管理/客户公海/失败疑似重复明细.bru",
+ "key": "GET /api/customer/import/failures",
+ "generated": true,
+ "folder": "客户公海"
+ },
+ {
+ "path": "A4 客户管理/客户公海/客户分页.bru",
+ "key": "POST /api/customer/page",
+ "generated": true,
+ "folder": "客户公海"
+ },
+ {
+ "path": "A4 客户管理/客户公海/归档客户.bru",
+ "key": "POST /api/customer/archive",
+ "generated": true,
+ "folder": "客户公海"
+ },
+ {
+ "path": "A4 客户管理/客户公海/恢复客户.bru",
+ "key": "POST /api/customer/restore",
+ "generated": true,
+ "folder": "客户公海"
+ },
+ {
+ "path": "A4 客户管理/客户公海/批量关注客户.bru",
+ "key": "POST /api/customer/focus-batch",
+ "generated": true,
+ "folder": "客户公海"
+ },
+ {
+ "path": "A4 客户管理/客户公海/批量分配.bru",
+ "key": "POST /api/customer/assign-batch",
+ "generated": true,
+ "folder": "客户公海"
+ },
+ {
+ "path": "A4 客户管理/客户公海/批量归档.bru",
+ "key": "POST /api/customer/archive-batch",
+ "generated": true,
+ "folder": "客户公海"
+ },
+ {
+ "path": "A4 客户管理/客户公海/批量抛公海.bru",
+ "key": "POST /api/customer/release-pool-batch",
+ "generated": true,
+ "folder": "客户公海"
+ },
+ {
+ "path": "A4 客户管理/客户公海/批量领取.bru",
+ "key": "POST /api/customer/claim-batch",
+ "generated": true,
+ "folder": "客户公海"
+ },
+ {
+ "path": "A4 客户管理/客户公海/抛公海.bru",
+ "key": "POST /api/customer/release-pool",
+ "generated": true,
+ "folder": "客户公海"
+ },
+ {
+ "path": "A4 客户管理/客户公海/最近导入记录.bru",
+ "key": "GET /api/customer/import/page",
+ "generated": true,
+ "folder": "客户公海"
+ },
+ {
+ "path": "A4 客户管理/客户公海/确认执行导入.bru",
+ "key": "POST /api/customer/import/confirm",
+ "generated": true,
+ "folder": "客户公海"
+ },
+ {
+ "path": "A4 客户管理/客户公海/读取列偏好.bru",
+ "key": "GET /api/preference/get",
+ "generated": true,
+ "folder": "客户公海"
+ },
+ {
+ "path": "A4 客户管理/客户公海/读取视图形态.bru",
+ "key": "GET /api/preference/view-form/get",
+ "generated": true,
+ "folder": "客户公海"
+ },
+ {
+ "path": "A4 客户管理/客户公海/领取客户.bru",
+ "key": "POST /api/customer/claim",
+ "generated": true,
+ "folder": "客户公海"
+ },
+ {
+ "path": "A4 客户管理/客户总览/workspace 列表分页.bru",
+ "key": "POST /api/customer/workspace/page",
+ "generated": true,
+ "folder": "客户总览"
+ },
+ {
+ "path": "A4 客户管理/客户总览/保存列偏好.bru",
+ "key": "POST /api/preference/save",
+ "generated": true,
+ "folder": "客户总览"
+ },
+ {
+ "path": "A4 客户管理/客户总览/保存视图形态.bru",
+ "key": "POST /api/preference/view-form/save",
+ "generated": true,
+ "folder": "客户总览"
+ },
+ {
+ "path": "A4 客户管理/客户总览/分配客户.bru",
+ "key": "POST /api/customer/assign",
+ "generated": true,
+ "folder": "客户总览"
+ },
+ {
+ "path": "A4 客户管理/客户总览/客户分页.bru",
+ "key": "POST /api/customer/page",
+ "generated": true,
+ "folder": "客户总览"
+ },
+ {
+ "path": "A4 客户管理/客户总览/归档客户.bru",
+ "key": "POST /api/customer/archive",
+ "generated": true,
+ "folder": "客户总览"
+ },
+ {
+ "path": "A4 客户管理/客户总览/恢复客户.bru",
+ "key": "POST /api/customer/restore",
+ "generated": true,
+ "folder": "客户总览"
+ },
+ {
+ "path": "A4 客户管理/客户总览/批量分配.bru",
+ "key": "POST /api/customer/assign-batch",
+ "generated": true,
+ "folder": "客户总览"
+ },
+ {
+ "path": "A4 客户管理/客户总览/批量归档.bru",
+ "key": "POST /api/customer/archive-batch",
+ "generated": true,
+ "folder": "客户总览"
+ },
+ {
+ "path": "A4 客户管理/客户总览/批量抛公海.bru",
+ "key": "POST /api/customer/release-pool-batch",
+ "generated": true,
+ "folder": "客户总览"
+ },
+ {
+ "path": "A4 客户管理/客户总览/批量领取.bru",
+ "key": "POST /api/customer/claim-batch",
+ "generated": true,
+ "folder": "客户总览"
+ },
+ {
+ "path": "A4 客户管理/客户总览/抛公海.bru",
+ "key": "POST /api/customer/release-pool",
+ "generated": true,
+ "folder": "客户总览"
+ },
+ {
+ "path": "A4 客户管理/客户总览/读取列偏好.bru",
+ "key": "GET /api/preference/get",
+ "generated": true,
+ "folder": "客户总览"
+ },
+ {
+ "path": "A4 客户管理/客户总览/读取视图形态.bru",
+ "key": "GET /api/preference/view-form/get",
+ "generated": true,
+ "folder": "客户总览"
+ },
+ {
+ "path": "A4 客户管理/客户总览/领取客户.bru",
+ "key": "POST /api/customer/claim",
+ "generated": true,
+ "folder": "客户总览"
+ },
+ {
+ "path": "A4 客户管理/客户总览/看板列表/看板分组汇总.bru",
+ "key": "POST /api/customer/workspace/board/summary",
+ "generated": true,
+ "folder": "看板列表"
+ },
+ {
+ "path": "A4 客户管理/客户总览/看板列表/看板单列卡片.bru",
+ "key": "POST /api/customer/workspace/board/cards",
+ "generated": true,
+ "folder": "看板列表"
+ },
+ {
+ "path": "A4 客户管理/客户查重/信用代码查重.bru",
+ "key": "GET /api/customer/check-credit-code",
+ "generated": true,
+ "folder": "客户查重"
+ },
+ {
+ "path": "A4 客户管理/客户查重/名称相似提示.bru",
+ "key": "GET /api/customer/check-name",
+ "generated": true,
+ "folder": "客户查重"
+ },
+ {
+ "path": "A4 客户管理/客户详情/取消重点标记.bru",
+ "key": "POST /api/customer/unstar",
+ "generated": true,
+ "folder": "客户详情"
+ },
+ {
+ "path": "A4 客户管理/客户详情/客户详情.bru",
+ "key": "GET /api/customer/detail",
+ "generated": true,
+ "folder": "客户详情"
+ },
+ {
+ "path": "A4 客户管理/客户详情/标记重点客户.bru",
+ "key": "POST /api/customer/star",
+ "generated": true,
+ "folder": "客户详情"
+ },
+ {
+ "path": "A4 客户管理/客户详情/编辑客户.bru",
+ "key": "POST /api/customer/edit",
+ "generated": true,
+ "folder": "客户详情"
+ },
+ {
+ "path": "A4 客户管理/客户详情/详情公共头部.bru",
+ "key": "GET /api/customer/detail-head",
+ "generated": true,
+ "folder": "客户详情"
+ },
+ {
+ "path": "A4 客户管理/客户详情/关联商机/关联商机页签.bru",
+ "key": "GET /api/customer/opportunity/page",
+ "generated": true,
+ "folder": "关联商机"
+ },
+ {
+ "path": "A4 客户管理/客户详情/团队成员/团队成员页签.bru",
+ "key": "GET /api/customer/member/list",
+ "generated": true,
+ "folder": "团队成员"
+ },
+ {
+ "path": "A4 客户管理/客户详情/团队成员/添加团队成员.bru",
+ "key": "POST /api/customer/member/add",
+ "generated": true,
+ "folder": "团队成员"
+ },
+ {
+ "path": "A4 客户管理/客户详情/团队成员/移除团队成员.bru",
+ "key": "POST /api/customer/member/remove",
+ "generated": true,
+ "folder": "团队成员"
+ },
+ {
+ "path": "A4 客户管理/客户详情/操作日志/操作日志分页.bru",
+ "key": "GET /api/customer/oplog/page",
+ "generated": true,
+ "folder": "操作日志"
+ },
+ {
+ "path": "A4 客户管理/客户详情/跟进记录/新增跟进.bru",
+ "key": "POST /api/customer/follow/add",
+ "generated": true,
+ "folder": "跟进记录"
+ },
+ {
+ "path": "A4 客户管理/客户详情/跟进记录/跟进记录分页.bru",
+ "key": "GET /api/customer/follow/page",
+ "generated": true,
+ "folder": "跟进记录"
+ },
+ {
+ "path": "A4 客户管理/我的客户/workspace 列表分页.bru",
+ "key": "POST /api/customer/workspace/page",
+ "generated": true,
+ "folder": "我的客户"
+ },
+ {
+ "path": "A4 客户管理/我的客户/保存列偏好.bru",
+ "key": "POST /api/preference/save",
+ "generated": true,
+ "folder": "我的客户"
+ },
+ {
+ "path": "A4 客户管理/我的客户/保存视图形态.bru",
+ "key": "POST /api/preference/view-form/save",
+ "generated": true,
+ "folder": "我的客户"
+ },
+ {
+ "path": "A4 客户管理/我的客户/分配客户.bru",
+ "key": "POST /api/customer/assign",
+ "generated": true,
+ "folder": "我的客户"
+ },
+ {
+ "path": "A4 客户管理/我的客户/客户分页.bru",
+ "key": "POST /api/customer/page",
+ "generated": true,
+ "folder": "我的客户"
+ },
+ {
+ "path": "A4 客户管理/我的客户/工商信息查询.bru",
+ "key": "GET /api/customer/company-lookup",
+ "generated": true,
+ "folder": "我的客户"
+ },
+ {
+ "path": "A4 客户管理/我的客户/归档客户.bru",
+ "key": "POST /api/customer/archive",
+ "generated": true,
+ "folder": "我的客户"
+ },
+ {
+ "path": "A4 客户管理/我的客户/快速创建客户.bru",
+ "key": "POST /api/customer/quick-create",
+ "generated": true,
+ "folder": "我的客户"
+ },
+ {
+ "path": "A4 客户管理/我的客户/恢复客户.bru",
+ "key": "POST /api/customer/restore",
+ "generated": true,
+ "folder": "我的客户"
+ },
+ {
+ "path": "A4 客户管理/我的客户/批量分配.bru",
+ "key": "POST /api/customer/assign-batch",
+ "generated": true,
+ "folder": "我的客户"
+ },
+ {
+ "path": "A4 客户管理/我的客户/批量归档.bru",
+ "key": "POST /api/customer/archive-batch",
+ "generated": true,
+ "folder": "我的客户"
+ },
+ {
+ "path": "A4 客户管理/我的客户/批量抛公海.bru",
+ "key": "POST /api/customer/release-pool-batch",
+ "generated": true,
+ "folder": "我的客户"
+ },
+ {
+ "path": "A4 客户管理/我的客户/批量更新工商信息.bru",
+ "key": "POST /api/customer/company-lookup/batch-update",
+ "generated": true,
+ "folder": "我的客户"
+ },
+ {
+ "path": "A4 客户管理/我的客户/批量领取.bru",
+ "key": "POST /api/customer/claim-batch",
+ "generated": true,
+ "folder": "我的客户"
+ },
+ {
+ "path": "A4 客户管理/我的客户/抛公海.bru",
+ "key": "POST /api/customer/release-pool",
+ "generated": true,
+ "folder": "我的客户"
+ },
+ {
+ "path": "A4 客户管理/我的客户/新增客户.bru",
+ "key": "POST /api/customer/create",
+ "generated": true,
+ "folder": "我的客户"
+ },
+ {
+ "path": "A4 客户管理/我的客户/编辑客户.bru",
+ "key": "POST /api/customer/edit",
+ "generated": true,
+ "folder": "我的客户"
+ },
+ {
+ "path": "A4 客户管理/我的客户/读取列偏好.bru",
+ "key": "GET /api/preference/get",
+ "generated": true,
+ "folder": "我的客户"
+ },
+ {
+ "path": "A4 客户管理/我的客户/读取视图形态.bru",
+ "key": "GET /api/preference/view-form/get",
+ "generated": true,
+ "folder": "我的客户"
+ },
+ {
+ "path": "A4 客户管理/我的客户/领取客户.bru",
+ "key": "POST /api/customer/claim",
+ "generated": true,
+ "folder": "我的客户"
+ },
+ {
+ "path": "A4 客户管理/我的客户/客户导入/上传导入文件并预校验.bru",
+ "key": "POST /api/customer/import/upload",
+ "generated": true,
+ "folder": "客户导入"
+ },
+ {
+ "path": "A4 客户管理/我的客户/客户导入/下载导入模板.bru",
+ "key": "GET /api/customer/import/template",
+ "generated": true,
+ "folder": "客户导入"
+ },
+ {
+ "path": "A4 客户管理/我的客户/客户导入/任务结果.bru",
+ "key": "GET /api/customer/import/result",
+ "generated": true,
+ "folder": "客户导入"
+ },
+ {
+ "path": "A4 客户管理/我的客户/客户导入/失败疑似重复明细.bru",
+ "key": "GET /api/customer/import/failures",
+ "generated": true,
+ "folder": "客户导入"
+ },
+ {
+ "path": "A4 客户管理/我的客户/客户导入/最近导入记录.bru",
+ "key": "GET /api/customer/import/page",
+ "generated": true,
+ "folder": "客户导入"
+ },
+ {
+ "path": "A4 客户管理/我的客户/客户导入/确认执行导入.bru",
+ "key": "POST /api/customer/import/confirm",
+ "generated": true,
+ "folder": "客户导入"
+ },
+ {
+ "path": "A4 客户管理/我的客户/看板列表/看板分组汇总.bru",
+ "key": "POST /api/customer/workspace/board/summary",
+ "generated": true,
+ "folder": "看板列表"
+ },
+ {
+ "path": "A4 客户管理/我的客户/看板列表/看板单列卡片.bru",
+ "key": "POST /api/customer/workspace/board/cards",
+ "generated": true,
+ "folder": "看板列表"
+ },
+ {
+ "path": "A4 客户管理/战略协议/删除战略协议.bru",
+ "key": "POST /api/customer/agreement/delete",
+ "generated": true,
+ "folder": "战略协议"
+ },
+ {
+ "path": "A4 客户管理/战略协议/战略协议详情.bru",
+ "key": "GET /api/customer/agreement/detail",
+ "generated": true,
+ "folder": "战略协议"
+ },
+ {
+ "path": "A4 客户管理/战略协议/战略协议页签列表.bru",
+ "key": "GET /api/customer/agreement/list",
+ "generated": true,
+ "folder": "战略协议"
+ },
+ {
+ "path": "A4 客户管理/战略协议/新增战略协议.bru",
+ "key": "POST /api/customer/agreement/create",
+ "generated": true,
+ "folder": "战略协议"
+ },
+ {
+ "path": "A4 客户管理/战略协议/编辑战略协议.bru",
+ "key": "POST /api/customer/agreement/edit",
+ "generated": true,
+ "folder": "战略协议"
+ },
+ {
+ "path": "A4 客户管理/联系人/保存列偏好.bru",
+ "key": "POST /api/preference/save",
+ "generated": true,
+ "folder": "联系人"
+ },
+ {
+ "path": "A4 客户管理/联系人/保存视图形态.bru",
+ "key": "POST /api/preference/view-form/save",
+ "generated": true,
+ "folder": "联系人"
+ },
+ {
+ "path": "A4 客户管理/联系人/删除联系人.bru",
+ "key": "POST /api/customer/contact/delete",
+ "generated": true,
+ "folder": "联系人"
+ },
+ {
+ "path": "A4 客户管理/联系人/新增联系人.bru",
+ "key": "POST /api/customer/contact/create",
+ "generated": true,
+ "folder": "联系人"
+ },
+ {
+ "path": "A4 客户管理/联系人/电话软提示.bru",
+ "key": "GET /api/customer/contact/check-phone",
+ "generated": true,
+ "folder": "联系人"
+ },
+ {
+ "path": "A4 客户管理/联系人/编辑联系人.bru",
+ "key": "POST /api/customer/contact/edit",
+ "generated": true,
+ "folder": "联系人"
+ },
+ {
+ "path": "A4 客户管理/联系人/联系人全局搜索.bru",
+ "key": "GET /api/customer/contact/search",
+ "generated": true,
+ "folder": "联系人"
+ },
+ {
+ "path": "A4 客户管理/联系人/联系人详情.bru",
+ "key": "GET /api/customer/contact/detail",
+ "generated": true,
+ "folder": "联系人"
+ },
+ {
+ "path": "A4 客户管理/联系人/读取列偏好.bru",
+ "key": "GET /api/preference/get",
+ "generated": true,
+ "folder": "联系人"
+ },
+ {
+ "path": "A4 客户管理/联系人/读取视图形态.bru",
+ "key": "GET /api/preference/view-form/get",
+ "generated": true,
+ "folder": "联系人"
+ },
+ {
+ "path": "A4 客户管理/联系人/顶级联系人列表.bru",
+ "key": "GET /api/customer/contact/page",
+ "generated": true,
+ "folder": "联系人"
+ },
+ {
+ "path": "A7 后台管理/商机规则/公海规则/保存公海规则草稿.bru",
+ "key": "POST /api/rule/opp-pool-rule/save-draft",
+ "generated": true,
+ "folder": "公海规则"
+ },
+ {
+ "path": "A7 后台管理/商机规则/公海规则/停用公海规则.bru",
+ "key": "POST /api/rule/opp-pool-rule/disable",
+ "generated": true,
+ "folder": "公海规则"
+ },
+ {
+ "path": "A7 后台管理/商机规则/公海规则/公海规则分页.bru",
+ "key": "POST /api/rule/opp-pool-rule/page",
+ "generated": true,
+ "folder": "公海规则"
+ },
+ {
+ "path": "A7 后台管理/商机规则/公海规则/公海规则版本列表.bru",
+ "key": "GET /api/rule/opp-pool-rule/versions",
+ "generated": true,
+ "folder": "公海规则"
+ },
+ {
+ "path": "A7 后台管理/商机规则/公海规则/公海规则详情.bru",
+ "key": "GET /api/rule/opp-pool-rule/detail",
+ "generated": true,
+ "folder": "公海规则"
+ },
+ {
+ "path": "A7 后台管理/商机规则/公海规则/删除公海规则.bru",
+ "key": "POST /api/rule/opp-pool-rule/delete",
+ "generated": true,
+ "folder": "公海规则"
+ },
+ {
+ "path": "A7 后台管理/商机规则/公海规则/发布公海规则.bru",
+ "key": "POST /api/rule/opp-pool-rule/publish",
+ "generated": true,
+ "folder": "公海规则"
+ },
+ {
+ "path": "A7 后台管理/商机规则/公海规则/复制公海规则.bru",
+ "key": "POST /api/rule/opp-pool-rule/copy",
+ "generated": true,
+ "folder": "公海规则"
+ },
+ {
+ "path": "A7 后台管理/商机规则/方案卡模板/保存方案卡模板草稿.bru",
+ "key": "POST /api/rule/opp-scheme-template/save-draft",
+ "generated": true,
+ "folder": "方案卡模板"
+ },
+ {
+ "path": "A7 后台管理/商机规则/方案卡模板/停用方案卡模板.bru",
+ "key": "POST /api/rule/opp-scheme-template/disable",
+ "generated": true,
+ "folder": "方案卡模板"
+ },
+ {
+ "path": "A7 后台管理/商机规则/方案卡模板/删除方案卡模板.bru",
+ "key": "POST /api/rule/opp-scheme-template/delete",
+ "generated": true,
+ "folder": "方案卡模板"
+ },
+ {
+ "path": "A7 后台管理/商机规则/方案卡模板/发布方案卡模板.bru",
+ "key": "POST /api/rule/opp-scheme-template/publish",
+ "generated": true,
+ "folder": "方案卡模板"
+ },
+ {
+ "path": "A7 后台管理/商机规则/方案卡模板/复制方案卡模板.bru",
+ "key": "POST /api/rule/opp-scheme-template/copy",
+ "generated": true,
+ "folder": "方案卡模板"
+ },
+ {
+ "path": "A7 后台管理/商机规则/方案卡模板/方案卡模板分页.bru",
+ "key": "POST /api/rule/opp-scheme-template/page",
+ "generated": true,
+ "folder": "方案卡模板"
+ },
+ {
+ "path": "A7 后台管理/商机规则/方案卡模板/方案卡模板版本列表.bru",
+ "key": "GET /api/rule/opp-scheme-template/versions",
+ "generated": true,
+ "folder": "方案卡模板"
+ },
+ {
+ "path": "A7 后台管理/商机规则/方案卡模板/方案卡模板详情.bru",
+ "key": "GET /api/rule/opp-scheme-template/detail",
+ "generated": true,
+ "folder": "方案卡模板"
+ },
+ {
+ "path": "A7 后台管理/商机规则/方案卡模板/系统字段库列表.bru",
+ "key": "GET /api/rule/opp-scheme-template/field-defs",
+ "generated": true,
+ "folder": "方案卡模板"
+ },
+ {
+ "path": "A7 后台管理/商机规则/阶段模板/保存阶段模板草稿.bru",
+ "key": "POST /api/rule/opp-stage-template/save-draft",
+ "generated": true,
+ "folder": "阶段模板"
+ },
+ {
+ "path": "A7 后台管理/商机规则/阶段模板/停用阶段模板.bru",
+ "key": "POST /api/rule/opp-stage-template/disable",
+ "generated": true,
+ "folder": "阶段模板"
+ },
+ {
+ "path": "A7 后台管理/商机规则/阶段模板/删除阶段模板.bru",
+ "key": "POST /api/rule/opp-stage-template/delete",
+ "generated": true,
+ "folder": "阶段模板"
+ },
+ {
+ "path": "A7 后台管理/商机规则/阶段模板/发布阶段模板.bru",
+ "key": "POST /api/rule/opp-stage-template/publish",
+ "generated": true,
+ "folder": "阶段模板"
+ },
+ {
+ "path": "A7 后台管理/商机规则/阶段模板/复制阶段模板.bru",
+ "key": "POST /api/rule/opp-stage-template/copy",
+ "generated": true,
+ "folder": "阶段模板"
+ },
+ {
+ "path": "A7 后台管理/商机规则/阶段模板/阶段模板分页.bru",
+ "key": "POST /api/rule/opp-stage-template/page",
+ "generated": true,
+ "folder": "阶段模板"
+ },
+ {
+ "path": "A7 后台管理/商机规则/阶段模板/阶段模板版本列表.bru",
+ "key": "GET /api/rule/opp-stage-template/versions",
+ "generated": true,
+ "folder": "阶段模板"
+ },
+ {
+ "path": "A7 后台管理/商机规则/阶段模板/阶段模板详情.bru",
+ "key": "GET /api/rule/opp-stage-template/detail",
+ "generated": true,
+ "folder": "阶段模板"
+ },
+ {
+ "path": "A7 后台管理/客户管理设置/查重设置/保存查重设置.bru",
+ "key": "POST /api/rule/customer/dedup/save",
+ "generated": true,
+ "folder": "查重设置"
+ },
+ {
+ "path": "A7 后台管理/客户管理设置/查重设置/读取查重设置.bru",
+ "key": "GET /api/rule/customer/dedup",
+ "generated": true,
+ "folder": "查重设置"
+ },
+ {
+ "path": "A7 后台管理/客户管理设置/超期未跟进提醒/保存提醒规则.bru",
+ "key": "POST /api/rule/customer/reminder/save",
+ "generated": true,
+ "folder": "超期未跟进提醒"
+ },
+ {
+ "path": "A7 后台管理/客户管理设置/超期未跟进提醒/当前提醒规则.bru",
+ "key": "GET /api/rule/customer/reminder",
+ "generated": true,
+ "folder": "超期未跟进提醒"
+ },
+ {
+ "path": "A7 后台管理/数据字典-分组/分组分页.bru",
+ "key": "POST /api/dict/group/page",
+ "generated": true,
+ "folder": "数据字典-分组"
+ },
+ {
+ "path": "A7 后台管理/数据字典-分组/分组启停.bru",
+ "key": "POST /api/dict/group/status",
+ "generated": true,
+ "folder": "数据字典-分组"
+ },
+ {
+ "path": "A7 后台管理/数据字典-分组/删除分组.bru",
+ "key": "POST /api/dict/group/delete",
+ "generated": true,
+ "folder": "数据字典-分组"
+ },
+ {
+ "path": "A7 后台管理/数据字典-分组/启用分组列表.bru",
+ "key": "GET /api/dict/group/enabled-list",
+ "generated": true,
+ "folder": "数据字典-分组"
+ },
+ {
+ "path": "A7 后台管理/数据字典-分组/新建编辑分组.bru",
+ "key": "POST /api/dict/group/saveOrUpdate",
+ "generated": true,
+ "folder": "数据字典-分组"
+ },
+ {
+ "path": "A7 后台管理/数据字典-字典项/删除字典项.bru",
+ "key": "POST /api/dict/item/delete",
+ "generated": true,
+ "folder": "数据字典-字典项"
+ },
+ {
+ "path": "A7 后台管理/数据字典-字典项/启用项列表.bru",
+ "key": "GET /api/dict/item/enabled-list",
+ "generated": true,
+ "folder": "数据字典-字典项"
+ },
+ {
+ "path": "A7 后台管理/数据字典-字典项/字典项分页.bru",
+ "key": "POST /api/dict/item/page",
+ "generated": true,
+ "folder": "数据字典-字典项"
+ },
+ {
+ "path": "A7 后台管理/数据字典-字典项/字典项启停.bru",
+ "key": "POST /api/dict/item/status",
+ "generated": true,
+ "folder": "数据字典-字典项"
+ },
+ {
+ "path": "A7 后台管理/数据字典-字典项/强制删除字典项.bru",
+ "key": "POST /api/dict/item/force-delete",
+ "generated": true,
+ "folder": "数据字典-字典项"
+ },
+ {
+ "path": "A7 后台管理/数据字典-字典项/新建编辑字典项.bru",
+ "key": "POST /api/dict/item/saveOrUpdate",
+ "generated": true,
+ "folder": "数据字典-字典项"
+ },
+ {
+ "path": "A7 后台管理/数据字典-字典项/设为默认项.bru",
+ "key": "POST /api/dict/item/set-default",
+ "generated": true,
+ "folder": "数据字典-字典项"
+ },
+ {
+ "path": "A7 后台管理/权限点管理/上传图标.bru",
+ "key": "POST /api/resources/icon/upload",
+ "generated": true,
+ "folder": "权限点管理"
+ },
+ {
+ "path": "A7 后台管理/权限点管理/删除资源节点.bru",
+ "key": "POST /api/resources/delete",
+ "generated": true,
+ "folder": "权限点管理"
+ },
+ {
+ "path": "A7 后台管理/权限点管理/新增编辑资源节点.bru",
+ "key": "POST /api/resources/saveOrUpdate",
+ "generated": true,
+ "folder": "权限点管理"
+ },
+ {
+ "path": "A7 后台管理/权限点管理/资源树列表.bru",
+ "key": "GET /api/resources/list",
+ "generated": true,
+ "folder": "权限点管理"
+ },
+ {
+ "path": "A7 后台管理/权限管理/角色管理/分配角色权限.bru",
+ "key": "POST /api/roles/assign-resources",
+ "generated": true,
+ "folder": "角色管理"
+ },
+ {
+ "path": "A7 后台管理/权限管理/角色管理/删除角色.bru",
+ "key": "POST /api/roles/delete",
+ "generated": true,
+ "folder": "角色管理"
+ },
+ {
+ "path": "A7 后台管理/权限管理/角色管理/可配数据权限模块.bru",
+ "key": "GET /api/data-scope/modules",
+ "generated": true,
+ "folder": "角色管理"
+ },
+ {
+ "path": "A7 后台管理/权限管理/角色管理/新增编辑角色.bru",
+ "key": "POST /api/roles/saveOrUpdate",
+ "generated": true,
+ "folder": "角色管理"
+ },
+ {
+ "path": "A7 后台管理/权限管理/角色管理/角色分页.bru",
+ "key": "POST /api/roles/page",
+ "generated": true,
+ "folder": "角色管理"
+ },
+ {
+ "path": "A7 后台管理/权限管理/角色管理/角色详情.bru",
+ "key": "GET /api/roles/detail",
+ "generated": true,
+ "folder": "角色管理"
+ },
+ {
+ "path": "A7 后台管理/用户管理/分配用户角色.bru",
+ "key": "POST /api/system/users/assign-roles",
+ "generated": true,
+ "folder": "用户管理"
+ },
+ {
+ "path": "A7 后台管理/用户管理/分配用户部门.bru",
+ "key": "POST /api/system/users/assign-depts",
+ "generated": true,
+ "folder": "用户管理"
+ },
+ {
+ "path": "A7 后台管理/用户管理/用户分页.bru",
+ "key": "POST /api/system/users/page",
+ "generated": true,
+ "folder": "用户管理"
+ },
+ {
+ "path": "A7 后台管理/用户管理/用户统计.bru",
+ "key": "GET /api/system/users/stats",
+ "generated": true,
+ "folder": "用户管理"
+ },
+ {
+ "path": "A7 后台管理/线索规则/公海池分页列表.bru",
+ "key": "POST /api/rule/pool/page",
+ "generated": true,
+ "folder": "线索规则"
+ },
+ {
+ "path": "A7 后台管理/线索规则/公海池详情.bru",
+ "key": "GET /api/rule/pool/detail",
+ "generated": true,
+ "folder": "线索规则"
+ },
+ {
+ "path": "A7 后台管理/线索规则/删除公海池.bru",
+ "key": "POST /api/rule/pool/delete",
+ "generated": true,
+ "folder": "线索规则"
+ },
+ {
+ "path": "A7 后台管理/线索规则/批量删除公海池.bru",
+ "key": "POST /api/rule/pool/delete-batch",
+ "generated": true,
+ "folder": "线索规则"
+ },
+ {
+ "path": "A7 后台管理/线索规则/新建编辑公海池.bru",
+ "key": "POST /api/rule/pool/saveOrUpdate",
+ "generated": true,
+ "folder": "线索规则"
+ },
+ {
+ "path": "A7 后台管理/运维/管理员角色配置.bru",
+ "key": "POST /api/system/users/admin-role",
+ "generated": true,
+ "folder": "运维"
+ },
+ {
+ "path": "A7 后台管理/运维/钉钉组织同步.bru",
+ "key": "POST /api/system/sync/dingtalk",
+ "generated": true,
+ "folder": "运维"
+ },
+ {
+ "path": "A7 后台管理/部门管理/保存部门.bru",
+ "key": "POST /api/system/depts/save",
+ "generated": true,
+ "folder": "部门管理"
+ },
+ {
+ "path": "A7 后台管理/部门管理/删除部门.bru",
+ "key": "POST /api/system/depts/delete",
+ "generated": true,
+ "folder": "部门管理"
+ },
+ {
+ "path": "A7 后台管理/部门管理/部门树.bru",
+ "key": "GET /api/system/depts/tree",
+ "generated": true,
+ "folder": "部门管理"
+ },
+ {
+ "path": "customer/ping/健康探针.bru",
+ "key": "GET /api/customer/ping",
+ "generated": true,
+ "folder": "ping"
+ },
+ {
+ "path": "公共依赖/文件/上传分片.bru",
+ "key": "POST /api/file/multipart/upload",
+ "generated": true,
+ "folder": "文件"
+ },
+ {
+ "path": "公共依赖/文件/下载文件.bru",
+ "key": "GET /api/file/download",
+ "generated": true,
+ "folder": "文件"
+ },
+ {
+ "path": "公共依赖/文件/分片初始化.bru",
+ "key": "POST /api/file/multipart/init",
+ "generated": true,
+ "folder": "文件"
+ },
+ {
+ "path": "公共依赖/文件/删除文件.bru",
+ "key": "POST /api/file/delete",
+ "generated": true,
+ "folder": "文件"
+ },
+ {
+ "path": "公共依赖/文件/完成分片.bru",
+ "key": "POST /api/file/multipart/complete",
+ "generated": true,
+ "folder": "文件"
+ },
+ {
+ "path": "公共依赖/文件/文件详情.bru",
+ "key": "GET /api/file/info",
+ "generated": true,
+ "folder": "文件"
+ },
+ {
+ "path": "公共依赖/文件/直传上传.bru",
+ "key": "POST /api/file/upload",
+ "generated": true,
+ "folder": "文件"
+ },
+ {
+ "path": "公共依赖/文件/缩略图.bru",
+ "key": "GET /api/file/thumbnail",
+ "generated": true,
+ "folder": "文件"
+ },
+ {
+ "path": "公共依赖/文件/预览地址.bru",
+ "key": "GET /api/file/preview-url",
+ "generated": true,
+ "folder": "文件"
+ },
+ {
+ "path": "公共依赖/行政区划/按上级查子区划.bru",
+ "key": "GET /api/rule/region/list",
+ "generated": true,
+ "folder": "行政区划"
+ },
+ {
+ "path": "公共依赖/行政区划/按层级查区划.bru",
+ "key": "GET /api/rule/region/level",
+ "generated": true,
+ "folder": "行政区划"
+ },
+ {
+ "path": "调试(验证专用)/签发调试token.bru",
+ "key": "GET /api/auth/debug/token",
+ "generated": true,
+ "folder": "调试(验证专用)"
+ }
+ ],
+ "apis": [
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/AuthController.java",
+ "className": "AuthController",
+ "http": "POST",
+ "url": "/api/auth/login/dingtalk",
+ "tags": [
+ "A0 登录界面"
+ ],
+ "summary": "钉钉登录(扫码/免登通用)"
+ },
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/AuthController.java",
+ "className": "AuthController",
+ "http": "POST",
+ "url": "/api/auth/login/dingtalk/confirm",
+ "tags": [
+ "A0 登录界面"
+ ],
+ "summary": "确认顶号登录(凭 preLoginToken 踢掉旧设备并完成登录)"
+ },
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/AuthController.java",
+ "className": "AuthController",
+ "http": "POST",
+ "url": "/api/auth/logout",
+ "tags": [
+ "A0 登录界面"
+ ],
+ "summary": "注销"
+ },
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/AuthController.java",
+ "className": "AuthController",
+ "http": "GET",
+ "url": "/api/auth/me",
+ "tags": [
+ "A0 登录界面"
+ ],
+ "summary": "获取当前登录用户信息"
+ },
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/DataScopeModuleController.java",
+ "className": "DataScopeModuleController",
+ "http": "GET",
+ "url": "/api/data-scope/modules",
+ "tags": [
+ "A7 后台管理/权限管理/角色管理"
+ ],
+ "summary": "列出可配数据权限模块"
+ },
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/DebugTokenController.java",
+ "className": "DebugTokenController",
+ "http": "GET",
+ "url": "/api/auth/debug/token",
+ "tags": [
+ "调试(验证专用)"
+ ],
+ "summary": "【验证专用】按 userId 签发 JWT"
+ },
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java",
+ "className": "ResourceController",
+ "http": "GET",
+ "url": "/api/resources/list",
+ "tags": [
+ "A7 后台管理/权限点管理"
+ ],
+ "summary": "获取权限资源树"
+ },
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java",
+ "className": "ResourceController",
+ "http": "POST",
+ "url": "/api/resources/saveOrUpdate",
+ "tags": [
+ "A7 后台管理/权限点管理"
+ ],
+ "summary": "新增编辑一级菜单/二级菜单/权限点"
+ },
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java",
+ "className": "ResourceController",
+ "http": "POST",
+ "url": "/api/resources/delete",
+ "tags": [
+ "A7 后台管理/权限点管理"
+ ],
+ "summary": "删除一级菜单/二级菜单/权限点"
+ },
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/ResourceController.java",
+ "className": "ResourceController",
+ "http": "POST",
+ "url": "/api/resources/icon/upload",
+ "tags": [
+ "A7 后台管理/权限点管理"
+ ],
+ "summary": "上传图标"
+ },
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/RoleController.java",
+ "className": "RoleController",
+ "http": "POST",
+ "url": "/api/roles/page",
+ "tags": [
+ "A7 后台管理/权限管理/角色管理"
+ ],
+ "summary": "分页查询角色"
+ },
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/RoleController.java",
+ "className": "RoleController",
+ "http": "POST",
+ "url": "/api/roles/saveOrUpdate",
+ "tags": [
+ "A7 后台管理/权限管理/角色管理"
+ ],
+ "summary": "新增或编辑角色"
+ },
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/RoleController.java",
+ "className": "RoleController",
+ "http": "GET",
+ "url": "/api/roles/detail",
+ "tags": [
+ "A7 后台管理/权限管理/角色管理"
+ ],
+ "summary": "角色详情(含授权资源集合 + 每模块档位)"
+ },
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/RoleController.java",
+ "className": "RoleController",
+ "http": "POST",
+ "url": "/api/roles/assign-resources",
+ "tags": [
+ "A7 后台管理/权限管理/角色管理"
+ ],
+ "summary": "分配角色权限资源(祖先补全+全量替换)"
+ },
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/RoleController.java",
+ "className": "RoleController",
+ "http": "POST",
+ "url": "/api/roles/delete",
+ "tags": [
+ "A7 后台管理/权限管理/角色管理"
+ ],
+ "summary": "删除角色(级联清理关联表)"
+ },
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/SystemController.java",
+ "className": "SystemController",
+ "http": "GET",
+ "url": "/api/system/menus/tree",
+ "tags": [
+ "A0 登录界面"
+ ],
+ "summary": "当前用户可见菜单树(按角色权限过滤,供前端渲染左侧导航)"
+ },
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/SystemController.java",
+ "className": "SystemController",
+ "http": "GET",
+ "url": "/api/system/depts/tree",
+ "tags": [
+ "A7 后台管理/部门管理"
+ ],
+ "summary": "部门树(全量部门层级树)"
+ },
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/SystemController.java",
+ "className": "SystemController",
+ "http": "POST",
+ "url": "/api/system/depts/save",
+ "tags": [
+ "A7 后台管理/部门管理"
+ ],
+ "summary": "新增或编辑部门"
+ },
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/SystemController.java",
+ "className": "SystemController",
+ "http": "POST",
+ "url": "/api/system/depts/delete",
+ "tags": [
+ "A7 后台管理/部门管理"
+ ],
+ "summary": "删除部门"
+ },
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/SystemController.java",
+ "className": "SystemController",
+ "http": "POST",
+ "url": "/api/system/users/assign-roles",
+ "tags": [
+ "A7 后台管理/用户管理"
+ ],
+ "summary": "设置用户角色(全量替换)"
+ },
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/SystemController.java",
+ "className": "SystemController",
+ "http": "POST",
+ "url": "/api/system/users/assign-depts",
+ "tags": [
+ "A7 后台管理/用户管理"
+ ],
+ "summary": "设置用户部门(主部门+兼职,全量替换)"
+ },
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/SystemController.java",
+ "className": "SystemController",
+ "http": "POST",
+ "url": "/api/system/users/page",
+ "tags": [
+ "A7 后台管理/用户管理"
+ ],
+ "summary": "分页查询用户列表"
+ },
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/SystemController.java",
+ "className": "SystemController",
+ "http": "GET",
+ "url": "/api/system/users/stats",
+ "tags": [
+ "A7 后台管理/用户管理"
+ ],
+ "summary": "用户统计(按部门)"
+ },
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/SystemController.java",
+ "className": "SystemController",
+ "http": "POST",
+ "url": "/api/system/sync/dingtalk",
+ "tags": [
+ "A7 后台管理/运维"
+ ],
+ "summary": "钉钉组织全量同步(部门树+用户,幂等可重跑)"
+ },
+ {
+ "file": "crm-auth/src/main/java/com/crm/auth/controller/SystemController.java",
+ "className": "SystemController",
+ "http": "POST",
+ "url": "/api/system/users/admin-role",
+ "tags": [
+ "A7 后台管理/运维"
+ ],
+ "summary": "管理员角色配置(增量授予/回收)"
+ },
+ {
+ "file": "crm-file/src/main/java/com/crm/file/controller/FileController.java",
+ "className": "FileController",
+ "http": "POST",
+ "url": "/api/file/upload",
+ "tags": [
+ "公共依赖/文件"
+ ],
+ "summary": "直传(小文件,超直传上限请走分片)"
+ },
+ {
+ "file": "crm-file/src/main/java/com/crm/file/controller/FileController.java",
+ "className": "FileController",
+ "http": "GET",
+ "url": "/api/file/info",
+ "tags": [
+ "公共依赖/文件"
+ ],
+ "summary": "文件详情"
+ },
+ {
+ "file": "crm-file/src/main/java/com/crm/file/controller/FileController.java",
+ "className": "FileController",
+ "http": "GET",
+ "url": "/api/file/download",
+ "tags": [
+ "公共依赖/文件"
+ ],
+ "summary": "下载(信封例外:成功二进制流,失败 JSON 信封)"
+ },
+ {
+ "file": "crm-file/src/main/java/com/crm/file/controller/FileController.java",
+ "className": "FileController",
+ "http": "GET",
+ "url": "/api/file/preview-url",
+ "tags": [
+ "公共依赖/文件"
+ ],
+ "summary": "预览地址(可直接 window.open,由 kkFileView 渲染)"
+ },
+ {
+ "file": "crm-file/src/main/java/com/crm/file/controller/FileController.java",
+ "className": "FileController",
+ "http": "GET",
+ "url": "/api/file/thumbnail",
+ "tags": [
+ "公共依赖/文件"
+ ],
+ "summary": "缩略图(信封例外:成功返回二进制图片流,失败 JSON 信封)"
+ },
+ {
+ "file": "crm-file/src/main/java/com/crm/file/controller/FileController.java",
+ "className": "FileController",
+ "http": "POST",
+ "url": "/api/file/delete",
+ "tags": [
+ "公共依赖/文件"
+ ],
+ "summary": "删除(逻辑删除)"
+ },
+ {
+ "file": "crm-file/src/main/java/com/crm/file/controller/FileController.java",
+ "className": "FileController",
+ "http": "POST",
+ "url": "/api/file/multipart/init",
+ "tags": [
+ "公共依赖/文件"
+ ],
+ "summary": "分片上传-init(带 uploadId 为断点续传,返回已上传分片序号列表)"
+ },
+ {
+ "file": "crm-file/src/main/java/com/crm/file/controller/FileController.java",
+ "className": "FileController",
+ "http": "POST",
+ "url": "/api/file/multipart/upload",
+ "tags": [
+ "公共依赖/文件"
+ ],
+ "summary": "分片上传-上传单片(序号 1 起,非末片大小必须等于 init 下发的分片大小)"
+ },
+ {
+ "file": "crm-file/src/main/java/com/crm/file/controller/FileController.java",
+ "className": "FileController",
+ "http": "POST",
+ "url": "/api/file/multipart/complete",
+ "tags": [
+ "公共依赖/文件"
+ ],
+ "summary": "分片上传-complete(合并并返回文件详情)"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "POST",
+ "url": "/api/lead/page",
+ "tags": [
+ "A2 线索管理/线索公海",
+ "A2 线索管理/我的线索",
+ "A2 线索管理/我的关注",
+ "A2 线索管理/线索管理"
+ ],
+ "summary": "线索分页(四视图:PUBLIC_POOL/MY_LEAD/MY_FOLLOW/MANAGE)"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "GET",
+ "url": "/api/lead/detail",
+ "tags": [
+ "A2 线索管理/线索公海",
+ "A2 线索管理/我的线索",
+ "A2 线索管理/我的关注",
+ "A2 线索管理/线索管理"
+ ],
+ "summary": "线索详情"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "GET",
+ "url": "/api/lead/history",
+ "tags": [
+ "A2 线索管理/线索公海",
+ "A2 线索管理/我的线索",
+ "A2 线索管理/我的关注",
+ "A2 线索管理/线索管理"
+ ],
+ "summary": "历史记录(只展示 5 种:领取/释放/反馈/转商机/编辑)"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "POST",
+ "url": "/api/lead/create",
+ "tags": [
+ "A2 线索管理/我的线索",
+ "A2 线索管理/线索管理"
+ ],
+ "summary": "新建线索(claimOnCreate=true 销售新增即领取;followOnCreate=true 创建即关注,原型「是否领取/是否关注」复选)"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "POST",
+ "url": "/api/lead/edit",
+ "tags": [
+ "A2 线索管理/我的线索"
+ ],
+ "summary": "编辑线索(非终态可编辑)"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "POST",
+ "url": "/api/lead/delete",
+ "tags": [
+ "A2 线索管理/我的线索",
+ "A2 线索管理/线索管理"
+ ],
+ "summary": "删除线索(已转商机禁止删除)"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "POST",
+ "url": "/api/lead/claim",
+ "tags": [
+ "A2 线索管理/线索公海",
+ "A2 线索管理/我的关注"
+ ],
+ "summary": "领取线索(待领取→已领取)"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "POST",
+ "url": "/api/lead/assign-pool",
+ "tags": [
+ "A2 线索管理/线索管理"
+ ],
+ "summary": "分配线索到池(未分发→待领取)"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "POST",
+ "url": "/api/lead/assign-user",
+ "tags": [
+ "A2 线索管理/线索管理"
+ ],
+ "summary": "分配线索到销售(未分发/待领取→已领取 or 作废自环)"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "POST",
+ "url": "/api/lead/feedback-draft",
+ "tags": [
+ "A2 线索管理/我的线索"
+ ],
+ "summary": "保存反馈草稿(不改状态机)"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "POST",
+ "url": "/api/lead/feedback-submit",
+ "tags": [
+ "A2 线索管理/我的线索"
+ ],
+ "summary": "提交反馈(已领取→跟进中 or →作废)"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "POST",
+ "url": "/api/lead/convert",
+ "tags": [
+ "A2 线索管理/我的线索"
+ ],
+ "summary": "转商机(已领取/跟进中→已转商机)"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "POST",
+ "url": "/api/lead/release",
+ "tags": [
+ "A2 线索管理/线索公海",
+ "A2 线索管理/我的线索"
+ ],
+ "summary": "释放线索(已领取/跟进中→待领取)"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "POST",
+ "url": "/api/lead/activate",
+ "tags": [
+ "A2 线索管理/线索管理"
+ ],
+ "summary": "激活线索(过期失效→恢复失效前态)"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "POST",
+ "url": "/api/lead/follow",
+ "tags": [
+ "A2 线索管理/线索公海"
+ ],
+ "summary": "关注线索(公海页,任意状态可关注)"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "POST",
+ "url": "/api/lead/unfollow",
+ "tags": [
+ "A2 线索管理/线索公海",
+ "A2 线索管理/我的关注"
+ ],
+ "summary": "取消关注(公海详情弹窗/我的关注操作列)"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "POST",
+ "url": "/api/lead/stats",
+ "tags": [
+ "A2 线索管理/线索公海",
+ "A2 线索管理/我的线索",
+ "A2 线索管理/我的关注",
+ "A2 线索管理/线索管理"
+ ],
+ "summary": "视图统计卡片(与 /page 同套筛选口径,口径随视图)"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "POST",
+ "url": "/api/lead/claim-batch",
+ "tags": [
+ "A2 线索管理/线索公海",
+ "A2 线索管理/我的关注"
+ ],
+ "summary": "批量领取"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "POST",
+ "url": "/api/lead/assign-pool-batch",
+ "tags": [
+ "A2 线索管理/线索管理"
+ ],
+ "summary": "批量分配到池(未分发→待领取)"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "POST",
+ "url": "/api/lead/assign-user-batch",
+ "tags": [
+ "A2 线索管理/线索管理"
+ ],
+ "summary": "批量分配到销售(统一分配给同一销售)"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "POST",
+ "url": "/api/lead/release-batch",
+ "tags": [
+ "A2 线索管理/我的线索"
+ ],
+ "summary": "批量释放(已领取/跟进中→待领取)"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "POST",
+ "url": "/api/lead/activate-batch",
+ "tags": [
+ "A2 线索管理/线索管理"
+ ],
+ "summary": "批量激活(过期失效→恢复失效前态)"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "POST",
+ "url": "/api/lead/delete-batch",
+ "tags": [
+ "A2 线索管理/线索管理"
+ ],
+ "summary": "批量删除(已转商机禁止删除,记失败)"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "POST",
+ "url": "/api/lead/follow-batch",
+ "tags": [
+ "A2 线索管理/线索公海"
+ ],
+ "summary": "批量关注(公海页勾选任意状态执行,逐条幂等)"
+ },
+ {
+ "file": "crm-lead/src/main/java/com/crm/lead/controller/LeadController.java",
+ "className": "LeadController",
+ "http": "POST",
+ "url": "/api/lead/unfollow-batch",
+ "tags": [
+ "A2 线索管理/我的关注"
+ ],
+ "summary": "批量取关(我的关注页勾选执行,幂等)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityCollabController.java",
+ "className": "OpportunityCollabController",
+ "http": "POST",
+ "url": "/api/opportunity/focus",
+ "tags": [
+ "A3 商机管理/商机详情/主体"
+ ],
+ "summary": "关注商机"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityCollabController.java",
+ "className": "OpportunityCollabController",
+ "http": "POST",
+ "url": "/api/opportunity/unfocus",
+ "tags": [
+ "A3 商机管理/商机详情/主体"
+ ],
+ "summary": "取关商机"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityCollabController.java",
+ "className": "OpportunityCollabController",
+ "http": "POST",
+ "url": "/api/opportunity/focus-batch",
+ "tags": [
+ "A3 商机管理/商机详情/主体"
+ ],
+ "summary": "批量关注"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityCollabController.java",
+ "className": "OpportunityCollabController",
+ "http": "POST",
+ "url": "/api/opportunity/view-touch",
+ "tags": [
+ "A3 商机管理/商机详情/主体"
+ ],
+ "summary": "上报商机访问(打开详情时调用)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityCollabController.java",
+ "className": "OpportunityCollabController",
+ "http": "POST",
+ "url": "/api/opportunity/board/stage-summary",
+ "tags": [
+ "A3 商机管理/商机公海/看板列表",
+ "A3 商机管理/商机管理/看板列表",
+ "A3 商机管理/销售机会/看板列表"
+ ],
+ "summary": "看板各阶段数量+金额汇总(viewType 与列表视图同口径,票 06 D-15;PUBLIC_POOL=公海看板)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityCollabController.java",
+ "className": "OpportunityCollabController",
+ "http": "POST",
+ "url": "/api/opportunity/board/cards",
+ "tags": [
+ "A3 商机管理/商机公海/看板列表",
+ "A3 商机管理/商机管理/看板列表",
+ "A3 商机管理/销售机会/看板列表"
+ ],
+ "summary": "看板单阶段卡片列表(viewType 与列表视图同口径,票 06 D-15;入参 stageName 按展示名取卡)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityCreateController.java",
+ "className": "OpportunityCreateController",
+ "http": "POST",
+ "url": "/api/opportunity",
+ "tags": [
+ "A3 商机管理/新建商机"
+ ],
+ "summary": "新建商机(oppSource=线索转入 时须选关联线索)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityCreateController.java",
+ "className": "OpportunityCreateController",
+ "http": "GET",
+ "url": "/api/opportunity/convertible-leads",
+ "tags": [
+ "A3 商机管理/新建商机"
+ ],
+ "summary": "可关联线索下拉候选(已领取/跟进中 且 未被商机占用)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityDetailController.java",
+ "className": "OpportunityDetailController",
+ "http": "GET",
+ "url": "/api/opportunity/detail",
+ "tags": [
+ "A3 商机管理/商机详情/主体"
+ ],
+ "summary": "商机详情"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityDetailController.java",
+ "className": "OpportunityDetailController",
+ "http": "POST",
+ "url": "/api/opportunity/edit",
+ "tags": [
+ "A3 商机管理/商机详情/主体"
+ ],
+ "summary": "编辑商机(非终态可编辑;全量字段覆盖)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityQueryController.java",
+ "className": "OpportunityQueryController",
+ "http": "POST",
+ "url": "/api/opportunity/page",
+ "tags": [
+ "A3 商机管理/商机公海",
+ "A3 商机管理/商机管理",
+ "A3 商机管理/销售机会"
+ ],
+ "summary": "商机分页(六视图:RECENT/MINE/PARTICIPATED/FOLLOWED/MANAGE/PUBLIC_POOL)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySchemeCardController.java",
+ "className": "OpportunitySchemeCardController",
+ "http": "GET",
+ "url": "/api/opportunity/scheme-card/list",
+ "tags": [
+ "A3 商机管理/商机详情/方案卡"
+ ],
+ "summary": "方案卡列表(一商机多张分组展示;无卡=「未创建」展示态由前端渲染)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySchemeCardController.java",
+ "className": "OpportunitySchemeCardController",
+ "http": "GET",
+ "url": "/api/opportunity/scheme-card/detail",
+ "tags": [
+ "A3 商机管理/商机详情/方案卡"
+ ],
+ "summary": "方案卡详情(绑定模板版本显示字段项有序列表 + 已填值)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySchemeCardController.java",
+ "className": "OpportunitySchemeCardController",
+ "http": "GET",
+ "url": "/api/opportunity/scheme-card/selectable-templates",
+ "tags": [
+ "A3 商机管理/商机详情/方案卡"
+ ],
+ "summary": "可选模板版本列表(新建方案卡手动选模板下拉;发布中且适用范围命中商机所属部门;空列表=建卡入口置灰)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySchemeCardController.java",
+ "className": "OpportunitySchemeCardController",
+ "http": "POST",
+ "url": "/api/opportunity/scheme-card/save",
+ "tags": [
+ "A3 商机管理/商机详情/方案卡"
+ ],
+ "summary": "保存(新建草稿/编辑;新建须传 templateId 手动选模板版本,编辑续用锁定版本;草稿与已提交均可改;动态字段值以 valuesJson 表单字段上送)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySchemeCardController.java",
+ "className": "OpportunitySchemeCardController",
+ "http": "POST",
+ "url": "/api/opportunity/scheme-card/submit",
+ "tags": [
+ "A3 商机管理/商机详情/方案卡"
+ ],
+ "summary": "提交(「确认」→已提交;提交前校验模板必填字段)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityStageController.java",
+ "className": "OpportunityStageController",
+ "http": "GET",
+ "url": "/api/opportunity/stage/progress",
+ "tags": [
+ "A3 商机管理/商机详情/主体"
+ ],
+ "summary": "阶段推进指引(三态进度:已完成/当前/未完成 + 当前节点工作目标)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityStageController.java",
+ "className": "OpportunityStageController",
+ "http": "POST",
+ "url": "/api/opportunity/stage/switch",
+ "tags": [
+ "A3 商机管理/商机详情/主体"
+ ],
+ "summary": "阶段切换(自由切换:连跳/回退;「已转项目」固定节点不可手动切)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityStageController.java",
+ "className": "OpportunityStageController",
+ "http": "GET",
+ "url": "/api/opportunity/stage/history",
+ "tags": [
+ "A3 商机管理/商机详情/主体"
+ ],
+ "summary": "阶段推进历史(按操作时间倒序)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySubController.java",
+ "className": "OpportunitySubController",
+ "http": "GET",
+ "url": "/api/opportunity/customer/list",
+ "tags": [
+ "A3 商机管理/商机详情/客户"
+ ],
+ "summary": "客户列表"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySubController.java",
+ "className": "OpportunitySubController",
+ "http": "POST",
+ "url": "/api/opportunity/customer/add",
+ "tags": [
+ "A3 商机管理/商机详情/客户"
+ ],
+ "summary": "添加关联客户"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySubController.java",
+ "className": "OpportunitySubController",
+ "http": "POST",
+ "url": "/api/opportunity/customer/search",
+ "tags": [
+ "A3 商机管理/商机详情/客户"
+ ],
+ "summary": "候选客户池搜索"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySubController.java",
+ "className": "OpportunitySubController",
+ "http": "GET",
+ "url": "/api/opportunity/customer/contacts",
+ "tags": [
+ "A3 商机管理/商机详情/客户"
+ ],
+ "summary": "按客户查联系人(客户模块真源,票 11 切真源)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySubController.java",
+ "className": "OpportunitySubController",
+ "http": "POST",
+ "url": "/api/opportunity/customer/set-primary",
+ "tags": [
+ "A3 商机管理/商机详情/客户"
+ ],
+ "summary": "设为主要意向客户"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySubController.java",
+ "className": "OpportunitySubController",
+ "http": "POST",
+ "url": "/api/opportunity/follow/page",
+ "tags": [
+ "A3 商机管理/商机详情/跟进"
+ ],
+ "summary": "跟进记录分页"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySubController.java",
+ "className": "OpportunitySubController",
+ "http": "POST",
+ "url": "/api/opportunity/follow/add",
+ "tags": [
+ "A3 商机管理/商机详情/跟进"
+ ],
+ "summary": "新增跟进记录"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySubController.java",
+ "className": "OpportunitySubController",
+ "http": "POST",
+ "url": "/api/opportunity/follow/delete",
+ "tags": [
+ "A3 商机管理/商机详情/跟进"
+ ],
+ "summary": "删除跟进记录"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySubController.java",
+ "className": "OpportunitySubController",
+ "http": "POST",
+ "url": "/api/opportunity/site-survey/page",
+ "tags": [
+ "A3 商机管理/商机详情/勘察"
+ ],
+ "summary": "勘察记录分页"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySubController.java",
+ "className": "OpportunitySubController",
+ "http": "POST",
+ "url": "/api/opportunity/site-survey/add",
+ "tags": [
+ "A3 商机管理/商机详情/勘察"
+ ],
+ "summary": "新增勘察记录"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySubController.java",
+ "className": "OpportunitySubController",
+ "http": "POST",
+ "url": "/api/opportunity/site-survey/delete",
+ "tags": [
+ "A3 商机管理/商机详情/勘察"
+ ],
+ "summary": "删除勘察记录"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySubController.java",
+ "className": "OpportunitySubController",
+ "http": "GET",
+ "url": "/api/opportunity/attachment/list",
+ "tags": [
+ "A3 商机管理/商机详情/附件"
+ ],
+ "summary": "附件列表"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySubController.java",
+ "className": "OpportunitySubController",
+ "http": "POST",
+ "url": "/api/opportunity/attachment/add",
+ "tags": [
+ "A3 商机管理/商机详情/附件"
+ ],
+ "summary": "新增附件"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySubController.java",
+ "className": "OpportunitySubController",
+ "http": "POST",
+ "url": "/api/opportunity/attachment/delete",
+ "tags": [
+ "A3 商机管理/商机详情/附件"
+ ],
+ "summary": "删除附件"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySubController.java",
+ "className": "OpportunitySubController",
+ "http": "GET",
+ "url": "/api/opportunity/team/list",
+ "tags": [
+ "A3 商机管理/商机详情/团队"
+ ],
+ "summary": "团队成员列表"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySubController.java",
+ "className": "OpportunitySubController",
+ "http": "POST",
+ "url": "/api/opportunity/team/add",
+ "tags": [
+ "A3 商机管理/商机详情/团队"
+ ],
+ "summary": "批量添加团队成员"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySubController.java",
+ "className": "OpportunitySubController",
+ "http": "POST",
+ "url": "/api/opportunity/team/update",
+ "tags": [
+ "A3 商机管理/商机详情/团队"
+ ],
+ "summary": "编辑团队成员"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySubController.java",
+ "className": "OpportunitySubController",
+ "http": "POST",
+ "url": "/api/opportunity/team/delete",
+ "tags": [
+ "A3 商机管理/商机详情/团队"
+ ],
+ "summary": "移除团队成员"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySubController.java",
+ "className": "OpportunitySubController",
+ "http": "POST",
+ "url": "/api/opportunity/oplog/page",
+ "tags": [
+ "A3 商机管理/商机详情/日志"
+ ],
+ "summary": "操作日志分页"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySubController.java",
+ "className": "OpportunitySubController",
+ "http": "GET",
+ "url": "/api/opportunity/workplan/list",
+ "tags": [
+ "A3 商机管理/商机详情/工作计划"
+ ],
+ "summary": "工作计划列表"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySubController.java",
+ "className": "OpportunitySubController",
+ "http": "POST",
+ "url": "/api/opportunity/workplan/add",
+ "tags": [
+ "A3 商机管理/商机详情/工作计划"
+ ],
+ "summary": "新增工作计划"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySubController.java",
+ "className": "OpportunitySubController",
+ "http": "POST",
+ "url": "/api/opportunity/workplan/update",
+ "tags": [
+ "A3 商机管理/商机详情/工作计划"
+ ],
+ "summary": "编辑工作计划(登记完成:planStatus=1 服务端回填 finishTime,0 清空)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunitySubController.java",
+ "className": "OpportunitySubController",
+ "http": "POST",
+ "url": "/api/opportunity/workplan/delete",
+ "tags": [
+ "A3 商机管理/商机详情/工作计划"
+ ],
+ "summary": "删除工作计划"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityTransitionController.java",
+ "className": "OpportunityTransitionController",
+ "http": "POST",
+ "url": "/api/opportunity/claim",
+ "tags": [
+ "A3 商机管理/状态流转"
+ ],
+ "summary": "领取商机(待领取→推进中,E1;命中发布中禁领规则时拒绝,票 05 D-09)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityTransitionController.java",
+ "className": "OpportunityTransitionController",
+ "http": "POST",
+ "url": "/api/opportunity/claim-batch",
+ "tags": [
+ "A3 商机管理/状态流转"
+ ],
+ "summary": "批量领取(待领取→推进中,E1;命中发布中禁领规则时拒绝,票 05 D-09)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityTransitionController.java",
+ "className": "OpportunityTransitionController",
+ "http": "POST",
+ "url": "/api/opportunity/assign",
+ "tags": [
+ "A3 商机管理/状态流转"
+ ],
+ "summary": "分配商机给指定销售(待领取→推进中,E2)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityTransitionController.java",
+ "className": "OpportunityTransitionController",
+ "http": "POST",
+ "url": "/api/opportunity/assign-batch",
+ "tags": [
+ "A3 商机管理/状态流转"
+ ],
+ "summary": "批量分配商机(待领取→推进中,E2)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityTransitionController.java",
+ "className": "OpportunityTransitionController",
+ "http": "POST",
+ "url": "/api/opportunity/release-pool",
+ "tags": [
+ "A3 商机管理/状态流转"
+ ],
+ "summary": "抛公海(推进中→待领取,E3)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityTransitionController.java",
+ "className": "OpportunityTransitionController",
+ "http": "POST",
+ "url": "/api/opportunity/pause",
+ "tags": [
+ "A3 商机管理/状态流转"
+ ],
+ "summary": "暂缓(推进中→暂缓中,E4)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityTransitionController.java",
+ "className": "OpportunityTransitionController",
+ "http": "POST",
+ "url": "/api/opportunity/resume",
+ "tags": [
+ "A3 商机管理/状态流转"
+ ],
+ "summary": "取消暂缓(暂缓中→推进中,E5)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityTransitionController.java",
+ "className": "OpportunityTransitionController",
+ "http": "POST",
+ "url": "/api/opportunity/close",
+ "tags": [
+ "A3 商机管理/状态流转"
+ ],
+ "summary": "关闭商机(推进中/暂缓中→已关闭,E6)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityTransitionController.java",
+ "className": "OpportunityTransitionController",
+ "http": "POST",
+ "url": "/api/opportunity/close-batch",
+ "tags": [
+ "A3 商机管理/状态流转"
+ ],
+ "summary": "批量关闭(推进中/暂缓中→已关闭,E6)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityTransitionController.java",
+ "className": "OpportunityTransitionController",
+ "http": "POST",
+ "url": "/api/opportunity/reopen",
+ "tags": [
+ "A3 商机管理/状态流转"
+ ],
+ "summary": "重启商机(已关闭→推进中,E7)"
+ },
+ {
+ "file": "crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityTransitionController.java",
+ "className": "OpportunityTransitionController",
+ "http": "POST",
+ "url": "/api/opportunity/handover",
+ "tags": [
+ "A3 商机管理/状态流转"
+ ],
+ "summary": "移交商机(推进中/暂缓中自环换owner,E9)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/CustomerDedupRuleController.java",
+ "className": "CustomerDedupRuleController",
+ "http": "GET",
+ "url": "/api/rule/customer/dedup",
+ "tags": [
+ "A7 后台管理/客户管理设置/查重设置"
+ ],
+ "summary": "读当前配置(全局单例)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/CustomerDedupRuleController.java",
+ "className": "CustomerDedupRuleController",
+ "http": "POST",
+ "url": "/api/rule/customer/dedup/save",
+ "tags": [
+ "A7 后台管理/客户管理设置/查重设置"
+ ],
+ "summary": "保存配置(全量覆盖,保存即生效)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/CustomerReminderRuleController.java",
+ "className": "CustomerReminderRuleController",
+ "http": "GET",
+ "url": "/api/rule/customer/reminder",
+ "tags": [
+ "A7 后台管理/客户管理设置/超期未跟进提醒"
+ ],
+ "summary": "读当前配置(全局单例)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/CustomerReminderRuleController.java",
+ "className": "CustomerReminderRuleController",
+ "http": "POST",
+ "url": "/api/rule/customer/reminder/save",
+ "tags": [
+ "A7 后台管理/客户管理设置/超期未跟进提醒"
+ ],
+ "summary": "保存配置(全量覆盖,保存即生效)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/LeadPoolController.java",
+ "className": "LeadPoolController",
+ "http": "POST",
+ "url": "/api/rule/pool/page",
+ "tags": [
+ "A2 线索管理/线索设置",
+ "A7 后台管理/线索规则"
+ ],
+ "summary": "公海池分页列表"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/LeadPoolController.java",
+ "className": "LeadPoolController",
+ "http": "GET",
+ "url": "/api/rule/pool/detail",
+ "tags": [
+ "A2 线索管理/线索设置",
+ "A7 后台管理/线索规则"
+ ],
+ "summary": "公海池详情(含省份/市/区/人员)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/LeadPoolController.java",
+ "className": "LeadPoolController",
+ "http": "POST",
+ "url": "/api/rule/pool/saveOrUpdate",
+ "tags": [
+ "A2 线索管理/线索设置",
+ "A7 后台管理/线索规则"
+ ],
+ "summary": "新建/编辑公海池"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/LeadPoolController.java",
+ "className": "LeadPoolController",
+ "http": "POST",
+ "url": "/api/rule/pool/delete",
+ "tags": [
+ "A2 线索管理/线索设置",
+ "A7 后台管理/线索规则"
+ ],
+ "summary": "删除公海池(软删除,级联清关联表)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/LeadPoolController.java",
+ "className": "LeadPoolController",
+ "http": "POST",
+ "url": "/api/rule/pool/delete-batch",
+ "tags": [
+ "A2 线索管理/线索设置",
+ "A7 后台管理/线索规则"
+ ],
+ "summary": "批量删除公海池(非原子、逐条、部分成功)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunityPoolRuleController.java",
+ "className": "OpportunityPoolRuleController",
+ "http": "POST",
+ "url": "/api/rule/opp-pool-rule/page",
+ "tags": [
+ "A7 后台管理/商机规则/公海规则"
+ ],
+ "summary": "公海规则分页列表(按版本维度展示)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunityPoolRuleController.java",
+ "className": "OpportunityPoolRuleController",
+ "http": "GET",
+ "url": "/api/rule/opp-pool-rule/detail",
+ "tags": [
+ "A7 后台管理/商机规则/公海规则"
+ ],
+ "summary": "公海规则详情(含适用部门)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunityPoolRuleController.java",
+ "className": "OpportunityPoolRuleController",
+ "http": "POST",
+ "url": "/api/rule/opp-pool-rule/save-draft",
+ "tags": [
+ "A7 后台管理/商机规则/公海规则"
+ ],
+ "summary": "保存草稿(新建/原位编辑草稿/从发布中停用生成新草稿)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunityPoolRuleController.java",
+ "className": "OpportunityPoolRuleController",
+ "http": "POST",
+ "url": "/api/rule/opp-pool-rule/publish",
+ "tags": [
+ "A7 后台管理/商机规则/公海规则"
+ ],
+ "summary": "保存并发布(原发布中转停用、原默认取消默认、部门覆盖校验)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunityPoolRuleController.java",
+ "className": "OpportunityPoolRuleController",
+ "http": "POST",
+ "url": "/api/rule/opp-pool-rule/copy",
+ "tags": [
+ "A7 后台管理/商机规则/公海规则"
+ ],
+ "summary": "复制规则(独立新规则:新编码 + V1.0 草稿)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunityPoolRuleController.java",
+ "className": "OpportunityPoolRuleController",
+ "http": "POST",
+ "url": "/api/rule/opp-pool-rule/disable",
+ "tags": [
+ "A7 后台管理/商机规则/公海规则"
+ ],
+ "summary": "停用(仅发布中可停用)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunityPoolRuleController.java",
+ "className": "OpportunityPoolRuleController",
+ "http": "POST",
+ "url": "/api/rule/opp-pool-rule/delete",
+ "tags": [
+ "A7 后台管理/商机规则/公海规则"
+ ],
+ "summary": "删除(仅草稿可删)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunityPoolRuleController.java",
+ "className": "OpportunityPoolRuleController",
+ "http": "GET",
+ "url": "/api/rule/opp-pool-rule/versions",
+ "tags": [
+ "A7 后台管理/商机规则/公海规则"
+ ],
+ "summary": "同族版本列表(按 ruleCode 查所有版本)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunitySchemeCardTemplateController.java",
+ "className": "OpportunitySchemeCardTemplateController",
+ "http": "POST",
+ "url": "/api/rule/opp-scheme-template/page",
+ "tags": [
+ "A7 后台管理/商机规则/方案卡模板"
+ ],
+ "summary": "方案卡模板分页列表(按版本维度展示)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunitySchemeCardTemplateController.java",
+ "className": "OpportunitySchemeCardTemplateController",
+ "http": "GET",
+ "url": "/api/rule/opp-scheme-template/detail",
+ "tags": [
+ "A7 后台管理/商机规则/方案卡模板"
+ ],
+ "summary": "方案卡模板详情(含适用部门 + 字段项有序列表)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunitySchemeCardTemplateController.java",
+ "className": "OpportunitySchemeCardTemplateController",
+ "http": "GET",
+ "url": "/api/rule/opp-scheme-template/field-defs",
+ "tags": [
+ "A7 后台管理/商机规则/方案卡模板"
+ ],
+ "summary": "系统字段库列表(模板配置页「选字段」数据源,只读)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunitySchemeCardTemplateController.java",
+ "className": "OpportunitySchemeCardTemplateController",
+ "http": "POST",
+ "url": "/api/rule/opp-scheme-template/save-draft",
+ "tags": [
+ "A7 后台管理/商机规则/方案卡模板"
+ ],
+ "summary": "保存草稿(新建/原位编辑草稿/从发布中停用生成新草稿;字段项全量替换)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunitySchemeCardTemplateController.java",
+ "className": "OpportunitySchemeCardTemplateController",
+ "http": "POST",
+ "url": "/api/rule/opp-scheme-template/publish",
+ "tags": [
+ "A7 后台管理/商机规则/方案卡模板"
+ ],
+ "summary": "保存并发布(至少一个字段项;原发布中转停用、原默认取消默认)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunitySchemeCardTemplateController.java",
+ "className": "OpportunitySchemeCardTemplateController",
+ "http": "POST",
+ "url": "/api/rule/opp-scheme-template/copy",
+ "tags": [
+ "A7 后台管理/商机规则/方案卡模板"
+ ],
+ "summary": "复制模板(独立新模板:新编码 + V1.0 草稿,字段配置随复制)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunitySchemeCardTemplateController.java",
+ "className": "OpportunitySchemeCardTemplateController",
+ "http": "POST",
+ "url": "/api/rule/opp-scheme-template/disable",
+ "tags": [
+ "A7 后台管理/商机规则/方案卡模板"
+ ],
+ "summary": "停用(仅发布中可停用)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunitySchemeCardTemplateController.java",
+ "className": "OpportunitySchemeCardTemplateController",
+ "http": "POST",
+ "url": "/api/rule/opp-scheme-template/delete",
+ "tags": [
+ "A7 后台管理/商机规则/方案卡模板"
+ ],
+ "summary": "删除(仅草稿可删,级联删字段项与适用部门)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunitySchemeCardTemplateController.java",
+ "className": "OpportunitySchemeCardTemplateController",
+ "http": "GET",
+ "url": "/api/rule/opp-scheme-template/versions",
+ "tags": [
+ "A7 后台管理/商机规则/方案卡模板"
+ ],
+ "summary": "同族版本列表(按 templateCode 查所有版本)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunityStageTemplateController.java",
+ "className": "OpportunityStageTemplateController",
+ "http": "POST",
+ "url": "/api/rule/opp-stage-template/page",
+ "tags": [
+ "A7 后台管理/商机规则/阶段模板"
+ ],
+ "summary": "阶段模板分页列表(按版本维度展示)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunityStageTemplateController.java",
+ "className": "OpportunityStageTemplateController",
+ "http": "GET",
+ "url": "/api/rule/opp-stage-template/detail",
+ "tags": [
+ "A7 后台管理/商机规则/阶段模板"
+ ],
+ "summary": "阶段模板详情(含适用部门 + 阶段节点有序列表)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunityStageTemplateController.java",
+ "className": "OpportunityStageTemplateController",
+ "http": "POST",
+ "url": "/api/rule/opp-stage-template/save-draft",
+ "tags": [
+ "A7 后台管理/商机规则/阶段模板"
+ ],
+ "summary": "保存草稿(新建/原位编辑草稿/从发布中停用生成新草稿;节点全量替换)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunityStageTemplateController.java",
+ "className": "OpportunityStageTemplateController",
+ "http": "POST",
+ "url": "/api/rule/opp-stage-template/publish",
+ "tags": [
+ "A7 后台管理/商机规则/阶段模板"
+ ],
+ "summary": "保存并发布(除固定节点外至少一个阶段节点;原发布中转停用、原默认取消默认)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunityStageTemplateController.java",
+ "className": "OpportunityStageTemplateController",
+ "http": "POST",
+ "url": "/api/rule/opp-stage-template/copy",
+ "tags": [
+ "A7 后台管理/商机规则/阶段模板"
+ ],
+ "summary": "复制模板(独立新模板:新编码 + V1.0 草稿,节点随复制)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunityStageTemplateController.java",
+ "className": "OpportunityStageTemplateController",
+ "http": "POST",
+ "url": "/api/rule/opp-stage-template/disable",
+ "tags": [
+ "A7 后台管理/商机规则/阶段模板"
+ ],
+ "summary": "停用(仅发布中可停用)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunityStageTemplateController.java",
+ "className": "OpportunityStageTemplateController",
+ "http": "POST",
+ "url": "/api/rule/opp-stage-template/delete",
+ "tags": [
+ "A7 后台管理/商机规则/阶段模板"
+ ],
+ "summary": "删除(仅草稿可删,级联删节点与适用部门)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/OpportunityStageTemplateController.java",
+ "className": "OpportunityStageTemplateController",
+ "http": "GET",
+ "url": "/api/rule/opp-stage-template/versions",
+ "tags": [
+ "A7 后台管理/商机规则/阶段模板"
+ ],
+ "summary": "同族版本列表(按 templateCode 查所有版本)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/RegionController.java",
+ "className": "RegionController",
+ "http": "GET",
+ "url": "/api/rule/region/list",
+ "tags": [
+ "公共依赖/行政区划"
+ ],
+ "summary": "按上级ID查子区划(parentId 不传则查省级)"
+ },
+ {
+ "file": "crm-rule/src/main/java/com/crm/rule/controller/RegionController.java",
+ "className": "RegionController",
+ "http": "GET",
+ "url": "/api/rule/region/level",
+ "tags": [
+ "公共依赖/行政区划"
+ ],
+ "summary": "按层级查(1=省 2=市 3=区)"
+ },
+ {
+ "file": "crm-preference/src/main/java/com/crm/preference/controller/ColumnPreferenceController.java",
+ "className": "ColumnPreferenceController",
+ "http": "GET",
+ "url": "/api/preference/get",
+ "tags": [
+ "A2 线索管理/线索公海",
+ "A2 线索管理/我的线索",
+ "A2 线索管理/我的关注",
+ "A2 线索管理/线索管理",
+ "A4 客户管理/客户总览",
+ "A4 客户管理/我的客户",
+ "A4 客户管理/客户公海",
+ "A4 客户管理/联系人",
+ "A3 商机管理/销售机会",
+ "A3 商机管理/商机管理",
+ "A3 商机管理/商机公海"
+ ],
+ "summary": "读取当前用户在某 scope 的列偏好"
+ },
+ {
+ "file": "crm-preference/src/main/java/com/crm/preference/controller/ColumnPreferenceController.java",
+ "className": "ColumnPreferenceController",
+ "http": "POST",
+ "url": "/api/preference/save",
+ "tags": [
+ "A2 线索管理/线索公海",
+ "A2 线索管理/我的线索",
+ "A2 线索管理/我的关注",
+ "A2 线索管理/线索管理",
+ "A4 客户管理/客户总览",
+ "A4 客户管理/我的客户",
+ "A4 客户管理/客户公海",
+ "A4 客户管理/联系人",
+ "A3 商机管理/销售机会",
+ "A3 商机管理/商机管理",
+ "A3 商机管理/商机公海"
+ ],
+ "summary": "保存当前用户在某 scope 的列偏好(显隐+顺序,一次写入)"
+ },
+ {
+ "file": "crm-preference/src/main/java/com/crm/preference/controller/SavedViewController.java",
+ "className": "SavedViewController",
+ "http": "GET",
+ "url": "/api/preference/view/list",
+ "tags": [
+ "A3 商机管理/销售机会/自定义视图"
+ ],
+ "summary": "列出当前用户在某 scope 的自定义视图(按 seqNo)"
+ },
+ {
+ "file": "crm-preference/src/main/java/com/crm/preference/controller/SavedViewController.java",
+ "className": "SavedViewController",
+ "http": "POST",
+ "url": "/api/preference/view/save",
+ "tags": [
+ "A3 商机管理/销售机会/自定义视图"
+ ],
+ "summary": "保存自定义视图(viewId 空=新建,非空=覆盖编辑;isDefault 单值互斥)"
+ },
+ {
+ "file": "crm-preference/src/main/java/com/crm/preference/controller/SavedViewController.java",
+ "className": "SavedViewController",
+ "http": "POST",
+ "url": "/api/preference/view/delete",
+ "tags": [
+ "A3 商机管理/销售机会/自定义视图"
+ ],
+ "summary": "删除自定义视图"
+ },
+ {
+ "file": "crm-preference/src/main/java/com/crm/preference/controller/SavedViewController.java",
+ "className": "SavedViewController",
+ "http": "POST",
+ "url": "/api/preference/view/set-default",
+ "tags": [
+ "A3 商机管理/销售机会/自定义视图"
+ ],
+ "summary": "图钉:设为该 scope 的默认视图(单值互斥)"
+ },
+ {
+ "file": "crm-preference/src/main/java/com/crm/preference/controller/ViewFormController.java",
+ "className": "ViewFormController",
+ "http": "GET",
+ "url": "/api/preference/view-form/get",
+ "tags": [
+ "A4 客户管理/客户总览",
+ "A4 客户管理/我的客户",
+ "A4 客户管理/客户公海",
+ "A4 客户管理/联系人",
+ "A3 商机管理/销售机会",
+ "A3 商机管理/商机管理",
+ "A3 商机管理/商机公海"
+ ],
+ "summary": "读取当前用户在某 scope 的视图形态(null=未设置,前端默认 list)"
+ },
+ {
+ "file": "crm-preference/src/main/java/com/crm/preference/controller/ViewFormController.java",
+ "className": "ViewFormController",
+ "http": "POST",
+ "url": "/api/preference/view-form/save",
+ "tags": [
+ "A4 客户管理/客户总览",
+ "A4 客户管理/我的客户",
+ "A4 客户管理/客户公海",
+ "A4 客户管理/联系人",
+ "A3 商机管理/销售机会",
+ "A3 商机管理/商机管理",
+ "A3 商机管理/商机公海"
+ ],
+ "summary": "保存当前用户在某 scope 的视图形态(list/split/board,一次写入)"
+ },
+ {
+ "file": "crm-dict/src/main/java/com/crm/dict/controller/DictGroupController.java",
+ "className": "DictGroupController",
+ "http": "POST",
+ "url": "/api/dict/group/page",
+ "tags": [
+ "A7 后台管理/数据字典-分组"
+ ],
+ "summary": "分组分页(keyword 匹配名称/编码,status 筛选)"
+ },
+ {
+ "file": "crm-dict/src/main/java/com/crm/dict/controller/DictGroupController.java",
+ "className": "DictGroupController",
+ "http": "POST",
+ "url": "/api/dict/group/saveOrUpdate",
+ "tags": [
+ "A7 后台管理/数据字典-分组"
+ ],
+ "summary": "新建/编辑分组(新建编码必填;编辑时编码/内置标记/状态只读)"
+ },
+ {
+ "file": "crm-dict/src/main/java/com/crm/dict/controller/DictGroupController.java",
+ "className": "DictGroupController",
+ "http": "POST",
+ "url": "/api/dict/group/delete",
+ "tags": [
+ "A7 后台管理/数据字典-分组"
+ ],
+ "summary": "删除分组(有字典项或内置分组则阻断)"
+ },
+ {
+ "file": "crm-dict/src/main/java/com/crm/dict/controller/DictGroupController.java",
+ "className": "DictGroupController",
+ "http": "POST",
+ "url": "/api/dict/group/status",
+ "tags": [
+ "A7 后台管理/数据字典-分组"
+ ],
+ "summary": "分组启停(停用保留默认项休眠,二次确认由前端承担)"
+ },
+ {
+ "file": "crm-dict/src/main/java/com/crm/dict/controller/DictGroupController.java",
+ "className": "DictGroupController",
+ "http": "GET",
+ "url": "/api/dict/group/enabled-list",
+ "tags": [
+ "A7 后台管理/数据字典-分组"
+ ],
+ "summary": "启用分组列表(新建字典项选分组用;基础数据,登录即可读)"
+ },
+ {
+ "file": "crm-dict/src/main/java/com/crm/dict/controller/DictItemController.java",
+ "className": "DictItemController",
+ "http": "POST",
+ "url": "/api/dict/item/page",
+ "tags": [
+ "A7 后台管理/数据字典-字典项"
+ ],
+ "summary": "字典项分页(groupId/keyword/status 筛选,附带默认/引用/有效可选标记)"
+ },
+ {
+ "file": "crm-dict/src/main/java/com/crm/dict/controller/DictItemController.java",
+ "className": "DictItemController",
+ "http": "POST",
+ "url": "/api/dict/item/saveOrUpdate",
+ "tags": [
+ "A7 后台管理/数据字典-字典项"
+ ],
+ "summary": "新建/编辑字典项(新建编码空自动生成;分组/编码创建后只读;值被引用后只读)"
+ },
+ {
+ "file": "crm-dict/src/main/java/com/crm/dict/controller/DictItemController.java",
+ "className": "DictItemController",
+ "http": "POST",
+ "url": "/api/dict/item/delete",
+ "tags": [
+ "A7 后台管理/数据字典-字典项"
+ ],
+ "summary": "删除字典项(内置或被引用则阻断)"
+ },
+ {
+ "file": "crm-dict/src/main/java/com/crm/dict/controller/DictItemController.java",
+ "className": "DictItemController",
+ "http": "POST",
+ "url": "/api/dict/item/force-delete",
+ "tags": [
+ "A7 后台管理/数据字典-字典项"
+ ],
+ "summary": "强制删除字典项(绕过引用计数校验,计数飘高兜底入口)"
+ },
+ {
+ "file": "crm-dict/src/main/java/com/crm/dict/controller/DictItemController.java",
+ "className": "DictItemController",
+ "http": "POST",
+ "url": "/api/dict/item/status",
+ "tags": [
+ "A7 后台管理/数据字典-字典项"
+ ],
+ "summary": "字典项启停(停用若为默认项则自动取消默认)"
+ },
+ {
+ "file": "crm-dict/src/main/java/com/crm/dict/controller/DictItemController.java",
+ "className": "DictItemController",
+ "http": "POST",
+ "url": "/api/dict/item/set-default",
+ "tags": [
+ "A7 后台管理/数据字典-字典项"
+ ],
+ "summary": "设为分组默认项(同事务自动取消同组原默认)"
+ },
+ {
+ "file": "crm-dict/src/main/java/com/crm/dict/controller/DictItemController.java",
+ "className": "DictItemController",
+ "http": "GET",
+ "url": "/api/dict/item/enabled-list",
+ "tags": [
+ "A7 后台管理/数据字典-字典项"
+ ],
+ "summary": "某分组启用项列表(业务选择器渲染用,走 10s 本地缓存;基础数据,登录即可读)"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerAgreementController.java",
+ "className": "CustomerAgreementController",
+ "http": "POST",
+ "url": "/api/customer/agreement/create",
+ "tags": [
+ "A4 客户管理/战略协议"
+ ],
+ "summary": "新增战略协议"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerAgreementController.java",
+ "className": "CustomerAgreementController",
+ "http": "POST",
+ "url": "/api/customer/agreement/edit",
+ "tags": [
+ "A4 客户管理/战略协议"
+ ],
+ "summary": "编辑战略协议"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerAgreementController.java",
+ "className": "CustomerAgreementController",
+ "http": "POST",
+ "url": "/api/customer/agreement/delete",
+ "tags": [
+ "A4 客户管理/战略协议"
+ ],
+ "summary": "删除战略协议"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerAgreementController.java",
+ "className": "CustomerAgreementController",
+ "http": "GET",
+ "url": "/api/customer/agreement/detail",
+ "tags": [
+ "A4 客户管理/战略协议"
+ ],
+ "summary": "战略协议详情"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerAgreementController.java",
+ "className": "CustomerAgreementController",
+ "http": "GET",
+ "url": "/api/customer/agreement/list",
+ "tags": [
+ "A4 客户管理/战略协议"
+ ],
+ "summary": "战略协议页签列表"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerContactController.java",
+ "className": "CustomerContactController",
+ "http": "POST",
+ "url": "/api/customer/contact/create",
+ "tags": [
+ "A4 客户管理/联系人"
+ ],
+ "summary": "新增联系人"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerContactController.java",
+ "className": "CustomerContactController",
+ "http": "POST",
+ "url": "/api/customer/contact/edit",
+ "tags": [
+ "A4 客户管理/联系人"
+ ],
+ "summary": "编辑联系人"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerContactController.java",
+ "className": "CustomerContactController",
+ "http": "POST",
+ "url": "/api/customer/contact/delete",
+ "tags": [
+ "A4 客户管理/联系人"
+ ],
+ "summary": "删除联系人"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerContactController.java",
+ "className": "CustomerContactController",
+ "http": "GET",
+ "url": "/api/customer/contact/detail",
+ "tags": [
+ "A4 客户管理/联系人"
+ ],
+ "summary": "联系人详情"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerContactController.java",
+ "className": "CustomerContactController",
+ "http": "GET",
+ "url": "/api/customer/contact/page",
+ "tags": [
+ "A4 客户管理/联系人"
+ ],
+ "summary": "顶级联系人列表"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerContactController.java",
+ "className": "CustomerContactController",
+ "http": "GET",
+ "url": "/api/customer/contact/search",
+ "tags": [
+ "A4 客户管理/联系人"
+ ],
+ "summary": "联系人全局搜索"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerContactController.java",
+ "className": "CustomerContactController",
+ "http": "GET",
+ "url": "/api/customer/contact/check-phone",
+ "tags": [
+ "A4 客户管理/联系人"
+ ],
+ "summary": "电话软提示"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerController.java",
+ "className": "CustomerController",
+ "http": "POST",
+ "url": "/api/customer/create",
+ "tags": [
+ "A4 客户管理/我的客户"
+ ],
+ "summary": "新增客户"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerController.java",
+ "className": "CustomerController",
+ "http": "POST",
+ "url": "/api/customer/edit",
+ "tags": [
+ "A4 客户管理/客户详情",
+ "A4 客户管理/我的客户"
+ ],
+ "summary": "编辑客户"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerController.java",
+ "className": "CustomerController",
+ "http": "GET",
+ "url": "/api/customer/detail",
+ "tags": [
+ "A4 客户管理/客户详情"
+ ],
+ "summary": "客户详情"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerController.java",
+ "className": "CustomerController",
+ "http": "POST",
+ "url": "/api/customer/page",
+ "tags": [
+ "A4 客户管理/客户总览",
+ "A4 客户管理/我的客户",
+ "A4 客户管理/客户公海"
+ ],
+ "summary": "客户分页"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerController.java",
+ "className": "CustomerController",
+ "http": "POST",
+ "url": "/api/customer/search",
+ "tags": [
+ "A3 商机管理/销售机会"
+ ],
+ "summary": "商机侧客户搜索"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerController.java",
+ "className": "CustomerController",
+ "http": "POST",
+ "url": "/api/customer/quick-create",
+ "tags": [
+ "A4 客户管理/我的客户"
+ ],
+ "summary": "快速创建客户"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerController.java",
+ "className": "CustomerController",
+ "http": "GET",
+ "url": "/api/customer/contacts",
+ "tags": [
+ "A3 商机管理/销售机会"
+ ],
+ "summary": "按客户查联系人列表"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerController.java",
+ "className": "CustomerController",
+ "http": "GET",
+ "url": "/api/customer/check-name",
+ "tags": [
+ "A4 客户管理/客户查重"
+ ],
+ "summary": "名称相似提示"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerController.java",
+ "className": "CustomerController",
+ "http": "GET",
+ "url": "/api/customer/check-credit-code",
+ "tags": [
+ "A4 客户管理/客户查重"
+ ],
+ "summary": "信用代码查重"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerController.java",
+ "className": "CustomerController",
+ "http": "GET",
+ "url": "/api/customer/company-lookup",
+ "tags": [
+ "A4 客户管理/我的客户"
+ ],
+ "summary": "工商信息查询"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerController.java",
+ "className": "CustomerController",
+ "http": "POST",
+ "url": "/api/customer/company-lookup/batch-update",
+ "tags": [
+ "A4 客户管理/我的客户"
+ ],
+ "summary": "批量更新工商信息"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerDetailController.java",
+ "className": "CustomerDetailController",
+ "http": "GET",
+ "url": "/api/customer/detail-head",
+ "tags": [
+ "A4 客户管理/客户详情"
+ ],
+ "summary": "详情公共头部"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerDetailController.java",
+ "className": "CustomerDetailController",
+ "http": "GET",
+ "url": "/api/customer/member/list",
+ "tags": [
+ "A4 客户管理/客户详情/团队成员"
+ ],
+ "summary": "团队成员页签"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerDetailController.java",
+ "className": "CustomerDetailController",
+ "http": "POST",
+ "url": "/api/customer/member/add",
+ "tags": [
+ "A4 客户管理/客户详情/团队成员"
+ ],
+ "summary": "添加团队成员"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerDetailController.java",
+ "className": "CustomerDetailController",
+ "http": "POST",
+ "url": "/api/customer/member/remove",
+ "tags": [
+ "A4 客户管理/客户详情/团队成员"
+ ],
+ "summary": "移除团队成员"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerDetailController.java",
+ "className": "CustomerDetailController",
+ "http": "GET",
+ "url": "/api/customer/opportunity/page",
+ "tags": [
+ "A4 客户管理/客户详情/关联商机"
+ ],
+ "summary": "关联商机页签"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerDetailController.java",
+ "className": "CustomerDetailController",
+ "http": "GET",
+ "url": "/api/customer/oplog/page",
+ "tags": [
+ "A4 客户管理/客户详情/操作日志"
+ ],
+ "summary": "操作日志分页"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerDetailController.java",
+ "className": "CustomerDetailController",
+ "http": "POST",
+ "url": "/api/customer/follow/add",
+ "tags": [
+ "A4 客户管理/客户详情/跟进记录"
+ ],
+ "summary": "新增跟进"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerDetailController.java",
+ "className": "CustomerDetailController",
+ "http": "GET",
+ "url": "/api/customer/follow/page",
+ "tags": [
+ "A4 客户管理/客户详情/跟进记录"
+ ],
+ "summary": "跟进记录分页"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerFocusController.java",
+ "className": "CustomerFocusController",
+ "http": "POST",
+ "url": "/api/customer/focus",
+ "tags": [
+ "A4 客户管理/客户公海"
+ ],
+ "summary": "关注客户"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerFocusController.java",
+ "className": "CustomerFocusController",
+ "http": "POST",
+ "url": "/api/customer/unfocus",
+ "tags": [
+ "A4 客户管理/客户公海"
+ ],
+ "summary": "取消关注客户"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerFocusController.java",
+ "className": "CustomerFocusController",
+ "http": "POST",
+ "url": "/api/customer/star",
+ "tags": [
+ "A4 客户管理/客户详情"
+ ],
+ "summary": "标记重点客户"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerFocusController.java",
+ "className": "CustomerFocusController",
+ "http": "POST",
+ "url": "/api/customer/unstar",
+ "tags": [
+ "A4 客户管理/客户详情"
+ ],
+ "summary": "取消重点标记"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerFocusController.java",
+ "className": "CustomerFocusController",
+ "http": "POST",
+ "url": "/api/customer/focus-batch",
+ "tags": [
+ "A4 客户管理/客户公海"
+ ],
+ "summary": "批量关注客户"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerImportController.java",
+ "className": "CustomerImportController",
+ "http": "POST",
+ "url": "/api/customer/import/upload",
+ "tags": [
+ "A4 客户管理/我的客户/客户导入",
+ "A4 客户管理/客户公海"
+ ],
+ "summary": "上传导入文件并预校验"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerImportController.java",
+ "className": "CustomerImportController",
+ "http": "POST",
+ "url": "/api/customer/import/confirm",
+ "tags": [
+ "A4 客户管理/我的客户/客户导入",
+ "A4 客户管理/客户公海"
+ ],
+ "summary": "确认执行导入"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerImportController.java",
+ "className": "CustomerImportController",
+ "http": "GET",
+ "url": "/api/customer/import/result",
+ "tags": [
+ "A4 客户管理/我的客户/客户导入",
+ "A4 客户管理/客户公海"
+ ],
+ "summary": "任务结果"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerImportController.java",
+ "className": "CustomerImportController",
+ "http": "GET",
+ "url": "/api/customer/import/failures",
+ "tags": [
+ "A4 客户管理/我的客户/客户导入",
+ "A4 客户管理/客户公海"
+ ],
+ "summary": "失败/疑似重复明细"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerImportController.java",
+ "className": "CustomerImportController",
+ "http": "GET",
+ "url": "/api/customer/import/page",
+ "tags": [
+ "A4 客户管理/我的客户/客户导入",
+ "A4 客户管理/客户公海"
+ ],
+ "summary": "最近导入记录"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerImportController.java",
+ "className": "CustomerImportController",
+ "http": "GET",
+ "url": "/api/customer/import/template",
+ "tags": [
+ "A4 客户管理/我的客户/客户导入",
+ "A4 客户管理/客户公海"
+ ],
+ "summary": "下载导入模板"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerOwnershipController.java",
+ "className": "CustomerOwnershipController",
+ "http": "POST",
+ "url": "/api/customer/claim",
+ "tags": [
+ "A4 客户管理/客户总览",
+ "A4 客户管理/我的客户",
+ "A4 客户管理/客户公海"
+ ],
+ "summary": "领取客户(公海→当前用户)"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerOwnershipController.java",
+ "className": "CustomerOwnershipController",
+ "http": "POST",
+ "url": "/api/customer/claim-batch",
+ "tags": [
+ "A4 客户管理/客户总览",
+ "A4 客户管理/我的客户",
+ "A4 客户管理/客户公海"
+ ],
+ "summary": "批量领取"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerOwnershipController.java",
+ "className": "CustomerOwnershipController",
+ "http": "POST",
+ "url": "/api/customer/assign",
+ "tags": [
+ "A4 客户管理/客户总览",
+ "A4 客户管理/我的客户",
+ "A4 客户管理/客户公海"
+ ],
+ "summary": "分配客户(换销售负责人)"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerOwnershipController.java",
+ "className": "CustomerOwnershipController",
+ "http": "POST",
+ "url": "/api/customer/assign-batch",
+ "tags": [
+ "A4 客户管理/客户总览",
+ "A4 客户管理/我的客户",
+ "A4 客户管理/客户公海"
+ ],
+ "summary": "批量分配"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerOwnershipController.java",
+ "className": "CustomerOwnershipController",
+ "http": "POST",
+ "url": "/api/customer/release-pool",
+ "tags": [
+ "A4 客户管理/客户总览",
+ "A4 客户管理/我的客户",
+ "A4 客户管理/客户公海"
+ ],
+ "summary": "抛公海"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerOwnershipController.java",
+ "className": "CustomerOwnershipController",
+ "http": "POST",
+ "url": "/api/customer/release-pool-batch",
+ "tags": [
+ "A4 客户管理/客户总览",
+ "A4 客户管理/我的客户",
+ "A4 客户管理/客户公海"
+ ],
+ "summary": "批量抛公海"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerOwnershipController.java",
+ "className": "CustomerOwnershipController",
+ "http": "POST",
+ "url": "/api/customer/archive",
+ "tags": [
+ "A4 客户管理/客户总览",
+ "A4 客户管理/我的客户",
+ "A4 客户管理/客户公海"
+ ],
+ "summary": "归档客户(有效→已归档)"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerOwnershipController.java",
+ "className": "CustomerOwnershipController",
+ "http": "POST",
+ "url": "/api/customer/archive-batch",
+ "tags": [
+ "A4 客户管理/客户总览",
+ "A4 客户管理/我的客户",
+ "A4 客户管理/客户公海"
+ ],
+ "summary": "批量归档"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerOwnershipController.java",
+ "className": "CustomerOwnershipController",
+ "http": "POST",
+ "url": "/api/customer/restore",
+ "tags": [
+ "A4 客户管理/客户总览",
+ "A4 客户管理/我的客户",
+ "A4 客户管理/客户公海"
+ ],
+ "summary": "恢复客户(已归档→有效)"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerPingController.java",
+ "className": "CustomerPingController",
+ "http": "GET",
+ "url": "/api/customer/ping",
+ "tags": [],
+ "summary": "客户模块健康探针"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerTransferController.java",
+ "className": "CustomerTransferController",
+ "http": "GET",
+ "url": "/api/customer/transfer/preview",
+ "tags": [
+ "A4 客户管理/客户交割"
+ ],
+ "summary": "发起前客户预览"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerTransferController.java",
+ "className": "CustomerTransferController",
+ "http": "POST",
+ "url": "/api/customer/transfer/initiate",
+ "tags": [
+ "A4 客户管理/客户交割"
+ ],
+ "summary": "发起交接"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerTransferController.java",
+ "className": "CustomerTransferController",
+ "http": "GET",
+ "url": "/api/customer/transfer/detail",
+ "tags": [
+ "A4 客户管理/客户交割"
+ ],
+ "summary": "交接详情"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerTransferController.java",
+ "className": "CustomerTransferController",
+ "http": "GET",
+ "url": "/api/customer/transfer/page",
+ "tags": [
+ "A4 客户管理/客户交割"
+ ],
+ "summary": "交接记录分页"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerTransferController.java",
+ "className": "CustomerTransferController",
+ "http": "POST",
+ "url": "/api/customer/transfer/assign",
+ "tags": [
+ "A4 客户管理/客户交割"
+ ],
+ "summary": "客户分配(单个或批量)"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerTransferController.java",
+ "className": "CustomerTransferController",
+ "http": "GET",
+ "url": "/api/customer/transfer/assignable",
+ "tags": [
+ "A4 客户管理/客户交割"
+ ],
+ "summary": "可分配销售列表"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerWorkspaceController.java",
+ "className": "CustomerWorkspaceController",
+ "http": "POST",
+ "url": "/api/customer/workspace/page",
+ "tags": [
+ "A4 客户管理/客户总览",
+ "A4 客户管理/我的客户",
+ "A4 客户管理/客户公海"
+ ],
+ "summary": "workspace 列表分页"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerWorkspaceController.java",
+ "className": "CustomerWorkspaceController",
+ "http": "POST",
+ "url": "/api/customer/workspace/board/summary",
+ "tags": [
+ "A4 客户管理/客户总览/看板列表",
+ "A4 客户管理/我的客户/看板列表"
+ ],
+ "summary": "看板分组汇总"
+ },
+ {
+ "file": "crm-customer/src/main/java/com/crm/customer/controller/CustomerWorkspaceController.java",
+ "className": "CustomerWorkspaceController",
+ "http": "POST",
+ "url": "/api/customer/workspace/board/cards",
+ "tags": [
+ "A4 客户管理/客户总览/看板列表",
+ "A4 客户管理/我的客户/看板列表"
+ ],
+ "summary": "看板单列卡片"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/.scratch/customer-rework/bruno_scan_d.py b/.scratch/customer-rework/bruno_scan_d.py
new file mode 100644
index 0000000..a1b2666
--- /dev/null
+++ b/.scratch/customer-rework/bruno_scan_d.py
@@ -0,0 +1,270 @@
+"""bruno-sync Step 2/3 (本机 D:\ 路径版, 由 bruno_scan.py 改路径而来): scan Spring controllers -> reconcile with docs repo.
+
+Outputs JSON: {apis: [...], report: {...}}
+"""
+import json
+import os
+import re
+import sys
+
+if sys.stdout.encoding.lower() != "utf-8":
+ sys.stdout.reconfigure(encoding="utf-8")
+
+ROOTS = [
+ "crm-auth/src/main/java", "crm-file/src/main/java", "crm-lead/src/main/java",
+ "crm-opportunity/src/main/java", "crm-rule/src/main/java",
+ "crm-preference/src/main/java", "crm-dict/src/main/java",
+ "crm-customer/src/main/java",
+]
+PROJECT = r"d:\code\crm-backend-matt"
+DOCS = r"D:\code\crm-api-docs"
+
+def strip_comments(src):
+ src = re.sub(r"/\*.*?\*/", "", src, flags=re.S)
+ src = re.sub(r"//[^\n]*", "", src)
+ return src
+
+def extract_balanced(text, open_idx):
+ """text[open_idx] == '('. return inner content, end idx after ')'."""
+ depth = 0
+ i = open_idx
+ in_str = None
+ while i < len(text):
+ c = text[i]
+ if in_str:
+ if c == "\\":
+ i += 2
+ continue
+ if c == in_str:
+ in_str = None
+ else:
+ if c in "\"'":
+ in_str = c
+ elif c == "(":
+ depth += 1
+ elif c == ")":
+ depth -= 1
+ if depth == 0:
+ return text[open_idx + 1:i], i + 1
+ i += 1
+ return text[open_idx + 1:], len(text)
+
+def parse_str_array(body):
+ """parse {'a','b'} or "a" -> list of strings; also allow bare string."""
+ body = body.strip()
+ if body.startswith("{"):
+ return re.findall(r'"([^"]*)"', body)
+ m = re.match(r'^"([^"]*)"$', body)
+ return [m.group(1)] if m else []
+
+def find_annotations(src, name):
+ """find all @Name(...) blocks, return list of inner contents."""
+ out = []
+ for m in re.finditer(r"@" + name + r"\s*\(", src):
+ inner, _ = extract_balanced(src, m.end() - 1)
+ out.append(inner)
+ return out
+
+def scan_source():
+ apis = []
+ conflicts = []
+ for root in ROOTS:
+ base = os.path.join(PROJECT, root)
+ for dirpath, dirnames, filenames in os.walk(base):
+ for fn in filenames:
+ if not fn.endswith("Controller.java"):
+ continue
+ path = os.path.join(dirpath, fn)
+ src = strip_comments(open(path, encoding="utf-8").read())
+ if "@RestController" not in src:
+ continue
+ cls_m = re.search(r"class\s+(\w+)", src)
+ cls = cls_m.group(1) if cls_m else fn[:-5]
+ prefixes = []
+ for rm in re.finditer(r"@RequestMapping\s*\(", src):
+ inner, end = extract_balanced(src, rm.end() - 1)
+ if end <= len(src) and "class" in src[end:end + 200]:
+ vals = parse_str_array(inner) or re.findall(r'"([^"]*)"', inner)
+ pv = re.search(r'value\s*=\s*', inner)
+ prefixes = parse_str_array(inner[pv.end():]) if pv else vals
+ break
+ prefix = prefixes[0] if prefixes else ""
+ # class-level tags from @Tag(name=...)
+ cls_tags = []
+ head = src[:cls_m.start()]
+ for tag_inner in find_annotations(head, "Tag"):
+ nm = re.search(r'name\s*=\s*"([^"]*)"', tag_inner)
+ if nm:
+ cls_tags.append(nm.group(1))
+ # collect all @Operation blocks first (project style: @Operation BEFORE @Mapping)
+ ops = []
+ for om in re.finditer(r"@Operation\s*\(", src):
+ op_inner, op_end = extract_balanced(src, om.end() - 1)
+ ops.append({"start": om.start(), "end": op_end, "inner": op_inner})
+ # methods: find mapping annotations; assign the NEAREST @Operation BEFORE them
+ for mm in re.finditer(r"@(Get|Post|Put|Delete|Request)Mapping\s*(\(|$)", src, re.M):
+ anno_start = mm.start()
+ if mm.group(1) == "Request":
+ inner, end = extract_balanced(src, mm.end() - 1) if mm.group(2) == "(" else ("", mm.end())
+ meth_m = re.search(r"method\s*=\s*RequestMethod\.(\w+)", inner)
+ if not meth_m:
+ continue # class-level @RequestMapping (already consumed) or no method
+ http = meth_m.group(1)
+ pv = re.search(r'(?:value\s*=\s*)?"([^"]*)"', inner)
+ sub = pv.group(1) if pv else ""
+ else:
+ http = mm.group(1).upper()
+ if mm.group(2) == "(":
+ inner, end = extract_balanced(src, mm.end() - 1)
+ pv = re.search(r'(?:value\s*=\s*)?"([^"]*)"', inner)
+ sub = pv.group(1) if pv else ""
+ else:
+ end = mm.end()
+ sub = ""
+ url = (prefix + sub) if sub.startswith("/") else (prefix + ("/" + sub if sub else ""))
+ # find owning @Operation: project has BOTH styles.
+ # forward style: @Operation ... @PreAuthorize? ... @Mapping (customer/lead/opp)
+ # trailing style: @Mapping ... @PreAuthorize ... @Operation (crm-auth role/resource)
+ op = None
+ for cand in reversed(ops):
+ if cand["end"] <= anno_start:
+ between = src[cand["end"]:anno_start]
+ if "{" in between:
+ continue # a method body separates them -> belongs to an earlier method
+ op = cand
+ break
+ if op is None:
+ body_brace = src.find("{", end)
+ if body_brace == -1:
+ body_brace = len(src)
+ for cand in ops:
+ if cand["start"] >= end and cand["start"] < body_brace:
+ op = cand
+ break
+ op_tags = None
+ summary = ""
+ if op is not None:
+ sm = re.search(r'summary\s*=\s*"([^"]*)"', op["inner"])
+ if sm:
+ summary = sm.group(1)
+ tm = re.search(r"tags\s*=\s*(\{[^}]*\}|\"[^\"]*\")", op["inner"], re.S)
+ if tm:
+ op_tags = parse_str_array(tm.group(1))
+ method_tags = []
+ if op_tags is None:
+ # method-level @Tag between op end and mapping
+ back = src[anno_start - 800:anno_start]
+ t_m = None
+ for ti in find_annotations(back, "Tag"):
+ t_m = ti
+ if t_m:
+ nm = re.search(r'name\s*=\s*"([^"]*)"', t_m)
+ if nm:
+ method_tags = [nm.group(1)]
+ tags = op_tags if op_tags is not None else (method_tags if method_tags else cls_tags)
+ if not tags:
+ tags = []
+ apis.append({
+ "file": os.path.relpath(path, PROJECT).replace("\\", "/"),
+ "className": cls, "http": http, "url": url,
+ "tags": tags, "summary": summary,
+ })
+ # key conflicts (method+url, before tag expansion)
+ seen = {}
+ for a in apis:
+ k = a["http"] + " " + a["url"]
+ seen.setdefault(k, []).append(a)
+ for k, v in seen.items():
+ if len(v) > 1:
+ conflicts.append({"key": k, "files": [x["file"] for x in v]})
+ return apis, conflicts
+
+def scan_docs():
+ """return [{path, key, generated, folder}] for all .bru files."""
+ out = []
+ skip = {"node_modules", ".git", "environments"}
+ for dirpath, dirnames, filenames in os.walk(DOCS):
+ dirnames[:] = [d for d in dirnames if d not in skip]
+ for fn in filenames:
+ if not fn.endswith(".bru") or fn == "collection.bru" or fn == "folder.bru":
+ continue
+ path = os.path.join(dirpath, fn)
+ content = open(path, encoding="utf-8").read()
+ gen = bool(re.search(r"tags\s*:\s*\[[^\]]*generated", content, re.S))
+ key = None
+ km = re.search(r"docs\s*\{.*?`([A-Z]+)\s+(\S+)`", content, re.S)
+ if km:
+ key = km.group(1) + " " + km.group(2)
+ folder = os.path.basename(dirpath)
+ out.append({"path": os.path.relpath(path, DOCS).replace("\\", "/"),
+ "key": key, "generated": gen, "folder": folder})
+ return out
+
+def main():
+ apis, conflicts = scan_source()
+ docs = scan_docs()
+ # expand source keys: one per (method+url, tag)
+ src_keys = {}
+ for a in apis:
+ tags = a["tags"]
+ if tags:
+ tl = list(tags)
+ else:
+ # no tag -> urlPattern fallback dir: module[/resource]
+ seg = [s for s in a["url"].split("/") if s]
+ if seg and seg[0] == "api":
+ seg = seg[1:]
+ tl = ["/".join(seg[:2])]
+ for t in tl:
+ k = (a["http"] + " " + a["url"], t)
+ if k in src_keys:
+ conflicts.append({"key": k[0] + " @" + str(t), "files": [src_keys[k]["file"], a["file"]]})
+ else:
+ src_keys[k] = a
+ # file keys
+ file_keys = {}
+ for d in docs:
+ if not d["generated"]:
+ continue
+ if d["key"] is None:
+ d["unrecognized"] = True
+ continue
+ rel = d["path"]
+ parts = rel.split("/")
+ # tag = full dir path between repo root and file
+ tag = "/".join(parts[:-1])
+ k = (d["key"], tag)
+ file_keys[k] = d
+ new_items = []
+ del_items = []
+ keep = 0
+ for k in src_keys:
+ if k not in file_keys:
+ a = src_keys[k]
+ new_items.append({"key": k[0], "tag": k[1], "summary": a["summary"],
+ "file": a["file"], "className": a["className"]})
+ for k, d in file_keys.items():
+ if k not in src_keys:
+ del_items.append({"key": k[0], "tag": k[1], "path": d["path"]})
+ for k in src_keys:
+ if k in file_keys:
+ keep += 1
+ report = {
+ "source_api_count": len(apis),
+ "source_key_count": len(src_keys),
+ "generated_file_count": len([d for d in docs if d["generated"]]),
+ "private_file_count": len([d for d in docs if not d["generated"]]),
+ "unrecognized_count": len([d for d in docs if d.get("unrecognized")]),
+ "key_conflicts": conflicts,
+ "keep_count": keep,
+ "new_count": len(new_items),
+ "delete_file_count": len(set(x["path"] for x in del_items)),
+ "delete_distinct_url_count": len(set(x["key"] for x in del_items)),
+ }
+ out = {"report": report, "new": new_items, "delete": del_items, "docs": docs, "apis": apis}
+ with open(os.path.join(PROJECT, r".scratch\customer-rework\bruno-recon-d.json"), "w", encoding="utf-8") as f:
+ json.dump(out, f, ensure_ascii=False, indent=1)
+ print(json.dumps(report, ensure_ascii=False, indent=1))
+
+if __name__ == "__main__":
+ main()
diff --git a/.scratch/customer-rework/deploy_bru.py b/.scratch/customer-rework/deploy_bru.py
new file mode 100644
index 0000000..7f0b330
--- /dev/null
+++ b/.scratch/customer-rework/deploy_bru.py
@@ -0,0 +1,37 @@
+"""copy staged .bru files into the docs repo (workspace-external -> python only)."""
+import io
+import os
+import sys
+
+sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
+
+STAGE = r"d:\code\crm-backend-matt\.scratch\customer-rework\bru-staging"
+DOCS = r"D:\code\crm-api-docs"
+
+MAPPING = [
+ ("战略协议", "A4 客户管理/战略协议"), # whole dir, 5 files
+ ("我的客户/批量更新工商信息.bru", "A4 客户管理/我的客户/批量更新工商信息.bru"),
+ ("客户公海/上传导入文件并预校验.bru", "A4 客户管理/客户公海/上传导入文件并预校验.bru"),
+ ("客户导入/上传导入文件并预校验.bru", "A4 客户管理/我的客户/客户导入/上传导入文件并预校验.bru"),
+]
+
+
+def copy_clean(src, dst):
+ data = open(src, "rb").read()
+ if data[:3] == b"\xef\xbb\xbf":
+ data = data[3:]
+ os.makedirs(os.path.dirname(dst), exist_ok=True)
+ open(dst, "wb").write(data)
+ print("OK", dst.replace(DOCS, ""), len(data), "bytes")
+
+
+for src_rel, dst_rel in MAPPING:
+ s = os.path.join(STAGE, *src_rel.split("/"))
+ d = os.path.join(DOCS, *dst_rel.split("/"))
+ if os.path.isdir(s):
+ for root, _, files in os.walk(s):
+ for fn in files:
+ rel = os.path.relpath(os.path.join(root, fn), s)
+ copy_clean(os.path.join(root, fn), os.path.join(d, *rel.split(os.sep)))
+ else:
+ copy_clean(s, d)
diff --git a/.scratch/customer-rework/issues/09-audit-fixes.md b/.scratch/customer-rework/issues/09-audit-fixes.md
index bd462b1..0ce7a47 100644
--- a/.scratch/customer-rework/issues/09-audit-fixes.md
+++ b/.scratch/customer-rework/issues/09-audit-fixes.md
@@ -1,6 +1,6 @@
# 09 · 复核差异清单修复
-- **Status:** claimed
+- **Status:** resolved
- **Type:** task
- **Blocked by:** 08-audit-prototype
@@ -29,3 +29,21 @@
## 验收
- 差异清单全部条目状态为"已修 / 已单开票 / 明确不修(记理由)",无悬空项。
+
+## Answer(2026-09-05 收尾)
+
+**处置总览**(明细见 `audit-findings.md` §四处置状态表):
+
+- **已修六项**:
+ - S1 错误码撞号——实改与票面建议相反:64022 已被 `CODE_SCHEME_TPL_FIELD_INVALID` 占用,故 `CODE_SCHEME_TPL_INVALID` 保 64018(64018-64022 归方案卡模板段),`CODE_STAGE_TPL_SEED_PROTECTED` 64018→**64024** 顺延补位;
+ - F3 import 六端点双 tag 增挂「客户公海」;
+ - F6 批量工商更新 `POST /api/customer/company-lookup/batch-update`(ids 表单绑定、§C2 只补空缺、五种状态软处置、上限 100;port stub 恒 NO_HIT,真实企查查接入自动激活);
+ - F7 审计口径偏差澄清——viewType 单参数已承载五内置视图,真缺口为 customer_view_log 生产侧零写入(票 04 建壳挂账),按实体 javadoc 设计意图在 detailHead 聚合时 upsert touchViewLog,零新端点;
+ - F8 导入重复策略 `duplicateStrategy`(SKIP 缺省 / OVERWRITE 67013 拦非法;D24 冻结语义:作用面仅文件内重复组,overwrite=组内最后一条通过校验的行 UPDATE 生效;不触名称相似 SUSPECT);
+ - F10 联系人日志轻方案——客户 oplog 扩 CONTACT_ADD/EDIT/DELETE,联系人增删改三处写日志。
+- **已单开票**:F5 战略协议 → 票 12(原型三页完整,全栈实现+测试+bruno 移交)。
+- **明确不修(记理由)**:F4 关联项目随 A5 项目域划出;F9 导出日志随 D2 导出家族划出(均经用户 2026-09-05 逐项拍板)。
+
+**验证**:`mvn clean test -pl crm-customer -am` BUILD SUCCESS——crm-customer 152 用例全绿(含 F6 +4、F7 +1、F8 +3、F10 +1 新用例),依赖六模块(base 38 / file 84 / auth 210 / dict 51 / rule 152 / preference 23)全绿;全模块 .java BOM 扫描 NO BOM。
+
+**随票移交**:bruno 侧 F6/F8 新参数与 F7 行为示例未在本票内同步,随票 10 bruno 对账步统一核补(文档仓本机 `D:\code\crm-api-docs`)。
diff --git a/.scratch/customer-rework/issues/10-regression-retest.md b/.scratch/customer-rework/issues/10-regression-retest.md
index c75f967..f2f478c 100644
--- a/.scratch/customer-rework/issues/10-regression-retest.md
+++ b/.scratch/customer-rework/issues/10-regression-retest.md
@@ -1,16 +1,28 @@
# 10 · 回归重测(验收线)
-- **Status:** open
+- **Status:** resolved
- **Type:** task
- **Blocked by:** 09-audit-fixes
+## Answer(2026-09-05)
+
+五项验收全过(详见 [RETEST-REPORT.md](../RETEST-REPORT.md)):
+
+1. **mvn test 三模块全绿**:rule 152 / customer 158 / opp 242(基线 521 → 552,绿为准)。
+2. **冒烟全链 code=0**:`tmp/smoke-t10.py` 新写(URL 全现行端点),**43 步 0 fail**——三 workspace 列表+看板(pool 看板断言 67001 拒绝)、建改查(CAS version)、联系人 CRUD、抛公海/领取/分配、交割只读、导入全链(**duplicateStrategy=SKIP 回显断言**,F8)、列+形态偏好、商机偏好、**战略协议五端点 + DB 快照 2→3→NULL 断言**(票 12)、批量工商 NO_HIT(F6)。重打包 fat jar(新代码入包验证:启动日志 customerAgreementMapper 注册)。
+3. **bruno 对账终态**:321 源码钥匙 = 321 generated 文件,new/delete/冲突/无法识别全 0;本次落 8 文件(战略协议 5 + 批量工商 1 + upload patch ×2);A4 树对齐 v29(战略协议按票 12 拍板挂 A4 根)。
+4. **BOM 全仓零命中**。
+5. **风格 grep 零命中**。
+
+已知缺陷引用(非回归,维持原状):D-07(P1) assignable 超时(票 05 登记,冒烟缺陷验证模式)、导入 D-04/D-05(票 09 audit 记档)。
+
## 验收线(R10,逐项过)
-- [ ] `mvn test`:crm-rule + crm-customer + crm-opportunity 三模块全绿(基线 521:146/122/242,风格改造后数量随用例变化,绿为准);
-- [ ] 冒烟脚本重跑全链 code=0:复用 `tools/smoke-t12m.py` 范式,URL 换 02 号票改造后的新端点,覆盖:登录 → 客户三 workspace 列表/看板(公海看板断言拒绝——用户复核原型确认公海无卡片视图)→ 建改查客户 → 联系人 CRUD → 认领/分配/抛公海 → 交割 → 导入全链 → 偏好存取(列 + 形态)→ 商机偏好存取;
-- [ ] bruno 产出验收:`E:\code\crm-api-docs` A4 目录树对齐 v29 树,knife4j 分组同构(07 号票已建,此处终验);
-- [ ] BOM 扫描:全仓 `*.java` 无 `EF BB BF` 前缀(AGENTS.md 编码纪律);
-- [ ] `grep -r "PathVariable\|@PutMapping\|@DeleteMapping\|@RequestBody" crm-customer/` 零命中终验。
+- [x] `mvn test`:crm-rule + crm-customer + crm-opportunity 三模块全绿(基线 521:146/122/242,风格改造后数量随用例变化,绿为准);
+- [x] 冒烟脚本重跑全链 code=0:复用 `tools/smoke-t12m.py` 范式,URL 换 02 号票改造后的新端点,覆盖:登录 → 客户三 workspace 列表/看板(公海看板断言拒绝——用户复核原型确认公海无卡片视图)→ 建改查客户 → 联系人 CRUD → 认领/分配/抛公海 → 交割 → 导入全链 → 偏好存取(列 + 形态)→ 商机偏好存取;
+- [x] bruno 产出验收:`E:\code\crm-api-docs` A4 目录树对齐 v29 树,knife4j 分组同构(07 号票已建,此处终验)——本机实际路径 `D:\code\crm-api-docs`(换机),对账 321=321;
+- [x] BOM 扫描:全仓 `*.java` 无 `EF BB BF` 前缀(AGENTS.md 编码纪律);
+- [x] `grep -r "PathVariable\|@PutMapping\|@DeleteMapping\|@RequestBody" crm-customer/` 零命中终验。
## 产出
diff --git a/.scratch/customer-rework/issues/12-agreement.md b/.scratch/customer-rework/issues/12-agreement.md
new file mode 100644
index 0000000..b76fd41
--- /dev/null
+++ b/.scratch/customer-rework/issues/12-agreement.md
@@ -0,0 +1,40 @@
+# 12 · 战略协议单表 CRUD(F5)
+
+- **Status:** resolved
+- **Type:** task
+- **Blocked by:** 09-audit-fixes(F5 拍板产出)
+
+## Question
+
+原型 a4-4-6(页签)/ a4-4-9(新增)/ a4-4-10(编辑)三页有完整形态但零端点(audit-findings F5,票 09 拍板本期补、单开本票)。战略协议作为客户详情页签的单表 CRUD 全栈如何落?
+
+## 设计定稿(2026-09-05)
+
+- **表** `customer_agreement`(BaseEntity 范式,对齐 CustomerContact):
+ - `customer_id` bigint not null(所属客户,无独立 ACL 权限继承客户)
+ - `agreement_level` tinyint not null(**1~3** 一级/二级/三级——值域钉在 Customer.strategicAgreementLevel 注释「快照 1~3」)
+ - `amount` varchar(64)(签订金额,对齐 registeredCapital varchar 先例——允许区间/文字形态)
+ - `remark` varchar(500)、`file_file_id` varchar(64)(附件单文件,crm-file fileId 引用,对齐 CustomerImportTask.fileFileId 先例;下载走 crm-file 通用端点零新下载口)
+ - 命名策略:无孤立单大写字母,无需 @Column(name=...) 钉名
+- **URL**(ADR-0017 扁平动作动词,对齐 contact 家族):`POST /api/customer/agreement/create`、`POST /edit?id=`、`POST /delete?id=`、`GET /detail?id=`、`GET /list?customerId=`(页签卡片列表,时间倒序非分页)
+- **错误码** `CODE_AGREEMENT_INVALID = 67017`(入参非法/等级越界/协议不存在或无权——防探测同码)
+- **oplog**(对齐 F10 CONTACT_* 先例):ACTION_AGREEMENT_ADD/EDIT/DELETE,detail「新增/修改/删除战略协议【三级】」
+- **客户快照刷新**(兑现 Customer.strategicAgreementLevel javadoc「战略协议子域写入,本图只读」承诺):create/edit/delete 后重算该客户最新一条协议(create_time,id 倒序 limit 1)的等级回写 `customer.strategic_agreement_level`(无协议 → NULL=未签);LambdaUpdateWrapper 只更新该列不 bump version(对齐跟进锚点刷新先例)
+- **tag** `A4 客户管理/战略协议`(三页均在 客户>我的客户>客户详情 下,单菜单归属)
+- **编辑语义**:customerId 不可换(dto 值忽略,对齐 contact);等级必填且 ∈ 1~3
+
+## 验收
+
+- mvn test crm-customer 全绿(新增 H2 集成测试:CRUD 正常路径 + 校验路径 + 快照刷新 + 权限继承客户 + oplog 三动作)
+- 端点 grep 无 @PathVariable/@PutMapping/@DeleteMapping/@RequestBody
+- bruno 侧新端点示例随票 10 bruno 对账步统一核补(同 F6/F8 处置)
+
+## Answer(2026-09-05)
+
+**按设计定稿全栈落地**(全部与票面定稿一致,两处实现期修正见下):
+
+- **后端栈**:`CustomerAgreement` 实体(customer_agreement 表:customerId / agreementLevel 1~3 / amount varchar(64) / remark / fileFileId)+ `CustomerAgreementMapper`(纯 CrmBaseMapper,无自定义 SQL)+ `AgreementDTO` 双向 DTO + `ICustomerAgreementService` / `CustomerAgreementServiceImpl` + `CustomerAgreementController` 五端点(`POST /api/customer/agreement/create|edit?id=|delete?id=`、`GET /detail?id=|list?customerId=`);错误码 67017;oplog 扩 AGREEMENT_ADD/EDIT/DELETE。
+- **快照刷新兑现**:create/edit/delete 后重算最新协议等级回写 `customer.strategic_agreement_level`(删空回 NULL=未签),LambdaUpdateWrapper 不 bump version——`Customer` 实体 javadoc「战略协议子域写入,本图只读」的设计承诺自此闭环。
+- **实现期修正两处**:(1) `listByCustomer` 首版漏填出参 customerName(契约承诺带出),对齐 contact 的 listByCustomer 补上;(2) 测试对 @TableLogic 语义的断言修正——已删行 `selectById` 返回 null(非 deleted=true 行),软删位验证改原生 SQL 直读 deleted 列。
+- **验证**:`mvn test -pl crm-customer -am` BUILD SUCCESS——crm-customer **158** 用例全绿(+6:create 快照 / edit 不可换客 / delete 快照回退与回 NULL / list+detail / 校验三路 / 防探测与权限继承);规范 grep(@PathVariable|@PutMapping|@DeleteMapping|@RequestBody)零命中;BOM 扫描 NO BOM。
+- **bruno**:menuBindings 无需新增(协议端点无 viewType/scopeKey 参数);br 文件生成随票 10 对账步(文档仓 `D:\code\crm-api-docs\A4 客户管理\`)。
diff --git a/.scratch/customer-rework/map.md b/.scratch/customer-rework/map.md
index 7c389da..5788139 100644
--- a/.scratch/customer-rework/map.md
+++ b/.scratch/customer-rework/map.md
@@ -40,6 +40,12 @@
- [08 · 双镜头全量复核(规范 + 原型)](issues/08-audit-prototype.md) — audit-findings.md:镜头一五项全绿 + S1 错误码 64018 双绑;镜头二四种子收口 + 7 差异项(机械修 S1/F3,需决策 F4-F10);09 票范围已回填。
+- [09 · 复核差异清单修复](issues/09-audit-fixes.md) — 六修一开两划:S1(实改反向:SEED_PROTECTED 顺延 64024)、F3 双 tag、F6 批量工商更新端点、F7(口径收窄:viewType 五内置视图已在,补 viewTouch upsert)、F8 duplicateStrategy(D24 语义)、F10 联系人 oplog 轻方案;F5 单开票 12、F4/F9 划出(用户逐项拍板);crm-customer 152 全绿 + BOM 无。
+
+- [12 · 战略协议单表 CRUD(F5)](issues/12-agreement.md) — customer_agreement 表 + 五端点(create/edit/delete/detail/list)+ 错误码 67017 + oplog AGREEMENT_*;客户快照 strategic_agreement_level 随写刷新(javadoc「战略协议子域写入」承诺闭环);crm-customer 158 全绿。
+
+- [10 · 回归重测](issues/10-regression-retest.md) — 五项验收全过:三模块 152/158/242 绿、冒烟 43 步 0 fail(新端点全覆盖 + DB 快照断言 + D-07 缺陷验证模式)、bruno 对账 321=321 终态(落 8 文件)、BOM 零、风格 grep 零;产出 [RETEST-REPORT.md](RETEST-REPORT.md)。
+
## 范围外(Out of scope)
- 客户导出(原型有规则,维持 D2 划出,涉及脱敏口径,量级独立)
@@ -54,10 +60,10 @@
```
01 ag-checklist ──┬──> 02 style-unify ──┬──> 03 board-pool-close ──┐
│ └──> 04 gap-fixes ─────────┤
- │ ├──> 08 audit ──> 09 audit-fixes ──┬──> 10 regression
- │ 05 view-form-platform ──┬──> 07 tags-bruno ──┤ │
- │ 06 column-pref-scopes ──┘ │ │
- └───────────────────────────────────────────────┘ 11 docs-sync <────┘
+ │ ├──> 08 audit ──> 09 audit-fixes ──┬──> 12 agreement ──┬──> 10 regression
+ │ 05 view-form-platform ──┬──> 07 tags-bruno ──┤ │ │
+ │ 06 column-pref-scopes ──┘ │ │ │
+ └───────────────────────────────────────────────┘ 11 docs-sync <────┴───────────────────┘
```
- 01 是全部票的前置(checklist 是复核依据)
diff --git a/crm-customer/src/main/java/com/crm/customer/constant/CustomerConstants.java b/crm-customer/src/main/java/com/crm/customer/constant/CustomerConstants.java
index bd38825..3e71994 100644
--- a/crm-customer/src/main/java/com/crm/customer/constant/CustomerConstants.java
+++ b/crm-customer/src/main/java/com/crm/customer/constant/CustomerConstants.java
@@ -26,6 +26,7 @@ public interface CustomerConstants {
int CODE_IMPORT_STATUS_NOT_ALLOWED = 67014; // 导入任务状态不允许此操作(重复确认/下载未生成明细)
int CODE_DEDUP_RULE_MISSING = 67015; // 查重设置单例缺失(crm-rule 未初始化)
int CODE_MEMBER_INVALID = 67016; // 成员管理非法:名单空/含负责人/重复加入/用户不存在或停用/成员不存在(原型 11.1)
+ int CODE_AGREEMENT_INVALID = 67017; // 战略协议非法:等级缺失或越界/协议不存在或无权访问(返工票 12-F5)
/*-------- 编号规则--------*/
@@ -92,6 +93,12 @@ public interface CustomerConstants {
String ACTION_STAGE_CHANGE = "STAGE_CHANGE"; // 阶段推进(operator=系统或人工)
String ACTION_MEMBER_ADD = "MEMBER_ADD"; // 添加协同人(原型 11.1 搜索多选)
String ACTION_MEMBER_REMOVE = "MEMBER_REMOVE"; // 移除协同人(原型 11.1 二次确认)
+ String ACTION_CONTACT_ADD = "CONTACT_ADD"; // 新增联系人(返工票 09-F10,a4-5-6)
+ String ACTION_CONTACT_EDIT = "CONTACT_EDIT"; // 编辑联系人(返工票 09-F10,a4-5-6)
+ String ACTION_CONTACT_DELETE = "CONTACT_DELETE"; // 删除联系人(返工票 09-F10,a4-5-6)
+ String ACTION_AGREEMENT_ADD = "AGREEMENT_ADD"; // 新增战略协议(返工票 12-F5,a4-4-6)
+ String ACTION_AGREEMENT_EDIT = "AGREEMENT_EDIT"; // 编辑战略协议(返工票 12-F5,a4-4-6)
+ String ACTION_AGREEMENT_DELETE = "AGREEMENT_DELETE"; // 删除战略协议(返工票 12-F5,a4-4-6)
/*-------- 待发通知(票 09 / issues-10 §D,对称商机 notice 语义)--------*/
@@ -114,6 +121,10 @@ public interface CustomerConstants {
String IMPORT_MODE_APPEND_ONLY = "APPEND_ONLY"; // 仅新增
String IMPORT_MODE_UPDATE_ONLY = "UPDATE_ONLY"; // 仅更新
String IMPORT_MODE_UPSERT = "UPSERT"; // 新增或更新
+
+ /** 重复策略(a4-3-2 复选框 / 旧图 D24:互斥,默认不导入;覆盖=文件内自上而下最后一条通过校验的为准) */
+ String IMPORT_DUP_SKIP = "SKIP"; // 数据重复时不导入(默认,重复组全失败)
+ String IMPORT_DUP_OVERWRITE = "OVERWRITE"; // 数据重复时覆盖导入(重复组仅最后一条生效)
int IMPORT_STATUS_DRAFT = 0; // 待确认(预校验完成,等用户 confirm)
int IMPORT_STATUS_RUNNING = 1; // 处理中
diff --git a/crm-customer/src/main/java/com/crm/customer/controller/CustomerAgreementController.java b/crm-customer/src/main/java/com/crm/customer/controller/CustomerAgreementController.java
new file mode 100644
index 0000000..7ad5aee
--- /dev/null
+++ b/crm-customer/src/main/java/com/crm/customer/controller/CustomerAgreementController.java
@@ -0,0 +1,63 @@
+package com.crm.customer.controller;
+
+import com.crm.base.domain.result.Result;
+import com.crm.customer.domain.dto.AgreementDTO;
+import com.crm.customer.service.ICustomerAgreementService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * 战略协议接口(返工票 12-F5 / 原型 a4-4-6 页签 + a4-4-9 新增 + a4-4-10 编辑)。
+ *
+ *
写入参 {@link AgreementDTO} 隐式表单绑定(ADR-0017);权限继承所属客户
+ * (无独立 ACL),服务端按客户可见性校验,无权 67017/67002。附件存 crm-file
+ * fileId 引用,下载由前端走 crm-file 通用端点。
+ */
+@Tag(name = "A4 客户管理/战略协议", description = "战略协议页签 CRUD(客户详情)")
+@RestController
+@RequestMapping("/api/customer/agreement")
+@RequiredArgsConstructor
+public class CustomerAgreementController {
+
+ private final ICustomerAgreementService agreementService;
+
+ @Operation(summary = "新增战略协议", description = "所属客户必填且对当前用户可见;等级 1~3 必填;写后刷新客户战略协议等级快照")
+ @PostMapping("/create")
+ public Result create(AgreementDTO dto) {
+ return Result.success(agreementService.create(dto));
+ }
+
+ @Operation(summary = "编辑战略协议", description = "归属客户不可换;等级 1~3;写后刷新客户快照")
+ @PostMapping("/edit")
+ public Result update(@RequestParam("id") Long id, AgreementDTO dto) {
+ agreementService.update(id, dto);
+ return Result.success();
+ }
+
+ @Operation(summary = "删除战略协议", description = "软删;删空后客户快照回 NULL=未签")
+ @PostMapping("/delete")
+ public Result delete(@RequestParam("id") Long id) {
+ agreementService.delete(id);
+ return Result.success();
+ }
+
+ @Operation(summary = "战略协议详情", description = "编辑回显(a4-4-10)")
+ @GetMapping("/detail")
+ public Result detail(@RequestParam("id") Long id) {
+ return Result.success(agreementService.detail(id));
+ }
+
+ @Operation(summary = "战略协议页签列表", description = "客户详情页签卡片(a4-4-6),时间倒序非分页;带出客户名")
+ @GetMapping("/list")
+ public Result> list(@RequestParam("customerId") Long customerId) {
+ return Result.success(agreementService.listByCustomer(customerId));
+ }
+}
diff --git a/crm-customer/src/main/java/com/crm/customer/controller/CustomerController.java b/crm-customer/src/main/java/com/crm/customer/controller/CustomerController.java
index 016e388..1fd89ba 100644
--- a/crm-customer/src/main/java/com/crm/customer/controller/CustomerController.java
+++ b/crm-customer/src/main/java/com/crm/customer/controller/CustomerController.java
@@ -11,6 +11,7 @@ import com.crm.customer.domain.dto.CustomerSaveResultDTO;
import com.crm.customer.domain.dto.CustomerSearchItemDTO;
import com.crm.customer.domain.dto.CustomerSimilarHitDTO;
import com.crm.customer.domain.dto.CustomerUpdateDTO;
+import com.crm.customer.domain.dto.CompanyBatchUpdateDTO;
import com.crm.customer.domain.param.CustomerPageParam;
import com.crm.customer.domain.param.CustomerSearchParam;
import com.crm.customer.port.CompanyLookupPort;
@@ -122,4 +123,12 @@ public class CustomerController {
@RequestParam("companyName") String companyName) {
return Result.success(companyLookupPort.lookup(companyName));
}
+
+ @Operation(summary = "批量更新工商信息", tags = {"A4 客户管理/我的客户"},
+ description = "a4-3-1 多选确认弹窗(你选择了N个客户,确认要批量查询并更新工商信息吗):逐客户按名称查工商源并回填空缺字段,"
+ + "行级部分成功返回每客户结果(UPDATED/SKIPPED/NO_HIT/CONFLICT/NOT_FOUND);单次上限 100;一期 stub 恒 NO_HIT")
+ @PostMapping("/company-lookup/batch-update")
+ public Result> batchCompanyUpdate(@RequestParam("ids") List ids) {
+ return Result.success(customerService.batchCompanyUpdate(ids));
+ }
}
diff --git a/crm-customer/src/main/java/com/crm/customer/controller/CustomerImportController.java b/crm-customer/src/main/java/com/crm/customer/controller/CustomerImportController.java
index 95c695c..6c46e97 100644
--- a/crm-customer/src/main/java/com/crm/customer/controller/CustomerImportController.java
+++ b/crm-customer/src/main/java/com/crm/customer/controller/CustomerImportController.java
@@ -44,12 +44,13 @@ public class CustomerImportController {
private final ICustomerImportService importService;
@Operation(summary = "上传导入文件并预校验",
- description = "文件守门(.xls/.xlsx、≤20MB、模板版本、单 sheet ≤5 万行)→ 行级判定(与执行同口径)→ 任务落待确认态,返回预计数 + 明细(上限 100 条)",
+ description = "文件守门(.xls/.xlsx、≤20MB、模板版本、单 sheet ≤5 万行)→ 行级判定(与执行同口径)→ 任务落待确认态,返回预计数 + 明细(上限 100 条);duplicateStrategy=数据重复时覆盖导入(OVERWRITE)/不导入(SKIP,默认)",
tags = {"A4 客户管理/我的客户/客户导入", "A4 客户管理/客户公海"})
@PostMapping("/upload")
public Result upload(@RequestParam("file") MultipartFile file,
- @RequestParam("importMode") String importMode) {
- return Result.success(importService.upload(file, importMode));
+ @RequestParam("importMode") String importMode,
+ @RequestParam(value = "duplicateStrategy", required = false) String duplicateStrategy) {
+ return Result.success(importService.upload(file, importMode, duplicateStrategy));
}
@Operation(summary = "确认执行导入", description = "待确认 → 处理中 + 触发异步执行;重复确认 67014 阻断",
diff --git a/crm-customer/src/main/java/com/crm/customer/domain/dto/AgreementDTO.java b/crm-customer/src/main/java/com/crm/customer/domain/dto/AgreementDTO.java
new file mode 100644
index 0000000..c1a9781
--- /dev/null
+++ b/crm-customer/src/main/java/com/crm/customer/domain/dto/AgreementDTO.java
@@ -0,0 +1,52 @@
+package com.crm.customer.domain.dto;
+
+import com.crm.base.domain.dto.BaseDTO;
+import com.crm.customer.domain.entity.CustomerAgreement;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.beans.BeanUtils;
+
+/**
+ * 战略协议双向 DTO(ADR-0017 Route A:写入参 + 出参同一类,对齐 {@link ContactDTO})。
+ *
+ * 写入:customerId/agreementLevel 必填;出参带 customerName(页签卡片带出客户名,
+ * 与列表场景的面包屑上下文一致)。附件 fileFileId 双向透传,前端凭此走 crm-file 下载。
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Schema(description = "战略协议(写入参/出参双向)")
+public class AgreementDTO extends BaseDTO {
+
+ @Schema(description = "所属客户 id(新增必填;编辑时以库内归属为准不可换客户)")
+ private Long customerId;
+
+ @Schema(description = "战略协议等级 1~3(一级/二级/三级)", requiredMode = Schema.RequiredMode.REQUIRED)
+ private Integer agreementLevel;
+
+ @Schema(description = "签订金额(文本:数字/区间/含单位,可空)")
+ private String amount;
+
+ @Schema(description = "备注(可空)")
+ private String remark;
+
+ @Schema(description = "附件 fileId(crm-file 引用,单文件,可空)")
+ private String fileFileId;
+
+ // -------- 出参(带出客户名) --------
+
+ @Schema(description = "所属客户名称(仅出参)")
+ private String customerName;
+
+ public static CustomerAgreement toEntity(AgreementDTO dto) {
+ CustomerAgreement entity = new CustomerAgreement();
+ BeanUtils.copyProperties(dto, entity, "id", "createTime", "updateTime", "customerName");
+ return entity;
+ }
+
+ public static AgreementDTO fromEntity(CustomerAgreement entity) {
+ AgreementDTO dto = new AgreementDTO();
+ BeanUtils.copyProperties(entity, dto);
+ return dto;
+ }
+}
diff --git a/crm-customer/src/main/java/com/crm/customer/domain/dto/CompanyBatchUpdateDTO.java b/crm-customer/src/main/java/com/crm/customer/domain/dto/CompanyBatchUpdateDTO.java
new file mode 100644
index 0000000..a440ef6
--- /dev/null
+++ b/crm-customer/src/main/java/com/crm/customer/domain/dto/CompanyBatchUpdateDTO.java
@@ -0,0 +1,54 @@
+package com.crm.customer.domain.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 批量更新工商信息单客户结果(返工票 09-F6 / a4-3-1 多选确认弹窗)。
+ *
+ * 行级部分成功:单客户失败(未命中/冲突/无空缺)不影响其余客户;
+ * status 语义见常量。一期企查查 stub 恒空 → 全部 NO_HIT(契约先行,
+ * 真实 port Bean 接入后行为自动激活)。
+ */
+@Data
+@Schema(description = "批量更新工商信息单客户结果")
+public class CompanyBatchUpdateDTO implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ public static final String UPDATED = "UPDATED"; // 已回填
+ public static final String SKIPPED = "SKIPPED"; // 无空缺字段可回填
+ public static final String NO_HIT = "NO_HIT"; // 工商源未查询到匹配企业
+ public static final String CONFLICT = "CONFLICT"; // 命中信用代码已被其他客户占用
+ public static final String NOT_FOUND = "NOT_FOUND"; // 客户不存在(并发删除等)
+
+ @Schema(description = "客户 ID")
+ private Long customerId;
+
+ @Schema(description = "客户名称(NOT_FOUND 时为 null)")
+ private String customerName;
+
+ @Schema(description = "结果:UPDATED 已回填 / SKIPPED 无空缺 / NO_HIT 未命中 / CONFLICT 信用代码冲突 / NOT_FOUND 客户不存在")
+ private String status;
+
+ @Schema(description = "本次回填字段数(UPDATED 时 > 0)")
+ private Integer filledFields;
+
+ @Schema(description = "说明(SKIPPED/NO_HIT/CONFLICT/NOT_FOUND 时的原因)")
+ private String message;
+
+ public static CompanyBatchUpdateDTO of(Long customerId, String customerName,
+ String status, int filledFields, String message) {
+ CompanyBatchUpdateDTO dto = new CompanyBatchUpdateDTO();
+ dto.setCustomerId(customerId);
+ dto.setCustomerName(customerName);
+ dto.setStatus(status);
+ dto.setFilledFields(filledFields);
+ dto.setMessage(message);
+ return dto;
+ }
+}
diff --git a/crm-customer/src/main/java/com/crm/customer/domain/dto/ImportPreviewDTO.java b/crm-customer/src/main/java/com/crm/customer/domain/dto/ImportPreviewDTO.java
index 11de6fb..b177460 100644
--- a/crm-customer/src/main/java/com/crm/customer/domain/dto/ImportPreviewDTO.java
+++ b/crm-customer/src/main/java/com/crm/customer/domain/dto/ImportPreviewDTO.java
@@ -27,6 +27,9 @@ public class ImportPreviewDTO implements Serializable {
@Schema(description = "导入方式:APPEND_ONLY/UPDATE_ONLY/UPSERT")
private String importMode;
+ @Schema(description = "重复策略:SKIP 不导入(默认)/ OVERWRITE 覆盖导入(返工票 09-F8)")
+ private String duplicateStrategy;
+
@Schema(description = "数据行总数(客户 sheet)")
private Integer totalCount;
diff --git a/crm-customer/src/main/java/com/crm/customer/domain/entity/CustomerAgreement.java b/crm-customer/src/main/java/com/crm/customer/domain/entity/CustomerAgreement.java
new file mode 100644
index 0000000..7e86c45
--- /dev/null
+++ b/crm-customer/src/main/java/com/crm/customer/domain/entity/CustomerAgreement.java
@@ -0,0 +1,55 @@
+package com.crm.customer.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.crm.base.domain.entity.BaseEntity;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Index;
+import jakarta.persistence.Table;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.hibernate.annotations.Comment;
+
+/**
+ * 战略协议子表(返工票 12-F5 / 原型 a4-4-6/9/10)。
+ *
+ * 无独立 ACL:权限继承所属客户(无 {@code @DataScope} 注解),服务层按所属
+ * 客户校验(同 {@link CustomerContact} 口径)。写操作后同步刷新客户快照
+ * {@code customer.strategic_agreement_level}(javadoc 明文「战略协议子域写入,本图只读」;
+ * 取最新一条协议等级,无协议 → NULL=未签)。
+ *
+ * 附件单文件走 crm-file fileId 引用(不落文件名,对齐 {@link CustomerImportTask#fileFileId}
+ * 先例),下载由前端走 crm-file 通用端点,本模块零下载端点。
+ *
+ * 命名策略:无孤立单大写字母(agreementLevel/fileFileId/customerId 均为完整词拆解),
+ * 无需 {@code @Column(name=...)} 钉列名。
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("customer_agreement")
+@Entity
+@Table(name = "customer_agreement", indexes = {
+ @Index(name = "idx_agreement_customer", columnList = "customer_id, deleted")
+})
+public class CustomerAgreement extends BaseEntity {
+
+ @Comment("所属客户 id(NOT NULL)")
+ @Column(columnDefinition = "bigint not null comment '所属客户ID'")
+ private Long customerId;
+
+ @Comment("战略协议等级 1~3(一级/二级/三级,值域对齐客户快照列)")
+ @Column(columnDefinition = "tinyint not null comment '战略协议等级1~3'")
+ private Integer agreementLevel;
+
+ @Comment("签订金额(文本形态:数字/区间/含单位,对齐注册资本 varchar 先例)")
+ @Column(columnDefinition = "varchar(64) comment '签订金额'")
+ private String amount;
+
+ @Comment("备注")
+ @Column(columnDefinition = "varchar(500) comment '备注'")
+ private String remark;
+
+ @Comment("附件引用(crm-file fileId,单文件;下载走 crm-file 通用端点)")
+ @Column(columnDefinition = "varchar(64) comment '附件fileId'")
+ private String fileFileId;
+}
diff --git a/crm-customer/src/main/java/com/crm/customer/domain/entity/CustomerImportTask.java b/crm-customer/src/main/java/com/crm/customer/domain/entity/CustomerImportTask.java
index 566cf09..125e236 100644
--- a/crm-customer/src/main/java/com/crm/customer/domain/entity/CustomerImportTask.java
+++ b/crm-customer/src/main/java/com/crm/customer/domain/entity/CustomerImportTask.java
@@ -2,6 +2,7 @@ package com.crm.customer.domain.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.crm.base.domain.entity.BaseEntity;
+import com.crm.customer.constant.CustomerConstants;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Index;
@@ -36,6 +37,10 @@ public class CustomerImportTask extends BaseEntity {
@Column(columnDefinition = "varchar(20) not null comment '导入方式'")
private String importMode;
+ @Comment("重复策略:SKIP 不导入(默认)/ OVERWRITE 覆盖导入(返工票 09-F8,a4-3-2 复选框)")
+ @Column(columnDefinition = "varchar(20) not null default 'SKIP' comment '重复策略:SKIP不导入/OVERWRITE覆盖导入'")
+ private String duplicateStrategy = CustomerConstants.IMPORT_DUP_SKIP;
+
@Comment("模板版本(预校验一致性锚点)")
@Column(columnDefinition = "varchar(10) not null comment '模板版本'")
private String templateVersion;
diff --git a/crm-customer/src/main/java/com/crm/customer/mapper/CustomerAgreementMapper.java b/crm-customer/src/main/java/com/crm/customer/mapper/CustomerAgreementMapper.java
new file mode 100644
index 0000000..62c2f52
--- /dev/null
+++ b/crm-customer/src/main/java/com/crm/customer/mapper/CustomerAgreementMapper.java
@@ -0,0 +1,11 @@
+package com.crm.customer.mapper;
+
+import com.crm.base.mapper.CrmBaseMapper;
+import com.crm.customer.domain.entity.CustomerAgreement;
+
+/**
+ * 战略协议 Mapper(返工票 12-F5):纯 CrmBaseMapper,无自定义 SQL
+ * (页签列表用 LambdaQueryWrapper 覆盖;跨客户场景不存在——协议只随客户页签出现)。
+ */
+public interface CustomerAgreementMapper extends CrmBaseMapper {
+}
diff --git a/crm-customer/src/main/java/com/crm/customer/service/ICustomerAgreementService.java b/crm-customer/src/main/java/com/crm/customer/service/ICustomerAgreementService.java
new file mode 100644
index 0000000..bf645af
--- /dev/null
+++ b/crm-customer/src/main/java/com/crm/customer/service/ICustomerAgreementService.java
@@ -0,0 +1,29 @@
+package com.crm.customer.service;
+
+import com.crm.customer.domain.dto.AgreementDTO;
+
+import java.util.List;
+
+/**
+ * 战略协议服务(返工票 12-F5 / 原型 a4-4-6 页签)。
+ *
+ * 权限继承所属客户(无独立 ACL):所有读写入口先定位所属客户判定可见性,
+ * 不存在/无权统一码防探测。写操作后同步刷新客户战略协议等级快照。
+ */
+public interface ICustomerAgreementService {
+
+ /** 新增协议(所属客户必填且可见);返回新 id;刷新客户快照。 */
+ Long create(AgreementDTO dto);
+
+ /** 编辑协议(归属客户不可换);刷新客户快照。 */
+ void update(Long id, AgreementDTO dto);
+
+ /** 删除协议(软删);刷新客户快照(删空 → 快照回 NULL=未签)。 */
+ void delete(Long id);
+
+ /** 协议详情(编辑回显)。 */
+ AgreementDTO detail(Long id);
+
+ /** 客户页签列表:时间倒序(create_time, id),非分页(原型卡片瀑布)。 */
+ List listByCustomer(Long customerId);
+}
diff --git a/crm-customer/src/main/java/com/crm/customer/service/ICustomerImportService.java b/crm-customer/src/main/java/com/crm/customer/service/ICustomerImportService.java
index 5e5e168..fe88320 100644
--- a/crm-customer/src/main/java/com/crm/customer/service/ICustomerImportService.java
+++ b/crm-customer/src/main/java/com/crm/customer/service/ICustomerImportService.java
@@ -20,8 +20,11 @@ public interface ICustomerImportService extends IBaseService
/** 导入模板文件名(版本号锚定 CustomerConstants.IMPORT_TEMPLATE_VERSION,票 14 评审自 Impl 上移)。 */
String TEMPLATE_NAME = "客户导入模板-" + CustomerConstants.IMPORT_TEMPLATE_VERSION + ".xlsx";
- /** 上传 + 预校验:文件守门(类型/大小/模板版本/行数)→ 行级判定 → 任务落 DRAFT,返回预计数 + 明细。 */
- ImportPreviewDTO upload(MultipartFile file, String importMode);
+ /**
+ * 上传 + 预校验:文件守门(类型/大小/模板版本/行数)→ 行级判定 → 任务落 DRAFT,返回预计数 + 明细。
+ * duplicateStrategy:SKIP 不导入(默认)/ OVERWRITE 覆盖导入(返工票 09-F8,D24 语义)。
+ */
+ ImportPreviewDTO upload(MultipartFile file, String importMode, String duplicateStrategy);
/** 确认创建正式任务(DRAFT → RUNNING + 触发异步执行);重复确认 67014。 */
Long confirm(Long taskId);
diff --git a/crm-customer/src/main/java/com/crm/customer/service/ICustomerService.java b/crm-customer/src/main/java/com/crm/customer/service/ICustomerService.java
index 9e0dfc3..5f70597 100644
--- a/crm-customer/src/main/java/com/crm/customer/service/ICustomerService.java
+++ b/crm-customer/src/main/java/com/crm/customer/service/ICustomerService.java
@@ -8,10 +8,13 @@ import com.crm.customer.domain.dto.CustomerQuickCreateDTO;
import com.crm.customer.domain.dto.CustomerSaveResultDTO;
import com.crm.customer.domain.dto.CustomerSearchItemDTO;
import com.crm.customer.domain.dto.CustomerUpdateDTO;
+import com.crm.customer.domain.dto.CompanyBatchUpdateDTO;
import com.crm.customer.domain.entity.Customer;
import com.crm.customer.domain.param.CustomerPageParam;
import com.crm.customer.domain.param.CustomerSearchParam;
+import java.util.List;
+
/**
* 客户主表服务(票 02:新增/编辑带三层查重;三 workspace 视图查询在票 04 增强)。
*/
@@ -45,4 +48,11 @@ public interface ICustomerService extends IBaseService {
* DataScope 自动注入可见范围)。
*/
PageResult searchForOpportunity(CustomerSearchParam param);
+
+ /**
+ * 批量更新工商信息(返工票 09-F6 / a4-3-1 多选确认弹窗):逐客户按名称查工商源,
+ * 只回填空缺字段(对称 issues-04 §C2 回填口径),命中信用代码与他人冲突跳过不写;
+ * 行级部分成功,返回每客户结果。一期 stub 恒 NO_HIT。
+ */
+ List batchCompanyUpdate(List ids);
}
diff --git a/crm-customer/src/main/java/com/crm/customer/service/impl/CustomerAgreementServiceImpl.java b/crm-customer/src/main/java/com/crm/customer/service/impl/CustomerAgreementServiceImpl.java
new file mode 100644
index 0000000..9d54d10
--- /dev/null
+++ b/crm-customer/src/main/java/com/crm/customer/service/impl/CustomerAgreementServiceImpl.java
@@ -0,0 +1,173 @@
+package com.crm.customer.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.crm.base.domain.exception.BusinessErrorException;
+import com.crm.base.service.impl.BaseServiceImpl;
+import com.crm.customer.constant.CustomerConstants;
+import com.crm.customer.domain.dto.AgreementDTO;
+import com.crm.customer.domain.entity.Customer;
+import com.crm.customer.domain.entity.CustomerAgreement;
+import com.crm.customer.mapper.CustomerAgreementMapper;
+import com.crm.customer.mapper.CustomerMapper;
+import com.crm.customer.service.CustomerOplogWriter;
+import com.crm.customer.service.CustomerScopeEvaluator;
+import com.crm.customer.service.ICustomerAgreementService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 战略协议服务实现(返工票 12-F5)。
+ *
+ * 对齐 {@link CustomerContactServiceImpl} 口径:无独立 ACL,读写先定位所属客户,
+ * {@link CustomerScopeEvaluator#visibleToCurrent} 判定(不存在/无权统一码防探测——
+ * 协议维度 67017、客户维度 67002);可见即可写。编辑归属客户不可换(dto.customerId 忽略)。
+ *
+ * 客户快照刷新(create/edit/delete 后):取该客户最新一条协议(create_time,id 倒序
+ * limit 1)的等级回写 {@code customer.strategic_agreement_level},无协议 → NULL=未签;
+ * LambdaUpdateWrapper 只更新该列不 bump version(对齐跟进锚点刷新先例,避免干扰用户 CAS 编辑)。
+ *
+ * 操作日志(对齐 F10 CONTACT_* 先例):增删改写客户 oplog,detail 记等级文案。
+ */
+@Service
+@RequiredArgsConstructor
+public class CustomerAgreementServiceImpl
+ extends BaseServiceImpl
+ implements ICustomerAgreementService {
+
+ /** 等级值域上界(1~3,对齐客户快照列 javadoc;原型 a4-4-6 示例「三级」)。 */
+ private static final int LEVEL_MAX = 3;
+
+ private final CustomerMapper customerMapper;
+ private final CustomerOplogWriter oplogWriter;
+
+ @Override
+ public Long create(AgreementDTO dto) {
+ if (dto.getCustomerId() == null) {
+ throw new BusinessErrorException(CustomerConstants.CODE_CUST_INVALID, "所属客户必填");
+ }
+ Customer customer = requireCustomerVisible(dto.getCustomerId());
+ validate(dto);
+ CustomerAgreement entity = AgreementDTO.toEntity(dto);
+ entity.setCustomerId(customer.getId());
+ this.save(entity);
+ refreshSnapshot(customer.getId());
+ oplogWriter.write(customer.getId(), CustomerConstants.ACTION_AGREEMENT_ADD,
+ "新增战略协议【" + levelLabel(entity.getAgreementLevel()) + "】");
+ return entity.getId();
+ }
+
+ @Override
+ public void update(Long id, AgreementDTO dto) {
+ CustomerAgreement exist = requireAgreementVisible(id);
+ validate(dto);
+ // 归属客户不可换(dto.customerId 忽略);系统字段与软删位不动
+ BeanUtils.copyProperties(dto, exist, "id", "customerId", "createTime", "updateTime",
+ "creatorId", "updaterId", "deleted");
+ this.updateById(exist);
+ refreshSnapshot(exist.getCustomerId());
+ oplogWriter.write(exist.getCustomerId(), CustomerConstants.ACTION_AGREEMENT_EDIT,
+ "修改战略协议【" + levelLabel(exist.getAgreementLevel()) + "】");
+ }
+
+ @Override
+ public void delete(Long id) {
+ CustomerAgreement exist = requireAgreementVisible(id);
+ this.removeById(id);
+ refreshSnapshot(exist.getCustomerId());
+ oplogWriter.write(exist.getCustomerId(), CustomerConstants.ACTION_AGREEMENT_DELETE,
+ "删除战略协议【" + levelLabel(exist.getAgreementLevel()) + "】");
+ }
+
+ @Override
+ public AgreementDTO detail(Long id) {
+ CustomerAgreement exist = requireAgreementVisible(id);
+ AgreementDTO dto = AgreementDTO.fromEntity(exist);
+ Customer customer = customerMapper.selectById(exist.getCustomerId());
+ if (customer != null) {
+ dto.setCustomerName(customer.getCustomerName());
+ }
+ return dto;
+ }
+
+ @Override
+ public List listByCustomer(Long customerId) {
+ requireCustomerVisible(customerId);
+ Customer customer = customerMapper.selectById(customerId);
+ return this.list(new LambdaQueryWrapper()
+ .eq(CustomerAgreement::getCustomerId, customerId)
+ .orderByDesc(CustomerAgreement::getCreateTime)
+ .orderByDesc(CustomerAgreement::getId))
+ .stream().map(a -> {
+ AgreementDTO dto = AgreementDTO.fromEntity(a);
+ if (customer != null) {
+ dto.setCustomerName(customer.getCustomerName());
+ }
+ return dto;
+ }).toList();
+ }
+
+ // ==================== 私有:校验与权限 ====================
+
+ private void validate(AgreementDTO dto) {
+ if (dto.getAgreementLevel() == null || dto.getAgreementLevel() < 1
+ || dto.getAgreementLevel() > LEVEL_MAX) {
+ throw new BusinessErrorException(CustomerConstants.CODE_AGREEMENT_INVALID,
+ "战略协议等级必填且为 1~3");
+ }
+ if (dto.getAmount() != null && dto.getAmount().length() > 64) {
+ throw new BusinessErrorException(CustomerConstants.CODE_AGREEMENT_INVALID, "签订金额超长");
+ }
+ }
+
+ /** 协议必须存在且所属客户对当前用户可见(防探测:不存在/无权同码 67017 协议维度)。 */
+ private CustomerAgreement requireAgreementVisible(Long id) {
+ if (id == null) {
+ throw new BusinessErrorException(CustomerConstants.CODE_AGREEMENT_INVALID, "协议 id 必填");
+ }
+ CustomerAgreement exist = this.getById(id);
+ if (exist == null) {
+ throw new BusinessErrorException(CustomerConstants.CODE_AGREEMENT_INVALID, "协议不存在或无权访问");
+ }
+ requireCustomerVisible(exist.getCustomerId());
+ return exist;
+ }
+
+ /** 客户必须存在且对当前用户可见(防探测:不存在/无权同码 67002);返回该客户。 */
+ private Customer requireCustomerVisible(Long customerId) {
+ Customer customer = customerId == null ? null : customerMapper.selectById(customerId);
+ if (customer == null || !CustomerScopeEvaluator.visibleToCurrent(
+ customer.getOwnerUserId(), customer.getOwnerDeptId())) {
+ throw new BusinessErrorException(CustomerConstants.CODE_CUST_NOT_EXIST, "客户不存在或无权访问");
+ }
+ return customer;
+ }
+
+ /**
+ * 客户快照刷新:最新一条协议等级回写(无协议 → NULL=未签);
+ * 只更新该列不 bump version,避免干扰用户编辑的乐观锁(对齐跟进锚点刷新先例)。
+ */
+ private void refreshSnapshot(Long customerId) {
+ CustomerAgreement latest = this.getOne(new LambdaQueryWrapper()
+ .eq(CustomerAgreement::getCustomerId, customerId)
+ .orderByDesc(CustomerAgreement::getCreateTime)
+ .orderByDesc(CustomerAgreement::getId)
+ .last("LIMIT 1"));
+ customerMapper.update(null, new LambdaUpdateWrapper()
+ .eq(Customer::getId, customerId)
+ .set(Customer::getStrategicAgreementLevel, latest == null ? null : latest.getAgreementLevel()));
+ }
+
+ /** 等级文案(oplog detail 用;原型 a4-4-6 示例「三级」)。 */
+ private static String levelLabel(Integer level) {
+ return switch (level == null ? 0 : level) {
+ case 1 -> "一级";
+ case 2 -> "二级";
+ case 3 -> "三级";
+ default -> "未知";
+ };
+ }
+}
diff --git a/crm-customer/src/main/java/com/crm/customer/service/impl/CustomerContactServiceImpl.java b/crm-customer/src/main/java/com/crm/customer/service/impl/CustomerContactServiceImpl.java
index a7dbf35..185183d 100644
--- a/crm-customer/src/main/java/com/crm/customer/service/impl/CustomerContactServiceImpl.java
+++ b/crm-customer/src/main/java/com/crm/customer/service/impl/CustomerContactServiceImpl.java
@@ -19,6 +19,7 @@ import com.crm.customer.domain.param.ContactPageParam;
import com.crm.customer.mapper.CustomerContactMapper;
import com.crm.customer.mapper.CustomerMapper;
import com.crm.customer.service.CustomerDedupSettingProvider;
+import com.crm.customer.service.CustomerOplogWriter;
import com.crm.customer.service.CustomerScopeEvaluator;
import com.crm.customer.service.ICustomerContactService;
import lombok.RequiredArgsConstructor;
@@ -41,6 +42,9 @@ import java.util.regex.Pattern;
*
* 电话查重(D26):不阻断创建,仅 {@link #checkPhone} 软提示;命中行展示权限按
* 所属客户判定,不可见脱敏为「存在匹配记录」。
+ *
+ * 操作日志(返工票 09-F10 / a4-5-6):增删改写客户 oplog(CONTACT_ADD/EDIT/DELETE),
+ * 记 customerId 供客户详情日志页按联系人动作过滤;detail 文本对称客户 CRUD 形态。
*/
@Service
@RequiredArgsConstructor
@@ -52,6 +56,7 @@ public class CustomerContactServiceImpl extends BaseServiceImpl()
+ .eq(CustomerViewLog::getCustomerId, customerId)
+ .eq(CustomerViewLog::getUserId, userId)
+ .last("LIMIT 1"));
+ if (existing != null) {
+ viewLogMapper.update(null, new LambdaUpdateWrapper()
+ .eq(CustomerViewLog::getId, existing.getId())
+ .set(CustomerViewLog::getLastViewTime, LocalDateTime.now()));
+ } else {
+ CustomerViewLog log = new CustomerViewLog();
+ log.setCustomerId(customerId);
+ log.setUserId(userId);
+ log.setLastViewTime(LocalDateTime.now());
+ viewLogMapper.insert(log);
+ }
+ }
+
/** 最近跟进摘要 + 待跟进提醒(未来最近一条 next_follow_time,null=无待跟进)。 */
private void fillFollowDigest(CustomerDetailHeadDTO head, Long customerId) {
List lastRows = followMapper.selectList(
diff --git a/crm-customer/src/main/java/com/crm/customer/service/impl/CustomerImportAnalyzer.java b/crm-customer/src/main/java/com/crm/customer/service/impl/CustomerImportAnalyzer.java
index dad87c5..55d021e 100644
--- a/crm-customer/src/main/java/com/crm/customer/service/impl/CustomerImportAnalyzer.java
+++ b/crm-customer/src/main/java/com/crm/customer/service/impl/CustomerImportAnalyzer.java
@@ -5,6 +5,7 @@ import com.crm.customer.domain.entity.Customer;
import com.crm.customer.domain.entity.CustomerContact;
import com.crm.customer.domain.excel.ContactImportRow;
import com.crm.customer.domain.excel.CustomerImportRow;
+import com.crm.customer.constant.CustomerConstants;
import com.crm.customer.mapper.CustomerContactMapper;
import com.crm.customer.mapper.CustomerMapper;
import com.crm.customer.port.CustomerNameSimilarityPort;
@@ -25,9 +26,10 @@ import java.util.Set;
*
* upload 预校验与 confirm 执行共用同一判定(预计数与实际结果同口径):
* 匹配顺序 = ① 客户编号完全一致 → ② 统一社会信用代码完全一致;编号与信用代码
- * 分别命中不同客户 → 该行冲突禁止导入;文件内多行匹配同一客户 → 重复组全部失败
- * (Q14 默认「重复时不导入」);均未匹配 → 不凭名称自动覆盖,UPSERT 下名称相似
- * 列疑似重复不写入(对称票 02 查重口径)。
+ * 分别命中不同客户 → 该行冲突禁止导入;文件内多行匹配同一客户 → 按 duplicateStrategy
+ * 处置(旧图 D24 / a4-3-2 复选框:默认 SKIP 重复组全部失败;OVERWRITE 覆盖导入 =
+ * 自上而下最后一条通过校验的行生效,其余标失败说明未执行);均未匹配 → 不凭名称
+ * 自动覆盖,UPSERT 下名称相似列疑似重复不写入(对称票 02 查重口径,策略不影响 SUSPECT)。
*
* 联系人(D26 翻案后):电话命中本客户 → 更新;命中他客户 → 照常导入 +
* 疑似重复软提示(跟随查重设置「联系电话」开关);电话空 → 按「客户+姓名+职务」
@@ -84,7 +86,7 @@ public class CustomerImportAnalyzer {
}
/** 客户行判定(两遍:逐行静态+匹配 → 文件内重复组互斥)。 */
- public List analyzeCustomers(List rows, String mode) {
+ public List analyzeCustomers(List rows, String mode, String duplicateStrategy) {
List plans = new ArrayList<>();
for (int i = 0; i < rows.size(); i++) {
CustomerImportRow r = rows.get(i);
@@ -139,7 +141,9 @@ public class CustomerImportAnalyzer {
}
}
- // 文件内重复组:多行匹配同一已有客户 → 重复组全部失败(Q14 默认「重复时不导入」)
+ // 文件内重复组:多行匹配同一已有客户 → 按 duplicateStrategy 处置
+ //(D24:默认 SKIP 重复组全失败;OVERWRITE 仅自上而下最后一条通过校验的行生效)
+ boolean overwrite = CustomerConstants.IMPORT_DUP_OVERWRITE.equals(duplicateStrategy);
Map> groups = new HashMap<>();
for (RowPlan p : plans) {
if (p.getMatched() != null) {
@@ -148,9 +152,22 @@ public class CustomerImportAnalyzer {
}
for (List group : groups.values()) {
if (group.size() > 1) {
+ RowPlan survivor = null;
+ if (overwrite) {
+ for (RowPlan p : group) {
+ if (VERDICT_UPDATE.equals(p.getVerdict())) {
+ survivor = p;
+ }
+ }
+ }
for (RowPlan p : group) {
+ if (p == survivor) {
+ continue;
+ }
p.setVerdict(VERDICT_FAIL);
- p.setReason("文件内多行匹配同一客户(重复时不导入),请合并为单行");
+ p.setReason(overwrite
+ ? "文件内多行匹配同一客户(覆盖导入:仅最后一条通过校验的行生效),本行未执行"
+ : "文件内多行匹配同一客户(重复时不导入),请合并为单行");
}
}
}
diff --git a/crm-customer/src/main/java/com/crm/customer/service/impl/CustomerImportServiceImpl.java b/crm-customer/src/main/java/com/crm/customer/service/impl/CustomerImportServiceImpl.java
index 29f14f1..b396a62 100644
--- a/crm-customer/src/main/java/com/crm/customer/service/impl/CustomerImportServiceImpl.java
+++ b/crm-customer/src/main/java/com/crm/customer/service/impl/CustomerImportServiceImpl.java
@@ -69,14 +69,22 @@ public class CustomerImportServiceImpl extends BaseServiceImpl plans = analyzer.analyzeCustomers(rows, importMode);
+ List plans = analyzer.analyzeCustomers(rows, importMode, dupStrategy);
List contactPlans = contacts.isEmpty()
? List.of() : analyzer.analyzeContacts(contacts, plans);
int insert = 0;
@@ -144,6 +152,7 @@ public class CustomerImportServiceImpl extends BaseServiceImpl batchCompanyUpdate(List ids) {
+ if (ids == null || ids.isEmpty()) {
+ throw new BusinessErrorException(CustomerConstants.CODE_CUST_INVALID, "请选择要更新工商信息的客户");
+ }
+ if (ids.size() > MAX_BATCH_COMPANY_UPDATE) {
+ throw new BusinessErrorException(CustomerConstants.CODE_CUST_INVALID,
+ "单次最多批量更新 " + MAX_BATCH_COMPANY_UPDATE + " 个客户");
+ }
+ List results = new ArrayList<>(ids.size());
+ for (Long id : ids.stream().distinct().toList()) {
+ results.add(batchCompanyUpdateOne(id));
+ }
+ return results;
+ }
+
+ /**
+ * 单客户工商回填:按客户名称查 port → 取首个候选,只回填空缺字段(对称
+ * issues-04 §C2「只回填当前为空的字段」);命中信用代码与他人占用冲突 →
+ * CONFLICT 不写(L3 终查同口径,软处置不中断批次);有回填才落库 + oplog。
+ */
+ private CompanyBatchUpdateDTO batchCompanyUpdateOne(Long id) {
+ Customer c = this.getById(id);
+ if (c == null) {
+ return CompanyBatchUpdateDTO.of(id, null, CompanyBatchUpdateDTO.NOT_FOUND, 0, "客户不存在");
+ }
+ List hits = companyLookupPort.lookup(c.getCustomerName());
+ if (hits.isEmpty()) {
+ return CompanyBatchUpdateDTO.of(id, c.getCustomerName(), CompanyBatchUpdateDTO.NO_HIT,
+ 0, "工商源未查询到匹配企业");
+ }
+ CompanyLookupPort.CompanyCandidate hit = hits.get(0);
+ try {
+ dedupService.guardCreditCodeForWrite(blankToNull(hit.unifiedCreditCode()), id);
+ } catch (BusinessErrorException e) {
+ return CompanyBatchUpdateDTO.of(id, c.getCustomerName(), CompanyBatchUpdateDTO.CONFLICT,
+ 0, e.getMessage());
+ }
+ int filled = 0;
+ filled += fillIfBlank(c.getBizNameFromLookup(), hit.bizName(), c::setBizNameFromLookup);
+ filled += fillIfBlank(c.getUnifiedCreditCode(), hit.unifiedCreditCode(), c::setUnifiedCreditCode);
+ filled += fillIfBlank(c.getLegalRepresentative(), hit.legalRepresentative(), c::setLegalRepresentative);
+ filled += fillDateIfBlank(c.getEstablishedDate(), hit.establishedDate(), c::setEstablishedDate);
+ filled += fillIfBlank(c.getRegisteredCapital(), hit.registeredCapital(), c::setRegisteredCapital);
+ filled += fillIfBlank(c.getBusinessScope(), hit.businessScope(), c::setBusinessScope);
+ filled += fillIfBlank(c.getStaffSize(), hit.staffSize(), c::setStaffSize);
+ filled += fillIfBlank(c.getAnnualRevenue(), hit.annualRevenue(), c::setAnnualRevenue);
+ filled += fillIfBlank(c.getBusinessAddress(), hit.address(), c::setBusinessAddress);
+ if (filled == 0) {
+ return CompanyBatchUpdateDTO.of(id, c.getCustomerName(), CompanyBatchUpdateDTO.SKIPPED,
+ 0, "工商字段均已填写,无空缺可回填");
+ }
+ if (!this.updateById(c)) {
+ return CompanyBatchUpdateDTO.of(id, c.getCustomerName(), CompanyBatchUpdateDTO.CONFLICT,
+ 0, "客户已被他人修改,请刷新后重试");
+ }
+ oplogWriter.write(c.getId(), CustomerConstants.ACTION_UPDATE,
+ "批量更新工商信息:回填 " + filled + " 个字段");
+ return CompanyBatchUpdateDTO.of(id, c.getCustomerName(), CompanyBatchUpdateDTO.UPDATED,
+ filled, null);
+ }
+
+ /** 空缺才回填(空白 incoming 跳过、非空 current 不覆盖;返回是否写入)。 */
+ private static int fillIfBlank(String current, String incoming, Consumer setter) {
+ if (incoming == null || incoming.isBlank()) {
+ return 0;
+ }
+ if (current != null && !current.isBlank()) {
+ return 0;
+ }
+ setter.accept(incoming.trim());
+ return 1;
+ }
+
+ private static int fillDateIfBlank(LocalDate current, LocalDate incoming, Consumer setter) {
+ if (incoming == null || current != null) {
+ return 0;
+ }
+ setter.accept(incoming);
+ return 1;
+ }
+
+ private static String blankToNull(String s) {
+ return s == null || s.isBlank() ? null : s.trim();
+ }
+
private void appendChange(List out, String label, Object oldV, Object newV) {
String o = oldV == null ? "" : String.valueOf(oldV);
String n = newV == null ? "" : String.valueOf(newV);
diff --git a/crm-customer/src/main/java/com/crm/customer/task/CustomerImportExecutor.java b/crm-customer/src/main/java/com/crm/customer/task/CustomerImportExecutor.java
index 1b3f878..775b326 100644
--- a/crm-customer/src/main/java/com/crm/customer/task/CustomerImportExecutor.java
+++ b/crm-customer/src/main/java/com/crm/customer/task/CustomerImportExecutor.java
@@ -96,7 +96,8 @@ public class CustomerImportExecutor {
contacts = List.of();
}
- List plans = analyzer.analyzeCustomers(rows, task.getImportMode());
+ List plans = analyzer.analyzeCustomers(rows,
+ task.getImportMode(), task.getDuplicateStrategy());
List contactPlans = contacts.isEmpty()
? List.of() : analyzer.analyzeContacts(contacts, plans);
AuthUser submitter = userService.getById(Long.valueOf(task.getCreatorId()));
diff --git a/crm-customer/src/test/java/com/crm/customer/service/impl/CustomerAgreementIntegrationTest.java b/crm-customer/src/test/java/com/crm/customer/service/impl/CustomerAgreementIntegrationTest.java
new file mode 100644
index 0000000..5dab637
--- /dev/null
+++ b/crm-customer/src/test/java/com/crm/customer/service/impl/CustomerAgreementIntegrationTest.java
@@ -0,0 +1,439 @@
+package com.crm.customer.service.impl;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.core.MybatisConfiguration;
+import com.baomidou.mybatisplus.core.incrementer.DefaultIdentifierGenerator;
+import com.baomidou.mybatisplus.core.toolkit.GlobalConfigUtils;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import com.crm.auth.domain.entity.AuthUser;
+import com.crm.auth.service.IAuthUserService;
+import com.crm.auth.service.ISysDeptService;
+import com.crm.base.config.MetaObjectFillHandler;
+import com.crm.base.domain.exception.BusinessErrorException;
+import com.crm.base.security.DataScopeLevel;
+import com.crm.base.security.DataVisibility;
+import com.crm.base.security.DataVisibilityContext;
+import com.crm.base.security.SecurityUtils;
+import com.crm.customer.constant.CustomerConstants;
+import com.crm.customer.domain.dto.AgreementDTO;
+import com.crm.customer.domain.entity.Customer;
+import com.crm.customer.domain.entity.CustomerAgreement;
+import com.crm.customer.domain.entity.CustomerOplog;
+import com.crm.customer.mapper.CustomerAgreementMapper;
+import com.crm.customer.mapper.CustomerMapper;
+import com.crm.customer.mapper.CustomerOplogMapper;
+import com.crm.customer.service.CustomerOplogWriter;
+import org.apache.ibatis.mapping.Environment;
+import org.apache.ibatis.session.LocalCacheScope;
+import org.apache.ibatis.session.SqlSession;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.apache.ibatis.session.SqlSessionFactoryBuilder;
+import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
+import org.h2.jdbcx.JdbcDataSource;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Test;
+import org.mockito.MockedStatic;
+import org.mockito.Mockito;
+import org.springframework.test.util.ReflectionTestUtils;
+
+import java.sql.Statement;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.anySet;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+/**
+ * 战略协议子表 H2 集成测试(返工票 12-F5 验收 / 原型 a4-4-6/9/10)。
+ *
+ * 范式对齐 {@code CustomerContactServiceIntegrationTest}:真实 SQL 链路 +
+ * mock auth 服务;覆盖 CRUD 正常与校验路径、权限继承客户(SELF 范围防探测)、
+ * oplog 三动作、客户快照刷新(最新协议等级回写 / 删空回 NULL)。
+ */
+@DisplayName("战略协议:页签 CRUD + 快照刷新 + oplog(H2 集成,票 12-F5)")
+class CustomerAgreementIntegrationTest {
+
+ private static final Long OPERATOR_ID = 5001L;
+ private static final Long OWNER_ID = 6001L;
+ private static final Long OTHER_OWNER_ID = 6002L;
+ private static final Long DEPT_ID = 1001L;
+ private static final Long OTHER_DEPT_ID = 2002L;
+
+ private static final AtomicBoolean BOOTSTRAPPED = new AtomicBoolean(false);
+ private static SqlSessionFactory sqlSessionFactory;
+ private static final JdbcDataSource DS = new JdbcDataSource();
+
+ private SqlSession session;
+ private CustomerMapper customerMapper;
+ private CustomerAgreementMapper agreementMapper;
+ private CustomerOplogMapper oplogMapper;
+ private CustomerAgreementServiceImpl service;
+ private MockedStatic securityMock;
+ private int noSeq = 1;
+
+ private final IAuthUserService userService = mock(IAuthUserService.class);
+ private final ISysDeptService deptService = mock(ISysDeptService.class);
+
+ @BeforeAll
+ static void bootstrap() throws Exception {
+ if (!BOOTSTRAPPED.compareAndSet(false, true)) {
+ return;
+ }
+ DS.setURL("jdbc:h2:mem:custagr;MODE=MySQL;DATABASE_TO_LOWER=TRUE;CASE_INSENSITIVE_IDENTIFIERS=TRUE;"
+ + "DB_CLOSE_DELAY=-1");
+
+ MybatisConfiguration configuration = new MybatisConfiguration();
+ configuration.setEnvironment(new Environment("custagr-test", new JdbcTransactionFactory(), DS));
+ configuration.setMapUnderscoreToCamelCase(true);
+ configuration.setLocalCacheScope(LocalCacheScope.STATEMENT);
+
+ MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
+ mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
+ mpInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
+ configuration.addInterceptor(mpInterceptor);
+
+ GlobalConfigUtils.getGlobalConfig(configuration).setMetaObjectHandler(new MetaObjectFillHandler());
+ GlobalConfigUtils.getGlobalConfig(configuration).setIdentifierGenerator(DefaultIdentifierGenerator.getInstance());
+
+ configuration.addMapper(CustomerMapper.class);
+ configuration.addMapper(CustomerAgreementMapper.class);
+ configuration.addMapper(CustomerOplogMapper.class);
+ sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
+
+ try (SqlSession s = sqlSessionFactory.openSession(true)) {
+ try (Statement st = s.getConnection().createStatement()) {
+ for (String sql : SCHEMA) {
+ st.execute(sql);
+ }
+ }
+ }
+ }
+
+ @BeforeEach
+ void setUp() throws Exception {
+ session = sqlSessionFactory.openSession(true);
+ try (Statement st = session.getConnection().createStatement()) {
+ st.execute("DELETE FROM customer");
+ st.execute("DELETE FROM customer_agreement");
+ st.execute("DELETE FROM customer_oplog");
+ }
+ customerMapper = session.getMapper(CustomerMapper.class);
+ agreementMapper = session.getMapper(CustomerAgreementMapper.class);
+ oplogMapper = session.getMapper(CustomerOplogMapper.class);
+
+ service = new CustomerAgreementServiceImpl(customerMapper,
+ new CustomerOplogWriter(oplogMapper, userService, deptService));
+ ReflectionTestUtils.setField(service, "baseMapper", agreementMapper);
+ ReflectionTestUtils.setField(service, "entityClass", CustomerAgreement.class);
+
+ securityMock = Mockito.mockStatic(SecurityUtils.class);
+ securityMock.when(SecurityUtils::getRequiredUserId).thenReturn(String.valueOf(OPERATOR_ID));
+
+ when(userService.getById(anyLong())).thenAnswer(inv -> {
+ AuthUser u = new AuthUser();
+ u.setId(inv.getArgument(0));
+ u.setUsername("用户" + inv.getArgument(0));
+ u.setDeptId(DEPT_ID);
+ return u;
+ });
+ when(deptService.getDeptNames(anySet())).thenReturn(Map.of(DEPT_ID, "销售一部"));
+ }
+
+ @AfterEach
+ void tearDown() {
+ DataVisibilityContext.clear();
+ securityMock.close();
+ session.close();
+ }
+
+ @AfterAll
+ static void shutdown() {
+ // DB_CLOSE_DELAY=-1:JVM 退出即释放
+ }
+
+ // ==================== CRUD 正常路径 ====================
+
+ @Test
+ @DisplayName("新增成功:落库 + oplog AGREEMENT_ADD + 客户快照刷新为该等级")
+ void create_success_and_snapshot() {
+ Customer c = insertRaw("云启科技有限公司", OPERATOR_ID, DEPT_ID);
+ AgreementDTO dto = agreementDTO(c.getId(), 2, "120万元", "年度框架");
+
+ Long id = service.create(dto);
+
+ CustomerAgreement saved = agreementMapper.selectById(id);
+ assertThat(saved).isNotNull();
+ assertThat(saved.getCustomerId()).isEqualTo(c.getId());
+ assertThat(saved.getAgreementLevel()).isEqualTo(2);
+ assertThat(saved.getAmount()).isEqualTo("120万元");
+ assertThat(saved.getRemark()).isEqualTo("年度框架");
+ // 客户快照同步(原 NULL → 2)
+ assertThat(customerMapper.selectById(c.getId()).getStrategicAgreementLevel()).isEqualTo(2);
+ // oplog
+ List logs = oplogMapper.selectList(null);
+ assertThat(logs).hasSize(1);
+ assertThat(logs.get(0).getAction()).isEqualTo(CustomerConstants.ACTION_AGREEMENT_ADD);
+ assertThat(logs.get(0).getDetail()).contains("二级");
+ }
+
+ @Test
+ @DisplayName("编辑成功:等级/金额更新 + 归属客户不可换 + 快照同步 + oplog AGREEMENT_EDIT")
+ void edit_success_keepCustomer() {
+ Customer c = insertRaw("云启科技有限公司", OPERATOR_ID, DEPT_ID);
+ Customer other = insertRaw("别家公司", OPERATOR_ID, DEPT_ID);
+ Long id = service.create(agreementDTO(c.getId(), 2, null, null));
+
+ AgreementDTO edit = agreementDTO(other.getId(), 3, "300万元", null); // customerId 携带别家 → 忽略
+ service.update(id, edit);
+
+ CustomerAgreement db = agreementMapper.selectById(id);
+ assertThat(db.getCustomerId()).isEqualTo(c.getId()); // 归属不可换
+ assertThat(db.getAgreementLevel()).isEqualTo(3);
+ assertThat(db.getAmount()).isEqualTo("300万元");
+ assertThat(customerMapper.selectById(c.getId()).getStrategicAgreementLevel()).isEqualTo(3);
+ List logs = oplogMapper.selectList(null);
+ assertThat(logs).extracting(CustomerOplog::getAction)
+ .containsExactly(CustomerConstants.ACTION_AGREEMENT_ADD, CustomerConstants.ACTION_AGREEMENT_EDIT); // 主键自然序=发生序
+ assertThat(logs.get(1).getDetail()).contains("三级");
+ }
+
+ @Test
+ @DisplayName("删除:软删 + 快照回退(删最新 → 次新等级;删空 → NULL=未签)+ oplog AGREEMENT_DELETE")
+ void delete_snapshotFallback() throws Exception {
+ Customer c = insertRaw("云启科技有限公司", OPERATOR_ID, DEPT_ID);
+ Long olderId = service.create(agreementDTO(c.getId(), 2, null, null));
+ Long newerId = service.create(agreementDTO(c.getId(), 3, null, null));
+ // 显式错开 create_time,钉死「最新」语义(对齐 pageFollows 测试做法)
+ exec("UPDATE customer_agreement SET create_time = '2026-01-01 10:00:00' WHERE id = " + olderId);
+ exec("UPDATE customer_agreement SET create_time = '2026-02-01 10:00:00' WHERE id = " + newerId);
+
+ service.delete(newerId);
+ assertThat(agreementMapper.selectById(newerId)).isNull(); // @TableLogic 已删行自动过滤
+ assertThat(deletedFlag(newerId)).isEqualTo(1); // 软删位落库
+ assertThat(customerMapper.selectById(c.getId()).getStrategicAgreementLevel()).isEqualTo(2);
+
+ service.delete(olderId);
+ assertThat(customerMapper.selectById(c.getId()).getStrategicAgreementLevel()).isNull(); // 未签
+
+ List logs = oplogMapper.selectList(new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper()
+ .eq(CustomerOplog::getAction, CustomerConstants.ACTION_AGREEMENT_DELETE)
+ .orderByDesc(CustomerOplog::getId));
+ assertThat(logs).hasSize(2);
+ assertThat(logs).extracting(CustomerOplog::getDetail)
+ .containsExactly("删除战略协议【二级】", "删除战略协议【三级】"); // id 倒序=删除发生倒序(最后删的是二级)
+ }
+
+ @Test
+ @DisplayName("列表与详情:时间倒序 + 带出客户名")
+ void list_and_detail() {
+ Customer c = insertRaw("云启科技有限公司", OPERATOR_ID, DEPT_ID);
+ Long olderId = service.create(agreementDTO(c.getId(), 1, null, "旧协议"));
+ service.create(agreementDTO(c.getId(), 3, null, "新协议"));
+ exec("UPDATE customer_agreement SET create_time = '2026-01-01 10:00:00' WHERE id = " + olderId);
+
+ List list = service.listByCustomer(c.getId());
+ assertThat(list).hasSize(2);
+ assertThat(list.get(0).getRemark()).isEqualTo("新协议"); // 时间倒序
+ assertThat(list.get(0).getCustomerName()).isEqualTo("云启科技有限公司");
+
+ AgreementDTO detail = service.detail(list.get(0).getId());
+ assertThat(detail.getAgreementLevel()).isEqualTo(3);
+ assertThat(detail.getCustomerName()).isEqualTo("云启科技有限公司");
+ }
+
+ // ==================== 校验 / 权限路径 ====================
+
+ @Test
+ @DisplayName("校验:所属客户缺失 67001 / 等级缺失或越界 67017 / 客户不存在 67002")
+ void create_validation() {
+ assertThatThrownBy(() -> service.create(agreementDTO(null, 2, null, null)))
+ .isInstanceOfSatisfying(BusinessErrorException.class,
+ e -> assertThat(e.getCode()).isEqualTo(CustomerConstants.CODE_CUST_INVALID));
+
+ Customer c = insertRaw("云启科技有限公司", OPERATOR_ID, DEPT_ID);
+ assertThatThrownBy(() -> service.create(agreementDTO(c.getId(), null, null, null)))
+ .isInstanceOfSatisfying(BusinessErrorException.class,
+ e -> assertThat(e.getCode()).isEqualTo(CustomerConstants.CODE_AGREEMENT_INVALID));
+ assertThatThrownBy(() -> service.create(agreementDTO(c.getId(), 4, null, null)))
+ .isInstanceOfSatisfying(BusinessErrorException.class,
+ e -> assertThat(e.getCode()).isEqualTo(CustomerConstants.CODE_AGREEMENT_INVALID));
+ assertThatThrownBy(() -> service.create(agreementDTO(999999L, 2, null, null)))
+ .isInstanceOfSatisfying(BusinessErrorException.class,
+ e -> assertThat(e.getCode()).isEqualTo(CustomerConstants.CODE_CUST_NOT_EXIST));
+ }
+
+ @Test
+ @DisplayName("协议不存在 67017 防探测;权限继承客户(SELF 对他人客户:页签 67002、其协议详情 67002)")
+ void notExist_and_visibilityInheritance() {
+ assertThatThrownBy(() -> service.detail(999999L))
+ .isInstanceOfSatisfying(BusinessErrorException.class,
+ e -> assertThat(e.getCode()).isEqualTo(CustomerConstants.CODE_AGREEMENT_INVALID));
+
+ Customer other = insertRaw("他人客户有限公司", OTHER_OWNER_ID, OTHER_DEPT_ID);
+ CustomerAgreement hidden = new CustomerAgreement(); // mapper 直插他人客户名下协议
+ hidden.setCustomerId(other.getId());
+ hidden.setAgreementLevel(2);
+ agreementMapper.insert(hidden);
+
+ loadSelfScope();
+ try {
+ assertThatThrownBy(() -> service.listByCustomer(other.getId()))
+ .isInstanceOfSatisfying(BusinessErrorException.class,
+ e -> assertThat(e.getCode()).isEqualTo(CustomerConstants.CODE_CUST_NOT_EXIST));
+ assertThatThrownBy(() -> service.detail(hidden.getId()))
+ .isInstanceOfSatisfying(BusinessErrorException.class,
+ e -> assertThat(e.getCode()).isEqualTo(CustomerConstants.CODE_CUST_NOT_EXIST));
+ assertThatThrownBy(() -> service.delete(hidden.getId()))
+ .isInstanceOfSatisfying(BusinessErrorException.class,
+ e -> assertThat(e.getCode()).isEqualTo(CustomerConstants.CODE_CUST_NOT_EXIST));
+ } finally {
+ DataVisibilityContext.clear();
+ }
+ }
+
+ // ==================== helpers ====================
+
+ private AgreementDTO agreementDTO(Long customerId, Integer level, String amount, String remark) {
+ AgreementDTO dto = new AgreementDTO();
+ dto.setCustomerId(customerId);
+ dto.setAgreementLevel(level);
+ dto.setAmount(amount);
+ dto.setRemark(remark);
+ return dto;
+ }
+
+ private Customer insertRaw(String name, Long ownerUserId, Long ownerDeptId) {
+ Customer c = new Customer();
+ c.setCustomerNo("KHA" + String.format("%04d", noSeq++));
+ c.setCustomerName(name);
+ c.setCustomerType("TYPE_A");
+ c.setCustomerStage(1);
+ c.setArchiveStatus(1);
+ c.setOwnerUserId(ownerUserId);
+ c.setOwnerDeptId(ownerDeptId);
+ c.setVersion(0);
+ customerMapper.insert(c);
+ return c;
+ }
+
+ private void loadSelfScope() {
+ DataVisibilityContext.load(new DataVisibility(OPERATOR_ID, DEPT_ID,
+ List.of(DEPT_ID), Map.of("customer", DataScopeLevel.SELF), null));
+ }
+
+ private void exec(String sql) {
+ try (Statement st = session.getConnection().createStatement()) {
+ st.execute(sql);
+ } catch (Exception e) {
+ throw new IllegalStateException("测试 SQL 执行失败:" + sql, e);
+ }
+ }
+
+ /** 原生读取软删位(绕过 @TableLogic 自动过滤,验证 deleted 落库值)。 */
+ private Integer deletedFlag(Long id) {
+ try (Statement st = session.getConnection().createStatement();
+ var rs = st.executeQuery("SELECT deleted FROM customer_agreement WHERE id = " + id)) {
+ assertThat(rs.next()).as("行应存在").isTrue();
+ return rs.getInt(1);
+ } catch (Exception e) {
+ throw new IllegalStateException("查询软删位失败:id=" + id, e);
+ }
+ }
+
+ private static final List SCHEMA = List.of("""
+ CREATE TABLE IF NOT EXISTS customer (
+ id bigint primary key,
+ customer_no varchar(32),
+ customer_name varchar(100),
+ customer_type varchar(50),
+ province_code varchar(20),
+ city_code varchar(20),
+ district_code varchar(20),
+ industry_code varchar(50),
+ industry_child_code varchar(50),
+ customer_star_level tinyint,
+ relation_star_level tinyint,
+ network_units text,
+ owner_user_id bigint,
+ owner_user_name_snapshot varchar(64),
+ owner_dept_id bigint,
+ owner_dept_name_snapshot varchar(64),
+ enter_pool_time datetime,
+ customer_stage tinyint default 1,
+ archive_status tinyint default 1,
+ last_valid_follow_time datetime,
+ strategic_agreement_level tinyint,
+ vip_customer_level tinyint,
+ company_decision_maker varchar(100),
+ is_biz_negotiated tinyint,
+ director_visit_time datetime,
+ is_child tinyint default 0,
+ parent_customer_id bigint,
+ parent_customer_name_snapshot varchar(100),
+ cooperation_system varchar(200),
+ non_coop_reason varchar(200),
+ joined_president_class tinyint,
+ president_class_person varchar(100),
+ president_class_phone varchar(20),
+ joined_product_class tinyint,
+ product_class_person varchar(100),
+ product_class_phone varchar(20),
+ unified_credit_code varchar(18),
+ legal_representative varchar(100),
+ established_date date,
+ registered_capital varchar(100),
+ business_scope text,
+ staff_size varchar(50),
+ annual_revenue varchar(50),
+ business_address varchar(500),
+ biz_name_from_lookup varchar(200),
+ remark varchar(500),
+ version int default 0,
+ creator_id varchar(64),
+ create_time datetime,
+ updater_id varchar(64),
+ update_time datetime,
+ deleted tinyint default 0
+ )
+ """, """
+ CREATE TABLE IF NOT EXISTS customer_agreement (
+ id bigint primary key,
+ customer_id bigint not null,
+ agreement_level tinyint not null,
+ amount varchar(64),
+ remark varchar(500),
+ file_file_id varchar(64),
+ creator_id varchar(64),
+ create_time datetime,
+ updater_id varchar(64),
+ update_time datetime,
+ deleted tinyint default 0
+ )
+ """, """
+ CREATE TABLE IF NOT EXISTS customer_oplog (
+ id bigint primary key,
+ customer_id bigint,
+ action varchar(50),
+ detail varchar(1000),
+ operator_id bigint,
+ operator_name varchar(50),
+ operator_dept_name varchar(100),
+ creator_id varchar(64),
+ create_time datetime,
+ updater_id varchar(64),
+ update_time datetime,
+ deleted tinyint default 0
+ )
+ """);
+}
diff --git a/crm-customer/src/test/java/com/crm/customer/service/impl/CustomerContactServiceIntegrationTest.java b/crm-customer/src/test/java/com/crm/customer/service/impl/CustomerContactServiceIntegrationTest.java
index 32b9d7f..d65e81f 100644
--- a/crm-customer/src/test/java/com/crm/customer/service/impl/CustomerContactServiceIntegrationTest.java
+++ b/crm-customer/src/test/java/com/crm/customer/service/impl/CustomerContactServiceIntegrationTest.java
@@ -24,6 +24,7 @@ import com.crm.customer.domain.dto.CustomerSaveResultDTO;
import com.crm.customer.domain.dto.CustomerSearchItemDTO;
import com.crm.customer.domain.entity.Customer;
import com.crm.customer.domain.entity.CustomerContact;
+import com.crm.customer.domain.entity.CustomerOplog;
import com.crm.customer.domain.param.ContactPageParam;
import com.crm.customer.domain.param.CustomerSearchParam;
import com.crm.customer.mapper.CustomerContactMapper;
@@ -152,7 +153,8 @@ class CustomerContactServiceIntegrationTest {
oplogMapper = session.getMapper(CustomerOplogMapper.class);
CustomerDedupSettingProvider settings = new DefaultCustomerDedupSettingProvider();
- CustomerContactServiceImpl impl = new CustomerContactServiceImpl(customerMapper, settings);
+ CustomerContactServiceImpl impl = new CustomerContactServiceImpl(customerMapper, settings,
+ new CustomerOplogWriter(oplogMapper, userService, deptService));
ReflectionTestUtils.setField(impl, "baseMapper", contactMapper);
ReflectionTestUtils.setField(impl, "entityClass", CustomerContact.class);
contactService = impl;
@@ -162,7 +164,7 @@ class CustomerContactServiceIntegrationTest {
CustomerDedupService dedup = new CustomerDedupService(customerMapper, port, settings, userService);
CustomerServiceImpl custImpl = new CustomerServiceImpl(
new CustomerOplogWriter(oplogMapper, userService, deptService),
- dedup, userService, deptService, dictQueryService);
+ dedup, userService, deptService, dictQueryService, name -> List.of());
ReflectionTestUtils.setField(custImpl, "baseMapper", customerMapper);
ReflectionTestUtils.setField(custImpl, "entityClass", Customer.class);
customerService = custImpl;
@@ -436,12 +438,36 @@ class CustomerContactServiceIntegrationTest {
@Override public boolean creditCodeEnabled() { return true; }
@Override public boolean phoneSoftCheckEnabled() { return false; }
};
- CustomerContactServiceImpl svc = new CustomerContactServiceImpl(customerMapper, off);
+ CustomerContactServiceImpl svc = new CustomerContactServiceImpl(customerMapper, off,
+ new CustomerOplogWriter(oplogMapper, userService, deptService));
ReflectionTestUtils.setField(svc, "baseMapper", contactMapper);
ReflectionTestUtils.setField(svc, "entityClass", CustomerContact.class);
assertThat(svc.checkPhone("13800001111", null)).isEmpty();
}
+ // ==================== 操作日志(返工票 09-F10 / a4-5-6) ====================
+
+ @Test
+ @DisplayName("增删改写客户 oplog:CONTACT_ADD/EDIT/DELETE 记 customerId + 联系人名 detail")
+ void oplog_contactActions() {
+ Customer cust = insertRaw("云启科技有限公司", OPERATOR_ID, DEPT_ID);
+ Long id = contactService.create(contactDTO(cust.getId(), "王经理", "采购总监", "13800001111"));
+
+ ContactDTO edit = contactDTO(cust.getId(), "王经理", "采购总监", "13800001111");
+ edit.setName("王建国");
+ contactService.update(id, edit);
+ contactService.delete(id);
+
+ List logs = oplogMapper.selectList(new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper()
+ .eq(CustomerOplog::getCustomerId, cust.getId())
+ .orderByAsc(CustomerOplog::getId));
+ assertThat(logs).extracting(CustomerOplog::getAction)
+ .containsExactly("CONTACT_ADD", "CONTACT_EDIT", "CONTACT_DELETE");
+ assertThat(logs.get(0).getDetail()).contains("王经理").contains("新增联系人");
+ assertThat(logs.get(1).getDetail()).contains("王建国").contains("修改联系人");
+ assertThat(logs.get(2).getDetail()).contains("王建国").contains("删除联系人");
+ }
+
// ==================== 商机侧硬依赖(CustomerService,票 03 契约) ====================
@Test
diff --git a/crm-customer/src/test/java/com/crm/customer/service/impl/CustomerDetailMembersIntegrationTest.java b/crm-customer/src/test/java/com/crm/customer/service/impl/CustomerDetailMembersIntegrationTest.java
index 7d32c28..c278e0f 100644
--- a/crm-customer/src/test/java/com/crm/customer/service/impl/CustomerDetailMembersIntegrationTest.java
+++ b/crm-customer/src/test/java/com/crm/customer/service/impl/CustomerDetailMembersIntegrationTest.java
@@ -24,6 +24,7 @@ import com.crm.customer.mapper.CustomerFollowMapper;
import com.crm.customer.mapper.CustomerMapper;
import com.crm.customer.mapper.CustomerOplogMapper;
import com.crm.customer.mapper.CustomerTeamMemberMapper;
+import com.crm.customer.mapper.CustomerViewLogMapper;
import com.crm.customer.port.CustomerOpportunityQueryPort;
import com.crm.customer.service.CustomerOplogWriter;
import com.crm.customer.service.ICustomerDetailService;
@@ -80,6 +81,7 @@ class CustomerDetailMembersIntegrationTest {
private CustomerFollowMapper followMapper;
private CustomerTeamMemberMapper teamMemberMapper;
private CustomerOplogMapper oplogMapper;
+ private CustomerViewLogMapper viewLogMapper;
private ICustomerDetailService detailService;
private MockedStatic securityMock;
private int noSeq = 1;
@@ -112,6 +114,7 @@ class CustomerDetailMembersIntegrationTest {
configuration.addMapper(CustomerFollowMapper.class);
configuration.addMapper(CustomerTeamMemberMapper.class);
configuration.addMapper(CustomerOplogMapper.class);
+ configuration.addMapper(CustomerViewLogMapper.class);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
try (SqlSession s = sqlSessionFactory.openSession(true)) {
@@ -130,15 +133,17 @@ class CustomerDetailMembersIntegrationTest {
st.execute("DELETE FROM customer");
st.execute("DELETE FROM customer_team_member");
st.execute("DELETE FROM customer_oplog");
+ st.execute("DELETE FROM customer_view_log");
}
customerMapper = session.getMapper(CustomerMapper.class);
followMapper = session.getMapper(CustomerFollowMapper.class);
teamMemberMapper = session.getMapper(CustomerTeamMemberMapper.class);
oplogMapper = session.getMapper(CustomerOplogMapper.class);
+ viewLogMapper = session.getMapper(CustomerViewLogMapper.class);
CustomerOplogWriter writer = new CustomerOplogWriter(oplogMapper, userService, deptService);
detailService = new CustomerDetailServiceImpl(customerMapper, followMapper,
- teamMemberMapper, oplogMapper, new NoopPort(), userService, deptService, writer);
+ teamMemberMapper, oplogMapper, viewLogMapper, new NoopPort(), userService, deptService, writer);
securityMock = Mockito.mockStatic(SecurityUtils.class);
securityMock.when(SecurityUtils::getRequiredUserId).thenReturn(String.valueOf(OPERATOR_ID));
@@ -433,5 +438,13 @@ class CustomerDetailMembersIntegrationTest {
update_time datetime,
deleted tinyint default 0
)
+ """, """
+ CREATE TABLE IF NOT EXISTS customer_view_log (
+ id bigint primary key,
+ user_id bigint not null,
+ customer_id bigint not null,
+ last_view_time datetime not null,
+ UNIQUE (user_id, customer_id)
+ )
""");
}
diff --git a/crm-customer/src/test/java/com/crm/customer/service/impl/CustomerFollowDetailIntegrationTest.java b/crm-customer/src/test/java/com/crm/customer/service/impl/CustomerFollowDetailIntegrationTest.java
index 45f16eb..b68b47b 100644
--- a/crm-customer/src/test/java/com/crm/customer/service/impl/CustomerFollowDetailIntegrationTest.java
+++ b/crm-customer/src/test/java/com/crm/customer/service/impl/CustomerFollowDetailIntegrationTest.java
@@ -23,10 +23,12 @@ import com.crm.customer.domain.entity.Customer;
import com.crm.customer.domain.entity.CustomerFollow;
import com.crm.customer.domain.entity.CustomerOplog;
import com.crm.customer.domain.entity.CustomerTeamMember;
+import com.crm.customer.domain.entity.CustomerViewLog;
import com.crm.customer.mapper.CustomerFollowMapper;
import com.crm.customer.mapper.CustomerMapper;
import com.crm.customer.mapper.CustomerOplogMapper;
import com.crm.customer.mapper.CustomerTeamMemberMapper;
+import com.crm.customer.mapper.CustomerViewLogMapper;
import com.crm.customer.port.CustomerOpportunityQueryPort;
import com.crm.customer.service.CustomerOplogWriter;
import com.crm.customer.service.ICustomerDetailService;
@@ -85,6 +87,7 @@ class CustomerFollowDetailIntegrationTest {
private CustomerFollowMapper followMapper;
private CustomerTeamMemberMapper teamMemberMapper;
private CustomerOplogMapper oplogMapper;
+ private CustomerViewLogMapper viewLogMapper;
private ICustomerFollowService followService;
private ICustomerDetailService detailService;
private CustomerOplogWriter writer;
@@ -119,6 +122,7 @@ class CustomerFollowDetailIntegrationTest {
configuration.addMapper(CustomerFollowMapper.class);
configuration.addMapper(CustomerTeamMemberMapper.class);
configuration.addMapper(CustomerOplogMapper.class);
+ configuration.addMapper(CustomerViewLogMapper.class);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
try (SqlSession s = sqlSessionFactory.openSession(true)) {
@@ -138,11 +142,13 @@ class CustomerFollowDetailIntegrationTest {
st.execute("DELETE FROM customer_follow");
st.execute("DELETE FROM customer_team_member");
st.execute("DELETE FROM customer_oplog");
+ st.execute("DELETE FROM customer_view_log");
}
customerMapper = session.getMapper(CustomerMapper.class);
followMapper = session.getMapper(CustomerFollowMapper.class);
teamMemberMapper = session.getMapper(CustomerTeamMemberMapper.class);
oplogMapper = session.getMapper(CustomerOplogMapper.class);
+ viewLogMapper = session.getMapper(CustomerViewLogMapper.class);
writer = new CustomerOplogWriter(oplogMapper, userService, deptService);
followService = new CustomerFollowServiceImpl(customerMapper, userService, deptService, writer);
@@ -150,7 +156,7 @@ class CustomerFollowDetailIntegrationTest {
ReflectionTestUtils.setField(followService, "entityClass", CustomerFollow.class);
detailService = new CustomerDetailServiceImpl(customerMapper, followMapper, teamMemberMapper,
- oplogMapper, new NoopPort(), userService, deptService, writer);
+ oplogMapper, viewLogMapper, new NoopPort(), userService, deptService, writer);
securityMock = Mockito.mockStatic(SecurityUtils.class);
securityMock.when(SecurityUtils::getRequiredUserId).thenReturn(String.valueOf(OPERATOR_ID));
@@ -296,7 +302,7 @@ class CustomerFollowDetailIntegrationTest {
// port 异常 → 计数降级 null(前端显 "--"),头部不失败
ICustomerDetailService degraded = new CustomerDetailServiceImpl(customerMapper, followMapper,
- teamMemberMapper, oplogMapper, new CustomerOpportunityQueryPort() {
+ teamMemberMapper, oplogMapper, viewLogMapper, new CustomerOpportunityQueryPort() {
@Override
public PageResult pageByCustomerId(
Long customerId, BaseParam param) {
@@ -381,6 +387,26 @@ class CustomerFollowDetailIntegrationTest {
assertThat(page.getTotal()).isZero();
}
+ @Test
+ @DisplayName("详情触达(F7):detailHead upsert customer_view_log——已有行刷新锚点、新客户首访插入")
+ void detailHead_touchViewLog() {
+ Customer c = newCust("客户甲");
+ LocalDateTime first = LocalDateTime.now().minusMinutes(1);
+ exec("INSERT INTO customer_view_log (id, user_id, customer_id, last_view_time) "
+ + "VALUES (770001, " + OPERATOR_ID + ", " + c.getId() + ", '" + first + "')");
+
+ detailService.detailHead(c.getId());
+
+ List rows = viewLogMapper.selectList(null);
+ assertThat(rows).hasSize(1); // UNIQUE(user_id, customer_id) 去重,upsert 不新增行
+ assertThat(rows.get(0).getUserId()).isEqualTo(OPERATOR_ID);
+ assertThat(rows.get(0).getLastViewTime()).isAfter(first);
+
+ Customer other = newCust("客户乙");
+ detailService.detailHead(other.getId()); // 首访 → insert 第二行
+ assertThat(viewLogMapper.selectList(null)).hasSize(2);
+ }
+
// ==================== helpers ====================
private FollowCreateDTO followOf(String content) {
@@ -535,5 +561,13 @@ class CustomerFollowDetailIntegrationTest {
update_time datetime,
deleted tinyint default 0
)
+ """, """
+ CREATE TABLE IF NOT EXISTS customer_view_log (
+ id bigint primary key,
+ user_id bigint not null,
+ customer_id bigint not null,
+ last_view_time datetime not null,
+ UNIQUE (user_id, customer_id)
+ )
""");
}
diff --git a/crm-customer/src/test/java/com/crm/customer/service/impl/CustomerImportIntegrationTest.java b/crm-customer/src/test/java/com/crm/customer/service/impl/CustomerImportIntegrationTest.java
index 0063259..e8f98d4 100644
--- a/crm-customer/src/test/java/com/crm/customer/service/impl/CustomerImportIntegrationTest.java
+++ b/crm-customer/src/test/java/com/crm/customer/service/impl/CustomerImportIntegrationTest.java
@@ -322,8 +322,12 @@ class CustomerImportIntegrationTest {
}
private ImportPreviewDTO upload(byte[] bytes, String importMode) {
+ return upload(bytes, importMode, null);
+ }
+
+ private ImportPreviewDTO upload(byte[] bytes, String importMode, String duplicateStrategy) {
MockMultipartFile file = new MockMultipartFile("file", "import.xlsx", XLSX_TYPE, bytes);
- return importService.upload(file, importMode);
+ return importService.upload(file, importMode, duplicateStrategy);
}
private ImportPreviewDTO uploadStandard(List> customerRows, List> contactRows,
@@ -332,6 +336,12 @@ class CustomerImportIntegrationTest {
importMode);
}
+ private ImportPreviewDTO uploadStandard(List> customerRows, List> contactRows,
+ String importMode, String duplicateStrategy) {
+ return upload(excel(headOf(CustomerImportServiceImpl.CUSTOMER_HEADERS), customerRows, contactRows),
+ importMode, duplicateStrategy);
+ }
+
private Long singleTaskId() {
return taskMapper.selectList(new LambdaQueryWrapper<>()).get(0).getId();
}
@@ -450,6 +460,47 @@ class CustomerImportIntegrationTest {
.containsOnly("文件内多行匹配同一客户(重复时不导入),请合并为单行");
}
+ @Test
+ @DisplayName("upload OVERWRITE:组内仅最后一条通过校验的行生效,confirm 后按此执行(返工票 09-F8)")
+ void upload_duplicateGroupOverwriteLastWins() {
+ newCust("KH0001", "客户甲", null, "旧备注", 3);
+
+ ImportPreviewDTO preview = uploadStandard(
+ rowsOf(
+ row("KH0001", "客户甲一", null, null, null, null, null, null, "改一"),
+ row("KH0001", "客户甲二", null, null, null, null, null, null, "改二")),
+ List.of(), CustomerConstants.IMPORT_MODE_UPSERT,
+ CustomerConstants.IMPORT_DUP_OVERWRITE);
+
+ assertThat(preview.getDuplicateStrategy()).isEqualTo(CustomerConstants.IMPORT_DUP_OVERWRITE);
+ assertThat(preview.getUpdateCount()).isEqualTo(1);
+ assertThat(preview.getFailCount()).isEqualTo(1);
+ assertThat(preview.getRows()).extracting(ImportPreviewDTO.Row::getReason)
+ .containsOnlyOnce("文件内多行匹配同一客户(覆盖导入:仅最后一条通过校验的行生效),本行未执行");
+
+ Long taskId = singleTaskId();
+ importService.confirm(taskId);
+
+ CustomerImportTask task = taskMapper.selectById(taskId);
+ assertThat(task.getDuplicateStrategy()).isEqualTo(CustomerConstants.IMPORT_DUP_OVERWRITE);
+ assertThat(task.getStatus()).isEqualTo(CustomerConstants.IMPORT_STATUS_DONE);
+ assertThat(task.getUpdateCount()).isEqualTo(1);
+ assertThat(task.getFailCount()).isEqualTo(1);
+ // 最后一条生效:备注=改二
+ assertThat(customerMapper.selectOne(new LambdaQueryWrapper()
+ .eq(Customer::getCustomerNo, "KH0001")).getRemark()).isEqualTo("改二");
+ assertThat(failMapper.selectCount(new LambdaQueryWrapper()
+ .eq(CustomerImportFail::getTaskId, taskId))).isEqualTo(1);
+ }
+
+ @Test
+ @DisplayName("upload 重复策略非法 → 67013")
+ void upload_illegalDuplicateStrategy() {
+ assertCode(() -> uploadStandard(List.of(
+ row(null, "新客户甲", null, null, null, null, null, "3", null)),
+ List.of(), CustomerConstants.IMPORT_MODE_UPSERT, "MERGE"), 67013);
+ }
+
// ==================== 更新语义(issues-09 §C) ====================
@Test
@@ -806,6 +857,7 @@ class CustomerImportIntegrationTest {
CREATE TABLE IF NOT EXISTS customer_import_task (
id bigint primary key,
import_mode varchar(20) not null,
+ duplicate_strategy varchar(20) not null default 'SKIP',
template_version varchar(10) not null,
file_file_id varchar(64),
file_hash varchar(64),
diff --git a/crm-customer/src/test/java/com/crm/customer/service/impl/CustomerServiceImplIntegrationTest.java b/crm-customer/src/test/java/com/crm/customer/service/impl/CustomerServiceImplIntegrationTest.java
index b077051..aee0c87 100644
--- a/crm-customer/src/test/java/com/crm/customer/service/impl/CustomerServiceImplIntegrationTest.java
+++ b/crm-customer/src/test/java/com/crm/customer/service/impl/CustomerServiceImplIntegrationTest.java
@@ -19,10 +19,12 @@ import com.crm.base.security.SecurityUtils;
import com.crm.customer.domain.dto.CustomerCreateDTO;
import com.crm.customer.domain.dto.CustomerSaveResultDTO;
import com.crm.customer.domain.dto.CustomerUpdateDTO;
+import com.crm.customer.domain.dto.CompanyBatchUpdateDTO;
import com.crm.customer.domain.entity.Customer;
import com.crm.customer.domain.entity.CustomerOplog;
import com.crm.customer.mapper.CustomerMapper;
import com.crm.customer.mapper.CustomerOplogMapper;
+import com.crm.customer.port.CompanyLookupPort;
import com.crm.customer.port.impl.NgramNameSimilarityPortImpl;
import com.crm.customer.service.CustomerDedupService;
import com.crm.customer.service.CustomerDedupSettingProvider;
@@ -30,6 +32,7 @@ import com.crm.customer.service.CustomerNameMatchMode;
import com.crm.customer.service.CustomerOplogWriter;
import com.crm.dict.service.DictQueryService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.LocalCacheScope;
import org.apache.ibatis.session.SqlSession;
@@ -89,6 +92,8 @@ class CustomerServiceImplIntegrationTest {
private final IAuthUserService userService = mock(IAuthUserService.class);
private final ISysDeptService deptService = mock(ISysDeptService.class);
private final DictQueryService dictQueryService = mock(DictQueryService.class);
+ private final com.crm.customer.port.CompanyLookupPort companyLookupPort =
+ mock(com.crm.customer.port.CompanyLookupPort.class);
@BeforeAll
static void bootstrap() throws Exception {
@@ -139,7 +144,7 @@ class CustomerServiceImplIntegrationTest {
NgramNameSimilarityPortImpl port = new NgramNameSimilarityPortImpl(customerMapper, settings, DS);
CustomerDedupService dedup = new CustomerDedupService(customerMapper, port, settings, userService);
service = new CustomerServiceImpl(new CustomerOplogWriter(oplogMapper, userService, deptService),
- dedup, userService, deptService, dictQueryService);
+ dedup, userService, deptService, dictQueryService, companyLookupPort);
ReflectionTestUtils.setField(service, "baseMapper", customerMapper);
ReflectionTestUtils.setField(service, "entityClass", Customer.class);
@@ -281,6 +286,77 @@ class CustomerServiceImplIntegrationTest {
e -> assertThat(e.getCode()).isEqualTo(67001));
}
+ // ==================== 批量工商更新(返工票 09-F6 / a4-3-1) ====================
+
+ @Test
+ @DisplayName("批量工商更新:命中候选只回填空缺字段 + oplog,行级 UPDATED")
+ void batchCompanyUpdate_fillsBlankFields() {
+ Customer c = insertRaw("云启科技有限公司", null);
+ when(companyLookupPort.lookup("云启科技有限公司")).thenReturn(List.of(
+ new CompanyLookupPort.CompanyCandidate("云启科技有限公司(沪)", "91310000MA1FL0000X",
+ "张三", LocalDate.of(2015, 3, 1), "1000万人民币", "软件开发", "50-99人",
+ "5000万", "上海市浦东新区")));
+
+ List results = service.batchCompanyUpdate(List.of(c.getId()));
+
+ assertThat(results).hasSize(1);
+ CompanyBatchUpdateDTO r = results.get(0);
+ assertThat(r.getStatus()).isEqualTo(CompanyBatchUpdateDTO.UPDATED);
+ assertThat(r.getFilledFields()).isEqualTo(9);
+ Customer after = customerMapper.selectById(c.getId());
+ assertThat(after.getBizNameFromLookup()).isEqualTo("云启科技有限公司(沪)");
+ assertThat(after.getLegalRepresentative()).isEqualTo("张三");
+ assertThat(after.getBusinessAddress()).isEqualTo("上海市浦东新区");
+ List logs = oplogMapper.selectList(new LambdaQueryWrapper()
+ .eq(CustomerOplog::getCustomerId, c.getId())
+ .eq(CustomerOplog::getAction, "UPDATE"));
+ assertThat(logs).hasSize(1);
+ assertThat(logs.get(0).getDetail()).contains("批量更新工商信息").contains("9");
+ }
+
+ @Test
+ @DisplayName("批量工商更新:已填字段不覆盖(§C2 只补空缺)→ SKIPPED 无 oplog")
+ void batchCompanyUpdate_skipsWhenFilled() {
+ Customer c = insertRaw("云启科技有限公司", null);
+ customerMapper.update(c, new LambdaUpdateWrapper()
+ .eq(Customer::getId, c.getId())
+ .set(Customer::getLegalRepresentative, "已有法人"));
+ when(companyLookupPort.lookup("云启科技有限公司")).thenReturn(List.of(
+ new CompanyLookupPort.CompanyCandidate(null, null,
+ "张三", null, null, null, null, null, null)));
+
+ CompanyBatchUpdateDTO r = service.batchCompanyUpdate(List.of(c.getId())).get(0);
+
+ assertThat(r.getStatus()).isEqualTo(CompanyBatchUpdateDTO.SKIPPED);
+ assertThat(customerMapper.selectById(c.getId()).getLegalRepresentative()).isEqualTo("已有法人");
+ assertThat(customerMapper.selectById(c.getId()).getBizNameFromLookup()).isNull();
+ }
+
+ @Test
+ @DisplayName("批量工商更新:工商源未命中 → NO_HIT;命中信用代码被他人占用 → CONFLICT 不写")
+ void batchCompanyUpdate_noHitAndConflict() {
+ Customer c = insertRaw("云启科技有限公司", null);
+ Customer other = insertRaw("已有公司", "91310000MA1FL0000X");
+ when(companyLookupPort.lookup("云启科技有限公司")).thenReturn(List.of());
+ assertThat(service.batchCompanyUpdate(List.of(c.getId())).get(0).getStatus())
+ .isEqualTo(CompanyBatchUpdateDTO.NO_HIT);
+
+ when(companyLookupPort.lookup("云启科技有限公司")).thenReturn(List.of(
+ new CompanyLookupPort.CompanyCandidate("云启科技有限公司(沪)", "91310000MA1FL0000X",
+ null, null, null, null, null, null, null)));
+ CompanyBatchUpdateDTO conflict = service.batchCompanyUpdate(List.of(c.getId())).get(0);
+ assertThat(conflict.getStatus()).isEqualTo(CompanyBatchUpdateDTO.CONFLICT);
+ assertThat(customerMapper.selectById(c.getId()).getUnifiedCreditCode()).isNull();
+ }
+
+ @Test
+ @DisplayName("批量工商更新:ids 空 → 67001")
+ void batchCompanyUpdate_emptyIds() {
+ assertThatThrownBy(() -> service.batchCompanyUpdate(List.of()))
+ .isInstanceOfSatisfying(BusinessErrorException.class,
+ e -> assertThat(e.getCode()).isEqualTo(67001));
+ }
+
// ==================== 编辑 ====================
@Test
diff --git a/logs/crm-app.log b/logs/crm-app.log
index eb3984a..0de70c5 100644
--- a/logs/crm-app.log
+++ b/logs/crm-app.log
@@ -1,1526 +1,261 @@
-<<<<<<< Updated upstream
-2026-09-04T00:00:00.002+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-04T00:00:00.002723400
-2026-09-04T00:00:00.093+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 1 êʧЧ 0
-2026-09-04T00:00:30.000+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-04T00:00:30.000709700
-2026-09-04T00:00:30.085+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 1 êʧЧ 0
-2026-09-04T00:01:00.000+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-04T00:01:00.000291700
-2026-09-04T00:01:00.087+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 1 êʧЧ 0
-2026-09-04T00:01:30.001+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-04T00:01:30.001097100
-2026-09-04T00:01:30.082+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 1 êʧЧ 0
-2026-09-04T00:02:00.012+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-04T00:02:00.012911900
-2026-09-04T00:02:00.099+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 1 êʧЧ 0
-2026-09-04T00:02:30.003+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-04T00:02:30.003242700
-2026-09-04T00:02:30.086+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 1 êʧЧ 0
-2026-09-04T00:03:00.007+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-04T00:03:00.007878600
-2026-09-04T00:03:00.095+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 1 êʧЧ 0
-2026-09-04T00:03:30.011+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-04T00:03:30.011854300
-2026-09-04T00:03:30.097+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 1 êʧЧ 0
-2026-09-04T00:03:34.954+08:00 WARN 24328 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
-2026-09-04T00:04:00.011+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-04T00:04:00.011930800
-2026-09-04T00:04:00.097+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 1 êʧЧ 0
-2026-09-04T00:04:30.015+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-04T00:04:30.015487400
-2026-09-04T00:04:30.096+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 1 êʧЧ 0
-2026-09-04T00:04:54.675+08:00 ERROR 24328 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ȫ쳣
+2026-09-05T11:23:07.515+08:00 INFO 21796 --- [crm-app] [main] com.crm.app.CrmAppApplication : Starting CrmAppApplication v1.0.0-SNAPSHOT using Java 17.0.15 with PID 21796 (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-05T11:23:07.541+08:00 INFO 21796 --- [crm-app] [main] com.crm.app.CrmAppApplication : The following 1 profile is active: "verify"
+2026-09-05T11:23:09.924+08:00 INFO 21796 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
+2026-09-05T11:23:09.928+08:00 INFO 21796 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
+2026-09-05T11:23:09.977+08:00 INFO 21796 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 36 ms. Found 0 JPA repository interfaces.
+2026-09-05T11:23:10.007+08:00 INFO 21796 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
+2026-09-05T11:23:10.009+08:00 INFO 21796 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
+2026-09-05T11:23:10.032+08:00 INFO 21796 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 3 ms. Found 0 Redis repository interfaces.
+2026-09-05T11:23:10.279+08:00 WARN 21796 --- [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-05T11:23:10.282+08:00 WARN 21796 --- [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-05T11:23:10.283+08:00 WARN 21796 --- [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-05T11:23:10.284+08:00 WARN 21796 --- [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-05T11:23:10.284+08:00 WARN 21796 --- [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-05T11:23:10.285+08:00 WARN 21796 --- [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-05T11:23:10.286+08:00 WARN 21796 --- [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-05T11:23:10.287+08:00 WARN 21796 --- [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-05T11:23:10.287+08:00 WARN 21796 --- [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-05T11:23:10.288+08:00 WARN 21796 --- [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-05T11:23:10.288+08:00 WARN 21796 --- [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-05T11:23:10.289+08:00 WARN 21796 --- [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-05T11:23:10.289+08:00 WARN 21796 --- [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-05T11:23:10.290+08:00 WARN 21796 --- [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-05T11:23:10.290+08:00 WARN 21796 --- [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-05T11:23:10.291+08:00 WARN 21796 --- [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-05T11:23:10.291+08:00 WARN 21796 --- [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-05T11:23:10.291+08:00 WARN 21796 --- [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-05T11:23:10.292+08:00 WARN 21796 --- [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-05T11:23:10.292+08:00 WARN 21796 --- [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-05T11:23:10.292+08:00 WARN 21796 --- [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-05T11:23:10.295+08:00 WARN 21796 --- [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-05T11:23:10.298+08:00 WARN 21796 --- [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-05T11:23:10.299+08:00 WARN 21796 --- [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-05T11:23:10.299+08:00 WARN 21796 --- [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-05T11:23:10.300+08:00 WARN 21796 --- [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-05T11:23:10.300+08:00 WARN 21796 --- [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-05T11:23:10.300+08:00 WARN 21796 --- [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-05T11:23:10.301+08:00 WARN 21796 --- [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-05T11:23:10.301+08:00 WARN 21796 --- [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-05T11:23:10.302+08:00 WARN 21796 --- [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-05T11:23:10.302+08:00 WARN 21796 --- [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-05T11:23:10.303+08:00 WARN 21796 --- [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-05T11:23:10.303+08:00 WARN 21796 --- [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-05T11:23:10.304+08:00 WARN 21796 --- [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-05T11:23:10.304+08:00 WARN 21796 --- [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-05T11:23:10.305+08:00 WARN 21796 --- [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-05T11:23:10.305+08:00 WARN 21796 --- [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-05T11:23:10.305+08:00 WARN 21796 --- [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-05T11:23:10.306+08:00 WARN 21796 --- [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-05T11:23:10.306+08:00 WARN 21796 --- [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-05T11:23:10.307+08:00 WARN 21796 --- [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-05T11:23:10.307+08:00 WARN 21796 --- [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-05T11:23:10.308+08:00 WARN 21796 --- [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-05T11:23:10.308+08:00 WARN 21796 --- [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-05T11:23:10.309+08:00 WARN 21796 --- [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-05T11:23:10.309+08:00 WARN 21796 --- [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-05T11:23:10.309+08:00 WARN 21796 --- [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-05T11:23:10.313+08:00 WARN 21796 --- [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-05T11:23:10.313+08:00 WARN 21796 --- [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-05T11:23:10.314+08:00 WARN 21796 --- [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-05T11:23:10.315+08:00 WARN 21796 --- [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-05T11:23:10.316+08:00 WARN 21796 --- [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-05T11:23:10.316+08:00 WARN 21796 --- [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-05T11:23:10.317+08:00 WARN 21796 --- [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-05T11:23:10.317+08:00 WARN 21796 --- [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-05T11:23:10.318+08:00 WARN 21796 --- [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-05T11:23:10.318+08:00 WARN 21796 --- [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-05T11:23:10.318+08:00 WARN 21796 --- [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-05T11:23:10.319+08:00 WARN 21796 --- [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-05T11:23:10.319+08:00 WARN 21796 --- [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-05T11:23:10.319+08:00 WARN 21796 --- [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-05T11:23:10.320+08:00 WARN 21796 --- [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-05T11:23:10.320+08:00 WARN 21796 --- [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-05T11:23:10.320+08:00 WARN 21796 --- [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-05T11:23:10.321+08:00 WARN 21796 --- [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-05T11:23:10.321+08:00 WARN 21796 --- [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-05T11:23:10.321+08:00 WARN 21796 --- [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-05T11:23:10.322+08:00 WARN 21796 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration.
+2026-09-05T11:23:10.329+08:00 WARN 21796 --- [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-05T11:23:10.331+08:00 WARN 21796 --- [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-05T11:23:10.332+08:00 WARN 21796 --- [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-05T11:23:10.332+08:00 WARN 21796 --- [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-05T11:23:10.332+08:00 WARN 21796 --- [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-05T11:23:10.333+08:00 WARN 21796 --- [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-05T11:23:10.333+08:00 WARN 21796 --- [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-05T11:23:10.333+08:00 WARN 21796 --- [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-05T11:23:10.333+08:00 WARN 21796 --- [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-05T11:23:10.334+08:00 WARN 21796 --- [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-05T11:23:10.334+08:00 WARN 21796 --- [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-05T11:23:10.334+08:00 WARN 21796 --- [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-05T11:23:10.335+08:00 WARN 21796 --- [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-05T11:23:10.335+08:00 WARN 21796 --- [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-05T11:23:10.335+08:00 WARN 21796 --- [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-05T11:23:10.335+08:00 WARN 21796 --- [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-05T11:23:10.335+08:00 WARN 21796 --- [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-05T11:23:10.336+08:00 WARN 21796 --- [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-05T11:23:10.336+08:00 WARN 21796 --- [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-05T11:23:10.336+08:00 WARN 21796 --- [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-05T11:23:10.337+08:00 WARN 21796 --- [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-05T11:23:10.337+08:00 WARN 21796 --- [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-05T11:23:10.338+08:00 WARN 21796 --- [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-05T11:23:10.338+08:00 WARN 21796 --- [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-05T11:23:10.339+08:00 WARN 21796 --- [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-05T11:23:10.339+08:00 WARN 21796 --- [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-05T11:23:10.340+08:00 WARN 21796 --- [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-05T11:23:10.340+08:00 WARN 21796 --- [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-05T11:23:10.341+08:00 WARN 21796 --- [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-05T11:23:10.341+08:00 WARN 21796 --- [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-05T11:23:10.341+08:00 WARN 21796 --- [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-05T11:23:10.342+08:00 WARN 21796 --- [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-05T11:23:10.342+08:00 WARN 21796 --- [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-05T11:23:10.343+08:00 WARN 21796 --- [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-05T11:23:10.347+08:00 WARN 21796 --- [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-05T11:23:10.347+08:00 WARN 21796 --- [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-05T11:23:10.347+08:00 WARN 21796 --- [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-05T11:23:10.348+08:00 WARN 21796 --- [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-05T11:23:10.348+08:00 WARN 21796 --- [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-05T11:23:10.349+08:00 WARN 21796 --- [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-05T11:23:10.349+08:00 WARN 21796 --- [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-05T11:23:10.349+08:00 WARN 21796 --- [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-05T11:23:10.350+08:00 WARN 21796 --- [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-05T11:23:10.350+08:00 WARN 21796 --- [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-05T11:23:10.351+08:00 WARN 21796 --- [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-05T11:23:10.351+08:00 WARN 21796 --- [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-05T11:23:10.352+08:00 WARN 21796 --- [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-05T11:23:10.353+08:00 WARN 21796 --- [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-05T11:23:10.353+08:00 WARN 21796 --- [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-05T11:23:10.354+08:00 WARN 21796 --- [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-05T11:23:10.355+08:00 WARN 21796 --- [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-05T11:23:10.357+08:00 WARN 21796 --- [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-05T11:23:10.358+08:00 WARN 21796 --- [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-05T11:23:10.365+08:00 WARN 21796 --- [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-05T11:23:10.365+08:00 WARN 21796 --- [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-05T11:23:10.366+08:00 WARN 21796 --- [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-05T11:23:10.366+08:00 WARN 21796 --- [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-05T11:23:10.366+08:00 WARN 21796 --- [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-05T11:23:10.367+08:00 WARN 21796 --- [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-05T11:23:10.367+08:00 WARN 21796 --- [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-05T11:23:10.368+08:00 WARN 21796 --- [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-05T11:23:10.368+08:00 WARN 21796 --- [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-05T11:23:10.369+08:00 WARN 21796 --- [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-05T11:23:10.369+08:00 WARN 21796 --- [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-05T11:23:10.369+08:00 WARN 21796 --- [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-05T11:23:10.370+08:00 WARN 21796 --- [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-05T11:23:10.370+08:00 WARN 21796 --- [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-05T11:23:10.370+08:00 WARN 21796 --- [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-05T11:23:10.371+08:00 WARN 21796 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration.
+2026-09-05T11:23:11.588+08:00 INFO 21796 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
+2026-09-05T11:23:11.619+08:00 INFO 21796 --- [crm-app] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
+2026-09-05T11:23:11.620+08:00 INFO 21796 --- [crm-app] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.31]
+2026-09-05T11:23:11.717+08:00 INFO 21796 --- [crm-app] [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
+2026-09-05T11:23:11.718+08:00 INFO 21796 --- [crm-app] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 4037 ms
+2026-09-05T11:23:12.866+08:00 INFO 21796 --- [crm-app] [main] com.crm.auth.config.PermissionConfig : Ȩܿرɨɣ0
+2026-09-05T11:23:13.048+08:00 INFO 21796 --- [crm-app] [main] com.crm.base.config.CustomIdGenerator : ѩIDʼɣworkerId=0, datacenterId=0
+2026-09-05T11:23:13.931+08:00 INFO 21796 --- [crm-app] [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
+2026-09-05T11:23:14.026+08:00 INFO 21796 --- [crm-app] [main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.5.3.Final
+2026-09-05T11:23:14.082+08:00 INFO 21796 --- [crm-app] [main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled
+2026-09-05T11:23:14.616+08:00 INFO 21796 --- [crm-app] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer
+2026-09-05T11:23:14.686+08:00 INFO 21796 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
+2026-09-05T11:23:15.556+08:00 INFO 21796 --- [crm-app] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@4dcc0e3d
+2026-09-05T11:23:15.559+08:00 INFO 21796 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
+2026-09-05T11:23:15.876+08:00 WARN 21796 --- [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-05T11:23:18.466+08:00 INFO 21796 --- [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-05T11:23:44.163+08:00 INFO 21796 --- [crm-app] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
+2026-09-05T11:23:44.996+08:00 WARN 21796 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================
+2026-09-05T11:23:44.997+08:00 WARN 21796 --- [crm-app] [main] c.c.a.controller.DebugTokenController : token ӿ /api/auth/debug/token ãverify profile
+2026-09-05T11:23:44.997+08:00 WARN 21796 --- [crm-app] [main] c.c.a.controller.DebugTokenController : Ͻκ֪ userId ˿ðû
+2026-09-05T11:23:44.997+08:00 WARN 21796 --- [crm-app] [main] c.c.a.controller.DebugTokenController : μ docs/adr/0014-verify-profile-debug-token-endpoint.md
+2026-09-05T11:23:44.998+08:00 WARN 21796 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================
+2026-09-05T11:23:47.612+08:00 INFO 21796 --- [crm-app] [main] c.c.c.p.i.NgramNameSimilarityPortImpl : CustomerNameSimilarityPort һʵ־ԤɸģʽFULLTEXT ngram
+2026-09-05T11:23:47.614+08:00 INFO 21796 --- [crm-app] [main] c.c.c.p.impl.StubCompanyLookupPortImpl : CompanyLookupPort һ stub װ䣨δ룬̺ѡؿգ
+2026-09-05T11:23:48.175+08:00 INFO 21796 --- [crm-app] [main] c.c.c.p.i.NoopProjectOwnerSyncPortImpl : ProjectOwnerSyncPort no-op Ĭʵװ䣨A5 Ŀģδowner ͬ
+2026-09-05T11:23:48.287+08:00 INFO 21796 --- [crm-app] [main] c.c.p.i.NoopOpportunityOwnerSyncPortImpl : OpportunityOwnerSyncPort no-op Ĭʵװ䣨Ʊ 11 ̻Դ滻
+2026-09-05T11:23:48.517+08:00 WARN 21796 --- [crm-app] [main] .s.s.UserDetailsServiceAutoConfiguration :
+
+Using generated security password: 3670a7ee-61c5-4d83-b7a4-d4ad28531303
-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._writeStringSegment2(UTF8JsonGenerator.java:1522) ~[jackson-core-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.core.json.UTF8JsonGenerator._writeStringSegment(UTF8JsonGenerator.java:1469) ~[jackson-core-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.core.json.UTF8JsonGenerator.writeString(UTF8JsonGenerator.java:531) ~[jackson-core-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.std.StringSerializer.serialize(StringSerializer.java:41) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:732) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:183) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:119) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:79) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:18) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:732) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:183) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:502) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:341) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1574) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1061) ~[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]
-=======
-2026-09-03T14:09:03.636+08:00 INFO 6104 --- [crm-app] [main] com.crm.app.CrmAppApplication : Starting CrmAppApplication v1.0.0-SNAPSHOT using Java 17.0.15 with PID 6104 (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-03T14:09:03.776+08:00 INFO 6104 --- [crm-app] [main] com.crm.app.CrmAppApplication : The following 1 profile is active: "verify"
-2026-09-03T14:09:05.972+08:00 INFO 6104 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
-2026-09-03T14:09:05.976+08:00 INFO 6104 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
-2026-09-03T14:09:06.020+08:00 INFO 6104 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 30 ms. Found 0 JPA repository interfaces.
-2026-09-03T14:09:06.046+08:00 INFO 6104 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
-2026-09-03T14:09:06.048+08:00 INFO 6104 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
-2026-09-03T14:09:06.066+08:00 INFO 6104 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 4 ms. Found 0 Redis repository interfaces.
-2026-09-03T14:09:06.321+08:00 WARN 6104 --- [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-03T14:09:06.322+08:00 WARN 6104 --- [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-03T14:09:06.322+08:00 WARN 6104 --- [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-03T14:09:06.324+08:00 WARN 6104 --- [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-03T14:09:06.326+08:00 WARN 6104 --- [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-03T14:09:06.327+08:00 WARN 6104 --- [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-03T14:09:06.327+08:00 WARN 6104 --- [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-03T14:09:06.328+08:00 WARN 6104 --- [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-03T14:09:06.328+08:00 WARN 6104 --- [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-03T14:09:06.329+08:00 WARN 6104 --- [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-03T14:09:06.329+08:00 WARN 6104 --- [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-03T14:09:06.330+08:00 WARN 6104 --- [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-03T14:09:06.330+08:00 WARN 6104 --- [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-03T14:09:06.332+08:00 WARN 6104 --- [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-03T14:09:06.332+08:00 WARN 6104 --- [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-03T14:09:06.333+08:00 WARN 6104 --- [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-03T14:09:06.338+08:00 WARN 6104 --- [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-03T14:09:06.342+08:00 WARN 6104 --- [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-03T14:09:06.344+08:00 WARN 6104 --- [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-03T14:09:06.344+08:00 WARN 6104 --- [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-03T14:09:06.345+08:00 WARN 6104 --- [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-03T14:09:06.346+08:00 WARN 6104 --- [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-03T14:09:06.346+08:00 WARN 6104 --- [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-03T14:09:06.346+08:00 WARN 6104 --- [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-03T14:09:06.347+08:00 WARN 6104 --- [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-03T14:09:06.349+08:00 WARN 6104 --- [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-03T14:09:06.349+08:00 WARN 6104 --- [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-03T14:09:06.350+08:00 WARN 6104 --- [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-03T14:09:06.351+08:00 WARN 6104 --- [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-03T14:09:06.351+08:00 WARN 6104 --- [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-03T14:09:06.352+08:00 WARN 6104 --- [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-03T14:09:06.352+08:00 WARN 6104 --- [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-03T14:09:06.352+08:00 WARN 6104 --- [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-03T14:09:06.353+08:00 WARN 6104 --- [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-03T14:09:06.353+08:00 WARN 6104 --- [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-03T14:09:06.354+08:00 WARN 6104 --- [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-03T14:09:06.354+08:00 WARN 6104 --- [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-03T14:09:06.355+08:00 WARN 6104 --- [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-03T14:09:06.355+08:00 WARN 6104 --- [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-03T14:09:06.356+08:00 WARN 6104 --- [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-03T14:09:06.356+08:00 WARN 6104 --- [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-03T14:09:06.358+08:00 WARN 6104 --- [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-03T14:09:06.358+08:00 WARN 6104 --- [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-03T14:09:06.358+08:00 WARN 6104 --- [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-03T14:09:06.359+08:00 WARN 6104 --- [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-03T14:09:06.359+08:00 WARN 6104 --- [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-03T14:09:06.360+08:00 WARN 6104 --- [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-03T14:09:06.362+08:00 WARN 6104 --- [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-03T14:09:06.398+08:00 WARN 6104 --- [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-03T14:09:06.423+08:00 WARN 6104 --- [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-03T14:09:06.436+08:00 WARN 6104 --- [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-03T14:09:06.443+08:00 WARN 6104 --- [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-03T14:09:06.448+08:00 WARN 6104 --- [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-03T14:09:06.453+08:00 WARN 6104 --- [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-03T14:09:06.457+08:00 WARN 6104 --- [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-03T14:09:06.463+08:00 WARN 6104 --- [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-03T14:09:06.464+08:00 WARN 6104 --- [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-03T14:09:06.469+08:00 WARN 6104 --- [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-03T14:09:06.473+08:00 WARN 6104 --- [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-03T14:09:06.475+08:00 WARN 6104 --- [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-03T14:09:06.476+08:00 WARN 6104 --- [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-03T14:09:06.494+08:00 WARN 6104 --- [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-03T14:09:06.497+08:00 WARN 6104 --- [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-03T14:09:06.498+08:00 WARN 6104 --- [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-03T14:09:06.502+08:00 WARN 6104 --- [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-03T14:09:06.513+08:00 WARN 6104 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration.
-2026-09-03T14:09:06.527+08:00 WARN 6104 --- [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-03T14:09:06.531+08:00 WARN 6104 --- [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-03T14:09:06.532+08:00 WARN 6104 --- [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-03T14:09:06.534+08:00 WARN 6104 --- [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-03T14:09:06.535+08:00 WARN 6104 --- [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-03T14:09:06.536+08:00 WARN 6104 --- [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-03T14:09:06.537+08:00 WARN 6104 --- [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-03T14:09:06.538+08:00 WARN 6104 --- [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-03T14:09:06.539+08:00 WARN 6104 --- [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-03T14:09:06.540+08:00 WARN 6104 --- [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-03T14:09:06.541+08:00 WARN 6104 --- [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-03T14:09:06.542+08:00 WARN 6104 --- [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-03T14:09:06.543+08:00 WARN 6104 --- [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-03T14:09:06.543+08:00 WARN 6104 --- [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-03T14:09:06.543+08:00 WARN 6104 --- [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-03T14:09:06.544+08:00 WARN 6104 --- [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-03T14:09:06.544+08:00 WARN 6104 --- [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-03T14:09:06.545+08:00 WARN 6104 --- [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-03T14:09:06.545+08:00 WARN 6104 --- [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-03T14:09:06.545+08:00 WARN 6104 --- [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-03T14:09:06.546+08:00 WARN 6104 --- [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-03T14:09:06.546+08:00 WARN 6104 --- [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-03T14:09:06.546+08:00 WARN 6104 --- [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-03T14:09:06.547+08:00 WARN 6104 --- [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-03T14:09:06.548+08:00 WARN 6104 --- [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-03T14:09:06.548+08:00 WARN 6104 --- [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-03T14:09:06.550+08:00 WARN 6104 --- [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-03T14:09:06.553+08:00 WARN 6104 --- [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-03T14:09:06.554+08:00 WARN 6104 --- [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-03T14:09:06.555+08:00 WARN 6104 --- [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-03T14:09:06.556+08:00 WARN 6104 --- [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-03T14:09:06.557+08:00 WARN 6104 --- [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-03T14:09:06.557+08:00 WARN 6104 --- [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-03T14:09:06.557+08:00 WARN 6104 --- [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-03T14:09:06.558+08:00 WARN 6104 --- [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-03T14:09:06.559+08:00 WARN 6104 --- [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-03T14:09:06.559+08:00 WARN 6104 --- [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-03T14:09:06.559+08:00 WARN 6104 --- [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-03T14:09:06.560+08:00 WARN 6104 --- [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-03T14:09:06.560+08:00 WARN 6104 --- [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-03T14:09:06.563+08:00 WARN 6104 --- [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-03T14:09:06.564+08:00 WARN 6104 --- [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-03T14:09:06.564+08:00 WARN 6104 --- [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-03T14:09:06.565+08:00 WARN 6104 --- [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-03T14:09:06.565+08:00 WARN 6104 --- [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-03T14:09:06.566+08:00 WARN 6104 --- [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-03T14:09:06.567+08:00 WARN 6104 --- [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-03T14:09:06.568+08:00 WARN 6104 --- [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-03T14:09:06.568+08:00 WARN 6104 --- [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-03T14:09:06.569+08:00 WARN 6104 --- [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-03T14:09:06.569+08:00 WARN 6104 --- [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-03T14:09:06.570+08:00 WARN 6104 --- [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-03T14:09:06.570+08:00 WARN 6104 --- [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-03T14:09:06.571+08:00 WARN 6104 --- [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-03T14:09:06.573+08:00 WARN 6104 --- [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-03T14:09:06.574+08:00 WARN 6104 --- [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-03T14:09:06.574+08:00 WARN 6104 --- [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-03T14:09:06.575+08:00 WARN 6104 --- [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-03T14:09:06.575+08:00 WARN 6104 --- [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-03T14:09:06.575+08:00 WARN 6104 --- [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-03T14:09:06.575+08:00 WARN 6104 --- [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-03T14:09:06.576+08:00 WARN 6104 --- [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-03T14:09:06.576+08:00 WARN 6104 --- [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-03T14:09:06.576+08:00 WARN 6104 --- [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-03T14:09:06.577+08:00 WARN 6104 --- [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-03T14:09:06.577+08:00 WARN 6104 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration.
-2026-09-03T14:09:07.731+08:00 INFO 6104 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
-2026-09-03T14:09:07.755+08:00 INFO 6104 --- [crm-app] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
-2026-09-03T14:09:07.755+08:00 INFO 6104 --- [crm-app] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.31]
-2026-09-03T14:09:07.841+08:00 INFO 6104 --- [crm-app] [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
-2026-09-03T14:09:07.842+08:00 INFO 6104 --- [crm-app] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3979 ms
-2026-09-03T14:09:08.519+08:00 INFO 6104 --- [crm-app] [main] com.crm.auth.config.PermissionConfig : Ȩܿرɨɣ0
-2026-09-03T14:09:08.737+08:00 INFO 6104 --- [crm-app] [main] com.crm.base.config.CustomIdGenerator : ѩIDʼɣworkerId=0, datacenterId=0
-2026-09-03T14:09:09.586+08:00 INFO 6104 --- [crm-app] [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
-2026-09-03T14:09:09.689+08:00 INFO 6104 --- [crm-app] [main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.5.3.Final
-2026-09-03T14:09:09.747+08:00 INFO 6104 --- [crm-app] [main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled
-2026-09-03T14:09:10.227+08:00 INFO 6104 --- [crm-app] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer
-2026-09-03T14:09:10.281+08:00 INFO 6104 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
-2026-09-03T14:09:11.020+08:00 INFO 6104 --- [crm-app] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@13f358f8
-2026-09-03T14:09:11.023+08:00 INFO 6104 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
-2026-09-03T14:09:11.191+08:00 WARN 6104 --- [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-03T14:09:13.480+08:00 INFO 6104 --- [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-03T14:09:16.694+08:00 WARN 6104 --- [crm-app] [main] o.h.t.s.i.ExceptionHandlerLoggedImpl : GenerationTarget encountered exception accepting command : Error executing DDL "create table customer_oplog (id bigint comment '' not null, create_time datetime(6) comment 'ʱ', creator_id varchar(50) comment 'ûid', deleted tinyint not null default 0 comment 'ɾλ' comment 'ɾλ', update_time datetime(6) comment 'ʱ', updater_id varchar(50) comment 'ûid', action varchar(50) not null comment '' comment 'ͣCREATE/UPDATE/FOLLOW/ARCHIVE/RESTORE/TRANSFER/CLAIM/POOL/STAGE_CHANGE', customer_id bigint not null comment 'ͻID' comment 'ͻIDcustomer.id', detail varchar(1000) comment '' comment ' {ֶ} {} Ϊ {}', operator_dept_name varchar(100) comment '˲' comment '˲գ', operator_id bigint comment 'ûID' comment 'ûIDգϵͳΪ NULL', operator_name varchar(50) not null comment '' comment 'գϵͳ='ϵͳ'', primary key (id)) engine=InnoDB" via JDBC [You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ϵͳ'', primary key (id)) engine=InnoDB' at line 1]
-
-org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create table customer_oplog (id bigint comment '' not null, create_time datetime(6) comment 'ʱ', creator_id varchar(50) comment 'ûid', deleted tinyint not null default 0 comment 'ɾλ' comment 'ɾλ', update_time datetime(6) comment 'ʱ', updater_id varchar(50) comment 'ûid', action varchar(50) not null comment '' comment 'ͣCREATE/UPDATE/FOLLOW/ARCHIVE/RESTORE/TRANSFER/CLAIM/POOL/STAGE_CHANGE', customer_id bigint not null comment 'ͻID' comment 'ͻIDcustomer.id', detail varchar(1000) comment '' comment ' {ֶ} {} Ϊ {}', operator_dept_name varchar(100) comment '˲' comment '˲գ', operator_id bigint comment 'ûID' comment 'ûIDգϵͳΪ NULL', operator_name varchar(50) not null comment '' comment 'գϵͳ='ϵͳ'', primary key (id)) engine=InnoDB" via JDBC [You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ϵͳ'', primary key (id)) engine=InnoDB' at line 1]
- at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:94) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigrator.java:583) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigrator.java:523) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.createTable(AbstractSchemaMigrator.java:323) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.tool.schema.internal.GroupedSchemaMigratorImpl.performTablesMigration(GroupedSchemaMigratorImpl.java:80) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:240) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:119) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:280) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.lambda$process$5(SchemaManagementToolCoordinator.java:144) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at java.base/java.util.HashMap.forEach(HashMap.java:1421) ~[na:na]
- at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:141) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.boot.internal.SessionFactoryObserverForSchemaExport.sessionFactoryCreated(SessionFactoryObserverForSchemaExport.java:37) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.internal.SessionFactoryObserverChain.sessionFactoryCreated(SessionFactoryObserverChain.java:35) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:322) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:457) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1506) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75) ~[spring-orm-6.1.14.jar!/:6.1.14]
- at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:390) ~[spring-orm-6.1.14.jar!/:6.1.14]
- at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-6.1.14.jar!/:6.1.14]
- at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-6.1.14.jar!/:6.1.14]
- at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:366) ~[spring-orm-6.1.14.jar!/:6.1.14]
- at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) ~[spring-beans-6.1.14.jar!/:6.1.14]
- at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) ~[spring-beans-6.1.14.jar!/:6.1.14]
- at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) ~[spring-beans-6.1.14.jar!/:6.1.14]
- at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.14.jar!/:6.1.14]
- at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) ~[spring-beans-6.1.14.jar!/:6.1.14]
- at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.14.jar!/:6.1.14]
- at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) ~[spring-beans-6.1.14.jar!/:6.1.14]
- at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) ~[spring-beans-6.1.14.jar!/:6.1.14]
- at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:954) ~[spring-context-6.1.14.jar!/:6.1.14]
- at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) ~[spring-context-6.1.14.jar!/:6.1.14]
- at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.3.5.jar!/:3.3.5]
- at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.3.5.jar!/:3.3.5]
- at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.3.5.jar!/:3.3.5]
- at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) ~[spring-boot-3.3.5.jar!/:3.3.5]
- at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) ~[spring-boot-3.3.5.jar!/:3.3.5]
- at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) ~[spring-boot-3.3.5.jar!/:3.3.5]
- at com.crm.app.CrmAppApplication.main(CrmAppApplication.java:19) ~[!/: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.boot.loader.launch.Launcher.launch(Launcher.java:102) ~[crm-app-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT]
- at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:64) ~[crm-app-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT]
- at org.springframework.boot.loader.launch.JarLauncher.main(JarLauncher.java:40) ~[crm-app-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT]
-Caused by: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ϵͳ'', primary key (id)) engine=InnoDB' at line 1
- at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:121) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
- at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
- at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:770) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
- at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:653) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
- at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:94) ~[HikariCP-5.1.0.jar!/:na]
- at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java) ~[HikariCP-5.1.0.jar!/:na]
- at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:80) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- ... 44 common frames omitted
-
-2026-09-03T14:09:30.283+08:00 WARN 6104 --- [crm-app] [main] o.h.t.s.i.ExceptionHandlerLoggedImpl : GenerationTarget encountered exception accepting command : Error executing DDL "create index idx_oplog_customer on customer_oplog (customer_id, create_time)" via JDBC [Table 'crm.customer_oplog' doesn't exist]
-
-org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create index idx_oplog_customer on customer_oplog (customer_id, create_time)" via JDBC [Table 'crm.customer_oplog' doesn't exist]
- at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:94) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlString(AbstractSchemaMigrator.java:583) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applySqlStrings(AbstractSchemaMigrator.java:523) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.applyIndexes(AbstractSchemaMigrator.java:368) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.tool.schema.internal.GroupedSchemaMigratorImpl.performTablesMigration(GroupedSchemaMigratorImpl.java:96) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.performMigration(AbstractSchemaMigrator.java:240) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.tool.schema.internal.AbstractSchemaMigrator.doMigration(AbstractSchemaMigrator.java:119) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.performDatabaseAction(SchemaManagementToolCoordinator.java:280) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.lambda$process$5(SchemaManagementToolCoordinator.java:144) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at java.base/java.util.HashMap.forEach(HashMap.java:1421) ~[na:na]
- at org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator.process(SchemaManagementToolCoordinator.java:141) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.boot.internal.SessionFactoryObserverForSchemaExport.sessionFactoryCreated(SessionFactoryObserverForSchemaExport.java:37) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.internal.SessionFactoryObserverChain.sessionFactoryCreated(SessionFactoryObserverChain.java:35) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.internal.SessionFactoryImpl.(SessionFactoryImpl.java:322) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:457) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1506) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75) ~[spring-orm-6.1.14.jar!/:6.1.14]
- at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:390) ~[spring-orm-6.1.14.jar!/:6.1.14]
- at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-6.1.14.jar!/:6.1.14]
- at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-6.1.14.jar!/:6.1.14]
- at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:366) ~[spring-orm-6.1.14.jar!/:6.1.14]
- at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1853) ~[spring-beans-6.1.14.jar!/:6.1.14]
- at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1802) ~[spring-beans-6.1.14.jar!/:6.1.14]
- at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:600) ~[spring-beans-6.1.14.jar!/:6.1.14]
- at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.14.jar!/:6.1.14]
- at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) ~[spring-beans-6.1.14.jar!/:6.1.14]
- at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.14.jar!/:6.1.14]
- at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) ~[spring-beans-6.1.14.jar!/:6.1.14]
- at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:205) ~[spring-beans-6.1.14.jar!/:6.1.14]
- at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:954) ~[spring-context-6.1.14.jar!/:6.1.14]
- at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) ~[spring-context-6.1.14.jar!/:6.1.14]
- at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.3.5.jar!/:3.3.5]
- at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) ~[spring-boot-3.3.5.jar!/:3.3.5]
- at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) ~[spring-boot-3.3.5.jar!/:3.3.5]
- at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) ~[spring-boot-3.3.5.jar!/:3.3.5]
- at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363) ~[spring-boot-3.3.5.jar!/:3.3.5]
- at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352) ~[spring-boot-3.3.5.jar!/:3.3.5]
- at com.crm.app.CrmAppApplication.main(CrmAppApplication.java:19) ~[!/: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.boot.loader.launch.Launcher.launch(Launcher.java:102) ~[crm-app-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT]
- at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:64) ~[crm-app-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT]
- at org.springframework.boot.loader.launch.JarLauncher.main(JarLauncher.java:40) ~[crm-app-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT]
-Caused by: java.sql.SQLSyntaxErrorException: Table 'crm.customer_oplog' doesn't exist
- at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:121) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
- at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
- at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:770) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
- at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:653) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
- at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:94) ~[HikariCP-5.1.0.jar!/:na]
- at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java) ~[HikariCP-5.1.0.jar!/:na]
- at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:80) ~[hibernate-core-6.5.3.Final.jar!/:6.5.3.Final]
- ... 44 common frames omitted
-
-2026-09-03T14:09:31.712+08:00 INFO 6104 --- [crm-app] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
-2026-09-03T14:09:32.150+08:00 WARN 6104 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================
-2026-09-03T14:09:32.150+08:00 WARN 6104 --- [crm-app] [main] c.c.a.controller.DebugTokenController : token ӿ /api/auth/debug/token ãverify profile
-2026-09-03T14:09:32.151+08:00 WARN 6104 --- [crm-app] [main] c.c.a.controller.DebugTokenController : Ͻκ֪ userId ˿ðû
-2026-09-03T14:09:32.151+08:00 WARN 6104 --- [crm-app] [main] c.c.a.controller.DebugTokenController : μ docs/adr/0014-verify-profile-debug-token-endpoint.md
-2026-09-03T14:09:32.151+08:00 WARN 6104 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================
-2026-09-03T14:09:34.215+08:00 INFO 6104 --- [crm-app] [main] c.c.c.p.i.NgramNameSimilarityPortImpl : CustomerNameSimilarityPort һʵ־ԤɸģʽFULLTEXT ngram
-2026-09-03T14:09:34.375+08:00 INFO 6104 --- [crm-app] [main] c.c.c.p.impl.StubCompanyLookupPortImpl : CompanyLookupPort һ stub װ䣨δ룬̺ѡؿգ
-2026-09-03T14:09:34.595+08:00 INFO 6104 --- [crm-app] [main] c.c.c.p.i.NoopProjectOwnerSyncPortImpl : ProjectOwnerSyncPort no-op Ĭʵװ䣨A5 Ŀģδowner ͬ
-2026-09-03T14:09:34.673+08:00 INFO 6104 --- [crm-app] [main] c.c.p.i.NoopOpportunityOwnerSyncPortImpl : OpportunityOwnerSyncPort no-op Ĭʵװ䣨Ʊ 11 ̻Դ滻
-2026-09-03T14:09:34.864+08:00 WARN 6104 --- [crm-app] [main] .s.s.UserDetailsServiceAutoConfiguration :
-
-Using generated security password: 56938df4-df08-406c-9039-ad43b49523ef
-
-This generated password is for development use only. Your security configuration must be updated before running your application in production.
-
-2026-09-03T14:09:34.891+08:00 INFO 6104 --- [crm-app] [main] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager
-2026-09-03T14:09:36.183+08:00 INFO 6104 --- [crm-app] [main] c.c.a.c.DataScopeModuleStartupValidator : ȨģУͨ0 ܿر4 עģ
-2026-09-03T14:09:36.229+08:00 INFO 6104 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
-2026-09-03T14:09:36.271+08:00 INFO 6104 --- [crm-app] [main] com.crm.app.CrmAppApplication : Started CrmAppApplication in 33.352 seconds (process running for 34.152)
-2026-09-03T14:09:36.276+08:00 INFO 6104 --- [crm-app] [main] com.crm.auth.config.DataInitializer : ִȨݳʼ...
-2026-09-03T14:09:37.009+08:00 INFO 6104 --- [crm-app] [main] com.crm.auth.config.DataInitializer : Ȩݳʼ
-2026-09-03T14:09:37.009+08:00 INFO 6104 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ִֵȨӻ...
-2026-09-03T14:09:37.357+08:00 INFO 6104 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ֵȨӻɣ10 Ȩ
-2026-09-03T14:09:37.357+08:00 INFO 6104 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : ִȨӻ飨˵...
-2026-09-03T14:09:37.443+08:00 INFO 6104 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : Ȩӻɣ˵0 button
-2026-09-03T14:09:37.443+08:00 INFO 6104 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : ִȨӻ飨˵...
-2026-09-03T14:09:37.812+08:00 INFO 6104 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : Ȩӻɣ4 ˵0 button
-2026-09-03T14:09:37.812+08:00 INFO 6104 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ִȫӵ...
-2026-09-03T14:09:39.226+08:00 INFO 6104 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ӵɣ 3432 Уʡ 34 / 342 / 3056 3432 У 0
-2026-09-03T14:09:39.227+08:00 INFO 6104 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ִ̻Ȩӻ飨˵...
-2026-09-03T14:09:39.322+08:00 INFO 6104 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ̻Ȩӻɣ˵0 button
-2026-09-03T14:09:39.322+08:00 INFO 6104 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ִ̻ģȨӻ飨˵...
-2026-09-03T14:09:39.406+08:00 INFO 6104 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ̻ģȨӻɣ˵0 button
-2026-09-03T14:09:39.407+08:00 INFO 6104 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ִпͻѹȨӻ飨˵...
-2026-09-03T14:09:39.450+08:00 INFO 6104 --- [crm-app] [main] c.c.a.service.impl.PermissionSeederImpl : Ŀ¼ڵ㣺ͻ (type=1)
-2026-09-03T14:09:39.481+08:00 INFO 6104 --- [crm-app] [main] c.c.a.service.impl.PermissionSeederImpl : ˵ڵ㣺ѹ (type=2)
-2026-09-03T14:09:39.577+08:00 INFO 6104 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ͻѹȨӻɣ˵0 button
-2026-09-03T14:09:39.577+08:00 INFO 6104 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ִзϵͳֶοӻ...
-2026-09-03T14:09:39.592+08:00 INFO 6104 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ϵͳֶοӻɣִ 16 0
-2026-09-03T14:09:39.607+08:00 INFO 6104 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ģѴڣcode=OPP_SCHEME_TPL_01ͣãӻ
-2026-09-03T14:09:39.607+08:00 INFO 6104 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ִзģȨӻ飨˵...
-2026-09-03T14:09:39.692+08:00 INFO 6104 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ģȨӻɣ˵0 button
-2026-09-03T14:09:39.708+08:00 INFO 6104 --- [crm-app] [main] c.c.r.config.StageTemplateInitializer : ĬϽģѴڣcode=OPP_STAGE_TPL_01ͣãӻ
-2026-09-03T14:09:39.747+08:00 INFO 6104 --- [crm-app] [main] c.c.r.c.CustomerReminderRuleInitializer : ֲͻѹid=1ȫã״ 30 / μ 7 죩
-2026-09-03T14:09:40.099+08:00 WARN 6104 --- [crm-app] [main] com.crm.file.config.MinioConfig : MinIO bucket [crm] ʼʧܣļܿܲãThe Access Key Id you provided does not exist in our records.
-2026-09-03T14:09:40.100+08:00 INFO 6104 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ִֵݵȳʼ...
-2026-09-03T14:09:48.587+08:00 INFO 6104 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ֵ飺ԭ (transfer_reason)
-2026-09-03T14:09:48.646+08:00 INFO 6104 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ֵԱְ (transfer_reason/resign)
-2026-09-03T14:09:48.702+08:00 INFO 6104 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ֵλ (transfer_reason/transfer_post)
-2026-09-03T14:09:48.759+08:00 INFO 6104 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ֵ (transfer_reason/region_adjust)
-2026-09-03T14:09:48.770+08:00 INFO 6104 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ֵݵȳʼɣ24
-2026-09-03T14:09:49.324+08:00 INFO 6104 --- [crm-app] [main] c.c.c.c.CustomerFulltextIndexInitializer : customer FULLTEXT idx_name_fulltext ɣngram, token_size=2
-2026-09-03T14:11:28.579+08:00 INFO 6104 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
-2026-09-03T14:11:28.592+08:00 INFO 6104 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 12 ms
-2026-09-03T14:11:46.962+08:00 WARN 6104 --- [crm-app] [http-nio-8080-exec-4] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
-2026-09-03T14:13:17.005+08:00 WARN 6104 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=66001, msg=oppId
-2026-09-03T14:14:09.831+08:00 WARN 6104 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=66001, msg=oppId
-2026-09-03T14:14:59.866+08:00 WARN 6104 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͻƲΪ
-2026-09-03T14:15:32.738+08:00 WARN 6104 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͻƲΪ
-2026-09-03T14:16:09.170+08:00 WARN 6104 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͻƲΪ
-2026-09-03T14:17:25.791+08:00 ERROR 6104 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ȫ쳣
-
-org.springframework.jdbc.BadSqlGrammarException:
-### Error updating database. Cause: java.sql.SQLSyntaxErrorException: Table 'crm.customer_oplog' doesn't exist
-### The error may exist in com/crm/customer/mapper/CustomerOplogMapper.java (best guess)
-### The error may involve com.crm.customer.mapper.CustomerOplogMapper.insert-Inline
-### The error occurred while setting parameters
-### SQL: INSERT INTO customer_oplog ( id, customer_id, action, detail, operator_id, operator_name, operator_dept_name, creator_id, create_time, updater_id, update_time, deleted ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )
-### Cause: java.sql.SQLSyntaxErrorException: Table 'crm.customer_oplog' doesn't exist
-; bad SQL grammar []
- at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:246) ~[spring-jdbc-6.1.14.jar!/:6.1.14]
- at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:107) ~[spring-jdbc-6.1.14.jar!/:6.1.14]
- at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92) ~[mybatis-spring-3.0.3.jar!/:3.0.3]
- at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:439) ~[mybatis-spring-3.0.3.jar!/:3.0.3]
- at jdk.proxy2/jdk.proxy2.$Proxy106.insert(Unknown Source) ~[na:na]
- at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272) ~[mybatis-spring-3.0.3.jar!/:3.0.3]
- at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59) ~[mybatis-plus-core-3.5.7.jar!/:3.5.7]
- at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152) ~[mybatis-plus-core-3.5.7.jar!/:3.5.7]
- at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) ~[mybatis-plus-core-3.5.7.jar!/:3.5.7]
- at jdk.proxy2/jdk.proxy2.$Proxy227.insert(Unknown Source) ~[na:na]
- at com.crm.customer.service.CustomerOplogWriter.insert(CustomerOplogWriter.java:56) ~[crm-customer-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT]
- at com.crm.customer.service.CustomerOplogWriter.write(CustomerOplogWriter.java:36) ~[crm-customer-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT]
- at com.crm.customer.service.impl.CustomerServiceImpl.create(CustomerServiceImpl.java:118) ~[crm-customer-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT]
- at com.crm.customer.service.impl.CustomerServiceImpl.quickCreate(CustomerServiceImpl.java:224) ~[crm-customer-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.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.customer.service.impl.CustomerServiceImpl$$SpringCGLIB$$0.quickCreate() ~[crm-customer-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT]
- at com.crm.customer.controller.CustomerController.quickCreate(CustomerController.java:85) ~[crm-customer-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.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]
->>>>>>> Stashed changes
- 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]
-<<<<<<< Updated upstream
- at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na]
- Suppressed: org.springframework.web.context.request.async.AsyncRequestNotUsableException: Response not usable after response errors.
- at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleHttpServletResponse.obtainLockOrRaiseException(StandardServletAsyncWebRequest.java:335) ~[spring-web-6.1.14.jar!/:6.1.14]
- at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.write(StandardServletAsyncWebRequest.java:396) ~[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.close(UTF8JsonGenerator.java:1234) ~[jackson-core-2.17.2.jar!/:2.17.2]
- at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:452) ~[spring-web-6.1.14.jar!/:6.1.14]
- ... 102 common frames omitted
-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]
- ... 122 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]
- ... 129 common frames omitted
-
-2026-09-04T00:05:00.009+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-04T00:05:00.009129500
-2026-09-04T00:05:00.090+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 1 êʧЧ 0
-2026-09-04T00:05:30.012+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-04T00:05:30.012018100
-2026-09-04T00:05:30.091+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 1 êʧЧ 0
-2026-09-04T00:05:47.967+08:00 ERROR 24328 --- [crm-app] [http-nio-8080-exec-9] 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._writeStringSegment2(UTF8JsonGenerator.java:1522) ~[jackson-core-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.core.json.UTF8JsonGenerator._writeStringSegment(UTF8JsonGenerator.java:1469) ~[jackson-core-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.core.json.UTF8JsonGenerator.writeString(UTF8JsonGenerator.java:531) ~[jackson-core-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.std.StringSerializer.serialize(StringSerializer.java:41) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:732) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:183) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:119) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:79) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:18) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:732) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:183) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:502) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:341) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1574) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1061) ~[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]
- Suppressed: org.springframework.web.context.request.async.AsyncRequestNotUsableException: Response not usable after response errors.
- at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleHttpServletResponse.obtainLockOrRaiseException(StandardServletAsyncWebRequest.java:335) ~[spring-web-6.1.14.jar!/:6.1.14]
- at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.write(StandardServletAsyncWebRequest.java:396) ~[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.close(UTF8JsonGenerator.java:1234) ~[jackson-core-2.17.2.jar!/:2.17.2]
- at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:452) ~[spring-web-6.1.14.jar!/:6.1.14]
- ... 102 common frames omitted
-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]
- ... 122 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]
- ... 129 common frames omitted
-
-2026-09-04T00:06:00.008+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-04T00:06:00.008201700
-2026-09-04T00:06:00.097+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 1 êʧЧ 0
-2026-09-04T00:06:30.005+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-04T00:06:30.005825800
-2026-09-04T00:06:30.084+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 1 êʧЧ 0
-2026-09-04T00:07:00.000+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-04T00:07:00.000813
-2026-09-04T00:07:00.083+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 1 êʧЧ 0
-2026-09-04T00:07:30.004+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-04T00:07:30.004754
-2026-09-04T00:07:30.085+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 1 êʧЧ 0
-2026-09-04T00:08:00.003+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-04T00:08:00.003691400
-2026-09-04T00:08:00.084+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 1 êʧЧ 0
-2026-09-04T00:08:30.002+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-04T00:08:30.002628800
-2026-09-04T00:08:30.085+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 1 êʧЧ 0
-2026-09-04T00:09:00.003+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-04T00:09:00.003247700
-2026-09-04T00:09:00.087+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 1 êʧЧ 0
-2026-09-04T00:09:30.014+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-04T00:09:30.014408900
-2026-09-04T00:09:30.094+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 1 êʧЧ 0
-2026-09-04T00:10:00.014+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-04T00:10:00.014952200
-2026-09-04T00:10:00.096+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 1 êʧЧ 0
-2026-09-04T00:10:21.635+08:00 WARN 24328 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
-2026-09-04T00:10:21.663+08:00 WARN 24328 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=744842318024015872 ǩ token
-2026-09-04T00:10:24.651+08:00 WARN 24328 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67011, msg=ԭ
-2026-09-04T00:10:24.794+08:00 WARN 24328 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67011, msg=ܼڿɽӷΧ
-2026-09-04T00:10:25.562+08:00 WARN 24328 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67010, msg=δɵĽӵظ
-2026-09-04T00:10:30.000+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-04T00:10:30.000808200
-2026-09-04T00:10:30.074+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 1 êʧЧ 0
-2026-09-04T00:11:00.012+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-04T00:11:00.012406300
-2026-09-04T00:11:00.032+08:00 WARN 24328 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@1424c5ea (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:11:00.041+08:00 WARN 24328 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@1a720a2a (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:11:00.053+08:00 WARN 24328 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@28cb971b (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:11:00.072+08:00 WARN 24328 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@5c978a40 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:11:00.082+08:00 WARN 24328 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@446c5ab4 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:11:00.094+08:00 WARN 24328 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@4ec53b49 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:11:00.106+08:00 WARN 24328 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@3a420ec5 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:11:00.115+08:00 WARN 24328 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@5ae75647 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:11:00.193+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 1 êʧЧ 0
-2026-09-04T00:11:30.004+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ʼnow=2026-09-04T00:11:30.004591800
-2026-09-04T00:11:30.052+08:00 INFO 24328 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [ͻJob] ɣ 0 êʧЧ 0
-2026-09-04T00:11:31.142+08:00 WARN 24328 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67012, msg=ڡͣûְ
-2026-09-04T00:11:34.547+08:00 WARN 24328 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67013, msg=뷽ʽǷ//£
-2026-09-04T00:11:34.860+08:00 WARN 24328 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67013, msg=ģ汾ƥ䣬µģ壨 2 бͷ
-2026-09-04T00:11:35.035+08:00 WARN 24328 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67013, msg=ļ
-2026-09-04T00:11:35.439+08:00 ERROR 24328 --- [crm-app] [task-1] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=750870573822771200, thumbKey=thumbnails/750870573822771200.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-04T00:11:35.684+08:00 ERROR 24328 --- [crm-app] [task-2] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=750870575089451008, thumbKey=thumbnails/750870575089451008.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-04T00:11:36.049+08:00 ERROR 24328 --- [crm-app] [task-3] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=750870576624566272, thumbKey=thumbnails/750870576624566272.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-04T00:11:36.294+08:00 WARN 24328 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67014, msg=ȷϣظύ
-2026-09-04T00:11:36.488+08:00 WARN 24328 --- [crm-app] [task-4] c.c.c.task.CustomerImportExecutor : ͻ뵥ִ쳣taskId=750870574112178176, row=1
-
-org.springframework.dao.DataIntegrityViolationException:
-### Error updating database. Cause: java.sql.SQLException: Field 'is_biz_negotiated' doesn't have a default value
-### The error may exist in com/crm/customer/mapper/CustomerMapper.java (best guess)
-### The error may involve com.crm.customer.mapper.CustomerMapper.insert-Inline
-### The error occurred while setting parameters
-### SQL: INSERT INTO customer ( id, customer_no, customer_name, customer_type, province_code, city_code, industry_code, customer_star_level, owner_user_id, owner_user_name_snapshot, owner_dept_id, owner_dept_name_snapshot, customer_stage, archive_status, last_valid_follow_time, is_child, remark, version, creator_id, create_time, updater_id, update_time, deleted ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )
-### Cause: java.sql.SQLException: Field 'is_biz_negotiated' doesn't have a default value
-; Field 'is_biz_negotiated' doesn't have a default value
- at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:258) ~[spring-jdbc-6.1.14.jar!/:6.1.14]
- at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:107) ~[spring-jdbc-6.1.14.jar!/:6.1.14]
- at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92) ~[mybatis-spring-3.0.3.jar!/:3.0.3]
- at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:439) ~[mybatis-spring-3.0.3.jar!/:3.0.3]
- at jdk.proxy2/jdk.proxy2.$Proxy106.insert(Unknown Source) ~[na:na]
- at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272) ~[mybatis-spring-3.0.3.jar!/:3.0.3]
- at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59) ~[mybatis-plus-core-3.5.7.jar!/:3.5.7]
- at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152) ~[mybatis-plus-core-3.5.7.jar!/:3.5.7]
- at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) ~[mybatis-plus-core-3.5.7.jar!/:3.5.7]
- at jdk.proxy2/jdk.proxy2.$Proxy228.insert(Unknown Source) ~[na:na]
- at com.crm.customer.task.CustomerImportExecutor.createCustomer(CustomerImportExecutor.java:243) ~[crm-customer-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT]
- at com.crm.customer.task.CustomerImportExecutor.doImport(CustomerImportExecutor.java:117) ~[crm-customer-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT]
- at com.crm.customer.task.CustomerImportExecutor.executeImport(CustomerImportExecutor.java:74) ~[crm-customer-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.sql.SQLException: Field 'is_biz_negotiated' doesn't have a default value
- at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
- at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
- at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:912) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
- at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
- at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44) ~[HikariCP-5.1.0.jar!/:na]
- at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java) ~[HikariCP-5.1.0.jar!/:na]
- at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48) ~[mybatis-3.5.16.jar!/:3.5.16]
- at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.internal.reflect.GeneratedMethodAccessor72.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:569) ~[na:na]
- at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.proxy2/jdk.proxy2.$Proxy256.update(Unknown Source) ~[na:na]
- at jdk.internal.reflect.GeneratedMethodAccessor72.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:569) ~[na:na]
- at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.proxy2/jdk.proxy2.$Proxy256.update(Unknown Source) ~[na:na]
- at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) ~[mybatis-3.5.16.jar!/:3.5.16]
- at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) ~[mybatis-3.5.16.jar!/:3.5.16]
- at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.internal.reflect.GeneratedMethodAccessor88.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:569) ~[na:na]
- at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:61) ~[mybatis-3.5.16.jar!/:3.5.16]
- at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) ~[mybatis-plus-extension-3.5.7.jar!/:3.5.7]
- at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.proxy2/jdk.proxy2.$Proxy255.update(Unknown Source) ~[na:na]
- at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) ~[mybatis-3.5.16.jar!/:3.5.16]
- at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.internal.reflect.GeneratedMethodAccessor184.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:569) ~[na:na]
- at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) ~[mybatis-spring-3.0.3.jar!/:3.0.3]
- ... 22 common frames omitted
-
-2026-09-04T00:11:36.517+08:00 ERROR 24328 --- [crm-app] [task-4] c.c.c.task.CustomerImportExecutor : ͻִʧܣtaskId=750870574112178176
-
-org.springframework.dao.DataIntegrityViolationException:
-### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'fail_reason' at row 1
-### The error may exist in com/crm/customer/mapper/CustomerImportFailMapper.java (best guess)
-### The error may involve com.crm.customer.mapper.CustomerImportFailMapper.insert-Inline
-### The error occurred while setting parameters
-### SQL: INSERT INTO customer_import_fail ( id, task_id, sheet_name, row_num, customer_identity, fail_reason, creator_id, create_time, updater_id, update_time, deleted ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )
-### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'fail_reason' at row 1
-; Data truncation: Data too long for column 'fail_reason' at row 1
- at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:118) ~[spring-jdbc-6.1.14.jar!/:6.1.14]
- at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:107) ~[spring-jdbc-6.1.14.jar!/:6.1.14]
- at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:116) ~[spring-jdbc-6.1.14.jar!/:6.1.14]
- at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:116) ~[spring-jdbc-6.1.14.jar!/:6.1.14]
- at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:92) ~[mybatis-spring-3.0.3.jar!/:3.0.3]
- at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:439) ~[mybatis-spring-3.0.3.jar!/:3.0.3]
- at jdk.proxy2/jdk.proxy2.$Proxy106.insert(Unknown Source) ~[na:na]
- at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:272) ~[mybatis-spring-3.0.3.jar!/:3.0.3]
- at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59) ~[mybatis-plus-core-3.5.7.jar!/:3.5.7]
- at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152) ~[mybatis-plus-core-3.5.7.jar!/:3.5.7]
- at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) ~[mybatis-plus-core-3.5.7.jar!/:3.5.7]
- at jdk.proxy2/jdk.proxy2.$Proxy236.insert(Unknown Source) ~[na:na]
- at com.crm.customer.task.CustomerImportExecutor.insertFail(CustomerImportExecutor.java:297) ~[crm-customer-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT]
- at com.crm.customer.task.CustomerImportExecutor.doImport(CustomerImportExecutor.java:147) ~[crm-customer-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT]
- at com.crm.customer.task.CustomerImportExecutor.executeImport(CustomerImportExecutor.java:74) ~[crm-customer-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: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'fail_reason' at row 1
- at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:104) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
- at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:912) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
- at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
- at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44) ~[HikariCP-5.1.0.jar!/:na]
- at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java) ~[HikariCP-5.1.0.jar!/:na]
- at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48) ~[mybatis-3.5.16.jar!/:3.5.16]
- at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.internal.reflect.GeneratedMethodAccessor72.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:569) ~[na:na]
- at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.proxy2/jdk.proxy2.$Proxy256.update(Unknown Source) ~[na:na]
- at jdk.internal.reflect.GeneratedMethodAccessor72.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:569) ~[na:na]
- at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.proxy2/jdk.proxy2.$Proxy256.update(Unknown Source) ~[na:na]
- at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) ~[mybatis-3.5.16.jar!/:3.5.16]
- at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) ~[mybatis-3.5.16.jar!/:3.5.16]
- at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.internal.reflect.GeneratedMethodAccessor88.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:569) ~[na:na]
- at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:61) ~[mybatis-3.5.16.jar!/:3.5.16]
- at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) ~[mybatis-plus-extension-3.5.7.jar!/:3.5.7]
- at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.proxy2/jdk.proxy2.$Proxy255.update(Unknown Source) ~[na:na]
- at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) ~[mybatis-3.5.16.jar!/:3.5.16]
- at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.internal.reflect.GeneratedMethodAccessor184.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:569) ~[na:na]
- at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) ~[mybatis-spring-3.0.3.jar!/:3.0.3]
- ... 22 common frames omitted
-
-2026-09-04T00:11:38.261+08:00 INFO 24328 --- [crm-app] [http-nio-8080-exec-5] .c.r.s.i.CustomerReminderRuleServiceImpl : [ͻѹ] ȫDZ棺operator=739564171091247104, masterEnabled=1, firstTrigger=1/1, secondInterval=1/1
-2026-09-04T00:11:38.374+08:00 WARN 24328 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=64023, msg=״δѼΪ
-2026-09-04T00:11:38.478+08:00 WARN 24328 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=64023, msg=״δѼΪ
-2026-09-04T00:11:38.725+08:00 INFO 24328 --- [crm-app] [http-nio-8080-exec-2] .c.r.s.i.CustomerReminderRuleServiceImpl : [ͻѹ] ȫDZ棺operator=739564171091247104, masterEnabled=0, firstTrigger=0/2, secondInterval=0/2
-2026-09-04T00:11:38.873+08:00 INFO 24328 --- [crm-app] [http-nio-8080-exec-9] .c.r.s.i.CustomerReminderRuleServiceImpl : [ͻѹ] ȫDZ棺operator=739564171091247104, masterEnabled=1, firstTrigger=1/1, secondInterval=1/1
-2026-09-04T00:11:42.949+08:00 INFO 27136 --- [crm-app] [main] com.crm.app.CrmAppApplication : Starting CrmAppApplication v1.0.0-SNAPSHOT using Java 21.0.7 with PID 27136 (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-04T00:11:42.952+08:00 INFO 27136 --- [crm-app] [main] com.crm.app.CrmAppApplication : The following 1 profile is active: "verify"
-2026-09-04T00:11:44.463+08:00 INFO 27136 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
-2026-09-04T00:11:44.465+08:00 INFO 27136 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
-2026-09-04T00:11:44.502+08:00 INFO 27136 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 28 ms. Found 0 JPA repository interfaces.
-2026-09-04T00:11:44.523+08:00 INFO 27136 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
-2026-09-04T00:11:44.524+08:00 INFO 27136 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
-2026-09-04T00:11:44.536+08:00 INFO 27136 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 3 ms. Found 0 Redis repository interfaces.
-2026-09-04T00:11:44.723+08:00 WARN 27136 --- [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-04T00:11:44.723+08:00 WARN 27136 --- [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-04T00:11:44.723+08:00 WARN 27136 --- [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-04T00:11:44.723+08:00 WARN 27136 --- [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-04T00:11:44.723+08:00 WARN 27136 --- [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-04T00:11:44.723+08:00 WARN 27136 --- [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-04T00:11:44.723+08:00 WARN 27136 --- [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-04T00:11:44.723+08:00 WARN 27136 --- [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-04T00:11:44.723+08:00 WARN 27136 --- [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-04T00:11:44.723+08:00 WARN 27136 --- [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-04T00:11:44.724+08:00 WARN 27136 --- [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-04T00:11:44.724+08:00 WARN 27136 --- [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-04T00:11:44.724+08:00 WARN 27136 --- [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-04T00:11:44.724+08:00 WARN 27136 --- [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-04T00:11:44.724+08:00 WARN 27136 --- [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-04T00:11:44.724+08:00 WARN 27136 --- [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-04T00:11:44.724+08:00 WARN 27136 --- [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-04T00:11:44.724+08:00 WARN 27136 --- [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-04T00:11:44.724+08:00 WARN 27136 --- [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-04T00:11:44.724+08:00 WARN 27136 --- [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-04T00:11:44.724+08:00 WARN 27136 --- [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-04T00:11:44.724+08:00 WARN 27136 --- [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-04T00:11:44.724+08:00 WARN 27136 --- [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-04T00:11:44.725+08:00 WARN 27136 --- [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-04T00:11:44.726+08:00 WARN 27136 --- [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-04T00:11:44.726+08:00 WARN 27136 --- [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-04T00:11:44.726+08:00 WARN 27136 --- [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-04T00:11:44.726+08:00 WARN 27136 --- [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-04T00:11:44.726+08:00 WARN 27136 --- [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-04T00:11:44.726+08:00 WARN 27136 --- [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-04T00:11:44.726+08:00 WARN 27136 --- [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-04T00:11:44.726+08:00 WARN 27136 --- [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-04T00:11:44.726+08:00 WARN 27136 --- [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-04T00:11:44.726+08:00 WARN 27136 --- [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-04T00:11:44.726+08:00 WARN 27136 --- [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-04T00:11:44.726+08:00 WARN 27136 --- [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-04T00:11:44.726+08:00 WARN 27136 --- [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-04T00:11:44.726+08:00 WARN 27136 --- [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-04T00:11:44.726+08:00 WARN 27136 --- [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-04T00:11:44.726+08:00 WARN 27136 --- [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-04T00:11:44.727+08:00 WARN 27136 --- [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-04T00:11:44.727+08:00 WARN 27136 --- [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-04T00:11:44.727+08:00 WARN 27136 --- [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-04T00:11:44.727+08:00 WARN 27136 --- [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-04T00:11:44.727+08:00 WARN 27136 --- [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-04T00:11:44.727+08:00 WARN 27136 --- [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-04T00:11:44.727+08:00 WARN 27136 --- [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-04T00:11:44.727+08:00 WARN 27136 --- [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-04T00:11:44.727+08:00 WARN 27136 --- [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-04T00:11:44.727+08:00 WARN 27136 --- [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-04T00:11:44.728+08:00 WARN 27136 --- [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-04T00:11:44.728+08:00 WARN 27136 --- [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-04T00:11:44.728+08:00 WARN 27136 --- [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-04T00:11:44.728+08:00 WARN 27136 --- [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-04T00:11:44.728+08:00 WARN 27136 --- [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-04T00:11:44.728+08:00 WARN 27136 --- [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-04T00:11:44.728+08:00 WARN 27136 --- [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-04T00:11:44.728+08:00 WARN 27136 --- [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-04T00:11:44.728+08:00 WARN 27136 --- [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-04T00:11:44.728+08:00 WARN 27136 --- [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-04T00:11:44.728+08:00 WARN 27136 --- [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-04T00:11:44.728+08:00 WARN 27136 --- [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-04T00:11:44.728+08:00 WARN 27136 --- [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-04T00:11:44.729+08:00 WARN 27136 --- [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-04T00:11:44.729+08:00 WARN 27136 --- [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-04T00:11:44.729+08:00 WARN 27136 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration.
-2026-09-04T00:11:44.733+08:00 WARN 27136 --- [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-04T00:11:44.734+08:00 WARN 27136 --- [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-04T00:11:44.734+08:00 WARN 27136 --- [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-04T00:11:44.734+08:00 WARN 27136 --- [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-04T00:11:44.734+08:00 WARN 27136 --- [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-04T00:11:44.734+08:00 WARN 27136 --- [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-04T00:11:44.734+08:00 WARN 27136 --- [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-04T00:11:44.734+08:00 WARN 27136 --- [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-04T00:11:44.734+08:00 WARN 27136 --- [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-04T00:11:44.734+08:00 WARN 27136 --- [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-04T00:11:44.734+08:00 WARN 27136 --- [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-04T00:11:44.734+08:00 WARN 27136 --- [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-04T00:11:44.735+08:00 WARN 27136 --- [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-04T00:11:44.735+08:00 WARN 27136 --- [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-04T00:11:44.735+08:00 WARN 27136 --- [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-04T00:11:44.735+08:00 WARN 27136 --- [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-04T00:11:44.735+08:00 WARN 27136 --- [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-04T00:11:44.735+08:00 WARN 27136 --- [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-04T00:11:44.735+08:00 WARN 27136 --- [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-04T00:11:44.735+08:00 WARN 27136 --- [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-04T00:11:44.735+08:00 WARN 27136 --- [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-04T00:11:44.735+08:00 WARN 27136 --- [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-04T00:11:44.735+08:00 WARN 27136 --- [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-04T00:11:44.735+08:00 WARN 27136 --- [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-04T00:11:44.735+08:00 WARN 27136 --- [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-04T00:11:44.735+08:00 WARN 27136 --- [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-04T00:11:44.735+08:00 WARN 27136 --- [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-04T00:11:44.735+08:00 WARN 27136 --- [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-04T00:11:44.736+08:00 WARN 27136 --- [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-04T00:11:44.736+08:00 WARN 27136 --- [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-04T00:11:44.736+08:00 WARN 27136 --- [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-04T00:11:44.736+08:00 WARN 27136 --- [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-04T00:11:44.736+08:00 WARN 27136 --- [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-04T00:11:44.736+08:00 WARN 27136 --- [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-04T00:11:44.736+08:00 WARN 27136 --- [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-04T00:11:44.736+08:00 WARN 27136 --- [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-04T00:11:44.736+08:00 WARN 27136 --- [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-04T00:11:44.736+08:00 WARN 27136 --- [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-04T00:11:44.736+08:00 WARN 27136 --- [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-04T00:11:44.736+08:00 WARN 27136 --- [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-04T00:11:44.736+08:00 WARN 27136 --- [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-04T00:11:44.736+08:00 WARN 27136 --- [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-04T00:11:44.736+08:00 WARN 27136 --- [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-04T00:11:44.736+08:00 WARN 27136 --- [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-04T00:11:44.736+08:00 WARN 27136 --- [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-04T00:11:44.737+08:00 WARN 27136 --- [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-04T00:11:44.737+08:00 WARN 27136 --- [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-04T00:11:44.737+08:00 WARN 27136 --- [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-04T00:11:44.737+08:00 WARN 27136 --- [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-04T00:11:44.737+08:00 WARN 27136 --- [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-04T00:11:44.737+08:00 WARN 27136 --- [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-04T00:11:44.737+08:00 WARN 27136 --- [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-04T00:11:44.737+08:00 WARN 27136 --- [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-04T00:11:44.737+08:00 WARN 27136 --- [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-04T00:11:44.737+08:00 WARN 27136 --- [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-04T00:11:44.737+08:00 WARN 27136 --- [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-04T00:11:44.737+08:00 WARN 27136 --- [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-04T00:11:44.737+08:00 WARN 27136 --- [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-04T00:11:44.737+08:00 WARN 27136 --- [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-04T00:11:44.738+08:00 WARN 27136 --- [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-04T00:11:44.738+08:00 WARN 27136 --- [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-04T00:11:44.738+08:00 WARN 27136 --- [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-04T00:11:44.738+08:00 WARN 27136 --- [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-04T00:11:44.738+08:00 WARN 27136 --- [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-04T00:11:44.738+08:00 WARN 27136 --- [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-04T00:11:44.738+08:00 WARN 27136 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration.
-2026-09-04T00:11:45.649+08:00 INFO 27136 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
-2026-09-04T00:11:45.670+08:00 INFO 27136 --- [crm-app] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
-2026-09-04T00:11:45.671+08:00 INFO 27136 --- [crm-app] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.31]
-2026-09-04T00:11:45.716+08:00 INFO 27136 --- [crm-app] [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
-2026-09-04T00:11:45.716+08:00 INFO 27136 --- [crm-app] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2718 ms
-2026-09-04T00:11:46.261+08:00 INFO 27136 --- [crm-app] [main] com.crm.auth.config.PermissionConfig : 数据权限受控表扫描完成:0 张
-2026-09-04T00:11:46.412+08:00 INFO 27136 --- [crm-app] [main] com.crm.base.config.CustomIdGenerator : 雪花ID生成器初始化完成,workerId=0, datacenterId=0
-2026-09-04T00:11:47.041+08:00 INFO 27136 --- [crm-app] [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
-2026-09-04T00:11:47.113+08:00 INFO 27136 --- [crm-app] [main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.5.3.Final
-2026-09-04T00:11:47.155+08:00 INFO 27136 --- [crm-app] [main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled
-2026-09-04T00:11:47.526+08:00 INFO 27136 --- [crm-app] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer
-2026-09-04T00:11:47.568+08:00 INFO 27136 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
-2026-09-04T00:11:48.116+08:00 INFO 27136 --- [crm-app] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@2286dfcd
-2026-09-04T00:11:48.118+08:00 INFO 27136 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
-2026-09-04T00:11:48.206+08:00 WARN 27136 --- [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-04T00:11:50.185+08:00 INFO 27136 --- [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-04T00:12:05.204+08:00 INFO 27136 --- [crm-app] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
-2026-09-04T00:12:05.579+08:00 WARN 27136 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================
-2026-09-04T00:12:05.579+08:00 WARN 27136 --- [crm-app] [main] c.c.a.controller.DebugTokenController : 调试 token 接口 /api/auth/debug/token 已启用(verify profile)
-2026-09-04T00:12:05.579+08:00 WARN 27136 --- [crm-app] [main] c.c.a.controller.DebugTokenController : 严禁用于生产环境!任何知道 userId 的人可冒充该用户。
-2026-09-04T00:12:05.579+08:00 WARN 27136 --- [crm-app] [main] c.c.a.controller.DebugTokenController : 参见 docs/adr/0014-verify-profile-debug-token-endpoint.md
-2026-09-04T00:12:05.579+08:00 WARN 27136 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================
-2026-09-04T00:12:07.356+08:00 INFO 27136 --- [crm-app] [main] c.c.c.p.i.NgramNameSimilarityPortImpl : CustomerNameSimilarityPort 一期实现就绪(预筛模式:FULLTEXT ngram)
-2026-09-04T00:12:07.493+08:00 INFO 27136 --- [crm-app] [main] c.c.c.p.impl.StubCompanyLookupPortImpl : CompanyLookupPort 一期 stub 已装配(企查查未接入,工商候选返回空)
-2026-09-04T00:12:07.711+08:00 INFO 27136 --- [crm-app] [main] c.c.c.p.i.NoopProjectOwnerSyncPortImpl : ProjectOwnerSyncPort no-op 默认实现已装配(A5 项目模块未建,owner 同步跳过)
-2026-09-04T00:12:07.784+08:00 INFO 27136 --- [crm-app] [main] c.c.p.i.NoopOpportunityOwnerSyncPortImpl : OpportunityOwnerSyncPort no-op 默认实现已装配(票 11 接商机真源后替换)
-2026-09-04T00:12:07.940+08:00 WARN 27136 --- [crm-app] [main] .s.s.UserDetailsServiceAutoConfiguration :
-
-Using generated security password: b71fd915-dd11-4063-8729-8d1c79ff246c
-
-This generated password is for development use only. Your security configuration must be updated before running your application in production.
-
-2026-09-04T00:12:07.957+08:00 INFO 27136 --- [crm-app] [main] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager
-2026-09-04T00:12:08.895+08:00 INFO 27136 --- [crm-app] [main] c.c.a.c.DataScopeModuleStartupValidator : 数据权限模块校验通过:0 张受控表,4 个注册模块
-2026-09-04T00:12:08.919+08:00 INFO 27136 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
-2026-09-04T00:12:08.989+08:00 INFO 27136 --- [crm-app] [main] com.crm.app.CrmAppApplication : Started CrmAppApplication in 26.392 seconds (process running for 26.904)
-2026-09-04T00:12:08.994+08:00 INFO 27136 --- [crm-app] [main] com.crm.auth.config.DataInitializer : 执行权限数据初始化检查...
-2026-09-04T00:12:09.299+08:00 INFO 27136 --- [crm-app] [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
-2026-09-04T00:12:09.300+08:00 INFO 27136 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
-2026-09-04T00:12:09.301+08:00 INFO 27136 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
-2026-09-04T00:12:09.738+08:00 INFO 27136 --- [crm-app] [main] com.crm.auth.config.DataInitializer : 权限数据初始化检查完成
-2026-09-04T00:12:09.739+08:00 INFO 27136 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : 执行数据字典权限种子化检查...
-2026-09-04T00:12:10.168+08:00 INFO 27136 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : 数据字典权限种子化检查完成:10 个权限点
-2026-09-04T00:12:10.169+08:00 INFO 27136 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : 执行线索规则权限种子化检查(仅菜单)...
-2026-09-04T00:12:10.274+08:00 INFO 27136 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : 线索规则权限种子化检查完成:仅菜单(0 个 button)
-2026-09-04T00:12:10.274+08:00 INFO 27136 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : 执行线索管理权限种子化检查(仅菜单)...
-2026-09-04T00:12:10.686+08:00 INFO 27136 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : 线索管理权限种子化检查完成:4 个菜单(0 个 button)
-2026-09-04T00:12:10.686+08:00 INFO 27136 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : 执行行政区划全量种子导入检查...
-2026-09-04T00:12:11.923+08:00 INFO 27136 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : 行政区划种子导入完成:对账 3432 行(省 34 / 市 342 / 区 3056),存量 3432 行,新增 0 行
-2026-09-04T00:12:11.924+08:00 INFO 27136 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : 执行商机规则权限种子化检查(仅菜单)...
-2026-09-04T00:12:12.026+08:00 INFO 27136 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : 商机规则权限种子化检查完成:仅菜单(0 个 button)
-2026-09-04T00:12:12.026+08:00 INFO 27136 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : 执行客户提醒规则权限种子化检查(仅菜单)...
-2026-09-04T00:12:12.127+08:00 INFO 27136 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : 客户提醒规则权限种子化检查完成:仅菜单(0 个 button)
-2026-09-04T00:12:12.127+08:00 INFO 27136 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : 执行商机阶段模板权限种子化检查(仅菜单)...
-2026-09-04T00:12:12.228+08:00 INFO 27136 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : 商机阶段模板权限种子化检查完成:仅菜单(0 个 button)
-2026-09-04T00:12:12.228+08:00 INFO 27136 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : 执行方案卡系统字段库种子化检查...
-2026-09-04T00:12:12.242+08:00 INFO 27136 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : 方案卡系统字段库种子化检查完成:现存 16 个,新增 0 个
-2026-09-04T00:12:12.257+08:00 INFO 27136 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : 方案卡兜底模板已存在(code=OPP_SCHEME_TPL_01,含已停用),跳过种子化
-2026-09-04T00:12:12.257+08:00 INFO 27136 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : 执行方案卡模板权限种子化检查(仅菜单)...
-2026-09-04T00:12:12.359+08:00 INFO 27136 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : 方案卡模板权限种子化检查完成:仅菜单(0 个 button)
-2026-09-04T00:12:12.375+08:00 INFO 27136 --- [crm-app] [main] c.c.r.config.StageTemplateInitializer : 默认阶段模板已存在(code=OPP_STAGE_TPL_01,含已停用),跳过种子化
-2026-09-04T00:12:12.388+08:00 INFO 27136 --- [crm-app] [main] c.c.r.c.CustomerReminderRuleInitializer : 客户提醒规则单例已存在(id=1),跳过种子化
-2026-09-04T00:12:12.401+08:00 INFO 27136 --- [crm-app] [main] c.c.c.c.CustomerFulltextIndexInitializer : customer FULLTEXT 索引 idx_name_fulltext 已存在,跳过
-2026-09-04T00:12:12.401+08:00 INFO 27136 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : 执行内置字典幂等初始化检查...
-2026-09-04T00:12:22.301+08:00 INFO 27136 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : 内置字典幂等初始化检查完成:24 个分组
-2026-09-04T00:12:30.018+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:12:30.018855900
-2026-09-04T00:12:30.080+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:13:00.014+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:13:00.014869
-2026-09-04T00:13:00.067+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:13:30.002+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:13:30.002890900
-2026-09-04T00:13:30.054+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:14:00.008+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:14:00.008758200
-2026-09-04T00:14:00.059+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:14:15.119+08:00 WARN 27136 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67001, msg=行业一级不能为空
-2026-09-04T00:14:15.411+08:00 WARN 27136 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67001, msg=行业一级不能为空
-2026-09-04T00:14:30.014+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:14:30.014442400
-2026-09-04T00:14:30.066+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:15:00.003+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:15:00.003820
-2026-09-04T00:15:00.057+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:15:30.010+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:15:30.010060
-2026-09-04T00:15:30.060+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:16:00.005+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:16:00.005481700
-2026-09-04T00:16:00.056+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:16:30.014+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:16:30.014645500
-2026-09-04T00:16:30.066+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:17:00.013+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:17:00.013354600
-2026-09-04T00:17:00.065+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:17:30.005+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:17:30.005105900
-2026-09-04T00:17:30.055+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:18:00.004+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:18:00.004201900
-2026-09-04T00:18:00.055+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:18:30.007+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:18:30.007844100
-2026-09-04T00:18:30.057+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:19:00.002+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:19:00.002273900
-2026-09-04T00:19:00.052+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:19:30.010+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:19:30.010001200
-2026-09-04T00:19:30.063+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:20:00.010+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:20:00.010296200
-2026-09-04T00:20:00.059+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:20:10.618+08:00 ERROR 27136 --- [crm-app] [http-nio-8080-exec-7] 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.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
- at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[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:1583) ~[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]
- ... 116 common frames omitted
-Caused by: java.net.SocketException: Connection reset
- at java.base/sun.nio.ch.SocketChannelImpl.throwConnectionReset(SocketChannelImpl.java:401) ~[na:na]
- at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:434) ~[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-04T00:20:10.718+08:00 INFO 27136 --- [crm-app] [lettuce-eventExecutorLoop-1-1] i.l.core.protocol.ConnectionWatchdog : Reconnecting, last destination was /8.129.84.155:6379
-2026-09-04T00:20:10.749+08:00 INFO 27136 --- [crm-app] [lettuce-nioEventLoop-4-2] i.l.core.protocol.ReconnectionHandler : Reconnected to 8.129.84.155/:6379
-2026-09-04T00:20:12.681+08:00 WARN 27136 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] 为 userId=739564171091247104 签发调试 token
-2026-09-04T00:20:12.707+08:00 WARN 27136 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] 为 userId=744842318024015872 签发调试 token
-2026-09-04T00:20:13.598+08:00 WARN 27136 --- [crm-app] [http-nio-8080-exec-2] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@67c5f5ba (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:20:14.626+08:00 WARN 27136 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67011, msg=交接原因必填
-2026-09-04T00:20:14.767+08:00 WARN 27136 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67011, msg=接收总监不在可交接范围内
-2026-09-04T00:20:15.480+08:00 WARN 27136 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67010, msg=存在未完成的交接单,不可重复发起
-2026-09-04T00:20:30.002+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:20:30.002168300
-2026-09-04T00:20:30.013+08:00 WARN 27136 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@2d714256 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:20:30.025+08:00 WARN 27136 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@7109989d (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:20:30.037+08:00 WARN 27136 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@652b7c83 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:20:30.049+08:00 WARN 27136 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@42efe182 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:20:30.058+08:00 WARN 27136 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@1d9dd25d (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:20:30.067+08:00 WARN 27136 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@20ed6c03 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:20:30.076+08:00 WARN 27136 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@1e1cd3f9 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:20:30.087+08:00 WARN 27136 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@2342d249 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:20:30.142+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:21:00.001+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:21:00.001741500
-2026-09-04T00:21:00.047+08:00 INFO 27136 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:21:20.942+08:00 WARN 27136 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67012, msg=分配对象不存在、已停用或已离职
-2026-09-04T00:21:24.962+08:00 WARN 27136 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67013, msg=导入方式非法(仅新增/仅更新/新增或更新)
-2026-09-04T00:21:25.273+08:00 WARN 27136 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67013, msg=模板版本不匹配,请下载最新导入模板(第 2 列表头不符)
-2026-09-04T00:21:25.422+08:00 WARN 27136 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67013, msg=文件内无数据行
-2026-09-04T00:21:25.799+08:00 ERROR 27136 --- [crm-app] [task-1] c.crm.file.task.ThumbnailGenerationTask : 缩略图生成失败:fileId=750873049946914816, thumbKey=thumbnails/750873049946914816.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-04T00:21:26.031+08:00 ERROR 27136 --- [crm-app] [task-2] c.crm.file.task.ThumbnailGenerationTask : 缩略图生成失败:fileId=750873051159068672, thumbKey=thumbnails/750873051159068672.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
+This generated password is for development use only. Your security configuration must be updated before running your application in production.
-2026-09-04T00:21:26.354+08:00 ERROR 27136 --- [crm-app] [task-3] c.crm.file.task.ThumbnailGenerationTask : 缩略图生成失败:fileId=750873052526411776, thumbKey=thumbnails/750873052526411776.jpg
+2026-09-05T11:23:48.537+08:00 INFO 21796 --- [crm-app] [main] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager
+2026-09-05T11:23:49.990+08:00 INFO 21796 --- [crm-app] [main] c.c.a.c.DataScopeModuleStartupValidator : ȨģУͨ0 ܿر4 עģ
+2026-09-05T11:23:50.036+08:00 INFO 21796 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
+2026-09-05T11:23:50.071+08:00 INFO 21796 --- [crm-app] [main] com.crm.app.CrmAppApplication : Started CrmAppApplication in 43.404 seconds (process running for 44.224)
+2026-09-05T11:23:50.077+08:00 INFO 21796 --- [crm-app] [main] com.crm.auth.config.DataInitializer : ִȨݳʼ...
+2026-09-05T11:23:50.750+08:00 INFO 21796 --- [crm-app] [main] com.crm.auth.config.DataInitializer : Ȩݳʼ
+2026-09-05T11:23:50.752+08:00 INFO 21796 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ִֵȨӻ...
+2026-09-05T11:23:51.119+08:00 INFO 21796 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ֵȨӻɣ10 Ȩ
+2026-09-05T11:23:51.119+08:00 INFO 21796 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : ִȨӻ飨˵...
+2026-09-05T11:23:51.202+08:00 INFO 21796 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : Ȩӻɣ˵0 button
+2026-09-05T11:23:51.203+08:00 INFO 21796 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ִȫӵ...
+2026-09-05T11:23:53.072+08:00 INFO 21796 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ӵɣ 3432 Уʡ 34 / 342 / 3056 3432 У 0
+2026-09-05T11:23:53.072+08:00 INFO 21796 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : ִȨӻ飨˵...
+2026-09-05T11:23:53.398+08:00 INFO 21796 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : Ȩӻɣ4 ˵0 button
+2026-09-05T11:23:53.398+08:00 INFO 21796 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ִ̻Ȩӻ飨˵...
+2026-09-05T11:23:53.489+08:00 INFO 21796 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ̻Ȩӻɣ˵0 button
+2026-09-05T11:23:53.490+08:00 INFO 21796 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ִпͻѹȨӻ飨˵...
+2026-09-05T11:23:53.573+08:00 INFO 21796 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ͻѹȨӻɣ˵0 button
+2026-09-05T11:23:53.573+08:00 INFO 21796 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ִ̻ģȨӻ飨˵...
+2026-09-05T11:23:53.652+08:00 INFO 21796 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ̻ģȨӻɣ˵0 button
+2026-09-05T11:23:53.652+08:00 INFO 21796 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ִзϵͳֶοӻ...
+2026-09-05T11:23:53.666+08:00 INFO 21796 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ϵͳֶοӻɣִ 16 0
+2026-09-05T11:23:53.684+08:00 INFO 21796 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ģѴڣcode=OPP_SCHEME_TPL_01ͣãӻ
+2026-09-05T11:23:53.684+08:00 INFO 21796 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ִзģȨӻ飨˵...
+2026-09-05T11:23:53.764+08:00 INFO 21796 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ģȨӻɣ˵0 button
+2026-09-05T11:23:53.780+08:00 INFO 21796 --- [crm-app] [main] c.c.r.config.StageTemplateInitializer : ĬϽģѴڣcode=OPP_STAGE_TPL_01ͣãӻ
+2026-09-05T11:23:53.795+08:00 INFO 21796 --- [crm-app] [main] c.c.r.c.CustomerReminderRuleInitializer : ͻѹѴڣid=1ӻ
+2026-09-05T11:23:53.796+08:00 INFO 21796 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : ִпͻȨӻ飨˵...
+2026-09-05T11:23:53.845+08:00 INFO 21796 --- [crm-app] [main] c.c.a.service.impl.PermissionSeederImpl : ˵ڵ㣺ͻ (type=2)
+2026-09-05T11:23:53.914+08:00 INFO 21796 --- [crm-app] [main] c.CustomerDedupRulePermissionInitializer : ͻȨӻɣ˵0 button
+2026-09-05T11:23:53.951+08:00 INFO 21796 --- [crm-app] [main] c.c.r.c.CustomerDedupRuleInitializer : ֲͻõid=1ȫãģƥ + 80% ֵ
+2026-09-05T11:23:53.952+08:00 INFO 21796 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ִֵݵȳʼ...
+2026-09-05T11:24:02.756+08:00 INFO 21796 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ֵݵȳʼɣ24
+2026-09-05T11:24:02.767+08:00 INFO 21796 --- [crm-app] [main] c.c.c.c.CustomerFulltextIndexInitializer : customer FULLTEXT idx_name_fulltext Ѵڣ
+2026-09-05T11:24:11.584+08:00 INFO 21796 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
+2026-09-05T11:24:11.586+08:00 INFO 21796 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms
+2026-09-05T11:24:13.715+08:00 WARN 21796 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
+2026-09-05T11:24:16.127+08:00 WARN 21796 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=Ƭͼֿ֧ͻ/ҵĿͻ
+2026-09-05T11:24:16.237+08:00 WARN 21796 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=Ƭͼֿ֧ͻ/ҵĿͻ
+2026-09-05T11:24:16.986+08:00 WARN 21796 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=Ƿ̻ҲΪ
+2026-09-05T11:24:17.734+08:00 WARN 21796 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ְ
+2026-09-05T11:24:21.774+08:00 WARN 21796 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ȱid
+2026-09-05T11:24:26.713+08:00 ERROR 21796 --- [crm-app] [task-1] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=751402289725440000, thumbKey=thumbnails/751402289725440000.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]
+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.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
- at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
+ 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: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.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: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
+ 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-04T00:21:26.557+08:00 WARN 27136 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67014, msg=任务已确认,请勿重复提交
-2026-09-04T00:21:26.787+08:00 WARN 27136 --- [crm-app] [task-4] c.c.c.task.CustomerImportExecutor : 客户导入单行执行异常:taskId=750873050265681920, row=1
+2026-09-05T11:24:27.045+08:00 WARN 21796 --- [crm-app] [task-2] c.c.c.task.CustomerImportExecutor : ͻ뵥ִ쳣taskId=751402290362974208, row=1
org.springframework.dao.DataIntegrityViolationException:
### Error updating database. Cause: java.sql.SQLException: Field 'is_biz_negotiated' doesn't have a default value
### The error may exist in com/crm/customer/mapper/CustomerMapper.java (best guess)
### The error may involve com.crm.customer.mapper.CustomerMapper.insert-Inline
### The error occurred while setting parameters
-### SQL: INSERT INTO customer ( id, customer_no, customer_name, customer_type, province_code, city_code, industry_code, customer_star_level, owner_user_id, owner_user_name_snapshot, owner_dept_id, owner_dept_name_snapshot, customer_stage, archive_status, last_valid_follow_time, is_child, remark, version, creator_id, create_time, updater_id, update_time, deleted ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )
+### SQL: INSERT INTO customer ( id, customer_no, customer_name, customer_type, province_code, city_code, industry_code, customer_star_level, owner_user_id, owner_user_name_snapshot, owner_dept_id, owner_dept_name_snapshot, customer_stage, archive_status, last_valid_follow_time, is_child, version, creator_id, create_time, updater_id, update_time, deleted ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )
### Cause: java.sql.SQLException: Field 'is_biz_negotiated' doesn't have a default value
; Field 'is_biz_negotiated' doesn't have a default value
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:258) ~[spring-jdbc-6.1.14.jar!/:6.1.14]
@@ -1532,21 +267,23 @@ org.springframework.dao.DataIntegrityViolationException:
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59) ~[mybatis-plus-core-3.5.7.jar!/:3.5.7]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152) ~[mybatis-plus-core-3.5.7.jar!/:3.5.7]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) ~[mybatis-plus-core-3.5.7.jar!/:3.5.7]
- at jdk.proxy2/jdk.proxy2.$Proxy228.insert(Unknown Source) ~[na:na]
- at com.crm.customer.task.CustomerImportExecutor.createCustomer(CustomerImportExecutor.java:243) ~[crm-customer-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT]
- at com.crm.customer.task.CustomerImportExecutor.doImport(CustomerImportExecutor.java:117) ~[crm-customer-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT]
+ at jdk.proxy2/jdk.proxy2.$Proxy229.insert(Unknown Source) ~[na:na]
+ at com.crm.customer.task.CustomerImportExecutor.createCustomer(CustomerImportExecutor.java:244) ~[crm-customer-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT]
+ at com.crm.customer.task.CustomerImportExecutor.doImport(CustomerImportExecutor.java:118) ~[crm-customer-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT]
at com.crm.customer.task.CustomerImportExecutor.executeImport(CustomerImportExecutor.java:74) ~[crm-customer-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 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: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]
+ 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.sql.SQLException: Field 'is_biz_negotiated' doesn't have a default value
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
@@ -1556,31 +293,35 @@ Caused by: java.sql.SQLException: Field 'is_biz_negotiated' doesn't have a defau
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java) ~[HikariCP-5.1.0.jar!/:na]
at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48) ~[mybatis-3.5.16.jar!/:3.5.16]
at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75) ~[mybatis-3.5.16.jar!/:3.5.16]
- 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 jdk.internal.reflect.GeneratedMethodAccessor72.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.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.proxy2/jdk.proxy2.$Proxy256.update(Unknown Source) ~[na:na]
- 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 jdk.proxy2/jdk.proxy2.$Proxy257.update(Unknown Source) ~[na:na]
+ at jdk.internal.reflect.GeneratedMethodAccessor72.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.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.proxy2/jdk.proxy2.$Proxy256.update(Unknown Source) ~[na:na]
+ at jdk.proxy2/jdk.proxy2.$Proxy257.update(Unknown Source) ~[na:na]
at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) ~[mybatis-3.5.16.jar!/:3.5.16]
at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) ~[mybatis-3.5.16.jar!/:3.5.16]
at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) ~[mybatis-3.5.16.jar!/:3.5.16]
- 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 jdk.internal.reflect.GeneratedMethodAccessor79.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.apache.ibatis.plugin.Invocation.proceed(Invocation.java:61) ~[mybatis-3.5.16.jar!/:3.5.16]
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) ~[mybatis-plus-extension-3.5.7.jar!/:3.5.7]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.proxy2/jdk.proxy2.$Proxy255.update(Unknown Source) ~[na:na]
+ at jdk.proxy2/jdk.proxy2.$Proxy256.update(Unknown Source) ~[na:na]
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) ~[mybatis-3.5.16.jar!/:3.5.16]
at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) ~[mybatis-3.5.16.jar!/:3.5.16]
- 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 jdk.internal.reflect.GeneratedMethodAccessor185.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.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) ~[mybatis-spring-3.0.3.jar!/:3.0.3]
- ... 20 common frames omitted
+ ... 22 common frames omitted
-2026-09-04T00:21:26.815+08:00 ERROR 27136 --- [crm-app] [task-4] c.c.c.task.CustomerImportExecutor : 客户导入任务执行失败:taskId=750873050265681920
+2026-09-05T11:24:27.395+08:00 ERROR 21796 --- [crm-app] [task-2] c.c.c.task.CustomerImportExecutor : ͻִʧܣtaskId=751402290362974208
org.springframework.dao.DataIntegrityViolationException:
### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'fail_reason' at row 1
@@ -1601,490 +342,69 @@ org.springframework.dao.DataIntegrityViolationException:
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59) ~[mybatis-plus-core-3.5.7.jar!/:3.5.7]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152) ~[mybatis-plus-core-3.5.7.jar!/:3.5.7]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) ~[mybatis-plus-core-3.5.7.jar!/:3.5.7]
- at jdk.proxy2/jdk.proxy2.$Proxy236.insert(Unknown Source) ~[na:na]
- at com.crm.customer.task.CustomerImportExecutor.insertFail(CustomerImportExecutor.java:297) ~[crm-customer-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT]
- at com.crm.customer.task.CustomerImportExecutor.doImport(CustomerImportExecutor.java:147) ~[crm-customer-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT]
+ at jdk.proxy2/jdk.proxy2.$Proxy238.insert(Unknown Source) ~[na:na]
+ at com.crm.customer.task.CustomerImportExecutor.insertFail(CustomerImportExecutor.java:298) ~[crm-customer-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT]
+ at com.crm.customer.task.CustomerImportExecutor.doImport(CustomerImportExecutor.java:148) ~[crm-customer-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT]
at com.crm.customer.task.CustomerImportExecutor.executeImport(CustomerImportExecutor.java:74) ~[crm-customer-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: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'fail_reason' at row 1
- at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:104) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
- at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:912) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
- at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
- at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44) ~[HikariCP-5.1.0.jar!/:na]
- at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java) ~[HikariCP-5.1.0.jar!/:na]
- at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48) ~[mybatis-3.5.16.jar!/:3.5.16]
- at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75) ~[mybatis-3.5.16.jar!/:3.5.16]
- 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.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.proxy2/jdk.proxy2.$Proxy256.update(Unknown Source) ~[na:na]
- 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.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.proxy2/jdk.proxy2.$Proxy256.update(Unknown Source) ~[na:na]
- at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) ~[mybatis-3.5.16.jar!/:3.5.16]
- at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) ~[mybatis-3.5.16.jar!/:3.5.16]
- at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) ~[mybatis-3.5.16.jar!/:3.5.16]
- 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.apache.ibatis.plugin.Invocation.proceed(Invocation.java:61) ~[mybatis-3.5.16.jar!/:3.5.16]
- at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) ~[mybatis-plus-extension-3.5.7.jar!/:3.5.7]
- at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.proxy2/jdk.proxy2.$Proxy255.update(Unknown Source) ~[na:na]
- at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) ~[mybatis-3.5.16.jar!/:3.5.16]
- at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) ~[mybatis-3.5.16.jar!/:3.5.16]
- 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.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) ~[mybatis-spring-3.0.3.jar!/:3.0.3]
- ... 20 common frames omitted
-
-2026-09-04T00:21:26.895+08:00 ERROR 27136 --- [crm-app] [http-nio-8080-exec-1] 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._writeStringSegment2(UTF8JsonGenerator.java:1522) ~[jackson-core-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.core.json.UTF8JsonGenerator._writeStringSegment(UTF8JsonGenerator.java:1469) ~[jackson-core-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.core.json.UTF8JsonGenerator.writeString(UTF8JsonGenerator.java:531) ~[jackson-core-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.std.StringSerializer.serialize(StringSerializer.java:41) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:732) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:183) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serializeContents(IndexedListSerializer.java:119) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:79) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.impl.IndexedListSerializer.serialize(IndexedListSerializer.java:18) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:732) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:770) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:183) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:502) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:341) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1574) ~[jackson-databind-2.17.2.jar!/:2.17.2]
- at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:1061) ~[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:1583) ~[na:na]
- Suppressed: org.springframework.web.context.request.async.AsyncRequestNotUsableException: Response not usable after response errors.
- at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleHttpServletResponse.obtainLockOrRaiseException(StandardServletAsyncWebRequest.java:335) ~[spring-web-6.1.14.jar!/:6.1.14]
- at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.write(StandardServletAsyncWebRequest.java:396) ~[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.close(UTF8JsonGenerator.java:1234) ~[jackson-core-2.17.2.jar!/:2.17.2]
- at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:452) ~[spring-web-6.1.14.jar!/:6.1.14]
- ... 102 common frames omitted
-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]
- ... 122 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:137) ~[na:na]
- at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:102) ~[na:na]
- at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:58) ~[na:na]
- at java.base/sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:542) ~[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]
- ... 129 common frames omitted
-
-2026-09-04T00:21:28.410+08:00 INFO 27136 --- [crm-app] [http-nio-8080-exec-10] .c.r.s.i.CustomerReminderRuleServiceImpl : [客户提醒规则] 全量覆盖保存:operator=739564171091247104, masterEnabled=1, firstTrigger=1/1天, secondInterval=1/1天
-2026-09-04T00:21:28.509+08:00 WARN 27136 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=64023, msg=首次触发天数与二次提醒间隔天数必须为正整数
-2026-09-04T00:21:28.597+08:00 WARN 27136 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=64023, msg=首次触发天数与二次提醒间隔天数必须为正整数
-2026-09-04T00:21:28.831+08:00 INFO 27136 --- [crm-app] [http-nio-8080-exec-5] .c.r.s.i.CustomerReminderRuleServiceImpl : [客户提醒规则] 全量覆盖保存:operator=739564171091247104, masterEnabled=0, firstTrigger=0/2天, secondInterval=0/2天
-2026-09-04T00:21:28.954+08:00 INFO 27136 --- [crm-app] [http-nio-8080-exec-6] .c.r.s.i.CustomerReminderRuleServiceImpl : [客户提醒规则] 全量覆盖保存:operator=739564171091247104, masterEnabled=1, firstTrigger=1/1天, secondInterval=1/1天
-2026-09-04T00:21:31.571+08:00 INFO 31884 --- [crm-app] [main] com.crm.app.CrmAppApplication : Starting CrmAppApplication v1.0.0-SNAPSHOT using Java 21.0.7 with PID 31884 (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-04T00:21:31.573+08:00 INFO 31884 --- [crm-app] [main] com.crm.app.CrmAppApplication : The following 1 profile is active: "verify"
-2026-09-04T00:21:33.199+08:00 INFO 31884 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
-2026-09-04T00:21:33.202+08:00 INFO 31884 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
-2026-09-04T00:21:33.233+08:00 INFO 31884 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 23 ms. Found 0 JPA repository interfaces.
-2026-09-04T00:21:33.254+08:00 INFO 31884 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
-2026-09-04T00:21:33.255+08:00 INFO 31884 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
-2026-09-04T00:21:33.267+08:00 INFO 31884 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 3 ms. Found 0 Redis repository interfaces.
-2026-09-04T00:21:33.435+08:00 WARN 31884 --- [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-04T00:21:33.435+08:00 WARN 31884 --- [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-04T00:21:33.435+08:00 WARN 31884 --- [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-04T00:21:33.435+08:00 WARN 31884 --- [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-04T00:21:33.435+08:00 WARN 31884 --- [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-04T00:21:33.435+08:00 WARN 31884 --- [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-04T00:21:33.435+08:00 WARN 31884 --- [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-04T00:21:33.436+08:00 WARN 31884 --- [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-04T00:21:33.436+08:00 WARN 31884 --- [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-04T00:21:33.436+08:00 WARN 31884 --- [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-04T00:21:33.436+08:00 WARN 31884 --- [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-04T00:21:33.436+08:00 WARN 31884 --- [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-04T00:21:33.436+08:00 WARN 31884 --- [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-04T00:21:33.436+08:00 WARN 31884 --- [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-04T00:21:33.436+08:00 WARN 31884 --- [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-04T00:21:33.436+08:00 WARN 31884 --- [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-04T00:21:33.436+08:00 WARN 31884 --- [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-04T00:21:33.436+08:00 WARN 31884 --- [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-04T00:21:33.436+08:00 WARN 31884 --- [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-04T00:21:33.436+08:00 WARN 31884 --- [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-04T00:21:33.436+08:00 WARN 31884 --- [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-04T00:21:33.437+08:00 WARN 31884 --- [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-04T00:21:33.437+08:00 WARN 31884 --- [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-04T00:21:33.437+08:00 WARN 31884 --- [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-04T00:21:33.437+08:00 WARN 31884 --- [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-04T00:21:33.438+08:00 WARN 31884 --- [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-04T00:21:33.438+08:00 WARN 31884 --- [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-04T00:21:33.438+08:00 WARN 31884 --- [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-04T00:21:33.438+08:00 WARN 31884 --- [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-04T00:21:33.438+08:00 WARN 31884 --- [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-04T00:21:33.438+08:00 WARN 31884 --- [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-04T00:21:33.438+08:00 WARN 31884 --- [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-04T00:21:33.438+08:00 WARN 31884 --- [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-04T00:21:33.439+08:00 WARN 31884 --- [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-04T00:21:33.439+08:00 WARN 31884 --- [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-04T00:21:33.439+08:00 WARN 31884 --- [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-04T00:21:33.439+08:00 WARN 31884 --- [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-04T00:21:33.439+08:00 WARN 31884 --- [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-04T00:21:33.439+08:00 WARN 31884 --- [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-04T00:21:33.439+08:00 WARN 31884 --- [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-04T00:21:33.439+08:00 WARN 31884 --- [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-04T00:21:33.439+08:00 WARN 31884 --- [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-04T00:21:33.439+08:00 WARN 31884 --- [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-04T00:21:33.439+08:00 WARN 31884 --- [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-04T00:21:33.439+08:00 WARN 31884 --- [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-04T00:21:33.439+08:00 WARN 31884 --- [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-04T00:21:33.440+08:00 WARN 31884 --- [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-04T00:21:33.440+08:00 WARN 31884 --- [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-04T00:21:33.440+08:00 WARN 31884 --- [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-04T00:21:33.440+08:00 WARN 31884 --- [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-04T00:21:33.440+08:00 WARN 31884 --- [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-04T00:21:33.440+08:00 WARN 31884 --- [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-04T00:21:33.440+08:00 WARN 31884 --- [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-04T00:21:33.440+08:00 WARN 31884 --- [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-04T00:21:33.440+08:00 WARN 31884 --- [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-04T00:21:33.441+08:00 WARN 31884 --- [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-04T00:21:33.441+08:00 WARN 31884 --- [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-04T00:21:33.441+08:00 WARN 31884 --- [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-04T00:21:33.441+08:00 WARN 31884 --- [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-04T00:21:33.441+08:00 WARN 31884 --- [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-04T00:21:33.441+08:00 WARN 31884 --- [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-04T00:21:33.441+08:00 WARN 31884 --- [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-04T00:21:33.441+08:00 WARN 31884 --- [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-04T00:21:33.441+08:00 WARN 31884 --- [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-04T00:21:33.441+08:00 WARN 31884 --- [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-04T00:21:33.442+08:00 WARN 31884 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration.
-2026-09-04T00:21:33.455+08:00 WARN 31884 --- [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-04T00:21:33.455+08:00 WARN 31884 --- [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-04T00:21:33.455+08:00 WARN 31884 --- [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-04T00:21:33.455+08:00 WARN 31884 --- [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-04T00:21:33.456+08:00 WARN 31884 --- [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-04T00:21:33.456+08:00 WARN 31884 --- [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-04T00:21:33.456+08:00 WARN 31884 --- [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-04T00:21:33.456+08:00 WARN 31884 --- [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-04T00:21:33.456+08:00 WARN 31884 --- [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-04T00:21:33.456+08:00 WARN 31884 --- [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-04T00:21:33.456+08:00 WARN 31884 --- [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-04T00:21:33.456+08:00 WARN 31884 --- [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-04T00:21:33.456+08:00 WARN 31884 --- [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-04T00:21:33.456+08:00 WARN 31884 --- [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-04T00:21:33.456+08:00 WARN 31884 --- [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-04T00:21:33.457+08:00 WARN 31884 --- [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-04T00:21:33.457+08:00 WARN 31884 --- [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-04T00:21:33.457+08:00 WARN 31884 --- [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-04T00:21:33.457+08:00 WARN 31884 --- [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-04T00:21:33.457+08:00 WARN 31884 --- [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-04T00:21:33.457+08:00 WARN 31884 --- [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-04T00:21:33.457+08:00 WARN 31884 --- [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-04T00:21:33.457+08:00 WARN 31884 --- [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-04T00:21:33.457+08:00 WARN 31884 --- [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-04T00:21:33.457+08:00 WARN 31884 --- [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-04T00:21:33.457+08:00 WARN 31884 --- [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-04T00:21:33.457+08:00 WARN 31884 --- [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-04T00:21:33.457+08:00 WARN 31884 --- [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-04T00:21:33.457+08:00 WARN 31884 --- [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-04T00:21:33.457+08:00 WARN 31884 --- [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-04T00:21:33.457+08:00 WARN 31884 --- [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-04T00:21:33.457+08:00 WARN 31884 --- [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-04T00:21:33.458+08:00 WARN 31884 --- [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-04T00:21:33.458+08:00 WARN 31884 --- [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-04T00:21:33.458+08:00 WARN 31884 --- [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-04T00:21:33.458+08:00 WARN 31884 --- [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-04T00:21:33.458+08:00 WARN 31884 --- [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-04T00:21:33.458+08:00 WARN 31884 --- [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-04T00:21:33.458+08:00 WARN 31884 --- [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-04T00:21:33.458+08:00 WARN 31884 --- [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-04T00:21:33.458+08:00 WARN 31884 --- [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-04T00:21:33.458+08:00 WARN 31884 --- [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-04T00:21:33.458+08:00 WARN 31884 --- [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-04T00:21:33.458+08:00 WARN 31884 --- [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-04T00:21:33.458+08:00 WARN 31884 --- [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-04T00:21:33.458+08:00 WARN 31884 --- [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-04T00:21:33.458+08:00 WARN 31884 --- [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-04T00:21:33.458+08:00 WARN 31884 --- [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-04T00:21:33.458+08:00 WARN 31884 --- [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-04T00:21:33.458+08:00 WARN 31884 --- [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-04T00:21:33.458+08:00 WARN 31884 --- [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-04T00:21:33.459+08:00 WARN 31884 --- [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-04T00:21:33.459+08:00 WARN 31884 --- [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-04T00:21:33.459+08:00 WARN 31884 --- [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-04T00:21:33.459+08:00 WARN 31884 --- [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-04T00:21:33.459+08:00 WARN 31884 --- [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-04T00:21:33.459+08:00 WARN 31884 --- [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-04T00:21:33.459+08:00 WARN 31884 --- [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-04T00:21:33.459+08:00 WARN 31884 --- [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-04T00:21:33.459+08:00 WARN 31884 --- [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-04T00:21:33.459+08:00 WARN 31884 --- [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-04T00:21:33.459+08:00 WARN 31884 --- [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-04T00:21:33.459+08:00 WARN 31884 --- [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-04T00:21:33.459+08:00 WARN 31884 --- [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-04T00:21:33.459+08:00 WARN 31884 --- [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-04T00:21:33.459+08:00 WARN 31884 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration.
-2026-09-04T00:21:34.358+08:00 INFO 31884 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
-2026-09-04T00:21:34.378+08:00 INFO 31884 --- [crm-app] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
-2026-09-04T00:21:34.378+08:00 INFO 31884 --- [crm-app] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.31]
-2026-09-04T00:21:34.422+08:00 INFO 31884 --- [crm-app] [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
-2026-09-04T00:21:34.422+08:00 INFO 31884 --- [crm-app] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2786 ms
-2026-09-04T00:21:34.927+08:00 INFO 31884 --- [crm-app] [main] com.crm.auth.config.PermissionConfig : 数据权限受控表扫描完成:0 张
-2026-09-04T00:21:35.052+08:00 INFO 31884 --- [crm-app] [main] com.crm.base.config.CustomIdGenerator : 雪花ID生成器初始化完成,workerId=0, datacenterId=0
-2026-09-04T00:21:35.645+08:00 INFO 31884 --- [crm-app] [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
-2026-09-04T00:21:35.712+08:00 INFO 31884 --- [crm-app] [main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.5.3.Final
-2026-09-04T00:21:35.754+08:00 INFO 31884 --- [crm-app] [main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled
-2026-09-04T00:21:36.072+08:00 INFO 31884 --- [crm-app] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer
-2026-09-04T00:21:36.112+08:00 INFO 31884 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
-2026-09-04T00:21:36.693+08:00 INFO 31884 --- [crm-app] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@6a486afb
-2026-09-04T00:21:36.695+08:00 INFO 31884 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
-2026-09-04T00:21:36.833+08:00 WARN 31884 --- [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-04T00:21:38.720+08:00 INFO 31884 --- [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-04T00:21:53.301+08:00 INFO 31884 --- [crm-app] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
-2026-09-04T00:21:53.648+08:00 WARN 31884 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================
-2026-09-04T00:21:53.648+08:00 WARN 31884 --- [crm-app] [main] c.c.a.controller.DebugTokenController : 调试 token 接口 /api/auth/debug/token 已启用(verify profile)
-2026-09-04T00:21:53.648+08:00 WARN 31884 --- [crm-app] [main] c.c.a.controller.DebugTokenController : 严禁用于生产环境!任何知道 userId 的人可冒充该用户。
-2026-09-04T00:21:53.648+08:00 WARN 31884 --- [crm-app] [main] c.c.a.controller.DebugTokenController : 参见 docs/adr/0014-verify-profile-debug-token-endpoint.md
-2026-09-04T00:21:53.648+08:00 WARN 31884 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================
-2026-09-04T00:21:55.340+08:00 INFO 31884 --- [crm-app] [main] c.c.c.p.i.NgramNameSimilarityPortImpl : CustomerNameSimilarityPort 一期实现就绪(预筛模式:FULLTEXT ngram)
-2026-09-04T00:21:55.491+08:00 INFO 31884 --- [crm-app] [main] c.c.c.p.impl.StubCompanyLookupPortImpl : CompanyLookupPort 一期 stub 已装配(企查查未接入,工商候选返回空)
-2026-09-04T00:21:55.705+08:00 INFO 31884 --- [crm-app] [main] c.c.c.p.i.NoopProjectOwnerSyncPortImpl : ProjectOwnerSyncPort no-op 默认实现已装配(A5 项目模块未建,owner 同步跳过)
-2026-09-04T00:21:55.770+08:00 INFO 31884 --- [crm-app] [main] c.c.p.i.NoopOpportunityOwnerSyncPortImpl : OpportunityOwnerSyncPort no-op 默认实现已装配(票 11 接商机真源后替换)
-2026-09-04T00:21:55.943+08:00 WARN 31884 --- [crm-app] [main] .s.s.UserDetailsServiceAutoConfiguration :
-
-Using generated security password: a0293f12-0060-44e6-a9c6-36f407384737
-
-This generated password is for development use only. Your security configuration must be updated before running your application in production.
+ 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: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'fail_reason' at row 1
+ at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:104) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
+ at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:912) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
+ at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
+ at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44) ~[HikariCP-5.1.0.jar!/:na]
+ at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java) ~[HikariCP-5.1.0.jar!/:na]
+ at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48) ~[mybatis-3.5.16.jar!/:3.5.16]
+ at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75) ~[mybatis-3.5.16.jar!/:3.5.16]
+ at jdk.internal.reflect.GeneratedMethodAccessor72.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.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.16.jar!/:3.5.16]
+ at jdk.proxy2/jdk.proxy2.$Proxy257.update(Unknown Source) ~[na:na]
+ at jdk.internal.reflect.GeneratedMethodAccessor72.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.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.16.jar!/:3.5.16]
+ at jdk.proxy2/jdk.proxy2.$Proxy257.update(Unknown Source) ~[na:na]
+ at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) ~[mybatis-3.5.16.jar!/:3.5.16]
+ at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) ~[mybatis-3.5.16.jar!/:3.5.16]
+ at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) ~[mybatis-3.5.16.jar!/:3.5.16]
+ at jdk.internal.reflect.GeneratedMethodAccessor79.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.apache.ibatis.plugin.Invocation.proceed(Invocation.java:61) ~[mybatis-3.5.16.jar!/:3.5.16]
+ at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) ~[mybatis-plus-extension-3.5.7.jar!/:3.5.7]
+ at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.16.jar!/:3.5.16]
+ at jdk.proxy2/jdk.proxy2.$Proxy256.update(Unknown Source) ~[na:na]
+ at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) ~[mybatis-3.5.16.jar!/:3.5.16]
+ at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) ~[mybatis-3.5.16.jar!/:3.5.16]
+ at jdk.internal.reflect.GeneratedMethodAccessor185.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.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) ~[mybatis-spring-3.0.3.jar!/:3.0.3]
+ ... 22 common frames omitted
-2026-09-04T00:21:55.960+08:00 INFO 31884 --- [crm-app] [main] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager
-2026-09-04T00:21:56.964+08:00 INFO 31884 --- [crm-app] [main] c.c.a.c.DataScopeModuleStartupValidator : 数据权限模块校验通过:0 张受控表,4 个注册模块
-2026-09-04T00:21:56.987+08:00 INFO 31884 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
-2026-09-04T00:21:57.017+08:00 INFO 31884 --- [crm-app] [main] com.crm.app.CrmAppApplication : Started CrmAppApplication in 25.89 seconds (process running for 26.498)
-2026-09-04T00:21:57.021+08:00 INFO 31884 --- [crm-app] [main] com.crm.auth.config.DataInitializer : 执行权限数据初始化检查...
-2026-09-04T00:21:57.400+08:00 INFO 31884 --- [crm-app] [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
-2026-09-04T00:21:57.400+08:00 INFO 31884 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
-2026-09-04T00:21:57.403+08:00 INFO 31884 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 2 ms
-2026-09-04T00:21:57.785+08:00 INFO 31884 --- [crm-app] [main] com.crm.auth.config.DataInitializer : 权限数据初始化检查完成
-2026-09-04T00:21:57.785+08:00 INFO 31884 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : 执行数据字典权限种子化检查...
-2026-09-04T00:21:58.196+08:00 INFO 31884 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : 数据字典权限种子化检查完成:10 个权限点
-2026-09-04T00:21:58.196+08:00 INFO 31884 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : 执行线索规则权限种子化检查(仅菜单)...
-2026-09-04T00:21:58.301+08:00 INFO 31884 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : 线索规则权限种子化检查完成:仅菜单(0 个 button)
-2026-09-04T00:21:58.301+08:00 INFO 31884 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : 执行行政区划全量种子导入检查...
-2026-09-04T00:21:59.424+08:00 INFO 31884 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : 行政区划种子导入完成:对账 3432 行(省 34 / 市 342 / 区 3056),存量 3432 行,新增 0 行
-2026-09-04T00:21:59.424+08:00 INFO 31884 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : 执行线索管理权限种子化检查(仅菜单)...
-2026-09-04T00:21:59.817+08:00 INFO 31884 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : 线索管理权限种子化检查完成:4 个菜单(0 个 button)
-2026-09-04T00:21:59.818+08:00 INFO 31884 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : 执行商机规则权限种子化检查(仅菜单)...
-2026-09-04T00:21:59.917+08:00 INFO 31884 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : 商机规则权限种子化检查完成:仅菜单(0 个 button)
-2026-09-04T00:21:59.917+08:00 INFO 31884 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : 执行客户提醒规则权限种子化检查(仅菜单)...
-2026-09-04T00:22:00.015+08:00 INFO 31884 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : 客户提醒规则权限种子化检查完成:仅菜单(0 个 button)
-2026-09-04T00:22:00.015+08:00 INFO 31884 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : 执行商机阶段模板权限种子化检查(仅菜单)...
-2026-09-04T00:22:00.020+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:22:00.020526
-2026-09-04T00:22:00.104+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:22:00.115+08:00 INFO 31884 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : 商机阶段模板权限种子化检查完成:仅菜单(0 个 button)
-2026-09-04T00:22:00.115+08:00 INFO 31884 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : 执行方案卡系统字段库种子化检查...
-2026-09-04T00:22:00.129+08:00 INFO 31884 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : 方案卡系统字段库种子化检查完成:现存 16 个,新增 0 个
-2026-09-04T00:22:00.144+08:00 INFO 31884 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : 方案卡兜底模板已存在(code=OPP_SCHEME_TPL_01,含已停用),跳过种子化
-2026-09-04T00:22:00.144+08:00 INFO 31884 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : 执行方案卡模板权限种子化检查(仅菜单)...
-2026-09-04T00:22:00.244+08:00 INFO 31884 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : 方案卡模板权限种子化检查完成:仅菜单(0 个 button)
-2026-09-04T00:22:00.257+08:00 INFO 31884 --- [crm-app] [main] c.c.r.config.StageTemplateInitializer : 默认阶段模板已存在(code=OPP_STAGE_TPL_01,含已停用),跳过种子化
-2026-09-04T00:22:00.270+08:00 INFO 31884 --- [crm-app] [main] c.c.r.c.CustomerReminderRuleInitializer : 客户提醒规则单例已存在(id=1),跳过种子化
-2026-09-04T00:22:00.282+08:00 INFO 31884 --- [crm-app] [main] c.c.c.c.CustomerFulltextIndexInitializer : customer FULLTEXT 索引 idx_name_fulltext 已存在,跳过
-2026-09-04T00:22:00.282+08:00 INFO 31884 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : 执行内置字典幂等初始化检查...
-2026-09-04T00:22:09.922+08:00 INFO 31884 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : 内置字典幂等初始化检查完成:24 个分组
-2026-09-04T00:22:30.011+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:22:30.011741800
-2026-09-04T00:22:30.073+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:23:00.008+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:23:00.008669400
-2026-09-04T00:23:00.058+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:23:30.003+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:23:30.003643100
-2026-09-04T00:23:30.052+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:24:00.005+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:24:00.005309
-2026-09-04T00:24:00.056+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:24:30.014+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:24:30.014679
-2026-09-04T00:24:30.065+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:25:00.010+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:25:00.010966400
-2026-09-04T00:25:00.059+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:25:30.012+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:25:30.012401400
-2026-09-04T00:25:30.061+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:26:00.016+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:26:00.016382400
-2026-09-04T00:26:00.064+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:26:30.014+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:26:30.014995500
-2026-09-04T00:26:30.064+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:26:31.160+08:00 WARN 31884 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67003, msg=统一社会信用代码已被占用:系统已存在该企业
-2026-09-04T00:27:00.000+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:27:00.000703600
-2026-09-04T00:27:00.050+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:27:30.010+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:27:30.010222400
-2026-09-04T00:27:30.058+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:28:00.001+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:28:00.001271
-2026-09-04T00:28:00.049+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:28:30.002+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:28:30.002931500
-2026-09-04T00:28:30.052+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:28:53.376+08:00 WARN 31884 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] 为 userId=739564171091247104 签发调试 token
-2026-09-04T00:28:53.410+08:00 WARN 31884 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] 为 userId=739564171091247104 签发调试 token
-2026-09-04T00:29:00.008+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:29:00.008157800
-2026-09-04T00:29:00.058+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:29:30.009+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:29:30.009056100
-2026-09-04T00:29:30.057+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:30:00.015+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:30:00.015019100
-2026-09-04T00:30:00.064+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:30:30.006+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:30:30.006150300
-2026-09-04T00:30:30.055+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:30:45.198+08:00 WARN 31884 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] 为 userId=739564171091247104 签发调试 token
-2026-09-04T00:30:45.227+08:00 WARN 31884 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] 为 userId=744842318024015872 签发调试 token
-2026-09-04T00:30:47.144+08:00 WARN 31884 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67011, msg=交接原因必填
-2026-09-04T00:30:47.306+08:00 WARN 31884 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67011, msg=接收总监不在可交接范围内
-2026-09-04T00:30:48.032+08:00 WARN 31884 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67010, msg=存在未完成的交接单,不可重复发起
-2026-09-04T00:31:00.005+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:31:00.005962800
-2026-09-04T00:31:00.059+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:31:30.007+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:31:30.007249200
-2026-09-04T00:31:30.028+08:00 WARN 31884 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@56ac0d3 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:31:30.041+08:00 WARN 31884 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@273b41ed (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:31:30.051+08:00 WARN 31884 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@74846181 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:31:30.063+08:00 WARN 31884 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@6a67ec4c (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:31:30.076+08:00 WARN 31884 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@2b08e89e (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:31:30.085+08:00 WARN 31884 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@5641f03b (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:31:30.097+08:00 WARN 31884 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@19e1b1b (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:31:30.109+08:00 WARN 31884 --- [crm-app] [scheduling-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@544e92e8 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
-2026-09-04T00:31:30.174+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:31:53.594+08:00 WARN 31884 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67012, msg=分配对象不存在、已停用或已离职
-2026-09-04T00:31:57.591+08:00 WARN 31884 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67013, msg=导入方式非法(仅新增/仅更新/新增或更新)
-2026-09-04T00:31:57.905+08:00 WARN 31884 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67013, msg=模板版本不匹配,请下载最新导入模板(第 2 列表头不符)
-2026-09-04T00:31:58.075+08:00 WARN 31884 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67013, msg=文件内无数据行
-2026-09-04T00:31:58.412+08:00 ERROR 31884 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : 全局异常捕获:
+2026-09-05T11:26:24.692+08:00 WARN 21796 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
+2026-09-05T11:26:26.812+08:00 WARN 21796 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=Ƭͼֿ֧ͻ/ҵĿͻ
+2026-09-05T11:26:26.927+08:00 WARN 21796 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=Ƭͼֿ֧ͻ/ҵĿͻ
+2026-09-05T11:28:26.664+08:00 WARN 21796 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
+2026-09-05T11:30:11.612+08:00 WARN 21796 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
+2026-09-05T11:30:18.195+08:00 WARN 21796 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=Ƭͼֿ֧ͻ/ҵĿͻ
+2026-09-05T11:30:18.332+08:00 WARN 21796 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=Ƭͼֿ֧ͻ/ҵĿͻ
+2026-09-05T11:30:40.998+08:00 ERROR 21796 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ȫ쳣
-org.springframework.web.context.request.async.AsyncRequestNotUsableException: ServletOutputStream failed to write: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。
+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]
@@ -2208,7 +528,7 @@ org.springframework.web.context.request.async.AsyncRequestNotUsableException: Se
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:1583) ~[na:na]
+ at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na]
Suppressed: org.springframework.web.context.request.async.AsyncRequestNotUsableException: Response not usable after response errors.
at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleHttpServletResponse.obtainLockOrRaiseException(StandardServletAsyncWebRequest.java:335) ~[spring-web-6.1.14.jar!/:6.1.14]
at org.springframework.web.context.request.async.StandardServletAsyncWebRequest$LifecycleServletOutputStream.write(StandardServletAsyncWebRequest.java:396) ~[spring-web-6.1.14.jar!/:6.1.14]
@@ -2217,7 +537,7 @@ org.springframework.web.context.request.async.AsyncRequestNotUsableException: Se
at com.fasterxml.jackson.core.json.UTF8JsonGenerator.close(UTF8JsonGenerator.java:1234) ~[jackson-core-2.17.2.jar!/:2.17.2]
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:452) ~[spring-web-6.1.14.jar!/:6.1.14]
... 102 common frames omitted
-Caused by: org.apache.catalina.connector.ClientAbortException: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。
+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]
@@ -2227,13 +547,13 @@ Caused by: org.apache.catalina.connector.ClientAbortException: java.io.IOExcepti
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]
... 122 common frames omitted
-Caused by: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。
+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:137) ~[na:na]
- at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:102) ~[na:na]
- at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:58) ~[na:na]
- at java.base/sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:542) ~[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]
@@ -2246,99 +566,44 @@ Caused by: java.io.IOException: 你的主机中的软件中止了一个已建立
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:329) ~[tomcat-embed-core-10.1.31.jar!/:na]
... 129 common frames omitted
-2026-09-04T00:31:58.482+08:00 ERROR 31884 --- [crm-app] [task-1] c.crm.file.task.ThumbnailGenerationTask : 缩略图生成失败:fileId=750875703636918272, thumbKey=thumbnails/750875703636918272.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-04T00:31:58.743+08:00 ERROR 31884 --- [crm-app] [task-2] c.crm.file.task.ThumbnailGenerationTask : 缩略图生成失败:fileId=750875704945541120, thumbKey=thumbnails/750875704945541120.jpg
+2026-09-05T11:30:49.113+08:00 ERROR 21796 --- [crm-app] [task-3] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=751403881929375744, thumbKey=thumbnails/751403881929375744.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-04T00:31:59.109+08:00 ERROR 31884 --- [crm-app] [task-3] c.crm.file.task.ThumbnailGenerationTask : 缩略图生成失败:fileId=750875706489044992, thumbKey=thumbnails/750875706489044992.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]
+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.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
- at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
+ 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: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.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: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
+ 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-04T00:31:59.358+08:00 WARN 31884 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67014, msg=任务已确认,请勿重复提交
-2026-09-04T00:31:59.573+08:00 WARN 31884 --- [crm-app] [task-4] c.c.c.task.CustomerImportExecutor : 客户导入单行执行异常:taskId=750875703951491072, row=1
+2026-09-05T11:30:49.346+08:00 WARN 21796 --- [crm-app] [task-4] c.c.c.task.CustomerImportExecutor : ͻ뵥ִ쳣taskId=751403894998827008, row=1
org.springframework.dao.DataIntegrityViolationException:
### Error updating database. Cause: java.sql.SQLException: Field 'is_biz_negotiated' doesn't have a default value
### The error may exist in com/crm/customer/mapper/CustomerMapper.java (best guess)
### The error may involve com.crm.customer.mapper.CustomerMapper.insert-Inline
### The error occurred while setting parameters
-### SQL: INSERT INTO customer ( id, customer_no, customer_name, customer_type, province_code, city_code, industry_code, customer_star_level, owner_user_id, owner_user_name_snapshot, owner_dept_id, owner_dept_name_snapshot, customer_stage, archive_status, last_valid_follow_time, is_child, remark, version, creator_id, create_time, updater_id, update_time, deleted ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )
+### SQL: INSERT INTO customer ( id, customer_no, customer_name, customer_type, province_code, city_code, industry_code, customer_star_level, owner_user_id, owner_user_name_snapshot, owner_dept_id, owner_dept_name_snapshot, customer_stage, archive_status, last_valid_follow_time, is_child, version, creator_id, create_time, updater_id, update_time, deleted ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )
### Cause: java.sql.SQLException: Field 'is_biz_negotiated' doesn't have a default value
; Field 'is_biz_negotiated' doesn't have a default value
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:258) ~[spring-jdbc-6.1.14.jar!/:6.1.14]
@@ -2350,21 +615,23 @@ org.springframework.dao.DataIntegrityViolationException:
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59) ~[mybatis-plus-core-3.5.7.jar!/:3.5.7]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152) ~[mybatis-plus-core-3.5.7.jar!/:3.5.7]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) ~[mybatis-plus-core-3.5.7.jar!/:3.5.7]
- at jdk.proxy2/jdk.proxy2.$Proxy228.insert(Unknown Source) ~[na:na]
- at com.crm.customer.task.CustomerImportExecutor.createCustomer(CustomerImportExecutor.java:243) ~[crm-customer-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT]
- at com.crm.customer.task.CustomerImportExecutor.doImport(CustomerImportExecutor.java:117) ~[crm-customer-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT]
+ at jdk.proxy2/jdk.proxy2.$Proxy229.insert(Unknown Source) ~[na:na]
+ at com.crm.customer.task.CustomerImportExecutor.createCustomer(CustomerImportExecutor.java:244) ~[crm-customer-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT]
+ at com.crm.customer.task.CustomerImportExecutor.doImport(CustomerImportExecutor.java:118) ~[crm-customer-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT]
at com.crm.customer.task.CustomerImportExecutor.executeImport(CustomerImportExecutor.java:74) ~[crm-customer-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 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: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]
+ 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.sql.SQLException: Field 'is_biz_negotiated' doesn't have a default value
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
@@ -2374,31 +641,35 @@ Caused by: java.sql.SQLException: Field 'is_biz_negotiated' doesn't have a defau
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java) ~[HikariCP-5.1.0.jar!/:na]
at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48) ~[mybatis-3.5.16.jar!/:3.5.16]
at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75) ~[mybatis-3.5.16.jar!/:3.5.16]
- 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 jdk.internal.reflect.GeneratedMethodAccessor72.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.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.proxy2/jdk.proxy2.$Proxy256.update(Unknown Source) ~[na:na]
- 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 jdk.proxy2/jdk.proxy2.$Proxy257.update(Unknown Source) ~[na:na]
+ at jdk.internal.reflect.GeneratedMethodAccessor72.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.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.proxy2/jdk.proxy2.$Proxy256.update(Unknown Source) ~[na:na]
+ at jdk.proxy2/jdk.proxy2.$Proxy257.update(Unknown Source) ~[na:na]
at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) ~[mybatis-3.5.16.jar!/:3.5.16]
at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) ~[mybatis-3.5.16.jar!/:3.5.16]
at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) ~[mybatis-3.5.16.jar!/:3.5.16]
- 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 jdk.internal.reflect.GeneratedMethodAccessor79.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.apache.ibatis.plugin.Invocation.proceed(Invocation.java:61) ~[mybatis-3.5.16.jar!/:3.5.16]
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) ~[mybatis-plus-extension-3.5.7.jar!/:3.5.7]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.proxy2/jdk.proxy2.$Proxy255.update(Unknown Source) ~[na:na]
+ at jdk.proxy2/jdk.proxy2.$Proxy256.update(Unknown Source) ~[na:na]
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) ~[mybatis-3.5.16.jar!/:3.5.16]
at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) ~[mybatis-3.5.16.jar!/:3.5.16]
- 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 jdk.internal.reflect.GeneratedMethodAccessor185.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.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) ~[mybatis-spring-3.0.3.jar!/:3.0.3]
- ... 20 common frames omitted
+ ... 22 common frames omitted
-2026-09-04T00:31:59.596+08:00 ERROR 31884 --- [crm-app] [task-4] c.c.c.task.CustomerImportExecutor : 客户导入任务执行失败:taskId=750875703951491072
+2026-09-05T11:30:49.379+08:00 ERROR 21796 --- [crm-app] [task-4] c.c.c.task.CustomerImportExecutor : ͻִʧܣtaskId=751403894998827008
org.springframework.dao.DataIntegrityViolationException:
### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'fail_reason' at row 1
@@ -2419,21 +690,23 @@ org.springframework.dao.DataIntegrityViolationException:
at com.baomidou.mybatisplus.core.override.MybatisMapperMethod.execute(MybatisMapperMethod.java:59) ~[mybatis-plus-core-3.5.7.jar!/:3.5.7]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy$PlainMethodInvoker.invoke(MybatisMapperProxy.java:152) ~[mybatis-plus-core-3.5.7.jar!/:3.5.7]
at com.baomidou.mybatisplus.core.override.MybatisMapperProxy.invoke(MybatisMapperProxy.java:89) ~[mybatis-plus-core-3.5.7.jar!/:3.5.7]
- at jdk.proxy2/jdk.proxy2.$Proxy236.insert(Unknown Source) ~[na:na]
- at com.crm.customer.task.CustomerImportExecutor.insertFail(CustomerImportExecutor.java:297) ~[crm-customer-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT]
- at com.crm.customer.task.CustomerImportExecutor.doImport(CustomerImportExecutor.java:147) ~[crm-customer-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT]
+ at jdk.proxy2/jdk.proxy2.$Proxy238.insert(Unknown Source) ~[na:na]
+ at com.crm.customer.task.CustomerImportExecutor.insertFail(CustomerImportExecutor.java:298) ~[crm-customer-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT]
+ at com.crm.customer.task.CustomerImportExecutor.doImport(CustomerImportExecutor.java:148) ~[crm-customer-1.0.0-SNAPSHOT.jar!/:1.0.0-SNAPSHOT]
at com.crm.customer.task.CustomerImportExecutor.executeImport(CustomerImportExecutor.java:74) ~[crm-customer-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 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: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]
+ 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: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'fail_reason' at row 1
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:104) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:912) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
@@ -2442,484 +715,16 @@ Caused by: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Da
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java) ~[HikariCP-5.1.0.jar!/:na]
at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48) ~[mybatis-3.5.16.jar!/:3.5.16]
at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75) ~[mybatis-3.5.16.jar!/:3.5.16]
- 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.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.proxy2/jdk.proxy2.$Proxy256.update(Unknown Source) ~[na:na]
- 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.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.proxy2/jdk.proxy2.$Proxy256.update(Unknown Source) ~[na:na]
- at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) ~[mybatis-3.5.16.jar!/:3.5.16]
- at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) ~[mybatis-3.5.16.jar!/:3.5.16]
- at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) ~[mybatis-3.5.16.jar!/:3.5.16]
- 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.apache.ibatis.plugin.Invocation.proceed(Invocation.java:61) ~[mybatis-3.5.16.jar!/:3.5.16]
- at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) ~[mybatis-plus-extension-3.5.7.jar!/:3.5.7]
- at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.proxy2/jdk.proxy2.$Proxy255.update(Unknown Source) ~[na:na]
- at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) ~[mybatis-3.5.16.jar!/:3.5.16]
- at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) ~[mybatis-3.5.16.jar!/:3.5.16]
- 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.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) ~[mybatis-spring-3.0.3.jar!/:3.0.3]
- ... 20 common frames omitted
-
-2026-09-04T00:32:00.010+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:32:00.010104500
-2026-09-04T00:32:00.065+08:00 INFO 31884 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:32:01.330+08:00 INFO 31884 --- [crm-app] [http-nio-8080-exec-4] .c.r.s.i.CustomerReminderRuleServiceImpl : [客户提醒规则] 全量覆盖保存:operator=739564171091247104, masterEnabled=1, firstTrigger=1/1天, secondInterval=1/1天
-2026-09-04T00:32:01.449+08:00 WARN 31884 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=64023, msg=首次触发天数与二次提醒间隔天数必须为正整数
-2026-09-04T00:32:01.562+08:00 WARN 31884 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=64023, msg=首次触发天数与二次提醒间隔天数必须为正整数
-2026-09-04T00:32:01.813+08:00 INFO 31884 --- [crm-app] [http-nio-8080-exec-10] .c.r.s.i.CustomerReminderRuleServiceImpl : [客户提醒规则] 全量覆盖保存:operator=739564171091247104, masterEnabled=0, firstTrigger=0/2天, secondInterval=0/2天
-2026-09-04T00:32:01.955+08:00 INFO 31884 --- [crm-app] [http-nio-8080-exec-1] .c.r.s.i.CustomerReminderRuleServiceImpl : [客户提醒规则] 全量覆盖保存:operator=739564171091247104, masterEnabled=1, firstTrigger=1/1天, secondInterval=1/1天
-2026-09-04T00:32:04.747+08:00 INFO 22532 --- [crm-app] [main] com.crm.app.CrmAppApplication : Starting CrmAppApplication v1.0.0-SNAPSHOT using Java 21.0.7 with PID 22532 (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-04T00:32:04.750+08:00 INFO 22532 --- [crm-app] [main] com.crm.app.CrmAppApplication : The following 1 profile is active: "verify"
-2026-09-04T00:32:06.091+08:00 INFO 22532 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
-2026-09-04T00:32:06.093+08:00 INFO 22532 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
-2026-09-04T00:32:06.128+08:00 INFO 22532 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 28 ms. Found 0 JPA repository interfaces.
-2026-09-04T00:32:06.155+08:00 INFO 22532 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
-2026-09-04T00:32:06.156+08:00 INFO 22532 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
-2026-09-04T00:32:06.166+08:00 INFO 22532 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 2 ms. Found 0 Redis repository interfaces.
-2026-09-04T00:32:06.335+08:00 WARN 22532 --- [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-04T00:32:06.336+08:00 WARN 22532 --- [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-04T00:32:06.336+08:00 WARN 22532 --- [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-04T00:32:06.336+08:00 WARN 22532 --- [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-04T00:32:06.336+08:00 WARN 22532 --- [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-04T00:32:06.336+08:00 WARN 22532 --- [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-04T00:32:06.337+08:00 WARN 22532 --- [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-04T00:32:06.337+08:00 WARN 22532 --- [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-04T00:32:06.337+08:00 WARN 22532 --- [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-04T00:32:06.337+08:00 WARN 22532 --- [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-04T00:32:06.337+08:00 WARN 22532 --- [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-04T00:32:06.337+08:00 WARN 22532 --- [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-04T00:32:06.337+08:00 WARN 22532 --- [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-04T00:32:06.337+08:00 WARN 22532 --- [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-04T00:32:06.337+08:00 WARN 22532 --- [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-04T00:32:06.337+08:00 WARN 22532 --- [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-04T00:32:06.337+08:00 WARN 22532 --- [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-04T00:32:06.337+08:00 WARN 22532 --- [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-04T00:32:06.337+08:00 WARN 22532 --- [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-04T00:32:06.337+08:00 WARN 22532 --- [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-04T00:32:06.338+08:00 WARN 22532 --- [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-04T00:32:06.338+08:00 WARN 22532 --- [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-04T00:32:06.338+08:00 WARN 22532 --- [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-04T00:32:06.338+08:00 WARN 22532 --- [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-04T00:32:06.338+08:00 WARN 22532 --- [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-04T00:32:06.338+08:00 WARN 22532 --- [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-04T00:32:06.338+08:00 WARN 22532 --- [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-04T00:32:06.338+08:00 WARN 22532 --- [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-04T00:32:06.338+08:00 WARN 22532 --- [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-04T00:32:06.338+08:00 WARN 22532 --- [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-04T00:32:06.338+08:00 WARN 22532 --- [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-04T00:32:06.338+08:00 WARN 22532 --- [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-04T00:32:06.338+08:00 WARN 22532 --- [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-04T00:32:06.339+08:00 WARN 22532 --- [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-04T00:32:06.339+08:00 WARN 22532 --- [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-04T00:32:06.339+08:00 WARN 22532 --- [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-04T00:32:06.339+08:00 WARN 22532 --- [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-04T00:32:06.339+08:00 WARN 22532 --- [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-04T00:32:06.339+08:00 WARN 22532 --- [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-04T00:32:06.339+08:00 WARN 22532 --- [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-04T00:32:06.339+08:00 WARN 22532 --- [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-04T00:32:06.339+08:00 WARN 22532 --- [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-04T00:32:06.339+08:00 WARN 22532 --- [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-04T00:32:06.339+08:00 WARN 22532 --- [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-04T00:32:06.339+08:00 WARN 22532 --- [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-04T00:32:06.339+08:00 WARN 22532 --- [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-04T00:32:06.339+08:00 WARN 22532 --- [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-04T00:32:06.339+08:00 WARN 22532 --- [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-04T00:32:06.340+08:00 WARN 22532 --- [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-04T00:32:06.340+08:00 WARN 22532 --- [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-04T00:32:06.340+08:00 WARN 22532 --- [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-04T00:32:06.340+08:00 WARN 22532 --- [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-04T00:32:06.340+08:00 WARN 22532 --- [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-04T00:32:06.340+08:00 WARN 22532 --- [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-04T00:32:06.340+08:00 WARN 22532 --- [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-04T00:32:06.340+08:00 WARN 22532 --- [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-04T00:32:06.340+08:00 WARN 22532 --- [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-04T00:32:06.340+08:00 WARN 22532 --- [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-04T00:32:06.340+08:00 WARN 22532 --- [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-04T00:32:06.340+08:00 WARN 22532 --- [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-04T00:32:06.340+08:00 WARN 22532 --- [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-04T00:32:06.341+08:00 WARN 22532 --- [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-04T00:32:06.341+08:00 WARN 22532 --- [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-04T00:32:06.341+08:00 WARN 22532 --- [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-04T00:32:06.341+08:00 WARN 22532 --- [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-04T00:32:06.341+08:00 WARN 22532 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration.
-2026-09-04T00:32:06.346+08:00 WARN 22532 --- [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-04T00:32:06.346+08:00 WARN 22532 --- [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-04T00:32:06.346+08:00 WARN 22532 --- [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-04T00:32:06.346+08:00 WARN 22532 --- [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-04T00:32:06.346+08:00 WARN 22532 --- [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-04T00:32:06.346+08:00 WARN 22532 --- [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-04T00:32:06.346+08:00 WARN 22532 --- [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-04T00:32:06.346+08:00 WARN 22532 --- [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-04T00:32:06.347+08:00 WARN 22532 --- [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-04T00:32:06.347+08:00 WARN 22532 --- [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-04T00:32:06.347+08:00 WARN 22532 --- [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-04T00:32:06.347+08:00 WARN 22532 --- [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-04T00:32:06.347+08:00 WARN 22532 --- [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-04T00:32:06.347+08:00 WARN 22532 --- [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-04T00:32:06.347+08:00 WARN 22532 --- [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-04T00:32:06.347+08:00 WARN 22532 --- [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-04T00:32:06.347+08:00 WARN 22532 --- [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-04T00:32:06.347+08:00 WARN 22532 --- [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-04T00:32:06.347+08:00 WARN 22532 --- [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-04T00:32:06.347+08:00 WARN 22532 --- [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-04T00:32:06.347+08:00 WARN 22532 --- [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-04T00:32:06.347+08:00 WARN 22532 --- [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-04T00:32:06.347+08:00 WARN 22532 --- [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-04T00:32:06.348+08:00 WARN 22532 --- [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-04T00:32:06.348+08:00 WARN 22532 --- [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-04T00:32:06.348+08:00 WARN 22532 --- [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-04T00:32:06.348+08:00 WARN 22532 --- [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-04T00:32:06.348+08:00 WARN 22532 --- [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-04T00:32:06.348+08:00 WARN 22532 --- [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-04T00:32:06.348+08:00 WARN 22532 --- [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-04T00:32:06.348+08:00 WARN 22532 --- [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-04T00:32:06.348+08:00 WARN 22532 --- [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-04T00:32:06.348+08:00 WARN 22532 --- [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-04T00:32:06.348+08:00 WARN 22532 --- [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-04T00:32:06.348+08:00 WARN 22532 --- [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-04T00:32:06.348+08:00 WARN 22532 --- [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-04T00:32:06.348+08:00 WARN 22532 --- [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-04T00:32:06.348+08:00 WARN 22532 --- [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-04T00:32:06.348+08:00 WARN 22532 --- [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-04T00:32:06.348+08:00 WARN 22532 --- [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-04T00:32:06.348+08:00 WARN 22532 --- [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-04T00:32:06.349+08:00 WARN 22532 --- [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-04T00:32:06.349+08:00 WARN 22532 --- [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-04T00:32:06.349+08:00 WARN 22532 --- [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-04T00:32:06.349+08:00 WARN 22532 --- [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-04T00:32:06.349+08:00 WARN 22532 --- [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-04T00:32:06.349+08:00 WARN 22532 --- [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-04T00:32:06.349+08:00 WARN 22532 --- [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-04T00:32:06.349+08:00 WARN 22532 --- [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-04T00:32:06.349+08:00 WARN 22532 --- [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-04T00:32:06.349+08:00 WARN 22532 --- [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-04T00:32:06.349+08:00 WARN 22532 --- [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-04T00:32:06.349+08:00 WARN 22532 --- [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-04T00:32:06.349+08:00 WARN 22532 --- [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-04T00:32:06.349+08:00 WARN 22532 --- [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-04T00:32:06.350+08:00 WARN 22532 --- [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-04T00:32:06.350+08:00 WARN 22532 --- [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-04T00:32:06.350+08:00 WARN 22532 --- [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-04T00:32:06.350+08:00 WARN 22532 --- [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-04T00:32:06.350+08:00 WARN 22532 --- [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-04T00:32:06.350+08:00 WARN 22532 --- [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-04T00:32:06.350+08:00 WARN 22532 --- [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-04T00:32:06.350+08:00 WARN 22532 --- [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-04T00:32:06.350+08:00 WARN 22532 --- [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-04T00:32:06.350+08:00 WARN 22532 --- [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-04T00:32:06.350+08:00 WARN 22532 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration.
-2026-09-04T00:32:07.164+08:00 INFO 22532 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
-2026-09-04T00:32:07.184+08:00 INFO 22532 --- [crm-app] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
-2026-09-04T00:32:07.184+08:00 INFO 22532 --- [crm-app] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.31]
-2026-09-04T00:32:07.226+08:00 INFO 22532 --- [crm-app] [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
-2026-09-04T00:32:07.227+08:00 INFO 22532 --- [crm-app] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2429 ms
-2026-09-04T00:32:07.673+08:00 INFO 22532 --- [crm-app] [main] com.crm.auth.config.PermissionConfig : 数据权限受控表扫描完成:0 张
-2026-09-04T00:32:07.795+08:00 INFO 22532 --- [crm-app] [main] com.crm.base.config.CustomIdGenerator : 雪花ID生成器初始化完成,workerId=0, datacenterId=0
-2026-09-04T00:32:08.341+08:00 INFO 22532 --- [crm-app] [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
-2026-09-04T00:32:08.406+08:00 INFO 22532 --- [crm-app] [main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.5.3.Final
-2026-09-04T00:32:08.446+08:00 INFO 22532 --- [crm-app] [main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled
-2026-09-04T00:32:08.760+08:00 INFO 22532 --- [crm-app] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer
-2026-09-04T00:32:08.795+08:00 INFO 22532 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
-2026-09-04T00:32:09.358+08:00 INFO 22532 --- [crm-app] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@1407b93f
-2026-09-04T00:32:09.361+08:00 INFO 22532 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
-2026-09-04T00:32:09.552+08:00 WARN 22532 --- [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-04T00:32:11.197+08:00 INFO 22532 --- [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-04T00:32:26.018+08:00 INFO 22532 --- [crm-app] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
-2026-09-04T00:32:26.474+08:00 WARN 22532 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================
-2026-09-04T00:32:26.475+08:00 WARN 22532 --- [crm-app] [main] c.c.a.controller.DebugTokenController : 调试 token 接口 /api/auth/debug/token 已启用(verify profile)
-2026-09-04T00:32:26.475+08:00 WARN 22532 --- [crm-app] [main] c.c.a.controller.DebugTokenController : 严禁用于生产环境!任何知道 userId 的人可冒充该用户。
-2026-09-04T00:32:26.475+08:00 WARN 22532 --- [crm-app] [main] c.c.a.controller.DebugTokenController : 参见 docs/adr/0014-verify-profile-debug-token-endpoint.md
-2026-09-04T00:32:26.475+08:00 WARN 22532 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================
-2026-09-04T00:32:28.709+08:00 INFO 22532 --- [crm-app] [main] c.c.c.p.i.NgramNameSimilarityPortImpl : CustomerNameSimilarityPort 一期实现就绪(预筛模式:FULLTEXT ngram)
-2026-09-04T00:32:28.889+08:00 INFO 22532 --- [crm-app] [main] c.c.c.p.impl.StubCompanyLookupPortImpl : CompanyLookupPort 一期 stub 已装配(企查查未接入,工商候选返回空)
-2026-09-04T00:32:29.108+08:00 INFO 22532 --- [crm-app] [main] c.c.c.p.i.NoopProjectOwnerSyncPortImpl : ProjectOwnerSyncPort no-op 默认实现已装配(A5 项目模块未建,owner 同步跳过)
-2026-09-04T00:32:29.172+08:00 INFO 22532 --- [crm-app] [main] c.c.p.i.NoopOpportunityOwnerSyncPortImpl : OpportunityOwnerSyncPort no-op 默认实现已装配(票 11 接商机真源后替换)
-2026-09-04T00:32:29.341+08:00 WARN 22532 --- [crm-app] [main] .s.s.UserDetailsServiceAutoConfiguration :
-
-Using generated security password: 949d4766-52f7-4538-8def-47edfb8cb2d5
-
-This generated password is for development use only. Your security configuration must be updated before running your application in production.
-
-2026-09-04T00:32:29.363+08:00 INFO 22532 --- [crm-app] [main] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager
-2026-09-04T00:32:30.401+08:00 INFO 22532 --- [crm-app] [main] c.c.a.c.DataScopeModuleStartupValidator : 数据权限模块校验通过:0 张受控表,4 个注册模块
-2026-09-04T00:32:30.424+08:00 INFO 22532 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
-2026-09-04T00:32:30.446+08:00 INFO 22532 --- [crm-app] [main] com.crm.app.CrmAppApplication : Started CrmAppApplication in 26.167 seconds (process running for 26.854)
-2026-09-04T00:32:30.450+08:00 INFO 22532 --- [crm-app] [main] com.crm.auth.config.DataInitializer : 执行权限数据初始化检查...
-2026-09-04T00:32:31.191+08:00 INFO 22532 --- [crm-app] [main] com.crm.auth.config.DataInitializer : 权限数据初始化检查完成
-2026-09-04T00:32:31.191+08:00 INFO 22532 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : 执行数据字典权限种子化检查...
-2026-09-04T00:32:31.610+08:00 INFO 22532 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : 数据字典权限种子化检查完成:10 个权限点
-2026-09-04T00:32:31.610+08:00 INFO 22532 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : 执行线索规则权限种子化检查(仅菜单)...
-2026-09-04T00:32:31.718+08:00 INFO 22532 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : 线索规则权限种子化检查完成:仅菜单(0 个 button)
-2026-09-04T00:32:31.718+08:00 INFO 22532 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : 执行行政区划全量种子导入检查...
-2026-09-04T00:32:33.177+08:00 INFO 22532 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : 行政区划种子导入完成:对账 3432 行(省 34 / 市 342 / 区 3056),存量 3432 行,新增 0 行
-2026-09-04T00:32:33.177+08:00 INFO 22532 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : 执行线索管理权限种子化检查(仅菜单)...
-2026-09-04T00:32:33.599+08:00 INFO 22532 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : 线索管理权限种子化检查完成:4 个菜单(0 个 button)
-2026-09-04T00:32:33.600+08:00 INFO 22532 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : 执行商机规则权限种子化检查(仅菜单)...
-2026-09-04T00:32:33.702+08:00 INFO 22532 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : 商机规则权限种子化检查完成:仅菜单(0 个 button)
-2026-09-04T00:32:33.702+08:00 INFO 22532 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : 执行客户提醒规则权限种子化检查(仅菜单)...
-2026-09-04T00:32:33.804+08:00 INFO 22532 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : 客户提醒规则权限种子化检查完成:仅菜单(0 个 button)
-2026-09-04T00:32:33.804+08:00 INFO 22532 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : 执行商机阶段模板权限种子化检查(仅菜单)...
-2026-09-04T00:32:33.908+08:00 INFO 22532 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : 商机阶段模板权限种子化检查完成:仅菜单(0 个 button)
-2026-09-04T00:32:33.908+08:00 INFO 22532 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : 执行方案卡系统字段库种子化检查...
-2026-09-04T00:32:33.921+08:00 INFO 22532 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : 方案卡系统字段库种子化检查完成:现存 16 个,新增 0 个
-2026-09-04T00:32:33.937+08:00 INFO 22532 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : 方案卡兜底模板已存在(code=OPP_SCHEME_TPL_01,含已停用),跳过种子化
-2026-09-04T00:32:33.937+08:00 INFO 22532 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : 执行方案卡模板权限种子化检查(仅菜单)...
-2026-09-04T00:32:34.039+08:00 INFO 22532 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : 方案卡模板权限种子化检查完成:仅菜单(0 个 button)
-2026-09-04T00:32:34.055+08:00 INFO 22532 --- [crm-app] [main] c.c.r.config.StageTemplateInitializer : 默认阶段模板已存在(code=OPP_STAGE_TPL_01,含已停用),跳过种子化
-2026-09-04T00:32:34.069+08:00 INFO 22532 --- [crm-app] [main] c.c.r.c.CustomerReminderRuleInitializer : 客户提醒规则单例已存在(id=1),跳过种子化
-2026-09-04T00:32:34.081+08:00 INFO 22532 --- [crm-app] [main] c.c.c.c.CustomerFulltextIndexInitializer : customer FULLTEXT 索引 idx_name_fulltext 已存在,跳过
-2026-09-04T00:32:34.255+08:00 INFO 22532 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : 执行内置字典幂等初始化检查...
-2026-09-04T00:32:35.417+08:00 INFO 22532 --- [crm-app] [http-nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
-2026-09-04T00:32:35.417+08:00 INFO 22532 --- [crm-app] [http-nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
-2026-09-04T00:32:35.418+08:00 INFO 22532 --- [crm-app] [http-nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
-2026-09-04T00:32:44.294+08:00 INFO 22532 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : 内置字典幂等初始化检查完成:24 个分组
-2026-09-04T00:33:00.018+08:00 INFO 22532 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:33:00.018664400
-2026-09-04T00:33:00.079+08:00 INFO 22532 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:33:30.002+08:00 INFO 22532 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:33:30.002177800
-2026-09-04T00:33:30.054+08:00 INFO 22532 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:34:00.009+08:00 INFO 22532 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:34:00.009578800
-2026-09-04T00:34:00.061+08:00 INFO 22532 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:34:30.001+08:00 INFO 22532 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:34:30.001073300
-2026-09-04T00:34:30.051+08:00 INFO 22532 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:35:00.010+08:00 INFO 22532 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:35:00.010265900
-2026-09-04T00:35:00.090+08:00 INFO 22532 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 30 条
-2026-09-04T00:35:30.005+08:00 INFO 22532 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:35:30.005059400
-2026-09-04T00:35:30.055+08:00 INFO 22532 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:36:00.008+08:00 INFO 22532 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 开始,now=2026-09-04T00:36:00.008122300
-2026-09-04T00:36:00.058+08:00 INFO 22532 --- [crm-app] [scheduling-1] c.crm.customer.job.CustomerReminderJob : [客户提醒Job] 完成:新增待发 0 条,旧锚点失效 0 条
-2026-09-04T00:36:07.855+08:00 INFO 22532 --- [crm-app] [http-nio-8080-exec-5] .c.r.s.i.CustomerReminderRuleServiceImpl : [客户提醒规则] 全量覆盖保存:operator=739564171091247104, masterEnabled=1, firstTrigger=1/30天, secondInterval=1/7天
-2026-09-04T00:36:10.796+08:00 INFO 10812 --- [crm-app] [main] com.crm.app.CrmAppApplication : Starting CrmAppApplication v1.0.0-SNAPSHOT using Java 21.0.7 with PID 10812 (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-04T00:36:10.798+08:00 INFO 10812 --- [crm-app] [main] com.crm.app.CrmAppApplication : The following 1 profile is active: "verify"
-2026-09-04T00:36:12.139+08:00 INFO 10812 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
-2026-09-04T00:36:12.142+08:00 INFO 10812 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
-2026-09-04T00:36:12.171+08:00 INFO 10812 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 20 ms. Found 0 JPA repository interfaces.
-2026-09-04T00:36:12.190+08:00 INFO 10812 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
-2026-09-04T00:36:12.191+08:00 INFO 10812 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
-2026-09-04T00:36:12.201+08:00 INFO 10812 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 2 ms. Found 0 Redis repository interfaces.
-2026-09-04T00:36:12.363+08:00 WARN 10812 --- [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-04T00:36:12.364+08:00 WARN 10812 --- [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-04T00:36:12.364+08:00 WARN 10812 --- [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-04T00:36:12.364+08:00 WARN 10812 --- [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-04T00:36:12.364+08:00 WARN 10812 --- [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-04T00:36:12.364+08:00 WARN 10812 --- [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-04T00:36:12.364+08:00 WARN 10812 --- [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-04T00:36:12.364+08:00 WARN 10812 --- [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-04T00:36:12.364+08:00 WARN 10812 --- [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-04T00:36:12.364+08:00 WARN 10812 --- [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-04T00:36:12.364+08:00 WARN 10812 --- [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-04T00:36:12.364+08:00 WARN 10812 --- [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-04T00:36:12.365+08:00 WARN 10812 --- [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-04T00:36:12.365+08:00 WARN 10812 --- [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-04T00:36:12.365+08:00 WARN 10812 --- [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-04T00:36:12.365+08:00 WARN 10812 --- [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-04T00:36:12.365+08:00 WARN 10812 --- [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-04T00:36:12.365+08:00 WARN 10812 --- [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-04T00:36:12.365+08:00 WARN 10812 --- [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-04T00:36:12.365+08:00 WARN 10812 --- [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-04T00:36:12.365+08:00 WARN 10812 --- [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-04T00:36:12.365+08:00 WARN 10812 --- [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-04T00:36:12.365+08:00 WARN 10812 --- [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-04T00:36:12.365+08:00 WARN 10812 --- [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-04T00:36:12.365+08:00 WARN 10812 --- [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-04T00:36:12.365+08:00 WARN 10812 --- [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-04T00:36:12.365+08:00 WARN 10812 --- [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-04T00:36:12.365+08:00 WARN 10812 --- [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-04T00:36:12.365+08:00 WARN 10812 --- [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-04T00:36:12.366+08:00 WARN 10812 --- [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-04T00:36:12.366+08:00 WARN 10812 --- [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-04T00:36:12.366+08:00 WARN 10812 --- [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-04T00:36:12.366+08:00 WARN 10812 --- [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-04T00:36:12.366+08:00 WARN 10812 --- [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-04T00:36:12.366+08:00 WARN 10812 --- [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-04T00:36:12.366+08:00 WARN 10812 --- [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-04T00:36:12.366+08:00 WARN 10812 --- [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-04T00:36:12.366+08:00 WARN 10812 --- [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-04T00:36:12.366+08:00 WARN 10812 --- [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-04T00:36:12.366+08:00 WARN 10812 --- [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-04T00:36:12.366+08:00 WARN 10812 --- [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-04T00:36:12.366+08:00 WARN 10812 --- [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-04T00:36:12.366+08:00 WARN 10812 --- [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-04T00:36:12.366+08:00 WARN 10812 --- [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-04T00:36:12.366+08:00 WARN 10812 --- [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-04T00:36:12.366+08:00 WARN 10812 --- [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-04T00:36:12.366+08:00 WARN 10812 --- [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-04T00:36:12.366+08:00 WARN 10812 --- [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-04T00:36:12.367+08:00 WARN 10812 --- [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-04T00:36:12.367+08:00 WARN 10812 --- [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-04T00:36:12.367+08:00 WARN 10812 --- [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-04T00:36:12.367+08:00 WARN 10812 --- [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-04T00:36:12.367+08:00 WARN 10812 --- [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-04T00:36:12.367+08:00 WARN 10812 --- [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-04T00:36:12.367+08:00 WARN 10812 --- [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-04T00:36:12.367+08:00 WARN 10812 --- [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-04T00:36:12.367+08:00 WARN 10812 --- [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-04T00:36:12.367+08:00 WARN 10812 --- [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-04T00:36:12.367+08:00 WARN 10812 --- [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-04T00:36:12.367+08:00 WARN 10812 --- [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-04T00:36:12.367+08:00 WARN 10812 --- [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-04T00:36:12.367+08:00 WARN 10812 --- [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-04T00:36:12.367+08:00 WARN 10812 --- [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-04T00:36:12.367+08:00 WARN 10812 --- [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-04T00:36:12.367+08:00 WARN 10812 --- [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-04T00:36:12.368+08:00 WARN 10812 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration.
-2026-09-04T00:36:12.371+08:00 WARN 10812 --- [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-04T00:36:12.371+08:00 WARN 10812 --- [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-04T00:36:12.371+08:00 WARN 10812 --- [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-04T00:36:12.371+08:00 WARN 10812 --- [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-04T00:36:12.371+08:00 WARN 10812 --- [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-04T00:36:12.371+08:00 WARN 10812 --- [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-04T00:36:12.371+08:00 WARN 10812 --- [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-04T00:36:12.371+08:00 WARN 10812 --- [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-04T00:36:12.372+08:00 WARN 10812 --- [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-04T00:36:12.372+08:00 WARN 10812 --- [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-04T00:36:12.372+08:00 WARN 10812 --- [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-04T00:36:12.372+08:00 WARN 10812 --- [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-04T00:36:12.372+08:00 WARN 10812 --- [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-04T00:36:12.372+08:00 WARN 10812 --- [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-04T00:36:12.372+08:00 WARN 10812 --- [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-04T00:36:12.372+08:00 WARN 10812 --- [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-04T00:36:12.372+08:00 WARN 10812 --- [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-04T00:36:12.372+08:00 WARN 10812 --- [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-04T00:36:12.372+08:00 WARN 10812 --- [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-04T00:36:12.372+08:00 WARN 10812 --- [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-04T00:36:12.372+08:00 WARN 10812 --- [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-04T00:36:12.372+08:00 WARN 10812 --- [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-04T00:36:12.372+08:00 WARN 10812 --- [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-04T00:36:12.372+08:00 WARN 10812 --- [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-04T00:36:12.372+08:00 WARN 10812 --- [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-04T00:36:12.372+08:00 WARN 10812 --- [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-04T00:36:12.372+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.373+08:00 WARN 10812 --- [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-04T00:36:12.374+08:00 WARN 10812 --- [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-04T00:36:12.374+08:00 WARN 10812 --- [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-04T00:36:12.374+08:00 WARN 10812 --- [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-04T00:36:12.374+08:00 WARN 10812 --- [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-04T00:36:12.374+08:00 WARN 10812 --- [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-04T00:36:12.374+08:00 WARN 10812 --- [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-04T00:36:12.374+08:00 WARN 10812 --- [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-04T00:36:12.374+08:00 WARN 10812 --- [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-04T00:36:12.374+08:00 WARN 10812 --- [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-04T00:36:12.374+08:00 WARN 10812 --- [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-04T00:36:12.374+08:00 WARN 10812 --- [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-04T00:36:12.374+08:00 WARN 10812 --- [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-04T00:36:12.374+08:00 WARN 10812 --- [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-04T00:36:12.374+08:00 WARN 10812 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration.
-2026-09-04T00:36:13.125+08:00 INFO 10812 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
-2026-09-04T00:36:13.141+08:00 INFO 10812 --- [crm-app] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
-2026-09-04T00:36:13.142+08:00 INFO 10812 --- [crm-app] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.31]
-2026-09-04T00:36:13.179+08:00 INFO 10812 --- [crm-app] [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
-2026-09-04T00:36:13.180+08:00 INFO 10812 --- [crm-app] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2329 ms
-2026-09-04T00:36:13.614+08:00 INFO 10812 --- [crm-app] [main] com.crm.auth.config.PermissionConfig : 数据权限受控表扫描完成:0 张
-2026-09-04T00:36:13.739+08:00 INFO 10812 --- [crm-app] [main] com.crm.base.config.CustomIdGenerator : 雪花ID生成器初始化完成,workerId=0, datacenterId=0
-2026-09-04T00:36:14.295+08:00 INFO 10812 --- [crm-app] [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
-2026-09-04T00:36:14.354+08:00 INFO 10812 --- [crm-app] [main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.5.3.Final
-2026-09-04T00:36:14.389+08:00 INFO 10812 --- [crm-app] [main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled
-2026-09-04T00:36:14.710+08:00 INFO 10812 --- [crm-app] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer
-2026-09-04T00:36:14.749+08:00 INFO 10812 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
-2026-09-04T00:36:15.296+08:00 INFO 10812 --- [crm-app] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@278df226
-2026-09-04T00:36:15.298+08:00 INFO 10812 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
-2026-09-04T00:36:15.371+08:00 WARN 10812 --- [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-04T00:36:17.016+08:00 INFO 10812 --- [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-04T00:36:31.418+08:00 INFO 10812 --- [crm-app] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
-2026-09-04T00:36:31.809+08:00 WARN 10812 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================
-2026-09-04T00:36:31.809+08:00 WARN 10812 --- [crm-app] [main] c.c.a.controller.DebugTokenController : 调试 token 接口 /api/auth/debug/token 已启用(verify profile)
-2026-09-04T00:36:31.809+08:00 WARN 10812 --- [crm-app] [main] c.c.a.controller.DebugTokenController : 严禁用于生产环境!任何知道 userId 的人可冒充该用户。
-2026-09-04T00:36:31.809+08:00 WARN 10812 --- [crm-app] [main] c.c.a.controller.DebugTokenController : 参见 docs/adr/0014-verify-profile-debug-token-endpoint.md
-2026-09-04T00:36:31.809+08:00 WARN 10812 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================
-2026-09-04T00:36:33.594+08:00 INFO 10812 --- [crm-app] [main] c.c.c.p.i.NgramNameSimilarityPortImpl : CustomerNameSimilarityPort 一期实现就绪(预筛模式:FULLTEXT ngram)
-2026-09-04T00:36:33.727+08:00 INFO 10812 --- [crm-app] [main] c.c.c.p.impl.StubCompanyLookupPortImpl : CompanyLookupPort 一期 stub 已装配(企查查未接入,工商候选返回空)
-2026-09-04T00:36:33.937+08:00 INFO 10812 --- [crm-app] [main] c.c.c.p.i.NoopProjectOwnerSyncPortImpl : ProjectOwnerSyncPort no-op 默认实现已装配(A5 项目模块未建,owner 同步跳过)
-2026-09-04T00:36:34.011+08:00 INFO 10812 --- [crm-app] [main] c.c.p.i.NoopOpportunityOwnerSyncPortImpl : OpportunityOwnerSyncPort no-op 默认实现已装配(票 11 接商机真源后替换)
-2026-09-04T00:36:34.155+08:00 WARN 10812 --- [crm-app] [main] .s.s.UserDetailsServiceAutoConfiguration :
-
-Using generated security password: c0c412d7-9158-456e-bed7-8924ab3a3f28
-
-This generated password is for development use only. Your security configuration must be updated before running your application in production.
-
-2026-09-04T00:36:34.169+08:00 INFO 10812 --- [crm-app] [main] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager
-2026-09-04T00:36:35.069+08:00 INFO 10812 --- [crm-app] [main] c.c.a.c.DataScopeModuleStartupValidator : 数据权限模块校验通过:0 张受控表,4 个注册模块
-2026-09-04T00:36:35.093+08:00 INFO 10812 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
-2026-09-04T00:36:35.155+08:00 INFO 10812 --- [crm-app] [main] com.crm.app.CrmAppApplication : Started CrmAppApplication in 24.784 seconds (process running for 25.517)
-2026-09-04T00:36:35.159+08:00 INFO 10812 --- [crm-app] [main] com.crm.auth.config.DataInitializer : 执行权限数据初始化检查...
-2026-09-04T00:36:35.386+08:00 INFO 10812 --- [crm-app] [http-nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
-2026-09-04T00:36:35.386+08:00 INFO 10812 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
-2026-09-04T00:36:35.388+08:00 INFO 10812 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
-2026-09-04T00:36:35.927+08:00 INFO 10812 --- [crm-app] [main] com.crm.auth.config.DataInitializer : 权限数据初始化检查完成
-2026-09-04T00:36:35.928+08:00 INFO 10812 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : 执行数据字典权限种子化检查...
-2026-09-04T00:36:36.356+08:00 INFO 10812 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : 数据字典权限种子化检查完成:10 个权限点
-2026-09-04T00:36:36.357+08:00 INFO 10812 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : 执行线索规则权限种子化检查(仅菜单)...
-2026-09-04T00:36:36.466+08:00 INFO 10812 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : 线索规则权限种子化检查完成:仅菜单(0 个 button)
-2026-09-04T00:36:36.466+08:00 INFO 10812 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : 执行线索管理权限种子化检查(仅菜单)...
-2026-09-04T00:36:36.896+08:00 INFO 10812 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : 线索管理权限种子化检查完成:4 个菜单(0 个 button)
-2026-09-04T00:36:36.897+08:00 INFO 10812 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : 执行行政区划全量种子导入检查...
-2026-09-04T00:36:37.538+08:00 WARN 10812 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : 业务异常:code=67003, msg=统一社会信用代码已被占用:系统已存在该企业
-2026-09-04T00:36:37.824+08:00 INFO 10812 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : 行政区划种子导入完成:对账 3432 行(省 34 / 市 342 / 区 3056),存量 3432 行,新增 0 行
-2026-09-04T00:36:37.824+08:00 INFO 10812 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : 执行商机规则权限种子化检查(仅菜单)...
-2026-09-04T00:36:37.929+08:00 INFO 10812 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : 商机规则权限种子化检查完成:仅菜单(0 个 button)
-2026-09-04T00:36:37.929+08:00 INFO 10812 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : 执行商机阶段模板权限种子化检查(仅菜单)...
-2026-09-04T00:36:38.035+08:00 INFO 10812 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : 商机阶段模板权限种子化检查完成:仅菜单(0 个 button)
-2026-09-04T00:36:38.036+08:00 INFO 10812 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : 执行客户提醒规则权限种子化检查(仅菜单)...
-2026-09-04T00:36:38.143+08:00 INFO 10812 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : 客户提醒规则权限种子化检查完成:仅菜单(0 个 button)
-2026-09-04T00:36:38.143+08:00 INFO 10812 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : 执行方案卡系统字段库种子化检查...
-2026-09-04T00:36:38.157+08:00 INFO 10812 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : 方案卡系统字段库种子化检查完成:现存 16 个,新增 0 个
-2026-09-04T00:36:38.174+08:00 INFO 10812 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : 方案卡兜底模板已存在(code=OPP_SCHEME_TPL_01,含已停用),跳过种子化
-2026-09-04T00:36:38.174+08:00 INFO 10812 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : 执行方案卡模板权限种子化检查(仅菜单)...
-2026-09-04T00:36:38.278+08:00 INFO 10812 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : 方案卡模板权限种子化检查完成:仅菜单(0 个 button)
-2026-09-04T00:36:38.293+08:00 INFO 10812 --- [crm-app] [main] c.c.r.config.StageTemplateInitializer : 默认阶段模板已存在(code=OPP_STAGE_TPL_01,含已停用),跳过种子化
-2026-09-04T00:36:38.307+08:00 INFO 10812 --- [crm-app] [main] c.c.r.c.CustomerReminderRuleInitializer : 客户提醒规则单例已存在(id=1),跳过种子化
-2026-09-04T00:36:38.515+08:00 INFO 10812 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : 执行内置字典幂等初始化检查...
-2026-09-04T00:36:48.797+08:00 INFO 10812 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : 内置字典幂等初始化检查完成:24 个分组
-2026-09-04T00:36:48.810+08:00 INFO 10812 --- [crm-app] [main] c.c.c.c.CustomerFulltextIndexInitializer : customer FULLTEXT 索引 idx_name_fulltext 已存在,跳过
-=======
- at java.base/java.lang.Thread.run(Thread.java:842) ~[na:na]
-Caused by: java.sql.SQLSyntaxErrorException: Table 'crm.customer_oplog' doesn't exist
- at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:121) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
- at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
- at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:912) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
- at com.mysql.cj.jdbc.ClientPreparedStatement.execute(ClientPreparedStatement.java:354) ~[mysql-connector-j-8.3.0.jar!/:8.3.0]
- at com.zaxxer.hikari.pool.ProxyPreparedStatement.execute(ProxyPreparedStatement.java:44) ~[HikariCP-5.1.0.jar!/:na]
- at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.execute(HikariProxyPreparedStatement.java) ~[HikariCP-5.1.0.jar!/:na]
- at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:48) ~[mybatis-3.5.16.jar!/:3.5.16]
- at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:75) ~[mybatis-3.5.16.jar!/:3.5.16]
at jdk.internal.reflect.GeneratedMethodAccessor72.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.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.proxy2/jdk.proxy2.$Proxy255.update(Unknown Source) ~[na:na]
+ at jdk.proxy2/jdk.proxy2.$Proxy257.update(Unknown Source) ~[na:na]
at jdk.internal.reflect.GeneratedMethodAccessor72.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.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.proxy2/jdk.proxy2.$Proxy255.update(Unknown Source) ~[na:na]
+ at jdk.proxy2/jdk.proxy2.$Proxy257.update(Unknown Source) ~[na:na]
at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:50) ~[mybatis-3.5.16.jar!/:3.5.16]
at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) ~[mybatis-3.5.16.jar!/:3.5.16]
at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) ~[mybatis-3.5.16.jar!/:3.5.16]
@@ -2929,785 +734,12 @@ Caused by: java.sql.SQLSyntaxErrorException: Table 'crm.customer_oplog' doesn't
at org.apache.ibatis.plugin.Invocation.proceed(Invocation.java:61) ~[mybatis-3.5.16.jar!/:3.5.16]
at com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor.intercept(MybatisPlusInterceptor.java:106) ~[mybatis-plus-extension-3.5.7.jar!/:3.5.7]
at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:59) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.proxy2/jdk.proxy2.$Proxy254.update(Unknown Source) ~[na:na]
+ at jdk.proxy2/jdk.proxy2.$Proxy256.update(Unknown Source) ~[na:na]
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:197) ~[mybatis-3.5.16.jar!/:3.5.16]
at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:184) ~[mybatis-3.5.16.jar!/:3.5.16]
- at jdk.internal.reflect.GeneratedMethodAccessor114.invoke(Unknown Source) ~[na:na]
+ at jdk.internal.reflect.GeneratedMethodAccessor185.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.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:425) ~[mybatis-spring-3.0.3.jar!/:3.0.3]
- ... 129 common frames omitted
-
-2026-09-03T14:28:38.465+08:00 INFO 2472 --- [crm-app] [main] com.crm.app.CrmAppApplication : Starting CrmAppApplication v1.0.0-SNAPSHOT using Java 17.0.15 with PID 2472 (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-03T14:28:38.468+08:00 INFO 2472 --- [crm-app] [main] com.crm.app.CrmAppApplication : The following 1 profile is active: "verify"
-2026-09-03T14:28:40.367+08:00 INFO 2472 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
-2026-09-03T14:28:40.370+08:00 INFO 2472 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
-2026-09-03T14:28:40.425+08:00 INFO 2472 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 38 ms. Found 0 JPA repository interfaces.
-2026-09-03T14:28:40.456+08:00 INFO 2472 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
-2026-09-03T14:28:40.458+08:00 INFO 2472 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
-2026-09-03T14:28:40.474+08:00 INFO 2472 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 3 ms. Found 0 Redis repository interfaces.
-2026-09-03T14:28:40.696+08:00 WARN 2472 --- [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-03T14:28:40.697+08:00 WARN 2472 --- [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-03T14:28:40.698+08:00 WARN 2472 --- [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-03T14:28:40.698+08:00 WARN 2472 --- [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-03T14:28:40.700+08:00 WARN 2472 --- [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-03T14:28:40.700+08:00 WARN 2472 --- [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-03T14:28:40.701+08:00 WARN 2472 --- [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-03T14:28:40.702+08:00 WARN 2472 --- [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-03T14:28:40.702+08:00 WARN 2472 --- [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-03T14:28:40.703+08:00 WARN 2472 --- [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-03T14:28:40.704+08:00 WARN 2472 --- [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-03T14:28:40.705+08:00 WARN 2472 --- [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-03T14:28:40.705+08:00 WARN 2472 --- [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-03T14:28:40.706+08:00 WARN 2472 --- [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-03T14:28:40.706+08:00 WARN 2472 --- [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-03T14:28:40.707+08:00 WARN 2472 --- [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-03T14:28:40.707+08:00 WARN 2472 --- [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-03T14:28:40.708+08:00 WARN 2472 --- [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-03T14:28:40.708+08:00 WARN 2472 --- [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-03T14:28:40.710+08:00 WARN 2472 --- [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-03T14:28:40.711+08:00 WARN 2472 --- [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-03T14:28:40.712+08:00 WARN 2472 --- [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-03T14:28:40.712+08:00 WARN 2472 --- [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-03T14:28:40.713+08:00 WARN 2472 --- [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-03T14:28:40.713+08:00 WARN 2472 --- [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-03T14:28:40.714+08:00 WARN 2472 --- [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-03T14:28:40.714+08:00 WARN 2472 --- [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-03T14:28:40.715+08:00 WARN 2472 --- [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-03T14:28:40.715+08:00 WARN 2472 --- [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-03T14:28:40.716+08:00 WARN 2472 --- [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-03T14:28:40.716+08:00 WARN 2472 --- [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-03T14:28:40.717+08:00 WARN 2472 --- [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-03T14:28:40.719+08:00 WARN 2472 --- [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-03T14:28:40.719+08:00 WARN 2472 --- [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-03T14:28:40.720+08:00 WARN 2472 --- [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-03T14:28:40.720+08:00 WARN 2472 --- [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-03T14:28:40.721+08:00 WARN 2472 --- [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-03T14:28:40.721+08:00 WARN 2472 --- [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-03T14:28:40.721+08:00 WARN 2472 --- [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-03T14:28:40.722+08:00 WARN 2472 --- [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-03T14:28:40.722+08:00 WARN 2472 --- [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-03T14:28:40.723+08:00 WARN 2472 --- [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-03T14:28:40.725+08:00 WARN 2472 --- [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-03T14:28:40.726+08:00 WARN 2472 --- [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-03T14:28:40.726+08:00 WARN 2472 --- [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-03T14:28:40.727+08:00 WARN 2472 --- [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-03T14:28:40.728+08:00 WARN 2472 --- [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-03T14:28:40.729+08:00 WARN 2472 --- [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-03T14:28:40.729+08:00 WARN 2472 --- [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-03T14:28:40.730+08:00 WARN 2472 --- [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-03T14:28:40.731+08:00 WARN 2472 --- [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-03T14:28:40.731+08:00 WARN 2472 --- [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-03T14:28:40.732+08:00 WARN 2472 --- [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-03T14:28:40.732+08:00 WARN 2472 --- [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-03T14:28:40.733+08:00 WARN 2472 --- [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-03T14:28:40.735+08:00 WARN 2472 --- [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-03T14:28:40.736+08:00 WARN 2472 --- [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-03T14:28:40.737+08:00 WARN 2472 --- [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-03T14:28:40.737+08:00 WARN 2472 --- [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-03T14:28:40.738+08:00 WARN 2472 --- [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-03T14:28:40.738+08:00 WARN 2472 --- [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-03T14:28:40.739+08:00 WARN 2472 --- [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-03T14:28:40.740+08:00 WARN 2472 --- [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-03T14:28:40.741+08:00 WARN 2472 --- [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-03T14:28:40.742+08:00 WARN 2472 --- [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-03T14:28:40.743+08:00 WARN 2472 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration.
-2026-09-03T14:28:40.747+08:00 WARN 2472 --- [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-03T14:28:40.748+08:00 WARN 2472 --- [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-03T14:28:40.748+08:00 WARN 2472 --- [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-03T14:28:40.749+08:00 WARN 2472 --- [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-03T14:28:40.749+08:00 WARN 2472 --- [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-03T14:28:40.750+08:00 WARN 2472 --- [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-03T14:28:40.750+08:00 WARN 2472 --- [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-03T14:28:40.751+08:00 WARN 2472 --- [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-03T14:28:40.752+08:00 WARN 2472 --- [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-03T14:28:40.753+08:00 WARN 2472 --- [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-03T14:28:40.754+08:00 WARN 2472 --- [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-03T14:28:40.754+08:00 WARN 2472 --- [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-03T14:28:40.755+08:00 WARN 2472 --- [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-03T14:28:40.755+08:00 WARN 2472 --- [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-03T14:28:40.756+08:00 WARN 2472 --- [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-03T14:28:40.757+08:00 WARN 2472 --- [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-03T14:28:40.757+08:00 WARN 2472 --- [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-03T14:28:40.758+08:00 WARN 2472 --- [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-03T14:28:40.758+08:00 WARN 2472 --- [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-03T14:28:40.758+08:00 WARN 2472 --- [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-03T14:28:40.759+08:00 WARN 2472 --- [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-03T14:28:40.759+08:00 WARN 2472 --- [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-03T14:28:40.760+08:00 WARN 2472 --- [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-03T14:28:40.761+08:00 WARN 2472 --- [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-03T14:28:40.761+08:00 WARN 2472 --- [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-03T14:28:40.762+08:00 WARN 2472 --- [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-03T14:28:40.762+08:00 WARN 2472 --- [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-03T14:28:40.763+08:00 WARN 2472 --- [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-03T14:28:40.763+08:00 WARN 2472 --- [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-03T14:28:40.763+08:00 WARN 2472 --- [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-03T14:28:40.764+08:00 WARN 2472 --- [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-03T14:28:40.764+08:00 WARN 2472 --- [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-03T14:28:40.765+08:00 WARN 2472 --- [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-03T14:28:40.765+08:00 WARN 2472 --- [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-03T14:28:40.765+08:00 WARN 2472 --- [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-03T14:28:40.766+08:00 WARN 2472 --- [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-03T14:28:40.766+08:00 WARN 2472 --- [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-03T14:28:40.766+08:00 WARN 2472 --- [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-03T14:28:40.767+08:00 WARN 2472 --- [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-03T14:28:40.767+08:00 WARN 2472 --- [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-03T14:28:40.767+08:00 WARN 2472 --- [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-03T14:28:40.768+08:00 WARN 2472 --- [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-03T14:28:40.768+08:00 WARN 2472 --- [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-03T14:28:40.769+08:00 WARN 2472 --- [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-03T14:28:40.770+08:00 WARN 2472 --- [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-03T14:28:40.773+08:00 WARN 2472 --- [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-03T14:28:40.773+08:00 WARN 2472 --- [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-03T14:28:40.774+08:00 WARN 2472 --- [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-03T14:28:40.774+08:00 WARN 2472 --- [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-03T14:28:40.775+08:00 WARN 2472 --- [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-03T14:28:40.778+08:00 WARN 2472 --- [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-03T14:28:40.779+08:00 WARN 2472 --- [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-03T14:28:40.779+08:00 WARN 2472 --- [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-03T14:28:40.780+08:00 WARN 2472 --- [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-03T14:28:40.780+08:00 WARN 2472 --- [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-03T14:28:40.781+08:00 WARN 2472 --- [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-03T14:28:40.781+08:00 WARN 2472 --- [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-03T14:28:40.782+08:00 WARN 2472 --- [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-03T14:28:40.782+08:00 WARN 2472 --- [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-03T14:28:40.783+08:00 WARN 2472 --- [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-03T14:28:40.783+08:00 WARN 2472 --- [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-03T14:28:40.784+08:00 WARN 2472 --- [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-03T14:28:40.784+08:00 WARN 2472 --- [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-03T14:28:40.784+08:00 WARN 2472 --- [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-03T14:28:40.785+08:00 WARN 2472 --- [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-03T14:28:40.785+08:00 WARN 2472 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration.
-2026-09-03T14:28:41.853+08:00 INFO 2472 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
-2026-09-03T14:28:41.877+08:00 INFO 2472 --- [crm-app] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
-2026-09-03T14:28:41.878+08:00 INFO 2472 --- [crm-app] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.31]
-2026-09-03T14:28:41.946+08:00 INFO 2472 --- [crm-app] [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
-2026-09-03T14:28:41.947+08:00 INFO 2472 --- [crm-app] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3406 ms
-2026-09-03T14:28:42.552+08:00 INFO 2472 --- [crm-app] [main] com.crm.auth.config.PermissionConfig : Ȩܿرɨɣ0
-2026-09-03T14:28:42.705+08:00 INFO 2472 --- [crm-app] [main] com.crm.base.config.CustomIdGenerator : ѩIDʼɣworkerId=0, datacenterId=0
-2026-09-03T14:28:43.437+08:00 INFO 2472 --- [crm-app] [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
-2026-09-03T14:28:43.517+08:00 INFO 2472 --- [crm-app] [main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.5.3.Final
-2026-09-03T14:28:43.567+08:00 INFO 2472 --- [crm-app] [main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled
-2026-09-03T14:28:43.977+08:00 INFO 2472 --- [crm-app] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer
-2026-09-03T14:28:44.023+08:00 INFO 2472 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
-2026-09-03T14:28:44.902+08:00 INFO 2472 --- [crm-app] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@2b3ee95e
-2026-09-03T14:28:44.904+08:00 INFO 2472 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
-2026-09-03T14:28:45.288+08:00 WARN 2472 --- [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-03T14:28:47.475+08:00 INFO 2472 --- [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-03T14:29:18.580+08:00 INFO 2472 --- [crm-app] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
-2026-09-03T14:29:18.994+08:00 WARN 2472 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================
-2026-09-03T14:29:18.994+08:00 WARN 2472 --- [crm-app] [main] c.c.a.controller.DebugTokenController : token ӿ /api/auth/debug/token ãverify profile
-2026-09-03T14:29:18.994+08:00 WARN 2472 --- [crm-app] [main] c.c.a.controller.DebugTokenController : Ͻκ֪ userId ˿ðû
-2026-09-03T14:29:18.995+08:00 WARN 2472 --- [crm-app] [main] c.c.a.controller.DebugTokenController : μ docs/adr/0014-verify-profile-debug-token-endpoint.md
-2026-09-03T14:29:18.995+08:00 WARN 2472 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================
-2026-09-03T14:29:21.028+08:00 INFO 2472 --- [crm-app] [main] c.c.c.p.i.NgramNameSimilarityPortImpl : CustomerNameSimilarityPort һʵ־ԤɸģʽFULLTEXT ngram
-2026-09-03T14:29:21.199+08:00 INFO 2472 --- [crm-app] [main] c.c.c.p.impl.StubCompanyLookupPortImpl : CompanyLookupPort һ stub װ䣨δ룬̺ѡؿգ
-2026-09-03T14:29:21.410+08:00 INFO 2472 --- [crm-app] [main] c.c.c.p.i.NoopProjectOwnerSyncPortImpl : ProjectOwnerSyncPort no-op Ĭʵװ䣨A5 Ŀģδowner ͬ
-2026-09-03T14:29:21.488+08:00 INFO 2472 --- [crm-app] [main] c.c.p.i.NoopOpportunityOwnerSyncPortImpl : OpportunityOwnerSyncPort no-op Ĭʵװ䣨Ʊ 11 ̻Դ滻
-2026-09-03T14:29:21.659+08:00 WARN 2472 --- [crm-app] [main] .s.s.UserDetailsServiceAutoConfiguration :
-
-Using generated security password: 8bafa7b8-75ab-48e5-b7ec-217270f8b8ef
-
-This generated password is for development use only. Your security configuration must be updated before running your application in production.
-
-2026-09-03T14:29:21.681+08:00 INFO 2472 --- [crm-app] [main] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager
-2026-09-03T14:29:22.869+08:00 INFO 2472 --- [crm-app] [main] c.c.a.c.DataScopeModuleStartupValidator : ȨģУͨ0 ܿر4 עģ
-2026-09-03T14:29:22.902+08:00 INFO 2472 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
-2026-09-03T14:29:22.931+08:00 INFO 2472 --- [crm-app] [main] com.crm.app.CrmAppApplication : Started CrmAppApplication in 45.089 seconds (process running for 45.709)
-2026-09-03T14:29:22.936+08:00 INFO 2472 --- [crm-app] [main] com.crm.auth.config.DataInitializer : ִȨݳʼ...
-2026-09-03T14:29:23.649+08:00 INFO 2472 --- [crm-app] [main] com.crm.auth.config.DataInitializer : Ȩݳʼ
-2026-09-03T14:29:23.650+08:00 INFO 2472 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ִֵȨӻ...
-2026-09-03T14:29:23.980+08:00 INFO 2472 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ֵȨӻɣ10 Ȩ
-2026-09-03T14:29:23.980+08:00 INFO 2472 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : ִȨӻ飨˵...
-2026-09-03T14:29:24.067+08:00 INFO 2472 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : Ȩӻɣ˵0 button
-2026-09-03T14:29:24.068+08:00 INFO 2472 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ִȫӵ...
-2026-09-03T14:29:25.746+08:00 INFO 2472 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ӵɣ 3432 Уʡ 34 / 342 / 3056 3432 У 0
-2026-09-03T14:29:25.747+08:00 INFO 2472 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : ִȨӻ飨˵...
-2026-09-03T14:29:26.093+08:00 INFO 2472 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : Ȩӻɣ4 ˵0 button
-2026-09-03T14:29:26.094+08:00 INFO 2472 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ִ̻Ȩӻ飨˵...
-2026-09-03T14:29:26.198+08:00 INFO 2472 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ̻Ȩӻɣ˵0 button
-2026-09-03T14:29:26.199+08:00 INFO 2472 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ִпͻѹȨӻ飨˵...
-2026-09-03T14:29:26.290+08:00 INFO 2472 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ͻѹȨӻɣ˵0 button
-2026-09-03T14:29:26.291+08:00 INFO 2472 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ִ̻ģȨӻ飨˵...
-2026-09-03T14:29:26.400+08:00 INFO 2472 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ̻ģȨӻɣ˵0 button
-2026-09-03T14:29:26.400+08:00 INFO 2472 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ִзϵͳֶοӻ...
-2026-09-03T14:29:26.412+08:00 INFO 2472 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ϵͳֶοӻɣִ 16 0
-2026-09-03T14:29:26.471+08:00 INFO 2472 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ģѴڣcode=OPP_SCHEME_TPL_01ͣãӻ
-2026-09-03T14:29:26.471+08:00 INFO 2472 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ִзģȨӻ飨˵...
-2026-09-03T14:29:26.558+08:00 INFO 2472 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ģȨӻɣ˵0 button
-2026-09-03T14:29:26.569+08:00 INFO 2472 --- [crm-app] [main] c.c.r.config.StageTemplateInitializer : ĬϽģѴڣcode=OPP_STAGE_TPL_01ͣãӻ
-2026-09-03T14:29:26.582+08:00 INFO 2472 --- [crm-app] [main] c.c.r.c.CustomerReminderRuleInitializer : ͻѹѴڣid=1ӻ
-2026-09-03T14:29:26.582+08:00 INFO 2472 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ִֵݵȳʼ...
-2026-09-03T14:29:34.945+08:00 INFO 2472 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ֵݵȳʼɣ24
-2026-09-03T14:29:36.820+08:00 WARN 2472 --- [crm-app] [main] com.crm.file.config.MinioConfig : MinIO bucket [crm] ʼʧܣļܿܲãThe Access Key Id you provided does not exist in our records.
-2026-09-03T14:29:36.875+08:00 INFO 2472 --- [crm-app] [main] c.c.c.c.CustomerFulltextIndexInitializer : customer FULLTEXT idx_name_fulltext Ѵڣ
-2026-09-03T14:30:20.716+08:00 INFO 2472 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
-2026-09-03T14:30:20.725+08:00 INFO 2472 --- [crm-app] [http-nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 8 ms
-2026-09-03T14:30:24.347+08:00 WARN 2472 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=66002, msg=̻: 1
-2026-09-03T17:53:51.694+08:00 INFO 20740 --- [crm-app] [main] com.crm.app.CrmAppApplication : Starting CrmAppApplication v1.0.0-SNAPSHOT using Java 17.0.15 with PID 20740 (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-03T17:53:51.956+08:00 INFO 20740 --- [crm-app] [main] com.crm.app.CrmAppApplication : The following 1 profile is active: "verify"
-2026-09-03T17:53:53.747+08:00 INFO 20740 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
-2026-09-03T17:53:53.751+08:00 INFO 20740 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
-2026-09-03T17:53:53.791+08:00 INFO 20740 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 29 ms. Found 0 JPA repository interfaces.
-2026-09-03T17:53:53.816+08:00 INFO 20740 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
-2026-09-03T17:53:53.818+08:00 INFO 20740 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
-2026-09-03T17:53:53.835+08:00 INFO 20740 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 4 ms. Found 0 Redis repository interfaces.
-2026-09-03T17:53:54.031+08:00 WARN 20740 --- [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-03T17:53:54.033+08:00 WARN 20740 --- [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-03T17:53:54.034+08:00 WARN 20740 --- [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-03T17:53:54.035+08:00 WARN 20740 --- [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-03T17:53:54.036+08:00 WARN 20740 --- [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-03T17:53:54.037+08:00 WARN 20740 --- [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-03T17:53:54.038+08:00 WARN 20740 --- [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-03T17:53:54.039+08:00 WARN 20740 --- [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-03T17:53:54.040+08:00 WARN 20740 --- [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-03T17:53:54.041+08:00 WARN 20740 --- [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-03T17:53:54.042+08:00 WARN 20740 --- [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-03T17:53:54.044+08:00 WARN 20740 --- [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-03T17:53:54.046+08:00 WARN 20740 --- [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-03T17:53:54.047+08:00 WARN 20740 --- [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-03T17:53:54.048+08:00 WARN 20740 --- [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-03T17:53:54.049+08:00 WARN 20740 --- [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-03T17:53:54.050+08:00 WARN 20740 --- [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-03T17:53:54.051+08:00 WARN 20740 --- [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-03T17:53:54.052+08:00 WARN 20740 --- [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-03T17:53:54.053+08:00 WARN 20740 --- [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-03T17:53:54.054+08:00 WARN 20740 --- [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-03T17:53:54.055+08:00 WARN 20740 --- [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-03T17:53:54.056+08:00 WARN 20740 --- [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-03T17:53:54.057+08:00 WARN 20740 --- [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-03T17:53:54.058+08:00 WARN 20740 --- [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-03T17:53:54.059+08:00 WARN 20740 --- [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-03T17:53:54.060+08:00 WARN 20740 --- [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-03T17:53:54.061+08:00 WARN 20740 --- [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-03T17:53:54.062+08:00 WARN 20740 --- [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-03T17:53:54.064+08:00 WARN 20740 --- [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-03T17:53:54.065+08:00 WARN 20740 --- [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-03T17:53:54.066+08:00 WARN 20740 --- [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-03T17:53:54.067+08:00 WARN 20740 --- [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-03T17:53:54.068+08:00 WARN 20740 --- [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-03T17:53:54.069+08:00 WARN 20740 --- [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-03T17:53:54.070+08:00 WARN 20740 --- [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-03T17:53:54.071+08:00 WARN 20740 --- [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-03T17:53:54.072+08:00 WARN 20740 --- [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-03T17:53:54.073+08:00 WARN 20740 --- [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-03T17:53:54.073+08:00 WARN 20740 --- [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-03T17:53:54.074+08:00 WARN 20740 --- [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-03T17:53:54.075+08:00 WARN 20740 --- [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-03T17:53:54.076+08:00 WARN 20740 --- [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-03T17:53:54.076+08:00 WARN 20740 --- [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-03T17:53:54.077+08:00 WARN 20740 --- [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-03T17:53:54.078+08:00 WARN 20740 --- [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-03T17:53:54.079+08:00 WARN 20740 --- [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-03T17:53:54.080+08:00 WARN 20740 --- [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-03T17:53:54.080+08:00 WARN 20740 --- [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-03T17:53:54.082+08:00 WARN 20740 --- [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-03T17:53:54.083+08:00 WARN 20740 --- [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-03T17:53:54.084+08:00 WARN 20740 --- [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-03T17:53:54.084+08:00 WARN 20740 --- [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-03T17:53:54.085+08:00 WARN 20740 --- [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-03T17:53:54.086+08:00 WARN 20740 --- [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-03T17:53:54.087+08:00 WARN 20740 --- [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-03T17:53:54.088+08:00 WARN 20740 --- [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-03T17:53:54.089+08:00 WARN 20740 --- [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-03T17:53:54.090+08:00 WARN 20740 --- [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-03T17:53:54.091+08:00 WARN 20740 --- [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-03T17:53:54.092+08:00 WARN 20740 --- [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-03T17:53:54.093+08:00 WARN 20740 --- [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-03T17:53:54.093+08:00 WARN 20740 --- [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-03T17:53:54.094+08:00 WARN 20740 --- [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-03T17:53:54.094+08:00 WARN 20740 --- [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-03T17:53:54.095+08:00 WARN 20740 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration.
-2026-09-03T17:53:54.099+08:00 WARN 20740 --- [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-03T17:53:54.100+08:00 WARN 20740 --- [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-03T17:53:54.101+08:00 WARN 20740 --- [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-03T17:53:54.102+08:00 WARN 20740 --- [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-03T17:53:54.103+08:00 WARN 20740 --- [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-03T17:53:54.104+08:00 WARN 20740 --- [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-03T17:53:54.105+08:00 WARN 20740 --- [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-03T17:53:54.105+08:00 WARN 20740 --- [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-03T17:53:54.106+08:00 WARN 20740 --- [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-03T17:53:54.107+08:00 WARN 20740 --- [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-03T17:53:54.108+08:00 WARN 20740 --- [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-03T17:53:54.108+08:00 WARN 20740 --- [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-03T17:53:54.109+08:00 WARN 20740 --- [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-03T17:53:54.110+08:00 WARN 20740 --- [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-03T17:53:54.111+08:00 WARN 20740 --- [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-03T17:53:54.112+08:00 WARN 20740 --- [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-03T17:53:54.113+08:00 WARN 20740 --- [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-03T17:53:54.114+08:00 WARN 20740 --- [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-03T17:53:54.114+08:00 WARN 20740 --- [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-03T17:53:54.115+08:00 WARN 20740 --- [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-03T17:53:54.116+08:00 WARN 20740 --- [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-03T17:53:54.118+08:00 WARN 20740 --- [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-03T17:53:54.118+08:00 WARN 20740 --- [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-03T17:53:54.120+08:00 WARN 20740 --- [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-03T17:53:54.121+08:00 WARN 20740 --- [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-03T17:53:54.122+08:00 WARN 20740 --- [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-03T17:53:54.122+08:00 WARN 20740 --- [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-03T17:53:54.123+08:00 WARN 20740 --- [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-03T17:53:54.124+08:00 WARN 20740 --- [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-03T17:53:54.125+08:00 WARN 20740 --- [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-03T17:53:54.126+08:00 WARN 20740 --- [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-03T17:53:54.126+08:00 WARN 20740 --- [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-03T17:53:54.127+08:00 WARN 20740 --- [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-03T17:53:54.128+08:00 WARN 20740 --- [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-03T17:53:54.128+08:00 WARN 20740 --- [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-03T17:53:54.129+08:00 WARN 20740 --- [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-03T17:53:54.130+08:00 WARN 20740 --- [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-03T17:53:54.131+08:00 WARN 20740 --- [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-03T17:53:54.132+08:00 WARN 20740 --- [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-03T17:53:54.132+08:00 WARN 20740 --- [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-03T17:53:54.133+08:00 WARN 20740 --- [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-03T17:53:54.135+08:00 WARN 20740 --- [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-03T17:53:54.136+08:00 WARN 20740 --- [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-03T17:53:54.136+08:00 WARN 20740 --- [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-03T17:53:54.137+08:00 WARN 20740 --- [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-03T17:53:54.138+08:00 WARN 20740 --- [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-03T17:53:54.139+08:00 WARN 20740 --- [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-03T17:53:54.140+08:00 WARN 20740 --- [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-03T17:53:54.140+08:00 WARN 20740 --- [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-03T17:53:54.141+08:00 WARN 20740 --- [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-03T17:53:54.142+08:00 WARN 20740 --- [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-03T17:53:54.143+08:00 WARN 20740 --- [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-03T17:53:54.144+08:00 WARN 20740 --- [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-03T17:53:54.144+08:00 WARN 20740 --- [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-03T17:53:54.145+08:00 WARN 20740 --- [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-03T17:53:54.146+08:00 WARN 20740 --- [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-03T17:53:54.147+08:00 WARN 20740 --- [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-03T17:53:54.148+08:00 WARN 20740 --- [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-03T17:53:54.148+08:00 WARN 20740 --- [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-03T17:53:54.150+08:00 WARN 20740 --- [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-03T17:53:54.151+08:00 WARN 20740 --- [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-03T17:53:54.157+08:00 WARN 20740 --- [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-03T17:53:54.170+08:00 WARN 20740 --- [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-03T17:53:54.262+08:00 WARN 20740 --- [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-03T17:53:54.281+08:00 WARN 20740 --- [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-03T17:53:54.299+08:00 WARN 20740 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration.
-2026-09-03T17:53:55.375+08:00 INFO 20740 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
-2026-09-03T17:53:55.399+08:00 INFO 20740 --- [crm-app] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
-2026-09-03T17:53:55.400+08:00 INFO 20740 --- [crm-app] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.31]
-2026-09-03T17:53:55.486+08:00 INFO 20740 --- [crm-app] [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
-2026-09-03T17:53:55.489+08:00 INFO 20740 --- [crm-app] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3454 ms
-2026-09-03T17:53:56.075+08:00 INFO 20740 --- [crm-app] [main] com.crm.auth.config.PermissionConfig : Ȩܿرɨɣ0
-2026-09-03T17:53:56.251+08:00 INFO 20740 --- [crm-app] [main] com.crm.base.config.CustomIdGenerator : ѩIDʼɣworkerId=0, datacenterId=0
-2026-09-03T17:53:57.140+08:00 INFO 20740 --- [crm-app] [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
-2026-09-03T17:53:57.229+08:00 INFO 20740 --- [crm-app] [main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.5.3.Final
-2026-09-03T17:53:57.279+08:00 INFO 20740 --- [crm-app] [main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled
-2026-09-03T17:53:57.672+08:00 INFO 20740 --- [crm-app] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer
-2026-09-03T17:53:57.715+08:00 INFO 20740 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
-2026-09-03T17:53:58.269+08:00 INFO 20740 --- [crm-app] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@4e797a39
-2026-09-03T17:53:58.274+08:00 INFO 20740 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
-2026-09-03T17:53:58.489+08:00 WARN 20740 --- [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-03T17:54:00.407+08:00 INFO 20740 --- [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-03T17:54:29.350+08:00 INFO 20740 --- [crm-app] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
-2026-09-03T17:54:29.777+08:00 WARN 20740 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================
-2026-09-03T17:54:30.185+08:00 WARN 20740 --- [crm-app] [main] c.c.a.controller.DebugTokenController : token ӿ /api/auth/debug/token ãverify profile
-2026-09-03T17:54:30.186+08:00 WARN 20740 --- [crm-app] [main] c.c.a.controller.DebugTokenController : Ͻκ֪ userId ˿ðû
-2026-09-03T17:54:30.186+08:00 WARN 20740 --- [crm-app] [main] c.c.a.controller.DebugTokenController : μ docs/adr/0014-verify-profile-debug-token-endpoint.md
-2026-09-03T17:54:30.187+08:00 WARN 20740 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================
-2026-09-03T17:54:32.153+08:00 INFO 20740 --- [crm-app] [main] c.c.c.p.i.NgramNameSimilarityPortImpl : CustomerNameSimilarityPort һʵ־ԤɸģʽFULLTEXT ngram
-2026-09-03T17:54:32.299+08:00 INFO 20740 --- [crm-app] [main] c.c.c.p.impl.StubCompanyLookupPortImpl : CompanyLookupPort һ stub װ䣨δ룬̺ѡؿգ
-2026-09-03T17:54:32.548+08:00 INFO 20740 --- [crm-app] [main] c.c.c.p.i.NoopProjectOwnerSyncPortImpl : ProjectOwnerSyncPort no-op Ĭʵװ䣨A5 Ŀģδowner ͬ
-2026-09-03T17:54:32.628+08:00 INFO 20740 --- [crm-app] [main] c.c.p.i.NoopOpportunityOwnerSyncPortImpl : OpportunityOwnerSyncPort no-op Ĭʵװ䣨Ʊ 11 ̻Դ滻
-2026-09-03T17:54:32.808+08:00 WARN 20740 --- [crm-app] [main] .s.s.UserDetailsServiceAutoConfiguration :
-
-Using generated security password: 1d0ffc06-01c9-40ff-ad41-02a5677386a5
-
-This generated password is for development use only. Your security configuration must be updated before running your application in production.
-
-2026-09-03T17:54:32.832+08:00 INFO 20740 --- [crm-app] [main] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager
-2026-09-03T17:54:33.967+08:00 INFO 20740 --- [crm-app] [main] c.c.a.c.DataScopeModuleStartupValidator : ȨģУͨ0 ܿر4 עģ
-2026-09-03T17:54:34.008+08:00 INFO 20740 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
-2026-09-03T17:54:34.048+08:00 INFO 20740 --- [crm-app] [main] com.crm.app.CrmAppApplication : Started CrmAppApplication in 43.079 seconds (process running for 43.72)
-2026-09-03T17:54:34.054+08:00 INFO 20740 --- [crm-app] [main] com.crm.auth.config.DataInitializer : ִȨݳʼ...
-2026-09-03T17:54:34.914+08:00 INFO 20740 --- [crm-app] [main] com.crm.auth.config.DataInitializer : Ȩݳʼ
-2026-09-03T17:54:34.915+08:00 INFO 20740 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ִֵȨӻ...
-2026-09-03T17:54:35.553+08:00 INFO 20740 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ֵȨӻɣ10 Ȩ
-2026-09-03T17:54:35.554+08:00 INFO 20740 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : ִȨӻ飨˵...
-2026-09-03T17:54:35.636+08:00 INFO 20740 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : Ȩӻɣ˵0 button
-2026-09-03T17:54:35.637+08:00 INFO 20740 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ִȫӵ...
-2026-09-03T17:54:37.218+08:00 INFO 20740 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ӵɣ 3432 Уʡ 34 / 342 / 3056 3432 У 0
-2026-09-03T17:54:37.220+08:00 INFO 20740 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : ִȨӻ飨˵...
-2026-09-03T17:54:38.106+08:00 INFO 20740 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : Ȩӻɣ4 ˵0 button
-2026-09-03T17:54:38.107+08:00 INFO 20740 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ִ̻Ȩӻ飨˵...
-2026-09-03T17:54:38.189+08:00 INFO 20740 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ̻Ȩӻɣ˵0 button
-2026-09-03T17:54:38.190+08:00 INFO 20740 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ִпͻѹȨӻ飨˵...
-2026-09-03T17:54:38.274+08:00 INFO 20740 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ͻѹȨӻɣ˵0 button
-2026-09-03T17:54:38.275+08:00 INFO 20740 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ִ̻ģȨӻ飨˵...
-2026-09-03T17:54:38.385+08:00 INFO 20740 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ̻ģȨӻɣ˵0 button
-2026-09-03T17:54:38.386+08:00 INFO 20740 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ִзϵͳֶοӻ...
-2026-09-03T17:54:38.644+08:00 INFO 20740 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ϵͳֶοӻɣִ 16 0
-2026-09-03T17:54:38.664+08:00 INFO 20740 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ģѴڣcode=OPP_SCHEME_TPL_01ͣãӻ
-2026-09-03T17:54:38.665+08:00 INFO 20740 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ִзģȨӻ飨˵...
-2026-09-03T17:54:38.751+08:00 INFO 20740 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ģȨӻɣ˵0 button
-2026-09-03T17:54:38.770+08:00 INFO 20740 --- [crm-app] [main] c.c.r.config.StageTemplateInitializer : ĬϽģѴڣcode=OPP_STAGE_TPL_01ͣãӻ
-2026-09-03T17:54:38.789+08:00 INFO 20740 --- [crm-app] [main] c.c.r.c.CustomerReminderRuleInitializer : ͻѹѴڣid=1ӻ
-2026-09-03T17:54:38.790+08:00 INFO 20740 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ִֵݵȳʼ...
-2026-09-03T17:54:49.874+08:00 INFO 20740 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ֵݵȳʼɣ24
-2026-09-03T17:54:50.172+08:00 WARN 20740 --- [crm-app] [main] com.crm.file.config.MinioConfig : MinIO bucket [crm] ʼʧܣļܿܲãThe Access Key Id you provided does not exist in our records.
-2026-09-03T17:54:50.183+08:00 INFO 20740 --- [crm-app] [main] c.c.c.c.CustomerFulltextIndexInitializer : customer FULLTEXT idx_name_fulltext Ѵڣ
-2026-09-03T17:56:10.679+08:00 INFO 20740 --- [crm-app] [http-nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
-2026-09-03T17:56:10.688+08:00 INFO 20740 --- [crm-app] [http-nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 8 ms
-2026-09-03T17:56:14.535+08:00 WARN 20740 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67002, msg=ͻڻѱɾ
-2026-09-03T17:56:46.784+08:00 WARN 20740 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67002, msg=ͻڻѱɾ
-2026-09-03T17:56:46.908+08:00 WARN 20740 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : Ͳƥ䣺Method parameter 'id': Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; For input string: "None"
-2026-09-03T17:56:47.042+08:00 WARN 20740 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : Ͳƥ䣺Method parameter 'id': Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; For input string: "None"
-2026-09-03T17:56:47.160+08:00 WARN 20740 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : Ͳƥ䣺Method parameter 'id': Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; For input string: "None"
-2026-09-03T17:56:47.272+08:00 WARN 20740 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : Ͳƥ䣺Method parameter 'id': Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; For input string: "None"
-2026-09-03T17:56:47.381+08:00 WARN 20740 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : Ͳƥ䣺Method parameter 'ids': Failed to convert value of type 'java.lang.String' to required type 'java.util.List'; For input string: "None,None"
-2026-09-03T17:56:47.496+08:00 WARN 20740 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : Ͳƥ䣺Method parameter 'id': Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; For input string: "None"
-2026-09-03T17:56:47.608+08:00 WARN 20740 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : Ͳƥ䣺Method parameter 'id': Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; For input string: "None"
-2026-09-03T17:56:47.735+08:00 WARN 20740 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : Ͳƥ䣺Method parameter 'id': Failed to convert value of type 'java.lang.String' to required type 'java.lang.Long'; For input string: "None"
-2026-09-03T17:59:09.736+08:00 WARN 20740 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67002, msg=ͻڻѱɾ
->>>>>>> Stashed changes
-2026-09-04T09:18:51.039+08:00 INFO 27256 --- [crm-app] [main] com.crm.app.CrmAppApplication : Starting CrmAppApplication v1.0.0-SNAPSHOT using Java 17.0.15 with PID 27256 (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-04T09:18:51.057+08:00 INFO 27256 --- [crm-app] [main] com.crm.app.CrmAppApplication : The following 1 profile is active: "verify"
-2026-09-04T09:18:52.774+08:00 INFO 27256 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
-2026-09-04T09:18:52.776+08:00 INFO 27256 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
-2026-09-04T09:18:52.812+08:00 INFO 27256 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 26 ms. Found 0 JPA repository interfaces.
-2026-09-04T09:18:52.838+08:00 INFO 27256 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Multiple Spring Data modules found, entering strict repository configuration mode
-2026-09-04T09:18:52.840+08:00 INFO 27256 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Redis repositories in DEFAULT mode.
-2026-09-04T09:18:52.856+08:00 INFO 27256 --- [crm-app] [main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 3 ms. Found 0 Redis repository interfaces.
-2026-09-04T09:18:53.035+08:00 WARN 27256 --- [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-04T09:18:53.036+08:00 WARN 27256 --- [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-04T09:18:53.036+08:00 WARN 27256 --- [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-04T09:18:53.036+08:00 WARN 27256 --- [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-04T09:18:53.037+08:00 WARN 27256 --- [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-04T09:18:53.037+08:00 WARN 27256 --- [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-04T09:18:53.038+08:00 WARN 27256 --- [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-04T09:18:53.038+08:00 WARN 27256 --- [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-04T09:18:53.038+08:00 WARN 27256 --- [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-04T09:18:53.039+08:00 WARN 27256 --- [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-04T09:18:53.039+08:00 WARN 27256 --- [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-04T09:18:53.040+08:00 WARN 27256 --- [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-04T09:18:53.040+08:00 WARN 27256 --- [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-04T09:18:53.041+08:00 WARN 27256 --- [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-04T09:18:53.041+08:00 WARN 27256 --- [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-04T09:18:53.042+08:00 WARN 27256 --- [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-04T09:18:53.042+08:00 WARN 27256 --- [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-04T09:18:53.043+08:00 WARN 27256 --- [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-04T09:18:53.044+08:00 WARN 27256 --- [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-04T09:18:53.044+08:00 WARN 27256 --- [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-04T09:18:53.045+08:00 WARN 27256 --- [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-04T09:18:53.045+08:00 WARN 27256 --- [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-04T09:18:53.045+08:00 WARN 27256 --- [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-04T09:18:53.046+08:00 WARN 27256 --- [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-04T09:18:53.047+08:00 WARN 27256 --- [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-04T09:18:53.048+08:00 WARN 27256 --- [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-04T09:18:53.049+08:00 WARN 27256 --- [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-04T09:18:53.050+08:00 WARN 27256 --- [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-04T09:18:53.050+08:00 WARN 27256 --- [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-04T09:18:53.051+08:00 WARN 27256 --- [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-04T09:18:53.051+08:00 WARN 27256 --- [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-04T09:18:53.052+08:00 WARN 27256 --- [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-04T09:18:53.052+08:00 WARN 27256 --- [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-04T09:18:53.053+08:00 WARN 27256 --- [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-04T09:18:53.053+08:00 WARN 27256 --- [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-04T09:18:53.053+08:00 WARN 27256 --- [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-04T09:18:53.054+08:00 WARN 27256 --- [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-04T09:18:53.055+08:00 WARN 27256 --- [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-04T09:18:53.055+08:00 WARN 27256 --- [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-04T09:18:53.055+08:00 WARN 27256 --- [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-04T09:18:53.056+08:00 WARN 27256 --- [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-04T09:18:53.056+08:00 WARN 27256 --- [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-04T09:18:53.057+08:00 WARN 27256 --- [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-04T09:18:53.058+08:00 WARN 27256 --- [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-04T09:18:53.058+08:00 WARN 27256 --- [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-04T09:18:53.059+08:00 WARN 27256 --- [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-04T09:18:53.059+08:00 WARN 27256 --- [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-04T09:18:53.060+08:00 WARN 27256 --- [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-04T09:18:53.060+08:00 WARN 27256 --- [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-04T09:18:53.060+08:00 WARN 27256 --- [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-04T09:18:53.061+08:00 WARN 27256 --- [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-04T09:18:53.061+08:00 WARN 27256 --- [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-04T09:18:53.062+08:00 WARN 27256 --- [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-04T09:18:53.062+08:00 WARN 27256 --- [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-04T09:18:53.062+08:00 WARN 27256 --- [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-04T09:18:53.063+08:00 WARN 27256 --- [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-04T09:18:53.064+08:00 WARN 27256 --- [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-04T09:18:53.064+08:00 WARN 27256 --- [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-04T09:18:53.064+08:00 WARN 27256 --- [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-04T09:18:53.065+08:00 WARN 27256 --- [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-04T09:18:53.065+08:00 WARN 27256 --- [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-04T09:18:53.066+08:00 WARN 27256 --- [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-04T09:18:53.066+08:00 WARN 27256 --- [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-04T09:18:53.067+08:00 WARN 27256 --- [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-04T09:18:53.067+08:00 WARN 27256 --- [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-04T09:18:53.067+08:00 WARN 27256 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration.
-2026-09-04T09:18:53.071+08:00 WARN 27256 --- [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-04T09:18:53.071+08:00 WARN 27256 --- [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-04T09:18:53.072+08:00 WARN 27256 --- [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-04T09:18:53.072+08:00 WARN 27256 --- [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-04T09:18:53.073+08:00 WARN 27256 --- [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-04T09:18:53.073+08:00 WARN 27256 --- [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-04T09:18:53.074+08:00 WARN 27256 --- [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-04T09:18:53.074+08:00 WARN 27256 --- [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-04T09:18:53.074+08:00 WARN 27256 --- [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-04T09:18:53.075+08:00 WARN 27256 --- [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-04T09:18:53.075+08:00 WARN 27256 --- [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-04T09:18:53.075+08:00 WARN 27256 --- [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-04T09:18:53.076+08:00 WARN 27256 --- [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-04T09:18:53.076+08:00 WARN 27256 --- [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-04T09:18:53.076+08:00 WARN 27256 --- [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-04T09:18:53.077+08:00 WARN 27256 --- [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-04T09:18:53.077+08:00 WARN 27256 --- [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-04T09:18:53.077+08:00 WARN 27256 --- [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-04T09:18:53.078+08:00 WARN 27256 --- [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-04T09:18:53.079+08:00 WARN 27256 --- [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-04T09:18:53.079+08:00 WARN 27256 --- [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-04T09:18:53.080+08:00 WARN 27256 --- [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-04T09:18:53.080+08:00 WARN 27256 --- [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-04T09:18:53.081+08:00 WARN 27256 --- [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-04T09:18:53.081+08:00 WARN 27256 --- [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-04T09:18:53.082+08:00 WARN 27256 --- [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-04T09:18:53.082+08:00 WARN 27256 --- [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-04T09:18:53.082+08:00 WARN 27256 --- [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-04T09:18:53.083+08:00 WARN 27256 --- [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-04T09:18:53.084+08:00 WARN 27256 --- [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-04T09:18:53.084+08:00 WARN 27256 --- [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-04T09:18:53.085+08:00 WARN 27256 --- [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-04T09:18:53.085+08:00 WARN 27256 --- [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-04T09:18:53.085+08:00 WARN 27256 --- [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-04T09:18:53.086+08:00 WARN 27256 --- [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-04T09:18:53.086+08:00 WARN 27256 --- [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-04T09:18:53.086+08:00 WARN 27256 --- [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-04T09:18:53.087+08:00 WARN 27256 --- [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-04T09:18:53.087+08:00 WARN 27256 --- [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-04T09:18:53.088+08:00 WARN 27256 --- [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-04T09:18:53.088+08:00 WARN 27256 --- [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-04T09:18:53.089+08:00 WARN 27256 --- [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-04T09:18:53.089+08:00 WARN 27256 --- [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-04T09:18:53.089+08:00 WARN 27256 --- [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-04T09:18:53.090+08:00 WARN 27256 --- [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-04T09:18:53.090+08:00 WARN 27256 --- [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-04T09:18:53.091+08:00 WARN 27256 --- [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-04T09:18:53.091+08:00 WARN 27256 --- [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-04T09:18:53.091+08:00 WARN 27256 --- [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-04T09:18:53.092+08:00 WARN 27256 --- [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-04T09:18:53.093+08:00 WARN 27256 --- [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-04T09:18:53.093+08:00 WARN 27256 --- [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-04T09:18:53.094+08:00 WARN 27256 --- [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-04T09:18:53.094+08:00 WARN 27256 --- [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-04T09:18:53.095+08:00 WARN 27256 --- [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-04T09:18:53.095+08:00 WARN 27256 --- [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-04T09:18:53.095+08:00 WARN 27256 --- [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-04T09:18:53.096+08:00 WARN 27256 --- [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-04T09:18:53.096+08:00 WARN 27256 --- [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-04T09:18:53.097+08:00 WARN 27256 --- [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-04T09:18:53.097+08:00 WARN 27256 --- [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-04T09:18:53.098+08:00 WARN 27256 --- [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-04T09:18:53.098+08:00 WARN 27256 --- [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-04T09:18:53.098+08:00 WARN 27256 --- [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-04T09:18:53.099+08:00 WARN 27256 --- [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-04T09:18:53.099+08:00 WARN 27256 --- [crm-app] [main] o.m.s.mapper.ClassPathMapperScanner : No MyBatis mapper was found in '[com.crm.**.mapper]' package. Please check your configuration.
-2026-09-04T09:18:54.125+08:00 INFO 27256 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port 8080 (http)
-2026-09-04T09:18:54.145+08:00 INFO 27256 --- [crm-app] [main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
-2026-09-04T09:18:54.146+08:00 INFO 27256 --- [crm-app] [main] o.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/10.1.31]
-2026-09-04T09:18:54.218+08:00 INFO 27256 --- [crm-app] [main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
-2026-09-04T09:18:54.219+08:00 INFO 27256 --- [crm-app] [main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3102 ms
-2026-09-04T09:18:54.815+08:00 INFO 27256 --- [crm-app] [main] com.crm.auth.config.PermissionConfig : Ȩܿرɨɣ0
-2026-09-04T09:18:54.961+08:00 INFO 27256 --- [crm-app] [main] com.crm.base.config.CustomIdGenerator : ѩIDʼɣworkerId=0, datacenterId=0
-2026-09-04T09:18:55.674+08:00 INFO 27256 --- [crm-app] [main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
-2026-09-04T09:18:55.752+08:00 INFO 27256 --- [crm-app] [main] org.hibernate.Version : HHH000412: Hibernate ORM core version 6.5.3.Final
-2026-09-04T09:18:55.801+08:00 INFO 27256 --- [crm-app] [main] o.h.c.internal.RegionFactoryInitiator : HHH000026: Second-level cache disabled
-2026-09-04T09:18:56.203+08:00 INFO 27256 --- [crm-app] [main] o.s.o.j.p.SpringPersistenceUnitInfo : No LoadTimeWeaver setup: ignoring JPA class transformer
-2026-09-04T09:18:56.240+08:00 INFO 27256 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
-2026-09-04T09:18:56.869+08:00 INFO 27256 --- [crm-app] [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection com.mysql.cj.jdbc.ConnectionImpl@79c4454
-2026-09-04T09:18:56.871+08:00 INFO 27256 --- [crm-app] [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
-2026-09-04T09:18:56.985+08:00 WARN 27256 --- [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-04T09:18:58.957+08:00 INFO 27256 --- [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-04T09:19:16.977+08:00 INFO 27256 --- [crm-app] [main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
-2026-09-04T09:19:17.408+08:00 WARN 27256 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================
-2026-09-04T09:19:17.408+08:00 WARN 27256 --- [crm-app] [main] c.c.a.controller.DebugTokenController : token ӿ /api/auth/debug/token ãverify profile
-2026-09-04T09:19:17.409+08:00 WARN 27256 --- [crm-app] [main] c.c.a.controller.DebugTokenController : Ͻκ֪ userId ˿ðû
-2026-09-04T09:19:17.409+08:00 WARN 27256 --- [crm-app] [main] c.c.a.controller.DebugTokenController : μ docs/adr/0014-verify-profile-debug-token-endpoint.md
-2026-09-04T09:19:17.409+08:00 WARN 27256 --- [crm-app] [main] c.c.a.controller.DebugTokenController : ============================================================
-2026-09-04T09:19:19.394+08:00 INFO 27256 --- [crm-app] [main] c.c.c.p.i.NgramNameSimilarityPortImpl : CustomerNameSimilarityPort һʵ־ԤɸģʽFULLTEXT ngram
-2026-09-04T09:19:19.559+08:00 INFO 27256 --- [crm-app] [main] c.c.c.p.impl.StubCompanyLookupPortImpl : CompanyLookupPort һ stub װ䣨δ룬̺ѡؿգ
-2026-09-04T09:19:19.796+08:00 INFO 27256 --- [crm-app] [main] c.c.c.p.i.NoopProjectOwnerSyncPortImpl : ProjectOwnerSyncPort no-op Ĭʵװ䣨A5 Ŀģδowner ͬ
-2026-09-04T09:19:19.871+08:00 INFO 27256 --- [crm-app] [main] c.c.p.i.NoopOpportunityOwnerSyncPortImpl : OpportunityOwnerSyncPort no-op Ĭʵװ䣨Ʊ 11 ̻Դ滻
-2026-09-04T09:19:20.044+08:00 WARN 27256 --- [crm-app] [main] .s.s.UserDetailsServiceAutoConfiguration :
-
-Using generated security password: b77599cd-1362-44f5-9a0b-0031f27801e3
-
-This generated password is for development use only. Your security configuration must be updated before running your application in production.
-
-2026-09-04T09:19:20.067+08:00 INFO 27256 --- [crm-app] [main] r$InitializeUserDetailsManagerConfigurer : Global AuthenticationManager configured with UserDetailsService bean with name inMemoryUserDetailsManager
-2026-09-04T09:19:21.378+08:00 INFO 27256 --- [crm-app] [main] c.c.a.c.DataScopeModuleStartupValidator : ȨģУͨ0 ܿر4 עģ
-2026-09-04T09:19:21.420+08:00 INFO 27256 --- [crm-app] [main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
-2026-09-04T09:19:21.451+08:00 INFO 27256 --- [crm-app] [main] com.crm.app.CrmAppApplication : Started CrmAppApplication in 31.112 seconds (process running for 31.808)
-2026-09-04T09:19:21.455+08:00 INFO 27256 --- [crm-app] [main] com.crm.auth.config.DataInitializer : ִȨݳʼ...
-2026-09-04T09:19:22.214+08:00 INFO 27256 --- [crm-app] [main] com.crm.auth.config.DataInitializer : Ȩݳʼ
-2026-09-04T09:19:22.214+08:00 INFO 27256 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ִֵȨӻ...
-2026-09-04T09:19:22.593+08:00 INFO 27256 --- [crm-app] [main] c.c.d.config.DictPermissionInitializer : ֵȨӻɣ10 Ȩ
-2026-09-04T09:19:22.593+08:00 INFO 27256 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : ִȨӻ飨˵...
-2026-09-04T09:19:22.702+08:00 INFO 27256 --- [crm-app] [main] c.c.r.config.RulePermissionInitializer : Ȩӻɣ˵0 button
-2026-09-04T09:19:22.702+08:00 INFO 27256 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : ִȨӻ飨˵...
-2026-09-04T09:19:23.143+08:00 INFO 27256 --- [crm-app] [main] c.c.l.config.LeadPermissionInitializer : Ȩӻɣ4 ˵0 button
-2026-09-04T09:19:23.144+08:00 INFO 27256 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ִȫӵ...
-2026-09-04T09:19:25.128+08:00 INFO 27256 --- [crm-app] [main] c.crm.rule.config.RegionDataInitializer : ӵɣ 3432 Уʡ 34 / 342 / 3056 3432 У 0
-2026-09-04T09:19:25.129+08:00 INFO 27256 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ִ̻Ȩӻ飨˵...
-2026-09-04T09:19:25.256+08:00 INFO 27256 --- [crm-app] [main] r.c.OpportunityRulePermissionInitializer : ̻Ȩӻɣ˵0 button
-2026-09-04T09:19:25.257+08:00 INFO 27256 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ִ̻ģȨӻ飨˵...
-2026-09-04T09:19:25.345+08:00 INFO 27256 --- [crm-app] [main] tunityStageTemplatePermissionInitializer : ̻ģȨӻɣ˵0 button
-2026-09-04T09:19:25.346+08:00 INFO 27256 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ִпͻѹȨӻ飨˵...
-2026-09-04T09:19:25.451+08:00 INFO 27256 --- [crm-app] [main] ustomerReminderRulePermissionInitializer : ͻѹȨӻɣ˵0 button
-2026-09-04T09:19:25.451+08:00 INFO 27256 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ִзϵͳֶοӻ...
-2026-09-04T09:19:25.471+08:00 INFO 27256 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ϵͳֶοӻɣִ 16 0
-2026-09-04T09:19:25.487+08:00 INFO 27256 --- [crm-app] [main] c.c.r.config.SchemeFieldDefInitializer : ģѴڣcode=OPP_SCHEME_TPL_01ͣãӻ
-2026-09-04T09:19:25.488+08:00 INFO 27256 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ִзģȨӻ飨˵...
-2026-09-04T09:19:25.596+08:00 INFO 27256 --- [crm-app] [main] ySchemeCardTemplatePermissionInitializer : ģȨӻɣ˵0 button
-2026-09-04T09:19:25.611+08:00 INFO 27256 --- [crm-app] [main] c.c.r.config.StageTemplateInitializer : ĬϽģѴڣcode=OPP_STAGE_TPL_01ͣãӻ
-2026-09-04T09:19:25.629+08:00 INFO 27256 --- [crm-app] [main] c.c.r.c.CustomerReminderRuleInitializer : ͻѹѴڣid=1ӻ
-2026-09-04T09:19:25.641+08:00 INFO 27256 --- [crm-app] [main] c.c.c.c.CustomerFulltextIndexInitializer : customer FULLTEXT idx_name_fulltext Ѵڣ
-2026-09-04T09:19:26.006+08:00 INFO 27256 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ִֵݵȳʼ...
-2026-09-04T09:19:35.294+08:00 INFO 27256 --- [crm-app] [main] c.crm.dict.config.DictDataInitializer : ֵݵȳʼɣ24
-2026-09-04T09:20:00.417+08:00 INFO 27256 --- [crm-app] [http-nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
-2026-09-04T09:20:00.425+08:00 INFO 27256 --- [crm-app] [http-nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : Completed initialization in 4 ms
-2026-09-04T09:20:03.666+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
-2026-09-04T09:24:35.340+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
-2026-09-04T09:24:53.300+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
-2026-09-04T09:28:25.998+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
-2026-09-04T09:28:53.907+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ʽRequest method 'POST' is not supported
-2026-09-04T09:28:55.308+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ʽRequest method 'POST' is not supported
-2026-09-04T09:28:56.110+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ʽRequest method 'POST' is not supported
-2026-09-04T09:28:56.921+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ʽRequest method 'POST' is not supported
-2026-09-04T09:42:46.833+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
-2026-09-04T09:42:47.282+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67004, msg=۸˿ִиò
-2026-09-04T09:43:18.653+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
-2026-09-04T09:43:19.041+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67004, msg=۸˿ִиò
-2026-09-04T09:43:45.718+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
-2026-09-04T09:44:11.986+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67003, msg=ͳһôѱռãϵͳѴڸҵ
-2026-09-04T09:44:53.929+08:00 INFO 27256 --- [crm-app] [task-2] c.c.c.task.CustomerImportExecutor : ͻɣtaskId=751014847793070080, insert=0, update=0, unchanged=0, fail=0, suspect=1
-2026-09-04T09:44:54.214+08:00 ERROR 27256 --- [crm-app] [task-1] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=751014846757076992, thumbKey=thumbnails/751014846757076992.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-04T09:44:59.596+08:00 INFO 27256 --- [crm-app] [http-nio-8080-exec-4] .c.r.s.i.CustomerReminderRuleServiceImpl : [ͻѹ] ȫDZ棺operator=739564171091247104, masterEnabled=1, firstTrigger=1/31, secondInterval=1/7
-2026-09-04T09:45:02.059+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=64023, msg=״δѼΪ
-2026-09-04T09:45:04.790+08:00 INFO 27256 --- [crm-app] [http-nio-8080-exec-1] .c.r.s.i.CustomerReminderRuleServiceImpl : [ͻѹ] ȫDZ棺operator=739564171091247104, masterEnabled=1, firstTrigger=1/30, secondInterval=1/7
-2026-09-04T09:47:40.187+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
-2026-09-04T09:49:14.325+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
-2026-09-04T09:49:43.965+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-9] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
-2026-09-04T09:52:21.124+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-5] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
-2026-09-04T09:52:46.957+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67003, msg=ͳһôѱռãϵͳѴڸҵ
-2026-09-04T09:52:57.178+08:00 ERROR 27256 --- [crm-app] [task-3] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=751016877735542784, thumbKey=thumbnails/751016877735542784.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-04T09:53:00.169+08:00 INFO 27256 --- [crm-app] [task-4] c.c.c.task.CustomerImportExecutor : ͻɣtaskId=751016878322745344, insert=0, update=0, unchanged=0, fail=0, suspect=1
-2026-09-04T09:53:05.717+08:00 INFO 27256 --- [crm-app] [http-nio-8080-exec-6] .c.r.s.i.CustomerReminderRuleServiceImpl : [ͻѹ] ȫDZ棺operator=739564171091247104, masterEnabled=1, firstTrigger=1/31, secondInterval=1/7
-2026-09-04T09:53:08.434+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=64023, msg=״δѼΪ
-2026-09-04T09:53:11.117+08:00 INFO 27256 --- [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-04T09:56:24.414+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-7] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
-2026-09-04T09:56:50.693+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67003, msg=ͳһôѱռãϵͳѴڸҵ
-2026-09-04T09:57:01.508+08:00 ERROR 27256 --- [crm-app] [task-5] c.crm.file.task.ThumbnailGenerationTask : ͼʧܣfileId=751017900113920000, thumbKey=thumbnails/751017900113920000.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
+ ... 22 common frames omitted
-2026-09-04T09:57:03.638+08:00 INFO 27256 --- [crm-app] [task-6] c.c.c.task.CustomerImportExecutor : ͻɣtaskId=751017903351922688, insert=0, update=0, unchanged=0, fail=0, suspect=1
-2026-09-04T09:57:09.267+08:00 INFO 27256 --- [crm-app] [http-nio-8080-exec-6] .c.r.s.i.CustomerReminderRuleServiceImpl : [ͻѹ] ȫDZ棺operator=739564171091247104, masterEnabled=1, firstTrigger=1/31, secondInterval=1/7
-2026-09-04T09:57:11.974+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=64023, msg=״δѼΪ
-2026-09-04T09:57:14.716+08:00 INFO 27256 --- [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-04T10:52:13.073+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-1] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
-2026-09-04T14:07:04.692+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-3] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=744842318024015872 ǩ token
-2026-09-04T14:13:45.451+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-10] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
-2026-09-04T14:13:47.816+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͳһôΪ 18 λֻдĸ
-2026-09-04T14:13:48.014+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͳһôΪ 18 λֻдĸ
-2026-09-04T14:13:48.275+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͳһôΪ 18 λֻдĸ
-2026-09-04T14:13:48.923+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͳһôΪ 18 λֻдĸ
-2026-09-04T14:13:49.382+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͳһôΪ 18 λֻдĸ
-2026-09-04T14:13:49.553+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-7] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͳһôΪ 18 λֻдĸ
-2026-09-04T14:13:49.706+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-6] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͳһôΪ 18 λֻдĸ
-2026-09-04T14:13:49.957+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͳһôΪ 18 λֻдĸ
-2026-09-04T14:13:50.100+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-10] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͳһôΪ 18 λֻдĸ
-2026-09-04T14:13:50.242+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-9] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͳһôΪ 18 λֻдĸ
-2026-09-04T14:13:50.376+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-8] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͳһôΪ 18 λֻдĸ
-2026-09-04T14:13:50.544+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-3] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͳһôΪ 18 λֻдĸ
-2026-09-04T14:13:50.718+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-4] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͳһôΪ 18 λֻдĸ
-2026-09-04T14:13:50.853+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-5] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͳһôΪ 18 λֻдĸ
-2026-09-04T14:13:51.035+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-1] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67001, msg=ͳһôΪ 18 λֻдĸ
-2026-09-04T14:16:04.011+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-6] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
-2026-09-04T14:16:13.661+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-2] c.c.b.a.GlobalExceptionHandlerAdvice : ҵ쳣code=67004, msg=۸˿ִиò
-2026-09-04T14:20:07.759+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-2] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
-2026-09-04T14:23:48.778+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
-2026-09-04T14:36:24.384+08:00 WARN 27256 --- [crm-app] [http-nio-8080-exec-8] c.c.a.controller.DebugTokenController : [verify] Ϊ userId=739564171091247104 ǩ token
diff --git a/logs/crm-app.log.2026-09-04.0.gz b/logs/crm-app.log.2026-09-04.0.gz
new file mode 100644
index 0000000..8a00bc2
Binary files /dev/null and b/logs/crm-app.log.2026-09-04.0.gz differ