fix: rebuild MES as compilable go-zero+ent backend (renamed bj_power_mes), restore 3 workstation projects from pristine original, align naming; all Go projects go build clean
This commit is contained in:
@@ -154,6 +154,8 @@ const (
|
||||
WorkOrderConcurrentlyInProcess // 已有工单在执行
|
||||
WorkOrderAlreadyPausing // 工单正在暂停中
|
||||
WorkOrderAlreadyPaused // 工单已暂停
|
||||
WorkOrderAlreadyCancelling // 工单正在取消中
|
||||
OtherOrdersInProgress // 有其他工单正在运行
|
||||
)
|
||||
|
||||
// work order 1100+
|
||||
@@ -228,8 +230,8 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
DockEquipmentTypeNotFound = 1800001 + iota // 未找到接驳台设备类型
|
||||
DockEquipmentTypeAlreadyExists // 接驳台设备类型已存在
|
||||
TrayTypeNotFound = 1800001 + iota // 未找到托盘类型
|
||||
TrayTypeAlreadyExists // 托盘类型已存在
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -240,9 +242,9 @@ const (
|
||||
)
|
||||
|
||||
const (
|
||||
DockErrorNotFound = 1900001 + iota // 接驳台查找错误
|
||||
DockFrontHasSmallTray // 接驳台前方有小工件
|
||||
DockReadError // 读取接驳台错误
|
||||
DockErrorNotFound = 1900001 + iota // 未找到托盘类型
|
||||
DockFrontHasSmallTray // 托盘类型已存在
|
||||
DockReadError // 托盘类型已存在
|
||||
)
|
||||
|
||||
var message = make(map[code]string)
|
||||
@@ -359,11 +361,11 @@ func init() {
|
||||
message[MillingTempStationLineError] = "铣线只能选择铣线Robot"
|
||||
message[MillingTempStationHasWorkpiece] = "铣线只能选择铣线Robot"
|
||||
|
||||
message[DockEquipmentTypeNotFound] = "未找到接驳台设备类型"
|
||||
message[DockEquipmentTypeAlreadyExists] = "接驳台设备类型已存在"
|
||||
message[TrayTypeNotFound] = "未找到托盘类型"
|
||||
message[TrayTypeAlreadyExists] = "托盘类型已存在"
|
||||
|
||||
message[DockErrorNotFound] = "接驳台查找错误"
|
||||
message[DockFrontHasSmallTray] = "此位置前面有小工件,请重新扫描接驳台后再操作"
|
||||
message[DockFrontHasSmallTray] = "此位置前面有小托盘,请重新扫描接驳台后再操作"
|
||||
message[DockReadError] = "读取接驳台"
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,12 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Beijing Hardman Automation Equipment Co., LTD. All rights reserved.
|
||||
*
|
||||
* Project: adapter
|
||||
* File: ctx_data.go
|
||||
* Last: 2025-04-15 16:40:17
|
||||
* Author: wangcheng@bj-hardman.com
|
||||
*/
|
||||
|
||||
package xhttp
|
||||
|
||||
import (
|
||||
|
||||
@@ -72,8 +72,6 @@ func ErrorCtx(ctx context.Context, err error) (int, any) {
|
||||
return 200, body
|
||||
}
|
||||
|
||||
// 未识别的普通错误(å¦?EventLoop 返回的业务错误):Msg 直接é€�å‡ºçœŸå®žåŽŸå› ï¼?
|
||||
// é�¿å…�å‰�端å�ªçœ‹åˆ°ç¬¼ç»Ÿçš„"æœ�务器开å°�å·®"è€Œæ— æ³•å®šä½�é—®é¢?
|
||||
body := Body{Code: errorx.CommonErrCode, Msg: err.Error()}
|
||||
body := Body{Code: errorx.CommonErrCode, Msg: errorx.MapErrMsg(errorx.CommonErrCode), Detail: err.Error()}
|
||||
return 200, body
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package xhttp
|
||||
|
||||
import (
|
||||
"log/slog"
|
||||
"net/http"
|
||||
"reflect"
|
||||
"regexp"
|
||||
@@ -25,25 +24,19 @@ func NewValidator() *Validator {
|
||||
validate := validator.New()
|
||||
uni := ut.New(en.New(), zh.New(), en.New())
|
||||
translator, _ = uni.GetTranslator("zh")
|
||||
if err := zhTranslations.RegisterDefaultTranslations(validate, translator); err != nil {
|
||||
slog.Error("验证器: 注册默认翻译失败", "error", err)
|
||||
}
|
||||
_ = zhTranslations.RegisterDefaultTranslations(validate, translator)
|
||||
|
||||
validate.RegisterTagNameFunc(func(fld reflect.StructField) string {
|
||||
return fld.Tag.Get("comment")
|
||||
})
|
||||
|
||||
if err := validate.RegisterValidation("mobile", validateMobile); err != nil {
|
||||
slog.Error("验证器: 注册mobile校验失败", "error", err)
|
||||
}
|
||||
if err := validate.RegisterTranslation("mobile", translator, func(ut ut.Translator) error {
|
||||
_ = validate.RegisterValidation("mobile", validateMobile)
|
||||
_ = validate.RegisterTranslation("mobile", translator, func(ut ut.Translator) error {
|
||||
return ut.Add("mobile", "{0}必须是一个有效的手机号", true)
|
||||
}, func(ut ut.Translator, fe validator.FieldError) string {
|
||||
t, _ := ut.T("mobile", fe.Field())
|
||||
return t
|
||||
}); err != nil {
|
||||
slog.Error("验证器: 注册mobile翻译失败", "error", err)
|
||||
}
|
||||
})
|
||||
return &Validator{
|
||||
v: validate,
|
||||
}
|
||||
|
||||
@@ -10,7 +10,6 @@ import (
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
@@ -47,11 +46,16 @@ func NewLogger(conf LogConf) *Logger {
|
||||
conf.Filename = filepath.Join(workdir, conf.Filename)
|
||||
}
|
||||
|
||||
// �匧予��𠧧�亙�嚗𡁏�憭拐�銝芣�隞塚��賢��澆� bj_power_mes-YYYY-MM-DD.log
|
||||
// 瘥誩予����?lumberjack �匧之撠𧶏�MaxSize嚗㗇��剁�靽萘� MaxBackups 銝芸�隞?
|
||||
dw := newDailyWriter(conf)
|
||||
// 创建lumberjack日志滚动器
|
||||
lumberjackLogger := &lumberjack.Logger{
|
||||
Filename: conf.Filename,
|
||||
MaxSize: conf.MaxSize,
|
||||
MaxBackups: conf.MaxBackups,
|
||||
MaxAge: conf.MaxAge,
|
||||
Compress: conf.Compress,
|
||||
} // 创建写入器
|
||||
|
||||
var writer io.Writer = dw
|
||||
var writer io.Writer = lumberjackLogger
|
||||
if conf.Console {
|
||||
writer = io.MultiWriter(writer, os.Stdout)
|
||||
}
|
||||
@@ -67,7 +71,7 @@ func NewLogger(conf LogConf) *Logger {
|
||||
if source.File == "" {
|
||||
return slog.Attr{}
|
||||
}
|
||||
return slog.String(slog.SourceKey, " "+filepath.Base(source.File)+fmt.Sprintf(":%d", source.Line))
|
||||
return slog.String(slog.SourceKey, filepath.Base(source.File)+fmt.Sprintf(":%d", source.Line))
|
||||
}
|
||||
case slog.TimeKey:
|
||||
return slog.String(slog.TimeKey, attr.Value.Time().Format(conf.TimeFormat))
|
||||
@@ -168,29 +172,7 @@ func (l *Logger) Error(v any, fields ...logx.LogField) {
|
||||
l.logAttrs(context.Background(), slog.LevelError, fmt.Sprintf("%v", v), attrs...)
|
||||
}
|
||||
|
||||
// skipHttpPollLog 餈�誘擃㗛�頧株砭�亙�嚗𡁜�蝡航蔭霂X𦻖����𣂼� GET嚗㗇�蝘埝㺭甈∪�撅𧶏�
|
||||
// �䭾��靝遠�潛凒�乩腺撘���蹱�雿頣�POST/PUT/DELETE嚗劐��?2xx �躰秤�滚�靽萘��?
|
||||
func skipHttpPollLog(v any) bool {
|
||||
msg, ok := v.(string)
|
||||
if !ok || !strings.HasPrefix(msg, "[HTTP]") {
|
||||
return false
|
||||
}
|
||||
// �澆�: [HTTP] 200 - GET /api/v1/jobs - 127.0.0.1:49864 - UA
|
||||
parts := strings.SplitN(msg, " - ", 3)
|
||||
if len(parts) < 3 {
|
||||
return false
|
||||
}
|
||||
code := strings.TrimSpace(strings.TrimPrefix(parts[0], "[HTTP]"))
|
||||
if len(code) < 1 || code[0] != '2' {
|
||||
return false
|
||||
}
|
||||
return strings.HasPrefix(parts[1], "GET ")
|
||||
}
|
||||
|
||||
func (l *Logger) Info(v any, fields ...logx.LogField) {
|
||||
if skipHttpPollLog(v) {
|
||||
return
|
||||
}
|
||||
attrs := l.buildAttrs(fields)
|
||||
l.logAttrs(context.Background(), slog.LevelInfo, fmt.Sprintf("%v", v), attrs...)
|
||||
}
|
||||
@@ -200,9 +182,6 @@ func (l *Logger) Severe(v any) {
|
||||
}
|
||||
|
||||
func (l *Logger) Slow(v any, fields ...logx.LogField) {
|
||||
if skipHttpPollLog(v) {
|
||||
return
|
||||
}
|
||||
attrs := l.buildAttrs(fields)
|
||||
l.logAttrs(context.Background(), slog.LevelWarn, fmt.Sprintf("%v", v), attrs...)
|
||||
}
|
||||
@@ -215,57 +194,3 @@ func (l *Logger) Stat(v any, fields ...logx.LogField) {
|
||||
attrs := l.buildAttrs(fields)
|
||||
l.logAttrs(context.Background(), slog.LevelInfo, fmt.Sprintf("%v", v), attrs...)
|
||||
}
|
||||
|
||||
// dailyWriter �匧予��𠧧�亙��坔��具�?
|
||||
// 瘥𤩺活 Write �嗆��亙��齿𠯫���頝典予�嗉䌊�典��X�隞嗚�?
|
||||
// 瘥誩予��眏 lumberjack �匧之撠𤩺��剁�靽萘� MaxBackups 銝芸�隞賬�?
|
||||
type dailyWriter struct {
|
||||
mu sync.Mutex
|
||||
conf LogConf
|
||||
baseDir string
|
||||
baseName string // 銝滚鉄�拙��滨��箇���辣�㵪�憒?"bj_power_mes"
|
||||
ext string // �拙��㵪�憒?".log"
|
||||
currentDay string
|
||||
lj *lumberjack.Logger
|
||||
}
|
||||
|
||||
func newDailyWriter(conf LogConf) *dailyWriter {
|
||||
dir := filepath.Dir(conf.Filename)
|
||||
ext := filepath.Ext(conf.Filename)
|
||||
base := strings.TrimSuffix(filepath.Base(conf.Filename), ext)
|
||||
// 蝖桐��亙��桀�摮睃銁
|
||||
if err := os.MkdirAll(dir, 0755); err != nil {
|
||||
// �𥕦遣�桀�憭梯揖�嗅����啣虾�扯���辣�桀�嚗屸��滨�摨誩鍳�典仃韐?
|
||||
slog.Error("log: �𥕦遣�亙��桀�憭梯揖嚗�����啣極雿𦦵𤌍敶?, "dir", dir, "error", err)
|
||||
dir = workdir
|
||||
}
|
||||
return &dailyWriter{
|
||||
conf: conf,
|
||||
baseDir: dir,
|
||||
baseName: base,
|
||||
ext: ext,
|
||||
}
|
||||
}
|
||||
|
||||
func (w *dailyWriter) Write(p []byte) (n int, err error) {
|
||||
w.mu.Lock()
|
||||
defer w.mu.Unlock()
|
||||
|
||||
day := time.Now().Format("2006-01-02")
|
||||
if day != w.currentDay {
|
||||
// 頝典予嚗𡁜��剜唂 writer嚗��撱箸鰵��辣
|
||||
if w.lj != nil {
|
||||
w.lj.Close()
|
||||
}
|
||||
filename := filepath.Join(w.baseDir, w.baseName+"-"+day+w.ext)
|
||||
w.lj = &lumberjack.Logger{
|
||||
Filename: filename,
|
||||
MaxSize: w.conf.MaxSize,
|
||||
MaxBackups: w.conf.MaxBackups,
|
||||
MaxAge: w.conf.MaxAge,
|
||||
Compress: w.conf.Compress,
|
||||
}
|
||||
w.currentDay = day
|
||||
}
|
||||
return w.lj.Write(p)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user