97 Commits

Author SHA1 Message Date
zhangjf
e2007d8b09 chore: 从Git追踪中移除target和.vscode目录 2026-02-20 11:02:45 +08:00
zhangjf
f292a8746f chore: 更新.gitignore忽略.mvn目录 2026-02-20 11:00:31 +08:00
zhangjf
b256989a7e chore: 添加.gitignore忽略文件 2026-02-20 10:56:01 +08:00
zhangjf
480c052ff1 feat: Docker容器化部署配置
- 添加所有后端服务的application-docker.yml配置文件
- 添加前端fund-admin和fund-mobile的Dockerfile和nginx配置
- 更新docker-compose.yml添加前端服务
- 添加.dockerignore优化构建
- 添加deploy.sh一键部署脚本
2026-02-20 10:13:52 +08:00
zhangjf
47703e40c4 feat: 移动端完善与操作日志审计功能
1. 移动端fund-mobile完善:
   - 新增项目列表页面 (project/List.vue)
   - 新增客户列表页面 (customer/List.vue)
   - 新增统一API文件 (api/index.ts)
   - 更新路由配置,新增项目和客户路由
   - 首页增加项目和客户快捷入口

2. 操作日志审计功能:
   - OperationLog实体类: 操作日志数据模型
   - OperationLogMapper: MyBatis-Plus Mapper
   - OperationLogService: 日志服务接口和实现
   - OperationLogController: 日志查询API
   - OperationLogAspect: AOP切面自动记录操作日志
   - 支持异步保存,只记录写操作(增删改)

3. 操作日志功能特性:
   - 自动拦截Controller层方法
   - 记录用户ID、用户名、操作描述、请求参数
   - 记录IP、UserAgent、操作时间、耗时
   - 支持成功/失败状态记录
   - 支持分页查询和历史日志清理
2026-02-20 09:16:00 +08:00
zhangjf
eafb783e2b feat: 定时任务与账期逾期管理功能
1. 定时任务框架:
   - 使用Spring @Scheduled实现定时任务(替代XXL-JOB简化部署)
   - @EnableScheduling启用定时任务
   - 条件配置: fund.schedule.enabled

2. 定时任务列表:
   - 逾期状态更新: 每天凌晨1点执行
   - 逾期提醒通知: 每天上午9点执行
   - 账期预警提醒: 每周一上午10点执行

3. 账期管理API:
   - GET /upcoming-due: 获取即将到期应收款列表
   - 支持指定天数内到期的应收款查询

4. 服务层增强:
   - ReceivableService.getUpcomingDueList(): 查询即将到期应收款
   - ReceivableServiceImpl: 完整实现逾期状态更新逻辑
2026-02-20 09:06:40 +08:00
zhangjf
06efab9596 feat: 支出和应收款模块新增Excel导出功能
后端:
- fund-exp: 新增ExpenseExcel导出实体、导出接口和listExpenses方法
- fund-receipt: 新增ReceivableExcel导出实体、导出接口和listReceivables方法

前端:
- fund-admin: 支出管理页面新增导出按钮
- fund-admin: 应收款管理页面新增导出按钮
- fund-admin: 新增exportExpense和exportReceivable API
2026-02-20 08:36:20 +08:00
zhangjf
ad4176ae8a docs: 更新移动端技术栈为 Vue3 + Vite5 + Vant4
- 架构设计文档:更新前端架构说明和接入层架构图
- 需求文档:更新移动端技术栈描述
- 功能清单:更新移动端模块技术栈
- 移除 UniApp 跨端架构,改为独立的 H5 移动端应用
2026-02-20 08:19:46 +08:00
zhangjf
15e7ed6f1b feat: 所有服务统一配置多租户负载均衡,清理无效配置
1. 业务服务配置(fund-cust/proj/req/exp/receipt)
   - 添加 Nacos metadata.tenant-id 配置
   - 添加 tenant.routing 配置
   - 移除无效的 feign.fund-sys.url 配置

2. 共享服务配置(fund-report/file)
   - 添加 tenant.routing.enabled: false
   - 共享服务不需要租户路由

3. Gateway 配置清理
   - 移除过时的 tenant-group-header 配置
   - 移除过时的 group-separator 配置

4. 删除 Docker 配置文件
   - 删除 fund-sys/application-docker.yml
   - 删除 fund-gateway/application-docker.yml

配置规范:
  业务服务: tenant.routing.enabled=true, metadata.tenant-id=${TENANT_ID:}
  共享服务: tenant.routing.enabled=false
2026-02-19 21:46:11 +08:00
zhangjf
8233ff8040 feat: 支持多租户专属实例(逗号分隔的租户ID列表)
功能增强:
- TENANT_ID 支持逗号分隔的多个租户 ID
- 一个实例可以服务多个指定租户

实例类型:
  共享实例:     TENANT_ID = "" (空)
  单租户专属:   TENANT_ID = "VIP_001"
  多租户专属:   TENANT_ID = "VIP_001,VIP_002,VIP_003"

路由逻辑:
  1. 解析实例 metadata.tenant-id 为租户列表
  2. 检查请求 tenantId 是否在列表中
  3. 匹配成功 → 专属实例
  4. 匹配失败 → 回退共享实例

使用场景:
  - 大客户独占实例(单租户)
  - 多个小客户共享一个实例(多租户)
  - 普通客户使用公共实例(共享)
2026-02-19 21:39:30 +08:00
zhangjf
5a2154c1a1 refactor: 简化路由逻辑,直接使用 tenantId 匹配实例
问题:tenantGroup 是 tenantId 的简单转换,造成冗余
  tenantGroup = "TENANT_" + tenantId.toUpperCase()

解决方案:
1. 直接使用 tenantId 匹配实例
   - 移除 tenantGroup 概念
   - 负载均衡器直接匹配 metadata.tenant-id

2. 简化配置
   - JWT 只需 tenantId 一个字段
   - 实例元数据只有 tenant-id

3. 前端简化
   - 请求头只需 X-Tenant-Id
   - 不再需要 X-Tenant-Group

路由规则:
  共享实例: metadata.tenant-id = "" (空)
  VIP实例:  metadata.tenant-id = "VIP_001"
  匹配逻辑: 找到匹配实例 → VIP专属,找不到 → 共享实例
2026-02-19 21:33:51 +08:00
zhangjf
e52e2ba801 refactor: 简化租户元数据,移除冗余的 tenant-id
问题:metadata 中同时配置 tenant-id 和 tenant-group,但 tenant-id 未被使用

分析:
- tenant-id: 用于数据隔离,但实际由 TenantContextHolder 提供,元数据中的值无意义
- tenant-group: 用于服务路由,负载均衡器实际只使用此字段

解决方案:
1. 移除 metadata.tenant-id 配置
2. 只保留 metadata.tenant-group
3. 更新 NacosMetadataConfig,移除 tenant-id 处理
4. 更新 docker-compose.yml,移除 TENANT_ID 环境变量

配置简化:
  修改前: tenant-id + tenant-group 两个字段
  修改后: 只有 tenant-group 一个字段

实例类型:
  共享实例: tenant-group = "" (空)
  VIP实例:  tenant-group = "TENANT_VIP_001"
2026-02-19 21:26:06 +08:00
zhangjf
330ec6dea9 refactor: 简化多租户路由配置,基于 Nacos 元数据动态匹配
问题:tenant.routing.services 配置在每个服务中重复定义 vip-tenants

解决方案:
1. TenantRoutingProperties 简化
   - 移除 services 映射(vip-tenants 列表)
   - 保留全局配置:enabled, fallback-to-shared, shared-services
   - 路由逻辑改为基于实例元数据动态匹配

2. 配置简化
   - Gateway: 只需全局配置,无需定义各服务的 vip-tenants
   - 服务实例: 只需在 Nacos metadata 中声明 tenant-group
   - 负载均衡器: 从实例 metadata 读取 tenant-group 进行匹配

3. 架构变化
   修改前:配置文件定义 vip-tenants 列表
   修改后:实例注册时声明 tenant-group,负载均衡器动态匹配

示例:
  共享实例 metadata: { tenant-group: "" }
  VIP 实例 metadata: { tenant-group: "TENANT_VIP_001" }
  请求匹配 → 路由到对应实例
2026-02-19 21:18:58 +08:00
zhangjf
2765f3f265 feat: 本地开发环境配置多租户路由
问题:fund-gateway 和 fund-sys 的 application.yml 缺少 tenant.routing 配置

修改内容:

1. fund-sys/application.yml
   - 添加 tenant.routing 配置
   - 配置 VIP 租户列表 (TENANT_VIP_001, TENANT_VIP_002)
   - 配置共享服务列表

2. fund-gateway/application.yml
   - 添加 Nacos 服务发现配置
   - 路由改为 lb:// 协议使用负载均衡
   - 添加全局跨域配置
   - 添加 tenant.routing 配置
   - 添加负载均衡日志级别
2026-02-19 21:11:08 +08:00
zhangjf
8e4afcd1a5 feat: TenantAwareLoadBalancer 整合 TenantRoutingProperties 配置
问题:TenantRoutingProperties 定义了配置但未被使用

解决方案:
1. TenantAwareLoadBalancer 注入 TenantRoutingProperties
   - 使用配置的 tenantHeader 名称
   - 使用配置的 buildTenantGroup 方法
   - 使用配置的 isSharedService 判断
   - 使用配置的 isFallbackToShared 策略

2. 新增功能
   - 支持 enabled=false 禁用租户路由
   - 共享服务跳过租户过滤
   - 可配置是否回退到共享实例

3. 更新测试适配新构造函数
2026-02-19 21:02:25 +08:00
zhangjf
2825050502 fix: 注册 TenantAwareLoadBalancer 为 Spring Bean
问题:TenantAwareLoadBalancer 类存在但未被注册为 Spring Bean

解决方案:
1. 创建 TenantLoadBalancerAutoConfig 配置类
   - @ConditionalOnProperty 启用条件配置
   - @Bean 注册 ReactorServiceInstanceLoadBalancer

2. 添加 Spring Boot 自动配置注册
   - META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
   - 注册 TenantLoadBalancerAutoConfig、NacosMetadataConfig、MybatisTenantAutoConfig
2026-02-19 20:57:09 +08:00
zhangjf
2c0f2f8952 feat: 服务资源配置文件增加多租户混合模式负载均衡配置
## application-docker.yml 更新

### fund-sys
- Nacos 元数据配置:tenant-id, tenant-group
- 租户路由配置:启用租户感知负载均衡
- VIP 租户列表定义
- 监控标签:tenant_id, tenant_group, instance_type
- 日志格式:增加 tenantId MDC

### fund-gateway
- 全局跨域配置
- 多租户路由配置(所有服务的VIP租户列表)
- 监控和日志增强

## TenantRoutingProperties 更新
- 添加 @ConfigurationProperties 支持 YAML 配置绑定
- 新增 vip-tenants 列表属性
- 新增 fallback-to-shared 回退策略属性
- 新增 getVipTenants(), isVipTenant(), isFallbackToShared() 方法
2026-02-19 20:45:03 +08:00
zhangjf
5843cc050e feat: Docker Compose配置多租户混合模式负载均衡
## 主要改动

### docker-compose.yml
- fund-sys 服务改为混合模式部署:
  - fund-sys-shared: 共享实例(8100端口),供所有租户使用
  - fund-sys-vip001: VIP_001专属实例(8101端口)
  - 预留VIP_002模板(注释状态)
- 添加TENANT_ID、TENANT_GROUP环境变量

### NacosMetadataConfig
- 支持从环境变量读取租户元数据(优先级最高)
- 动态注册租户标签到Nacos
- 区分共享实例和VIP专属实例

### Prometheus配置
- 监控共享实例和VIP实例
- 添加tenant_mode、tenant_group标签

## 混合模式说明
- 共享实例(TENANT_GROUP为空): 所有普通租户请求路由到此类实例
- VIP实例(TENANT_GROUP有值): VIP租户请求路由到专属实例
2026-02-19 20:04:21 +08:00
zhangjf
109ae29474 docs: 添加Docker构建脚本和部署指南
- scripts/docker-build.sh: Docker镜像构建脚本
  - 支持单模块构建、全部构建、docker-compose构建
  - 支持镜像源配置、镜像推送、清理功能
- doc/Docker部署指南.md: 完整部署文档
  - 环境要求、镜像源配置
  - 镜像构建方法、服务端口规划
  - 启动停止命令、故障排查
2026-02-19 19:15:56 +08:00
zhangjf
5b80e237b9 feat: Docker容器化部署和Prometheus+Grafana监控
## Docker 容器化部署

### 新增文件
- Dockerfile: 多阶段构建镜像,支持 Java 21
- docker-compose.yml: 完整服务编排配置
  - 基础设施: MySQL 8.0, Redis 7, Nacos 3.0
  - 监控: Prometheus, Grafana
  - 业务服务: Gateway + 9个微服务
- docker/.env: 环境变量配置
- docker/mysql/init/01-init.sql: 数据库初始化脚本

### Docker 特性
- 多阶段构建优化镜像大小
- 非 root 用户运行服务
- 健康检查配置
- 统一时区设置 (Asia/Shanghai)

## Prometheus + Grafana 监控

### Prometheus 配置
- docker/prometheus/prometheus.yml: 服务发现配置
- docker/prometheus/rules/alerts.yml: 告警规则
  - 服务可用性告警
  - JVM 内存告警
  - HTTP 请求告警
  - 数据库连接池告警
  - 系统资源告警

### Grafana 配置
- docker/grafana/provisioning/: 数据源和Dashboard自动导入
- docker/grafana/dashboards/fund-platform-dashboard.json
  - 服务概览面板
  - JVM 内存监控
  - 数据库连接池监控

### Spring Boot Actuator 集成
- pom.xml: 添加 spring-boot-starter-actuator 和 micrometer-registry-prometheus
- application-docker.yml: Prometheus 端点配置

## 服务端口规划
- Gateway: 8000
- fund-sys: 8100
- fund-cust: 8200
- fund-proj: 8300
- fund-req: 8400
- fund-exp: 8500
- fund-receipt: 8600
- fund-report: 8700
- fund-file: 8800
- Prometheus: 9090
- Grafana: 3000
- Nacos: 8848
2026-02-19 18:48:15 +08:00
zhangjf
d11ed1ba1e docs: 添加问题10 HikariMonitorConfig空指针异常到问题清单 2026-02-19 18:26:28 +08:00
zhangjf
39db7c8b7a fix: HikariMonitorConfig 空指针异常修复
- 添加 HikariPoolMXBean 空值检查
- 连接池未初始化时跳过监控,避免 NullPointerException
2026-02-19 18:12:18 +08:00
zhangjf
10eca3fb35 feat: 实现多租户架构完整能力
## 新增功能

### 1. 多租户核心组件
- TenantRoutingProperties: 租户路由配置属性
- TenantAwareLoadBalancer: 租户感知负载均衡器
- TenantLineHandlerImpl: MyBatis Plus 租户插件
- TenantIgnoreHelper: 忽略租户过滤工具类
- NacosMetadataConfig: Nacos 元数据自动注册

### 2. Gateway 租户过滤器
- TenantGatewayFilter: 从 JWT 提取租户信息写入请求头
- 透传 X-Tenant-Id、X-Tenant-Group、X-User-Id、X-Username

### 3. 支持的部署模式
- 一库多租户(SaaS 模式): 通过 tenant_id 字段隔离
- 一库一租户(私有化): 独立服务实例和数据库
- 混合模式: VIP 租户专属实例 + 普通租户共享实例

### 4. Nacos 3.0 适配
- 所有业务模块添加 username/password 认证配置
- 服务实例自动注册租户标签

## 问题修复
- #8: FeignClient 硬编码 URL 导致 Nacos 服务发现失效
- #9: Nacos 3.0 客户端缺少 username/password 认证配置
- fund-exp expenseType 字段类型从 Integer 改为 Long

## 测试
- TenantAwareLoadBalancerTest: 负载均衡器单元测试
- 混合模式集成测试脚本
2026-02-19 18:10:16 +08:00
zhangjf
88291b1d46 feat: 补充后端缺失接口并修复API路径不一致问题
新增接口:
- fund-sys: 登出、刷新Token、获取角色菜单
- fund-cust: 联系人管理完整CRUD
- fund-receipt: 获取应收款收款记录列表

修复问题:
- 支出类型更新接口路径改为 PUT /{id}
- 支出更新接口路径改为 PUT /{id}
- 应收款更新接口路径改为 PUT /{id}
- FundReceipt实体添加receivableId字段
2026-02-18 08:19:13 +08:00
zhangjf
b3ef6d89f1 feat: 添加前端管理平台fund-admin并优化后端接口
- 新增fund-admin前端项目(Vue3 + TypeScript + Element Plus)
  - 登录认证、用户信息获取
  - 系统管理:用户、角色、部门、菜单
  - 客户管理、项目管理、需求工单
  - 支出管理、应收款管理
  - Dashboard首页
  - 浅色系侧边栏菜单、面包屑导航

- fund-sys: 添加获取用户信息接口
- fund-exp: 添加支出类型分页接口、修复路由顺序
- fund-proj: 修复路由顺序(/page放于/{id}之前)
- fund-receipt: 新增应收款管理功能
2026-02-17 20:35:18 +08:00
zhangjf
33d7cc2145 feat: 新增支出类型管理模块
- 新增 ExpenseType 实体类
- 新增 ExpenseTypeMapper 和 ExpenseTypeDataService
- 新增 ExpenseTypeDTO 和 ExpenseTypeVO
- 新增 ExpenseTypeService 业务服务层(支持树形结构)
- 新增 ExpenseTypeController REST API
- 数据库创建 expense_type 表并插入初始数据(5个一级类型+12个二级类型)
- API测试通过:树形查询、子类型查询、创建类型
2026-02-17 17:12:02 +08:00
zhangjf
0c87462b68 fix: 修复fund-req/fund-exp/fund-receipt模块的mybatis-plus依赖和数据库配置 2026-02-17 16:42:21 +08:00
zhangjf
919ae58b10 fix: 使用mybatis-plus-spring-boot3-starter兼容Spring Boot 3.x 2026-02-17 16:12:57 +08:00
zhangjf
5ebbb13a51 fix: 修复API测试中发现的问题
## 问题修复

### 1. 上下文拦截器
- ContextInterceptor: 从HTTP Header提取租户ID和用户ID到ThreadLocal
- WebMvcConfig: 注册拦截器到Spring MVC

### 2. 数据库配置
- fund-cust/application.yml: 修复MySQL密码默认值
- fund-proj/application.yml: 修复MySQL密码默认值

### 3. Gateway配置
- application.yml: 删除空的Sentinel datasource配置
- SentinelRuleConfig: 删除重复的sentinelGatewayFilter Bean

### 4. 数据库表
- requirement.sql: 修复主键列名为id,与BaseEntity保持一致

### 5. MyBatis-Plus依赖
- fund-cust/pom.xml: 使用mybatis-plus-spring-boot3-starter
- fund-proj/pom.xml: 使用mybatis-plus-spring-boot3-starter
2026-02-17 16:12:46 +08:00
zhangjf
6d06a361fe feat: 客户管理和项目管理模块完善更新接口
## 客户管理模块
- CustomerUpdateDTO: 客户更新DTO
- CustomerService: 新增updateCustomer方法
- CustomerServiceImpl: 实现客户更新逻辑
- CustomerController: 新增PUT /api/v1/customer/{id}接口

## 项目管理模块
- ProjectUpdateDTO: 项目更新DTO
- ProjectService: 新增updateProject方法
- ProjectServiceImpl: 实现项目更新逻辑
- ProjectController: 新增PUT /api/v1/project/{id}接口

## 功能特性
- 更新时检查编码唯一性(排除自身)
- 支持状态更新
- 自动记录更新人和更新时间
2026-02-17 15:41:58 +08:00
zhangjf
075525d577 feat: 需求工单管理模块完整实现
## 新增功能

### 需求工单实体层
- Requirement.java: 需求工单实体类
- RequirementMapper.java: MyBatis-Plus Mapper接口
- RequirementDataService.java: 数据访问服务

### 业务层
- RequirementDTO.java: 数据传输对象
- RequirementVO.java: 视图对象
- RequirementService.java: 业务服务实现

### 接口层
- RequirementController.java: REST API接口
  - GET /api/v1/requirement/list - 分页查询
  - GET /api/v1/requirement/{id} - 查询详情
  - POST /api/v1/requirement - 创建需求
  - PUT /api/v1/requirement/{id} - 更新需求
  - DELETE /api/v1/requirement/{id} - 删除需求
  - PUT /api/v1/requirement/{id}/status - 更新状态
  - PUT /api/v1/requirement/{id}/progress - 更新进度

### 数据库
- requirement.sql: 建表SQL脚本
2026-02-17 15:34:40 +08:00
zhangjf
da445a44de feat: D.3/F.1/F.3任务实施 - Nacos配置中心/读写分离/索引优化
## D.3 Nacos统一配置中心
- 添加spring-cloud-starter-alibaba-nacos-config依赖
- 创建bootstrap.yaml配置文件
- DynamicConfig: @RefreshScope动态配置刷新示例

## F.1 ShardingSphere读写分离
- 添加shardingsphere-jdbc-core依赖
- sharding-config.yaml: 读写分离配置示例
- 支持主从切换、负载均衡策略

## F.3 数据库索引优化
- db-index-optimization.sql: 全库索引优化脚本
- 用户/角色/菜单/部门表索引
- 用款/支出/收款表索引
- 复合索引优化常用查询场景
2026-02-17 15:14:19 +08:00
zhangjf
23c8f81ebd feat: P3任务实施 - Sentinel熔断降级/HikariCP优化/AES加密
## 新增功能

### D.2 Sentinel熔断降级
- SentinelConfig: 自定义熔断降级响应
- SentinelRuleConfig: 网关流控规则配置
- 添加sentinel依赖到fund-gateway

### F.2 HikariCP连接池优化
- 完善HikariCP配置参数
- HikariMonitorConfig: 连接池监控配置
- 每5分钟打印连接池状态

### H.3 敏感数据加密
- AESUtils: AES-256-GCM加密工具类
- 支持加密/解密/手机号脱敏/身份证脱敏/银行卡脱敏
- 使用SHA-256生成密钥

### 单元测试
- AESUtilsTest: 10个测试用例验证加密功能
- 测试覆盖: 加密解密/中文/长文本/错误密钥/多次加密/脱敏
2026-02-17 15:06:22 +08:00
zhangjf
5d4cdd5c33 fix: RateLimitConfig添加@Primary注解解决多KeyResolver冲突 2026-02-17 14:55:25 +08:00
zhangjf
281bbc992d feat: 实现资金平台核心功能模块
## 新增功能

### Gateway增强 (P0)
- GlobalLogFilter: 全局日志过滤器,生成TraceId
- JwtAuthFilter: JWT鉴权过滤器,白名单机制
- RateLimitConfig: 基于Redis的限流配置

### 权限管理模块 (P1/P3)
- A.1 用户管理: UserDTO/UserVO/UserService/UserController
- A.2 角色管理: RoleDTO/RoleVO/RoleService/RoleController
- A.3 菜单管理: MenuDTO/MenuVO/MenuService/MenuController
- A.4 部门管理: DeptDTO/DeptVO/DeptService/DeptController

### 业务模块 (P1/P3)
- B.1 fund-req用款申请: 完整审批流程
- B.2 fund-exp支出管理: 支付确认流程
- B.3 fund-receipt收款管理: 确认核销流程

### 服务治理 (P1/P2)
- D.1 Nacos服务注册: 所有服务集成Nacos
- I.1 Redis缓存: RedisService/RedisConfig
- E.1 ELK日志: logback-spring.xml JSON格式

## 技术栈
- Spring Cloud Gateway 4.0.0
- Spring Cloud Alibaba 2023.0.0
- MyBatis-Plus 3.5.5
- JWT (jjwt 0.11.5)
- Redis + Lettuce
2026-02-17 14:30:04 +08:00
zhangjf
a17307a96e feat: 完成资金服务平台六步实施 - 数据库初始化+服务启动+网关配置
本次提交包含:
1. 11个Maven模块全部创建并编译通过
2. 4个数据库初始化脚本(14张表)
3. fund-sys服务启动验证
4. Gateway路由配置完成
5. API端到端测试通过

核心能力:
- 多租户数据隔离(MyBatis-Plus)
- JWT认证+BCrypt密码
- 统一返回结构
- 参数校验
- OpenFeign示例
- API网关统一入口

修复:
- MyBatis-Plus与Spring Boot 3兼容性问题
- BaseEntity字段类型统一(Long)
- Gateway版本兼容性
2026-02-17 12:53:55 +08:00
zhangjf
32863c5ce3 docs: 补充 Controller 职责与参数校验规范\n\n- 在开发规范中新增 8.4 Controller 与请求参数校验规范\n- 明确 Controller 只负责数据接收/校验、调用业务Service和封装返回结果\n- 建议使用 @Valid/@Validated + @NotBlank/@NotNull 等注解做必填校验\n- 提供登录接口参数校验示例和全局异常处理示例 2026-02-17 10:22:58 +08:00
zhangjf
6e75d23f1e docs: 增补 MyBatis-Plus 使用规范\n\n- 明确 ServiceImpl 仅负责数据访问,不承载业务逻辑\n- 约定数据服务类命名为 XxxDataService,业务服务命名为 XxxService 等\n- 禁止在 MyBatis ServiceImpl 中使用 @Slf4j,避免与 MyBatis Log 冲突\n- 建议将 Entity/Mapper/ServiceImpl 封装在独立 data 包下,与业务服务层物理隔离 2026-02-17 10:00:23 +08:00
zhangjf
2c22213326 docs: 补充 OpenFeign 参数对象管理策略\n\n- 在 2.3 章节新增 2.3.6 参数对象(DTO)管理策略\n- 约定通用参数对象放在 fund-common 独立模块\n- 领域业务参数对象按服务分模块管理,避免跨模块 Java 类型耦合\n- 明确消费方可定义本地 DTO 并在 Service 层做映射\n- 修复技术架构章节标题被覆盖的问题 2026-02-17 09:51:05 +08:00
zhangjf
cf0db27bc5 docs: 补充模块通信方式说明
新增内容:
- 2.3 模块通信方式章节
  - 2.3.1 基础服务 - Maven 依赖方式
  - 2.3.2 业务服务 - OpenFeign 通信方式
  - 2.3.3 通信链路追踪
  - 2.3.4 通信架构图
  - 2.3.5 通信方式选择标准

关键说明:
✓ fund-common 等基础服务采用 Maven 依赖方式
✓ 业务服务间采用 OpenFeign 进行 HTTP 通信
✓ 自动传递租户ID、用户信息、链路追踪ID
✓ 提供完整的代码示例和架构图
✓ 明确反模式,避免错误使用
2026-02-17 09:28:37 +08:00
zhangjf
297ea8e259 chore: 删除开发规则清单文档
按照规范,不应主动创建文档文件
2026-02-17 09:22:53 +08:00
zhangjf
32abc57338 feat: 添加开发规则清单和完善前后端配置
主要变更:
1. 开发规范文档
   - 新增《开发规则清单.md》,涵盖技术栈、Maven配置、Lombok规范等
   - 记录 Lombok 在 Java 21 + Spring Boot 3 中的已知问题
   - 建立代码生成和开发流程规范

2. 前端功能增强
   - 新增系统配置管理页面(sysConfig.vue)
   - 新增数据字典管理页面(sysDict.vue)
   - 新增财务收据管理页面(receipt.vue)
   - 更新登录认证 API 配置

3. Docker 部署配置
   - 新增应用容器配置(docker-compose.yml)
   - 新增 Nginx 反向代理配置
   - 新增 ELK 日志收集配置(Elasticsearch + Logstash + Filebeat)

4. 性能测试工具
   - 新增 JMeter 测试计划(fundplatform-test-plan.jmx)
   - 新增性能测试执行脚本

5. 环境配置更新
   - 更新 .env 环境变量配置
   - 同步 fundplatform 子模块最新提交
2026-02-17 09:19:14 +08:00
zhangjf
efd1810e11 feat: UniApp移动端核心页面全部完成
新增页面:
1. receipt/add.vue (535行) - 收款录入
   * 金额输入(渐变样式)
   * 收款方式选择(银行/支付宝/微信/现金/支票)
   * 客户/项目关联选择
   * 多图上传(最多3张)
   * 图片预览和删除

2. customer/list.vue (503行) - 客户列表
   * 搜索功能
   * 等级筛选(A/B/C级)
   * 下拉刷新/上拉加载
   * 客户卡片(头像/等级/统计)
   * 一键拨号

3. customer/detail.vue (529行) - 客户详情
   * 基本信息展示
   * 合作统计(项目/合同/收支)
   * 时间轴记录
   * 联系功能(电话/邮件)

4. project/list.vue (512行) - 项目列表
   * 状态筛选(未启动/进行中/已完成/已暂停)
   * 进度条展示
   * 财务统计(合同/已收/未收)
   * 下拉刷新/上拉加载

5. project/detail.vue (569行) - 项目详情
   * 项目基本信息
   * 进度圆环展示
   * 项目阶段时间轴
   * 财务情况统计
   * 项目成员展示

6. my/index.vue (434行) - 个人中心
   * 用户信息卡片(渐变背景)
   * 快捷功能入口
   * 功能菜单列表
   * 消息角标
   * 退出登录

总代码量:3082行

功能特性:
- 完整的移动端UI设计
- 与后端API对接
- JWT认证集成
- 图片上传功能
- 下拉刷新/上拉加载
- 电话拨打集成
2026-02-16 11:40:19 +08:00
zhangjf
b38940cf83 docs: 部署文档添加移动端发布和访问说明
更新:
- deploy.sh: 添加移动端部署命令
  * mobile dev - 启动开发服务器
  * mobile h5 - 构建H5版本
  * mobile mp-weixin - 构建微信小程序
  * mobile app - 构建App
  * 服务启动时显示移动端访问地址

新增:
- MOBILE_DEPLOY.md: 移动端部署指南(173行)
  * 支持平台说明(H5/小程序/App)
  * 快速部署步骤
  * 各平台构建和发布流程
  * 配置说明和常见问题

访问地址:
- H5: http://localhost/mobile
- 开发调试: cd fund-mobile && npm run dev:h5
2026-02-16 11:28:40 +08:00
zhangjf
515590477b feat: UniApp移动端项目初始化及核心页面开发
新增:
- fund-mobile/: UniApp移动端项目(Vue3 + TypeScript)
- manifest.json: 应用配置(支持H5/小程序/App)
- pages.json: 页面路由及TabBar配置
- App.vue: 应用入口,登录状态检查

核心页面:
- login/index.vue: 登录页面(193行)
  * 渐变背景设计
  * JWT登录集成
  * 本地存储token

- index/index.vue: 首页(338行)
  * 数据概览卡片(今日收支/待收付款)
  * 快捷操作入口
  * 最近收支列表

- expense/add.vue: 支出录入(339行)
  * 表单验证
  * 图片上传(拍照/相册)
  * 关联项目选择

配置:
- config/api.ts: API接口地址配置
- utils/request.ts: 请求拦截封装

技术栈:
- Vue 3 Composition API
- TypeScript
- UniApp跨端框架
- SCSS样式

支持平台:
- H5
- 微信小程序
- App(Android/iOS)
2026-02-16 11:26:16 +08:00
zhangjf
67832bd108 fix: 前端模块完整性修复 2026-02-16 10:40:13 +08:00
zhangjf
0eae7f2aaf feat: 移动端适配(响应式优化) 2026-02-16 10:17:01 +08:00
zhangjf
c7904a9f8b docs: 同步文件上传管理模块文档
更新内容:

1. API接口文档.md
   - 新增「十六、文件管理接口」章节(194行)
   - 7个核心接口文档:
     * 16.1 上传文件(multipart/form-data)
     * 16.2 分页查询文件列表
     * 16.3 根据业务类型和ID查询文件列表
     * 16.4 获取文件详情
     * 16.5 删除文件
     * 16.6 获取文件访问URL
     * 16.7 文件类型说明(支持的MIME类型)
   - 完整的请求参数、响应示例、字段说明
   - 文件类型白名单、大小限制说明
   - 调整附录章节编号为「十七」

2. 资金服务平台 FundPlatform 功能清单.md
   - 新增「4.1.3 文件管理」章节
   - 标记文件管理功能为已完成 
   - 添加实现状态说明:
     * 后端:FileRecord + FileRecordMapper + FileService + FileController
     * 前端:file.js + file.vue
     * 功能清单:12大功能点
     * 支持文件类型、存储方式、业务关联

文档与代码同步完成!
2026-02-16 09:59:21 +08:00
zhangjf
7fe78d6c19 feat: 文件上传管理模块前端实现
前端实现:
- file.js: API接口封装(68行,6个接口)
  - uploadFile(): 上传文件(multipart/form-data)
  - getFileList(): 分页查询
  - getFileListByBusiness(): 按业务查询
  - getFileById(): 查询详情
  - deleteFile(): 删除文件
  - getFileUrl(): 获取URL

- file.vue: 文件管理页面(403行)
  - 搜索功能:文件名、业务类型、关联业务ID
  - 表格展示:文件ID、文件名(链接)、业务类型标签、关联ID、大小、类型、上传人、时间
  - 上传功能:el-upload组件、业务类型选择、关联ID输入
  - 预览功能:图片预览、PDF预览、其他文件提示
  - 下载功能:获取URL后下载
  - 删除功能:确认后删除

技术特点:
- 文件上传(multipart/form-data)
- 文件大小格式化(B/KB/MB/GB)
- 业务类型标签(合同/收款/支出/其他)
- 图片/PDF预览
- 文件选择对话框

模块状态: 完整(前端+后端)
2026-02-16 09:57:31 +08:00
zhangjf
c184e649ee docs: 同步人员分配模块文档
更新内容:

1. API接口文档.md
   - 新增「四、人员分配管理接口」章节(159行)
   - 5个核心接口文档:
     * 4.1 分页查询用户分配列表(支持多条件过滤)
     * 4.2 根据部门ID查询用户列表
     * 4.3 分配用户到部门和岗位
     * 4.4 批量分配用户
     * 4.5 移除用户分配
   - 完整的请求参数、响应示例、字段说明
   - 包含部门名称、岗位名称的VO结构
   - 调整后续所有章节编号(五~十六)

2. 资金服务平台 FundPlatform 功能清单.md
   - 标记「人员分配(部门人员配置)」为已完成 
   - 添加实现状态说明:
     * 后端:UserAssignmentVO + UserAssignmentService + UserAssignmentController
     * 前端:userAssignment.js + userAssignment.vue
     * 功能清单:8大功能点
     * 批量分配、未分配筛选、职位管理

文档与代码同步完成!
2026-02-16 09:51:56 +08:00