118 changed files with 6245 additions and 47 deletions
@ -0,0 +1,3 @@ |
|||||
|
run/local.json |
||||
|
toolchains/local.json |
||||
|
**/*.tmp |
||||
@ -0,0 +1,4 @@ |
|||||
|
{ |
||||
|
"defaultRunConfiguration": "spring-boot.maven:crm-app", |
||||
|
"version": 1 |
||||
|
} |
||||
File diff suppressed because it is too large
@ -0,0 +1,29 @@ |
|||||
|
{ |
||||
|
"toolchains": { |
||||
|
"project-jdk": { |
||||
|
"java": null, |
||||
|
"minimumVersion": "17", |
||||
|
"preferredVendor": null, |
||||
|
"type": "java", |
||||
|
"version": null, |
||||
|
"wrapper": null |
||||
|
}, |
||||
|
"project-maven": { |
||||
|
"java": "project-jdk", |
||||
|
"minimumVersion": null, |
||||
|
"preferredVendor": null, |
||||
|
"type": "maven", |
||||
|
"version": null, |
||||
|
"wrapper": null |
||||
|
}, |
||||
|
"project-node": { |
||||
|
"java": null, |
||||
|
"minimumVersion": null, |
||||
|
"preferredVendor": null, |
||||
|
"type": "node", |
||||
|
"version": null, |
||||
|
"wrapper": null |
||||
|
} |
||||
|
}, |
||||
|
"version": 1 |
||||
|
} |
||||
@ -0,0 +1,28 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<projectDescription> |
||||
|
<name>crm</name> |
||||
|
<comment></comment> |
||||
|
<projects> |
||||
|
</projects> |
||||
|
<buildSpec> |
||||
|
<buildCommand> |
||||
|
<name>org.eclipse.m2e.core.maven2Builder</name> |
||||
|
<arguments> |
||||
|
</arguments> |
||||
|
</buildCommand> |
||||
|
</buildSpec> |
||||
|
<natures> |
||||
|
<nature>org.eclipse.m2e.core.maven2Nature</nature> |
||||
|
</natures> |
||||
|
<filteredResources> |
||||
|
<filter> |
||||
|
<id>1788308974700</id> |
||||
|
<name></name> |
||||
|
<type>30</type> |
||||
|
<matcher> |
||||
|
<id>org.eclipse.core.resources.regexFilterMatcher</id> |
||||
|
<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments> |
||||
|
</matcher> |
||||
|
</filter> |
||||
|
</filteredResources> |
||||
|
</projectDescription> |
||||
@ -0,0 +1,206 @@ |
|||||
|
# 客户模块(A4)后端 spec — 复核交接清单 |
||||
|
|
||||
|
> 用途:交付给一个**全新的、无本会话上下文**的会话做第二轮 grill / 独立复核。 |
||||
|
> 上一轮共 19 个 grill 决策(D18–D29 + D4-rev1/rev2)已全部由用户拍板。**本清单的目的不是报喜,而是把最可能被推翻的点提前摊开,供下一轮挑战。** |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 0. 怎么读这份清单 |
||||
|
|
||||
|
- **权威交付物**:`.scratch/customer-module/map.md`(决策索引 D1–D29,自包含)+ `issues/NN-answer.md`(各票详细决议,自包含)。 |
||||
|
- **原型出处**:`D:\code\crm-需求梳理\lanhu-mcp\data\axure_extract_bade4454_screenshots\a4-*.txt`(蓝湖 A4 页面已本地提取文本)。 |
||||
|
- **对称参照**:`.scratch/opportunity-module/map.md`(已完成的商机图,本图大量对称其范式)。 |
||||
|
- **领域上下文**:`crm-customer/CONTEXT.md`、`crm-lead/CONTEXT.md`、`crm-opportunity/CONTEXT.md`。 |
||||
|
- **协作规范**:`docs/agents/issue-tracker.md`、`docs/agents/triage-labels.md`。 |
||||
|
|
||||
|
**复核建议**:先读 `map.md` 的 Decisions 区(D1–D29,约 5 分钟),再逐个挑战下面「第 4 节薄弱点」。**不要**因为 map 里写了"已拍板"就跳过——这是本清单特意要求的。 |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 1. 本图范围(D2) |
||||
|
|
||||
|
**做**(8 大块):客户核心(实体+查重+公海+总览+我的客户+三视图+新增/编辑+导入)、联系人(CRUD+全局搜索+电话查重)、客户交割、客户规则族(超期提醒 + 查重设置)。 |
||||
|
|
||||
|
**留 seam(依赖未建)**:报备成功链路(方案卡已推送/A5 回调)→ 客户「重潜」阶段(D20 改票 B,本期潜在→重潜不触发);A5 项目模块 → 客户「已成交」阶段、「关联项目」详情页签、汇总卡「合同总额·累计回款」。 |
||||
|
|
||||
|
**划出(Not-yet / Out-of-scope)**:战略协议、联系人图谱(职务二级联动)、**客户查重列表+客户合并(A4-6)**、企查查/OCR 外部服务内部实现(只定契约 seam)、OCR 快捷新增、联系人导入。 |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 2. 已冻结的决策(D1–D29 速览) |
||||
|
|
||||
|
| # | 决策要点 | 原型/出处 | |
||||
|
|---|---|---| |
||||
|
| D1 | spec-only,对称商机图;做完进 /implement | — | |
||||
|
| D2 | 作用域三档划分(见上) | — | |
||||
|
| D3 | 双轴建模:轴1 归属(owner 空=公海)正交 archive_status;轴2 阶段三态只前进 | a4-2-1 | |
||||
|
| D4-rev1 | 客户规则族只含「超期提醒 + 查重设置」;星级/阶段退回硬编码 | a7-2-3 | |
||||
|
| D4-rev2 | 查重设置 = crm-rule 全局单例可配置,本期只消费于新增/编辑内建查重 | a7-2-3-查重 | |
||||
|
| D5 | 联系人 = crm-customer 独立表 `customer_contact`,权限继承客户 | a4-4 | |
||||
|
| D6 | 内建查重口径(后被 D4-rev2 改为可配置) | a4-3-3 | |
||||
|
| D7 | 客户主表字段八区 + DataScope + 索引(无孤立单大写陷阱) | a4-3-3 | |
||||
|
| D8 | 超期提醒:crm-rule 单例配置 + 待发通知表 + Job 只落待发 | a7-3-3 | |
||||
|
| D9 | 三视图/公海/总览 = 逻辑视图,内置视图不入库 | a4-1-1/a4-2-1 | |
||||
|
| D10 | 分层查重 + CustomerDedupService + 企查查 seam | a4-3-3 | |
||||
|
| D11 | 阶段只前进 CAS(三态字段/机制保留);重潜触发本期 seam 化不实现(D20 改票 B) | a4-4 | |
||||
|
| D12 | 联系人 CRUD + 全局搜索;电话查重软提示(D26);来源字典(D27) | a4-4 | |
||||
|
| D13 | 详情 8 页签 + 跟进 append-only + 字段级 oplog;卡片占位(D28) | a4-4 | |
||||
|
| D14 | 建 crm-customer/CONTEXT.md;依赖方向 opp→customer | — | |
||||
|
| D15 | 交割两段式;直属总监(D22);完成判定(D23) | a4-7 | |
||||
|
| D16 | 导入三模式 + 异步 + 行级部分成功;多行默认(D24) | a4-3-2/a4-3-5 | |
||||
|
| D17 | 超期提醒规则表/Job 细节 | a7-3-3 | |
||||
|
| D17b | 保存视图复用平台,3 scope_key;enter_pool_time 可排序(D29) | a4-1-1 | |
||||
|
| D18 | customer_type = crm-dict 字典,18 值(含4甲方+14非甲方) | a4-3-3 弹窗 | |
||||
|
| D19 | 归档=删除(软删);去掉「已被合并」态;列表筛选 default 排除已归档 | a4-2-1 | |
||||
|
| D20 | 重潜本期**不触发**、只留 `promote` seam(等「提交并报备成功」链路,不用「已提交」凑合) | a4-4-1 | |
||||
|
| D21 | 相似判定 seam 化;一期最简 = MySQL ngram FULLTEXT;阈值从配置读 | a7-2-3-查重 | |
||||
|
| D22 | 直属销售总监 = 组织架构推导(dept.leader 向上找销售总监);不改 crm-auth | a4-7-1 | |
||||
|
| D23 | 交接单完成 = 自动(assignedCount==totalCount);无手动按钮 | a4-7-1 | |
||||
|
| D24 | 导入多行匹配同一客户默认「重复时不导入」(重复组全失败) | a4-3-5 | |
||||
|
| D25 | 超期提醒锚点 = 成为「有主」时刻;公海 NULL 不计时;领取时赋锚点 | a7-3-3 | |
||||
|
| D26 | 电话查重=**可配置软提示**(不建唯一索引);同客户内电话不重复为表单级校验 | a7-3-3-2 查重设置 | |
||||
|
| D27 | contact_source 字典种子 = 组会/组局/转介绍/其他 | a4-4-1 | |
||||
|
| D28 | 汇总卡占位一律渲染 + 显"--"(不显 0,不留白) | a4-4-1 | |
||||
|
| D29 | 公海「进入公海时间」列保留 + 加入排序字段池 | a4-1-1 | |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 3. 为什么我信不过自己——复核方法论 |
||||
|
|
||||
|
用户的担忧是对的。上一轮我犯过**SOP 违规**(票 02–11 未经 grill 就标记 resolved),后来被迫全部重开重问。因此第二轮复核请遵循: |
||||
|
|
||||
|
1. **每个决策都要能找到"证据"**:要么是原型页面(a4-*.txt 的原文文字),要么是用户当时明确说过的选型(如 Q8 的 18 值、Q16 的"全部电话")。**找不到证据的就是我编的,请当误入标注出来。** |
||||
|
2. **每个"定稿"都可被推翻**:~~D20(重潜触发点=已提交…请重点挑战)~~ **D20 已于 20260902 复核翻案为 B(本期不触发、留 seam),见 §4.1**、D22(组织架构推导在无组织数据/多领导时的降级行为我写的是"阻断",但用户可能预期"降级给普通接收人")。 |
||||
|
3. **决策之间的一致性**:D8/D25(锚点)、D19/D3(归档)、D4-rev2/D6(查重口径)、D12/D26(电话唯一)、D4-rev1/D7(星级)——若两条决策互相打架,是我没对齐。 |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 4. 我最担心的薄弱点(请下一轮重点挑战) |
||||
|
|
||||
|
### ✅ 4.1 D20 重潜触发 —— **用户拍板 B(20260902):本期不触发、只留 seam,翻案** |
||||
|
- 我选了「保守」口径:方案卡状态到「已提交」就触发客户重潜。 |
||||
|
- **风险**:原型 A4-4 的重潜定义其实写着「关联的任一方案卡**提交并报备成功**」。我因为「报备/推送链路本期不可达」而收窄成「已提交」。用户可能完全接受,也可能说"那就等报备成功再触发,本期不实现重潜"。 |
||||
|
- **请问**:报备链路不可达时,是「用已提交凑合触发」还是「本期干脆不实现重潜、只留 seam」? |
||||
|
- **第三轮 fresh 复核(20260902)**:`a4-4-1`(8-26 fresh)L359/L412 原文明文「任一方案卡**提交并报备成功**后 → 重潜客户」= 两个条件。用「已提交」单条件凑合会造出「提交了但报备没成功、客户却已重潜」的错误状态。 |
||||
|
- **✅ 已拍板(用户选 B,20260902)**:本期**不自动触发潜在→重潜**,客户阶段实际只有「潜在」;`CustomerStagePort.promote` seam(契约/只前进 CAS/幂等)全部保留,等报备成功链路(方案卡「已推送(3)」或 A5 回调)就绪再接入调用。**不用「已提交」凑合。** map.md D20/D11 + 票 05-answer + CONTEXT.md 已同步。 |
||||
|
|
||||
|
### ✅ 4.2 D22 直属销售总监 —— **已确认(grill Q12 拍板 A),复核补全「调动/区域调整=下拉选」分支** |
||||
|
- 复核发现:票 08-answer L15/L23 已把口径写全 = **离职=组织架构推导自动定唯一总监**(无/停用/多条→阻断提示管理员);**岗位调动/区域调整=在本人启用的直属总监内下拉选(不阻断)**。 |
||||
|
- 原 HANDOFF 4.2 段只描述了「离职=推导阻断」这**一半**,漏了下半句。**非决策遗漏,是记录不全**。修正:阻断仅离职专属;调动/区域调整为可选下拉,不阻断。 |
||||
|
- **✅ 已确认(20260902)**:无需翻案,仅补齐 map.md D22 描述(补充「调动/区域调整=下拉选、离职才阻断」)。不改 crm-auth、不加 `superior_user_id` 维持原判。 |
||||
|
|
||||
|
### ✅ 4.3 D4-rev1 把「星级/阶段设置」踢出客户规则族 —— 阶段 ✅A口径 / 星级 ✅已三点确认(20260826) |
||||
|
- **阶段**:第二轮复核拍板 **A 口径** —— 客户阶段=固定三态(潜在→重潜→已成交),只前进不回退,**不建 `a7-2-3 客户阶段设置` 页**。D4-rev1 对阶段部分**正确,保留**。 |
||||
|
- 依据:`a4-4-1` 详情页 3 次强调「阶段由业务结果驱动、阶段条不可点击修改、只前进不回退」,与 A 口径一致。 |
||||
|
- 注:`a7-2-3 阶段设置` 页与详情页内部矛盾(可增删/排序/迁移 vs 只前进不可配),已裁决按详情页(A 口径)走,设置页视为原型残留。 |
||||
|
- **星级**:✅ **已确认原判成立(第二轮复核,用户拍板 20260826)**。我上一轮引用「关系星级名称+描述由管理员自定义」是**基于过时原型缓存**(`a7-2-3_星级设置_.txt` 为 2026-07-20 旧快照,仍是「潜在/高潜/合作/重点/战略 + name/desc 可配」老口径)。**新原型已更新**:`a4-3-3-1_新增客户信息.txt`(2026-08-26)L91-106 显示客户星级、关系星级**均为「一星~五星」两个普通下拉字段**,无 name+desc 可配语义。**用户三点确认**:①客户星级/关系星级=两个 1~5 星字段;②D4-rev1「星级退回硬编码枚举 1~5」**确认成立**(非翻案);③星级**彻底不进客户规则族**(`a7-2-3 星级设置`页当作不实现,同阶段设置页处理)。**我上一轮「关系星级必须可配」的纠偏作废。** |
||||
|
|
||||
|
### ✅ 4.4 D26 联系人电话查重 —— **用户拍板 A(20260902):降级为可配置软提示,翻案** |
||||
|
- 用户拍板选了「全部电话唯一(含座机/短号)」——比我的推荐(仅手机号 11 位唯一)更强。 |
||||
|
- **风险**:座机/短号撞号概率实际远低于手机号;但**同一个公司多个联系人的座机可能共用一个总机号**,这会误伤。强制唯一可能让"一个公司两个联系人都填了同一个座机总机"这种正常场景无法保存。 |
||||
|
- **请确认**:是否真的对座机也做全局唯一?要不要豁免「座机且同客户」? |
||||
|
- **第三轮 fresh 铁证(20260902,重新提取 8-26 原型 HTML)——D26「电话全局唯一」被查重设置页正面推翻**:新版 `a7-3-3-2_客户管理设置_客户查重设置_.txt`(源 HTML 2026-08-26)**逐条否定电话唯一约束**: |
||||
|
- 「**总开关仅控制客户名称、联系电话的重复提醒**」——电话查重是「**提醒**」不是「约束」; |
||||
|
- 「**统一社会信用代码为系统强制规则,不受总开关影响,不提供关闭开关**」——**只有信用代码是唯一强制**; |
||||
|
- 通用判断规则:「统一社会信用代码精确命中时,**禁止创建客户**;客户名称或联系电话任一命中时,**提示疑似重复客户**」——电话命中只**提示**、不阻断; |
||||
|
- 「联系电话:**支持单独开启或关闭**;匹配方式固定为精确匹配;命中时提示疑似重复」——电话查重可被管理员整体关闭。 |
||||
|
- **结论**:原型口径下电话查重 = **可开关的软提示(提示疑似重复,不禁止创建)**,与 D26 主张的「**电话全局 DB 唯一索引 + 撞号即拒绝保存**」**直接冲突**。D26 是**过度设计**:把原型的软提示误升级为硬约束。 |
||||
|
- **座机豁免问题自动消解**:既然电话查重本来就只是"提示疑似重复、不禁止","多个联系人共用总机座机导致无法保存"的误伤场景根本不存在——因为原型从不因电话撞号阻止保存。 |
||||
|
- **新增页佐证**:`a4-3-3-1_新增客户信息.txt`(8-26)§3.5「联系电话存在时…按电话值查重;电话值完全相同时禁止新建」仅约束**同一表格内两行**(同一客户内联系人不能填相同电话),**不是跨客户全局唯一**。 |
||||
|
- **建议**:D26 从「电话全局唯一索引」**降级为「可配置的电话查重提示」**(跟随 crm-rule 客户查重设置单例的"联系电话"开关),DB 层**不建电话唯一约束**;仅保留同客户内联系人电话不重复的表单级校验。**待用户拍板改票 06 D26。** |
||||
|
- **✅ 已拍板(用户选 A,20260902)**:采纳建议。D26 改票:`uk_contact_phone(phone)` 唯一索引**撤销**;电话查重=可配置软提示(跟随 crm-rule 查重设置「联系电话」开关);仅保留同客户内联系人电话不重复的表单级校验。**map.md D26/D12 已同步改口径。** |
||||
|
|
||||
|
### ✅ 4.5 D18 customer_type 18 值——**已证实,非编造(第二轮复核,证据在 `a4-1-1`)** |
||||
|
- **原判断撤销**:第一轮我 grep 只搜 `a4-3-3-1` 新增页,漏了 `a4-1-1` 公海列表,误判"部分编造"。 |
||||
|
- **决定性证据**:`a4-1-1_客户公海列表.txt` L45-63 是客户类型筛选下拉的**完整展开枚举**: |
||||
|
`运营商 / 土建总包 / 机电总包 / 装修总包 / 教育局 / 投资(代建)公司 / 设计院 / 集成商 / 招标代理 / 咨询造价公司 / 甲方(企业用户)/ 甲方(普教)/ 甲方(中高职)/ 甲方(政府机关)/ 竞争同行 / 个人用户 / 操手 / 集成商(子客户)` = **17 具体值 + 1"全部客户类型"占位 = 18 值**。 |
||||
|
- 与票 02 列表逐字一致(含"投资(代建)公司""集成商(子客户)")。**消号,D18 成立**。 |
||||
|
- **第三轮 fresh 复核(20260902,重新提取 8-26 原型 HTML)**:新版 `a4-1-1_客户公海列表_列表视图_.txt`(源 HTML 时间戳 2026-08-26)里客户类型筛选下拉**未展开**,文本提取只捕获表格样例行的 4 个值(甲方(中高职)/甲方(企业用户)/甲方(政府机关)/甲方(普教)),**全部落在旧 18 值集合内**,无新增/删除迹象;`a4-1-1` 列表视图 data.js 仅含 `甲方(中高职)` 单元格值,18 值枚举不在页面级资源。**新原型正面印证决策架构**:`a4-3-3-1_新增客户信息.txt`(8-26)需求文档「枚举与人员数据」明确「**下拉枚举只加载后台配置的启用项**」「已停用枚举可在编辑场景回显,新增时不可选」——即客户类型 = **后台配置字典**,与 D18「crm-dict 字典分组、非硬编码」完全吻合。**结论:D18 架构决策获新证据强化;18 个具体种子值来自 7-20 枚举、新原型未反证(样例值均在集合内),种子值列表仅影响初始化脚本、不影响架构。D18 ✅ 保持。** |
||||
|
|
||||
|
### ✅ 4.6 D24 导入「重复时不导入」默认 —— 已确认(grill Q14 用户拍板 A),非缺陷 |
||||
|
- 我默认「重复时不导入」(重复组全失败)。但**很多导入场景用户是想"更新老客户"的**,默认不导入可能让大批行失败。 |
||||
|
- **请确认**:默认到底该是「不导入」还是「更新」?还是按导入方式(仅新增/仅更新)各自定? |
||||
|
- **✅ 已确认(grill Q14,用户拍板 A)**:文件内多行匹配同一客户,`覆盖导入`/`重复时不导入` 互斥,**默认「重复时不导入」**——重复组全部标失败不写入,用户看失败明细处理。覆盖模式作为可选项存在但不默认。 |
||||
|
|
||||
|
### ✅ 4.7 D21 ngram FULLTEXT —— 已确认可用(MySQL 8.4.8) |
||||
|
- 一期最简用 MySQL ngram 分词器(token_size=2)。**ngram parser 是 MySQL 5.7.6+ 功能**,且对中文分词效果一般(会切出大量无意义二元组)。 |
||||
|
- **请确认**:项目 MySQL 版本是否 ≥5.7.6?若偏低,ngram 不可用,得回退 LIKE + Levenshtein(或我提过的 Jaccard)。 |
||||
|
- **✅ 已确认(20260902)**:项目 MySQL = **8.4.8**,≥5.7.6,ngram 分词器可用,无需回退。 |
||||
|
|
||||
|
### ✅ 4.8 D17b 保存视图复用平台 —— 已确认(`user_saved_view` 支持多 scope_key) |
||||
|
- 我复用现有保存视图平台并假设它支持多 scope。**请核对** crm-auth / 现有平台的 `user_saved_view` 表结构和 scope 机制,确认"公海/总览/我的客户"各存一套视图不会串。 |
||||
|
- **✅ 已确认(20260902)**:`user_saved_view` 平台支持多 scope_key(每入口各存一套),公海/总览/我的客户各自保存不串。 |
||||
|
|
||||
|
### ✅ 4.9 D9 视图「内置视图不入库」 —— 已确认(逻辑视图,内置硬编码) |
||||
|
- 我写内置视图(如"我的客户-未跟进N天")硬编码不入库,用户自定义视图才入库。但这个边界(哪些算内置、哪些算自定义)我没问用户,是拍脑袋定的。 |
||||
|
- **请确认**:哪些内置视图是必须的?用户能不能改/删内置? |
||||
|
- **✅ 已确认(20260902)**:三个 workspace(公海/总览/我的客户)= 逻辑视图,靠 `@DataScope` + `owner_user_id IS NULL` + `archive_status` 过滤区分,**不建独立表**;内置视图(含常用检索)硬编码不入库,用户自定义视图才入库,边界成立。 |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 5. 需要用户明确但**我可能漏问**的点 |
||||
|
|
||||
|
1. **公海 vs 我的客户是否允许"重复看到同一客户"**:一个客户在公海,同时又被我领了,会不会同时在两个列表出现?(我默认:有主就只在我的客户,公海只出无主,二者互斥。) |
||||
|
- **✅ 原型铁证已定向(20260902)**:`a4-1-1_客户公海列表_列表视图_.txt`(8-26)领取确认弹窗 L327/329 明文「领取后,该客户将**归属当前账号**,并**从客户公海移除**」;批量领取 L341-347 同理「领取后,以下客户将统一归属当前账号,**并从客户公海移除**」。 |
||||
|
- **结论**:**§5.1 消号**。公海与我客户**互斥**(领取=移出公海,归属有主)。D3(归属⊥归档双轴)+ D9(公海=owner IS NULL 逻辑视图)原判**正确,维持**。无需拍板。 |
||||
|
- **区分「关注」**:公海列表有「关注/取消关注」(个人关注状态,如 L89 取消关注 / L129 关注),关注≠领取,**不改变归属**,客户仍在公海。「我关注的客户」是检索维度,可含公海客户,但不影响互斥模型。 |
||||
|
2. **客户能否被多个负责人共同跟**?我默认单负责人(owner_user_id 单值)——但原型有"团队成员"页签,可能暗示多协作者。**这是竞品常见分歧点,我没问。** |
||||
|
- **✅ 原型铁证已定向(20260902)**:`a4-4-8_客户详情_团队成员_.txt`(8-26)需求说明 **11.1 角色与管理权限** 明文「**每个客户只允许 1 名负责人,其余成员均为协同人**(如销售协同人、方案工程师等)」「协同人可查看对应客户的信息」。团队成员页签展示角色列(负责人/协同人)+ 添加成员(搜索多选、不可重复)+ 删除成员(二次确认、仅撤销后续访问权限、不影响历史记录)。 |
||||
|
- **结论**:**§5.2 消号**。客户**单负责人**(owner 单值)+ **多个协同人**(团队成员表),协同人可见但非负责人。D3/D5/D7 单负责人原判**正确,维持**;「团队成员」页签 = 负责人+协同人列表,非多负责人。无需拍板。移除「多负责人」这一待确认项。 |
||||
|
3. **删除语义**:D19 已归档=软删,但「归档」按钮 vs「彻底删除」——有没有彻底物理删除的入口?我默认没有(只有归档)。 |
||||
|
- **✅ 原型证据已梳理(20260902)**:客户「删除」= **逻辑删除**(`deleted` 标志),无前端直接"删除"入口、无物理删除。依据: |
||||
|
- `a4-4-1_客户详情_客户信息_.txt` 操作区仅「归档」(L127)+「标记重点客户」,**无"删除"按钮**; |
||||
|
- `a4-4-1_客户详情_已归档客户_.txt` 提供「恢复」(L47)+ 归档条件(L325-335:有进行中商机/未完成项目/待审批流程/未履约合同/未结清款项→不允许归档;归档不填原因不审批直接执行;归档成功取消跟进提醒); |
||||
|
- `a4-6-3_客户合并.txt` L323「合并成功后保留主客户,将其他已选客户**标记为已合并并执行业务软删除,不做物理删除**」; |
||||
|
- `a4-3-3-1_新增客户信息.txt` L690 / `a4-6-1` L315 查重范围 = 「全部**未删除**客户」→ 存在 `deleted` 逻辑删除标志。 |
||||
|
- **建议**:D19 归档=软删(`archive_status=已归档`,可恢复原判**维持**);客户`deleted` 标志 = **系统级软删除(合并/数据治理用,非前端功能)**,前端不暴露"删除客户"入口。**三态档案(有效/已归档/已被合并)+ deleted 软删标志并存**,需确认 deleted 是否仅合并时由系统置 1(而非用户手动删)。**此项需你拍板:客户删除入口是否彻底不做?** |
||||
|
- **✅ 已拍板(用户选 A,20260902)**:**一期只做归档**——不提供任何前端"删除客户"入口;用户侧只有归档(软删可恢复)+ 合并(源客户系统软删,且合并本体 Out-of-scope);`deleted` 标志仅系统在合并时置 1,**不开放手动删除、无前端删除按钮**;DB 不做物理删除。**票 02-answer(archiveStatus 三值→两值去掉已被合并、deleted 补充说明)+ 票 01-answer 已同步。** |
||||
|
4. ~~**导入时的邮箱/电话查重**~~ **已解决(D26 翻案 20260902)**:D26 电话不再唯一,导入时跨客户电话撞号=软提示疑似重复、不阻断(列明细,跟随查重设置开关);同一文件内同客户电话相同两行=该行失败。已回填票 09-answer。 |
||||
|
5. **操作日志保留时长**:customer_oplog 字段级日志,有没有保留期/归档策略?我默认无限期。 |
||||
|
- **✅ 原型证据已定向(20260902)**:`a4-4-8_客户详情_操作日志_.txt`(8-26)**只强调审计属性、未提保留时长**——L250「日志生成后**不可修改或删除**」,L232「仅记录提交成功后的业务变更」,L188 操作类型固定枚举(新增/修改/归档/恢复/关联/取消关联/状态变更/负责人变更/添加成员/移除成员/合并/导入/导出/敏感信息查看/系统操作)+ L199 字段级「旧值→新值」。即原型把操作日志定位为 **append-only 审计日志**。 |
||||
|
- **结论**:保留时长**原型无要求 = 技术决策**(非规格缺口)。**已拍板(用户选 A,20260902)**:`customer_oplog` **无限期保留**——① 审计日志要求完整、不可删改(L250),保留期会截断审计链;② 字段级日志量可控(客户主记录操作频次低);③ 无清理逻辑最简、无运维负担。**票 07-answer 已补保留策略行。** |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 7. 本轮复核结论(20260902,fresh 原型第三轮) |
||||
|
|
||||
|
**复核方式**:对 4 个 7-20 过期快照页(a7-3-3-2 查重设置 / a7-3-3-1 超期提醒 / a4-4-1 客户信息 / a4-1-1 公海列表)用本机 Lanhu Python MCP 重新提取 **8-26 fresh** 文本,逐项对照。 |
||||
|
|
||||
|
**§4 九个薄弱点 —— 全部闭环**: |
||||
|
|
||||
|
| 项 | 结论 | 拍板 | |
||||
|
|---|---|---| |
||||
|
| 4.1 D20 重潜触发 | **翻案**:原型=「提交**并报备成功**」两条件,原判「已提交」错误 | **用户选 B**:本期不触发、只留 seam | |
||||
|
| 4.2 D22 直属总监 | **确认**(补全「调动/区域调整=下拉选」,仅离职才阻断) | 维持 | |
||||
|
| 4.3 星级/阶段 | **确认**(阶段 A 口径 / 星级两点确认) | 维持 | |
||||
|
| 4.4 D26 电话查重 | **翻案**:原型查重设置页证明电话=软提示非唯一 | **用户选 A**:可配置软提示、不建唯一索引 | |
||||
|
| 4.5 D18 18 值 | **消号强化**:后端字典架构获 fresh 印证 | 维持 | |
||||
|
| 4.6 D24 重复导入默认 | **确认**(非缺陷) | 维持 | |
||||
|
| 4.7 D21 ngram | **确认**(MySQL 8.4.8) | 维持 | |
||||
|
| 4.8 D17b 保存视图 | **确认**(多 scope_key 不串) | 维持 | |
||||
|
| 4.9 D9 内置视图不入库 | **确认**(逻辑视图) | 维持 | |
||||
|
|
||||
|
**§5 五个漏问点 —— 全部闭环(新增 2 个拍板)**: |
||||
|
|
||||
|
1. 公海/我客户互斥 —— ✅ 消号(领取即移出公海,原型 L327-347) |
||||
|
2. 多负责人 —— ✅ 消号(**单负责人 + 多协同人**,原型 a4-4-8 明文「每个客户只允许 1 名负责人,其余均为协同人」) |
||||
|
3. **客户删除入口** —— **✅ 拍板 A(一期只做归档)**:无前端删除按钮,deleted 仅系统合并置位 |
||||
|
4. 导入电话查重 —— ✅ 已随 D26 解决(软提示) |
||||
|
5. **oplog 保留时长** —— **✅ 拍板 A(无限期保留)**:审计日志不设保留期 |
||||
|
|
||||
|
**本次修正的字段口径(D19 拍板后的遗留同步)**: |
||||
|
- `archive_status` 收敛为 **有效1 / 已归档2** 两值(去掉「已被合并」,合并 Out-of-scope) |
||||
|
- 已归档 = **删除语义(软删)**,不做独立 tab/子页,列表加 `archive_status` 筛选(默认排除) |
||||
|
- 已同步:`crm-customer/CONTEXT.md`(L8/27-28/36/40/56)+ 票 01-answer / 02-answer + map.md D19/D9 + 各 research 子票加顶部废弃注记 |
||||
|
|
||||
|
**结论**:**全部 29 项决策 + 4 个复核翻案(D20/D26)+ 2 个新增拍板(§5.3 删除 / §5.5 oplog)已定稿**,spec 冻结,可进入实现阶段。 |
||||
|
|
||||
|
## 6. 交付状态 |
||||
|
|
||||
|
- `map.md`:D1–D29 全部记录,Frontier = 空,spec 冻结标记。 |
||||
|
- `issues/NN-answer.md` × 11:全部 `Status: resolved`,各⚠挂号/待确认小节已销号。 |
||||
|
- `issues/NN-<slug>.md` × 11:research/task 子票,全部 `Status: resolved`。 |
||||
|
- `crm-customer/CONTEXT.md` + `CONTEXT-MAP.md` 行:已建。 |
||||
|
- 未动任何 Java 源码(git status 里的 `Opportunity.java` 变更与本 effort 无关,是既有改动)。 |
||||
|
|
||||
|
**下一步**:交给新会话按第 3、4 节方法复核。若复核对 4.1–4.9 有改动,改对应决策编号 + 重开相应票(如 D20 改 → 重开票 05),而非覆盖原决策(遵循编号+修正链约定)。 |
||||
@ -0,0 +1,38 @@ |
|||||
|
## Answer |
||||
|
|
||||
|
**Status: resolved** |
||||
|
|
||||
|
### 交付物 |
||||
|
|
||||
|
1. **`crm-customer/CONTEXT.md`** 已创建(ubiquitous language,纯 glossary,对称 crm-lead/CONTEXT.md 写法)。收录 11 个核心术语,每个带 `_Avoid_` 校准: |
||||
|
|
||||
|
| 术语 | 关键点 | |
||||
|
|---|---| |
||||
|
| 客户 | 归属(owner)+档案(archive_status)正交;阶段(customer_stage)只前进 | |
||||
|
| 销售负责人 | `owner_user_id`,唯一持有者 | |
||||
|
| 销售部门 | `owner_dept_id` 快照,随负责人变更(区别于线索 dept_id 不变) | |
||||
|
| 协同人 | 非负责人成员,可看不可归档/合并 | |
||||
|
| 客户阶段 | 潜在/重潜/已成交,外部结果驱动,不可手动改 | |
||||
|
| 档案状态 | 有效/已归档(D19 去掉「已被合并」,合并 Out-of-scope);正交于归属;已归档即删除语义(软删) | |
||||
|
| 客户公海 | owner 空 + 有效的逻辑视图,无独立池实体 | |
||||
|
| 客户总览 | 管理视角,@DataScope 覆盖 | |
||||
|
| 我的客户 | 销售视角,负责人或协同人 + 有效 | |
||||
|
| 联系人 | 子实体,必属客户,无独立 ACL | |
||||
|
| 人脉关系单位 | 纯文本标签,非关联客户 | |
||||
|
| 客户交割 | 两段式:交接→分配,同步商机/项目负责人 | |
||||
|
| 超期未跟进提醒 | crm-rule 全局单例,只落待发通知 | |
||||
|
|
||||
|
2. **`CONTEXT-MAP.md`** 已加一行:`crm-customer` 客户业务。 |
||||
|
|
||||
|
3. **术语校准点**(相比票内初稿的修正): |
||||
|
- 明确「销售部门是**随负责人变更的快照**」——区别于线索 `dept_id` 全生命周期不变(这是本模块与线索的重要语义差异)。 |
||||
|
- 明确「协同人抛公海清空、交割不自动恢复」。 |
||||
|
- 「客户公海 = 逻辑视图」写进定义,杜绝将来误建池表。 |
||||
|
|
||||
|
### 依赖方向(定稿) |
||||
|
|
||||
|
``` |
||||
|
crm-opportunity → crm-customer(商机读客户/建关联) |
||||
|
crm-customer → crm-rule → (crm-auth / crm-dict / crm-file) |
||||
|
crm-customer → crm-opportunity(「关联商机」页签下游反查上游,同库单体可接受,ADR-0029 技术债) |
||||
|
``` |
||||
@ -0,0 +1,176 @@ |
|||||
|
|
||||
|
## Answer |
||||
|
|
||||
|
**Status: resolved** |
||||
|
|
||||
|
### A. 客户主表 `customer`(`crm-customer`) |
||||
|
|
||||
|
#### A1. 字段清单 |
||||
|
|
||||
|
**系统字段(BaseEntity 继承)** |
||||
|
|
||||
|
| Java 字段 | 列名 | 类型 | 说明 | |
||||
|
|---|---|---|---| |
||||
|
| id | id | bigint PK | 自增主键 | |
||||
|
| createTime | create_time | datetime | 创建时间 | |
||||
|
| updateTime | update_time | datetime | 最后修改时间 | |
||||
|
| createBy | create_by | bigint | 创建人 user_id | |
||||
|
| updateBy | update_by | bigint | 最后修改人 user_id | |
||||
|
| deleted | deleted | tinyint(1) default 0 | 逻辑删除(**一期:仅系统在合并时置 1,不开放手动删除/无前端删除入口**——§5.3 拍板 A) | |
||||
|
|
||||
|
**业务字段 — 系统生成** |
||||
|
|
||||
|
| Java 字段 | 列名 | 类型 | 必填 | 说明 | |
||||
|
|---|---|---|---|---| |
||||
|
| customerNo | customer_no | varchar(32) | 系统生成 | 唯一编号,格式 KH+yyyyMMdd+4位序;只读不可改 | |
||||
|
|
||||
|
**业务字段 — 基本信息** |
||||
|
|
||||
|
| Java 字段 | 列名 | 类型 | 必填 | 说明 | |
||||
|
|---|---|---|---|---| |
||||
|
| customerName | customer_name | varchar(100) | ✅ | 客户名称;停输防抖触发相似查重 | |
||||
|
| customerType | customer_type | varchar(50) | ✅ | 客户类型字典 `customer_type`;见 A3 字典节 | |
||||
|
| provinceCode | province_code | varchar(20) | ✅ | 省(三级地区,与商机对称)| |
||||
|
| cityCode | city_code | varchar(20) | ✅ | 市 | |
||||
|
| districtCode | district_code | varchar(20) | | 区/县(客户有三级,商机只二级) | |
||||
|
| industryCode | industry_code | varchar(50) | ✅ | 行业一级 code(复用 crm-dict `industry` 两级树;客户选到二级,见商机图 D1「行业字典口径」决策:商机选一级、客户选二级)| |
||||
|
| industryChildCode | industry_child_code | varchar(50) | | 行业二级 code(客户额外存二级;商机无此列) | |
||||
|
| customerStarLevel | customer_star_level | tinyint | ✅ | 客户星级 1~5(枚举,非字典;字典值「一星/二星/…/五星」=前端展示用,存数字) | |
||||
|
| relationStarLevel | relation_star_level | tinyint | ✅ | 关系星级 1~5(同上) | |
||||
|
| networkUnits | network_units | text | | 人脉关系单位,JSON 数组存标签名(单个≤50字;非关联 CRM 客户;选填) | |
||||
|
|
||||
|
> ⚠ **JPA/Hibernate 孤立单大写字母规则**(AGENTS.md):`districtCode` / `industryCode` / `industryChildCode` / `provinceCode` / `cityCode` / `customerNo` / `customerStarLevel` / `relationStarLevel` — 均为「完整词+Code/Level/No」,非孤立单大写,**不需加 `@Column(name=...)`**。 |
||||
|
|
||||
|
**业务字段 — 归属(轴1)** |
||||
|
|
||||
|
| Java 字段 | 列名 | 类型 | 必填 | 说明 | |
||||
|
|---|---|---|---|---| |
||||
|
| ownerUserId | owner_user_id | bigint | ✅(新增时) | 销售负责人 user_id;公海时为 NULL | |
||||
|
| ownerUserNameSnapshot | owner_user_name_snapshot | varchar(64) | | 负责人姓名快照(列表免 join) | |
||||
|
| ownerDeptId | owner_dept_id | bigint | ✅(新增时) | 销售部门 dept_id 快照;公海时保留最后部门(供公海可见性锚点,对称商机) | |
||||
|
| ownerDeptNameSnapshot | owner_dept_name_snapshot | varchar(64) | | 部门名快照 | |
||||
|
|
||||
|
> 协同人(团队成员)= 独立子表 `customer_team_member`(不在主表)。 |
||||
|
|
||||
|
**业务字段 — 轴2 阶段 + 档案状态** |
||||
|
|
||||
|
| Java 字段 | 列名 | 类型 | 必填 | 说明 | |
||||
|
|---|---|---|---|---| |
||||
|
| customerStage | customer_stage | tinyint default 1 | | 客户阶段:潜在1/重潜2/已成交3;只增不减;不可手动改 | |
||||
|
| archiveStatus | archive_status | tinyint default 1 | | 档案状态:**有效1/已归档2**(D19 拍板去掉「已被合并」,合并 Out-of-scope);正交于归属;已归档即删除语义(软删),列表加 `archive_status` 筛选默认排除 | |
||||
|
|
||||
|
**业务字段 — 快照/冗余(列表免 join)** |
||||
|
|
||||
|
| Java 字段 | 列名 | 类型 | 说明 | |
||||
|
|---|---|---|---| |
||||
|
| lastValidFollowTime | last_valid_follow_time | datetime | 最近有效跟进时间(新建时=create_time;每写一条跟进记录刷新;超期提醒计时锚点) | |
||||
|
| strategicAgreementLevel | strategic_agreement_level | tinyint | 战略协议等级快照(1~3级;战略协议子域划出但主表留此冗余供列表展示;NULL=未签);由战略协议子系统写入,本图只读 | |
||||
|
| vipCustomerLevel | vip_customer_level | tinyint | 已成交VIP客户等级快照(1~5级;NULL=无;由 A5 项目模块写入,本图只读/留 seam)| |
||||
|
|
||||
|
> ⚠ `strategicAgreementLevel` → Hibernate 命名策略**孤立单大写字母**:`Level` 前面的 `l` 是小写 → `strategicAgreement` + `Level` 整段。实测 `SpringPhysicalNamingStrategy` 对 `strategicAgreementLevel` 生成 `strategic_agreement_level` ✅(`Level` 是完整词,无问题)。但 `vipCustomerLevel` → `vip` 首字母 `v` 是小写,`C` 是孤立大写?→ 不是,`vip` 是小写词,`Customer` 是完整词,`Level` 是完整词,**不踩坑**。 |
||||
|
|
||||
|
**业务字段 — 关联信息** |
||||
|
|
||||
|
| Java 字段 | 列名 | 类型 | 必填 | 说明 | |
||||
|
|---|---|---|---|---| |
||||
|
| companyDecisionMaker | company_decision_maker | varchar(100) | | 公司决策人(文本) | |
||||
|
| isBizNegotiated | is_biz_negotiated | tinyint | ✅ | 是否商机勾兑(是1/否0) | |
||||
|
| directorVisitTime | director_visit_time | datetime | | 总监近期拜访时间(人工维护,日期时间)| |
||||
|
| isChild | is_child | tinyint default 0 | ✅ | 是否子客户(是1/否0);=1时 parent_customer_id 必填 | |
||||
|
| parentCustomerId | parent_customer_id | bigint | 条件必填 | 父客户 id;服务端防环校验;isChild=0时为 NULL | |
||||
|
| parentCustomerNameSnapshot | parent_customer_name_snapshot | varchar(100) | | 父客户名称快照 | |
||||
|
| cooperationSystem | cooperation_system | varchar(200) | | 合作系统(文本,选填) | |
||||
|
| nonCoopReason | non_coop_reason | varchar(200) | | 不合作原因(文本,选填) | |
||||
|
| joinedPresidentClass | joined_president_class | tinyint | | 是否参加总裁班(是1/否0/NULL=未选) | |
||||
|
| presidentClassPerson | president_class_person | varchar(100) | 条件必填 | 总裁班参加人(joinedPresidentClass=1时必填) | |
||||
|
| presidentClassPhone | president_class_phone | varchar(20) | 条件必填 | 总裁班参加人电话 | |
||||
|
| joinedProductClass | joined_product_class | tinyint | | 是否参加产品经理班 | |
||||
|
| productClassPerson | product_class_person | varchar(100) | 条件必填 | 产品班参加人 | |
||||
|
| productClassPhone | product_class_phone | varchar(20) | 条件必填 | 产品班参加人电话 | |
||||
|
|
||||
|
**业务字段 — 工商信息(企查查回填)** |
||||
|
|
||||
|
| Java 字段 | 列名 | 类型 | 说明 | |
||||
|
|---|---|---|---| |
||||
|
| unifiedCreditCode | unified_credit_code | varchar(18) | 统一社会信用代码;UNIQUE(NULL 除外,未填时不唯一约束);18 位格式校验 | |
||||
|
| legalRepresentative | legal_representative | varchar(100) | 法定代表人 | |
||||
|
| establishedDate | established_date | date | 成立时间(不得晚于当前日期) | |
||||
|
| registeredCapital | registered_capital | varchar(100) | 注册资本(文本,含单位,如「1000万元」) | |
||||
|
| businessScope | business_scope | text | 经营范围(不套 50 字限制) | |
||||
|
| staffSize | staff_size | varchar(50) | 人员规模 | |
||||
|
| annualRevenue | annual_revenue | varchar(50) | 年产值 | |
||||
|
| businessAddress | business_address | varchar(500) | 工商注册地址(不套 50 字限制) | |
||||
|
| bizNameFromLookup | biz_name_from_lookup | varchar(200) | 企查查确认的工商名称(可与 customer_name 不同;只存不覆盖 customer_name,除非用户确认)| |
||||
|
|
||||
|
**业务字段 — 补充资料** |
||||
|
|
||||
|
| Java 字段 | 列名 | 类型 | 说明 | |
||||
|
|---|---|---|---| |
||||
|
| remark | remark | varchar(500) | 备注(≤500字) | |
||||
|
|
||||
|
> 附件 = 独立子表 `customer_attachment`(复用 crm-file,`biz_type=CUSTOMER`;不在主表)。 |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
#### A2. 需要显式 `@Column(name=...)` 的孤立单大写字母字段 |
||||
|
|
||||
|
检查全部字段——**结论:本表无需加 `@Column(name=...)`**。所有字段均为「完整词 + 完整词」组合,无孤立单大写字母触发 Hibernate 命名策略陷阱。 |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
#### A3. 字典清单(新增/复用) |
||||
|
|
||||
|
| 字典分组 code | 含义 | 状态 | 参考值 | |
||||
|
|---|---|---|---| |
||||
|
| `customer_type` | 客户类型 | 🆕 需新增 | **(grill Q8/D18 定稿,18 值)** 运营商 / 土建总包 / 机电总包 / 装修总包 / 教育局 / 投资(代建)公司 / 设计院 / 集成商 / 集成商(子客户) / 咨询造价公司 / 甲方(企业用户) / 甲方(普教) / 甲方(中高职) / 甲方(政府机关) / 竞争同行 / 个人用户 / 操手 / 招标代理 | |
||||
|
| `industry` | 行业(两级树) | ✅ 已有(商机图票09已建;9一级+51二级) | 复用 | |
||||
|
| `customer_star_level` | 客户星级 | **硬编码枚举 1~5(D4-rev1 定稿,不走字典)** | 1~5 星 | |
||||
|
| `relation_star_level` | 关系星级 | **硬编码枚举 1~5(D4-rev1 定稿,不走字典)** | 一星~五星 | |
||||
|
|
||||
|
> ✅ 已定(grill Q8/D18):`customer_type` = crm-dict 字典分组,18 值(见上表)。含 4 甲方值 + 14 非甲方角色值,是通用角色字典。 |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
#### A4. DataScope 注解 |
||||
|
|
||||
|
```java |
||||
|
@DataScope(module = "customer", ownerColumn = "owner_user_id", deptColumn = "owner_dept_id") |
||||
|
``` |
||||
|
|
||||
|
复用 crm-auth `DataScopeEnum(SELF/DEPT/DEPT_AND_CHILD/ALL)`,不新建可见性机制。 |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
#### A5. 索引 |
||||
|
|
||||
|
| 索引名 | 列 | 说明 | |
||||
|
|---|---|---| |
||||
|
| `uk_unified_credit_code` | `unified_credit_code` | 信用代码全局唯一(NULL 不参与唯一约束,MySQL 默认行为)| |
||||
|
| `idx_owner_stage` | `owner_user_id, customer_stage, deleted` | 我的客户视图常用过滤 | |
||||
|
| `idx_dept_stage` | `owner_dept_id, archive_status, deleted` | 公海/总览部门维度 | |
||||
|
| `idx_name` | `customer_name` | 相似查重防抖查询 | |
||||
|
| `idx_parent` | `parent_customer_id` | 父子客户查询/防环 | |
||||
|
| `idx_last_follow` | `last_valid_follow_time, owner_user_id` | 超期未跟进提醒扫表 | |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
#### A6. 产品确认项(⚠ P0)— 已随 grill 全部销号 |
||||
|
|
||||
|
| # | 问题 | 影响 | |
||||
|
|---|---|---| |
||||
|
| P0-1 | ~~`customer_type` 完整枚举值~~ **已拍板(grill Q8/D18)**:crm-dict 字典,18 值 | 字典种子数据 | |
||||
|
| P0-2 | ~~客户选行业到几级~~ **定稿:二级**(`industry_code` + `industry_child_code` 两列;与商机图 D1 一致) | 两列 | |
||||
|
| P0-3 | ~~星级枚举 vs 字典~~ **已拍板(D4-rev1)**:硬编码枚举 1~5,不走字典 | 存储类型 | |
||||
|
| P1-1 | `vip_customer_level` 等级范围(原型列表列有「已成交VIP客户等级」但详情字段写「1~5级」,待确认范围及触发条件,本图只留 seam) | — | |
||||
|
| P1-2 | `strategic_agreement_level` 战略协议等级范围(原型见「一级/二级/三级」=1~3;战略协议子域划出,主表只存冗余快照,待战略协议 effort 回填写逻辑) | — | |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
#### A7. 回填 ticket 02 的下游影响 |
||||
|
|
||||
|
- **票 03**(三视图):`archiveStatus` 过滤(**有效1/已归档2**,无已被合并——D19),`ownerUserId IS NULL` = 公海视图;`last_valid_follow_time` 排序。 |
||||
|
- **票 04**(查重):`unified_credit_code` UNIQUE 索引 + `customer_name` idx 是查重的存储底座。 |
||||
|
- **票 05**(阶段):`customer_stage` 默认1,只能 UPDATE SET customer_stage=? WHERE id=? AND customer_stage < ?(只前进)。 |
||||
|
- **票 07**(oplog):`last_valid_follow_time` 新建时初始化为 `create_time`。 |
||||
|
- **票 08**(交割):`ownerUserId` + `ownerDeptId` 是交割换主的操作列。 |
||||
|
- **票 10**(超期提醒):`last_valid_follow_time` 是计时锚点;新建时初始化为 `create_time`(grill 挂号确认,见 map.md)。 |
||||
@ -0,0 +1,94 @@ |
|||||
|
|
||||
|
## Answer |
||||
|
|
||||
|
**Status: resolved**(含 grill Q9 归档=删除 + Q15 领取赋锚点回填) |
||||
|
|
||||
|
### A. 三个 workspace 数据范围(定稿) |
||||
|
|
||||
|
| workspace | 数据范围 | 附加状态页 | |
||||
|
|---|---|---| |
||||
|
| **我的客户** | 当前用户为**销售负责人或协同人** 且 `archive_status=有效(1)` 且 **非公海**(owner 非空) | **无独立归档子页**(归档=删除,见 grill Q9/D19;列表加 `archive_status` 筛选默认排除) | |
||||
|
| **客户总览** | `@DataScope` 覆盖组织范围的 **未删除、未进入公海** 客户(默认只列 `archive_status=1`) | **无独立归档 tab**(归档=删除,加筛选条件默认排除,可勾选查询) | |
||||
|
| **客户公海** | `archive_status=有效(1)` **且 `owner_user_id IS NULL`** 逻辑视图 | 无 | |
||||
|
|
||||
|
- **公海不是独立实体**,无池表;对称商机公海 = 逻辑视图(chart D3)。 |
||||
|
- **管理职务不扩大「我的客户」数据范围**(原型 2.1 §6 明文);管理视角走「客户总览」。 |
||||
|
- **协同人视角**:协同人可见客户(进「我的客户」),但**不得归档/合并**(仅负责人可,原型 2.2 §4)。 |
||||
|
|
||||
|
### B. 内置视图 / 常用检索(硬编码,不入库) |
||||
|
|
||||
|
**我的客户** 内置:`我负责的客户`(owner=我) / `我协同的客户`(团队成员表含我) / `待跟进的客户`(有下次跟进时间且 ≤ now) / `我关注的客户`(关注表) / `最近访问`(view_log 倒序)。 |
||||
|
|
||||
|
**客户公海** 内置:`最近访问` / `我关注的客户`(原型 A4-1-1 检索列表只见这两项 + 自定义)。 |
||||
|
|
||||
|
**客户总览** 内置:`最近访问` / `我关注的客户` / `我负责的客户` / `我协同的客户`(原型 A4-2-1 有「我负责的/我协同的」身份筛选)。 |
||||
|
|
||||
|
> 自定义视图 = crm-preference 平台能力,票 11 接入(三个 scope_key)。内置视图**不落库**,口径硬编码(对称商机票 14 拍板)。 |
||||
|
|
||||
|
### C. 三视图模式(定稿) |
||||
|
|
||||
|
| workspace | 视图模式 | |
||||
|
|---|---| |
||||
|
| 我的客户 | 表格 / 列表详情(左表+右详情) / **看板** | |
||||
|
| 客户总览 | 表格 / 列表详情 / **看板** | |
||||
|
| 客户公海 | 表格 / 分屏(左表+右详情) | |
||||
|
|
||||
|
- **看板视图分组页签 = 三个**:`客户阶段` / `客户星级` / `关系星级`(原型 A4-3-1 §1.3 明文「看板视图包含客户阶段、客户星级、关系星级三个分组页签」;A4-2-1 卡片视图顶部即「潜在客户(3)/重潜客户(3)/已成交客户(3)」)。 |
||||
|
- ⚠ **本期注记(D20 改票 B)**:客户阶段本期实际只有「潜在」(重潜/已成交触发链路 seam 不可达),故本期看板「客户阶段」分组下客户均堆在「潜在客户」列,重潜/已成交列恒为空。**这是预期行为、非 bug**:看板仍按 `customer_stage` 正常分组,三列骨架照旧渲染,链路就绪后自然填充;不得为填列而造假阶段数据。 |
||||
|
- **视图切换记住用户偏好**(复用 crm-preference 列偏好能力;对称商机票 14);首次默认表格视图。 |
||||
|
- 勾选跨分页保留;全选仅当前页/当前批次;批量操作按已勾选 ID 集合执行。 |
||||
|
|
||||
|
### D. 共用列(定稿,三 workspace 同款列基础 + 差异列) |
||||
|
|
||||
|
**共用列**:客户名称(固定列不可隐藏) / 客户编号 / 客户类型 / 所属地区 / 行业 / 客户阶段 / 客户星级 / 关系星级 / 战略协议等级(快照) / 已成交VIP客户等级(快照) / 关联业务(商机/项目计数) / 最近跟进时间。 |
||||
|
|
||||
|
**差异列**: |
||||
|
- 我的客户 / 客户总览:+ 销售负责人 / 销售部门。 |
||||
|
- 客户公海:+ **进入公海时间**(`enter_pool_time`,见票 03 回填) / 无销售负责人列(owner 空)。 |
||||
|
|
||||
|
**字段设置** = crm-preference 列偏好(列显隐/排序,用户级);客户名称为固定列不参与设置。 |
||||
|
|
||||
|
### E. 归属迁移动作枚举(定稿) |
||||
|
|
||||
|
| 动作 | 语义 | 前置校验 | 触发方 | |
||||
|
|---|---|---|---| |
||||
|
| 领取 | 公海→个人(owner 空→当前用户) | 客户仍在公海 + 无进行中商机/项目 | 普通销售 | |
||||
|
| 分配 | 公海→个人 / 个人→个人(换 owner) | 目标人员启用 + 有权分配范围 + 非原负责人 | 领导/管理 | |
||||
|
| 抛公海 | 个人→公海(清 owner+协同人) | **无进行中商机/项目**(原型 A4-1-1 §3 明文)+ 有抛公海权限 | 领导/管理 | |
||||
|
| 归档 | 有效→已归档(archive_status 1→2) | 仅销售负责人可;**无进行中商机/项目**(原型 A4-3-1 归档弹窗明说) | 销售/领导 | |
||||
|
| 恢复 | 已归档→有效(2→1) | 仅销售负责人可 | 销售/领导 | |
||||
|
| 交割 | 换 owner(跨模块同步商机/项目负责人) | 票 08 专管 | 销售本人 | |
||||
|
|
||||
|
- 每边**写操作日志**(票 07 oplog);CAS 乐观锁 + 版本号。 |
||||
|
- **批量操作部分失败不回滚**(按客户逐条独立事务,跳过已不可操作项,Toast 报成功/跳过数)——**例外:批量归档整批预检**,任一失败整批不执行(原型 A4-3-1 §3.6 明文)。 |
||||
|
- **「进行中商机/项目」阻止抛公海/归档**:商机侧读 crm-opportunity(状态=推进中 即 opp_status=2);**项目侧留 seam**(A5 未建,先跳过项目那半,等 A5 建好补校验)。 |
||||
|
- **领取/分配 后端副作用(D25,票10 锚点)**:从公海领取或分配到一个负责人时,若 `last_valid_follow_time` 为空(客户此前无主/无锚点)→ 赋当前时刻(超期提醒开始计时)。抛公海/归属迁移不动锚点(仍需有主才计时)。 |
||||
|
|
||||
|
### F. 新增字段(回填票 02) |
||||
|
|
||||
|
| Java 字段 | 列名 | 类型 | 说明 | |
||||
|
|---|---|---|---| |
||||
|
| enterPoolTime | enter_pool_time | datetime | 进入公海时间(公海列表列;抛公海时写入,领取/分配时清空) | |
||||
|
|
||||
|
> `enterPoolTime` 无孤立单大写字母陷阱,无需 `@Column(name=...)`。 |
||||
|
|
||||
|
### G. 领导视角 DataScope 映射(对称 crm-auth) |
||||
|
|
||||
|
- 客户总览可见性 = `@DataScope(module="customer")` 套 `DataScopeEnum(SELF/DEPT/DEPT_AND_CHILD/ALL)`,按用户角色配置决定(ADR-0018 按模块可配)。 |
||||
|
- 普通销售**无客户总览菜单权限**时不可见;总监=DEPT_AND_CHILD 或 ALL(按后台配置)。 |
||||
|
- 公海:普通销售看「可领取」= 其部门集合可见范围内 owner 空的客户;领导看「可分配」= 其管理范围。 |
||||
|
|
||||
|
### H. 产品确认项 — 已随 grill 全部销号 |
||||
|
|
||||
|
| # | 问题 | 影响 | |
||||
|
|---|---|---| |
||||
|
| P0-1 | ~~已归档/已被合并 tab 形态~~ **已拍板(grill Q9/D19)**:去掉「已被合并」;**已归档 = 删除**,不做独立 tab/子页,列表加 `archive_status` 筛选条件(默认排除已归档,勾选可查) | 列表查询参数 | |
||||
|
| P1-1 | ~~进入公海时间排序~~ **已拍板(grill Q19)**:保留列 + 加入排序字段池(升降序) | 排序字段池(票 11) | |
||||
|
|
||||
|
### I. 回填 / 下游影响 |
||||
|
|
||||
|
- **票 02**:新增 `enter_pool_time` 字段(本票 F)。 |
||||
|
- **票 08**(交割):owner 换主 = 本票「分配」动作的扩展版(跨模块同步),交割事务复用 owner 变更 oplog 语义。 |
||||
|
- **票 11**(saved-view):三 workspace 各自 scope_key,字段池白名单 = 本票 D 共用列 + 差异列。 |
||||
|
- **票 07**(oplog):归属迁移(领取/分配/抛公海/归档/恢复/交割)都写 oplog。 |
||||
|
- **票 01**(CONTEXT):术语「客户公海」「销售负责人」「协同人」「归档」「已合并」。 |
||||
@ -0,0 +1,87 @@ |
|||||
|
## Answer |
||||
|
|
||||
|
**Status: resolved** |
||||
|
|
||||
|
### A. 范围(定稿) |
||||
|
|
||||
|
- ✅ **做**:新增/编辑客户时的**内建查重校验** + **企查查外部服务契约 seam**。 |
||||
|
- ❌ **不做**:A4-6 独立查重页 + 客户合并(chart D6);「客户查重设置」可配规则(chart D4);企查查服务内部实现(只定契约)。 |
||||
|
|
||||
|
### B. 查重校验(内建,写死在新增/编辑流程) |
||||
|
|
||||
|
#### B1. 三层查重(定稿) |
||||
|
|
||||
|
| 层 | 时机 | 规则 | 结果 | |
||||
|
|---|---|---|---| |
||||
|
| L1 自动相似提示 | 客户名称**停输防抖**(~300ms) | 名称模糊匹配全部未删除客户 | 只提示不阻止;无权命中的脱敏为「存在匹配记录」 | |
||||
|
| L2 保存时精确查重 | 点击确认提交 | ① 信用代码全局唯一(硬拦)② 名称相似(弹窗确认) | 信用代码同 → 禁止;名称似 → 弹窗「仍要创建/返回修改」 | |
||||
|
| L3 终查(并发兜底) | 「仍要创建」后、写库前 | 再查一次信用代码 + 名称 | 仍无冲突才写库;DB UNIQUE 兜底 | |
||||
|
|
||||
|
#### B2. 相似判定算法 — 已拍板(grill Q11,seam 化) |
||||
|
|
||||
|
原型明说「使用 CRM 后端统一查重服务,不在前端固化阈值」。**我的推荐(最简可行)**:用 **MySQL 内置 `FULLTEXT` 索引 + `MATCH ... AGAINST` 自然语言模式**,或更简单先上 **`LIKE '%name%'` + 编辑距离(Levenshtein) 后置过滤**。 |
||||
|
|
||||
|
- **✅ 已拍板(grill Q11,用户拍板 = seam 化)**:相似度判定**抽成接口/端口**(可替换策略,如 `CustomerDedupService` 内部策略接口或独立 `CustomerNameSimilarityPort`),一期只做**最简实现**,后续迭代可换算法。 |
||||
|
- **一期最简实现**:`customer_name` 建 FULLTEXT 索引(ngram parser, token_size=2),`MATCH(customer_name) AGAINST(?)` 取 topN 候选,再算相似度判定「相似」;信用代码精确相等判定「重复」。**阈值从「客户查重设置」配置读取(70/80/90%)**,不再写死。 |
||||
|
- **契约稳定、实现可插拔**:调用方不关心具体算法;后续可换 Levenshtein / Jaccard / 外部相似度服务,只替换端口实现。 |
||||
|
- **统一查重服务**:抽 `CustomerDedupService`(crm-customer 内),后续 A4-6 若重启可复用;本期只被新增/编辑流程调用。 |
||||
|
|
||||
|
#### B3. 信用代码校验(定稿) |
||||
|
|
||||
|
- 格式:`^[0-9A-Z]{18}$`(18 位数字或大写字母,原型「18 位数字或字母组合」)。 |
||||
|
- 唯一:`uk_unified_credit_code` 唯一索引(票 02 已建),**NULL 不参与唯一约束**(未填时允许)。 |
||||
|
- 精确相等 → 硬拦禁止创建;命中无权查看的客户只提示「系统已存在该企业」,不显 name/编号/负责人。 |
||||
|
|
||||
|
#### B4. 联系人内联查重(定稿,回填票 06;D26 翻案后校准 20260902) |
||||
|
|
||||
|
- 同一客户内同表格**电话相同两行** → 禁止提交并定位重复行(表单级硬校验)。 |
||||
|
- 无电话 → 按「客户 + 姓名 + 职务」提示疑似重复(只提示)。 |
||||
|
- ~~全库按电话精确查重 → 相同禁止新建~~ **已翻案(D26 用户拍板 A,20260902)**:跨客户电话命中=**软提示疑似重复、不阻断**,受 crm-rule 客户查重设置「联系电话」开关控制(默认开、可关)。不建电话唯一索引。 |
||||
|
|
||||
|
### C. 企查查外部服务契约 seam(定稿) |
||||
|
|
||||
|
#### C1. 端口(不做实现,留 mock) |
||||
|
|
||||
|
```java |
||||
|
// crm-customer 侧出站端口 |
||||
|
public interface CompanyLookupPort { |
||||
|
/** 按企业名查询工商候选列表 */ |
||||
|
List<CompanyCandidate> lookup(String companyName); |
||||
|
} |
||||
|
|
||||
|
record CompanyCandidate( |
||||
|
String bizName, String unifiedCreditCode, String legalRepresentative, |
||||
|
LocalDate establishedDate, String registeredCapital, String businessScope, |
||||
|
String staffSize, String annualRevenue, String address |
||||
|
) {} |
||||
|
``` |
||||
|
|
||||
|
#### C2. 回填范围(定稿,原型 §3.3 明文) |
||||
|
|
||||
|
- **允许回填字段(9 项)**:工商名称 / 统一社会信用代码 / 法定代表人 / 成立时间 / 注册资本 / 经营范围 / 人员规模 / 年产值 / 工商注册地址。 |
||||
|
- **只回填当前为空的字段**(首次选择);已填字段再次选择必须先弹「受影响字段确认」才覆盖;服务返回空值不覆盖原值。 |
||||
|
- **永不覆盖**:客户类型 / 行业 / 所属地区 / 关系星级 / 客户星级 / 销售负责人 / 销售部门 / 协同人 / 人脉关系单位 / 联系人 / 备注。 |
||||
|
- 回填后**立即用信用代码执行精确查重**(B1 L2 联动)。 |
||||
|
|
||||
|
#### C3. 异常语义(定稿) |
||||
|
|
||||
|
| 场景 | 行为 | |
||||
|
|---|---| |
||||
|
| 无结果 | 保留表单,提示「未查询到匹配企业」,可手工填写 | |
||||
|
| 服务失败/超时 | 保留表单,提示重试或手工填写;**不阻断手工提交** | |
||||
|
| 请求乱序 | 只处理最后一次有效请求,旧结果不覆盖当前表单 | |
||||
|
|
||||
|
### D. 编辑客户(定稿,对称新增) |
||||
|
|
||||
|
- 编辑页复用新增表单结构 + 查重校验;编辑时**排除自身**出查重范围(改名字不和自己撞)。 |
||||
|
- 历史停用枚举可回显不可重选(原型公共规则)。 |
||||
|
|
||||
|
### E. 回填 / 下游 |
||||
|
|
||||
|
- **票 02**:`unified_credit_code` 唯一索引 + `customer_name` FULLTEXT(ngram) 索引(A5 索引表补一条 `idx_name_fulltext`)。 |
||||
|
- **票 06**:联系人电话查重(B4)。 |
||||
|
- **票 09**(导入):复用 `CustomerDedupService` 做导入查重。 |
||||
|
|
||||
|
### F. 挂号 — 已随 grill 全部销号 |
||||
|
|
||||
|
1. ~~相似判定算法~~ **已拍板(grill Q11)**:seam 化接口,一期最简 = ngram FULLTEXT,后续可换算法。 |
||||
@ -0,0 +1,56 @@ |
|||||
|
|
||||
|
## Answer |
||||
|
|
||||
|
**Status: resolved**(重潜触发点:grill Q10 拍板 A/保守 → 第三轮 fresh 复核翻案,20260902 改票 B = 本期不触发、只留 seam) |
||||
|
|
||||
|
### A. 三态定义(定稿) |
||||
|
|
||||
|
| 值 | 名称 | 驱动源 | 本图 | |
||||
|
|---|---|---|---| |
||||
|
| 1 | 潜在客户 | 新建客户成功默认值 | ✅ | |
||||
|
| 2 | 重潜客户 | 关联的任一方案卡「提交并报备成功」 | ⚠ seam(触发链路本期不可达,见 C;本期不自动触发) | |
||||
|
| 3 | 已成交客户 | 关联的任一项目「首次中标赢单」 | ❌ 留 seam 给 A5 | |
||||
|
|
||||
|
- **只前进不回退**(原型 A4-4-1 §1 明文:方案卡失败/报备失败/商机输单/项目结束**均不改变**阶段)。 |
||||
|
- **不可手动改**:阶段条不可点击;无面向前端的 setter API;仅内部 port + 外部回调触发。 |
||||
|
- **父子客户不联动**:子客户阶段改变不影响父客户(原型无相关规则)。 |
||||
|
|
||||
|
### B. 存储 + 迁移约束(定稿) |
||||
|
|
||||
|
- `customer.customer_stage` tinyint default 1(票 02 已落)。 |
||||
|
- 迁移 SQL 形态:`UPDATE customer SET customer_stage=? WHERE id=? AND customer_stage < ?`(只前进 CAS,天然幂等,无需去重表)。 |
||||
|
- 迁移失败(已是更高阶段)= no-op 静默成功,不报错不写日志。 |
||||
|
- **每次变化**:写操作日志(票 07 oplog,操作人=`系统` + 注明触发来源)+ 刷新公共头部。 |
||||
|
|
||||
|
### C. 重潜触发点 — 已翻案(grill Q10 拍板 A/保守 → 第三轮 fresh 复核,20260902 用户拍板 B) |
||||
|
|
||||
|
原型 A4-4-1(8-26 fresh 复核确认)明文「任一方案卡**提交并报备成功**后更新为重潜」——是**两个条件**(提交 + 报备成功)。「报备/推送成功」在商机图是 **spin-out 本期不可达**(商机图票 07:方案卡状态=草稿1/已提交2/已推送3;推送链路本期不可达,仅 A5 回调特殊路径可达)。 |
||||
|
|
||||
|
**旧拍板(grill Q10=A/保守,已废)**:曾决定本期先按「方案卡状态=已提交(2)」凑合触发重潜,理由是怕客户阶段永久卡在潜在。 |
||||
|
|
||||
|
**✅ 新拍板(第三轮复核,20260902 用户选 B = 严格/不凑合)**:**本期不自动触发潜在→重潜**。理由:①原型要的是「提交**并报备成功**」两个条件,用「已提交」单条件凑合会造出「提交了但报备没成功、客户却已重潜」的**错误状态**,污染阶段派生字段;②`CustomerStagePort.promote` 的 **seam 全部保留**(契约、只前进 CAS、幂等),只是本期无调用方;③ 待报备成功链路就绪(方案卡「已推送(3)」或 A5 回调)后,由该链路调用 `promote(customerId, 2, "scheme_card_reported")` 触发重潜,改动是接入调用点、非改状态机。**本期客户阶段实际只有「潜在」**(字段/枚举/CAS 机制仍按三态建好)。 |
||||
|
|
||||
|
### D. seam 契约(定稿) |
||||
|
|
||||
|
```java |
||||
|
// crm-customer 侧暴露的端口(消费方 = crm-opportunity 方案卡 / 未来 A5 项目) |
||||
|
public interface CustomerStagePort { |
||||
|
/** 提升阶段;只前进,传入更低阶段 = no-op;返回提升后阶段 */ |
||||
|
int promote(Long customerId, int targetStage, String triggerSource); |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
- `triggerSource` 示例:`scheme_card_reported`(方案卡提交并报备成功,本期链路不可达 seam)/ `project_won`(已成交,A5 seam 占位)。~~`scheme_card_submitted`~~ 已弃用(D20 改票 B,不用「已提交」凑合)。 |
||||
|
- crm-opportunity 方案卡状态机在「已提交」迁移边(或收紧后「已推送」边)**同步调用**此 port(对称 lead→opp port 的同步事务内调用范式;失败抛异常使方案卡事务回滚?→ **不**:阶段提升失败**不阻断**方案卡提交,记日志降级,见 E)。 |
||||
|
|
||||
|
### E. 失败语义(定稿,重要) |
||||
|
|
||||
|
- **阶段提升失败不阻断主业务**:方案卡提交成功但客户阶段提升失败时,方案卡正常提交,阶段提升记日志告警 + 可重试(幂等 no-op 使重试安全)。 |
||||
|
- 理由:客户阶段是**派生冗余视图**(由业务成功结果驱动),不是主业务的一致性边界;用「尽力而为 + 幂等重试」而非「同步强一致回滚」,避免一个派生字段的失败拖垮方案卡主流程。 |
||||
|
- 对称:lead→opp port 是强一致(建商机失败回滚线索),但那是**主业务**;customer_stage 是**派生**,弱一致即可。 |
||||
|
|
||||
|
### F. 回填 / 下游 |
||||
|
|
||||
|
- **票 02**:`customer_stage` 已含。 |
||||
|
- **票 07**:oplog 记录阶段变化(操作人=系统)。 |
||||
|
- **票 01**:CONTEXT.md 术语「客户阶段」。 |
||||
@ -0,0 +1,76 @@ |
|||||
|
## Answer |
||||
|
|
||||
|
**Status: resolved** |
||||
|
|
||||
|
### A. 实体 `customer_contact`(crm-customer,独立表) |
||||
|
|
||||
|
| Java 字段 | 列名 | 类型 | 必填 | 说明 | |
||||
|
|---|---|---|---|---| |
||||
|
| id | id | bigint | | 主键 ASSIGN_ID | |
||||
|
| customerId | customer_id | bigint | ✅ | 所属客户;NOT NULL,无孤立联系人 | |
||||
|
| name | name | varchar(50) | ✅ | 联系人姓名 | |
||||
|
| jobTitleName | job_title_name | varchar(100) | ✅ | 职务名称(文本,始终存) | |
||||
|
| jobTitleId | job_title_id | bigint | | 标准职务 id(字典/预置表),自定义职务时为 NULL | |
||||
|
| jobTitleCategory | job_title_category | varchar(50) | | 职务类别(高层管理/采购/…),自定义职务时为 NULL | |
||||
|
| jobTitleLevel | job_title_level | int | | 职务层级(图谱用),自定义职务时为 NULL | |
||||
|
| phone | phone | varchar(20) | | 联系电话;手机号格式校验 | |
||||
|
| isKeyContact | is_key_contact | tinyint | | 是否关键联系人(是1/否0) | |
||||
|
| isInternal | is_internal | tinyint | | 是否内线(是1/否0) | |
||||
|
| giftRemark | gift_remark | varchar(500) | | 礼品备注 | |
||||
|
| source | source | varchar(20) | | 来源字典 `contact_source`:组会/组局/转介绍/其他 | |
||||
|
| createBy / createTime / updateBy / updateTime | — | — | | BaseEntity | |
||||
|
| deleted | deleted | tinyint default 0 | | 逻辑删除 | |
||||
|
|
||||
|
> ⚠ **孤立单大写字母检查**(AGENTS.md):`isKeyContact`→`is_key_contact`、`isInternal`→`is_internal`、`jobTitleName`/`jobTitleId`/`jobTitleCategory`/`jobTitleLevel`——均为「完整词 + 完整词」,**无需 `@Column(name=...)`**。 |
||||
|
|
||||
|
**索引**: |
||||
|
- `idx_contact_customer` (customer_id, deleted) |
||||
|
- ~~`uk_contact_phone` (phone) 全局唯一~~ **已撤销(D26 第三轮翻案,20260902 用户拍板 A)**:不建电话唯一索引。电话查重=可配置软提示(跟随 crm-rule 客户查重设置「联系电话」开关,默认开),命中只提示疑似重复、不禁止创建。仅保留**同一客户内**两个联系人电话不重复的表单级校验(票 04 B4 内联查重) |
||||
|
- `idx_contact_name` (name) — 全局搜索 |
||||
|
|
||||
|
**权限模型(定稿,原型明文「联系人不设独立 ACL,继承客户权限」)**: |
||||
|
- 无独立 `@DataScope` 注解;服务层显式按 customer 校验(对客户有读权限 → 对其全部联系人有读权限)。 |
||||
|
- 无客户读写权限时隐藏联系人新增/编辑/删除入口;服务端仍校验。 |
||||
|
|
||||
|
### B. 契约(对齐商机硬依赖,promote 自 opp-customer-dependency 分析报告) |
||||
|
|
||||
|
| 优先级 | 接口 | 说明 | |
||||
|
|---|---|---| |
||||
|
| P0 | `POST /api/customer/search` | 客户搜索(名称/联系人/电话/类型 四维模糊 + 分页),商机新增关联客户数据源 | |
||||
|
| P0 | `GET /api/customer/{id}/contacts` | 按客户查联系人列表 | |
||||
|
| P0 | `GET /api/customer/{id}` | 客户基础信息带出 | |
||||
|
| P1 | `GET /api/customer/contact/search` | 联系人全局搜索(带出所属公司名),商机「商机关键联系人」数据源 | |
||||
|
| P1 | `POST /api/customer/quick-create` | 快速创建客户(最小必填集),商机弹窗入口 | |
||||
|
| P2 | `GET /api/customer/{id}/detail` | 客户详情(新窗口跳转),复用票 07 详情页 | |
||||
|
|
||||
|
### C. 联系人 CRUD 契约(定稿) |
||||
|
|
||||
|
``` |
||||
|
POST /api/customer/contact 新增联系人(可指定 customer_id 或独立新增后关联) |
||||
|
PUT /api/customer/contact/{id} 编辑 |
||||
|
DELETE /api/customer/contact/{id} 删除(软删) |
||||
|
GET /api/customer/contact/{id} 详情 |
||||
|
GET /api/customer/contact/page 顶级联系人列表(A4-5-1,跨客户,按 DataScope) |
||||
|
POST /api/customer/contact/import 批量导入(划出本图 → 随图谱 effort,本图只留接口占位) |
||||
|
``` |
||||
|
|
||||
|
### D. 随客户新增的内嵌明细(定稿) |
||||
|
|
||||
|
- 新增客户表单「联系人」Tab = 明细表数组,**客户保存成功后**与客户建立关联(原型 3.5 §1)。 |
||||
|
- 电话内联查重:**同一客户内**两行电话相同禁止提交(表单级硬校验);跨客户电话精确命中=**软提示疑似重复、不阻断**(跟随查重设置「联系电话」开关,D26 翻案后口径,票 04 B4 同步收敛为提示)。 |
||||
|
- 删除仅移除本次未保存行;已输入内容行删除前确认。 |
||||
|
|
||||
|
### E. 产品确认项 — 已随 grill 全部销号 |
||||
|
|
||||
|
| # | 问题 | 影响 | |
||||
|
|---|---|---| |
||||
|
| P0-1 | ~~联系人电话唯一约束(grill Q16=B 全局唯一)~~ **已翻案(D26 第三轮复核,20260902 用户拍板 A)**:不建 `uk_contact_phone` 唯一索引;电话查重=可配置软提示(跟随查重设置「联系电话」开关),命中只提示不阻断;仅同客户内联系人电话不重复为表单级校验 | 撤销唯一索引;软提示走查重设置开关 | |
||||
|
| P1-1 | ~~「来源」字典完整值~~ **已拍板(grill Q17)**:种子 = 组会/组局/转介绍/其他 4 项,后续在字典补 | crm-dict 种子 | |
||||
|
|
||||
|
### F. 回填 / 下游 |
||||
|
|
||||
|
- **票 02**:无主表字段变化(联系人是子表)。 |
||||
|
- **票 04**:联系人内联查重(B4)已回填。 |
||||
|
- **票 07**:客户详情「联系人」页签复用 `GET /api/customer/{id}/contacts`。 |
||||
|
- **票 01**:CONTEXT.md 术语「联系人」「关键联系人」。 |
||||
|
- **crm-dict**:新增 `contact_source` 分组 + `job_title` 标准职务预置(图谱 effort 用它,本图只留 jobTitleId 引用位)。 |
||||
@ -0,0 +1,86 @@ |
|||||
|
## Answer |
||||
|
|
||||
|
**Status: resolved** |
||||
|
|
||||
|
### A. 客户详情页骨架(定稿) |
||||
|
|
||||
|
**公共头部**(8 页签共享):客户名称 / 客户阶段(只读条) / 客户星级 / 关系星级 / 战略协议等级(快照) / 已成交VIP等级(快照) / 客户档案状态 / 销售负责人+部门 / 最近跟进摘要 / 待跟进提醒(下次跟进时间) / 关联业务计数(1商机/1项目)。 |
||||
|
|
||||
|
**汇总卡片**(4 张,均外部模块提供,接口失败显"--"+重试,不显 0):已中标项目总额(A5) / 跟进中方案预估总额(方案卡) / 进行中商机总额(crm-opportunity) / 合同总额·累计回款(预留占位显"--")。 |
||||
|
|
||||
|
**8 页签**(默认进「客户信息」;首次打开才加载,切回保留条件/分页): |
||||
|
|
||||
|
| # | 页签 | 数据源 | 本图 | |
||||
|
|---|---|---|---| |
||||
|
| 1 | 客户信息 | 主表(票 02) | ✅ | |
||||
|
| 2 | 联系人 | `GET /api/customer/{id}/contacts`(票 06) | ✅ | |
||||
|
| 3 | 跟进记录 | `customer_follow`(B) | ✅ | |
||||
|
| 4 | 关联商机 | 反查 crm-opportunity(C) | ✅ | |
||||
|
| 5 | 关联项目 | A5 项目模块 | ❌ 骨架显"--" | |
||||
|
| 6 | 战略协议 | 战略协议子域 | ❌ 骨架显"--" | |
||||
|
| 7 | 团队成员 | 负责人+协同人(D) | ✅ | |
||||
|
| 8 | 操作日志 | `customer_oplog`(E) | ✅ | |
||||
|
|
||||
|
### B. 跟进记录 `customer_follow`(定稿) |
||||
|
|
||||
|
| Java 字段 | 列名 | 类型 | 必填 | 说明 | |
||||
|
|---|---|---|---|---| |
||||
|
| id | id | bigint | | 主键 | |
||||
|
| customerId | customer_id | bigint | ✅ | 客户 ID | |
||||
|
| followWay | follow_way | varchar(20) | ✅ | 跟进方式字典 `follow_way`:微信/拜访/电话/邮件/会议 | |
||||
|
| followContent | follow_content | text | ✅ | 跟进内容 | |
||||
|
| nextFollowTime | next_follow_time | datetime | | 下次跟进时间(有则进"待跟进"筛选) | |
||||
|
| followBy / followByName / followDeptName | follow_by / follow_by_name / follow_dept_name | — | | 跟进人快照(对称商机跟进范式) | |
||||
|
| createTime | create_time | — | | 跟进时间(=创建时间,不可改) | |
||||
|
|
||||
|
> 无孤立单大写字母陷阱。`nextFollowTime`→`next_follow_time` ✅。 |
||||
|
|
||||
|
**约束**: |
||||
|
- 提交后**不可修改/删除**;纠错 = 新增补充记录(原型 7 明文)。 |
||||
|
- 提交中禁止重复提交(原型公共规则)。 |
||||
|
- **写库副作用(关键)**:`customer.last_valid_follow_time = now`(超期提醒锚点刷新,票 10 回填);更新"待跟进"状态。 |
||||
|
|
||||
|
**契约**: |
||||
|
``` |
||||
|
POST /api/customer/{id}/follow 新增跟进(刷新 last_valid_follow_time) |
||||
|
GET /api/customer/{id}/follow/page 跟进记录分页(时间倒序 + 日期分组;按 follow_way/关键字/时间范围过滤) |
||||
|
``` |
||||
|
|
||||
|
### C. 关联商机页签(定稿,只读反查) |
||||
|
|
||||
|
- 数据源:**反查 crm-opportunity**(按 `customer_id` 查该客户全部商机)。 |
||||
|
- 列:商机名称 / 商机编号 / 阶段 / 预计金额 / 销售负责人 / 最近更新;点商机名跳 crm-opportunity 商机详情(新窗口)。 |
||||
|
- **只读**,不在客户详情内做商机写操作(对称:商机详情反查客户也只是带出)。 |
||||
|
- 接口失败显"--" + 重试,不显 0 条。 |
||||
|
|
||||
|
### D. 团队成员页签(定稿) |
||||
|
|
||||
|
- 数据:销售负责人(owner_user_id 快照)+ 协同人列表(团队成员关联表)。 |
||||
|
- 展示:姓名 / 部门 / 角色(负责人/协同人);`GET /api/customer/{id}/members`。 |
||||
|
|
||||
|
### E. 操作日志 `customer_oplog`(定稿,对称商机 oplog 范式) |
||||
|
|
||||
|
| Java 字段 | 列名 | 类型 | 说明 | |
||||
|
|---|---|---|---| |
||||
|
| id | id | bigint | 主键 | |
||||
|
| customerId | customer_id | bigint | 客户 ID | |
||||
|
| action | action | varchar(50) | 动作类型:CREATE/UPDATE/FOLLOW/ARCHIVE/RESTORE/TRANSFER/CLAIM/POOL/STAGE_CHANGE | |
||||
|
| detail | detail | varchar(1000) | 变更描述,形态 `把 {字段} 从 {旧} 修改为 {新}`(原型 8 明文) | |
||||
|
| operatorId / operatorName / operatorDeptName | operator_id / operator_name / operator_dept_name | — | 操作人快照 | |
||||
|
| createTime | create_time | — | 操作时间 | |
||||
|
|
||||
|
- **只追加、不可改删**;`GET /api/customer/{id}/oplog/page`(时间倒序 + 日期分组 + 关键字/时间范围过滤)。 |
||||
|
- **保留策略(§5.5 拍板 A,20260902)**:`customer_oplog` **无限期保留**(审计日志,不设保留期/清理/归档;不做冷热分离)。依据:原型 L250「日志生成后不可修改或删除」= append-only 审计;字段级日志量可控。 |
||||
|
- **写 oplog 的动作**(回填各票):新增/编辑(票 02)/ 归属迁移·归档·恢复·领取·分配·抛公海(票 03)/ 阶段变化 operator=系统(票 05)/ 交割(票 08)。 |
||||
|
|
||||
|
### F. 回填 / 下游 |
||||
|
|
||||
|
- **票 02**:`last_valid_follow_time` 已含(B 刷新)。 |
||||
|
- **票 03**:归属迁移写 oplog(E)。 |
||||
|
- **票 05**:阶段变化写 oplog(operator=系统)。 |
||||
|
- **票 10**:跟进刷新锚点 → 超期提醒计时重启(B 副作用)。 |
||||
|
- **crm-dict**:新增 `follow_way` 分组(微信/拜访/电话/邮件/会议)。 |
||||
|
|
||||
|
### G. 挂号 — 已随 grill 全部销号 |
||||
|
|
||||
|
1. ~~汇总卡片占位渲染~~ **已拍板(grill Q18)**:一律渲染卡片,值显"--"(不显 0/不留白),保持布局稳定。 |
||||
@ -0,0 +1,97 @@ |
|||||
|
## Answer |
||||
|
|
||||
|
**Status: resolved**(直属销售总监 = 组织架构推导,已由用户在 grill Q12 拍板 A) |
||||
|
|
||||
|
### A. 流程模型(定稿,两段式) |
||||
|
|
||||
|
``` |
||||
|
发起交接(离职人员→接收总监) → 客户分配(接收总监→具体销售) |
||||
|
owner 变为总监 owner 变为销售 |
||||
|
生成交接单(待分配) 逐客户/批量分配 |
||||
|
``` |
||||
|
|
||||
|
- **只允许离职/调动/区域调整的销售本人发起**本人名下客户的交接(主管/管理员不可代办,原型二.2 明文)。 |
||||
|
- **可交接客户** = 该销售为**唯一负责人** 且 未删除 且 非公海;仅协同人的客户不纳入。 |
||||
|
- **接收总监**:离职 = 系统自动确定**唯一**直属销售总监;调动/区域调整 = 在本人**启用的**直属销售总监范围内搜索选择。 |
||||
|
- **交接单**:全部变更成功才生成(整批原子);生成唯一交接编号 + 状态「待分配」+ 进度 0/N。 |
||||
|
|
||||
|
### B. 实体(定稿) |
||||
|
|
||||
|
#### B1. 交接单 `customer_transfer` |
||||
|
|
||||
|
| Java 字段 | 列名 | 类型 | 说明 | |
||||
|
|---|---|---|---| |
||||
|
| id | id | bigint | 主键 | |
||||
|
| transferNo | transfer_no | varchar(32) | 交接编号(唯一,生成规则对称商机编号) | |
||||
|
| fromUserId / fromUserName | from_user_id / from_user_name | — | 离职/调动人员快照 | |
||||
|
| toDirectorId / toDirectorName | to_director_id / to_director_name | — | 接收总监快照 | |
||||
|
| reason | reason | varchar(20) | 交接原因字典:员工离职/岗位调动/区域调整 | |
||||
|
| remark | remark | varchar(500) | 备注(选填) | |
||||
|
| totalCount | total_count | int | 本次交接客户总数 | |
||||
|
| assignedCount | assigned_count | int | 已分配数(进度 = assigned/total) | |
||||
|
| status | status | tinyint | 0待分配 / 1已完成 | |
||||
|
| createBy / createTime / updateBy / updateTime | — | — | BaseEntity | |
||||
|
|
||||
|
> 无孤立单大写字母陷阱。 |
||||
|
|
||||
|
#### B2. 交接明细 `customer_transfer_detail` |
||||
|
|
||||
|
| Java 字段 | 列名 | 类型 | 说明 | |
||||
|
|---|---|---|---| |
||||
|
| id | id | bigint | 主键 | |
||||
|
| transferId | transfer_id | bigint | 交接单 id | |
||||
|
| customerId | customer_id | bigint | 客户 id | |
||||
|
| assignStatus | assign_status | tinyint | 0待分配 / 1已分配 | |
||||
|
| assignUserId / assignUserName | assign_user_id / assign_user_name | — | 分配对象快照(待分配时 NULL) | |
||||
|
| assignTime | assign_time | datetime | 分配时间 | |
||||
|
|
||||
|
- `UNIQUE(transfer_id, customer_id)` 去重。 |
||||
|
|
||||
|
### C. 事务语义(定稿,跨模块) |
||||
|
|
||||
|
1. **发起交接**(整批原子): |
||||
|
- 遍历本次客户,对每个客户:`owner_user_id → to_director_id`;移出 from_user 团队身份;保留原协同人。 |
||||
|
- 对每个客户的**关联商机**(crm-opportunity)`owner_user_id → to_director_id`。 |
||||
|
- **关联项目 owner 同步 = seam**(A5 未建;本图只定义 port 契约,实现时项目侧跳过并标注)。 |
||||
|
- **任一失败 → 全部回滚**,不生成交接单(原型三.确认交接 §7 明文)。 |
||||
|
2. **客户分配**(整批/单个): |
||||
|
- 待分配明细 → 选分配对象(接收总监有权分配范围 + 启用的销售 + 不得为 from_user 本人 + 不得是当前负责人)→ `owner_user_id → assign_user_id`,同步关联商机/项目 owner。 |
||||
|
- 单个失败不整体回滚(批量按逐条独立事务),失败项列原因。 |
||||
|
3. **防重入**:同一 from_user 存在未完成交接单时,禁止再次发起(原型三.确认交接 §1)。 |
||||
|
|
||||
|
### D. 契约(定稿) |
||||
|
|
||||
|
``` |
||||
|
POST /api/customer/transfer/initiate 发起交接(整批原子,返回交接编号) |
||||
|
GET /api/customer/transfer/{id}/preview 发起前客户预览(按原因算可交接客户) |
||||
|
GET /api/customer/transfer/{id} 交接详情 |
||||
|
GET /api/customer/transfer/page 交接记录(交接编号/人员/原因/状态过滤) |
||||
|
POST /api/customer/transfer/{id}/assign 客户分配(单个或批量 customerIds + assignUserId) |
||||
|
GET /api/customer/transfer/{id}/assignable 可分配销售列表(接收总监范围 + 启用) |
||||
|
``` |
||||
|
|
||||
|
### E. 直属销售总监 — 已拍板(grill Q12,组织架构推导) |
||||
|
|
||||
|
原型要求:离职时系统**自动确定唯一直属销售总监**;调动/区域调整时在**启用的直属销售总监范围**选择。核心是「直属销售总监」的确定口径: |
||||
|
|
||||
|
**我的推荐**:**不加 SysUser 字段**,用**组织架构现有层级**推导——按 from_user 所在部门向上找「部门负责人」(`dept.leader_user_id` 或等价),若该负责人是「销售总监」角色则命中;无/停用/多条则按原型阻断并提示「联系管理员维护组织关系」。 |
||||
|
|
||||
|
**理由**:① 组织架构已有部门负责人概念,不引入新字段;② 直属关系是组织属性而非用户属性,加 `superior_user_id` 会带来维护和一致性问题;③ 原型明说「无/停用/多条直属关系 → 阻断」,天然容忍推导失败。 |
||||
|
|
||||
|
**备选**:`SysUser` 加 `superior_user_id`(直属上级),由后台维护;查询 O(1),但需改 auth 模块 + 维护成本。 |
||||
|
|
||||
|
**✅ 已拍板(grill Q12,用户选 A)**:组织架构推导(`dept.leader` 向上找销售总监角色),不改 crm-auth,不加 `superior_user_id`。 |
||||
|
|
||||
|
### F. 回填 / 下游 |
||||
|
|
||||
|
- **票 03**:owner 变更(分配=换主)复用 oplog 语义;交割是分配动作的跨模块扩展版。 |
||||
|
- **票 07**:oplog 记录 `TRANSFER` 动作 + `customer_transfer` 表变更;跨模块同步操作人显「系统」+ 交接编号。 |
||||
|
- **crm-opportunity**:需要商机侧提供「按 customer_id 批量改 owner」的 port(或复用商机分配逻辑)。 |
||||
|
- **A5 项目**:项目 owner 同步 seam(port 契约占位)。 |
||||
|
- **crm-dict**:`transfer_reason` 分组(员工离职/岗位调动/区域调整)。 |
||||
|
|
||||
|
### G. 产品确认项 — 已随 grill 全部销号 |
||||
|
|
||||
|
| # | 问题 | 影响 | |
||||
|
|---|---|---| |
||||
|
| P0-1 | ~~交接单「已完成」的判定~~ **已拍板(grill Q13)**:自动完成(assignedCount == totalCount 置为已完成),不设手动「完成交接」按钮 | status 迁移 | |
||||
@ -0,0 +1,60 @@ |
|||||
|
## Answer |
||||
|
|
||||
|
**Status: resolved** |
||||
|
|
||||
|
### A. 范围(定稿) |
||||
|
|
||||
|
- ✅ **做**:客户主数据 + 联系人子表 的 Excel 导入(异步任务 + 行级处理 + 结果明细)。 |
||||
|
- ❌ **不做**:OCR 快捷新增(划出);Excel 内图片/附件转存(V1 忽略对象);通过 Excel 清空已有字段(V1 不支持)。 |
||||
|
|
||||
|
### B. 导入方式(定稿,三选一) |
||||
|
|
||||
|
| 方式 | 匹配到已有客户 | 未匹配 | |
||||
|
|---|---|---| |
||||
|
| 仅新增数据 | 不导入,标「客户已存在」 | 创建新客户 | |
||||
|
| 仅更新数据 | 更新 | 不新增,标「未找到可更新客户」 | |
||||
|
| 新增或更新数据 | 更新 | 创建新客户 | |
||||
|
|
||||
|
- **匹配顺序**(定稿):① 客户编号完全一致 → ② 统一社会信用代码完全一致。 |
||||
|
- 编号与信用代码**均缺失或均未匹配** → 不得仅凭名称自动覆盖;名称相似/相同行列「疑似重复」,本次不写入,由用户去新增/编辑流程人工处理(对称票 04 查重口径)。 |
||||
|
- 编号与信用代码**分别匹配到不同客户** → 该行冲突,禁止导入。 |
||||
|
- 文件内**多行匹配同一客户**:`覆盖导入`/`重复时不导入` 互斥,默认「重复时不导入」;覆盖按文件自上而下、最后一条通过校验的为准;不导入则重复组全部失败。 |
||||
|
|
||||
|
### C. 字段语义(定稿) |
||||
|
|
||||
|
- **新增导入**:必填字段空 → 该行失败;非必填空 → 按空值创建。`customer_stage` 固定=潜在(不得指定)。 |
||||
|
- **更新导入**:空白单元格 = 不修改已有值(V1 不支持清空)。 |
||||
|
- **禁止通过导入修改**:销售负责人/协同人(普通销售导入负责人固定=当前用户;有分配权限者可指定授权范围内负责人,超出 → 该行失败)、客户阶段(更新不得回退)、工商字段/战略协议/关联业务汇总等系统计算字段。 |
||||
|
- **联系人子表**(D26 翻案后校准 20260902):电话存在 → 匹配**本客户**已有联系人→更新;匹配**他客户**联系人→**软提示疑似重复、不禁止导入**(列疑似重复明细,跟随查重设置「联系电话」开关;开关关则不提示),**不做跨客户电话唯一硬拦**;电话空 → 按「客户+姓名+职务」疑似重复,不自动覆盖,列疑似重复明细。同一导入文件内同客户电话相同两行 → 该行失败(表单级)。 |
||||
|
- **原子单元** = 单条客户主记录 / 单条联系人子记录;联系人失败不回滚已成功的客户主记录。 |
||||
|
|
||||
|
### D. 任务模型(定稿,对称商机/线索导入范式) |
||||
|
|
||||
|
- **异步任务**:上传 + 服务端预校验 → 展示预计新增/更新/失败/疑似重复数 → 用户确认 → 创建正式导入任务。 |
||||
|
- **预校验**:文件类型(.xls/.xlsx) / 大小(≤20MB) / 模板版本 / 表头(无空单元格才导) / 单 sheet ≤50000 行 / 不计算公式 / 忽略图片附件对象。 |
||||
|
- **行级处理,允许部分成功**:单行内原子(不半行写入)。 |
||||
|
- **结果页**:任务状态 / 总行数 / 新增成功 / 更新成功 / 未变化 / 失败数 / 提交人 / 提交时间 / 完成时间;失败明细(sheet名/行号/客户识别/失败字段/失败原因)可下载,敏感值按字段权限脱敏。 |
||||
|
- **任务超时/异常 → 标记失败**,不得让用户重复提交状态未知的任务。 |
||||
|
- **操作日志**:记录任务 ID/导入方式/模板版本/文件哈希/成功失败数/触发后续动作选择;**不记录文件名、文件内容、敏感字段原值**。 |
||||
|
- **最近导入记录**入口,仅当前用户有权查看的任务。 |
||||
|
|
||||
|
**契约**: |
||||
|
``` |
||||
|
POST /api/customer/import/upload 上传 + 预校验(返回预计数 + 预校验明细) |
||||
|
POST /api/customer/import/{taskId}/confirm 确认创建正式任务(返回 taskId) |
||||
|
GET /api/customer/import/{taskId} 任务结果 |
||||
|
GET /api/customer/import/{taskId}/failures 失败明细下载 |
||||
|
GET /api/customer/import/page 最近导入记录 |
||||
|
GET /api/customer/import/template 下载导入模板(含模板版本) |
||||
|
``` |
||||
|
|
||||
|
### E. 回填 / 下游 |
||||
|
|
||||
|
- **票 04**:复用 `CustomerDedupService`(信用代码精确查重 + 名称相似判定)做导入匹配。 |
||||
|
- **票 03**:导入成功刷新「我的客户」,仍按当前用户数据范围展示。 |
||||
|
- **票 07**:oplog 记录每次导入(任务级)。 |
||||
|
- **crm-file**:文件上传/哈希复用平台能力(对称商机/线索导入)。 |
||||
|
|
||||
|
### F. 挂号 — 已随 grill 全部销号 |
||||
|
|
||||
|
1. ~~文件内多行匹配同一客户默认值~~ **已拍板(grill Q14)**:默认「重复时不导入」(重复组全部失败)。 |
||||
@ -0,0 +1,116 @@ |
|||||
|
|
||||
|
## Answer |
||||
|
|
||||
|
**Status: resolved**(锚点语义 = 成为有主时刻,已由用户在 grill Q15 拍板 A) |
||||
|
|
||||
|
### A. 结论速览 |
||||
|
|
||||
|
客户「超期未跟进提醒」= **crm-rule 全局单例配置 + crm-customer 待发通知 + 调度 Job**,三层对称商机「回收提醒」范式,但配置形态是**单例**(不套 V-CONFIG 版本化,chart D4)。「客户查重设置」不做(chart D6)。 |
||||
|
|
||||
|
| 层 | 落点 | 对称对象 | |
||||
|
|---|---|---| |
||||
|
| 配置 | `crm-rule` `customer_reminder_rule`(单行表,id 固定=1) | `opportunity_pool_rule`(但非版本化) | |
||||
|
| 待发通知 | `crm-customer` `customer_pending_notice` | `opportunity_pending_notice` | |
||||
|
| 调度 | `crm-customer` `CustomerReminderJob`(@Scheduled) | `OpportunityMaintenanceJob` | |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
### B. 配置表 `customer_reminder_rule`(crm-rule) |
||||
|
|
||||
|
**全局单例**:单行表,`id` 固定为 1,种子初始化器 `CustomerReminderRuleInitializer` 植入默认行(对称 `StageTemplateInitializer` 兜底范式)。无版本号、无状态机、无 rule_code。 |
||||
|
|
||||
|
| Java 字段 | 列名 | 类型 | 默认 | 说明 | |
||||
|
|---|---|---|---|---| |
||||
|
| id | id | bigint | 固定 1 | 单例行主键 | |
||||
|
| masterEnabled | master_enabled | tinyint | 1 | 总开关:1启用 0禁用(禁用后 Job 整轮跳过) | |
||||
|
| firstTriggerEnabled | first_trigger_enabled | tinyint | 1 | 首次触发独立开关 | |
||||
|
| firstTriggerDays | first_trigger_days | int | 30 | 首次触发天数(>0) | |
||||
|
| secondIntervalEnabled | second_interval_enabled | tinyint | 1 | 二次提醒独立开关 | |
||||
|
| secondIntervalDays | second_interval_days | int | 7 | 二次提醒间隔天数(>0) | |
||||
|
| updateBy / updateTime | update_by / update_time | — | — | BaseEntity 继承 | |
||||
|
|
||||
|
> ⚠ **孤立单大写字母检查**(AGENTS.md):`masterEnabled`→`master_enabled`、`firstTriggerDays`→`first_trigger_days`、`secondIntervalDays`→`second_interval_days`——均为「完整词 + 完整词」,**无需 `@Column(name=...)`**。 |
||||
|
|
||||
|
**校验规则**(服务层,对称商机规则): |
||||
|
- `firstTriggerDays > 0`、`secondIntervalDays > 0`。 |
||||
|
- 保存 = 全量覆盖(无草稿/发布态,保存即生效)。 |
||||
|
- 只后台管理面板可见(RBAC 功能权限 `customer.reminder.rule`)。 |
||||
|
|
||||
|
**契约**: |
||||
|
``` |
||||
|
GET /api/rule/customer/reminder → 读当前配置(单行) |
||||
|
PUT /api/rule/customer/reminder → 保存配置(全量覆盖,记录操作日志) |
||||
|
``` |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
### C. 触发口径(只前进、确定性提醒链) |
||||
|
|
||||
|
**计时锚点** = `customer.last_valid_follow_time`(票 02 已建)。**锚点 = 成为「有主」的时刻**(grill Q15 拍板 A):① 新建客户直接指派负责人 → 初始化为 `create_time`;② 新建客户进公海(无负责人)→ `last_valid_follow_time = NULL`(无锚点不提醒),被领取/分配时 → 锚点 = 领取时刻;③ 每次写跟进记录刷新锚点(票 07)。 |
||||
|
|
||||
|
**提醒链**(确定性,可从锚点直接推导,无需存「已发首次」状态): |
||||
|
|
||||
|
``` |
||||
|
第 0 次(首次) plan = anchor + first_trigger_days |
||||
|
第 1 次(二次) plan = anchor + first_trigger_days + 1 × second_interval_days |
||||
|
第 k 次(二次) plan = anchor + first_trigger_days + k × second_interval_days |
||||
|
``` |
||||
|
|
||||
|
- 幂等键 = `(customer_id, notice_type, plan_notify_time)`,同计划时刻永不重写(对称商机 `uk_pending_notice_dedupe`)。 |
||||
|
- Job 每轮对每个客户只补**下一条未建的到期提醒**(不批量堆历史)。 |
||||
|
- **跟进刷新锚点** → 旧锚点的未发提醒**置已失效**(对称商机回收时 invalidate 语义);新锚点重新从首次开始计时。 |
||||
|
|
||||
|
**参与范围**(扫表条件): |
||||
|
- `archive_status = 有效(1)`(归档/合并不提醒) |
||||
|
- `owner_user_id IS NOT NULL`(公海无接收人不提醒,chart 票 10 待拍板点 6) |
||||
|
- `last_valid_follow_time IS NOT NULL`(有主客户才有锚点;公海客户领取后赋锚点,天然兜住「公海不计时」) |
||||
|
- `master_enabled = 1` 且(`first_trigger_enabled=1` 或 `second_interval_enabled=1`) |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
### D. 待发通知表 `customer_pending_notice`(crm-customer) |
||||
|
|
||||
|
对称 `OpportunityPendingNotice`,字段集一致: |
||||
|
|
||||
|
| Java 字段 | 列名 | 类型 | 说明 | |
||||
|
|---|---|---|---| |
||||
|
| id | id | bigint | ASSIGN_ID 主键 | |
||||
|
| customerId | customer_id | bigint | 客户 ID | |
||||
|
| noticeType | notice_type | varchar(32) | `OVERDUE_REMIND`(本期唯一类型) | |
||||
|
| targetUserId | target_user_id | bigint | 应通知对象 = 客户销售负责人(快照) | |
||||
|
| planNotifyTime | plan_notify_time | datetime | 应发提醒时刻(= 提醒链推导时刻) | |
||||
|
| payloadJson | payload_json | text | 上下文 JSON(见下) | |
||||
|
| noticeStatus | notice_status | tinyint | 0待发 1已发 2已失效 | |
||||
|
|
||||
|
- **唯一约束**:`UNIQUE(customer_id, notice_type, plan_notify_time)`。 |
||||
|
- **索引**:`idx(customer_id, notice_status)` 供消费者扫待发;`idx(notice_status, plan_notify_time)` 供补发调度。 |
||||
|
- **payload JSON**(对称商机无「剩余天数」伪状态):`{ remindSeq(0=首次/k=第k次二次), overdueDays(已无跟进天数), anchor(last_valid_follow_time), firstTriggerDays, secondIntervalDays }`。 |
||||
|
|
||||
|
> 本期**只落待发记录,不直接发送**;平台通知能力(钉钉 + 应用内通知)spin-out,就绪后由另一消费者扫 `notice_status=待发` 补发(对称商机票 05 拍板)。 |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
### E. 调度 Job `CustomerReminderJob`(crm-customer) |
||||
|
|
||||
|
- **cron**:`${crm.customer.reminder-cron:0 0 4 * * ?}`(默认凌晨 4 点,错开线索 2 点 / 商机 3 点)。 |
||||
|
- **流程**(对称 `OpportunityMaintenanceJob`,但无回收分支): |
||||
|
1. 读 `customer_reminder_rule` 单行;`master_enabled=0` 或无配置 → 整轮跳过。 |
||||
|
2. 扫参与范围客户(见 C)。 |
||||
|
3. 对每个客户:算**下一条未建的到期提醒**(`plan ≤ now`),若有则落 `customer_pending_notice`(幂等:已存在同 plan 时刻跳过)。 |
||||
|
4. 锚点已被刷新的客户:把旧锚点未发的 OVERDUE_REMIND 置已失效。 |
||||
|
- **不发送**:只落待发记录(E 末尾同)。 |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
### F. 规则生效时机(chart Q4-补 用户强调,已确认) |
||||
|
|
||||
|
> 用户原话「规则在客户新增的时候生效」——最终解读:**新建客户时把 `last_valid_follow_time` 初始化为 `create_time`**,客户创建后即开始计时,30 天(首次触发默认值)无跟进 → 首次提醒。**回填票 02**(已落 `last_valid_follow_time` 字段)+ **票 07**(新建跟进时刷新)。 |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
### G. 回填 / 下游影响 |
||||
|
|
||||
|
- **票 02**:`last_valid_follow_time` 已含(✅ 已落)。 |
||||
|
- **票 07**:跟进记录写入时刷新 `last_valid_follow_time`。 |
||||
|
- **票 01**:CONTEXT.md 增术语「超期未跟进提醒」。 |
||||
|
- **crm-rule/CONTEXT.md**:增客户规则族段(对称商机规则段)。 |
||||
@ -0,0 +1,53 @@ |
|||||
|
## Answer |
||||
|
|
||||
|
**Status: resolved** |
||||
|
|
||||
|
### A. 接线结论(定稿) |
||||
|
|
||||
|
复用 crm-preference `user_saved_view` 平台能力,**不重写**。rule of three:商机是样本 1,客户是样本 2;样本 3 出现前不抽共享翻译器(各自 `XxxSavedViewFilter`)。 |
||||
|
|
||||
|
### B. scope_key(定稿,3 个) |
||||
|
|
||||
|
| workspace | scope_key | |
||||
|
|---|---| |
||||
|
| 客户总览 | `customer.overview` | |
||||
|
| 我的客户 | `customer.mine` | |
||||
|
| 客户公海 | `customer.pool` | |
||||
|
|
||||
|
- **公海双视角(普通销售 / 领导)共用 `customer.pool`**:字段池相同,视角只影响行内操作(领取 vs 分配),不影响筛选条件。 |
||||
|
|
||||
|
### C. `CustomerSavedViewFilter`(定稿) |
||||
|
|
||||
|
- filter_json → MyBatis-Plus wrapper 翻译器,对称 `OpportunitySavedViewFilter`。 |
||||
|
- **字段池白名单**(票 03 定的可筛选列): |
||||
|
|
||||
|
| 字段 | 支持操作符 | |
||||
|
|---|---| |
||||
|
| 客户名称 / 客户编号 | 包含 / 不包含 | |
||||
|
| 客户类型 / 行业 / 客户阶段 / 客户星级 / 关系星级 / 战略协议等级 / 已成交VIP等级 / 档案状态 / 地区 | 属于任一 / 不属于任一 | |
||||
|
| 最近跟进时间 | 早于 / 晚于 / 从未跟进 / 已有跟进 | |
||||
|
| 进入公海时间(仅 pool) | 早于 / 晚于 | |
||||
|
| 销售负责人 / 销售部门(仅 overview / mine) | 属于任一 / 不属于任一 | |
||||
|
| 创建时间 | 早于 / 晚于 | |
||||
|
|
||||
|
- **未知字段 / 未知操作符 → 跳过**(不报错,对称商机)。 |
||||
|
- **排序字段池**:创建时间 / 最近跟进时间 / 进入公海时间(默认);客户名称等文本字段**不排**(参商机默认口径)。 |
||||
|
|
||||
|
### D. PageParam 接入(定稿) |
||||
|
|
||||
|
- 三 workspace 的 PageParam(`CustomerOverviewPageParam` / `CustomerMinePageParam` / `CustomerPoolPageParam`)均加 `savedViewId`。 |
||||
|
- ViewQueryImpl:有 `savedViewId` → 先调 `SavedViewService.get(viewId, scope_key)` 取 filter → 叠加 wrapper;无 → 不叠加。 |
||||
|
- 前端进入 workspace:先 `GET /api/preference/view/list?scope_key=...` 取 `isDefault` 视图 → 带 `viewId` 调 `/page`(对称商机)。 |
||||
|
|
||||
|
### E. 验收清单(spec 级,不写代码) |
||||
|
|
||||
|
1. scope_key 唯一性:`customer.overview` / `customer.mine` / `customer.pool` 三值互斥,与商机 `opportunity.*` 无碰撞。 |
||||
|
2. filter 白名单:白名单内字段 + 合法操作符生效;白名单外字段/操作符静默跳过。 |
||||
|
3. 默认视图互斥:每 scope 仅一个 `isDefault`(crm-preference 已实现,验证客户三 scope 复用生效)。 |
||||
|
4. 端到端:保存自定义检索 → 列表 → 再次进入带 viewId 恢复条件。 |
||||
|
5. 数据范围不越权:saved-view 只叠加筛选,**不改变** @DataScope 数据范围。 |
||||
|
|
||||
|
### F. 回填 / 下游 |
||||
|
|
||||
|
- **票 03**:字段池白名单来源(票 03 D 节共用列 + 差异列)。 |
||||
|
- **crm-preference**:无改动(纯消费方)。 |
||||
@ -0,0 +1,16 @@ |
|||||
|
# 01 — 客户模块骨架 |
||||
|
|
||||
|
**What to build:** 创建 `crm-customer` Maven 子模块并挂进根工程与 `crm-app`,使空壳能 `mvn compile` 通过、单体应用能启动、健康检查能通。后续所有客户功能都落在这个模块里;本票只交付"能跑起来的空壳",不含任何业务功能。 |
||||
|
|
||||
|
**Blocked by:** None — can start immediately. |
||||
|
|
||||
|
**Status:** ready-for-agent |
||||
|
|
||||
|
**依赖方向(关键,避免 Maven 循环)**:`crm-customer` 只依赖 `crm-base`/`crm-auth`/`crm-rule`/`crm-dict`/`crm-file`/`crm-preference`。**不依赖 `crm-opportunity`**——「关联商机」反查(票 06)与「商机读客户」(票 11)均通过 customer 侧定义的出站 port 解耦,Maven 依赖只走 `crm-opportunity → crm-customer` 单向,循环依赖靠 Spring DI 解除。 |
||||
|
|
||||
|
- [ ] `crm-customer/pom.xml` 创建,dependencies:`crm-base` / `crm-auth` / `crm-rule` / `crm-dict` / `crm-file` / `crm-preference` + `lombok`(provided) + `spring-boot-starter-test`(test) + `h2`(test)(对称 `crm-opportunity/pom.xml`) |
||||
|
- [ ] 根 `pom.xml` `<modules>` 加入 `crm-customer`;`crm-app/pom.xml` 加入 `<artifactId>crm-customer</artifactId>` |
||||
|
- [ ] 包结构建好:`com.crm.customer`(controller / service / mapper / domain.entity / domain.enums / domain.dto / domain.param / port / query / config,对称 opportunity) |
||||
|
- [ ] 最小可行性:`Customer` 实体占位(继承 `BaseEntity` + `@TableName("customer")` + `@Entity @Table`)+ 一个 `GET /api/customer/ping` 健康接口,返回模块名/版本 |
||||
|
- [ ] 验证:`mvn compile` 全工程通过;`crm-app` 启动成功;`@SpringBootApplication(scanBasePackages="com.crm")` + `@MapperScan("com.crm.**.mapper")` + `@EntityScan("com.crm")` 自动扫到 customer 的 controller/mapper/实体 |
||||
|
- [ ] 源码规范:所有 `.java` 为 UTF-8 无 BOM(AGENTS.md);无孤立单大写字母触发 Hibernate 命名策略(命名检查清单) |
||||
@ -0,0 +1,19 @@ |
|||||
|
# 02 — 客户主表 CRUD + 查重校验 |
||||
|
|
||||
|
**What to build:** 客户主数据能新增/编辑/查询/分页,且新增/编辑时内建三层查重校验(名称相似提示、信用代码唯一硬拦、并发兜底)。这是全模块的扇出底座——字段定义、DataScope、索引、查重端口都会被后续票复用。 |
||||
|
|
||||
|
**Blocked by:** 01 — 客户模块骨架 |
||||
|
|
||||
|
**Status:** ready-for-agent |
||||
|
|
||||
|
**Spec 依据(决策细节详见 .scratch/customer-module/issues/02-answer.md 与 04-answer.md)**:票 02 全字段清单 + 票 04 三层查重口径。本票只做主表实体与查重,**不含**联系人(票 03)、视图/归属(票 04)、详情页(票 06)。 |
||||
|
|
||||
|
- [ ] `customer` 实体全字段(票 02-answer §A1),含 `@DataScope(module="customer", ownerColumn="owner_user_id", deptColumn="owner_dept_id")`;系统字段继承 `BaseEntity`;`deleted` 默认 0 且**一期仅系统在合并时置 1**(§5.3 拍板 A,不开放手动删除/无前端删除入口) |
||||
|
- [ ] `@Table` 索引全部建好(票 02 A5):`uk_unified_credit_code`(unified_credit_code, MySQL NULL 不参与唯一约束) / `idx_owner_stage` / `idx_dept_stage` / `idx_name`(customer_name, FULLTEXT ngram token_size=2,供相似查重) / `idx_parent` / `idx_last_follow` |
||||
|
- [ ] 显式 `@Column(name=...)` 检查:票 02 §A2 结论为**全表无需**——所有字段均完整词+完整词,无孤立单大写陷阱,按清单复核后落实体 |
||||
|
- [ ] CRUD 契约:`POST /api/customer`(新增)/ `PUT /api/customer/{id}`(编辑)/ `GET /api/customer/{id}`(详情带出)/ `GET /api/customer/page`(分页)。编辑走 CAS 乐观锁 |
||||
|
- [ ] **三层查重**(票 04 §B1):L1 名称停输防抖(~300ms)相似提示(只提示不阻止,无权命中脱敏为"存在匹配记录");L2 保存时信用代码精确一致→硬拦禁止 + 名称相似→弹窗"仍要创建/返回修改";L3 仍要创建后写库前再查一次(信用代码+名称)仍冲突才写,DB UNIQUE 兜底 |
||||
|
- [ ] `CustomerNameSimilarityPort` 出站端口 seam(票 04 §B2):契约稳定、实现可插拔;一期最简实现=MySQL `MATCH(customer_name) AGAINST(?)` 取 topN + 判定"相似";阈值从 crm-rule「客户查重设置」读取(70/80/90%,非写死) |
||||
|
- [ ] 信用代码校验(票 04 §B3):格式 `^[0-9A-Z]{18}$`;精确相等→硬拦;命中无权查看的客户只提示"系统已存在该企业",不显 name/编号/负责人 |
||||
|
- [ ] 新增时初始化:`customer_stage`=1(潜在)、`archive_status`=1(有效);若直接指派负责人,`last_valid_follow_time`=create_time;若进公海,`last_valid_follow_time`=NULL(票 10 锚点语义) |
||||
|
- [ ] 服务层集成测试(H2 MySQL 模式):新增/编辑/查重三层的正常与冲突路径全覆盖 |
||||
@ -0,0 +1,18 @@ |
|||||
|
# 03 — 联系人子表 |
||||
|
|
||||
|
**What to build:** 客户下的联系人能增删改查、全局搜索,且联系人权限继承客户(无独立 ACL)。同客户内电话不重复做表单级校验;跨客户电话命中只软提示、不禁止(D26 口径)。 |
||||
|
|
||||
|
**Blocked by:** 02 — 客户主表 CRUD + 查重校验 |
||||
|
|
||||
|
**Status:** ready-for-agent |
||||
|
|
||||
|
**Spec 依据(详见 issues/06-answer.md)**:联系人独立表 `customer_contact` + 商机侧硬依赖契约。D26 翻案后口径:**不建电话唯一索引**,跨客户电话=可配置软提示。 |
||||
|
|
||||
|
- [ ] `customer_contact` 实体(票 06 §A 全字段):customer_id(NOT NULL,无孤立联系人) / name / jobTitleName / jobTitleId / jobTitleCategory / jobTitleLevel / phone / isKeyContact / isInternal / giftRemark / source + BaseEntity;`deleted` 逻辑删除 |
||||
|
- [ ] 索引:`idx_contact_customer`(customer_id, deleted);`idx_contact_name`(name)。**不建** `uk_contact_phone`(D26 已撤销) |
||||
|
- [ ] 权限模型(票 06):**无独立 `@DataScope`**;服务层按所属客户校验——对客户有读权限→对其全部联系人有读权限;无客户读写权限时隐藏联系人增删改入口、服务端仍校验 |
||||
|
- [ ] CRUD 契约:`POST /api/customer/contact` / `PUT /api/customer/contact/{id}` / `DELETE /api/customer/contact/{id}` / `GET /api/customer/{id}/contacts`(按客户查列表) |
||||
|
- [ ] 全局搜索:`GET /api/customer/contact/search`(带出所属客户名,商机「商机关键联系人」数据源) |
||||
|
- [ ] **电话查重(D26 最终口径)**:同一客户内同表格电话相同两行→禁止提交并定位重复行(表单级硬校验);无电话→按"客户+姓名+职务"提示疑似重复(只提示);跨客户电话命中→**软提示疑似重复、不阻断**,受 crm-rule「客户查重设置→联系电话」开关控制(默认开、可关) |
||||
|
- [ ] **商机侧硬依赖契约**:`POST /api/customer/quick-create`(最小必填集快速创建);`GET /api/customer/search`(名称/联系人/电话/类型四维模糊+分页)——供票 11 对接 |
||||
|
- [ ] 手机号格式校验;联系人不设独立 ACL 的服务层测试覆盖 |
||||
@ -0,0 +1,24 @@ |
|||||
|
# 04 — 三 workspace 视图 + 归属流转 |
||||
|
|
||||
|
**What to build:** 客户能在「我的客户 / 客户总览 / 客户公海」三个 workspace 里按各自数据范围列出、切换视图模式,并支持归属流转动作(领取 / 分配 / 抛公海 / 归档 / 恢复)。三视图是逻辑视图不落池表;每个归属动作写操作日志、走 CAS 乐观锁。 |
||||
|
|
||||
|
**Blocked by:** 02 — 客户主表 CRUD + 查重校验 |
||||
|
|
||||
|
**Status:** ready-for-agent |
||||
|
|
||||
|
**Spec 依据(详见 issues/03-answer.md)**:D9 三视图=逻辑视图;D3 归属⊥档案双轴;D19 归档=删除语义(无独立 tab)。 |
||||
|
|
||||
|
- [ ] 三 workspace 查询(票 03 §A,逻辑视图**不落库**): |
||||
|
- 我的客户 = 当前用户为销售负责人或协同人 且 `archive_status=1` 且 owner 非空 |
||||
|
- 客户总览 = `@DataScope` 覆盖范围内 未删除、未进公海(默认只列 `archive_status=1`) |
||||
|
- 客户公海 = `archive_status=1` 且 `owner_user_id IS NULL` |
||||
|
- 管理职务不扩大「我的客户」范围(走「客户总览」) |
||||
|
- [ ] 内置视图口径(票 03 §B,**硬编码不落库**):我的客户(我负责的/我协同的/待跟进的/我关注的/最近访问);公海(最近访问/我关注的);总览(最近访问/我关注的/我负责的/我协同的) |
||||
|
- [ ] 视图模式(票 03 §C)+ **看板三分组页签**(客户阶段/客户星级/关系星级);⚠ 本期「客户阶段」分组下客户均堆在「潜在客户」列,重潜/已成交列恒空=预期行为(D20 改票 B),不得造假阶段数据 |
||||
|
- [ ] 共用列 + 差异列(票 03 §D):公海列含 `enter_pool_time`「进入公海时间」、无负责人列 |
||||
|
- [ ] **新增字段回填**:`customer.enter_pool_time`(票 03 §F,抛公海写入 / 领取·分配清空) |
||||
|
- [ ] **归属流转动作**(票 03 §E):领取 / 分配 / 抛公海 / 归档(1→2) / 恢复(2→1),各带前置校验("无进行中商机"读 crm-opportunity opp_status=2;**项目侧留 seam** A5 未建先跳过;归档/合并仅销售负责人可) |
||||
|
- [ ] 批量操作部分失败不回滚(逐条独立事务,跳过不可操作项);**例外**:批量归档整批预检,任一失败整批不执行 |
||||
|
- [ ] 领取/分配副作用(D25,票 10 锚点):`last_valid_follow_time` 为空时→赋当前时刻;抛公海/归属迁移不动锚点 |
||||
|
- [ ] 每个归属动作写 `customer_oplog`(票 06);CAS 乐观锁 + version |
||||
|
- [ ] `@DataScope` 映射(票 03 §G):总览套 `DataScopeEnum(SELF/DEPT/DEPT_AND_CHILD/ALL)`;公海按可见部门范围 |
||||
@ -0,0 +1,17 @@ |
|||||
|
# 05 — 客户阶段(seam 版) |
||||
|
|
||||
|
**What to build:** 客户主记录有一条只前进不回退的阶段指针(潜在→重潜→已成交),字段/枚举/CAS 机制全部按三态建好,但**本期不自动触发**任何进阶——只暴露一个提阶 port 留给未来链路调用。每次阶段变化写系统操作日志。 |
||||
|
|
||||
|
**Blocked by:** 02 — 客户主表 CRUD + 查重校验 |
||||
|
|
||||
|
**Status:** ready-for-agent |
||||
|
|
||||
|
**Spec 依据(详见 issues/05-answer.md)**:D11 只前进 CAS;**D20 第三轮 fresh 复核翻案(20260902 用户拍板 B)= 本期不自动触发重潜、只留 seam**。旧 answer 票曾写"本期做前两态"=已废口径,本票按新口径。 |
||||
|
|
||||
|
- [ ] `customer_stage` 三态枚举(票 05 §A):潜在1(新建默认) / 重潜2 / 已成交3;只增不减、不可手动改(无面向前端 setter API、阶段条不可点);父子客户不联动 |
||||
|
- [ ] 只前进 CAS(票 05 §B):`UPDATE customer SET customer_stage=? WHERE id=? AND customer_stage < ?`(天然幂等);已是更高阶段=no-op 静默成功,不报错不写日志 |
||||
|
- [ ] `CustomerStagePort.promote(customerId, targetStage, triggerSource)` seam(票 05 §D):只前进、传入更低阶段=no-op、返回提升后阶段 |
||||
|
- [ ] **本期无调用方**(D20 改票 B):`triggerSource` 示例 `scheme_card_reported`(方案卡提交并报备成功,本期链路不可达)/`project_won`(A5 seam);~~`scheme_card_submitted`~~ 弃用(不用"已提交"单条件凑合触发,避免脏状态) |
||||
|
- [ ] 失败语义(票 05 §E):阶段提升是**派生冗余视图**,失败**不阻断**主业务(方案卡照常提交);记日志告警 + 幂等重试;弱一致即可(区别于 lead→opp 强一致主业务) |
||||
|
- [ ] 每次阶段变化写 `customer_oplog`(票 06),操作人=`系统` + 注明触发来源 |
||||
|
- [ ] 单测:只前进 CAS 的幂等/no-op/并发路径覆盖 |
||||
@ -0,0 +1,23 @@ |
|||||
|
# 06 — 客户详情页(8 页签 + 跟进记录 + 操作日志) |
||||
|
|
||||
|
**What to build:** 客户详情页能展示公共头部 + 汇总卡片 + 8 个页签;跟进记录能追加(不可改删)且写库刷新超期提醒锚点;操作日志按 append-only 审计记录并可分页查询。外部模块页签(关联项目/战略协议)显"--"占位。 |
||||
|
|
||||
|
**Blocked by:** 02 — 客户主表 CRUD + 查重校验;05 — 客户阶段(seam 版) |
||||
|
|
||||
|
**Status:** ready-for-agent |
||||
|
|
||||
|
**Spec 依据(详见 issues/07-answer.md)**:D13 详情 8 页签 + append-only 跟进 + 字段级 oplog;§5.5 拍板 A = oplog 无限期保留。 |
||||
|
|
||||
|
**关联商机反查的依赖方向(关键)**:「关联商机」页签需读 crm-opportunity,但 Maven 依赖只能 `opportunity → customer`。故 customer 侧**定义出站 port**(如 `CustomerOpportunityQueryPort`),由 crm-opportunity 实现(对称 ADR-0029 lead→opp port 范式,票 11 落实现);本票只定义 port + 页签消费契约,反查真源接线归票 11。 |
||||
|
|
||||
|
- [ ] 公共头部(票 07 §A,8 页签共享):客户名称/阶段只读条/客户星级/关系星级/战略协议等级(快照)/已成交VIP等级(快照)/档案状态/负责人+部门/最近跟进摘要/待跟进提醒/关联业务计数 |
||||
|
- [ ] 汇总卡片 4 张(票 07 §A):均外部模块提供,接口失败显"--"+重试、不显 0(grill Q18) |
||||
|
- [ ] 8 页签骨架(票 07 §A):1 客户信息(票02) / 2 联系人(票03) / 3 跟进记录 / 4 关联商机(port 反查) / 5 关联项目(A5 显"--") / 6 战略协议(显"--") / 7 团队成员 / 8 操作日志;首次打开才加载,切回保留条件/分页 |
||||
|
- [ ] `customer_follow` 跟进记录(票 07 §B):followWay(字典 follow_way)/followContent/nextFollowTime/跟进人快照;**提交后不可改删**(纠错=新增补充);防重复提交 |
||||
|
- [ ] 跟进写库副作用(关键):`customer.last_valid_follow_time = now`(超期提醒锚点刷新,票 09);更新"待跟进"状态 |
||||
|
- [ ] 跟进契约:`POST /api/customer/{id}/follow` / `GET /api/customer/{id}/follow/page`(时间倒序+日期分组,按 follow_way/关键字/时间范围过滤) |
||||
|
- [ ] 团队成员页签(票 07 §D):销售负责人快照 + 协同人列表;`GET /api/customer/{id}/members` |
||||
|
- [ ] `customer_oplog`(票 07 §E):action 枚举(CREATE/UPDATE/FOLLOW/ARCHIVE/RESTORE/TRANSFER/CLAIM/POOL/STAGE_CHANGE)/detail`把{字段}从{旧}修改为{新}`/操作人快照;**只追加不可改删**;**§5.5 无限期保留**(不设保留期/清理/冷热分离) |
||||
|
- [ ] oplog 契约:`GET /api/customer/{id}/oplog/page`(时间倒序+日期分组+关键字/时间范围过滤) |
||||
|
- [ ] `CustomerOpportunityQueryPort` seam 定义(关联商机页签只读反查,真源归票 11);`GET /api/customer/{id}/detail` |
||||
|
- [ ] crm-dict 新增 `follow_way` 分组(微信/拜访/电话/邮件/会议) |
||||
@ -0,0 +1,19 @@ |
|||||
|
# 07 — 客户交割 |
||||
|
|
||||
|
**What to build:** 离职/调动/区域调整的销售本人能发起本人名下客户的两段式交割(发起交接→客户分配),交接单整批原子生成,接收总监再逐客户/批量分配给具体销售;换主时同步 crm-opportunity 商机负责人(项目侧留 seam)。 |
||||
|
|
||||
|
**Blocked by:** 04 — 三 workspace 视图 + 归属流转 |
||||
|
|
||||
|
**Status:** ready-for-agent |
||||
|
|
||||
|
**Spec 依据(详见 issues/08-answer.md)**:D15 两段式交割;D22 直属总监组织推导(20260902 复核补:离职=系统自动唯一确定;调动/区域调整=在启用的直属总监范围内下拉选)。 |
||||
|
|
||||
|
- [ ] 流程模型(票 08 §A,两段式):发起交接(owner→接收总监) → 客户分配(总监→具体销售) |
||||
|
- [ ] 权限:只允许离职/调动/区域调整的销售**本人**发起本人名下客户交接(主管/管理员不可代办) |
||||
|
- [ ] 可交接客户 = 该销售为**唯一负责人** 且 未删除 且 非公海(仅协同人的不纳入) |
||||
|
- [ ] 接收总监(D22):离职=系统自动确定唯一直属销售总监;调动/区域调整=在本人**启用的**直属总监范围内搜索选择 |
||||
|
- [ ] `customer_transfer` 交接单实体(票 08 §B1):transferNo(唯一)/from/toDirector 快照/reason(员工离职·岗位调动·区域调整)/totalCount/assignedCount/status(0待分配·1已完成) |
||||
|
- [ ] `customer_transfer_detail` 明细(票 08 §B2):transferId/customerId/assignStatus/assignUser 快照/assignTime;`UNIQUE(transfer_id, customer_id)` |
||||
|
- [ ] 交接单生成:全部变更成功才生成(整批原子);交接编号 + 状态"待分配" + 进度 0/N |
||||
|
- [ ] 事务语义(票 08 §C,跨模块):换 owner 同步 crm-opportunity 商机负责人;**项目侧留 seam**(A5 未建);每步写 `customer_oplog`(TRANSFER) |
||||
|
- [ ] 契约:发起交接 / 交接单列表 / 分配(逐客户+批量)/ 进度查询 |
||||
@ -0,0 +1,19 @@ |
|||||
|
# 08 — 客户导入 |
||||
|
|
||||
|
**What to build:** 用户能上传 Excel 异步导入客户主数据 + 联系人子表,三选一导入方式(仅新增/仅更新/新增或更新),行级处理允许部分成功,导入前预校验展示预计数、导入后出结果页与失败明细下载。 |
||||
|
|
||||
|
**Blocked by:** 02 — 客户主表 CRUD + 查重校验;03 — 联系人子表 |
||||
|
|
||||
|
**Status:** ready-for-agent |
||||
|
|
||||
|
**Spec 依据(详见 issues/09-answer.md)**:D16 三模式导入 + 异步 + 行级部分成功;OCR 快捷新增划出(Out-of-scope)。D26 翻案后联系人电话口径。 |
||||
|
|
||||
|
- [ ] 三导入方式(票 09 §B):仅新增/仅更新/新增或更新;匹配顺序=① 客户编号完全一致 → ② 统一社会信用代码完全一致 |
||||
|
- [ ] 匹配边界:编号与信用代码均缺失/均未匹配→不凭名称自动覆盖(名称相似列"疑似重复"本次不写入);分别匹配到不同客户→该行冲突禁止导入;文件内多行匹配同一客户→覆盖/不导入互斥(默认不导入) |
||||
|
- [ ] 字段语义(票 09 §C):新增导入必填空→行失败;更新导入空白单元格=不修改(V1 不支持清空);`customer_stage` 固定=潜在不得指定;禁止导入改负责人/协同人/阶段回退/工商字段/战略协议/汇总字段 |
||||
|
- [ ] **联系人子表口径(D26 翻案后)**:电话匹配本客户→更新;匹配他客户→**软提示疑似重复、不禁止导入**(跟随「联系电话」开关,关则不提示)、**不做跨客户电话唯一硬拦**;电话空→按"客户+姓名+职务"疑似重复不自动覆盖;同文件内同客户电话相同两行→该行失败 |
||||
|
- [ ] 原子单元=单条客户主记录/单条联系人子记录;联系人失败不回滚已成功客户主记录 |
||||
|
- [ ] 任务模型(票 09 §D,对称商机/线索导入范式):异步任务;预校验(文件类型.xls/.xlsx、≤20MB、模板版本、表头无空、单sheet≤50000行、忽略公式/图片);行级部分成功 |
||||
|
- [ ] 结果页:任务状态/总行数/新增成功/更新成功/未变化/失败/提交人/时间;失败明细(sheet/行号/客户识别/失败字段/原因)可下载、敏感值按权限脱敏 |
||||
|
- [ ] 操作日志:记任务ID/方式/模板版本/文件哈希/成功失败数;**不记文件名/内容/敏感原值**;超时异常→标失败不让重复提交 |
||||
|
- [ ] 契约(票 09 §D):upload / {taskId}/confirm / {taskId} / {taskId}/failures / import/page / import/template |
||||
@ -0,0 +1,18 @@ |
|||||
|
# 09 — 超期未跟进提醒 |
||||
|
|
||||
|
**What to build:** 后台可配一条全局单例的「超期未跟进提醒」规则(首次触发天数/二次间隔天数/开关),调度 Job 定期扫描超期客户并落待发通知。计时锚点=客户"成为有主"的时刻,跟进即刷新。 |
||||
|
|
||||
|
**Blocked by:** 02 — 客户主表 CRUD + 查重校验;06 — 客户详情页(跟进记录刷新锚点) |
||||
|
|
||||
|
**Status:** ready-for-agent |
||||
|
|
||||
|
**Spec 依据(详见 issues/10-answer.md)**:D8 三层对称商机回收提醒但配置=单例(不套版本化);D15/Q15 锚点=成为有主时刻。 |
||||
|
|
||||
|
- [ ] **crm-rule 侧** `customer_reminder_rule` 单例表(票 10 §B,跨模块改动):单行表 id 固定=1;masterEnabled/firstTriggerEnabled/firstTriggerDays(默认30)/secondIntervalEnabled/secondIntervalDays(默认7);无版本号/状态机/rule_code |
||||
|
- [ ] `CustomerReminderRuleInitializer` 种子初始化器(对称 `StageTemplateInitializer` 兜底范式)植入默认行 |
||||
|
- [ ] 校验:`firstTriggerDays>0`、`secondIntervalDays>0`;保存=全量覆盖(保存即生效);RBAC 功能权限 `customer.reminder.rule` |
||||
|
- [ ] 规则契约:`GET /api/rule/customer/reminder`(读单行)/ `PUT /api/rule/customer/reminder`(全量覆盖+记操作日志) |
||||
|
- [ ] **crm-customer 侧** `customer_pending_notice` 待发通知表(对称 `opportunity_pending_notice`) |
||||
|
- [ ] `CustomerReminderJob`(@Scheduled,对称 `OpportunityMaintenanceJob`):masterEnabled=0 整轮跳过;扫 `last_valid_follow_time` 超期客户写待发通知 |
||||
|
- [ ] 触发口径(票 10 §C,锚点=成为有主时刻,Q15 拍板 A):① 新建直接指派负责人→锚点=create_time;② 新建进公海(无负责人)→锚点=NULL 不提醒,被领取/分配时→锚点=领取时刻;③ 每次写跟进刷新锚点(票 06) |
||||
|
- [ ] 只前进、确定性提醒链;索引 `idx_last_follow`(last_valid_follow_time, owner_user_id) 扫表(票 02 已建) |
||||
@ -0,0 +1,17 @@ |
|||||
|
# 10 — 自定义视图接入 crm-preference |
||||
|
|
||||
|
**What to build:** 三个客户 workspace 各自能保存/加载自定义检索视图,复用 crm-preference 的 `user_saved_view` 平台能力(不重写),通过 filter 白名单把保存的条件翻译成查询、且不越权改变数据范围。 |
||||
|
|
||||
|
**Blocked by:** 04 — 三 workspace 视图 + 归属流转 |
||||
|
|
||||
|
**Status:** ready-for-agent |
||||
|
|
||||
|
**Spec 依据(详见 issues/11-answer.md)**:D17 复用 saved-view 平台;rule of three(商机样本1+客户样本2,不抽共享翻译器)。 |
||||
|
|
||||
|
- [ ] 复用 crm-preference `user_saved_view`,**不重写**(各自 `CustomerSavedViewFilter`) |
||||
|
- [ ] 3 个 scope_key(票 11 §B):客户总览=`customer.overview` / 我的客户=`customer.mine` / 客户公海=`customer.pool`;公海双视角共用 `customer.pool`(视角只影响行内操作,不影响筛选) |
||||
|
- [ ] `CustomerSavedViewFilter`(票 11 §C):filter_json → MyBatis-Plus wrapper 翻译器(对称 `OpportunitySavedViewFilter`) |
||||
|
- [ ] 字段池白名单(票 11 §C):客户名称/编号(含/不含);类型/行业/阶段/星级/关系星级/战略等级/VIP等级/档案状态/地区(属于任一/不属于任一);最近跟进时间(早于/晚于/从未/已有);进入公海时间(仅pool);负责人/部门(仅overview/mine);创建时间。**未知字段/操作符→静默跳过** |
||||
|
- [ ] 排序字段池:创建时间/最近跟进时间/进入公海时间;文本字段不排 |
||||
|
- [ ] PageParam 接入(票 11 §D):三 workspace PageParam 加 `savedViewId`;ViewQueryImpl 有 savedViewId→取 filter 叠加 wrapper |
||||
|
- [ ] 验收(票 11 §E):scope_key 三值互斥且与 opportunity.* 无碰撞;白名单内生效/外跳过;每 scope 仅一个 isDefault;端到端保存→恢复;**saved-view 只叠加筛选不改变 @DataScope** |
||||
@ -0,0 +1,18 @@ |
|||||
|
# 11 — 商机模块客户接口对接(切真源) |
||||
|
|
||||
|
**What to build:** 把 crm-opportunity 里之前 A4 未建时的降级 stub 全部切到真实 customer 数据源,让商机侧「关联客户 / 关键联系人 / 客户搜索 / 快速建客户」真正打通客户模块;同时接上 customer 侧「关联商机」页签的反查 port。这是清偿 A4 未建时留下的技术债。 |
||||
|
|
||||
|
**Blocked by:** 02 — 客户主表 CRUD + 查重校验;03 — 联系人子表;06 — 客户详情页(关联商机 port 定义) |
||||
|
|
||||
|
**Status:** ready-for-agent |
||||
|
|
||||
|
**背景**:A4 未建期间 crm-opportunity 用了多处降级 stub(返回空列表/仅存引用 id)。customer 建成后需切真源,签名不变。依赖方向只走 `opportunity → customer` 单向;customer 侧「关联商机」反查通过 customer 定义、opportunity 实现的出站 port 解耦(ADR-0029 范式),不形成 Maven 循环。 |
||||
|
|
||||
|
- [ ] `crm-opportunity/pom.xml` 增加依赖 `crm-customer`(单向,`opportunity → customer`) |
||||
|
- [ ] `OpportunitySubController` / `IOpportunitySubService#listCustomerContacts(customerId)`:stub 返回空列表 → 改调 customer `GET /api/customer/{id}/contacts` 真源;`CustomerContactDTO` 由 stub 字段占位 → 真源填充(签名不变) |
||||
|
- [ ] `searchCustomers(param)`:票 04 D-02「候选客户池降级=取关联客户快照去重」→ 切 customer `POST /api/customer/search`(四维模糊+分页)真源 |
||||
|
- [ ] `OpportunityCustomer.customerId`("客户模块 A4 未建:引用 id + 名快照并存"):确认关联真实 customer 记录;`customer_name_snapshot` 免 join 展示保留(快照口径不变) |
||||
|
- [ ] `POST /api/customer/quick-create`(商机弹窗快速建客户入口)真源接线 |
||||
|
- [ ] **customer 侧「关联商机」页签**(票 06 定义的 `CustomerOpportunityQueryPort`):在 crm-opportunity 实现该 port(按 customer_id 反查该客户全部商机:名称/编号/阶段/预计金额/负责人/最近更新),供客户详情页签只读展示 |
||||
|
- [ ] 回归:切真源后 crm-opportunity 原有关联客户/联系人相关测试仍绿;跨模块调用无循环依赖、`mvn compile` 全绿 |
||||
|
- [ ] 清理 stub 上遗留的"A4 未建/降级"注释,改为正式实现说明 |
||||
@ -0,0 +1,22 @@ |
|||||
|
# 12 — 原型页面对齐验收 |
||||
|
|
||||
|
**What to build:** 全模块开发完成后,按蓝湖原型逐页对齐验收:字段/交互/状态/枚举/按钮逐项核对真实实现与原型是否一致,不符处修正。这是整个客户模块的收口验收,确保交付物与设计稿一致。 |
||||
|
|
||||
|
**Blocked by:** 01–11(全部功能票完成,且 `mvn compile` 通过、crm-app 能启动、各票关键接口冒烟通过) |
||||
|
|
||||
|
**Status:** ready-for-agent |
||||
|
|
||||
|
**验收源**:蓝湖 A4 客户模块原型(docId `bade4454`);fresh 提取文本在 `D:/code/crm-需求梳理/lanhu-mcp/data/axure_extract_bade4454_screenshots/`。逐页对照 `.txt` + 必要时 OCR `.png`(OCR 为 fallback,Windows CJK 路径可能 400)。 |
||||
|
|
||||
|
**逐页对齐清单(至少覆盖)**: |
||||
|
|
||||
|
- [ ] `A4-1-1 客户公海列表`:列集(已成交VIP客户等级/进入公海时间)、操作(详情/关注·取消关注/分配)、检索项、分页 |
||||
|
- [ ] `A4-2-1 客户总览` / `我的客户`:身份筛选(我负责的/我协同的)、看板三分组页签(客户阶段/客户星级/关系星级)、视图模式切换 |
||||
|
- [ ] `A4-3-3-1 新增客户`:全字段 + 客户类型下拉(后台配置字典) + 停输防抖相似查重 + 信用代码硬拦 |
||||
|
- [ ] `A4-4-1 客户详情`:公共头部 + 汇总卡片 4 张(失败显"--") + 8 页签;操作区只有归档/标记重点客户(无删除按钮,§5.3);已归档子页有恢复 |
||||
|
- [ ] `A4-4-8 操作日志`:append-only、字段级旧→新、时间倒序+日期分组 |
||||
|
- [ ] `A4-7-1 客户交割`:两段式、接收总监(离职自动/调动·区域调整下拉选)、整批原子、进度 |
||||
|
- [ ] `A4-3-2 客户导入`:三方式、预校验、结果页、失败明细 |
||||
|
- [ ] `A7-3-3-1 超期未跟进提醒` / `A7-3-3-2 客户查重设置`:单例配置项、查重开关(名称/电话/信用代码) |
||||
|
- [ ] 归档/领取/分配/抛公海动作弹窗文案与前置校验(无进行中商机/项目) |
||||
|
- [ ] 逐项记录"符合/不符→已修正",不符处开子任务修复直至对齐 |
||||
@ -0,0 +1,19 @@ |
|||||
|
# 13 — 接口文档(对照原型) |
||||
|
|
||||
|
**What to build:** 全模块开发完成后,对照原型界面产出/完善客户模块接口文档,保证每个原型界面用到的接口契约齐全、参数/出参/状态码/权限/脱敏规则齐备且与实现一致。交付一份可供前端与联调直接使用的接口文档。 |
||||
|
|
||||
|
**Blocked by:** 01–11(全部功能票完成);建议在 12 原型对齐后或并行进行 |
||||
|
|
||||
|
**Status:** ready-for-agent |
||||
|
|
||||
|
**文档载体**:复用现有 knife4j/swagger(OpenAPI)注解体系(对称 crm-opportunity 的 `@Schema`/`@Operation` 写法);接口文档以 knife4j 在线文档为主、必要时补一份 Markdown 汇总。 |
||||
|
|
||||
|
- [ ] 按原型界面梳理接口清单(每个界面→其依赖的接口),确保无遗漏、无孤立接口 |
||||
|
- [ ] 客户 CRUD / 查重(票 02):请求/响应 DTO 的 `@Schema` 描述齐全;查重弹窗返回结构(相似候选/脱敏字段)文档化 |
||||
|
- [ ] 联系人 CRUD + 搜索 + quick-create(票 03):含商机侧硬依赖接口 `search`/`contacts`/`quick-create` 契约 |
||||
|
- [ ] 三 workspace 列表 + 归属流转(票 04):分页出参、看板分组出参、各归属动作入参/前置校验错误码 |
||||
|
- [ ] 详情 8 页签 + 跟进 + oplog(票 06):各页签接口、分页/分组/过滤参数、失败显"--"约定 |
||||
|
- [ ] 交割(票 07)/ 导入(票 08)/ 提醒配置(票 09)/ saved-view(票 10)接口契约 |
||||
|
- [ ] 统一标注:权限(RBAC 功能权限 / @DataScope 数据范围)、字段级脱敏规则、错误码与业务含义 |
||||
|
- [ ] 校验:文档中每个接口都能在 knife4j 中打开并与实现签名一致;参数示例可直接联调 |
||||
|
- [ ] 与票 12 对齐结果保持同步——原型对齐中修正的接口同步更新文档 |
||||
@ -0,0 +1,46 @@ |
|||||
|
# 客户模块(A4)实现票 — 依赖总览 |
||||
|
|
||||
|
从冻结 spec(`../map.md` + `../../crm-customer/CONTEXT.md` + `../issues/NN-answer.md` 决议票)折出的 tracer-bullet 实现票。每张=一条贯穿 schema→API→测试的垂直切片,blocker-first 编号。 |
||||
|
|
||||
|
## 依赖图 |
||||
|
|
||||
|
``` |
||||
|
01 骨架 (无 blocker) |
||||
|
└─ 02 主表CRUD+查重 (⭐扇出最广) |
||||
|
├─ 03 联系人子表 |
||||
|
├─ 04 三workspace+归属流转 |
||||
|
│ ├─ 07 客户交割 |
||||
|
│ └─ 10 saved-view接入 |
||||
|
├─ 05 客户阶段(seam版) |
||||
|
│ └─ 06 详情(8页签+跟进+oplog) ← 也 blocked by 02 |
||||
|
│ └─ 09 超期提醒 ← 也 blocked by 02 |
||||
|
├─ 08 客户导入 ← blocked by 02 + 03 |
||||
|
└─ 11 商机客户接口对接 ← blocked by 02 + 03 + 06 |
||||
|
12 原型对齐验收 ← blocked by 01–11 全部 |
||||
|
13 接口文档 ← blocked by 01–11 全部(可与 12 并行) |
||||
|
``` |
||||
|
|
||||
|
## 前沿顺序(可开工的票=其 blocker 全完成) |
||||
|
|
||||
|
| 波次 | 可并行开工 | |
||||
|
|---|---| |
||||
|
| 1 | **01** | |
||||
|
| 2 | **02** | |
||||
|
| 3 | **03** / **04** / **05** | |
||||
|
| 4 | **06**(需02+05) / **07**(需04) / **08**(需02+03) / **10**(需04) | |
||||
|
| 5 | **09**(需02+06) / **11**(需02+03+06) | |
||||
|
| 6 | **12** / **13**(需 01–11 全部 + mvn compile 通过 + crm-app 启动 + 关键接口冒烟) | |
||||
|
|
||||
|
## 每张票 `/implement` 时的通用要求 |
||||
|
|
||||
|
- `.java` 一律 UTF-8 无 BOM;新增 entity 过一遍孤立单大写字母检查清单(AGENTS.md) |
||||
|
- 依赖方向单向 `opportunity → customer`;「关联商机」反查走 customer 定义、opportunity 实现的出站 port(ADR-0029 范式),**不建 Maven 循环** |
||||
|
- 每张票收工前 `mvn compile` 全绿 + 服务层集成测试(H2 MySQL 模式)通过 |
||||
|
- 每张票 `/implement` 之间清 context 重新开始;完成后 `/code-review` |
||||
|
|
||||
|
## 已翻案/新拍板口径(实现时以此为准,勿回退旧 answer 正文) |
||||
|
|
||||
|
- **D20 改票 B**:客户阶段本期**不自动触发重潜**,只留 `CustomerStagePort` seam(票 05) |
||||
|
- **D26 拍板 A**:联系人电话=可配置软提示,**不建电话唯一索引**(票 03/08) |
||||
|
- **§5.3 拍板 A**:一期只做归档,**无前端删除入口**,`deleted` 仅系统合并时置位(票 02/04) |
||||
|
- **§5.5 拍板 A**:`customer_oplog` **无限期保留**(票 06) |
||||
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 56 KiB |
@ -0,0 +1,120 @@ |
|||||
|
-- ============================================================ |
||||
|
-- 测试环境 crm 库 schema 补齐(opportunity / opportunity_customer) |
||||
|
-- 背景 20260901:导表后两表为残缺混合结构(缺 party_a_clear 等列, |
||||
|
-- 实体映射全列 SELECT/INSERT → SQLSyntaxErrorException → 50001)。 |
||||
|
-- 用法:Navicat 整段执行 / mysql -uroot -p crm < opp-schema-migration.sql |
||||
|
-- 幂等:列已存在自动跳过(information_schema 判存 + 动态 SQL,MySQL 8 无 ADD COLUMN IF NOT EXISTS)。 |
||||
|
-- 对齐实体:Opportunity.java(L40-230)+ OpportunityCustomer.java + BaseEntity.java。 |
||||
|
-- 更省事的替代:重启 crm-app 容器即可,jpa.hibernate.ddl-auto=update 会自动补齐全部缺列。 |
||||
|
-- ============================================================ |
||||
|
|
||||
|
DELIMITER $$ |
||||
|
|
||||
|
DROP PROCEDURE IF EXISTS crm_add_column $$ |
||||
|
CREATE PROCEDURE crm_add_column( |
||||
|
IN p_table VARCHAR(64), IN p_column VARCHAR(64), IN p_ddl TEXT) |
||||
|
BEGIN |
||||
|
IF NOT EXISTS ( |
||||
|
SELECT 1 FROM information_schema.COLUMNS |
||||
|
WHERE TABLE_SCHEMA = DATABASE() |
||||
|
AND TABLE_NAME = p_table AND COLUMN_NAME = p_column |
||||
|
) THEN |
||||
|
SET @s = CONCAT('ALTER TABLE `', p_table, '` ADD COLUMN `', p_column, '` ', p_ddl); |
||||
|
PREPARE st FROM @s; EXECUTE st; DEALLOCATE PREPARE st; |
||||
|
SELECT CONCAT('ADD ', p_table, '.', p_column) AS applied; |
||||
|
END IF; |
||||
|
END $$ |
||||
|
|
||||
|
DELIMITER ; |
||||
|
|
||||
|
-- ---------- opportunity 主表 ---------- |
||||
|
CALL crm_add_column('opportunity','opp_name', "varchar(200) NOT NULL COMMENT '商机名称'"); |
||||
|
CALL crm_add_column('opportunity','opp_source', "varchar(64) NOT NULL COMMENT '商机来源字典code'"); |
||||
|
CALL crm_add_column('opportunity','opp_type', "varchar(64) NOT NULL COMMENT '商机类型字典code'"); |
||||
|
CALL crm_add_column('opportunity','industry_code', "varchar(64) NOT NULL COMMENT '行业字典code'"); |
||||
|
CALL crm_add_column('opportunity','bid_form', "varchar(64) NOT NULL COMMENT '招标形式字典code'"); |
||||
|
CALL crm_add_column('opportunity','locality_type', "varchar(64) NOT NULL COMMENT '项目属地字典code'"); |
||||
|
CALL crm_add_column('opportunity','party_a_clear', "tinyint NOT NULL DEFAULT 0 COMMENT '甲方是否明确'"); |
||||
|
CALL crm_add_column('opportunity','party_a', "varchar(200) NULL COMMENT '甲方名称'"); |
||||
|
CALL crm_add_column('opportunity','province_code', "varchar(12) NOT NULL COMMENT '省份国标code'"); |
||||
|
CALL crm_add_column('opportunity','city_code', "varchar(12) NOT NULL COMMENT '市/区国标code'"); |
||||
|
CALL crm_add_column('opportunity','remark', "text NULL COMMENT '备注'"); |
||||
|
CALL crm_add_column('opportunity','project_amount', "decimal(14,2) NULL COMMENT '项目金额'"); |
||||
|
CALL crm_add_column('opportunity','address', "varchar(255) NULL COMMENT '项目详细地址'"); |
||||
|
CALL crm_add_column('opportunity','owner_user_id', "bigint NULL COMMENT '领取人ID'"); |
||||
|
CALL crm_add_column('opportunity','owner_name_snapshot', "varchar(64) NULL COMMENT '领取人姓名快照'"); |
||||
|
CALL crm_add_column('opportunity','owner_dept_id', "bigint NULL COMMENT '领取人部门快照'"); |
||||
|
CALL crm_add_column('opportunity','origin_dept_id', "bigint NULL COMMENT '原始血缘部门'"); |
||||
|
CALL crm_add_column('opportunity','pool_reason', "varchar(32) NULL COMMENT '进入公海原因'"); |
||||
|
CALL crm_add_column('opportunity','creator_user_id', "bigint NOT NULL COMMENT '创建人ID'"); |
||||
|
CALL crm_add_column('opportunity','opp_status', "tinyint NOT NULL COMMENT '商机状态'"); |
||||
|
CALL crm_add_column('opportunity','current_stage_id', "bigint NOT NULL COMMENT '当前阶段节点ID'"); |
||||
|
CALL crm_add_column('opportunity','stage_template_id', "bigint NOT NULL COMMENT '阶段模板版本行ID'"); |
||||
|
CALL crm_add_column('opportunity','stage_template_version', "varchar(20) NOT NULL COMMENT '阶段模板版本号冗余'"); |
||||
|
CALL crm_add_column('opportunity','source_lead_id', "bigint NULL COMMENT '来源线索ID'"); |
||||
|
CALL crm_add_column('opportunity','source_lead_name', "varchar(200) NULL COMMENT '线索名快照'"); |
||||
|
CALL crm_add_column('opportunity','source_phone', "varchar(32) NULL COMMENT '联系电话快照'"); |
||||
|
CALL crm_add_column('opportunity','source_product_code', "varchar(64) NULL COMMENT '需求产品码快照'"); |
||||
|
CALL crm_add_column('opportunity','claim_time', "datetime NULL COMMENT '领取时刻'"); |
||||
|
CALL crm_add_column('opportunity','last_valid_follow_time', "datetime NULL COMMENT '最近有效跟进时间'"); |
||||
|
CALL crm_add_column('opportunity','primary_customer_id', "bigint NULL COMMENT '主要意向客户ID'"); |
||||
|
CALL crm_add_column('opportunity','primary_customer_name_snapshot', "varchar(200) NULL COMMENT '主客户名快照'"); |
||||
|
CALL crm_add_column('opportunity','key_contact_id', "bigint NULL COMMENT '商机关键联系人ID'"); |
||||
|
CALL crm_add_column('opportunity','key_contact_name_snapshot', "varchar(200) NULL COMMENT '商机关键联系人姓名快照'"); |
||||
|
CALL crm_add_column('opportunity','key_contact_company_snapshot', "varchar(200) NULL COMMENT '关键人所在公司快照'"); |
||||
|
CALL crm_add_column('opportunity','scheme_budget', "decimal(18,2) NULL COMMENT '方案卡预算快照'"); |
||||
|
CALL crm_add_column('opportunity','scheme_card_status', "int NULL COMMENT '方案卡状态快照'"); |
||||
|
CALL crm_add_column('opportunity','pause_time', "datetime NULL COMMENT '暂缓开始时刻'"); |
||||
|
CALL crm_add_column('opportunity','pause_reason', "varchar(32) NULL COMMENT '暂缓原因'"); |
||||
|
CALL crm_add_column('opportunity','pause_expected_restart_date', "date NULL COMMENT '预计重启日期'"); |
||||
|
CALL crm_add_column('opportunity','pause_remark', "varchar(500) NULL COMMENT '暂缓补充说明'"); |
||||
|
CALL crm_add_column('opportunity','version', "int NOT NULL DEFAULT 0 COMMENT '乐观锁版本号'"); |
||||
|
-- BaseEntity 公共列(通常都在,幂等兜底) |
||||
|
CALL crm_add_column('opportunity','creator_id', "varchar(50) NULL COMMENT '创建用户id'"); |
||||
|
CALL crm_add_column('opportunity','updater_id', "varchar(50) NULL COMMENT '更新用户id'"); |
||||
|
CALL crm_add_column('opportunity','create_time', "datetime NULL COMMENT '创建时间'"); |
||||
|
CALL crm_add_column('opportunity','update_time', "datetime NULL COMMENT '更新时间'"); |
||||
|
CALL crm_add_column('opportunity','delete_key', "tinyint NOT NULL DEFAULT 0 COMMENT '逻辑删除位'"); |
||||
|
|
||||
|
-- ---------- opportunity_customer 关联客户表 ---------- |
||||
|
CALL crm_add_column('opportunity_customer','opportunity_id', "bigint NOT NULL COMMENT '所属商机ID'"); |
||||
|
CALL crm_add_column('opportunity_customer','customer_id', "bigint NOT NULL COMMENT '客户ID'"); |
||||
|
CALL crm_add_column('opportunity_customer','customer_name_snapshot', "varchar(200) NOT NULL COMMENT '客户名快照'"); |
||||
|
CALL crm_add_column('opportunity_customer','customer_role', "varchar(32) NULL COMMENT '客户角色字典code'"); |
||||
|
CALL crm_add_column('opportunity_customer','is_primary_intended', "tinyint NOT NULL DEFAULT 0 COMMENT '是否主要意向客户'"); |
||||
|
CALL crm_add_column('opportunity_customer','delete_key', "bigint NOT NULL DEFAULT 0 COMMENT '软删除复用键'"); |
||||
|
CALL crm_add_column('opportunity_customer','creator_id', "varchar(50) NULL COMMENT '创建用户id'"); |
||||
|
CALL crm_add_column('opportunity_customer','updater_id', "varchar(50) NULL COMMENT '更新用户id'"); |
||||
|
CALL crm_add_column('opportunity_customer','create_time', "datetime NULL COMMENT '创建时间'"); |
||||
|
CALL crm_add_column('opportunity_customer','update_time', "datetime NULL COMMENT '更新时间'"); |
||||
|
|
||||
|
-- ---------- 索引/约束补齐(不阻塞运行,建议顺手执行) ---------- |
||||
|
SET @ix := (SELECT COUNT(*) FROM information_schema.STATISTICS |
||||
|
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'opportunity' AND INDEX_NAME = 'idx_source_lead'); |
||||
|
SET @sql := IF(@ix = 0, |
||||
|
'ALTER TABLE `opportunity` ADD UNIQUE INDEX `idx_source_lead` (`source_lead_id`)', |
||||
|
'SELECT 1'); |
||||
|
PREPARE st FROM @sql; EXECUTE st; DEALLOCATE PREPARE st; |
||||
|
|
||||
|
SET @ix := (SELECT COUNT(*) FROM information_schema.STATISTICS |
||||
|
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'opportunity' AND INDEX_NAME = 'idx_owner_status'); |
||||
|
SET @sql := IF(@ix = 0, |
||||
|
'ALTER TABLE `opportunity` ADD INDEX `idx_owner_status` (`owner_user_id`, `opp_status`)', |
||||
|
'SELECT 1'); |
||||
|
PREPARE st FROM @sql; EXECUTE st; DEALLOCATE PREPARE st; |
||||
|
|
||||
|
SET @ix := (SELECT COUNT(*) FROM information_schema.STATISTICS |
||||
|
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'opportunity' AND INDEX_NAME = 'idx_owner_dept_status'); |
||||
|
SET @sql := IF(@ix = 0, |
||||
|
'ALTER TABLE `opportunity` ADD INDEX `idx_owner_dept_status` (`owner_dept_id`, `opp_status`)', |
||||
|
'SELECT 1'); |
||||
|
PREPARE st FROM @sql; EXECUTE st; DEALLOCATE PREPARE st; |
||||
|
|
||||
|
DROP PROCEDURE crm_add_column; |
||||
|
|
||||
|
-- 执行完核对(应全部返回 0 行 = 缺列已补齐): |
||||
|
-- SELECT TABLE_NAME, COLUMN_NAME FROM information_schema.COLUMNS |
||||
|
-- WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME IN ('opportunity','opportunity_customer') |
||||
|
-- AND COLUMN_NAME IN ('party_a_clear','project_amount','address','key_contact_id', |
||||
|
-- 'key_contact_name_snapshot','key_contact_company_snapshot', |
||||
|
-- 'customer_role','is_primary_intended'); |
||||
@ -0,0 +1,45 @@ |
|||||
|
### JPA/Hibernate 命名策略:孤立单大写字母陷阱 |
||||
|
|
||||
|
Spring Boot 默认的 `SpringPhysicalNamingStrategy` 把驼峰转蛇形时,**会把"孤立的单个大写字母"当成缩略语(同 `URL` / `ID` 处理),不插下划线**。触发条件:某个大写字母的**左侧是小写或字符串开头、右侧是大写或字符串结尾**。 |
||||
|
|
||||
|
这会导致 Hibernate 建表的物理列名与 MyBatis-Plus 生成 SQL 时的列名(走 `camelToUnderscore`)**不一致**,报错形如: |
||||
|
|
||||
|
``` |
||||
|
java.sql.SQLSyntaxErrorException: Unknown column 'party_a_clear' in 'field list' |
||||
|
``` |
||||
|
|
||||
|
已知踩坑记录: |
||||
|
|
||||
|
| Java 字段 | 期望列名 | Hibernate 实际建成 | MyBatis SQL 写的 | |
||||
|
|---|---|---|---| |
||||
|
| `partyA` | `party_a` | `partya` ❌ | `party_a` | |
||||
|
| `partyAClear` | `party_a_clear` | `partyaclear` ❌ | `party_a_clear` | |
||||
|
|
||||
|
**规则**:Java 字段名里出现下述形态的**孤立单大写字母**时,**必须**在 `@Column` 上显式写 `name="蛇形列名"` 钉死: |
||||
|
|
||||
|
- 结尾单大写:`xxxA`、`xxxB`、`xxxZ` |
||||
|
- 夹在小写与大写词之间的单大写:`xxxAYyy`、`xxxBClear` |
||||
|
- 连续单大写:`xxxABC`(会整段当缩略语,不断词) |
||||
|
|
||||
|
反例(**这些形态不会踩坑,无需 `@Column(name=...)`**): |
||||
|
|
||||
|
- `ownerUserId` → `owner_user_id` ✅(`Id` 是两字符段,按普通词处理) |
||||
|
- `bidForm` → `bid_form` ✅(`Form` 是完整词) |
||||
|
- `provinceCode` → `province_code` ✅ |
||||
|
|
||||
|
**修复模板**: |
||||
|
|
||||
|
```java |
||||
|
@Column(name = "party_a_clear", columnDefinition = "tinyint not null default 0 comment '甲方是否明确'") |
||||
|
private Integer partyAClear = 0; |
||||
|
``` |
||||
|
|
||||
|
**为什么不换命名策略**:换策略会影响全部已建对的列(几十列),代价远大于给个位数问题字段加 `@Column(name=...)`。 |
||||
|
|
||||
|
**为什么线上很久才暴露**:`ddl-auto: update` 只加列不改列。老字段可能长期只走 SELECT(`ResultMap` 兜住)不写入,直到某天走 INSERT/UPDATE 才炸。**新加 Java 字段时**如果撞规则,第一次持久化就会报 `Unknown column`。 |
||||
|
|
||||
|
**新增字段检查清单**(写完 entity、跑起来之前): |
||||
|
|
||||
|
1. 字段名里有没有孤立单大写字母?没有 → 直接过。 |
||||
|
2. 有 → 加 `@Column(name = "snake_case_name", columnDefinition = "...")`。 |
||||
|
3. `ddl-auto: update` 环境下,如果表已经存在且字段名撞过坑,需要一条 `ALTER TABLE t CHANGE 旧列名 新列名 类型 ...;` 手工迁移,Hibernate 不会自动改名。 |
||||
@ -0,0 +1 @@ |
|||||
|
`archive_status` 单字段(有效 1 / 已归档 2),正交于归属与阶段(D19 去掉「已被合并」态,合并 Out-of-scope,A4-6 不做)。**已归档 = 删除语义(软删)**:默认排除于列表筛选、加 `archive_status` 筛选可查,可恢复(恢复回有效)。仅销售负责人可归档。**§5.3 拍板 A(一期只做归档)**:**不提供任何前端「删除客户」入口**——系统级 `deleted` 软删标志仅在合并时由系统置 1,不开放手动删除、无前端删除按钮;DB 不做物理删除。归档与合并是仅有的两种"移除"用户动作,且归档可恢复、合并本体 Out-of-scope。 |
||||
@ -0,0 +1,3 @@ |
|||||
|
总览/我的客户主列表默认只出 `archive_status=1`。票 10 提醒排除条件同步收敛为「公海 + 已归档」。**§5.3 拍板 A(20260902,一期只做归档)**:**不提供任何前端「删除客户」入口**——用户侧只有归档(软删可恢复)+ 合并(源客户系统软删,且合并本体 Out-of-scope);`deleted` 标志仅系统在合并时置 1,不开放手动删除、无前端删除按钮,DB 不做物理删除。详见 `issues/03`。 |
||||
|
|
||||
|
操作日志 `customer_oplog` 字段级(对称商机 oplog 范式,「把 {字段} 从 {旧} 修改为 {新}」);**§5.5 拍板 A(20260902)**:`customer_oplog` **无限期保留**——审计日志不设保留期/清理/冷热分离(原型 L250「日志生成后不可修改或删除」= append-only 审计)。 |
||||
@ -0,0 +1,2 @@ |
|||||
|
eclipse.preferences.version=1 |
||||
|
encoding/<project>=UTF-8 |
||||
@ -0,0 +1,4 @@ |
|||||
|
activeProfiles= |
||||
|
eclipse.preferences.version=1 |
||||
|
resolveWorkspaceProjects=true |
||||
|
version=1 |
||||
@ -0,0 +1,57 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<classpath> |
||||
|
<classpathentry kind="src" output="target/classes" path="src/main/java"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="src" output="target/test-classes" path="src/test/java"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="test" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="test" value="true"/> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="src" path="target/generated-sources/annotations"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="ignore_optional_problems" value="true"/> |
||||
|
<attribute name="m2e-apt" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="ignore_optional_problems" value="true"/> |
||||
|
<attribute name="m2e-apt" value="true"/> |
||||
|
<attribute name="test" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="output" path="target/classes"/> |
||||
|
</classpath> |
||||
@ -0,0 +1,157 @@ |
|||||
|
<factorypath> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-web/3.3.5/spring-boot-starter-web-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter/3.3.5/spring-boot-starter-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot/3.3.5/spring-boot-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-logging/3.3.5/spring-boot-starter-logging-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.11/logback-classic-1.5.11.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-core/1.5.11/logback-core-1.5.11.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-to-slf4j/2.23.1/log4j-to-slf4j-2.23.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/jul-to-slf4j/2.0.16/jul-to-slf4j-2.0.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-json/3.3.5/spring-boot-starter-json-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.17.2/jackson-datatype-jdk8-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.17.2/jackson-datatype-jsr310-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/module/jackson-module-parameter-names/2.17.2/jackson-module-parameter-names-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-tomcat/3.3.5/spring-boot-starter-tomcat-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-core/10.1.31/tomcat-embed-core-10.1.31.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-websocket/10.1.31/tomcat-embed-websocket-10.1.31.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-web/6.1.14/spring-web-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-webmvc/6.1.14/spring-webmvc-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-validation/3.3.5/spring-boot-starter-validation-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-el/10.1.31/tomcat-embed-el-10.1.31.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/validator/hibernate-validator/8.0.1.Final/hibernate-validator-8.0.1.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jboss/logging/jboss-logging/3.5.3.Final/jboss-logging-3.5.3.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/classmate/1.7.0/classmate-1.7.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-spring-boot3-starter/3.5.7/mybatis-plus-spring-boot3-starter-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus/3.5.7/mybatis-plus-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-core/3.5.7/mybatis-plus-core-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-annotation/3.5.7/mybatis-plus-annotation-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-extension/3.5.7/mybatis-plus-extension-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/mybatis/mybatis/3.5.16/mybatis-3.5.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/jsqlparser/jsqlparser/4.9/jsqlparser-4.9.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-spring-boot-autoconfigure/3.5.7/mybatis-plus-spring-boot-autoconfigure-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-autoconfigure/3.3.5/spring-boot-autoconfigure-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-jdbc/3.3.5/spring-boot-starter-jdbc-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/zaxxer/HikariCP/5.1.0/HikariCP-5.1.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jdbc/6.1.14/spring-jdbc-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-data-jpa/3.3.5/spring-boot-starter-data-jpa-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-aop/3.3.5/spring-boot-starter-aop-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/aspectj/aspectjweaver/1.9.22.1/aspectjweaver-1.9.22.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/orm/hibernate-core/6.5.3.Final/hibernate-core-6.5.3.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/persistence/jakarta.persistence-api/3.1.0/jakarta.persistence-api-3.1.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/transaction/jakarta.transaction-api/2.0.1/jakarta.transaction-api-2.0.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/common/hibernate-commons-annotations/6.0.6.Final/hibernate-commons-annotations-6.0.6.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/smallrye/jandex/3.1.2/jandex-3.1.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/net/bytebuddy/byte-buddy/1.14.19/byte-buddy-1.14.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/xml/bind/jakarta.xml.bind-api/4.0.2/jakarta.xml.bind-api-4.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/activation/jakarta.activation-api/2.1.3/jakarta.activation-api-2.1.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-runtime/4.0.5/jaxb-runtime-4.0.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-core/4.0.5/jaxb-core-4.0.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/angus/angus-activation/2.0.2/angus-activation-2.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/txw2/4.0.5/txw2-4.0.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/sun/istack/istack-commons-runtime/4.1.2/istack-commons-runtime-4.1.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.0/antlr4-runtime-4.13.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-jpa/3.3.5/spring-data-jpa-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-commons/3.3.5/spring-data-commons-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-orm/6.1.14/spring-orm-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-tx/6.1.14/spring-tx-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aspects/6.1.14/spring-aspects-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-data-redis/3.3.5/spring-boot-starter-data-redis-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/lettuce/lettuce-core/6.3.2.RELEASE/lettuce-core-6.3.2.RELEASE.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.114.Final/netty-common-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.114.Final/netty-handler-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.114.Final/netty-resolver-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.114.Final/netty-buffer-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.114.Final/netty-transport-native-unix-common-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.114.Final/netty-codec-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.114.Final/netty-transport-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/projectreactor/reactor-core/3.6.11/reactor-core-3.6.11.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-redis/3.3.5/spring-data-redis-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-keyvalue/3.3.5/spring-data-keyvalue-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-oxm/6.1.14/spring-oxm-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-context-support/6.1.14/spring-context-support-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/security/spring-security-core/6.3.4/spring-security-core-6.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/security/spring-security-crypto/6.3.4/spring-security-crypto-6.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aop/6.1.14/spring-aop-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-beans/6.1.14/spring-beans-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-context/6.1.14/spring-context-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-core/6.1.14/spring-core-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jcl/6.1.14/spring-jcl-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-expression/6.1.14/spring-expression-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-observation/1.13.6/micrometer-observation-1.13.6.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-commons/1.13.6/micrometer-commons-1.13.6.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/xiaoymin/knife4j-openapi3-jakarta-spring-boot-starter/4.5.0/knife4j-openapi3-jakarta-spring-boot-starter-4.5.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/xiaoymin/knife4j-core/4.5.0/knife4j-core-4.5.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/xiaoymin/knife4j-openapi3-ui/4.5.0/knife4j-openapi3-ui-4.5.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springdoc/springdoc-openapi-starter-webmvc-ui/2.3.0/springdoc-openapi-starter-webmvc-ui-2.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springdoc/springdoc-openapi-starter-webmvc-api/2.3.0/springdoc-openapi-starter-webmvc-api-2.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springdoc/springdoc-openapi-starter-common/2.3.0/springdoc-openapi-starter-common-2.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/swagger/core/v3/swagger-core-jakarta/2.2.19/swagger-core-jakarta-2.2.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/swagger/core/v3/swagger-annotations-jakarta/2.2.19/swagger-annotations-jakarta-2.2.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/swagger/core/v3/swagger-models-jakarta/2.2.19/swagger-models-jakarta-2.2.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.17.2/jackson-dataformat-yaml-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/webjars/swagger-ui/5.10.3/swagger-ui-5.10.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/cn/hutool/hutool-all/5.8.32/hutool-all-5.8.32.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/33.2.1-jre/guava-33.2.1-jre.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.2/failureaccess-1.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/3.42.0/checker-qual-3.42.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.26.1/error_prone_annotations-2.26.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/3.0.0/j2objc-annotations-3.0.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/alibaba/easyexcel/4.0.3/easyexcel-4.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/alibaba/easyexcel-core/4.0.3/easyexcel-core-4.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/alibaba/easyexcel-support/3.3.4/easyexcel-support-3.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/poi/poi/5.2.5/poi-5.2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/zaxxer/SparseBitSet/1.3/SparseBitSet-1.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-api/2.23.1/log4j-api-2.23.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/poi/poi-ooxml/5.2.5/poi-ooxml-5.2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/poi/poi-ooxml-lite/5.2.5/poi-ooxml-lite-5.2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/xmlbeans/xmlbeans/5.2.0/xmlbeans-5.2.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/virtuald/curvesapi/1.08/curvesapi-1.08.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.11.0/commons-csv-1.11.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/ehcache/ehcache/3.10.8/ehcache-3.10.8.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/javax/cache/cache-api/1.1.1/cache-api-1.1.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.16/slf4j-api-2.0.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/validation/jakarta.validation-api/3.0.2/jakarta.validation-api-3.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-security/3.3.5/spring-boot-starter-security-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/security/spring-security-config/6.3.4/spring-security-config-6.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/security/spring-security-web/6.3.4/spring-security-web-6.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/tingyugetc520/dt-java/0.1.2/dt-java-0.1.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okhttp3/okhttp/4.12.0/okhttp-4.12.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okio/okio/3.6.0/okio-3.6.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okio/okio-jvm/3.6.0/okio-jvm-3.6.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib-common/1.9.25/kotlin-stdlib-common-1.9.25.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.9.25/kotlin-stdlib-jdk8-1.9.25.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib/1.9.25/kotlin-stdlib-1.9.25.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/annotations/13.0/annotations-13.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.9.25/kotlin-stdlib-jdk7-1.9.25.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/httpclient/4.5/httpclient-4.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/httpmime/4.5/httpmime-4.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.5/commons-io-2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/gson/gson/2.10.1/gson-2.10.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/ben-manes/caffeine/caffeine/3.1.8/caffeine-3.1.8.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/mybatis/mybatis-spring/3.0.3/mybatis-spring-3.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/minio/minio/8.5.17/minio-8.5.17.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/carrotsearch/thirdparty/simple-xml-safe/2.7.1/simple-xml-safe-2.7.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.17.2/jackson-annotations-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.17.2/jackson-core-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.17.2/jackson-databind-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.78.1/bcprov-jdk18on-1.78.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-compress/1.27.1/commons-compress-1.27.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/xerial/snappy/snappy-java/1.1.10.7/snappy-java-1.1.10.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/pdfbox/pdfbox/3.0.3/pdfbox-3.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/pdfbox/pdfbox-io/3.0.3/pdfbox-io-3.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/pdfbox/fontbox/3.0.3/fontbox-3.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/commons-logging/commons-logging/1.3.3/commons-logging-1.3.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/projectlombok/lombok/1.18.34/lombok-1.18.34.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/mysql/mysql-connector-j/8.3.0/mysql-connector-j-8.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
</factorypath> |
||||
@ -0,0 +1,34 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<projectDescription> |
||||
|
<name>crm-app</name> |
||||
|
<comment></comment> |
||||
|
<projects> |
||||
|
</projects> |
||||
|
<buildSpec> |
||||
|
<buildCommand> |
||||
|
<name>org.eclipse.jdt.core.javabuilder</name> |
||||
|
<arguments> |
||||
|
</arguments> |
||||
|
</buildCommand> |
||||
|
<buildCommand> |
||||
|
<name>org.eclipse.m2e.core.maven2Builder</name> |
||||
|
<arguments> |
||||
|
</arguments> |
||||
|
</buildCommand> |
||||
|
</buildSpec> |
||||
|
<natures> |
||||
|
<nature>org.eclipse.jdt.core.javanature</nature> |
||||
|
<nature>org.eclipse.m2e.core.maven2Nature</nature> |
||||
|
</natures> |
||||
|
<filteredResources> |
||||
|
<filter> |
||||
|
<id>1788308974709</id> |
||||
|
<name></name> |
||||
|
<type>30</type> |
||||
|
<matcher> |
||||
|
<id>org.eclipse.core.resources.regexFilterMatcher</id> |
||||
|
<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments> |
||||
|
</matcher> |
||||
|
</filter> |
||||
|
</filteredResources> |
||||
|
</projectDescription> |
||||
@ -0,0 +1,4 @@ |
|||||
|
eclipse.preferences.version=1 |
||||
|
encoding//src/main/java=UTF-8 |
||||
|
encoding//src/main/resources=UTF-8 |
||||
|
encoding/<project>=UTF-8 |
||||
@ -0,0 +1,4 @@ |
|||||
|
eclipse.preferences.version=1 |
||||
|
org.eclipse.jdt.apt.aptEnabled=true |
||||
|
org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations |
||||
|
org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations |
||||
@ -0,0 +1,20 @@ |
|||||
|
eclipse.preferences.version=1 |
||||
|
org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore |
||||
|
org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull |
||||
|
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault |
||||
|
org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable |
||||
|
org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled |
||||
|
org.eclipse.jdt.core.compiler.codegen.methodParameters=generate |
||||
|
org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 |
||||
|
org.eclipse.jdt.core.compiler.compliance=17 |
||||
|
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled |
||||
|
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.nullReference=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore |
||||
|
org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled |
||||
|
org.eclipse.jdt.core.compiler.processAnnotations=enabled |
||||
|
org.eclipse.jdt.core.compiler.release=enabled |
||||
|
org.eclipse.jdt.core.compiler.source=17 |
||||
@ -0,0 +1,4 @@ |
|||||
|
activeProfiles= |
||||
|
eclipse.preferences.version=1 |
||||
|
resolveWorkspaceProjects=true |
||||
|
version=1 |
||||
@ -0,0 +1,57 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<classpath> |
||||
|
<classpathentry kind="src" output="target/classes" path="src/main/java"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="src" output="target/test-classes" path="src/test/java"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="test" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="test" value="true"/> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="src" path="target/generated-sources/annotations"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="ignore_optional_problems" value="true"/> |
||||
|
<attribute name="m2e-apt" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="ignore_optional_problems" value="true"/> |
||||
|
<attribute name="m2e-apt" value="true"/> |
||||
|
<attribute name="test" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="output" path="target/classes"/> |
||||
|
</classpath> |
||||
@ -0,0 +1,157 @@ |
|||||
|
<factorypath> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-web/3.3.5/spring-boot-starter-web-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-json/3.3.5/spring-boot-starter-json-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.17.2/jackson-datatype-jdk8-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.17.2/jackson-datatype-jsr310-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/module/jackson-module-parameter-names/2.17.2/jackson-module-parameter-names-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-tomcat/3.3.5/spring-boot-starter-tomcat-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-core/10.1.31/tomcat-embed-core-10.1.31.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-websocket/10.1.31/tomcat-embed-websocket-10.1.31.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-web/6.1.14/spring-web-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-webmvc/6.1.14/spring-webmvc-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-validation/3.3.5/spring-boot-starter-validation-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-el/10.1.31/tomcat-embed-el-10.1.31.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/validator/hibernate-validator/8.0.1.Final/hibernate-validator-8.0.1.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jboss/logging/jboss-logging/3.5.3.Final/jboss-logging-3.5.3.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/classmate/1.7.0/classmate-1.7.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-spring-boot3-starter/3.5.7/mybatis-plus-spring-boot3-starter-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus/3.5.7/mybatis-plus-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-core/3.5.7/mybatis-plus-core-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-annotation/3.5.7/mybatis-plus-annotation-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-extension/3.5.7/mybatis-plus-extension-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/mybatis/mybatis/3.5.16/mybatis-3.5.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/jsqlparser/jsqlparser/4.9/jsqlparser-4.9.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-spring-boot-autoconfigure/3.5.7/mybatis-plus-spring-boot-autoconfigure-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-autoconfigure/3.3.5/spring-boot-autoconfigure-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-jdbc/3.3.5/spring-boot-starter-jdbc-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/zaxxer/HikariCP/5.1.0/HikariCP-5.1.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jdbc/6.1.14/spring-jdbc-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-data-jpa/3.3.5/spring-boot-starter-data-jpa-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-aop/3.3.5/spring-boot-starter-aop-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/aspectj/aspectjweaver/1.9.22.1/aspectjweaver-1.9.22.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/orm/hibernate-core/6.5.3.Final/hibernate-core-6.5.3.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/persistence/jakarta.persistence-api/3.1.0/jakarta.persistence-api-3.1.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/transaction/jakarta.transaction-api/2.0.1/jakarta.transaction-api-2.0.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/common/hibernate-commons-annotations/6.0.6.Final/hibernate-commons-annotations-6.0.6.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/smallrye/jandex/3.1.2/jandex-3.1.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-runtime/4.0.5/jaxb-runtime-4.0.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-core/4.0.5/jaxb-core-4.0.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/angus/angus-activation/2.0.2/angus-activation-2.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/txw2/4.0.5/txw2-4.0.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/sun/istack/istack-commons-runtime/4.1.2/istack-commons-runtime-4.1.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.0/antlr4-runtime-4.13.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-jpa/3.3.5/spring-data-jpa-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-commons/3.3.5/spring-data-commons-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-orm/6.1.14/spring-orm-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-tx/6.1.14/spring-tx-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aspects/6.1.14/spring-aspects-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-data-redis/3.3.5/spring-boot-starter-data-redis-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/lettuce/lettuce-core/6.3.2.RELEASE/lettuce-core-6.3.2.RELEASE.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.114.Final/netty-common-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.114.Final/netty-handler-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.114.Final/netty-resolver-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.114.Final/netty-buffer-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.114.Final/netty-transport-native-unix-common-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.114.Final/netty-codec-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.114.Final/netty-transport-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/projectreactor/reactor-core/3.6.11/reactor-core-3.6.11.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-redis/3.3.5/spring-data-redis-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-keyvalue/3.3.5/spring-data-keyvalue-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-oxm/6.1.14/spring-oxm-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-context-support/6.1.14/spring-context-support-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/security/spring-security-core/6.3.4/spring-security-core-6.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/security/spring-security-crypto/6.3.4/spring-security-crypto-6.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-beans/6.1.14/spring-beans-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-context/6.1.14/spring-context-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-expression/6.1.14/spring-expression-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-observation/1.13.6/micrometer-observation-1.13.6.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-commons/1.13.6/micrometer-commons-1.13.6.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/xiaoymin/knife4j-openapi3-jakarta-spring-boot-starter/4.5.0/knife4j-openapi3-jakarta-spring-boot-starter-4.5.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/xiaoymin/knife4j-core/4.5.0/knife4j-core-4.5.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/xiaoymin/knife4j-openapi3-ui/4.5.0/knife4j-openapi3-ui-4.5.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springdoc/springdoc-openapi-starter-webmvc-ui/2.3.0/springdoc-openapi-starter-webmvc-ui-2.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springdoc/springdoc-openapi-starter-webmvc-api/2.3.0/springdoc-openapi-starter-webmvc-api-2.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springdoc/springdoc-openapi-starter-common/2.3.0/springdoc-openapi-starter-common-2.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/swagger/core/v3/swagger-core-jakarta/2.2.19/swagger-core-jakarta-2.2.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/swagger/core/v3/swagger-annotations-jakarta/2.2.19/swagger-annotations-jakarta-2.2.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/swagger/core/v3/swagger-models-jakarta/2.2.19/swagger-models-jakarta-2.2.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.17.2/jackson-dataformat-yaml-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/webjars/swagger-ui/5.10.3/swagger-ui-5.10.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/cn/hutool/hutool-all/5.8.32/hutool-all-5.8.32.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/33.2.1-jre/guava-33.2.1-jre.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.2/failureaccess-1.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/3.0.0/j2objc-annotations-3.0.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/alibaba/easyexcel/4.0.3/easyexcel-4.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/alibaba/easyexcel-core/4.0.3/easyexcel-core-4.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/alibaba/easyexcel-support/3.3.4/easyexcel-support-3.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/poi/poi/5.2.5/poi-5.2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/zaxxer/SparseBitSet/1.3/SparseBitSet-1.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-api/2.23.1/log4j-api-2.23.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/poi/poi-ooxml/5.2.5/poi-ooxml-5.2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/poi/poi-ooxml-lite/5.2.5/poi-ooxml-lite-5.2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/xmlbeans/xmlbeans/5.2.0/xmlbeans-5.2.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/virtuald/curvesapi/1.08/curvesapi-1.08.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.11.0/commons-csv-1.11.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/ehcache/ehcache/3.10.8/ehcache-3.10.8.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/javax/cache/cache-api/1.1.1/cache-api-1.1.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/validation/jakarta.validation-api/3.0.2/jakarta.validation-api-3.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/minio/minio/8.5.17/minio-8.5.17.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/carrotsearch/thirdparty/simple-xml-safe/2.7.1/simple-xml-safe-2.7.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.17.2/jackson-annotations-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.17.2/jackson-core-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.17.2/jackson-databind-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.78.1/bcprov-jdk18on-1.78.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-compress/1.27.1/commons-compress-1.27.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/xerial/snappy/snappy-java/1.1.10.7/snappy-java-1.1.10.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/pdfbox/pdfbox/3.0.3/pdfbox-3.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/pdfbox/pdfbox-io/3.0.3/pdfbox-io-3.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/pdfbox/fontbox/3.0.3/fontbox-3.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/commons-logging/commons-logging/1.3.3/commons-logging-1.3.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-security/3.3.5/spring-boot-starter-security-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter/3.3.5/spring-boot-starter-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot/3.3.5/spring-boot-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-logging/3.3.5/spring-boot-starter-logging-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.11/logback-classic-1.5.11.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-core/1.5.11/logback-core-1.5.11.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-to-slf4j/2.23.1/log4j-to-slf4j-2.23.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/jul-to-slf4j/2.0.16/jul-to-slf4j-2.0.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aop/6.1.14/spring-aop-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/security/spring-security-config/6.3.4/spring-security-config-6.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/security/spring-security-web/6.3.4/spring-security-web-6.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/tingyugetc520/dt-java/0.1.2/dt-java-0.1.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okhttp3/okhttp/4.12.0/okhttp-4.12.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okio/okio/3.6.0/okio-3.6.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okio/okio-jvm/3.6.0/okio-jvm-3.6.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib-common/1.9.25/kotlin-stdlib-common-1.9.25.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.9.25/kotlin-stdlib-jdk8-1.9.25.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib/1.9.25/kotlin-stdlib-1.9.25.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/annotations/13.0/annotations-13.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.9.25/kotlin-stdlib-jdk7-1.9.25.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/httpclient/4.5/httpclient-4.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/httpmime/4.5/httpmime-4.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.5/commons-io-2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.16/slf4j-api-2.0.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/gson/gson/2.10.1/gson-2.10.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/mysql/mysql-connector-j/8.3.0/mysql-connector-j-8.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/projectlombok/lombok/1.18.48/lombok-1.18.48.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/xml/bind/jakarta.xml.bind-api/4.0.2/jakarta.xml.bind-api-4.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/activation/jakarta.activation-api/2.1.3/jakarta.activation-api-2.1.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/net/bytebuddy/byte-buddy/1.14.19/byte-buddy-1.14.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-core/6.1.14/spring-core-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jcl/6.1.14/spring-jcl-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/ben-manes/caffeine/caffeine/3.1.8/caffeine-3.1.8.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/3.37.0/checker-qual-3.37.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.21.1/error_prone_annotations-2.21.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/mybatis/mybatis-spring/3.0.3/mybatis-spring-3.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
</factorypath> |
||||
@ -0,0 +1,34 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<projectDescription> |
||||
|
<name>crm-auth</name> |
||||
|
<comment></comment> |
||||
|
<projects> |
||||
|
</projects> |
||||
|
<buildSpec> |
||||
|
<buildCommand> |
||||
|
<name>org.eclipse.jdt.core.javabuilder</name> |
||||
|
<arguments> |
||||
|
</arguments> |
||||
|
</buildCommand> |
||||
|
<buildCommand> |
||||
|
<name>org.eclipse.m2e.core.maven2Builder</name> |
||||
|
<arguments> |
||||
|
</arguments> |
||||
|
</buildCommand> |
||||
|
</buildSpec> |
||||
|
<natures> |
||||
|
<nature>org.eclipse.jdt.core.javanature</nature> |
||||
|
<nature>org.eclipse.m2e.core.maven2Nature</nature> |
||||
|
</natures> |
||||
|
<filteredResources> |
||||
|
<filter> |
||||
|
<id>1788308974768</id> |
||||
|
<name></name> |
||||
|
<type>30</type> |
||||
|
<matcher> |
||||
|
<id>org.eclipse.core.resources.regexFilterMatcher</id> |
||||
|
<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments> |
||||
|
</matcher> |
||||
|
</filter> |
||||
|
</filteredResources> |
||||
|
</projectDescription> |
||||
@ -0,0 +1,5 @@ |
|||||
|
eclipse.preferences.version=1 |
||||
|
encoding//src/main/java=UTF-8 |
||||
|
encoding//src/main/resources=UTF-8 |
||||
|
encoding//src/test/java=UTF-8 |
||||
|
encoding/<project>=UTF-8 |
||||
@ -0,0 +1,4 @@ |
|||||
|
eclipse.preferences.version=1 |
||||
|
org.eclipse.jdt.apt.aptEnabled=true |
||||
|
org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations |
||||
|
org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations |
||||
@ -0,0 +1,20 @@ |
|||||
|
eclipse.preferences.version=1 |
||||
|
org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore |
||||
|
org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull |
||||
|
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault |
||||
|
org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable |
||||
|
org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled |
||||
|
org.eclipse.jdt.core.compiler.codegen.methodParameters=generate |
||||
|
org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 |
||||
|
org.eclipse.jdt.core.compiler.compliance=17 |
||||
|
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled |
||||
|
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.nullReference=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore |
||||
|
org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled |
||||
|
org.eclipse.jdt.core.compiler.processAnnotations=enabled |
||||
|
org.eclipse.jdt.core.compiler.release=enabled |
||||
|
org.eclipse.jdt.core.compiler.source=17 |
||||
@ -0,0 +1,4 @@ |
|||||
|
activeProfiles= |
||||
|
eclipse.preferences.version=1 |
||||
|
resolveWorkspaceProjects=true |
||||
|
version=1 |
||||
@ -0,0 +1,57 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<classpath> |
||||
|
<classpathentry kind="src" output="target/classes" path="src/main/java"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="src" output="target/test-classes" path="src/test/java"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="test" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="test" value="true"/> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="src" path="target/generated-sources/annotations"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="ignore_optional_problems" value="true"/> |
||||
|
<attribute name="m2e-apt" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="ignore_optional_problems" value="true"/> |
||||
|
<attribute name="m2e-apt" value="true"/> |
||||
|
<attribute name="test" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="output" path="target/classes"/> |
||||
|
</classpath> |
||||
@ -0,0 +1,131 @@ |
|||||
|
<factorypath> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-web/3.3.5/spring-boot-starter-web-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter/3.3.5/spring-boot-starter-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot/3.3.5/spring-boot-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-logging/3.3.5/spring-boot-starter-logging-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.11/logback-classic-1.5.11.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-core/1.5.11/logback-core-1.5.11.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-to-slf4j/2.23.1/log4j-to-slf4j-2.23.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/jul-to-slf4j/2.0.16/jul-to-slf4j-2.0.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-json/3.3.5/spring-boot-starter-json-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.17.2/jackson-databind-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.17.2/jackson-annotations-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.17.2/jackson-core-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.17.2/jackson-datatype-jdk8-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.17.2/jackson-datatype-jsr310-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/module/jackson-module-parameter-names/2.17.2/jackson-module-parameter-names-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-tomcat/3.3.5/spring-boot-starter-tomcat-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-core/10.1.31/tomcat-embed-core-10.1.31.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-websocket/10.1.31/tomcat-embed-websocket-10.1.31.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-web/6.1.14/spring-web-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-webmvc/6.1.14/spring-webmvc-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-validation/3.3.5/spring-boot-starter-validation-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-el/10.1.31/tomcat-embed-el-10.1.31.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/validator/hibernate-validator/8.0.1.Final/hibernate-validator-8.0.1.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jboss/logging/jboss-logging/3.5.3.Final/jboss-logging-3.5.3.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/classmate/1.7.0/classmate-1.7.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-spring-boot3-starter/3.5.7/mybatis-plus-spring-boot3-starter-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus/3.5.7/mybatis-plus-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-core/3.5.7/mybatis-plus-core-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-annotation/3.5.7/mybatis-plus-annotation-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-extension/3.5.7/mybatis-plus-extension-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/mybatis/mybatis/3.5.16/mybatis-3.5.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/jsqlparser/jsqlparser/4.9/jsqlparser-4.9.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/mybatis/mybatis-spring/3.0.3/mybatis-spring-3.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-spring-boot-autoconfigure/3.5.7/mybatis-plus-spring-boot-autoconfigure-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-autoconfigure/3.3.5/spring-boot-autoconfigure-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-jdbc/3.3.5/spring-boot-starter-jdbc-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/zaxxer/HikariCP/5.1.0/HikariCP-5.1.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jdbc/6.1.14/spring-jdbc-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-data-jpa/3.3.5/spring-boot-starter-data-jpa-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-aop/3.3.5/spring-boot-starter-aop-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/aspectj/aspectjweaver/1.9.22.1/aspectjweaver-1.9.22.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/orm/hibernate-core/6.5.3.Final/hibernate-core-6.5.3.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/persistence/jakarta.persistence-api/3.1.0/jakarta.persistence-api-3.1.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/transaction/jakarta.transaction-api/2.0.1/jakarta.transaction-api-2.0.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/common/hibernate-commons-annotations/6.0.6.Final/hibernate-commons-annotations-6.0.6.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/smallrye/jandex/3.1.2/jandex-3.1.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/net/bytebuddy/byte-buddy/1.14.19/byte-buddy-1.14.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-runtime/4.0.5/jaxb-runtime-4.0.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-core/4.0.5/jaxb-core-4.0.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/angus/angus-activation/2.0.2/angus-activation-2.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/txw2/4.0.5/txw2-4.0.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/sun/istack/istack-commons-runtime/4.1.2/istack-commons-runtime-4.1.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.0/antlr4-runtime-4.13.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-jpa/3.3.5/spring-data-jpa-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-commons/3.3.5/spring-data-commons-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-orm/6.1.14/spring-orm-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-tx/6.1.14/spring-tx-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aspects/6.1.14/spring-aspects-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-data-redis/3.3.5/spring-boot-starter-data-redis-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/lettuce/lettuce-core/6.3.2.RELEASE/lettuce-core-6.3.2.RELEASE.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.114.Final/netty-common-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.114.Final/netty-handler-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.114.Final/netty-resolver-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.114.Final/netty-buffer-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.114.Final/netty-transport-native-unix-common-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.114.Final/netty-codec-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.114.Final/netty-transport-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/projectreactor/reactor-core/3.6.11/reactor-core-3.6.11.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-redis/3.3.5/spring-data-redis-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-keyvalue/3.3.5/spring-data-keyvalue-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-oxm/6.1.14/spring-oxm-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-context-support/6.1.14/spring-context-support-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/security/spring-security-core/6.3.4/spring-security-core-6.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/security/spring-security-crypto/6.3.4/spring-security-crypto-6.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aop/6.1.14/spring-aop-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-beans/6.1.14/spring-beans-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-context/6.1.14/spring-context-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-core/6.1.14/spring-core-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jcl/6.1.14/spring-jcl-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-expression/6.1.14/spring-expression-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-observation/1.13.6/micrometer-observation-1.13.6.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-commons/1.13.6/micrometer-commons-1.13.6.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/xiaoymin/knife4j-openapi3-jakarta-spring-boot-starter/4.5.0/knife4j-openapi3-jakarta-spring-boot-starter-4.5.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/xiaoymin/knife4j-core/4.5.0/knife4j-core-4.5.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/xiaoymin/knife4j-openapi3-ui/4.5.0/knife4j-openapi3-ui-4.5.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springdoc/springdoc-openapi-starter-webmvc-ui/2.3.0/springdoc-openapi-starter-webmvc-ui-2.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springdoc/springdoc-openapi-starter-webmvc-api/2.3.0/springdoc-openapi-starter-webmvc-api-2.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springdoc/springdoc-openapi-starter-common/2.3.0/springdoc-openapi-starter-common-2.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/swagger/core/v3/swagger-core-jakarta/2.2.19/swagger-core-jakarta-2.2.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/swagger/core/v3/swagger-annotations-jakarta/2.2.19/swagger-annotations-jakarta-2.2.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/swagger/core/v3/swagger-models-jakarta/2.2.19/swagger-models-jakarta-2.2.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.17.2/jackson-dataformat-yaml-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/webjars/swagger-ui/5.10.3/swagger-ui-5.10.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/cn/hutool/hutool-all/5.8.32/hutool-all-5.8.32.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/33.2.1-jre/guava-33.2.1-jre.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.2/failureaccess-1.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/3.42.0/checker-qual-3.42.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.26.1/error_prone_annotations-2.26.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/3.0.0/j2objc-annotations-3.0.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/alibaba/easyexcel/4.0.3/easyexcel-4.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/alibaba/easyexcel-core/4.0.3/easyexcel-core-4.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/alibaba/easyexcel-support/3.3.4/easyexcel-support-3.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/poi/poi/5.2.5/poi-5.2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.0/commons-io-2.15.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/zaxxer/SparseBitSet/1.3/SparseBitSet-1.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-api/2.23.1/log4j-api-2.23.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/poi/poi-ooxml/5.2.5/poi-ooxml-5.2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/poi/poi-ooxml-lite/5.2.5/poi-ooxml-lite-5.2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/xmlbeans/xmlbeans/5.2.0/xmlbeans-5.2.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-compress/1.25.0/commons-compress-1.25.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/virtuald/curvesapi/1.08/curvesapi-1.08.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.11.0/commons-csv-1.11.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/ehcache/ehcache/3.10.8/ehcache-3.10.8.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/javax/cache/cache-api/1.1.1/cache-api-1.1.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.16/slf4j-api-2.0.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/projectlombok/lombok/1.18.34/lombok-1.18.34.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/xml/bind/jakarta.xml.bind-api/4.0.2/jakarta.xml.bind-api-4.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/activation/jakarta.activation-api/2.1.3/jakarta.activation-api-2.1.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/validation/jakarta.validation-api/3.0.2/jakarta.validation-api-3.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
</factorypath> |
||||
@ -0,0 +1,34 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<projectDescription> |
||||
|
<name>crm-base</name> |
||||
|
<comment></comment> |
||||
|
<projects> |
||||
|
</projects> |
||||
|
<buildSpec> |
||||
|
<buildCommand> |
||||
|
<name>org.eclipse.jdt.core.javabuilder</name> |
||||
|
<arguments> |
||||
|
</arguments> |
||||
|
</buildCommand> |
||||
|
<buildCommand> |
||||
|
<name>org.eclipse.m2e.core.maven2Builder</name> |
||||
|
<arguments> |
||||
|
</arguments> |
||||
|
</buildCommand> |
||||
|
</buildSpec> |
||||
|
<natures> |
||||
|
<nature>org.eclipse.jdt.core.javanature</nature> |
||||
|
<nature>org.eclipse.m2e.core.maven2Nature</nature> |
||||
|
</natures> |
||||
|
<filteredResources> |
||||
|
<filter> |
||||
|
<id>1788308974777</id> |
||||
|
<name></name> |
||||
|
<type>30</type> |
||||
|
<matcher> |
||||
|
<id>org.eclipse.core.resources.regexFilterMatcher</id> |
||||
|
<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments> |
||||
|
</matcher> |
||||
|
</filter> |
||||
|
</filteredResources> |
||||
|
</projectDescription> |
||||
@ -0,0 +1,4 @@ |
|||||
|
eclipse.preferences.version=1 |
||||
|
encoding//src/main/java=UTF-8 |
||||
|
encoding//src/test/java=UTF-8 |
||||
|
encoding/<project>=UTF-8 |
||||
@ -0,0 +1,4 @@ |
|||||
|
eclipse.preferences.version=1 |
||||
|
org.eclipse.jdt.apt.aptEnabled=true |
||||
|
org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations |
||||
|
org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations |
||||
@ -0,0 +1,20 @@ |
|||||
|
eclipse.preferences.version=1 |
||||
|
org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore |
||||
|
org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull |
||||
|
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault |
||||
|
org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable |
||||
|
org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled |
||||
|
org.eclipse.jdt.core.compiler.codegen.methodParameters=generate |
||||
|
org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 |
||||
|
org.eclipse.jdt.core.compiler.compliance=17 |
||||
|
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled |
||||
|
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.nullReference=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore |
||||
|
org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled |
||||
|
org.eclipse.jdt.core.compiler.processAnnotations=enabled |
||||
|
org.eclipse.jdt.core.compiler.release=enabled |
||||
|
org.eclipse.jdt.core.compiler.source=17 |
||||
@ -0,0 +1,4 @@ |
|||||
|
activeProfiles= |
||||
|
eclipse.preferences.version=1 |
||||
|
resolveWorkspaceProjects=true |
||||
|
version=1 |
||||
@ -0,0 +1,57 @@ |
|||||
|
# 客户业务(crm-customer) |
||||
|
|
||||
|
客户的全生命周期业务域:客户实体与三阶段(潜在 / 重潜 / 已成交)、三个 workspace(客户总览 / 我的客户 / 客户公海)、新增 / 编辑 / 导入、联系人子实体、跟进记录与操作日志(`customer_oplog` **无限期保留**,审计日志不设清理/冷热分离,§5.5)、客户交割(离职/调岗批量换主),以及客户规则族「超期未跟进提醒」。依赖方向单向 `crm-opportunity → crm-customer`(商机读客户、建关联);`crm-customer → crm-rule → (crm-auth / crm-dict / crm-file)`;客户读「关联商机」走下游反查上游(同库单体阶段可接受,见 ADR-0029 循环依赖技术债)。访问控制走三机制模型,`@DataScope(module="customer", ownerColumn="owner_user_id", deptColumn="owner_dept_id")`。 |
||||
|
|
||||
|
## Language |
||||
|
|
||||
|
**客户**: |
||||
|
`crm-customer` 的核心聚合根。归属由 `owner_user_id`(销售负责人)+ `owner_dept_id`(销售部门快照)表达,owner 空 = 在客户公海;档案正交维度 `archive_status`(有效 / 已归档)独立于归属(D19 去掉「已被合并」,合并 Out-of-scope)。阶段字段 `customer_stage`(潜在 / 重潜 / 已成交)只前进不回退,由外部成功结果驱动。 |
||||
|
_Avoid_: 线索(转化前)、商机(下游)、联系人(子实体) |
||||
|
|
||||
|
**销售负责人**: |
||||
|
客户的 `owner_user_id`,当前唯一持有该客户的销售。客户「我的客户」视图的第一层过滤依据(负责人 = 当前用户);抛公海 / 交割 / 分配时变更。协同人可见客户但不视为负责人。 |
||||
|
_Avoid_: 领取人(线索术语)、创建人、持有者 |
||||
|
|
||||
|
**销售部门**: |
||||
|
客户的 `owner_dept_id`,负责人所在部门的快照,随负责人变更而更新(非全生命周期不变,区别于线索的 `dept_id`)。是数据范围过滤的部门维度。 |
||||
|
_Avoid_: 归属部门、池归属部门、owner_dept |
||||
|
|
||||
|
**协同人**: |
||||
|
客户团队中非负责人的成员。协同人可见该客户(进「我的客户」),但不得归档 / 合并。抛公海时清空协同人;交割时不自动恢复原协同人(保留原有其他协同人)。 |
||||
|
_Avoid_: 团队成员(泛指)、共享人 |
||||
|
|
||||
|
**客户阶段**: |
||||
|
`customer_stage` 单字段(潜在 1 / 重潜 2 / 已成交 3),**只前进不回退、不可手动改**,由外部成功结果驱动:潜在 →(任一方案卡**提交并报备成功**)→ 重潜 →(任一项目首次中标赢单)→ 已成交。**本期两个跃迁均 seam 化不自动触发**(D20 改票 B):报备成功链路本期不可达(不用「已提交」凑合,避免造出错误的重潜状态),A5 项目模块未建;`CustomerStagePort.promote` 契约/只前进 CAS/幂等 全部建好,等对应链路就绪再由其调用。**本期客户阶段实际只有「潜在」**。 |
||||
|
_Avoid_: 客户状态、归属状态、客户类型 |
||||
|
|
||||
|
**档案状态**: |
||||
|
`archive_status` 单字段(有效 1 / 已归档 2),正交于归属与阶段(D19 去掉「已被合并」态,合并 Out-of-scope,A4-6 不做)。**已归档 = 删除语义(软删)**:默认排除于列表筛选、加 `archive_status` 筛选可查,可恢复(恢复回有效)。仅销售负责人可归档。**§5.3 拍板 A(一期只做归档)**:**不提供任何前端「删除客户」入口**——系统级 `deleted` 软删标志仅在合并时由系统置 1,不开放手动删除、无前端删除按钮;DB 不做物理删除。归档与合并是仅有的两种"移除"用户动作,且归档可恢复、合并本体 Out-of-scope。 |
||||
|
_Avoid_: 删除、禁用、作废 |
||||
|
|
||||
|
**客户公海**: |
||||
|
`owner_user_id` 为空 且 `archive_status=有效` 的客户的**逻辑视图**(无独立池实体,对称商机公海)。进入公海 = 清 owner + 协同人;领取 = 当前用户成为 owner。有进行中商机 / 项目的客户不得抛公海(项目侧留 seam)。 |
||||
|
_Avoid_: 公海池实体(那是线索规则域概念)、池 |
||||
|
|
||||
|
**客户总览**: |
||||
|
管理视角 workspace,`@DataScope` 覆盖组织范围的未删除、未进入公海客户(含有效 / 已归档两态;默认只列 `archive_status=有效`,已归档走筛选)。管理职务本身不扩大「我的客户」数据范围。 |
||||
|
_Avoid_: 全部客户、全局列表 |
||||
|
|
||||
|
**我的客户**: |
||||
|
销售视角 workspace,当前用户为销售负责人**或协同人** 且 `archive_status=有效` 且非公海的客户。已归档客户 = `archive_status=已归档` 的客户(负责人为当前用户),列表加筛选展示、**不做独立子页/独立 tab**(D19:删除了「已被合并」态、「已归档」用筛选条件承载)。 |
||||
|
_Avoid_: 私海(那是线索术语) |
||||
|
|
||||
|
**联系人**: |
||||
|
`customer_contact` 子实体,每条必属一个客户(`customer_id` NOT NULL),无孤立联系人。无独立 ACL,权限继承所属客户。电话查重=可配置软提示(跟随 crm-rule 客户查重设置「联系电话」开关,不建电话唯一索引,D26)、同客户内电话不重复为表单级校验;职务先存文本名 + 可选标准职务 id/类别/层级占位(二级联动图谱留后续)。 |
||||
|
_Avoid_: 线索联系人、决策人(那是客户字段) |
||||
|
|
||||
|
**人脉关系单位**: |
||||
|
客户下的关系单位名标签集(如「XX 集团」),是**纯文本标签**,非关联到 CRM 客户实体。 |
||||
|
_Avoid_: 关联客户、子客户(父客户关联是另一字段) |
||||
|
|
||||
|
**客户交割**: |
||||
|
销售因员工离职 / 岗位调动 / 区域调整,把本人名下客户批量交给直属销售总监,再由总监分配给具体销售。两段式:发起交接(owner → 总监,整批原子)+ 客户分配(owner → 销售)。同步变更关联商机 / 项目负责人(项目侧留 seam)。只允许离职/调动/调整的销售本人发起。 |
||||
|
_Avoid_: 分配(那是公海/日常分配动作)、转交 |
||||
|
|
||||
|
**超期未跟进提醒**: |
||||
|
客户规则族唯一规则(crm-rule 全局单例配置)。客户 `last_valid_follow_time`(新建 = create_time,每次跟进刷新)距今超过首次触发天数(默认 30)触发首次提醒,之后每隔二次提醒间隔(默认 7)重复提醒。只落待发通知 `customer_pending_notice`,不直接发送(平台通知能力 spin-out)。公海 / 已归档客户不参与(「已被合并」态已随 D19 取消)。 |
||||
|
_Avoid_: 超时回收(那是线索/商机公海回收)、逾期 |
||||
@ -0,0 +1,57 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<classpath> |
||||
|
<classpathentry kind="src" output="target/classes" path="src/main/java"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="src" output="target/test-classes" path="src/test/java"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="test" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="test" value="true"/> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="src" path="target/generated-sources/annotations"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="ignore_optional_problems" value="true"/> |
||||
|
<attribute name="m2e-apt" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="ignore_optional_problems" value="true"/> |
||||
|
<attribute name="m2e-apt" value="true"/> |
||||
|
<attribute name="test" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="output" path="target/classes"/> |
||||
|
</classpath> |
||||
@ -0,0 +1,132 @@ |
|||||
|
<factorypath> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-web/3.3.5/spring-boot-starter-web-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-json/3.3.5/spring-boot-starter-json-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.17.2/jackson-databind-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.17.2/jackson-annotations-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.17.2/jackson-core-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.17.2/jackson-datatype-jdk8-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.17.2/jackson-datatype-jsr310-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/module/jackson-module-parameter-names/2.17.2/jackson-module-parameter-names-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-tomcat/3.3.5/spring-boot-starter-tomcat-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-core/10.1.31/tomcat-embed-core-10.1.31.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-websocket/10.1.31/tomcat-embed-websocket-10.1.31.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-web/6.1.14/spring-web-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-webmvc/6.1.14/spring-webmvc-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-validation/3.3.5/spring-boot-starter-validation-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-el/10.1.31/tomcat-embed-el-10.1.31.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/validator/hibernate-validator/8.0.1.Final/hibernate-validator-8.0.1.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jboss/logging/jboss-logging/3.5.3.Final/jboss-logging-3.5.3.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/classmate/1.7.0/classmate-1.7.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-spring-boot3-starter/3.5.7/mybatis-plus-spring-boot3-starter-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus/3.5.7/mybatis-plus-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-core/3.5.7/mybatis-plus-core-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-annotation/3.5.7/mybatis-plus-annotation-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-extension/3.5.7/mybatis-plus-extension-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/mybatis/mybatis/3.5.16/mybatis-3.5.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/jsqlparser/jsqlparser/4.9/jsqlparser-4.9.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-spring-boot-autoconfigure/3.5.7/mybatis-plus-spring-boot-autoconfigure-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-autoconfigure/3.3.5/spring-boot-autoconfigure-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-jdbc/3.3.5/spring-boot-starter-jdbc-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/zaxxer/HikariCP/5.1.0/HikariCP-5.1.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jdbc/6.1.14/spring-jdbc-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-data-jpa/3.3.5/spring-boot-starter-data-jpa-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-aop/3.3.5/spring-boot-starter-aop-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/aspectj/aspectjweaver/1.9.22.1/aspectjweaver-1.9.22.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/orm/hibernate-core/6.5.3.Final/hibernate-core-6.5.3.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/persistence/jakarta.persistence-api/3.1.0/jakarta.persistence-api-3.1.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/transaction/jakarta.transaction-api/2.0.1/jakarta.transaction-api-2.0.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/common/hibernate-commons-annotations/6.0.6.Final/hibernate-commons-annotations-6.0.6.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/smallrye/jandex/3.1.2/jandex-3.1.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-runtime/4.0.5/jaxb-runtime-4.0.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-core/4.0.5/jaxb-core-4.0.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/angus/angus-activation/2.0.2/angus-activation-2.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/txw2/4.0.5/txw2-4.0.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/sun/istack/istack-commons-runtime/4.1.2/istack-commons-runtime-4.1.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.0/antlr4-runtime-4.13.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-jpa/3.3.5/spring-data-jpa-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-commons/3.3.5/spring-data-commons-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-orm/6.1.14/spring-orm-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-tx/6.1.14/spring-tx-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aspects/6.1.14/spring-aspects-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-data-redis/3.3.5/spring-boot-starter-data-redis-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/lettuce/lettuce-core/6.3.2.RELEASE/lettuce-core-6.3.2.RELEASE.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.114.Final/netty-common-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.114.Final/netty-handler-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.114.Final/netty-resolver-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.114.Final/netty-buffer-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.114.Final/netty-transport-native-unix-common-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.114.Final/netty-codec-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.114.Final/netty-transport-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/projectreactor/reactor-core/3.6.11/reactor-core-3.6.11.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-redis/3.3.5/spring-data-redis-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-keyvalue/3.3.5/spring-data-keyvalue-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-oxm/6.1.14/spring-oxm-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-context-support/6.1.14/spring-context-support-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/security/spring-security-core/6.3.4/spring-security-core-6.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/security/spring-security-crypto/6.3.4/spring-security-crypto-6.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aop/6.1.14/spring-aop-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-beans/6.1.14/spring-beans-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-context/6.1.14/spring-context-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-expression/6.1.14/spring-expression-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-observation/1.13.6/micrometer-observation-1.13.6.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-commons/1.13.6/micrometer-commons-1.13.6.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/xiaoymin/knife4j-openapi3-jakarta-spring-boot-starter/4.5.0/knife4j-openapi3-jakarta-spring-boot-starter-4.5.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/xiaoymin/knife4j-core/4.5.0/knife4j-core-4.5.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/xiaoymin/knife4j-openapi3-ui/4.5.0/knife4j-openapi3-ui-4.5.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springdoc/springdoc-openapi-starter-webmvc-ui/2.3.0/springdoc-openapi-starter-webmvc-ui-2.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springdoc/springdoc-openapi-starter-webmvc-api/2.3.0/springdoc-openapi-starter-webmvc-api-2.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springdoc/springdoc-openapi-starter-common/2.3.0/springdoc-openapi-starter-common-2.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/swagger/core/v3/swagger-core-jakarta/2.2.19/swagger-core-jakarta-2.2.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/swagger/core/v3/swagger-annotations-jakarta/2.2.19/swagger-annotations-jakarta-2.2.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/swagger/core/v3/swagger-models-jakarta/2.2.19/swagger-models-jakarta-2.2.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.17.2/jackson-dataformat-yaml-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/webjars/swagger-ui/5.10.3/swagger-ui-5.10.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/cn/hutool/hutool-all/5.8.32/hutool-all-5.8.32.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/33.2.1-jre/guava-33.2.1-jre.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.2/failureaccess-1.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/3.0.0/j2objc-annotations-3.0.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/alibaba/easyexcel/4.0.3/easyexcel-4.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/alibaba/easyexcel-core/4.0.3/easyexcel-core-4.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/alibaba/easyexcel-support/3.3.4/easyexcel-support-3.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/poi/poi/5.2.5/poi-5.2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.15.0/commons-io-2.15.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/zaxxer/SparseBitSet/1.3/SparseBitSet-1.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-api/2.23.1/log4j-api-2.23.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/poi/poi-ooxml/5.2.5/poi-ooxml-5.2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/poi/poi-ooxml-lite/5.2.5/poi-ooxml-lite-5.2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/xmlbeans/xmlbeans/5.2.0/xmlbeans-5.2.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-compress/1.25.0/commons-compress-1.25.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/virtuald/curvesapi/1.08/curvesapi-1.08.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.11.0/commons-csv-1.11.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/ehcache/ehcache/3.10.8/ehcache-3.10.8.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/javax/cache/cache-api/1.1.1/cache-api-1.1.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.16/slf4j-api-2.0.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/validation/jakarta.validation-api/3.0.2/jakarta.validation-api-3.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/ben-manes/caffeine/caffeine/3.1.8/caffeine-3.1.8.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/3.37.0/checker-qual-3.37.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.21.1/error_prone_annotations-2.21.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/projectlombok/lombok/1.18.34/lombok-1.18.34.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter/3.3.5/spring-boot-starter-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot/3.3.5/spring-boot-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-logging/3.3.5/spring-boot-starter-logging-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.11/logback-classic-1.5.11.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-core/1.5.11/logback-core-1.5.11.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-to-slf4j/2.23.1/log4j-to-slf4j-2.23.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/jul-to-slf4j/2.0.16/jul-to-slf4j-2.0.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/xml/bind/jakarta.xml.bind-api/4.0.2/jakarta.xml.bind-api-4.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/activation/jakarta.activation-api/2.1.3/jakarta.activation-api-2.1.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/net/bytebuddy/byte-buddy/1.14.19/byte-buddy-1.14.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-core/6.1.14/spring-core-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jcl/6.1.14/spring-jcl-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/mybatis/mybatis-spring/3.0.3/mybatis-spring-3.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
</factorypath> |
||||
@ -0,0 +1,34 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<projectDescription> |
||||
|
<name>crm-dict</name> |
||||
|
<comment></comment> |
||||
|
<projects> |
||||
|
</projects> |
||||
|
<buildSpec> |
||||
|
<buildCommand> |
||||
|
<name>org.eclipse.jdt.core.javabuilder</name> |
||||
|
<arguments> |
||||
|
</arguments> |
||||
|
</buildCommand> |
||||
|
<buildCommand> |
||||
|
<name>org.eclipse.m2e.core.maven2Builder</name> |
||||
|
<arguments> |
||||
|
</arguments> |
||||
|
</buildCommand> |
||||
|
</buildSpec> |
||||
|
<natures> |
||||
|
<nature>org.eclipse.jdt.core.javanature</nature> |
||||
|
<nature>org.eclipse.m2e.core.maven2Nature</nature> |
||||
|
</natures> |
||||
|
<filteredResources> |
||||
|
<filter> |
||||
|
<id>1788308974789</id> |
||||
|
<name></name> |
||||
|
<type>30</type> |
||||
|
<matcher> |
||||
|
<id>org.eclipse.core.resources.regexFilterMatcher</id> |
||||
|
<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments> |
||||
|
</matcher> |
||||
|
</filter> |
||||
|
</filteredResources> |
||||
|
</projectDescription> |
||||
@ -0,0 +1,4 @@ |
|||||
|
eclipse.preferences.version=1 |
||||
|
encoding//src/main/java=UTF-8 |
||||
|
encoding//src/test/java=UTF-8 |
||||
|
encoding/<project>=UTF-8 |
||||
@ -0,0 +1,4 @@ |
|||||
|
eclipse.preferences.version=1 |
||||
|
org.eclipse.jdt.apt.aptEnabled=true |
||||
|
org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations |
||||
|
org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations |
||||
@ -0,0 +1,20 @@ |
|||||
|
eclipse.preferences.version=1 |
||||
|
org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore |
||||
|
org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull |
||||
|
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault |
||||
|
org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable |
||||
|
org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled |
||||
|
org.eclipse.jdt.core.compiler.codegen.methodParameters=generate |
||||
|
org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 |
||||
|
org.eclipse.jdt.core.compiler.compliance=17 |
||||
|
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled |
||||
|
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.nullReference=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore |
||||
|
org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled |
||||
|
org.eclipse.jdt.core.compiler.processAnnotations=enabled |
||||
|
org.eclipse.jdt.core.compiler.release=enabled |
||||
|
org.eclipse.jdt.core.compiler.source=17 |
||||
@ -0,0 +1,4 @@ |
|||||
|
activeProfiles= |
||||
|
eclipse.preferences.version=1 |
||||
|
resolveWorkspaceProjects=true |
||||
|
version=1 |
||||
@ -0,0 +1,57 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<classpath> |
||||
|
<classpathentry kind="src" output="target/classes" path="src/main/java"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="src" output="target/test-classes" path="src/test/java"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="test" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="test" value="true"/> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="src" path="target/generated-sources/annotations"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="ignore_optional_problems" value="true"/> |
||||
|
<attribute name="m2e-apt" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="ignore_optional_problems" value="true"/> |
||||
|
<attribute name="m2e-apt" value="true"/> |
||||
|
<attribute name="test" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="output" path="target/classes"/> |
||||
|
</classpath> |
||||
@ -0,0 +1,147 @@ |
|||||
|
<factorypath> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-web/3.3.5/spring-boot-starter-web-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-json/3.3.5/spring-boot-starter-json-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.17.2/jackson-datatype-jdk8-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.17.2/jackson-datatype-jsr310-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/module/jackson-module-parameter-names/2.17.2/jackson-module-parameter-names-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-tomcat/3.3.5/spring-boot-starter-tomcat-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-core/10.1.31/tomcat-embed-core-10.1.31.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-websocket/10.1.31/tomcat-embed-websocket-10.1.31.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-web/6.1.14/spring-web-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-webmvc/6.1.14/spring-webmvc-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-validation/3.3.5/spring-boot-starter-validation-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-el/10.1.31/tomcat-embed-el-10.1.31.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/validator/hibernate-validator/8.0.1.Final/hibernate-validator-8.0.1.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jboss/logging/jboss-logging/3.5.3.Final/jboss-logging-3.5.3.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/classmate/1.7.0/classmate-1.7.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-spring-boot3-starter/3.5.7/mybatis-plus-spring-boot3-starter-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus/3.5.7/mybatis-plus-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-core/3.5.7/mybatis-plus-core-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-annotation/3.5.7/mybatis-plus-annotation-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-extension/3.5.7/mybatis-plus-extension-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/mybatis/mybatis/3.5.16/mybatis-3.5.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/jsqlparser/jsqlparser/4.9/jsqlparser-4.9.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/mybatis/mybatis-spring/3.0.3/mybatis-spring-3.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-spring-boot-autoconfigure/3.5.7/mybatis-plus-spring-boot-autoconfigure-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-autoconfigure/3.3.5/spring-boot-autoconfigure-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-jdbc/3.3.5/spring-boot-starter-jdbc-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/zaxxer/HikariCP/5.1.0/HikariCP-5.1.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jdbc/6.1.14/spring-jdbc-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-data-jpa/3.3.5/spring-boot-starter-data-jpa-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-aop/3.3.5/spring-boot-starter-aop-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/aspectj/aspectjweaver/1.9.22.1/aspectjweaver-1.9.22.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/orm/hibernate-core/6.5.3.Final/hibernate-core-6.5.3.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/persistence/jakarta.persistence-api/3.1.0/jakarta.persistence-api-3.1.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/transaction/jakarta.transaction-api/2.0.1/jakarta.transaction-api-2.0.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/common/hibernate-commons-annotations/6.0.6.Final/hibernate-commons-annotations-6.0.6.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/smallrye/jandex/3.1.2/jandex-3.1.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-runtime/4.0.5/jaxb-runtime-4.0.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-core/4.0.5/jaxb-core-4.0.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/angus/angus-activation/2.0.2/angus-activation-2.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/txw2/4.0.5/txw2-4.0.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/sun/istack/istack-commons-runtime/4.1.2/istack-commons-runtime-4.1.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.0/antlr4-runtime-4.13.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-jpa/3.3.5/spring-data-jpa-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-commons/3.3.5/spring-data-commons-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-orm/6.1.14/spring-orm-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-tx/6.1.14/spring-tx-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aspects/6.1.14/spring-aspects-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-data-redis/3.3.5/spring-boot-starter-data-redis-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/lettuce/lettuce-core/6.3.2.RELEASE/lettuce-core-6.3.2.RELEASE.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.114.Final/netty-common-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.114.Final/netty-handler-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.114.Final/netty-resolver-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.114.Final/netty-buffer-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.114.Final/netty-transport-native-unix-common-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.114.Final/netty-codec-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.114.Final/netty-transport-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/projectreactor/reactor-core/3.6.11/reactor-core-3.6.11.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-redis/3.3.5/spring-data-redis-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-keyvalue/3.3.5/spring-data-keyvalue-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-oxm/6.1.14/spring-oxm-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-context-support/6.1.14/spring-context-support-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/security/spring-security-core/6.3.4/spring-security-core-6.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/security/spring-security-crypto/6.3.4/spring-security-crypto-6.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aop/6.1.14/spring-aop-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-beans/6.1.14/spring-beans-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-context/6.1.14/spring-context-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-expression/6.1.14/spring-expression-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-observation/1.13.6/micrometer-observation-1.13.6.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-commons/1.13.6/micrometer-commons-1.13.6.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/xiaoymin/knife4j-openapi3-jakarta-spring-boot-starter/4.5.0/knife4j-openapi3-jakarta-spring-boot-starter-4.5.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/xiaoymin/knife4j-core/4.5.0/knife4j-core-4.5.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/xiaoymin/knife4j-openapi3-ui/4.5.0/knife4j-openapi3-ui-4.5.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springdoc/springdoc-openapi-starter-webmvc-ui/2.3.0/springdoc-openapi-starter-webmvc-ui-2.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springdoc/springdoc-openapi-starter-webmvc-api/2.3.0/springdoc-openapi-starter-webmvc-api-2.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springdoc/springdoc-openapi-starter-common/2.3.0/springdoc-openapi-starter-common-2.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/swagger/core/v3/swagger-core-jakarta/2.2.19/swagger-core-jakarta-2.2.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/swagger/core/v3/swagger-annotations-jakarta/2.2.19/swagger-annotations-jakarta-2.2.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/swagger/core/v3/swagger-models-jakarta/2.2.19/swagger-models-jakarta-2.2.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.17.2/jackson-dataformat-yaml-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/webjars/swagger-ui/5.10.3/swagger-ui-5.10.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/cn/hutool/hutool-all/5.8.32/hutool-all-5.8.32.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/33.2.1-jre/guava-33.2.1-jre.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.2/failureaccess-1.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/3.42.0/checker-qual-3.42.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.26.1/error_prone_annotations-2.26.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/3.0.0/j2objc-annotations-3.0.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/alibaba/easyexcel/4.0.3/easyexcel-4.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/alibaba/easyexcel-core/4.0.3/easyexcel-core-4.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/alibaba/easyexcel-support/3.3.4/easyexcel-support-3.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/poi/poi/5.2.5/poi-5.2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/zaxxer/SparseBitSet/1.3/SparseBitSet-1.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-api/2.23.1/log4j-api-2.23.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/poi/poi-ooxml/5.2.5/poi-ooxml-5.2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/poi/poi-ooxml-lite/5.2.5/poi-ooxml-lite-5.2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/xmlbeans/xmlbeans/5.2.0/xmlbeans-5.2.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/virtuald/curvesapi/1.08/curvesapi-1.08.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.11.0/commons-csv-1.11.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/ehcache/ehcache/3.10.8/ehcache-3.10.8.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/javax/cache/cache-api/1.1.1/cache-api-1.1.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.16/slf4j-api-2.0.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/validation/jakarta.validation-api/3.0.2/jakarta.validation-api-3.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/minio/minio/8.5.17/minio-8.5.17.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/carrotsearch/thirdparty/simple-xml-safe/2.7.1/simple-xml-safe-2.7.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okhttp3/okhttp/4.12.0/okhttp-4.12.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okio/okio/3.6.0/okio-3.6.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okio/okio-jvm/3.6.0/okio-jvm-3.6.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib-common/1.9.25/kotlin-stdlib-common-1.9.25.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.9.25/kotlin-stdlib-jdk8-1.9.25.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib/1.9.25/kotlin-stdlib-1.9.25.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/annotations/13.0/annotations-13.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.9.25/kotlin-stdlib-jdk7-1.9.25.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.17.2/jackson-annotations-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.17.2/jackson-core-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.17.2/jackson-databind-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.78.1/bcprov-jdk18on-1.78.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-compress/1.27.1/commons-compress-1.27.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.16.1/commons-io-2.16.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/xerial/snappy/snappy-java/1.1.10.7/snappy-java-1.1.10.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/pdfbox/pdfbox/3.0.3/pdfbox-3.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/pdfbox/pdfbox-io/3.0.3/pdfbox-io-3.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/pdfbox/fontbox/3.0.3/fontbox-3.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/commons-logging/commons-logging/1.3.3/commons-logging-1.3.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/projectlombok/lombok/1.18.34/lombok-1.18.34.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter/3.3.5/spring-boot-starter-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot/3.3.5/spring-boot-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-logging/3.3.5/spring-boot-starter-logging-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.11/logback-classic-1.5.11.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-core/1.5.11/logback-core-1.5.11.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-to-slf4j/2.23.1/log4j-to-slf4j-2.23.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/jul-to-slf4j/2.0.16/jul-to-slf4j-2.0.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/xml/bind/jakarta.xml.bind-api/4.0.2/jakarta.xml.bind-api-4.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/activation/jakarta.activation-api/2.1.3/jakarta.activation-api-2.1.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/net/bytebuddy/byte-buddy/1.14.19/byte-buddy-1.14.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-core/6.1.14/spring-core-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jcl/6.1.14/spring-jcl-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
</factorypath> |
||||
@ -0,0 +1,34 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<projectDescription> |
||||
|
<name>crm-file</name> |
||||
|
<comment></comment> |
||||
|
<projects> |
||||
|
</projects> |
||||
|
<buildSpec> |
||||
|
<buildCommand> |
||||
|
<name>org.eclipse.jdt.core.javabuilder</name> |
||||
|
<arguments> |
||||
|
</arguments> |
||||
|
</buildCommand> |
||||
|
<buildCommand> |
||||
|
<name>org.eclipse.m2e.core.maven2Builder</name> |
||||
|
<arguments> |
||||
|
</arguments> |
||||
|
</buildCommand> |
||||
|
</buildSpec> |
||||
|
<natures> |
||||
|
<nature>org.eclipse.jdt.core.javanature</nature> |
||||
|
<nature>org.eclipse.m2e.core.maven2Nature</nature> |
||||
|
</natures> |
||||
|
<filteredResources> |
||||
|
<filter> |
||||
|
<id>1788308974805</id> |
||||
|
<name></name> |
||||
|
<type>30</type> |
||||
|
<matcher> |
||||
|
<id>org.eclipse.core.resources.regexFilterMatcher</id> |
||||
|
<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments> |
||||
|
</matcher> |
||||
|
</filter> |
||||
|
</filteredResources> |
||||
|
</projectDescription> |
||||
@ -0,0 +1,4 @@ |
|||||
|
eclipse.preferences.version=1 |
||||
|
encoding//src/main/java=UTF-8 |
||||
|
encoding//src/test/java=UTF-8 |
||||
|
encoding/<project>=UTF-8 |
||||
@ -0,0 +1,4 @@ |
|||||
|
eclipse.preferences.version=1 |
||||
|
org.eclipse.jdt.apt.aptEnabled=true |
||||
|
org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations |
||||
|
org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations |
||||
@ -0,0 +1,20 @@ |
|||||
|
eclipse.preferences.version=1 |
||||
|
org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore |
||||
|
org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull |
||||
|
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault |
||||
|
org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable |
||||
|
org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled |
||||
|
org.eclipse.jdt.core.compiler.codegen.methodParameters=generate |
||||
|
org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 |
||||
|
org.eclipse.jdt.core.compiler.compliance=17 |
||||
|
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled |
||||
|
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.nullReference=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore |
||||
|
org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled |
||||
|
org.eclipse.jdt.core.compiler.processAnnotations=enabled |
||||
|
org.eclipse.jdt.core.compiler.release=enabled |
||||
|
org.eclipse.jdt.core.compiler.source=17 |
||||
@ -0,0 +1,4 @@ |
|||||
|
activeProfiles= |
||||
|
eclipse.preferences.version=1 |
||||
|
resolveWorkspaceProjects=true |
||||
|
version=1 |
||||
@ -0,0 +1,57 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<classpath> |
||||
|
<classpathentry kind="src" output="target/classes" path="src/main/java"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="src" output="target/test-classes" path="src/test/java"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="test" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="test" value="true"/> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="src" path="target/generated-sources/annotations"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="ignore_optional_problems" value="true"/> |
||||
|
<attribute name="m2e-apt" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="ignore_optional_problems" value="true"/> |
||||
|
<attribute name="m2e-apt" value="true"/> |
||||
|
<attribute name="test" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="output" path="target/classes"/> |
||||
|
</classpath> |
||||
@ -0,0 +1,157 @@ |
|||||
|
<factorypath> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-web/3.3.5/spring-boot-starter-web-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-json/3.3.5/spring-boot-starter-json-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.17.2/jackson-databind-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.17.2/jackson-datatype-jdk8-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.17.2/jackson-datatype-jsr310-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/module/jackson-module-parameter-names/2.17.2/jackson-module-parameter-names-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-tomcat/3.3.5/spring-boot-starter-tomcat-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-core/10.1.31/tomcat-embed-core-10.1.31.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-websocket/10.1.31/tomcat-embed-websocket-10.1.31.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-web/6.1.14/spring-web-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-webmvc/6.1.14/spring-webmvc-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-validation/3.3.5/spring-boot-starter-validation-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-el/10.1.31/tomcat-embed-el-10.1.31.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/validator/hibernate-validator/8.0.1.Final/hibernate-validator-8.0.1.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jboss/logging/jboss-logging/3.5.3.Final/jboss-logging-3.5.3.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/classmate/1.7.0/classmate-1.7.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-spring-boot3-starter/3.5.7/mybatis-plus-spring-boot3-starter-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus/3.5.7/mybatis-plus-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-core/3.5.7/mybatis-plus-core-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-annotation/3.5.7/mybatis-plus-annotation-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-extension/3.5.7/mybatis-plus-extension-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/mybatis/mybatis/3.5.16/mybatis-3.5.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/jsqlparser/jsqlparser/4.9/jsqlparser-4.9.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-spring-boot-autoconfigure/3.5.7/mybatis-plus-spring-boot-autoconfigure-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-autoconfigure/3.3.5/spring-boot-autoconfigure-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-jdbc/3.3.5/spring-boot-starter-jdbc-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/zaxxer/HikariCP/5.1.0/HikariCP-5.1.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jdbc/6.1.14/spring-jdbc-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-data-jpa/3.3.5/spring-boot-starter-data-jpa-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-aop/3.3.5/spring-boot-starter-aop-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/aspectj/aspectjweaver/1.9.22.1/aspectjweaver-1.9.22.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/orm/hibernate-core/6.5.3.Final/hibernate-core-6.5.3.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/persistence/jakarta.persistence-api/3.1.0/jakarta.persistence-api-3.1.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/transaction/jakarta.transaction-api/2.0.1/jakarta.transaction-api-2.0.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/common/hibernate-commons-annotations/6.0.6.Final/hibernate-commons-annotations-6.0.6.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/smallrye/jandex/3.1.2/jandex-3.1.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-runtime/4.0.5/jaxb-runtime-4.0.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-core/4.0.5/jaxb-core-4.0.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/angus/angus-activation/2.0.2/angus-activation-2.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/txw2/4.0.5/txw2-4.0.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/sun/istack/istack-commons-runtime/4.1.2/istack-commons-runtime-4.1.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.0/antlr4-runtime-4.13.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-jpa/3.3.5/spring-data-jpa-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-commons/3.3.5/spring-data-commons-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-orm/6.1.14/spring-orm-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-tx/6.1.14/spring-tx-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aspects/6.1.14/spring-aspects-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-data-redis/3.3.5/spring-boot-starter-data-redis-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/lettuce/lettuce-core/6.3.2.RELEASE/lettuce-core-6.3.2.RELEASE.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.114.Final/netty-common-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.114.Final/netty-handler-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.114.Final/netty-resolver-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.114.Final/netty-buffer-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.114.Final/netty-transport-native-unix-common-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.114.Final/netty-codec-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.114.Final/netty-transport-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/projectreactor/reactor-core/3.6.11/reactor-core-3.6.11.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-redis/3.3.5/spring-data-redis-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-keyvalue/3.3.5/spring-data-keyvalue-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-oxm/6.1.14/spring-oxm-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-context-support/6.1.14/spring-context-support-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/security/spring-security-core/6.3.4/spring-security-core-6.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/security/spring-security-crypto/6.3.4/spring-security-crypto-6.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aop/6.1.14/spring-aop-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-beans/6.1.14/spring-beans-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-context/6.1.14/spring-context-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-expression/6.1.14/spring-expression-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-observation/1.13.6/micrometer-observation-1.13.6.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-commons/1.13.6/micrometer-commons-1.13.6.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/xiaoymin/knife4j-openapi3-jakarta-spring-boot-starter/4.5.0/knife4j-openapi3-jakarta-spring-boot-starter-4.5.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/xiaoymin/knife4j-core/4.5.0/knife4j-core-4.5.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/xiaoymin/knife4j-openapi3-ui/4.5.0/knife4j-openapi3-ui-4.5.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springdoc/springdoc-openapi-starter-webmvc-ui/2.3.0/springdoc-openapi-starter-webmvc-ui-2.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springdoc/springdoc-openapi-starter-webmvc-api/2.3.0/springdoc-openapi-starter-webmvc-api-2.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springdoc/springdoc-openapi-starter-common/2.3.0/springdoc-openapi-starter-common-2.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/swagger/core/v3/swagger-core-jakarta/2.2.19/swagger-core-jakarta-2.2.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/swagger/core/v3/swagger-annotations-jakarta/2.2.19/swagger-annotations-jakarta-2.2.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/swagger/core/v3/swagger-models-jakarta/2.2.19/swagger-models-jakarta-2.2.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.17.2/jackson-dataformat-yaml-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/webjars/swagger-ui/5.10.3/swagger-ui-5.10.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/cn/hutool/hutool-all/5.8.32/hutool-all-5.8.32.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/33.2.1-jre/guava-33.2.1-jre.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.2/failureaccess-1.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/3.42.0/checker-qual-3.42.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.26.1/error_prone_annotations-2.26.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/3.0.0/j2objc-annotations-3.0.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/alibaba/easyexcel/4.0.3/easyexcel-4.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/alibaba/easyexcel-core/4.0.3/easyexcel-core-4.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/alibaba/easyexcel-support/3.3.4/easyexcel-support-3.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/poi/poi/5.2.5/poi-5.2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/zaxxer/SparseBitSet/1.3/SparseBitSet-1.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-api/2.23.1/log4j-api-2.23.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/poi/poi-ooxml/5.2.5/poi-ooxml-5.2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/poi/poi-ooxml-lite/5.2.5/poi-ooxml-lite-5.2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/xmlbeans/xmlbeans/5.2.0/xmlbeans-5.2.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/virtuald/curvesapi/1.08/curvesapi-1.08.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.11.0/commons-csv-1.11.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/ehcache/ehcache/3.10.8/ehcache-3.10.8.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/javax/cache/cache-api/1.1.1/cache-api-1.1.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.16/slf4j-api-2.0.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/validation/jakarta.validation-api/3.0.2/jakarta.validation-api-3.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/minio/minio/8.5.17/minio-8.5.17.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/carrotsearch/thirdparty/simple-xml-safe/2.7.1/simple-xml-safe-2.7.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.17.2/jackson-annotations-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.17.2/jackson-core-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.78.1/bcprov-jdk18on-1.78.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-compress/1.27.1/commons-compress-1.27.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/xerial/snappy/snappy-java/1.1.10.7/snappy-java-1.1.10.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/pdfbox/pdfbox/3.0.3/pdfbox-3.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/pdfbox/pdfbox-io/3.0.3/pdfbox-io-3.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/pdfbox/fontbox/3.0.3/fontbox-3.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/commons-logging/commons-logging/1.3.3/commons-logging-1.3.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-security/3.3.5/spring-boot-starter-security-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/security/spring-security-config/6.3.4/spring-security-config-6.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/security/spring-security-web/6.3.4/spring-security-web-6.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/tingyugetc520/dt-java/0.1.2/dt-java-0.1.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okhttp3/okhttp/4.12.0/okhttp-4.12.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okio/okio/3.6.0/okio-3.6.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okio/okio-jvm/3.6.0/okio-jvm-3.6.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib-common/1.9.25/kotlin-stdlib-common-1.9.25.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.9.25/kotlin-stdlib-jdk8-1.9.25.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib/1.9.25/kotlin-stdlib-1.9.25.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/annotations/13.0/annotations-13.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.9.25/kotlin-stdlib-jdk7-1.9.25.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/httpclient/4.5/httpclient-4.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/httpmime/4.5/httpmime-4.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.5/commons-io-2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/gson/gson/2.10.1/gson-2.10.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/mysql/mysql-connector-j/8.3.0/mysql-connector-j-8.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/ben-manes/caffeine/caffeine/3.1.8/caffeine-3.1.8.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/projectlombok/lombok/1.18.34/lombok-1.18.34.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter/3.3.5/spring-boot-starter-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot/3.3.5/spring-boot-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-logging/3.3.5/spring-boot-starter-logging-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.11/logback-classic-1.5.11.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-core/1.5.11/logback-core-1.5.11.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-to-slf4j/2.23.1/log4j-to-slf4j-2.23.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/jul-to-slf4j/2.0.16/jul-to-slf4j-2.0.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/xml/bind/jakarta.xml.bind-api/4.0.2/jakarta.xml.bind-api-4.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/activation/jakarta.activation-api/2.1.3/jakarta.activation-api-2.1.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/net/bytebuddy/byte-buddy/1.14.19/byte-buddy-1.14.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-core/6.1.14/spring-core-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jcl/6.1.14/spring-jcl-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/mybatis/mybatis-spring/3.0.3/mybatis-spring-3.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
</factorypath> |
||||
@ -0,0 +1,34 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<projectDescription> |
||||
|
<name>crm-lead</name> |
||||
|
<comment></comment> |
||||
|
<projects> |
||||
|
</projects> |
||||
|
<buildSpec> |
||||
|
<buildCommand> |
||||
|
<name>org.eclipse.jdt.core.javabuilder</name> |
||||
|
<arguments> |
||||
|
</arguments> |
||||
|
</buildCommand> |
||||
|
<buildCommand> |
||||
|
<name>org.eclipse.m2e.core.maven2Builder</name> |
||||
|
<arguments> |
||||
|
</arguments> |
||||
|
</buildCommand> |
||||
|
</buildSpec> |
||||
|
<natures> |
||||
|
<nature>org.eclipse.jdt.core.javanature</nature> |
||||
|
<nature>org.eclipse.m2e.core.maven2Nature</nature> |
||||
|
</natures> |
||||
|
<filteredResources> |
||||
|
<filter> |
||||
|
<id>1788308974823</id> |
||||
|
<name></name> |
||||
|
<type>30</type> |
||||
|
<matcher> |
||||
|
<id>org.eclipse.core.resources.regexFilterMatcher</id> |
||||
|
<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments> |
||||
|
</matcher> |
||||
|
</filter> |
||||
|
</filteredResources> |
||||
|
</projectDescription> |
||||
@ -0,0 +1,4 @@ |
|||||
|
eclipse.preferences.version=1 |
||||
|
encoding//src/main/java=UTF-8 |
||||
|
encoding//src/test/java=UTF-8 |
||||
|
encoding/<project>=UTF-8 |
||||
@ -0,0 +1,4 @@ |
|||||
|
eclipse.preferences.version=1 |
||||
|
org.eclipse.jdt.apt.aptEnabled=true |
||||
|
org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations |
||||
|
org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations |
||||
@ -0,0 +1,20 @@ |
|||||
|
eclipse.preferences.version=1 |
||||
|
org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore |
||||
|
org.eclipse.jdt.core.compiler.annotation.nonnull=javax.annotation.Nonnull |
||||
|
org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=javax.annotation.ParametersAreNonnullByDefault |
||||
|
org.eclipse.jdt.core.compiler.annotation.nullable=javax.annotation.Nullable |
||||
|
org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled |
||||
|
org.eclipse.jdt.core.compiler.codegen.methodParameters=generate |
||||
|
org.eclipse.jdt.core.compiler.codegen.targetPlatform=17 |
||||
|
org.eclipse.jdt.core.compiler.compliance=17 |
||||
|
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled |
||||
|
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.nullReference=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.nullSpecViolation=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning |
||||
|
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore |
||||
|
org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=enabled |
||||
|
org.eclipse.jdt.core.compiler.processAnnotations=enabled |
||||
|
org.eclipse.jdt.core.compiler.release=enabled |
||||
|
org.eclipse.jdt.core.compiler.source=17 |
||||
@ -0,0 +1,4 @@ |
|||||
|
activeProfiles= |
||||
|
eclipse.preferences.version=1 |
||||
|
resolveWorkspaceProjects=true |
||||
|
version=1 |
||||
@ -0,0 +1,57 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<classpath> |
||||
|
<classpathentry kind="src" output="target/classes" path="src/main/java"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="src" output="target/test-classes" path="src/test/java"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="test" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="test" value="true"/> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"> |
||||
|
<attributes> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="src" path="target/generated-sources/annotations"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="ignore_optional_problems" value="true"/> |
||||
|
<attribute name="m2e-apt" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations"> |
||||
|
<attributes> |
||||
|
<attribute name="optional" value="true"/> |
||||
|
<attribute name="maven.pomderived" value="true"/> |
||||
|
<attribute name="ignore_optional_problems" value="true"/> |
||||
|
<attribute name="m2e-apt" value="true"/> |
||||
|
<attribute name="test" value="true"/> |
||||
|
</attributes> |
||||
|
</classpathentry> |
||||
|
<classpathentry kind="output" path="target/classes"/> |
||||
|
</classpath> |
||||
@ -0,0 +1,157 @@ |
|||||
|
<factorypath> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-web/3.3.5/spring-boot-starter-web-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-json/3.3.5/spring-boot-starter-json-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.17.2/jackson-datatype-jdk8-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.17.2/jackson-datatype-jsr310-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/module/jackson-module-parameter-names/2.17.2/jackson-module-parameter-names-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-tomcat/3.3.5/spring-boot-starter-tomcat-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-core/10.1.31/tomcat-embed-core-10.1.31.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-websocket/10.1.31/tomcat-embed-websocket-10.1.31.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-web/6.1.14/spring-web-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-webmvc/6.1.14/spring-webmvc-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-validation/3.3.5/spring-boot-starter-validation-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/tomcat/embed/tomcat-embed-el/10.1.31/tomcat-embed-el-10.1.31.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/validator/hibernate-validator/8.0.1.Final/hibernate-validator-8.0.1.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jboss/logging/jboss-logging/3.5.3.Final/jboss-logging-3.5.3.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/classmate/1.7.0/classmate-1.7.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-spring-boot3-starter/3.5.7/mybatis-plus-spring-boot3-starter-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus/3.5.7/mybatis-plus-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-core/3.5.7/mybatis-plus-core-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-annotation/3.5.7/mybatis-plus-annotation-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-extension/3.5.7/mybatis-plus-extension-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/mybatis/mybatis/3.5.16/mybatis-3.5.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/jsqlparser/jsqlparser/4.9/jsqlparser-4.9.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/baomidou/mybatis-plus-spring-boot-autoconfigure/3.5.7/mybatis-plus-spring-boot-autoconfigure-3.5.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-autoconfigure/3.3.5/spring-boot-autoconfigure-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-jdbc/3.3.5/spring-boot-starter-jdbc-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/zaxxer/HikariCP/5.1.0/HikariCP-5.1.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jdbc/6.1.14/spring-jdbc-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-data-jpa/3.3.5/spring-boot-starter-data-jpa-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-aop/3.3.5/spring-boot-starter-aop-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/aspectj/aspectjweaver/1.9.22.1/aspectjweaver-1.9.22.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/orm/hibernate-core/6.5.3.Final/hibernate-core-6.5.3.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/persistence/jakarta.persistence-api/3.1.0/jakarta.persistence-api-3.1.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/transaction/jakarta.transaction-api/2.0.1/jakarta.transaction-api-2.0.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/hibernate/common/hibernate-commons-annotations/6.0.6.Final/hibernate-commons-annotations-6.0.6.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/smallrye/jandex/3.1.2/jandex-3.1.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-runtime/4.0.5/jaxb-runtime-4.0.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/jaxb-core/4.0.5/jaxb-core-4.0.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/eclipse/angus/angus-activation/2.0.2/angus-activation-2.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/glassfish/jaxb/txw2/4.0.5/txw2-4.0.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/sun/istack/istack-commons-runtime/4.1.2/istack-commons-runtime-4.1.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/antlr/antlr4-runtime/4.13.0/antlr4-runtime-4.13.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-jpa/3.3.5/spring-data-jpa-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-commons/3.3.5/spring-data-commons-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-orm/6.1.14/spring-orm-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-tx/6.1.14/spring-tx-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aspects/6.1.14/spring-aspects-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-data-redis/3.3.5/spring-boot-starter-data-redis-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/lettuce/lettuce-core/6.3.2.RELEASE/lettuce-core-6.3.2.RELEASE.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-common/4.1.114.Final/netty-common-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-handler/4.1.114.Final/netty-handler-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-resolver/4.1.114.Final/netty-resolver-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-buffer/4.1.114.Final/netty-buffer-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport-native-unix-common/4.1.114.Final/netty-transport-native-unix-common-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-codec/4.1.114.Final/netty-codec-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/netty/netty-transport/4.1.114.Final/netty-transport-4.1.114.Final.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/projectreactor/reactor-core/3.6.11/reactor-core-3.6.11.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-redis/3.3.5/spring-data-redis-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/data/spring-data-keyvalue/3.3.5/spring-data-keyvalue-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-oxm/6.1.14/spring-oxm-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-context-support/6.1.14/spring-context-support-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/security/spring-security-core/6.3.4/spring-security-core-6.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/security/spring-security-crypto/6.3.4/spring-security-crypto-6.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-aop/6.1.14/spring-aop-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-beans/6.1.14/spring-beans-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-context/6.1.14/spring-context-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-expression/6.1.14/spring-expression-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-observation/1.13.6/micrometer-observation-1.13.6.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/micrometer/micrometer-commons/1.13.6/micrometer-commons-1.13.6.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/xiaoymin/knife4j-openapi3-jakarta-spring-boot-starter/4.5.0/knife4j-openapi3-jakarta-spring-boot-starter-4.5.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/xiaoymin/knife4j-core/4.5.0/knife4j-core-4.5.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/xiaoymin/knife4j-openapi3-ui/4.5.0/knife4j-openapi3-ui-4.5.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springdoc/springdoc-openapi-starter-webmvc-ui/2.3.0/springdoc-openapi-starter-webmvc-ui-2.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springdoc/springdoc-openapi-starter-webmvc-api/2.3.0/springdoc-openapi-starter-webmvc-api-2.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springdoc/springdoc-openapi-starter-common/2.3.0/springdoc-openapi-starter-common-2.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/swagger/core/v3/swagger-core-jakarta/2.2.19/swagger-core-jakarta-2.2.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/swagger/core/v3/swagger-annotations-jakarta/2.2.19/swagger-annotations-jakarta-2.2.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/swagger/core/v3/swagger-models-jakarta/2.2.19/swagger-models-jakarta-2.2.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.17.2/jackson-dataformat-yaml-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/webjars/swagger-ui/5.10.3/swagger-ui-5.10.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/cn/hutool/hutool-all/5.8.32/hutool-all-5.8.32.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/guava/33.2.1-jre/guava-33.2.1-jre.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/failureaccess/1.0.2/failureaccess-1.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/checkerframework/checker-qual/3.42.0/checker-qual-3.42.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/errorprone/error_prone_annotations/2.26.1/error_prone_annotations-2.26.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/j2objc/j2objc-annotations/3.0.0/j2objc-annotations-3.0.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/alibaba/easyexcel/4.0.3/easyexcel-4.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/alibaba/easyexcel-core/4.0.3/easyexcel-core-4.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/alibaba/easyexcel-support/3.3.4/easyexcel-support-3.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/poi/poi/5.2.5/poi-5.2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/zaxxer/SparseBitSet/1.3/SparseBitSet-1.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-api/2.23.1/log4j-api-2.23.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/poi/poi-ooxml/5.2.5/poi-ooxml-5.2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/poi/poi-ooxml-lite/5.2.5/poi-ooxml-lite-5.2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/xmlbeans/xmlbeans/5.2.0/xmlbeans-5.2.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/virtuald/curvesapi/1.08/curvesapi-1.08.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-csv/1.11.0/commons-csv-1.11.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/ehcache/ehcache/3.10.8/ehcache-3.10.8.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/javax/cache/cache-api/1.1.1/cache-api-1.1.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/slf4j-api/2.0.16/slf4j-api-2.0.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/validation/jakarta.validation-api/3.0.2/jakarta.validation-api-3.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-security/3.3.5/spring-boot-starter-security-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/security/spring-security-config/6.3.4/spring-security-config-6.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/security/spring-security-web/6.3.4/spring-security-web-6.3.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/tingyugetc520/dt-java/0.1.2/dt-java-0.1.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okhttp3/okhttp/4.12.0/okhttp-4.12.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okio/okio/3.6.0/okio-3.6.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/squareup/okio/okio-jvm/3.6.0/okio-jvm-3.6.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib-common/1.9.25/kotlin-stdlib-common-1.9.25.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.9.25/kotlin-stdlib-jdk8-1.9.25.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib/1.9.25/kotlin-stdlib-1.9.25.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/annotations/13.0/annotations-13.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.9.25/kotlin-stdlib-jdk7-1.9.25.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/httpclient/4.5/httpclient-4.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/httpcore/4.4.16/httpcore-4.4.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/httpcomponents/httpmime/4.5/httpmime-4.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/commons-codec/commons-codec/1.16.1/commons-codec-1.16.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/commons-io/commons-io/2.5/commons-io-2.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-lang3/3.14.0/commons-lang3-3.14.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-collections4/4.4/commons-collections4-4.4.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/google/code/gson/gson/2.10.1/gson-2.10.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/mysql/mysql-connector-j/8.3.0/mysql-connector-j-8.3.0.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/github/ben-manes/caffeine/caffeine/3.1.8/caffeine-3.1.8.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/mybatis/mybatis-spring/3.0.3/mybatis-spring-3.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/io/minio/minio/8.5.17/minio-8.5.17.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/carrotsearch/thirdparty/simple-xml-safe/2.7.1/simple-xml-safe-2.7.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-annotations/2.17.2/jackson-annotations-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-core/2.17.2/jackson-core-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/com/fasterxml/jackson/core/jackson-databind/2.17.2/jackson-databind-2.17.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/bouncycastle/bcprov-jdk18on/1.78.1/bcprov-jdk18on-1.78.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/commons/commons-compress/1.27.1/commons-compress-1.27.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/xerial/snappy/snappy-java/1.1.10.7/snappy-java-1.1.10.7.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/pdfbox/pdfbox/3.0.3/pdfbox-3.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/pdfbox/pdfbox-io/3.0.3/pdfbox-io-3.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/pdfbox/fontbox/3.0.3/fontbox-3.0.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/commons-logging/commons-logging/1.3.3/commons-logging-1.3.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/projectlombok/lombok/1.18.34/lombok-1.18.34.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter/3.3.5/spring-boot-starter-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot/3.3.5/spring-boot-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/boot/spring-boot-starter-logging/3.3.5/spring-boot-starter-logging-3.3.5.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-classic/1.5.11/logback-classic-1.5.11.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/ch/qos/logback/logback-core/1.5.11/logback-core-1.5.11.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/apache/logging/log4j/log4j-to-slf4j/2.23.1/log4j-to-slf4j-2.23.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/slf4j/jul-to-slf4j/2.0.16/jul-to-slf4j-2.0.16.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/xml/bind/jakarta.xml.bind-api/4.0.2/jakarta.xml.bind-api-4.0.2.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/jakarta/activation/jakarta.activation-api/2.1.3/jakarta.activation-api-2.1.3.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/net/bytebuddy/byte-buddy/1.14.19/byte-buddy-1.14.19.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-core/6.1.14/spring-core-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
<factorypathentry kind="VARJAR" id="M2_REPO/org/springframework/spring-jcl/6.1.14/spring-jcl-6.1.14.jar" enabled="true" runInBatchMode="false"/> |
||||
|
</factorypath> |
||||
@ -0,0 +1,34 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<projectDescription> |
||||
|
<name>crm-opportunity</name> |
||||
|
<comment></comment> |
||||
|
<projects> |
||||
|
</projects> |
||||
|
<buildSpec> |
||||
|
<buildCommand> |
||||
|
<name>org.eclipse.jdt.core.javabuilder</name> |
||||
|
<arguments> |
||||
|
</arguments> |
||||
|
</buildCommand> |
||||
|
<buildCommand> |
||||
|
<name>org.eclipse.m2e.core.maven2Builder</name> |
||||
|
<arguments> |
||||
|
</arguments> |
||||
|
</buildCommand> |
||||
|
</buildSpec> |
||||
|
<natures> |
||||
|
<nature>org.eclipse.jdt.core.javanature</nature> |
||||
|
<nature>org.eclipse.m2e.core.maven2Nature</nature> |
||||
|
</natures> |
||||
|
<filteredResources> |
||||
|
<filter> |
||||
|
<id>1788308974839</id> |
||||
|
<name></name> |
||||
|
<type>30</type> |
||||
|
<matcher> |
||||
|
<id>org.eclipse.core.resources.regexFilterMatcher</id> |
||||
|
<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments> |
||||
|
</matcher> |
||||
|
</filter> |
||||
|
</filteredResources> |
||||
|
</projectDescription> |
||||
@ -0,0 +1,4 @@ |
|||||
|
eclipse.preferences.version=1 |
||||
|
encoding//src/main/java=UTF-8 |
||||
|
encoding//src/test/java=UTF-8 |
||||
|
encoding/<project>=UTF-8 |
||||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue