projectx/cmd/erp.go
2025-06-14 21:12:52 +08:00

105 lines
2.4 KiB
Go
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.

package cmd
import (
"fmt"
"log"
"net/http"
"runtime"
"time"
"management/internal/erpserver"
"management/internal/pkg/config"
"management/internal/pkg/mid"
"github.com/drhin/logger"
"github.com/fvbock/endless"
"github.com/spf13/cobra"
)
var configPath string
// erpCmd 代表erp命令
var erpCmd = &cobra.Command{
Use: "erp",
Short: "启动 ERP 管理服务器",
Long: `启动 ERP 管理服务器,可根据指定配置文件加载服务配置。
示例:
# 使用默认配置文件启动服务
./management erp
# 使用自定义配置文件启动服务
./management erp -c config.prod.yaml
该命令会初始化配置、日志系统,然后启动 HTTP 服务器监听指定端口。在 Windows 系统上使用标准的 http.Server其他系统使用 endless 实现热重启。
`,
Run: func(cmd *cobra.Command, args []string) {
if err := runErp(); err != nil {
log.Fatalf("run erp failed: %v", err)
}
},
}
func runErp() error {
conf, err := config.New(configPath)
if err != nil {
return err
}
l, err := logger.NewDevelopment()
if err != nil {
return err
}
app, fn, err := erpserver.NewWire(conf, l)
if err != nil {
return err
}
defer fn()
// database seed
if err := app.Seed.Run(); err != nil {
return err
}
// 初始化审计缓冲器
mid.InitAuditBuffer(app.AuditLogService, l)
address := fmt.Sprintf("%s:%d", conf.App.Host, conf.App.Port)
log.Printf("Starting manage server on %s", address)
if runtime.GOOS == "windows" {
s := &http.Server{
Addr: address,
Handler: app.Router,
ReadTimeout: 20 * time.Second,
WriteTimeout: 20 * time.Second,
MaxHeaderBytes: 1 << 20,
}
return s.ListenAndServe()
} else {
s := endless.NewServer(address, app.Router)
s.ReadHeaderTimeout = 20 * time.Second
s.WriteTimeout = 20 * time.Second
s.MaxHeaderBytes = 1 << 20
return s.ListenAndServe()
}
//return nil
}
func init() {
rootCmd.AddCommand(erpCmd)
// 在这里,您将定义您的标志和配置设置。
// Cobra支持适用于此命令的持久标志
// 以及所有子命令,例如:
// erpCmd.PersistentFlags().String("foo", "", "A help for foo")
// Cobra支持仅在执行以下命令时运行的本地标志
// 直接调用,例如:
// erpCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
erpCmd.Flags().StringVarP(&configPath, "config", "c", "configs/config.dev.yaml", "custom config file")
}