feat: 完成多模块迭代更新
- 新增过程巡检按步骤上报、数量不符上报、工位退料功能 - 增加工单工程编号三级归属字段 - 新增物料安全库存与缺货预警 - 新增附件管理、退库单管理模块 - 优化生产看板展示逻辑与前端页面文案 - 清理冗余的工艺路线相关代码与备份文件
This commit is contained in:
@@ -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)})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user