refactor: 重构工艺工序相关命名与数据模型

1.  全局替换"工序"为"工艺"统一术语,包括页面文案、枚举、注释
2.  重构工单与工件工艺数据模型:
    - 新增工艺组合表flow_material作为备料/齐套唯一源头
    - 新增工位状态表station_state支持自主停单/恢复接单
    - 移除station_process派工表,改用工单工艺组合作为路线唯一源头
    - 替换processCode为flowId作为工艺关联标识
    - 重构工件当前进度字段为currentStationNo
3.  删除冗余的静态备份资源文件
4.  调整物料选择组件默认启用仅显示激活物料
5.  优化工单创建/编辑逻辑,新增工艺组合校验与保存
This commit is contained in:
SunYF
2026-09-22 11:32:29 +08:00
parent 932700ca65
commit d609ff8a9e
185 changed files with 8623 additions and 4501 deletions
@@ -62,6 +62,7 @@ func createMaterialHandler(ctx *svc.ServiceContext) http.HandlerFunc {
TemplateCode string `json:"templateCode"`
ItemType int `json:"itemType"` // 1原材料/2半成品/3成品/4其他
SafetyStock int `json:"safetyStock"` // 安全库存(低于触发缺货预警)
IsActive *bool `json:"isActive"` // 启用状态(nil 视为启用)
}
if err := parseJSON(r, &req); err != nil {
fail(w, http.StatusBadRequest, "参数错误")
@@ -106,6 +107,7 @@ func createMaterialHandler(ctx *svc.ServiceContext) http.HandlerFunc {
SetNillableTemplateCode(strPtr(req.TemplateCode)).
SetItemType(itemType).
SetSafetyStock(req.SafetyStock).
SetIsActive(req.IsActive == nil || *req.IsActive).
Save(ctx0())
if err != nil {
logx.Errorf("create material failed: %v", err)
@@ -131,6 +133,7 @@ func updateMaterialHandler(ctx *svc.ServiceContext) http.HandlerFunc {
ManageMode int `json:"manageMode"`
ItemType int `json:"itemType"`
SafetyStock int `json:"safetyStock"`
IsActive *bool `json:"isActive"`
}
if err := parseJSON(r, &req); err != nil || req.ID <= 0 {
fail(w, http.StatusBadRequest, "参数错误")
@@ -155,6 +158,7 @@ func updateMaterialHandler(ctx *svc.ServiceContext) http.HandlerFunc {
SetDescription(req.Description).
SetItemType(req.ItemType).
SetSafetyStock(req.SafetyStock).
SetIsActive(req.IsActive == nil || *req.IsActive).
SetManageMode(manageMode).
SetIsBatchManaged(manageMode == 1 || manageMode == invManageOther).
SetIsSerialManaged(manageMode == 2).
@@ -243,6 +247,11 @@ func queryMaterialsHandler(ctx *svc.ServiceContext) http.HandlerFunc {
),
)
}
// 启用过滤:下拉选择(新建入库/备料等)传 isActive=true 仅显示启用物料;
// 物料档案管理页不传,显示全部以便重新启用。
if isActiveStr := r.URL.Query().Get("isActive"); isActiveStr != "" {
q = q.Where(material.IsActiveEQ(isActiveStr == "true" || isActiveStr == "1"))
}
if startDate != "" {
if t, err := time.ParseInLocation("2006-01-02", startDate, time.Local); err == nil {
q = q.Where(material.CreatedAtGTE(t.Unix()))
+22 -19
View File
@@ -85,15 +85,16 @@ func listProductTypesInternalHandler(ctx *svc.ServiceContext) http.HandlerFunc {
}
type productTypeRow struct {
ID int `json:"id"`
Code string `json:"code"`
Name string `json:"name"`
Spec string `json:"spec"`
Unit string `json:"unit"`
Category string `json:"category"`
IsActive bool `json:"isActive"`
CreatedAt int64 `json:"createdAt"`
UpdatedAt int64 `json:"updatedAt"`
ID int `json:"id"`
Code string `json:"code"`
Name string `json:"name"`
Spec string `json:"spec"`
Unit string `json:"unit"`
Category string `json:"category"`
ManageMode int `json:"manageMode"` // 1结构件(批次)/2电气件(SN)
IsActive bool `json:"isActive"`
CreatedAt int64 `json:"createdAt"`
UpdatedAt int64 `json:"updatedAt"`
}
func productTypeRows(list []*ent.Material) []*productTypeRow {
@@ -105,8 +106,9 @@ func productTypeRows(list []*ent.Material) []*productTypeRow {
Name: m.Name,
Spec: m.Spec,
Unit: m.Unit,
Category: m.Description, // MES 迁移时 category 存于 description
IsActive: m.IsActive,
Category: m.Description, // MES 迁移时 category 存于 description
ManageMode: m.ManageMode,
IsActive: m.IsActive,
CreatedAt: m.CreatedAt,
UpdatedAt: m.UpdatedAt,
})
@@ -140,14 +142,15 @@ func genProductTypeCode(ctx *svc.ServiceContext) (string, error) {
// WMS 物料档案共用一张表,必填口径一致(图号/名称/规格/单位/品类/类型)。
func createProductTypeInternalHandler(ctx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req struct {
Code string `json:"code"`
Name string `json:"name"`
Spec string `json:"spec"`
Unit string `json:"unit"`
Category string `json:"category"`
IsActive *bool `json:"isActive"`
}
var req struct {
Code string `json:"code"`
Name string `json:"name"`
Spec string `json:"spec"`
Unit string `json:"unit"`
Category string `json:"category"`
ManageMode int `json:"manageMode"` // 1结构件批次/2电气件SN,0=默认电气件
IsActive *bool `json:"isActive"`
}
if err := parseJSON(r, &req); err != nil {
fail(w, http.StatusBadRequest, "参数错误")
return