Files
bj_power/bj_power_wms/internal/handler/orders.go
T

69 lines
1.9 KiB
Go
Raw Normal View History

2026-08-29 15:30:25 +08:00
package handler
import (
"encoding/json"
"net/http"
"sort"
"time"
"bj_power_wms/internal/svc"
)
// 视为"已完成"的工单状态(查询时排到最后,未完成的优先显示)
var mesDoneStatuses = map[string]bool{
"FINISHED": true, "COMPLETED": true, "DONE": true,
"CLOSED": true, "已完结": true, "已完成": true,
}
type mesOrder struct {
WorkOrderNo string `json:"workOrderNo"`
ProductCode string `json:"productCode"`
ProductName string `json:"productName"`
Quantity int `json:"quantity"`
Status string `json:"status"`
}
// ordersHandler 调用 MES 内部接口获取工单列表,把未完成工单排前面,供备料出库下拉选择
func ordersHandler(ctx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
url := ctx.Config.Mes.BaseURL + "/api/internal/order/query?orderNo=" + r.URL.Query().Get("orderNo")
req, err := http.NewRequest(http.MethodGet, url, nil)
if err != nil {
fail(w, http.StatusBadGateway, "构造 MES 请求失败")
return
}
req.Header.Set("X-API-TOKEN", ctx.Config.Mes.Token)
cli := &http.Client{Timeout: 5 * time.Second}
resp, err := cli.Do(req)
if err != nil {
fail(w, http.StatusBadGateway, "无法连接 MES 服务")
return
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
fail(w, http.StatusBadGateway, "MES 返回异常")
return
}
var body struct {
Data []mesOrder `json:"data"`
}
if err := json.NewDecoder(resp.Body).Decode(&body); err != nil {
fail(w, http.StatusBadGateway, "解析 MES 响应失败")
return
}
list := body.Data
if list == nil {
list = []mesOrder{}
}
sort.SliceStable(list, func(i, j int) bool {
di := mesDoneStatuses[list[i].Status]
dj := mesDoneStatuses[list[j].Status]
if di != dj {
return !di // 未完成在前
}
return list[i].WorkOrderNo < list[j].WorkOrderNo
})
ok(w, list)
}
}