1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
import type { PageParam, PageResult } from '@vben/request';
 
import { requestClient } from '#/api/request';
 
export namespace MesWmSortTaskApi {
  /** 分拣任务明细 */
  export interface SortTaskLine {
    id?: number;
    noticeLineId?: number; // 发货通知单明细编号
    itemId?: number;
    itemCode?: string;
    itemName?: string;
    itemBarCode?: string; // 物料条码(扫码校验用)
    batchCode?: string; // 批次号(扫码校验用)
    materialStockId?: number; // 分配的库存记录
    warehouseId?: number;
    warehouseName?: string;
    areaId?: number;
    areaName?: string;
    locationId?: number;
    locationName?: string;
    planQuantity?: number; // 计划分拣数量
    sortedQuantity?: number; // 已分拣数量
    scanned?: boolean; // 是否已扫码核验
    remark?: string;
  }
 
  /** 分拣任务 */
  export interface SortTask {
    id?: number;
    code?: string;
    noticeId?: number;
    noticeCode?: string;
    saleOrderId?: number;
    saleOrderCode?: string;
    clientId?: number;
    clientName?: string;
    recipientName?: string;
    recipientTelephone?: string;
    recipientAddress?: string;
    carrier?: string; // 承运商 / 配送方式
    shippingNumber?: string; // 物流单号
    status?: number; // 1 待分拣 2 分拣中 3 已完成 4 已取消
    sortUserId?: number;
    sortUserName?: string;
    sortTime?: string;
    printCount?: number;
    totalPlanQuantity?: number;
    totalSortedQuantity?: number;
    remark?: string;
    createTime?: string;
    lines?: SortTaskLine[];
  }
 
  /** 可生成分拣任务的发货通知单 */
  export interface PendingNotice {
    noticeId?: number;
    noticeCode?: string;
    saleOrderCode?: string;
    recipientName?: string;
    recipientTelephone?: string;
    recipientAddress?: string;
    deliveryDate?: string;
    outStatus?: number;
  }
 
  /** 提交生产申请结果 */
  export interface ProductionRequestResult {
    createdCount?: number;
    skippedCount?: number;
    failures?: string[];
  }
}
 
/** 查询分拣任务分页 */
export function getSortTaskPage(params: PageParam) {
  return requestClient.get<PageResult<MesWmSortTaskApi.SortTask>>(
    '/mes/wm/sort-task/page',
    { params },
  );
}
 
/** 查询分拣任务详情(含明细与货位指引) */
export function getSortTask(id: number) {
  return requestClient.get<MesWmSortTaskApi.SortTask>(
    `/mes/wm/sort-task/get?id=${id}`,
  );
}
 
/** 按发货通知单生成分拣任务 */
export function createSortTaskFromNotice(noticeId: number) {
  return requestClient.post<number>('/mes/wm/sort-task/create-from-notice', null, {
    params: { noticeId },
  });
}
 
/** 扫码分拣:校验条码并累加分拣数量 */
export function scanSortLine(data: {
  barcode: string;
  lineId: number;
  quantity?: number;
  taskId: number;
}) {
  return requestClient.post('/mes/wm/sort-task/scan', data);
}
 
/** 完成分拣(触发配送出库) */
export function finishSortTask(data: {
  carrier?: string;
  id: number;
  remark?: string;
  shippingNumber?: string;
}) {
  return requestClient.put('/mes/wm/sort-task/finish', data);
}
 
/** 取消分拣任务 */
export function cancelSortTask(id: number) {
  return requestClient.put('/mes/wm/sort-task/cancel', null, {
    params: { id },
  });
}
 
/** 删除分拣任务 */
export function deleteSortTask(id: number) {
  return requestClient.delete(`/mes/wm/sort-task/delete?id=${id}`);
}
 
/** 记录打印次数 */
export function updateSortTaskPrintCount(id: number) {
  return requestClient.put('/mes/wm/sort-task/update-print-count', null, {
    params: { id },
  });
}
 
/** 提交生产申请(补建生产申请 MPS 草稿) */
export function submitSortProductionRequest(id: number) {
  return requestClient.post<MesWmSortTaskApi.ProductionRequestResult>(
    '/mes/wm/sort-task/submit-production-request',
    null,
    { params: { id } },
  );
}
 
/** 查询可生成分拣任务的发货通知单(待出库且尚无分拣任务) */
export function getPendingNoticeList(noticeCode?: string) {
  return requestClient.get<MesWmSortTaskApi.PendingNotice[]>(
    '/mes/wm/sort-task/pending-notice-list',
    { params: { noticeCode } },
  );
}