Files
kami_scripts/order/main.go
danial e245ab8d47 feat(order): 优化订单处理逻辑并添加新功能
- 更新 .gitignore 文件,添加日志和IDE相关目录
- 修改 config.yaml,更新提交URL和商户配置- 在 interfaces.go 中添加新方法并修改现有方法
- 优化 logger_adapter.go 中的日志记录功能
- 调整 main.go 中的定时任务间隔
- 在 order.go 中实现新的 FindRandomFailedOrders 方法
- 更新 order_service.go,添加 CSV 文件处理逻辑
- 新增 road.go 文件,实现 FindRoadByRoadUid 方法
- 修改 submit_order.go,更新订单提交逻辑
2025-06-09 23:42:06 +08:00

103 lines
2.0 KiB
Go

package main
import (
"context"
"fmt"
"log"
"os"
"os/signal"
"syscall"
"time"
"order/internal/client"
"order/internal/config"
"order/internal/interfaces"
"order/internal/repositories"
"order/internal/services"
"order/internal/utils"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var (
appLogger interfaces.Logger
db *gorm.DB
)
func init() {
// 加载配置
cfg := config.GetConfig()
// 初始化日志
zapLogger, err := utils.NewLogger(cfg)
if err != nil {
log.Fatalf("初始化日志失败: %v", err)
}
defer func() {
_ = zapLogger.Sync()
}()
// 创建日志适配器
appLogger = utils.NewZapLoggerAdapter(zapLogger)
// 初始化数据库连接
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
cfg.Database.Username,
cfg.Database.Password,
cfg.Database.Host,
cfg.Database.Port,
cfg.Database.DBName,
)
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: utils.NewGormLogger(appLogger),
})
if err != nil {
appLogger.Fatal("连接数据库失败", "error", err)
}
}
func main() {
// 加载配置
cfg := config.GetConfig()
// 创建仓储实例
orderRepo := repositories.NewOrderRepository(db)
// 创建订单发送器(这里需要实现具体的发送逻辑)
orderSender := client.NewMockOrderSender(appLogger)
// // 创建订单服务
orderService := services.NewOrderService(orderRepo, orderSender, appLogger, cfg)
// 创建上下文
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
// 处理信号
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
// 启动定时任务
ticker := time.NewTicker(time.Duration(cfg.Schedule.Interval) * time.Second)
defer ticker.Stop()
go func() {
for {
select {
case <-ticker.C:
if err := orderService.ProcessOrders(ctx); err != nil {
appLogger.Error("处理订单失败", "error", err)
}
case <-ctx.Done():
return
}
}
}()
// 等待信号
<-sigChan
appLogger.Info("正在关闭服务...")
}