Home - 采购单管理
最后修改者: huangyingliang 2026-08-14 17:44:41
编辑需求单
编号 : 003
POST - https://fl.tp6.hyj111.cn/admin/buyOrder/edit
headers下token必传
请求参数
| 参数名 | 参数类型 | 必传 | 缺省值 | 描述 |
|---|---|---|---|---|
| id | int | Y | 需求单ID(原采购单),对应bbc_buy_order.id | |
| factory_id | int | N | 供应商ID,对应bbc_vendor.vid;已有商品入库时不可修改 | |
| title | string | N | 需求单标题(原采购单),最多255个字;不传则保持原值 | |
| delivery_time | string | N | 交货时间,格式Y-m-d或Y-m-d H:i:s;不传则保持原值 | |
| remarks | string | N | 备注,最多5000个字;不传则保持原值 | |
| buy_order_activity_id | int | N | 可选采购单活动ID;只能给尚未绑定活动的采购单选择,绑定后该采购单不允许再次编辑 | |
| end_time | int | N | 0 | 结单标识:0=不处理,1=保存明细后将end_time设置为当前时间 |
| delete_time | int | N | 0 | 作废标识:0=不处理,1=保存明细后将delete_time设置为当前时间 |
| arr | array | Y | [] | 本次保存的需求单商品明细数组;每条传sku_id、number,可选is_urgent;共享仓由服务端根据需求单ID自动取得;相同SKU更新,不存在的SKU新增,未提交的原明细不删除 |
| buy_plan_order_ids | array | N | [] | 需求合并单来源ID数组;与plan_order_ids不能同时提交 |
| plan_order_ids | array | N | [] | 计划单来源ID数组;与buy_plan_order_ids不能同时提交 |
返回值
{
"status": 200, // 状态码
"msg": "编辑需求单成功", // 提示信息
"data": { // 编辑结果
"id": 1001, // 已编辑的需求单ID
"created_detail_count": 1, // 成功新增的需求单明细数量
"updated_detail_count": 2, // 成功更新的需求单明细数量
"completed_buy_plan_order_ids": [801], // 本次核销后已全部完成的需求合并单ID数组
"completed_plan_order_ids": [], // 本次核销后已全部完成的计划单ID数组
"buy_order_activity_id": 101, // 已绑定的采购单活动ID;未选择时为null
"total_amount": "800000.00", // 编辑后采购单商品总金额
"activity_remaining_amount": "200000.00" // 金额活动扣减后的剩余金额;时间活动或未选择活动时为null
}
}
备注
采购单后来改名为需求单,二者是同一种业务单据。id和arr必填。
编辑明细每条只需提交sku_id、number,可选is_urgent;共享仓由服务端根据需求单ID读取原warehouse_id,前端无需传share_store_id。
验证器校验采购单存在且未结单、未作废;只要bbc_buy_order.buy_order_activity_id已有值就禁止编辑,明细数量修改接口也遵循同一规则。
尚未绑定活动的采购单可通过buy_order_activity_id选择当前供应商status=1的活动;保存后将不能再次编辑。服务端重新计算SUM(number*price)并保存total_amount。
amount活动在事务内锁定并校验剩余金额,time活动只绑定活动ID。
请求示例:{"id":2214,"factory_id":66,"title":"需求单标题5555","remarks":"备注222","arr":[{"sku_id":1776,"number":22,"is_urgent":0}]}。
最后修改者: huangyingliang 2026-08-07 14:56:06
采购单列表
编号 : 004
GET - https://fl.tp6.hyj111.cn/admin/buyOrder/lists
headers下token必传
请求参数
| 参数名 | 参数类型 | 必传 | 缺省值 | 描述 |
|---|---|---|---|---|
| currentPage | int | N | 1 | 当前页,从1开始 |
| pageSize | int | N | 10 | 每页数量,默认10 |
| status | int | N | 采购单状态:0=待接单,1=待发货,2=待收货,3=已完成 | |
| id | int | N | 采购单ID | |
| vid | int | N | 供应商ID,对应bbc_vendor.vid | |
| vendor_tag_ids | array | N | [] | 供应商标签ID数组或英文逗号分隔字符串 |
| search | string | N | 供应商名称、采购单标题或采购单ID模糊搜索 | |
| state | int | N | 0 | 列表状态:0=全部,1=未完成,2=已完成,3=已删除,4=超时,5=入库中,6=供应商已添加,7=已发货,8=已接单 |
| share_store_id | int | N | 共享仓ID | |
| gid | int | N | 商品SKU ID | |
| urgent | int | N | 是否只查未完成的加急明细:1=是,0或空=否 | |
| orderby | string | N | 排序:add=创建时间倒序,id_asc=ID正序,delivery_time=交货时间优先,end=完成时间倒序,空=ID倒序 |
返回值
{
"status": 200, // 状态码
"msg": "获取采购单列表成功", // 提示信息
"data": { // 采购单兼容列表结果
"list": [ // 采购单数据
{
"id": 33847, // 采购单ID
"status": 2, // 采购单状态:0=待接单,1=待发货,2=待收货,3=已完成
"order_receive_time": null, // 接单时间
"deliver_goods_time": "2026-08-05 11:00:00", // 发货时间
"complete_time": null, // 收货完成时间
"num": "1700", // 发货件数
"logistics_bill_image": null, // 物流单图片,多个地址以英文逗号分隔
"title": "外置灯", // 采购单标题
"creat_time": "2026-08-06 17:11", // 创建时间,精确到分钟
"warehouse_id": "11", // 共享仓ID
"admin_id": "18351322715", // 创建管理员名称,兼容旧字段名
"update_time": "2026-08-06 17:11", // 更新时间,精确到分钟
"end_time": null, // 结单时间
"delete_time": null, // 作废时间
"factory_id": "272", // 供应商ID
"delivery_time": null, // 计划交货时间
"remarks": "", // 备注
"is_start": "0", // 是否开始入库:0=否,1=是
"is_add": "0", // 供应商是否添加过商品:0=否,1=是
"have_delivery_time": "0", // 是否设置交货时间:0=否,1=是
"checklist_image": "//fl.tp6.hyj111.cn/create_image/72443275084.png", // 采购清单图片
"total_amount": "800000.00", // 采购单商品总金额,按明细number乘price后求和
"buy_order_activity_id": 101, // 已绑定的采购单活动ID;未绑定时为null
"activity_remaining_amount": "200000.00", // 金额活动绑定后的剩余金额快照;时间活动或未绑定时为null
"activity_label": "活动单", // 活动标签;绑定采购单活动时为活动单,未绑定时为空字符串
"numbers": "1700", // 采购明细计划总数量
"real_number": "0", // 采购明细实收总数量
"store_name": "平阳县恒腾机动车配件厂", // 供应商名称
"gxc_name": "南通知化慧仓科技有限公司(南通仓)", // 共享仓名称
"duty_name": "沈金花", // 共享仓负责人
"tel": "15312956410", // 共享仓负责人电话
"live_address": "江苏省 南通市 通州区 刘桥镇 青年路48号", // 共享仓地址
"shi_bie_no": "3847", // 采购单识别号,取采购单ID后四位
"is_have_vendor_create": 0, // 是否存在供应商创建且未审核的明细:0=否,1=是
"is_chao": 1, // 是否超时整天:0=否,1=是
"chao_shi_num": "超时2天", // 超时天数文案,仅存在发货时间且已超时时返回
"chao": [[0], [1]], // 超时天数占位数组,仅存在发货时间且已超时时返回
"progress": 0, // 入库单进度;无入库单时为0,有数据时为包含id和number的数组
"progress_num": 0, // 关联入库单数量
"progress_bar": -2, // 发货时间与当前时间相差的整天数
"progress_bar_num": "0%" // 实收数量占计划数量百分比
}
],
"pagination": { // 旧分页结构
"current": 1, // 当前页
"pageSize": 10, // 每页数量
"all_num": "312" // 符合条件的采购单总数
}
}
}
备注
重构自test56 SystemManage/control/buy_order.php::getBuy_orderList。lists与index共用同一套Service及DAO查询条件,lists仅把分页和单条数据转换为旧接口结构。total_amount为采购单商品总金额;buy_order_activity_id为已绑定活动ID,未绑定时为null;activity_remaining_amount为金额活动绑定后的剩余金额快照,时间活动或未绑定活动时为null;activity_label为活动标签,已绑定采购单活动时返回活动单,未绑定时返回空字符串。支持旧参数currentPage、pageSize、status、id、vid、vendor_tag_ids、search、state、share_store_id、gid、urgent、orderby;orderby只接受白名单值。示例:currentPage=1&pageSize=10&orderby=delivery_time&search=&state=1&share_store_id=&gid=&urgent=。
最后修改者: huangyingliang 2026-08-07 14:10:33
修改需求单明细采购数量
编号 : 004
POST - https://fl.tp6.hyj111.cn/admin/buyOrder/saveDetailNumber
headers下token必传
请求参数
| 参数名 | 参数类型 | 必传 | 缺省值 | 描述 |
|---|---|---|---|---|
| id | int | Y | 需求单明细ID(原采购单明细),对应bbc_buy_order_detail.id | |
| num | int | Y | 新的采购数量,必须大于0且不能小于该明细已入库数量real_number |
返回值
{
"status": 200, // 状态码
"msg": "修改需求单明细采购数量成功", // 提示信息
"data": { // 修改结果
"id": 33847, // 已修改的需求单明细ID
"buy_order_id": 1001, // 明细所属的需求单ID
"number": 50 // 修改后的采购数量
}
}
备注
用于单独修改bbc_buy_order_detail.number,兼容旧接口save_buy_order_detail_num的id和num参数名。id为需求单明细ID,num为新的采购数量。验证器会检查明细是否存在、所属需求单是否已结单或已作废;如果所属采购单已经绑定buy_order_activity_id,则不允许修改明细采购数量;num也不能小于已入库数量real_number。保存时会在同一事务中锁定采购单明细及所属采购单,并再次校验采购单活动绑定状态;修改成功后同步重算bbc_buy_order.total_amount。请求示例:{"id":33847,"num":50}。
最后修改者: huangyingliang 2026-08-07 14:07:12
新增需求单
编号 : 001
POST - https://fl.tp6.hyj111.cn/admin/buyOrder/add
headers下token必传
请求参数
| 参数名 | 参数类型 | 必传 | 缺省值 | 描述 |
|---|---|---|---|---|
| title | string | Y | 需求单标题(原采购单),最多255个字 | |
| remarks | string | N | 备注,最多5000个字 | |
| factory_id | int | Y | 供应商ID,对应bbc_vendor.vid,必填 | |
| delivery_time | string | N | 交货时间,格式Y-m-d或Y-m-d H:i:s | |
| buy_order_activity_id | int | N | 可选采购单活动ID;必须属于当前供应商且status=1,不选择传空值或null | |
| share_store_id | array | Y | [] | 共享仓ID数组或英文逗号分隔字符串;每个仓库生成一张需求单(原采购单) |
| arr | array | Y | [] | 需求单商品明细数组;元素字段sku_id、number、share_store_id必填,is_urgent可选0或1 |
| buy_plan_order_ids | array | N | [] | 需求合并单来源ID数组;与plan_order_ids不能同时提交 |
| plan_order_ids | array | N | [] | 计划单来源ID数组;与buy_plan_order_ids不能同时提交 |
返回值
{
"status": 200, // 状态码
"msg": "新增需求单成功", // 提示信息
"data": { // 新增结果
"order_ids": [1001, 1002], // 新增需求单ID数组,顺序与去重后的warehouse_ids一致
"warehouse_ids": [1, 2], // 已创建需求单的共享仓ID数组
"created_count": 2, // 成功创建的需求单数量
"created_detail_count": 2, // 成功新增的需求单明细数量
"completed_buy_plan_order_ids": [801], // 本次核销后已全部完成的需求合并单ID数组
"completed_plan_order_ids": [], // 本次核销后已全部完成的计划单ID数组
"buy_order_activity_id": 101, // 已绑定的采购单活动ID;未选择时为null
"order_amounts": [ // 每张新增采购单的金额及活动剩余金额快照
{
"id": 1001, // 需求单ID
"total_amount": "800000.00", // 当前需求单商品总金额
"activity_remaining_amount": "200000.00" // 金额活动扣减后的剩余金额;时间活动或未选择活动时为null
}
]
}
}
备注
采购单后来改名为需求单,二者是同一种业务单据,对应bbc_buy_order及bbc_buy_order_detail。新增接口已合并需求单主表和商品明细,原addDetail接口已取消,不再接收is_plan。buy_order_activity_id可选;选择后必须属于factory_id商户且status=1。服务端按每张采购单的SUM(number*price)保存total_amount;amount活动会在事务内锁定活动并校验实时剩余金额,超出时整单回滚,同时保存buy_order_activity_id和activity_remaining_amount;time活动只绑定活动ID,剩余金额为null。按share_store_id批量创建需求单,每个共享仓生成一张独立单据。主表、明细、活动金额、来源进度和来源单完成状态在同一事务中处理,任一失败全部回滚。请求示例:{"title":"8月需求单","remarks":"优先发货","factory_id":17,"delivery_time":"2026-08-10 18:00:00","buy_order_activity_id":101,"share_store_id":[1,2],"buy_plan_order_ids":[801],"plan_order_ids":[],"arr":[{"sku_id":10001,"number":5,"share_store_id":1,"is_urgent":1},{"sku_id":10002,"number":3,"share_store_id":2,"is_urgent":0}]}。
最后修改者: huangyingliang 2026-08-07 13:08:52
需求单商品明细
编号 : 005
POST - https://fl.tp6.hyj111.cn/admin/buyOrder/detail
headers下token必传
请求参数
| 参数名 | 参数类型 | 必传 | 缺省值 | 描述 |
|---|---|---|---|---|
| buy_order_id | int | Y | 需求单ID(原采购单),对应bbc_buy_order.id |
返回值
{
"status": 200, // 状态码
"msg": "获取需求单明细成功", // 提示信息
"data": { // 需求单明细及数量汇总
"list": [ // 需求单商品明细列表
{
"id": 33847, // 需求单明细ID
"buy_order_id": 1001, // 需求单ID
"sku_id": 1776, // 商品SKU ID
"number": 20, // 采购数量
"price": "12.50", // 需求单明细保存的成本单价
"real_number": 8, // 已入库数量
"current_stock": 1513, // 当前库存,历史明细可能保存该值
"is_audit": 1, // 审核状态:0=未审核,1=默认状态,2=拒绝,3=已通过
"is_urgent": 0, // 是否加急:0=否,1=是
"goods_name": "测试商品", // 商品名称
"goods_image": "https://example.com/goods.jpg", // 商品图片完整访问地址
"goods_costprice": "12.50", // 兼容旧页面的成本单价,与price一致
"spec_relation": "红色 L", // 商品规格
"all_number": 6 // 该商品已关联发货单的发货数量
}
],
"cai_gou_number": 20, // 需求单采购数量合计
"fa_huo_number": 6, // 已关联发货单的发货数量合计
"fa_huo_number_new": 8, // 需求单明细实际入库数量合计
"already": true // 是否已有商品入库,true时前端应禁止编辑供应商
}
}
备注
重构自旧接口getBuy_order,用于查询需求单商品明细及数量汇总。list保留旧页面需要的goods_name、goods_image、goods_costprice、spec_relation和all_number字段。cai_gou_number是bbc_buy_order_detail.number合计;fa_huo_number按bbc_buy_inventory.gid汇总已关联发货单(receiving_note_id>0)的num;fa_huo_number_new是buy_order_detail.real_number合计;already表示是否存在real_number>0的明细,前端可用它禁用供应商选择,但编辑接口仍会在服务端校验。请求示例:{"buy_order_id":1001}。