Files
bj_power/bj_power_mes/bj_power_mes_default.go
T

142 lines
3.1 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.
//go:build !windows
package main
import (
"errors"
"flag"
"fmt"
"io/fs"
"log/slog"
"net/http"
"os"
"os/signal"
"path/filepath"
"syscall"
"bj_power_mes/internal/handler"
"bj_power_mes/internal/middleware"
xhttp "bj_power_mes/common/httpx"
xlog "bj_power_mes/common/logx"
"bj_power_mes/internal/config"
"bj_power_mes/internal/svc"
"github.com/dromara/carbon/v2"
"github.com/pkg/browser"
"github.com/zeromicro/go-zero/core/conf"
"github.com/zeromicro/go-zero/core/logx"
"github.com/zeromicro/go-zero/rest"
"github.com/zeromicro/go-zero/rest/httpx"
)
// macOS/Linux 无互斥锁支持,直接返回成功
var ErrAlreadyExists = errors.New("already exists")
const AppName = "bj_power_mes"
var configFile = flag.String("f", "etc/bj_power_mes-api.yaml", "the config file")
var AppPath, _ = filepath.Abs(os.Args[0])
var baseUrl string
func main() {
flag.Parse()
// 业务影响:所有时间显示使用北京时间
carbon.SetDefault(carbon.Default{
Layout: carbon.DateTimeLayout,
Timezone: carbon.PRC,
Locale: "zh-CN",
WeekStartsAt: carbon.Monday,
})
var c config.Config
conf.MustLoad(*configFile, &c)
baseUrl = fmt.Sprintf("http://127.0.0.1:%d", c.Port)
logger := xlog.NewLogger(c.Logger)
xlog.SetDefault(logger)
logx.SetWriter(logger)
// 业务影响:初始化数据库连接、PLC 连接
svcCtx := svc.NewServiceContext(c)
var publicFS http.FileSystem
if _, err := os.Stat("public"); err == nil {
publicFS = http.Dir("public")
} else {
sub, _ := fs.Sub(public, "public")
publicFS = http.FS(sub)
}
spaHandler := xhttp.NewNotFoundHandler(publicFS)
server := rest.MustNewServer(
c.RestConf,
rest.WithCors("*"),
rest.WithNotFoundHandler(spaHandler),
)
logx.DisableStat()
logx.SetWriter(logger)
defer server.Stop()
handler.RegisterHandlers(server, svcCtx)
// 写操作审计中间件(兜底覆盖所有写接口)
server.Use(middleware.WriteAudit(svcCtx))
// 业务影响:统一错误响应格式,前端不用处理多种错误格式
httpx.SetValidator(xhttp.NewValidator())
httpx.SetOkHandler(xhttp.OkJsonCtx)
httpx.SetErrorHandlerCtx(xhttp.ErrorCtx)
fmt.Printf("Starting server at %s:%d...\n", c.Host, c.Port)
slog.Info(fmt.Sprintf("Starting server at %s:%d...", c.Host, c.Port))
go server.Start()
_ = browser.OpenURL(baseUrl)
// 阻塞等待退出信号(Ctrl+C / kill
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan, syscall.SIGINT, syscall.SIGTERM)
<-signalChan
slog.Info("shutting down server...")
server.Stop()
}
// macOS/Linux 下 Windows 特有功能的空实现
var mutex uintptr
func createMutex(name string) (uintptr, error) {
return 1, nil
}
var procCloseHandle = closeHandleHelper{}
type closeHandleHelper struct{}
func (closeHandleHelper) Call(uintptr) uintptr {
return 0
}
func MessageBox(title, message string) {
fmt.Printf("[Dialog] %s: %s\n", title, message)
}
func setAutoStart(name, path string) error {
slog.Info("setAutoStart not supported on macOS")
return nil
}
func removeAutoStart(name string) error {
slog.Info("removeAutoStart not supported on macOS")
return nil
}
func isAutoStartEnabled(name string) bool {
return false
}