Files
bj_power/bj_power_mes/internal/handler/qty_report.go
T
SunYF 05b0b8a909 feat: 完成客户第12条需求+多系统改造
1. 新增预警表添加工单号字段,支持按工单号检索预警
2. 添加工单过滤在制品/绩效报表/预警中心查询
3. 补全WMS台账字段口径与权限配置
4. 修复备料单与数量不符处理流程
5. 新增配送进度/库位联动/自动出库功能
6. 修复AGV配送状态更新逻辑
7. 优化退料与库存管理细节
2026-09-19 17:04:58 +08:00

79 lines
2.7 KiB
Go

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)
}
}