13 KiB
13 KiB
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
这是当前实际运行的主入口文件,提供两种运行模式:
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 封装了大量孔网 API:
| 函数 | 功能 |
|---|---|
outLogin() |
账号密码登录,获取 PHPSESSID Token |
outGetUserMsg() |
获取用户信息(ID、昵称、手机号) |
outGetGoodsTplMsg() |
获取商品发布模板字段 |
outGetGoodsListMsgFromSelfShop() |
查询自己的商品列表(支持分页/价格筛选) |
outDelGoodsFromSelfShop() |
删除自有店铺中的商品 |
outAddGoods() |
新增商品发布 |
outGetImageByIsbn() |
根据 ISBN 获取图书官图/实拍图 |
outGetImageFilterShopId() |
获取图片时过滤指定店铺 |
outGetGoodsListMsgByShopId() |
按店铺 ID 拉取商品列表 |
outGetGoodsMsgByDetailUrl() |
通过详情页 URL 获取商品信息(含快递费) |
outGetTopGoodsListMsg() |
获取销量榜商品列表 |
FetchProductInfoWithChromedp() |
使用无头浏览器获取店铺页动态内容 |
FetchBookDetailsShippingFee() |
获取商品详情页快递费 |
4. 配置文件
config.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
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 编译为 Windows 可执行文件:
# 编译 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 解析
架构特点
- 模块化设计:每个功能模块独立目录,部分可编译为 DLL 动态库
- 双模式运行:支持 GUI 桌面模式和命令行控制台模式
- 远程版本管理:自动检测远程版本号,增量更新
- 安全下载机制:使用临时文件 + 重命名策略,防止文件损坏
- 代理支持:内置小象/尾巴代理切换,支持爬虫场景
- 多平台兼容:支持 Windows(DLL)和 Linux(SO)的动态库加载
使用场景
- 核价软件自动更新:图书定价系统的基础设施
- 孔夫子旧书网数据采集:商品搜索、图片获取、价格监控
- 拼多多商品管理:商品上架/下架/订单处理
- ERP 系统对接:与外部 ERP 系统的数据接口
- 图片处理服务:批量图片处理(裁剪、水印、格式转换)