liu
昨天 18340ebdeb405be3ba01eb4d1600d9b26cee7ccd
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
152
153
154
155
156
import type { PageParam, PageResult } from '@vben/request';
 
import { requestClient } from '#/api/request';
 
export namespace ErpPurchaseRequestApi {
  /** 采购申请信息 */
  export interface PurchaseRequest {
    id?: number; // 编号
    no?: string; // 申请编号
    status?: number; // 状态:0未提交 10审批中 20审核通过 30审核不通过 40已取消
    processInstanceId?: string; // 工作流编号
    requestUserId?: number; // 申请人编号
    requestUserName?: string; // 申请人名称
    requestDeptId?: number; // 申请部门编号
    requestDeptName?: string; // 申请部门名称
    requestTime: string; // 申请时间
    requestReason?: string; // 申请理由
    supplierId?: number; // 供应商编号
    supplierName?: string; // 供应商名称
    discountPercent?: number; // 优惠率
    attachmentList?: { id: number; name?: string; url?: string }[]; // 附件列表
    remark?: string; // 备注
    totalCount?: number; // 总数量
    totalPrice?: number; // 总金额
    productNames?: string; // 产品名称列表
    orderId?: number; // 生成的采购订单编号
    orderNo?: string; // 生成的采购订单号
    processInstanceId?: number; // 审批流程实例编号
    items?: PurchaseRequestItem[]; // 申请明细
    createTime?: string; // 创建时间
  }
 
  /** 采购申请明细 */
  export interface PurchaseRequestItem {
    id?: number; // 编号
    productId: number; // 产品编号
    productName?: string; // 产品名称
    productUnitId?: number; // 产品单位编号
    productUnitName?: string; // 产品单位名称
    productBarCode?: string; // 产品条码
    productPrice?: number; // 产品单价(参考价)
    count: number; // 数量
    taxPercent?: number; // 税率
    demandTime?: string; // 需求日期
    remark?: string; // 备注
  }
}
 
/** 采购申请导入结果 */
export interface ImportResult {
  /** 创建成功的采购申请单号 */
  createList?: string[];
  /** 更新成功的采购申请单号 */
  updateList?: string[];
  /** 导入失败集合,key 为采购申请单号或行号,value 为失败原因 */
  failureList?: Record<string, string>;
}
 
/** 创建采购申请 */
export function createPurchaseRequest(data: ErpPurchaseRequestApi.PurchaseRequest) {
  return requestClient.post('/erp/purchase-request/create', data);
}
 
/** 更新采购申请 */
export function updatePurchaseRequest(data: ErpPurchaseRequestApi.PurchaseRequest) {
  return requestClient.put('/erp/purchase-request/update', data);
}
 
/** 提交采购申请审批 */
export function submitPurchaseRequest(id: number, processDefinitionKey: string) {
  return requestClient.put('/erp/purchase-request/submit', null, { params: { id, processDefinitionKey } });
}
 
/** 重置被驳回的采购申请为草稿状态 */
export function resetPurchaseRequestStatus(id: number) {
  return requestClient.put('/erp/purchase-request/reset-status', null, { params: { id } });
}
 
/** 生成采购订单 */
export function generatePurchaseOrder(id: number, supplierId: number) {
  return requestClient.post<number>('/erp/purchase-request/generate-order', null, { params: { id, supplierId } });
}
 
/** 删除采购申请 */
export function deletePurchaseRequest(ids: number[]) {
  return requestClient.delete('/erp/purchase-request/delete', { params: { ids: ids.join(',') } });
}
 
/** 获取采购申请详情 */
export function getPurchaseRequest(id: number) {
  return requestClient.get<ErpPurchaseRequestApi.PurchaseRequest>(
    `/erp/purchase-request/get?id=${id}`,
  );
}
 
/** 获取采购申请分页 */
export function getPurchaseRequestPage(params: PageParam) {
  return requestClient.get<PageResult<ErpPurchaseRequestApi.PurchaseRequest>>(
    '/erp/purchase-request/page',
    { params },
  );
}
 
/** 导出采购申请 Excel */
export function exportPurchaseRequest(params: any) {
  return requestClient.download('/erp/purchase-request/export-excel', { params });
}
 
/** 获取审批流程列表 */
export function getApproveProcessList(id: number) {
  return requestClient.get(`/erp/purchase-request/approve-process-list`, { params: { id } });
}
 
/** BPM 流程实例状态 → 业务状态映射 */
export const BPM_STATUS_TO_BIZ: Record<number, number> = {
  1: 10, // RUNNING → 审批中
  2: 20, // APPROVE → 审核通过
  3: 30, // REJECT → 审核不通过
  4: 40, // CANCEL → 已取消
};
 
/**
 * 同步采购申请的业务状态(根据 BPM 流程实例实际状态)
 * 用于修复后端监听器未正确回写导致的业务状态不一致问题
 */
export async function syncPurchaseRequestStatus(items: ErpPurchaseRequestApi.PurchaseRequest[]) {
  const processingItems = items.filter(
    (item) => item.status === 10 && item.processInstanceId,
  );
  if (processingItems.length === 0) return;
 
  const { getApprovalDetail } = await import('#/api/bpm/processInstance');
  for (const item of processingItems) {
    try {
      const detail = await getApprovalDetail({
        processInstanceId: item.processInstanceId,
      });
      const bizStatus = BPM_STATUS_TO_BIZ[detail.processInstance?.status];
      if (bizStatus && bizStatus !== 10) {
        item.status = bizStatus;
      }
    } catch {
      // 查询失败时保持原有状态
    }
  }
}
 
/** 下载采购申请导入模板 */
export function importPurchaseRequestTemplate() {
  return requestClient.download('/erp/purchase-request/get-import-template');
}
 
/** 导入采购申请 */
export function importPurchaseRequest(file: File) {
  return requestClient.upload<ImportResult>('/erp/purchase-request/import', { file });
}