package handler import ( "net/http" "bj_power_mes/common/httpx" "bj_power_mes/internal/logic" "bj_power_mes/internal/svc" ) // ============ 数量不符处理(MES 侧:唯一真源 + 处理闭环) ============ // // 链路:工位终端上报(/api/internal/station/qty-report)→ 本页查询/处理 // - 补发 REPLENISH:生成 source=REFILL 补料单(少发时可用) // - 退库 RETURN :调 WMS 建退库单(多发时可用) // - 调整 ADJUST :双方确认后直接关闭,必须填说明 // ListQtyReportsHandler GET /api/v1/qty-reports?status=&stationNo=&materialCode=&orderNo=&page=&pageSize= // 数量不符记录分页查询(真分页:后端 SQL 层分页)。 func ListQtyReportsHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { q := r.URL.Query() data, err := logic.New(svcCtx).ListQtyReports(r.Context(), logic.QtyReportQuery{ Status: q.Get("status"), StationNo: q.Get("stationNo"), MaterialCode: q.Get("materialCode"), OrderNo: q.Get("orderNo"), Page: atoiDefault(q.Get("page"), 1), PageSize: atoiDefault(q.Get("pageSize"), 20), }) if err != nil { httpx.Fail(w, 3201, err.Error()) return } httpx.Ok(w, data) } } // QtyReportStatsHandler GET /api/v1/qty-reports/stats // 数量不符概览:待处理 / 已补发 / 已退库 / 已关闭。 func QtyReportStatsHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { data, err := logic.New(svcCtx).QtyReportStats(r.Context()) if err != nil { httpx.Fail(w, 3202, err.Error()) return } httpx.Ok(w, data) } } // HandleQtyReportHandler POST /api/v1/qty-reports/handle // body: { id, handleType(REPLENISH/RETURN/ADJUST), note } func HandleQtyReportHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { var req struct { ID int `json:"id"` HandleType string `json:"handleType"` Note string `json:"note"` } if err := httpx.ParseJSON(r, &req); err != nil { httpx.BadRequest(w, "请求体解析失败") return } if req.HandleType != "REPLENISH" && req.HandleType != "RETURN" && req.HandleType != "ADJUST" { httpx.BadRequest(w, "处理方式仅支持 补发/退库/调整") return } // 处理人取自鉴权中间件写入的用户名(无则留空,不阻断处理) operator := r.Header.Get("X-Username") data, err := logic.New(svcCtx).HandleQtyReport(r.Context(), req.ID, req.HandleType, req.Note, operator) if err != nil { httpx.Fail(w, 3203, err.Error()) return } httpx.OkMessage(w, "处理完成", data) } }