Files
bj_power/bj_power_workstation/internal/handler/auth.go
T
SunYF 1cc93795ce feat(mes): 添加定时同步可生产数量到WMS及BOM项相关标准字段
- 在main.go中添加定时任务每10分钟同步可生产数量到WMS系统
- 为BomItem实体添加relatedStandard字段及相关CRUD方法
- 为InspectionRecord实体添加reportNo、materialCode、materialName等字段
- 更新ent schema确保新字段的验证和默认值设置
- 添加必要的数据库迁移和字段映射逻辑
2026-09-17 12:49:07 +08:00

89 lines
2.8 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 handler
import (
"net/http"
"strings"
"time"
"bj_power_workstation/internal/svc"
)
func healthHandler(ctx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
if err := ctx.Store.Ping(); err == nil {
ok(w, map[string]any{
"status": "UP",
"time": time.Now().Format("2006-01-02 15:04:05"),
"service": "bj_power_workstation",
})
return
}
fail(w, http.StatusServiceUnavailable, "本地数据库不可用")
}
}
// loginHandler 登录代理 MES /api/internal/station/login(块1:用户体系来源于 MES)。
// 前端提交 {username, password, stationNo}MES 校验工位终端密码 + 工位权限并签发同密钥 JWT。
// 响应体原样透传({code,message,data:{accessToken,expireAt,user,stations,stationNo}})。
func loginHandler(ctx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req struct {
Username string `json:"username"`
Password string `json:"password"`
StationNo int `json:"stationNo"`
}
if err := parseJSON(r, &req); err != nil {
fail(w, http.StatusBadRequest, "参数错误")
return
}
if strings.TrimSpace(req.Username) == "" || req.Password == "" {
fail(w, http.StatusBadRequest, "用户名和密码必填")
return
}
body, _, err := ctx.Mes.Post("/api/internal/station/login", map[string]any{
"username": strings.TrimSpace(req.Username),
"password": req.Password,
"stationNo": req.StationNo,
})
if err != nil {
fail(w, http.StatusBadGateway, "MES 服务不可达:"+errString(err))
return
}
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.WriteHeader(http.StatusOK)
_, _ = w.Write(body)
}
}
// logoutHandler POST /api/station/logout 退出登录:转发 MES 记录"工位终端退出"操作日志。
// MES 不可达时静默忽略(日志不阻塞本地退出)。
func logoutHandler(ctx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req struct {
Username string `json:"username"`
StationNo int `json:"stationNo"`
}
_ = parseJSON(r, &req)
username := strings.TrimSpace(req.Username)
if username != "" {
no := req.StationNo
if no <= 0 {
no = ctx.Config.Station.StationNo
}
go func(u string, n int) {
_, _, _ = ctx.Mes.Post("/api/internal/station/logout", map[string]any{"username": u, "stationNo": n})
}(username, no)
}
ok(w, nil)
}
}
// configHandler GET /api/config 返回工位配置:固定工位号 stationNo(由 yaml 配置在启动时加载,终端不可修改)。
func configHandler(ctx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
ok(w, map[string]any{
"stationNo": ctx.Config.Station.StationNo,
})
}
}