本提交完成了WMS系统的多维度优化升级: 1. 新增RBAC权限系统,支持角色/菜单/按钮三级权限管控 2. 重构库存盘点、物料管理、区域维护等模块的查询筛选与展示逻辑 3. 优化入库/出库/质检等业务流程,完善数据冗余与业务闭环 4. 移除旧装箱表,将装箱逻辑合并到出库主表 5. 新增前端权限判断工具、导出工具与端到端测试用例 6. 补充完善各类注释与数据库字段说明
72 lines
2.1 KiB
Go
72 lines
2.1 KiB
Go
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 {
|
|
// 构造请求都失败属代码级异常,返回空列表让备料出库页可降级(仍可手输工单号)
|
|
ok(w, []mesOrder{})
|
|
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 {
|
|
// MES 未启用/不可达:优雅降级为空列表,不抛 502 打断备料出库页
|
|
// (用户仍可在 prep 页直接手输工单号查询台账;非 MES 场景请用「通用出库」)
|
|
ok(w, []mesOrder{})
|
|
return
|
|
}
|
|
defer resp.Body.Close()
|
|
if resp.StatusCode != http.StatusOK {
|
|
ok(w, []mesOrder{})
|
|
return
|
|
}
|
|
var body struct {
|
|
Data []mesOrder `json:"data"`
|
|
}
|
|
if err := json.NewDecoder(resp.Body).Decode(&body); err != nil {
|
|
ok(w, []mesOrder{})
|
|
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)
|
|
}
|
|
}
|