Files
bj_power/bj_power_wms/internal/db/seed.go
T
SunYF 8e6e8e1d20 docs(business): 生成业务契约文档并重构MES客户端代码
- 创建案例.md文档,包含业务场景清单、业务流程、案例和回归测试三份完整文档
- WMS库房管理系统涵盖入库、出库、库存、检验、盘点等24个业务场景
- MES产线控制系统包含工单、排产、BOM、备料、质检、追溯等23个业务场景
- 工位终端系统支持上线、报工、下线、领料、巡检等15个现场作业场景
- 主链路从合同到成品入库,异常链路处理不合格、数量不符、退料等情况
- 删除MES客户端中的ScanRecord相关代码,精简客户端结构
- 更新客户端初始化逻辑,移除扫描记录相关的依赖注入配置
2026-09-20 18:25:44 +08:00

65 lines
2.3 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 db
import (
"context"
"fmt"
"log/slog"
"bj_power_wms/ent"
"golang.org/x/crypto/bcrypt"
)
// SeedIfEmpty 首次启动/重置后预置「系统运行必需的基础主数据」,不含任何演示业务数据。
//
// 生产环境口径(用户裁决 2026-09-20):种子只允许写入系统跑起来所必需的固定主数据,
// 严禁预置演示物料/演示库存/演示账号等假业务数据。具体:
// - 管理员账号:admin(初始密码 123456,登录后应立即修改);其余账号由管理员在「账号管理」按需创建、分配角色;
// - 接驳台:DOCK01~20(产线,DOCKn↔工位n+ DOCK21(库房收货),系统预置只读主数据(dock.go 不提供增删改,只能靠种子写入)。
//
// 不预置区域/库位:区域是现场库房布局,因项目而异,且「区域维护」页面可增删改,由实施按现场实际建立,不硬编码进种子。
// 权限与角色不在此:由 handler.SeedRBAC 幂等初始化(reset-all/seed 命令与 POST /api/rbac/seed 共用同一函数)。
func SeedIfEmpty(client *ent.Client) error {
ctx := context.Background()
// 1. 管理员账号(唯一预置账号;初始密码 123456,登录后应立即修改)
users, _ := client.User.Query().Count(ctx)
if users == 0 {
adminHash, _ := bcrypt.GenerateFromPassword([]byte("123456"), bcrypt.DefaultCost)
client.User.Create().
SetUsername("admin").
SetPassword(string(adminHash)).
SetRealName("系统管理员").
SetRole("admin").
SaveX(ctx)
slog.Info("seed: admin user created (admin/123456)")
}
// 2. 接驳台主数据 DOCK01~20(产线, DOCKn↔工位n) + DOCK21(库房)
docks, _ := client.Dock.Query().Count(ctx)
if docks == 0 {
for i := 1; i <= 20; i++ {
code := fmt.Sprintf("DOCK%02d", i)
client.Dock.Create().
SetDockCode(code).
SetName("产线接驳台 " + code + "(工位" + fmt.Sprintf("%d", i) + "").
SetDockType("line").
SetStationNo(i).
SetHasPallet(false).
SetStatus("ENABLED").
SaveX(ctx)
}
client.Dock.Create().
SetDockCode("DOCK21").
SetName("库房收货接驳台").
SetDockType("store").
SetStationNo(0).
SetHasPallet(false).
SetStatus("ENABLED").
SaveX(ctx)
slog.Info("seed: 21 docks created")
}
return nil
}