- 新增项目文档和 Docker 配置 - 添加 README.md 和 TODO.md 项目文档 - 为各服务添加 Dockerfile 和 docker-compose 配置 - 重构后端架构 - 新增 adapter 层(HTTP/Python 适配器) - 新增 repository 层(数据访问抽象) - 新增 router 模块统一管理路由 - 新增账单处理 handler - 扩展前端 UI 组件库 - 新增 Calendar、DateRangePicker、Drawer、Popover 等组件 - 集成 shadcn-svelte 组件库 - 增强分析页面功能 - 添加时间范围筛选器(支持本月默认值) - 修复 DateRangePicker 默认值显示问题 - 优化数据获取和展示逻辑 - 完善分析器服务 - 新增 FastAPI 服务接口 - 改进账单清理器实现
49 lines
1.3 KiB
Go
49 lines
1.3 KiB
Go
// Package service 业务逻辑层
|
|
package service
|
|
|
|
import (
|
|
"billai-server/adapter"
|
|
)
|
|
|
|
// CleanOptions 清洗选项(保持向后兼容)
|
|
type CleanOptions = adapter.CleanOptions
|
|
|
|
// CleanResult 清洗结果(保持向后兼容)
|
|
type CleanResult = adapter.CleanResult
|
|
|
|
// RunCleanScript 执行清洗脚本(使用适配器)
|
|
// inputPath: 输入文件路径
|
|
// outputPath: 输出文件路径
|
|
// opts: 清洗选项
|
|
func RunCleanScript(inputPath, outputPath string, opts *CleanOptions) (*CleanResult, error) {
|
|
cleaner := adapter.GetCleaner()
|
|
return cleaner.Clean(inputPath, outputPath, opts)
|
|
}
|
|
|
|
// DetectBillTypeFromOutput 从脚本输出中检测账单类型
|
|
// 保留此函数以兼容其他调用
|
|
func DetectBillTypeFromOutput(output string) string {
|
|
if containsSubstring(output, "支付宝") {
|
|
return "alipay"
|
|
}
|
|
if containsSubstring(output, "微信") {
|
|
return "wechat"
|
|
}
|
|
return ""
|
|
}
|
|
|
|
// containsSubstring 检查字符串是否包含子串
|
|
func containsSubstring(s, substr string) bool {
|
|
return len(s) >= len(substr) && (s == substr || len(substr) == 0 ||
|
|
(len(s) > 0 && len(substr) > 0 && findSubstring(s, substr)))
|
|
}
|
|
|
|
func findSubstring(s, substr string) bool {
|
|
for i := 0; i <= len(s)-len(substr); i++ {
|
|
if s[i:i+len(substr)] == substr {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|