daShangDao_kfzgw-info/PROJECT_DESCRIPTION.md

335 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# kfzgw-info 项目技术文档
## 项目概述
**kfzgw-info** 是一个基于 Go 语言开发的桌面应用程序,主要功能是作为 **"核价软件更新器"**,自动检测、下载和更新 "核价软件"VerifyPriceApp及相关 DLL 组件。项目同时包含了与 **孔夫子旧书网kongfz.com**、**拼多多PDD**、**ERP 系统**等平台的 API 集成模块。
> 项目名称中的 "kfzgw" 推测为 "孔夫子旧书网" 的缩写KongFuZi - 古玩/旧书网)。
---
## 技术栈
| 技术 | 用途 |
|------|------|
| **Go 1.26** | 主要开发语言 |
| **Gio UI (gioui.org)** | 桌面图形界面框架 |
| **Gin** | HTTP Web 框架 |
| **Elasticsearch** | 搜索引擎客户端 |
| **Redis** | 缓存/消息队列 |
| **MySQL (go-sql-driver)** | 关系型数据库 |
| **SQLite (modernc.org/sqlite)** | 嵌入式数据库 |
| **Excelize** | Excel 文件读写 |
| **chromedp** | Chrome DevTools Protocol无头浏览器 |
| **goquery** | HTML 解析(类 jQuery |
| **gorequest** | HTTP 请求库 |
| **gozxing / qrcode / barcode** | 二维码/条码生成与识别 |
| **imaging / gg / freetype** | 图像处理与文字渲染 |
| **fasthttp** | 高性能 HTTP 客户端 |
| **YAML / INI** | 配置文件解析 |
---
## 项目结构
```
kfzgw-info/
├── walkingWithBooks.go # ▶ 主入口文件GUI + 控制台更新器)
├── main.go # 旧版入口(已全部注释)
├── main_so.go # SO/DLL 导出封装(已注释)
├── newWalkingWithBooks.go # 新版入口(已注释,未使用)
├── dyso.go # 动态加载 SO 的 HTTP 服务(已注释)
├── go.mod / go.sum # Go 模块依赖
├── version.yaml # 本地版本配置文件
├── config.ini # 应用配置文件
├── test.db # SQLite 测试数据库
├── config/ # 配置管理模块
│ ├── config.go # - 配置文件读取器(支持 JSON/YAML/INI
│ ├── configDll.go # - DLL 导出函数
│ └── config.json # - 配置文件示例
├── csv/ # CSV 文件处理模块
│ ├── csv.go # - CSV 读写(带句柄管理、自动关闭)
│ ├── newcsv.go # - 新版 CSV 处理
│ ├── csvDll.go # - DLL 导出函数
│ └── taskLog.csv # - 任务日志 CSV
├── erp/ # ERP 接口转发模块
│ └── erp.go # - API 转发GET/POST/PUT
├── es/ # Elasticsearch 模块
│ ├── es.go # - ES 客户端封装索引管理、CRUD
│ ├── esDll.go # - DLL 导出函数
│ └── test.go # - 测试文件
├── excel/ # Excel 处理模块
│ ├── excel_so.go # - Excel 合并/拆分SO 导出)
│ └── main.go # - 示例/测试
├── expressDeliveryOrder/ # 快递单号处理模块
│ └── expressDeliveryOrder.go
├── gin/ # Gin Web 框架示例
│ └── gin.go # - 简单的 HTTP 服务示例
├── goroutine-pool/ # 协程池
│ ├── goroutine_pool.go # - 通用协程池实现
│ └── goroutine_pool_test.go
├── image/ # 图片处理模块
│ ├── image.go # - 图片裁剪、缩放、水印、格式转换、二维码生成
│ ├── imageDllTest.go # - DLL 测试
│ └── imageTest.go # - 测试文件
├── kongfz/ # 孔夫子旧书网 API 模块
│ ├── kongfz.go # - 图书/商品搜索、登录、发货等 API
│ ├── kongfzDll.go # - DLL 导出函数
│ └── kongfzLao.go # - 旧版实现
├── listener/ # 文件监听器
│ ├── listener.go # - 文件系统监听
│ └── ceshi.go # - 测试
├── logger/ # 日志模块
│ ├── logger.go # - 分级日志(支持分片、滚动)
│ └── loggerDll.go # - DLL 导出函数
├── monitor/ # 监控模块
│ └── main.go # - 系统监控
├── pdd/ # 拼多多 API 模块
│ ├── pdd.go # - 拼多多开放平台 API 封装(签名、商品管理)
│ └── pddDll.go # - DLL 导出函数
├── pddTask/ # 拼多多任务模块
│ ├── pdd-task.go # - 拼多多定时任务
│ └── common/pddDll.go # - DLL 调用公共组件
├── proxy/ # 代理管理模块
│ ├── proxy.go # - 小象/尾巴代理动态切换
│ ├── proxyLao.go # - 旧版代理实现
│ └── proxy_so.go # - SO 导出函数
├── redis/ # Redis 客户端模块
│ ├── redis.go # - Redis 客户端封装
│ └── redisDll.go # - DLL 导出函数
├── sqlite/ # SQLite 模块
│ └── sqLite.go # - SQLite CRUD 示例
├── timer/ # 定时器模块
│ └── timer.go # - 时间轮定时器实现
├── xy/ # XY 模块(用途未知)
│ └── xy.go
├── dll/ # Windows DLL 文件目录
│ ├── csv.dll
│ ├── kongfz.dll
│ ├── logger.dll
│ ├── module-centerBook.dll
│ ├── module-erp.dll
│ ├── module-kongfz.dll
│ ├── module-login.dll
│ ├── module-taskPool.dll
│ ├── module-verifyPrice.dll
│ ├── picTool.dll
│ ├── proxy.dll
│ └── config/config.dll
├── so/ # Linux .so 文件目录
│ ├── erp.so
│ ├── kongfz.so
│ ├── pdd.so
│ └── xy.so
└── md/ # 各模块文档目录
├── config.md
├── csv.md
├── es.md
├── image.md
├── kongfz.md
├── logger.md
└── ...
```
---
## 模块详解
### 1. 主程序 — [walkingWithBooks.go](file:///d:/source/kfzgw-info/walkingWithBooks.go)
这是当前**实际运行的主入口文件**,提供两种运行模式:
#### GUI 模式(默认)
- 使用 **Gio UI** 框架构建桌面图形界面
- 窗口大小 800×600最小 600×400
- 显示标题、状态信息、进度条、文件信息、日志区域
- 底部控制按钮(暂停/继续/启动软件)
- 日志区域按类型显示不同颜色(信息=蓝、成功=绿、警告=黄、错误=红、下载=紫)
#### 控制台模式(`--console` 参数)
- 使用 ANSI 彩色终端输出
- 与旧版 main.go 相同的更新逻辑
#### 更新流程
```
初始化 → 检查核价软件版本 → 检查主程序并下载
→ 检查 DLL 组件版本 → 更新所有 DLL
→ 完成 → 自动/手动启动核价软件
```
---
### 2. 各模块功能
| 模块 | 包名 | 功能描述 |
|------|------|----------|
| **config** | `main` | 配置文件读取器,支持 JSON/YAML/INI 三种格式;提供 DLL 导出接口 |
| **csv** | `main` | CSV 文件的高效读写,支持句柄管理、自动关闭、线程安全 |
| **erp** | `main` | ERP 系统的 API 请求转发,支持 GET/POST/PUT |
| **es** | `main` | Elasticsearch 客户端封装,索引管理(创建/删除/查询/统计) |
| **excel** | `main` | Excel 文件的合并、拆分操作 |
| **goroutine-pool** | `main` | 通用协程池,管理和复用 goroutine |
| **image** | `main` | 图片处理:裁剪、缩放、旋转、水印、格式转换、二维码/条码生成与识别 |
| **kongfz** | `main` | 孔夫子旧书网接口:商品搜索、商品详情、登录、图片获取、快递费查询 |
| **listener** | `main` | 文件系统事件监听 |
| **logger** | `main` | 分级日志系统,支持按月/日/时/分/秒分片,按大小/数量滚动 |
| **pdd** | `main` | 拼多多开放平台 API商品管理、订单处理、签名生成 |
| **proxy** | `main` | 动态代理管理,支持小象代理、尾巴代理等多种代理类型 |
| **redis** | `main` | Redis 客户端封装,支持连接池配置 |
| **sqlite** | `main` | SQLite 嵌入式数据库的 CRUD 操作示例 |
| **timer** | `main` | 基于时间轮的定时器实现,支持任务调度 |
---
### 3. 孔夫子旧书网 API 集成(核心业务)
[kongfz.go](file:///d:/source/kfzgw-info/kongfz/kongfz.go) 封装了大量孔网 API
| 函数 | 功能 |
|------|------|
| `outLogin()` | 账号密码登录,获取 PHPSESSID Token |
| `outGetUserMsg()` | 获取用户信息ID、昵称、手机号 |
| `outGetGoodsTplMsg()` | 获取商品发布模板字段 |
| `outGetGoodsListMsgFromSelfShop()` | 查询自己的商品列表(支持分页/价格筛选) |
| `outDelGoodsFromSelfShop()` | 删除自有店铺中的商品 |
| `outAddGoods()` | 新增商品发布 |
| `outGetImageByIsbn()` | 根据 ISBN 获取图书官图/实拍图 |
| `outGetImageFilterShopId()` | 获取图片时过滤指定店铺 |
| `outGetGoodsListMsgByShopId()` | 按店铺 ID 拉取商品列表 |
| `outGetGoodsMsgByDetailUrl()` | 通过详情页 URL 获取商品信息(含快递费) |
| `outGetTopGoodsListMsg()` | 获取销量榜商品列表 |
| `FetchProductInfoWithChromedp()` | 使用无头浏览器获取店铺页动态内容 |
| `FetchBookDetailsShippingFee()` | 获取商品详情页快递费 |
---
### 4. 配置文件
#### [config.ini](file:///d:/source/kfzgw-info/config.ini)
```ini
[app]
max_retry_times = 3 # HTTP 请求最大重试次数
rate_limit_delay = 500ms # 请求间隔
size = 5 # 线程数/并发数
[proxy]
servers = http-dynamic.xiaoxiangdaili.com,... # 代理服务器列表
username = ... # 代理账号
password = ... # 代理密码
[api]
login_url = https://login.kongfz.com/... # 孔网登录接口
book_search_url = ... # 图书搜索接口
product_search_url = ... # 商品搜索接口
[server]
port = 9999 # HTTP 服务端口
[image]
target_dir = /file/goods_img/ # 图片保存路径
domain = book.center.image.buzhiyushu.cn # 图片 CDN 域名
[database]
host = 146.56.227.42:3306 # MySQL 数据库
name = newadmin
```
#### [version.yaml](file:///d:/source/kfzgw-info/version.yaml)
```yaml
verifyPriceLatestVersion: v1.0 # 本地核价软件版本号
```
---
### 5. 远程版本服务器
更新器从以下远程服务获取版本信息:
| 地址 | 用途 |
|------|------|
| `https://newverifyprice.buzhiyushu.cn/verify_price_version.json` | 核价软件主程序版本信息 |
| `http://36.212.20.113:53300/version.json` | DLL 组件版本信息 |
| `http://36.212.20.113:53300/api/downLoad` | DLL 组件下载接口 |
---
### 6. 编译与构建
项目主入口 [walkingWithBooks.go](file:///d:/source/kfzgw-info/walkingWithBooks.go) 编译为 Windows 可执行文件:
```bash
# 编译 GUI 版本
go build -o kfzgw-info.exe .
# 可通过 --console 参数切换到控制台模式
kfzgw-info.exe --console
```
部分子模块(如 `pdd`、`kongfz`、`csv`、`es`、`image`、`logger` 等)可编译为 **DLL** 供其他程序调用,通过 `//export` 注释导出 C 接口。
---
### 7. 关键依赖
```
gioui.org # GUI 框架
github.com/chromedp/chromedp # 无头浏览器操作
github.com/PuerkitoBio/goquery # HTML 解析
github.com/elastic/go-elasticsearch/v8 # ES 客户端
github.com/gin-gonic/gin # Web 框架
github.com/redis/go-redis/v9 # Redis 客户端
github.com/xuri/excelize/v2 # Excel 操作
github.com/parnurzeal/gorequest # HTTP 请求
modernc.org/sqlite # SQLite 数据库
github.com/valyala/fasthttp # 高性能 HTTP
gopkg.in/yaml.v3 # YAML 解析
gopkg.in/ini.v1 # INI 解析
```
---
## 架构特点
1. **模块化设计**:每个功能模块独立目录,部分可编译为 DLL 动态库
2. **双模式运行**:支持 GUI 桌面模式和命令行控制台模式
3. **远程版本管理**:自动检测远程版本号,增量更新
4. **安全下载机制**:使用临时文件 + 重命名策略,防止文件损坏
5. **代理支持**:内置小象/尾巴代理切换,支持爬虫场景
6. **多平台兼容**:支持 WindowsDLL和 LinuxSO的动态库加载
---
## 使用场景
- **核价软件自动更新**:图书定价系统的基础设施
- **孔夫子旧书网数据采集**:商品搜索、图片获取、价格监控
- **拼多多商品管理**:商品上架/下架/订单处理
- **ERP 系统对接**:与外部 ERP 系统的数据接口
- **图片处理服务**:批量图片处理(裁剪、水印、格式转换)