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}。