库存使用审批流程-前端调用说明.md 12.9 KB

库存使用审批流程 - 前端调用说明

📋 目录

🔄 业务流程概述

库存使用审批流程包含以下步骤:

  1. 创建使用记录并提交审批 - 批量创建库存使用记录,同时创建申请记录并提交审批
  2. 查询申请记录 - 根据批次ID查询申请记录,查看审批状态
  3. 审批申请 - 审批人(财务老师或库管)审批申请(通过/不通过)
  4. 标记已领取 - 审批通过后,标记申请已领取
  5. 查询批次信息 - 查询批次详细信息,包括使用记录和申请记录
  6. 门店领取统计 - 按月份统计每个门店的领取总金额

📡 接口列表

接口 方法 路径 说明
批量创建使用记录 POST /api/Extend/LqInventoryUsage/BatchCreate 创建使用记录并提交审批(审批人ID和申请门店ID必填)
查询申请记录 GET /api/Extend/LqInventoryUsage/GetApplicationByBatchId 根据批次ID查询申请记录
审批申请 POST /api/Extend/LqInventoryUsage/Approve/{applicationId} 审批申请(通过/不通过)
标记已领取 PUT /api/Extend/LqInventoryUsage/MarkReceived/{applicationId} 标记申请已领取
查询批次信息 GET /api/Extend/LqInventoryUsage/GetBatchInfo 查询批次详细信息
门店领取统计 POST /api/Extend/LqInventoryUsage/GetStoreReceiveStatistics 按月份统计门店领取总金额

🚀 完整流程示例

步骤1:创建使用记录并提交审批

接口: POST /api/Extend/LqInventoryUsage/BatchCreate

请求示例:

const response = await request({
  url: '/api/Extend/LqInventoryUsage/BatchCreate',
  method: 'POST',
  data: {
    approverId: '13110190690',  // 审批人ID(财务老师或库管,必填)
    applicationStoreId: '1649328471923847168',  // 申请门店ID(必填)
    remarks: '测试审批流程',  // 备注(可选)
    usageItems: [
      {
        productId: '763978766132184325',  // 产品ID(必填)
        storeId: '1649328471923847168',  // 门店ID(必填)
        usageTime: '2025-01-09T10:00:00',  // 使用时间(必填)
        usageQuantity: 10,  // 使用数量(必填,必须大于0)
        relatedConsumeId: ''  // 关联消耗ID(可选)
      },
      {
        productId: '763979169120912645',
        storeId: '1649328471923847168',
        usageTime: '2025-01-09T10:00:00',
        usageQuantity: 20,
        relatedConsumeId: ''
      }
    ]
  }
});

// 响应示例
// {
//   "code": 200,
//   "msg": "操作成功",
//   "data": {
//     "batchId": "768041985045955845",  // 批次ID,后续查询需要使用
//     "successCount": 2,
//     "failCount": 0,
//     "successIds": ["768041987361211653", "768041987361211654"],
//     "failItems": []
//   }
// }

说明:

  • 系统会自动计算单价(从产品表获取)和合计金额(单价×数量)
  • 创建使用记录后会自动创建申请记录,状态为"审批中"
  • 保存返回的 batchId,后续查询需要使用

步骤2:查询申请记录(可选)

接口: GET /api/Extend/LqInventoryUsage/GetApplicationByBatchId

请求示例:

const response = await request({
  url: '/api/Extend/LqInventoryUsage/GetApplicationByBatchId',
  method: 'GET',
  params: {
    batchId: '768041985045955845'  // 批次ID
  }
});

// 响应示例
// {
//   "code": 200,
//   "msg": "操作成功",
//   "data": {
//     "success": true,
//     "data": {
//       "id": "768041987952608518",  // 申请ID
//       "usageBatchId": "768041985045955845",
//       "applicationUserId": "admin",
//       "applicationUserName": "管理员",
//       "applicationStoreId": "1649328471923847168",
//       "applicationTime": 1765280681000,
//       "approvalStatus": "审批中",  // 审批状态:待审批/审批中/已通过/未通过
//       "isReceived": 0,  // 是否已领取:0-未领取,1-已领取
//       "receiveTime": null,
//       "receiveUser": null,
//       "remarks": "测试审批流程",
//       "approvalRecords": []  // 审批记录列表
//     }
//   }
// }

// 注意:如果是旧数据(没有申请记录),返回:
// {
//   "code": 200,
//   "data": {
//     "success": false,
//     "message": "该批次没有对应的申请记录",
//     "data": null
//   }
// }

步骤3:审批申请

接口: POST /api/Extend/LqInventoryUsage/Approve/{applicationId}

请求示例(通过):

const response = await request({
  url: '/api/Extend/LqInventoryUsage/Approve/768041987952608518',
  method: 'POST',
  params: {
    result: '通过',  // 审批结果:通过/不通过
    opinion: '同意申请'  // 审批意见(可选)
  }
});

// 响应示例
// {
//   "code": 200,
//   "msg": "操作成功",
//   "data": null
// }

请求示例(不通过):

const response = await request({
  url: '/api/Extend/LqInventoryUsage/Approve/768041987952608518',
  method: 'POST',
  params: {
    result: '不通过',
    opinion: '库存不足,暂不批准'
  }
});

说明:

  • 只有状态为"审批中"的申请才能进行审批操作
  • 审批通过后,状态变为"已通过"
  • 审批不通过后,状态变为"未通过"

步骤4:标记已领取(审批通过后)

接口: PUT /api/Extend/LqInventoryUsage/MarkReceived/{applicationId}

请求示例:

const response = await request({
  url: '/api/Extend/LqInventoryUsage/MarkReceived/768041987952608518',
  method: 'PUT'
});

// 响应示例
// {
//   "code": 200,
//   "msg": "操作成功",
//   "data": null
// }

说明:

  • 只有审批状态为"已通过"的申请才能标记为已领取
  • 标记后会记录领取时间和领取人

步骤5:查询批次信息

接口: GET /api/Extend/LqInventoryUsage/GetBatchInfo

请求示例:

const response = await request({
  url: '/api/Extend/LqInventoryUsage/GetBatchInfo',
  method: 'GET',
  params: {
    batchId: '768041985045955845'  // 批次ID
  }
});

// 响应示例
// {
//   "code": 200,
//   "msg": "操作成功",
//   "data": {
//     "batchId": "768041985045955845",
//     "createTime": 1765280681000,
//     "createUser": "admin",
//     "createUserName": "管理员",
//     "totalCount": 2,
//     "effectiveCount": 2,
//     "ineffectiveCount": 0,
//     "totalUsageQuantity": 30,
//     "totalUsageAmount": 220.00,  // 总使用金额
//     "usageRecords": [
//       {
//         "id": "768041987361211653",
//         "productId": "763978766132184325",
//         "productName": "卸妆油",
//         "productPrice": 10.00,
//         "storeId": "1649328471923847168",
//         "storeName": "绿纤总部",
//         "usageTime": 1736388000000,
//         "usageQuantity": 10,
//         "usageTotalValue": 100.00  // 该条记录的总金额
//       },
//       // ... 更多记录
//     ],
//     "applicationInfo": {  // 申请记录信息(如果是旧数据,此字段为null)
//       "id": "768041987952608518",
//       "applicationUserId": "admin",
//       "applicationUserName": "管理员",
//       "applicationStoreId": "1649328471923847168",
//       "applicationTime": 1765280681000,
//       "approvalStatus": "已通过",
//       "isReceived": 1,
//       "receiveTime": 1765280756000,
//       "receiveUser": "admin",
//       "remarks": "测试审批流程"
//     }
//   }
// }

说明:

  • 兼容旧数据:如果该批次没有申请记录(旧数据),applicationInfo 字段为 null
  • 包含该批次的所有使用记录详情
  • 包含申请记录信息(如果有)

步骤6:门店领取统计(可选)

接口: POST /api/Extend/LqInventoryUsage/GetStoreReceiveStatistics

请求示例:

const response = await request({
  url: '/api/Extend/LqInventoryUsage/GetStoreReceiveStatistics',
  method: 'POST',
  data: {
    year: 2025,  // 统计年份(必填)
    month: 11,  // 统计月份(必填,1-12)
    storeId: ''  // 门店ID(可选,不传则统计所有门店)
  }
});

// 响应示例
// {
//   "code": 200,
//   "msg": "操作成功",
//   "data": {
//     "success": true,
//     "data": [
//       {
//         "storeId": "1649328471923847168",
//         "storeName": "绿纤总部",
//         "applicationCount": 5,  // 申请数量
//         "totalAmount": 1500.00  // 领取总金额
//       },
//       // ... 更多门店
//     ],
//     "total": 10,
//     "message": "查询成功,共10个门店"
//   }
// }

说明:

  • 只统计审批通过且已领取的申请
  • 按门店分组统计
  • 按总金额降序排列

📝 接口详细说明

1. 批量创建使用记录

必填参数:

  • approverId: 审批人ID(财务老师或库管)
  • applicationStoreId: 申请门店ID
  • usageItems: 使用记录列表(至少一条)
    • productId: 产品ID
    • storeId: 门店ID
    • usageTime: 使用时间
    • usageQuantity: 使用数量(必须大于0)

可选参数:

  • batchId: 批次ID(不传则自动生成)
  • remarks: 备注

自动计算:

  • unitPrice: 单价(从产品表获取)
  • totalAmount: 合计金额(单价×数量)

2. 查询申请记录

参数:

  • batchId: 批次ID(必填)

返回说明:

  • 如果存在申请记录:返回完整的申请信息
  • 如果不存在申请记录(旧数据):返回 success=falsedata=null

3. 审批申请

参数:

  • applicationId: 申请ID(路径参数)
  • result: 审批结果(查询参数,必填,值:通过/不通过)
  • opinion: 审批意见(查询参数,可选)

状态要求:

  • 只有状态为"审批中"的申请才能进行审批操作

4. 标记已领取

参数:

  • applicationId: 申请ID(路径参数)

状态要求:

  • 只有审批状态为"已通过"的申请才能标记为已领取

5. 查询批次信息

参数:

  • batchId: 批次ID(必填)

兼容性:

  • 兼容旧数据:如果该批次没有申请记录,applicationInfo 字段为 null

6. 门店领取统计

参数:

  • year: 统计年份(必填,范围:2020-2100)
  • month: 统计月份(必填,范围:1-12)
  • storeId: 门店ID(可选)

⚠️ 注意事项

  1. 审批人ID和申请门店ID必填

    • 创建使用记录时,approverIdapplicationStoreId 必须传入
    • 系统会自动创建申请记录并提交审批
  2. 兼容旧数据

    • 查询申请记录时,如果该批次没有申请记录(旧数据),会返回 success=false
    • 查询批次信息时,如果该批次没有申请记录,applicationInfo 字段为 null
    • 前端需要兼容这两种情况
  3. 审批流程

    • 申请创建后,状态为"审批中"
    • 只有"审批中"状态的申请才能进行审批操作
    • 审批通过后,状态变为"已通过"
    • 审批不通过后,状态变为"未通过"
  4. 标记已领取

    • 只有"已通过"状态的申请才能标记为已领取
    • 标记后会记录领取时间和领取人
  5. 单价和合计金额

    • 系统会自动计算单价(从产品表获取)和合计金额(单价×数量)
    • 前端无需手动计算
  6. URL编码

    • 审批接口的参数如果包含中文,需要进行URL编码
    • 例如:result=通过 需要编码为 result=%E9%80%9A%E8%BF%87

🔍 状态说明

审批状态(approvalStatus)

  • 待审批: 申请已创建,等待提交审批
  • 审批中: 申请已提交,等待审批
  • 已通过: 审批通过
  • 未通过: 审批不通过
  • 已退回: 申请被退回

领取状态(isReceived)

  • 0: 未领取
  • 1: 已领取

📊 数据流程

创建使用记录 → 创建申请记录(审批中) → 审批申请 → 标记已领取
     ↓                ↓                    ↓            ↓
  批次ID          申请ID              审批记录      领取记录

🎯 前端页面建议

  1. 创建使用记录页面

    • 表单包含:产品选择、门店选择、使用时间、使用数量
    • 必须选择审批人(财务老师或库管)
    • 必须选择申请门店
    • 提交后显示批次ID
  2. 申请列表页面

    • 显示所有申请记录
    • 显示审批状态、是否已领取
    • 支持筛选:审批状态、是否已领取、门店等
  3. 审批页面

    • 显示申请详情
    • 显示使用记录列表
    • 审批操作:通过/不通过,可填写审批意见
  4. 批次详情页面

    • 显示批次基本信息
    • 显示使用记录列表(包含单价和合计金额)
    • 显示申请记录信息(如果有)
    • 兼容旧数据(没有申请记录的情况)
  5. 统计页面

    • 选择年份和月份
    • 显示每个门店的领取统计
    • 显示总金额、申请数量等