feat(mes): 添加定时同步可生产数量到WMS及BOM项相关标准字段
- 在main.go中添加定时任务每10分钟同步可生产数量到WMS系统 - 为BomItem实体添加relatedStandard字段及相关CRUD方法 - 为InspectionRecord实体添加reportNo、materialCode、materialName等字段 - 更新ent schema确保新字段的验证和默认值设置 - 添加必要的数据库迁移和字段映射逻辑
This commit is contained in:
@@ -29,6 +29,8 @@ CREATE TABLE IF NOT EXISTS torque_results (
|
||||
sn TEXT,
|
||||
dock_code TEXT,
|
||||
screw_no TEXT,
|
||||
step_id TEXT,
|
||||
step_name TEXT,
|
||||
torque REAL,
|
||||
angle REAL,
|
||||
result TEXT,
|
||||
@@ -82,6 +84,10 @@ func Open(path string) (*Store, error) {
|
||||
db.Close()
|
||||
return nil, err
|
||||
}
|
||||
if err := s.migrateTorqueStep(); err != nil {
|
||||
db.Close()
|
||||
return nil, err
|
||||
}
|
||||
return s, nil
|
||||
}
|
||||
|
||||
@@ -99,6 +105,29 @@ func (s *Store) migrateUsersRole() error {
|
||||
return err
|
||||
}
|
||||
|
||||
// migrateTorqueStep 兼容旧库:拧紧结果关联工艺步骤(step_id/step_name)为后续补充字段,缺失时自动补齐。
|
||||
func (s *Store) migrateTorqueStep() error {
|
||||
cols := []struct{ name, ddl string }{
|
||||
{"step_id", `ALTER TABLE torque_results ADD COLUMN step_id TEXT`},
|
||||
{"step_name", `ALTER TABLE torque_results ADD COLUMN step_name TEXT`},
|
||||
}
|
||||
for _, col := range cols {
|
||||
rows, err := s.db.Query(`SELECT name FROM pragma_table_info('torque_results') WHERE name=?`, col.name)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
exists := rows.Next()
|
||||
rows.Close()
|
||||
if exists {
|
||||
continue
|
||||
}
|
||||
if _, err := s.db.Exec(col.ddl); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *Store) Close() error { return s.db.Close() }
|
||||
|
||||
// Ping 健康检查用。
|
||||
@@ -151,6 +180,8 @@ type TorqueResult struct {
|
||||
Sn string `json:"sn"`
|
||||
DockCode string `json:"dockCode"`
|
||||
ScrewNo string `json:"screwNo"`
|
||||
StepId string `json:"stepId"` // 关联的拧紧工艺步骤ID
|
||||
StepName string `json:"stepName"` // 拧紧工艺步骤名
|
||||
Torque float64 `json:"torque"`
|
||||
Angle float64 `json:"angle"`
|
||||
Result string `json:"result"` // OK | NG
|
||||
@@ -161,9 +192,9 @@ type TorqueResult struct {
|
||||
|
||||
func (s *Store) InsertTorqueResult(t TorqueResult) (int64, error) {
|
||||
res, err := s.db.Exec(
|
||||
`INSERT INTO torque_results(work_order_no, sn, dock_code, screw_no, torque, angle, result, operator, synced, created_at)
|
||||
VALUES(?,?,?,?,?,?,?,?,0,?)`,
|
||||
t.WorkOrderNo, t.Sn, t.DockCode, t.ScrewNo, t.Torque, t.Angle, t.Result, t.Operator, time.Now().Unix(),
|
||||
`INSERT INTO torque_results(work_order_no, sn, dock_code, screw_no, step_id, step_name, torque, angle, result, operator, synced, created_at)
|
||||
VALUES(?,?,?,?,?,?,?,?,?,?,0,?)`,
|
||||
t.WorkOrderNo, t.Sn, t.DockCode, t.ScrewNo, t.StepId, t.StepName, t.Torque, t.Angle, t.Result, t.Operator, time.Now().Unix(),
|
||||
)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
@@ -173,7 +204,7 @@ func (s *Store) InsertTorqueResult(t TorqueResult) (int64, error) {
|
||||
|
||||
// ListTorqueResults 查询本地拧紧结果,最新优先;sn 为空查全部,onlyPending 仅查未同步。
|
||||
func (s *Store) ListTorqueResults(sn string, onlyPending bool, limit int) ([]TorqueResult, error) {
|
||||
query := `SELECT id, work_order_no, sn, dock_code, screw_no, torque, angle, result, operator, synced, created_at FROM torque_results`
|
||||
query := `SELECT id, work_order_no, sn, dock_code, screw_no, COALESCE(step_id,''), COALESCE(step_name,''), torque, angle, result, operator, synced, created_at FROM torque_results`
|
||||
var conds []string
|
||||
var args []any
|
||||
if sn != "" {
|
||||
@@ -201,7 +232,7 @@ func (s *Store) ListTorqueResults(sn string, onlyPending bool, limit int) ([]Tor
|
||||
var synced int64
|
||||
var createdAt int64
|
||||
if err := rows.Scan(&t.ID, &t.WorkOrderNo, &t.Sn, &t.DockCode, &t.ScrewNo,
|
||||
&t.Torque, &t.Angle, &t.Result, &t.Operator, &synced, &createdAt); err != nil {
|
||||
&t.StepId, &t.StepName, &t.Torque, &t.Angle, &t.Result, &t.Operator, &synced, &createdAt); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
t.Synced = synced == 1
|
||||
|
||||
Reference in New Issue
Block a user