feat: 完成多模块迭代更新

- 新增过程巡检按步骤上报、数量不符上报、工位退料功能
- 增加工单工程编号三级归属字段
- 新增物料安全库存与缺货预警
- 新增附件管理、退库单管理模块
- 优化生产看板展示逻辑与前端页面文案
- 清理冗余的工艺路线相关代码与备份文件
This commit is contained in:
SunYF
2026-09-15 16:37:39 +08:00
parent 951f3dfecd
commit 4a5e2d7bac
494 changed files with 24702 additions and 139223 deletions
+64
View File
@@ -1007,3 +1007,67 @@ func itoa(n int) string {
}
return string(b[i:])
}
// shortageRow 缺货预警行(安全库存 > 0 且可用量 < 安全库存)
type shortageRow struct {
ID int64 `json:"id"` // 物料主表 ID
MaterialCode string `json:"materialCode"`
MaterialName string `json:"materialName"`
Spec string `json:"spec"`
Unit string `json:"unit"`
SafetyStock int `json:"safetyStock"`
AvailQty int `json:"availQty"`
ShortQty int `json:"shortQty"`
}
// shortageHandler 缺货预警:安全库存 > 0 且可用量低于安全库存的物料。
// 客户诉求《问题记录》L473「安全库存/缺货预警进 WMS 首页」。
// 可用量口径与出库门禁一致:在库/锁定 且质量状态非 不合格/待退。
func shortageHandler(ctx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
mats, err := ctx.EntClient.Material.Query().
Where(material.SafetyStockGT(0), material.IsActiveEQ(true)).
All(ctx0())
if err != nil {
fail(w, http.StatusInternalServerError, err.Error())
return
}
rows := make([]*shortageRow, 0)
for _, m := range mats {
invRows, err := ctx.EntClient.Inventory.Query().
Where(
inventory.MaterialCodeEQ(m.Code),
inventory.StatusIn("在库", "锁定"),
inventory.QualityStatusNotIn("不合格", "待退"),
).All(ctx0())
if err != nil {
continue
}
avail := 0
for _, inv := range invRows {
if inv.ManageMode == 1 {
avail += inv.Quantity - inv.LockedQty
} else if inv.Status == "在库" {
avail++
}
}
if avail < m.SafetyStock {
name := m.Name
if name == "" {
name = m.Code
}
rows = append(rows, &shortageRow{
ID: int64(m.ID),
MaterialCode: m.Code,
MaterialName: name,
Spec: m.Spec,
Unit: m.Unit,
SafetyStock: m.SafetyStock,
AvailQty: avail,
ShortQty: m.SafetyStock - avail,
})
}
}
ok(w, map[string]any{"list": rows, "total": len(rows)})
}
}