refactor: 重构产线工位与备料流程,移除冗余字段

1. 移除工单、工件、日排产中的冗余工位组合/接驳台字段
2. 新增工位接驳台编码字段与唯一约束,关联WMS接驳台主数据
3. 重构日排产为工位产量分配模式,替代原接驳台列表
4. 新增备料单工位级字段与分批出库支持
5. 移除定时同步可生产数量,改为WMS实时拉取接口
6. 过滤操作日志,排除登录/退出相关日志
7. 调整仪表盘工序展示逻辑为今日派工路线
8. 新增接驳台维护菜单与基础数据
This commit is contained in:
SunYF
2026-09-19 07:50:21 +08:00
parent 543655d441
commit 37f10d3a13
156 changed files with 4489 additions and 1285 deletions
+17 -17
View File
@@ -2,6 +2,7 @@ package logic
import (
"context"
"errors"
"fmt"
"math"
"sort"
@@ -12,8 +13,6 @@ import (
"bj_power_mes/ent/dailyplan"
"bj_power_mes/ent/workorder"
"bj_power_mes/internal/wmsclient"
"github.com/zeromicro/go-zero/core/logx"
)
// producibleBomItem 可生产数量计算用的精简 BOM 行
@@ -23,24 +22,31 @@ type producibleBomItem struct {
unitQty float64 // 单台用量
}
// SyncProducibleToWMS 计算「可生产数量」快照 + 「未来5天物料需求」并推送到 WMS。
// ProducibleResult 可生产数量计算结果(供 WMS 按需实时拉取)
type ProducibleResult struct {
Items []wmsclient.ProducibleItem `json:"items"`
Demands []wmsclient.ProducibleDemand `json:"demands"`
ComputedAt int64 `json:"computedAt"`
}
// ComputeProducible 计算「可生产数量」+「未来5天物料需求」,结果直接返回(不做定时推送)。
//
// 业务口径(问题记录 L470-474 + L256):
// - 可生产套数 = min(各物料可用量 ÷ 单台用量)。BOM 单台用量在 MES、库存可用量在 WMS,
// 故由 MES 拉取 WMS 可用量(/api/internal/stock/check)后本地计算,再把快照推回 WMS 只读展示
// 故由 MES 拉取 WMS 可用量(/api/internal/stock/check)后本地计算,WMS 打开页面时实时来拉
// - 未来5天需求量 = 近5天(含今日)日排产台数 × 单台用量,按物料汇总,供 WMS 备料四态「预警」判定。
//
// 两系统独立运行约束:仅 MES→WMS 单向调用;未配置 WMS 或不可达时记录日志并跳过,绝不阻塞 MES。
func (s *Service) SyncProducibleToWMS(ctx context.Context) error {
// 两系统独立运行约束:未配置 WMS 或不可达时返回错误,由调用方(WMS)提示,绝不阻塞 MES。
func (s *Service) ComputeProducible(ctx context.Context) (*ProducibleResult, error) {
if s.ctx.Wms == nil || s.ctx.EntClient == nil {
return nil
return nil, errors.New("未配置 WMS 地址,无法计算可生产数量")
}
all, err := s.ctx.EntClient.BomItem.Query().All(ctx)
if err != nil {
return err
return nil, err
}
if len(all) == 0 {
return nil // 无 BOM 不推送
return &ProducibleResult{Items: []wmsclient.ProducibleItem{}, Demands: []wmsclient.ProducibleDemand{}, ComputedAt: time.Now().Unix()}, nil
}
// 1) 按 产品编码 → BOM名称 → 明细行 分组
@@ -90,8 +96,7 @@ func (s *Service) SyncProducibleToWMS(ctx context.Context) error {
sort.Strings(codes)
avail, err := s.ctx.Wms.StockAvailable(ctx, codes)
if err != nil {
logx.Errorf("[producible] 拉取 WMS 可用量失败,跳过本次同步: %v", err)
return err
return nil, errors.New("拉取 WMS 可用量失败: " + err.Error())
}
// 4) 产品名称映射(product_type 优先,work_order 兜底)
@@ -170,12 +175,7 @@ func (s *Service) SyncProducibleToWMS(ctx context.Context) error {
// 6) 未来5天物料需求(备料四态「预警」数据源)
demands := s.computeFuture5Demand(ctx, chosen)
if err := s.ctx.Wms.SyncProducible(ctx, items, demands); err != nil {
logx.Errorf("[producible] 推送 WMS 失败: %v", err)
return err
}
logx.Infof("[producible] 已同步可生产数量 %d 项、未来5天需求 %d 项到 WMS", len(items), len(demands))
return nil
return &ProducibleResult{Items: items, Demands: demands, ComputedAt: now}, nil
}
// computeFuture5Demand 近5天(含今日)日排产台数 × 单台用量,按物料汇总为未来5天需求量。