1. 通用优化: - 统一系统标题为"库房客户端"/"MES产线控制",移除北自所前缀 - 调整内置账号密码为统一123456,优化密码校验逻辑 - 新增数据库自动创建逻辑,简化部署流程 - 修复日志时间格式配置,优化日志输出 - 新增纯数字密码安全提示 2. MES系统优化: - 新增日排产管理功能,支持增删改查与自动算料生成备料单 - 重构BOM模块,改为按产品编码维护而非工单维度 - 新增工艺参数模板配置与手动报工页面 - 新增产品类型自动编码功能 - 优化菜单结构,调整工单管理、扫码报工等页面名称与路由 - 新增删除日排产接口与权限保护 - 修复物料清单查询逻辑,适配新BOM结构 - 新增refreshToken支持,优化登录会话管理 3. WMS系统优化: - 新增基础数据维护页面,支持区域与物料档案管理 - 新增工单列表下拉接口,对接MES获取未完成工单优先展示 - 优化入库管理提示文案,替换英文提示为中文 - 修复精密件入库校验逻辑,优化错误提示 - 优化Excel导入功能,新增备注字段支持 - 优化登录页面与菜单文案,统一备料台账名称 - 新增自动打开浏览器功能,优化客户端启动体验 - 修复备料出库页面查询提示文案 - 新增WMS与MES对接配置,完善内部API调用逻辑 4. 其他优化: - 删除冗余的旧版静态资源文件,更新资源引用路径 - 新增帮助文档,完善基础数据模块说明 - 修复多处文案不统一、英文残留问题
79 lines
1.8 KiB
Go
79 lines
1.8 KiB
Go
package db
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"log/slog"
|
|
|
|
"bj_power_wms/ent"
|
|
|
|
"entgo.io/ent/dialect"
|
|
entsql "entgo.io/ent/dialect/sql"
|
|
_ "github.com/jackc/pgx/v5/stdlib"
|
|
)
|
|
|
|
// MustNewDB 创建 Ent 客户端并验证连接
|
|
func MustNewDB(c DatabaseConf) *ent.Client {
|
|
ec, err := NewDB(c)
|
|
if err != nil {
|
|
panic(fmt.Sprintf("数据库连接失败: %v", err))
|
|
}
|
|
return ec
|
|
}
|
|
|
|
func NewDB(c DatabaseConf) (*ent.Client, error) {
|
|
dsn := fmt.Sprintf("postgresql://%s:%s@%s:%d/%s?sslmode=disable",
|
|
c.User, c.Password, c.Host, c.Port, c.Dbname,
|
|
)
|
|
|
|
db, err := sql.Open("pgx", dsn)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := db.Ping(); err != nil {
|
|
return nil, fmt.Errorf("ping db: %w", err)
|
|
}
|
|
|
|
drv := entsql.OpenDB(dialect.Postgres, db)
|
|
return ent.NewClient(ent.Driver(drv)), nil
|
|
}
|
|
|
|
// EnsureDB 若目标数据库不存在则自动创建(先连 postgres 维护库做检查/创建)
|
|
func EnsureDB(c DatabaseConf) error {
|
|
maintenanceDSN := fmt.Sprintf("postgresql://%s:%s@%s:%d/%s?sslmode=disable",
|
|
c.User, c.Password, c.Host, c.Port, "postgres")
|
|
sqlDB, err := sql.Open("pgx", maintenanceDSN)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer sqlDB.Close()
|
|
|
|
var exists bool
|
|
if err := sqlDB.QueryRow(
|
|
`SELECT EXISTS(SELECT 1 FROM pg_database WHERE datname = $1)`, c.Dbname,
|
|
).Scan(&exists); err != nil {
|
|
return err
|
|
}
|
|
|
|
if exists {
|
|
return nil
|
|
}
|
|
|
|
if _, err := sqlDB.Exec(`CREATE DATABASE "` + c.Dbname + `"`); err != nil {
|
|
return err
|
|
}
|
|
slog.Info("已自动创建数据库 " + c.Dbname)
|
|
return nil
|
|
}
|
|
|
|
// AutoMigrate 启动时自动建表/迁移
|
|
func AutoMigrate(client *ent.Client) error {
|
|
ctx := contextBackdrop()
|
|
if err := client.Schema.Create(ctx); err != nil {
|
|
return fmt.Errorf("自动迁移失败: %w", err)
|
|
}
|
|
slog.Info("数据库迁移完成")
|
|
return nil
|
|
}
|