预采购
预采购
- 预采购
- purchase/task/get_create_source(修改)
- purchase/task/create_many(新增)
- merchandise/spu/branch(修改)
- purchase/task/suppliers(新增)
- stock/purchase_sheet/create(新增)
- stock/purchase_sheet/modify(修改)
- stock/purchase_sheet/submit(修改)
- stock/purchase_sheet/get(修改)
- stock/purchase_sheet/details(修改)
- purchase_spec/create(修改)
- purchase_spec/search(修改)
- purchase_spec/update(修改)
- purchase/task/search(修改)
- purchase/task/print(修改)
- 采购描述受影响的其他改动接口
- /purchase/task/optional_suppliers_purchasers(老接口供参考)
- stock/settle_supplier/supply_sku 采购单据增加条目(老接口供参考)
- 权限部分
- 开发计划(6天)
purchase/task/get_create_source(修改)
接口描述: 传入spu id返回对应的采购规格和相关信息
请求方法: GET
请求参数:
不变
响应:
【
{
spec_id(新增) M str 采购规格id
ratio(新增) M float 采购ratio
unit_name(新增) M str 采购单位
std_unit_name M str 基本单位
}
】
purchase/task/create_many(新增)
接口描述: 手动创建采购任务,可以进行批量新建,使用同步方式新建
请求方法: POST
请求参数:
tasks M list<dict>
[
{
spec_id M str 采购规格
plan_purchase_amount M float 采购量(基本单位)
setttle_supplier_id M str 供应商id
purchaser_id O int 采购员id(该供应商无默认采购员时可以不传)
time_config_id O str 报价单id
cycle_start_time O datetime 收货时间(如:2019-09-09 13:30:00)
}
。。。
]
响应: 不变
示例:
request:
https://station.guanmai.cn/purchase/task/create
POST请求参数:
tasks: [
{"spec_id": "D14393659",
"plan_purchase_amount": 22,
"setttle_supplier_id": "T3455",
"purchaser_id": 33,
"time_config_id": "ST4292",
"cycle_start_time": 2019-09-09 13:30:00
},
{"spec_id": "D14392239",
"plan_purchase_amount": 33.33,
"setttle_supplier_id": "T1125",
},
]
response:
code: 0
data: null
msg: "ok"
逻辑:
校验该sku是否存在
校验该供应商是否可以供应该商品,沿用原来的逻辑
创建采购任务
特殊逻辑:
用户选择了供应商之后、采购员选为该供应商的默认采购员(在purchase/task/get_create_source接口返回)
如该供应商无默认采购员、则选为可从该供应商采购商品的采购员列表中的顺序第一位采购员(/purchase/task/optional_suppliers_purchasers拉取)
同时支持用户进行采购员的更改
merchandise/spu/branch(修改)
接口描述: 搜索商品spu
请求方法: GET
请求参数:
不变
响应:
【
{
current_inventory(新增) M float 库存
}
。。。
】
purchase/task/suppliers(新增)
接口描述: 传入spec id返回可采购该规格的供应商以及不可采购的供应商以及他们的默认采购员
请求方法: GET
请求参数:
spec_id M str 采购规格
响应:
【
supply M list<dict> 可供应供应商
[
{
settle_supplier_id M str 供应商id
supplier_name M str 供应商名称
default_purchaser_id O int 该供应商默认采购员id(没有时返回null)
default_purchaser_name O str 该供应商默认采购员名称(没有时返回null)
}
]
cant_supply M list<dict> 不可供应供应商
[
{
settle_supplier_id M str 供应商id
supplier_name M str 供应商名称
default_purchaser_id O int 该供应商默认采购员id(没有时返回null)
default_purchaser_name O str 该供应商默认采购员名称(没有时返回null)
}
]
】
stock/purchase_sheet/create(新增)
接口描述: 后台新建时保存草稿、保存并新建两个按钮请求的接口
请求方法: POST
请求参数:
settle_supplier_id M str 供应商id
purchaser_id C int 采购员id,保存并提交时采购员字段必填
submit M bool 是否提交 0:不提交、保存草稿,1:保存并提交
sheet_remark O str 单据备注(不能超过50个字)
details
[
{
purchase_price M float 采购单价(单位:分)
spec_id M str 采购规格id
purchase_amount M float 采购数量(基本单位)
goods_remark(新增) O str 商品备注不能超过50个字)
}
。。。
]
响应:
purchase_sheet_id M str 采购单据号
stock/purchase_sheet/modify(修改)
接口描述: 保存草稿,对于新增的商品,可以保存草稿
需要至少有一个商品、并且新建采购单时可以传一个purchaser_id
新建采购单据的时候预采购金额的展示需要对应的改动
请求方法: POST
请求参数:
purchaser_id(新增) O int 采购员id(只针对后台建单的时候传)
sheet_remark(新增) O str 单据备注(不能超过50个字)
details
[
{
purchase_price
spec_id
purchase_amount
goods_remark(新增) O str 商品备注(不能超过50个字)
}
]
响应:
不变
stock/purchase_sheet/submit(修改)
接口描述: 提交采购单(后端要进行部分逻辑的修改,包括、入库单的备注采用采购单据的备注)
请求方法: POST
请求参数:
不变
响应:
不变
逻辑:
提交采购单据之前应该沿用现用逻辑:先请求一下stock/purchase_sheet/modify接口保存当前改动、
再请求stock/purchase_sheet/submit接口进行提交
stock/purchase_sheet/get(修改)
接口描述: 获取采购单列表、source字段增加枚举
请求方法: get
请求参数:
不变
响应:
source(修改) M int 来源 0:业务平台 1:采购APP 2:后台建单
备注:
新建采购单的商品无采购任务的计划采购数,会导致采购单据预采购金额显示异常,需要对应修改。
stock/purchase_sheet/details(修改)
接口描述: 采购单详情
请求方法: get
请求参数:
不变
响应:
purchase_sheet: {
sheet_remark(新增) M str 单据备注
source(新增) M int 来源 0:业务平台 1:采购APP 2:后台建单
purchaser_id(新增) M int 采购员id,只有后台建单的才会返回,可能为空
purchaser_name(新增) M str 采购员名称,只有后台建单的才会返回,可能为空
}
tasks M list<dict>
[
{
goods_remark(新增) M str 采购商品备注,没有时为空字符串
description(新增) M str 采购描述,没有时为空字符串
}
。。。
]
示例:
request
https://station.guanmai.cn/stock/purchase_sheet/details?sheet_no=T4969-CGD-2019-09-10-00002
response
{
code: 0,
msg: "ok",
data: {
purchase_sheet: {
status: 3,
require_goods_sheet_status: 1,
create_time: "2019-09-10T10:24:30.345",
station_name: "总仓-李铭",
operator: "liming",
submit_time: null,
customer_id: "002",
supplier_name: "三只松鼠",
settle_supplier_id: "T33736"
sheet_remark: "这是新增的单据备注"
},
tasks: [
{
release_id: 105910930,
purchase_unit_name: "包",
std_unit_name: "瓶",
spu_status: 1,
already_purchased_amount: 0,
ratio: 3,
status: 2,
release_time: "2019-09-10T10:24:09",
purchase_price: "100",
last_purchase_price: 1,
ref_price: 100,
purchase_amount: 3,
supplier_purchase_avg_price: "7.38",
category_name_2: "一只椰子",
pinlei_name: "一只椰子",
spec_id: "D18004365",
address: [
{
sort_id: 1,
plan_amount: 3,
remark: "",
address_id: "268417",
suggest_purchase_num: 0,
res_name: "aaa不准删"
}
],
stock: 8,
category_name_1: "一只椰子",
spec_name: "测试牛奶1|3瓶/包",
id: "5d77095e7a60f654e5fddc0d",
plan_amount: 3,
suggest_purchase_num: -5,
goods_remark: "这是新增的采购商品备注、同订单备注"
description: "这是新增的采购描述"
}
],
in_stock_sheet_id: ""
}
}
备注:
新建采购单的商品无采购任务的计划采购数,会导致采购单据预采购金额显示异常,需要对应修改。
purchase_spec/create(修改)
接口描述: 新建采购规格、增加采购描述字段
请求方法: post
请求参数:
description(新增) O str 采购描述
响应:
不变
示例:
pass
purchase_spec/search(修改)
接口描述: 采购规格详情、增加采购描述字段
请求方法: get
请求参数:
不变
响应:
purchase_spec M list<dict>
[
{
description(新增) M str 采购描述,没有时为空字符串
}
。。。
]
示例:
pass
purchase_spec/update(修改)
接口描述: 更新采购规格、增加采购描述字段
请求方法: post
请求参数:
description(新增) O str 采购描述
响应:
不变
示例:
pass
purchase/task/search(修改)
接口描述: 查看采购任务、增加采购描述字段
请求方法: post
请求参数:
不变
响应:
【
{
description(新增) M str 采购描述
}
】
示例:
pass
purchase/task/print(修改)
接口描述: 查看采购任务、增加采购描述字段
请求方法: post
请求参数:
不变
响应:
【
{
tasks: [
{description(新增) M str 采购描述
purchase_sheet_id(新增) O str 采购单据号
}
...
]
}
】
示例:
request:
purchase/task/print?begin_time=2019-09-09+00%3A00%3A00&end_time=2019-09-09+00%3A00%3A00&print_what=task&q_type=1&is_print=1
response:
{
code: 0,
msg: "ok",
data: [
{
tasks: [
{
pinlei_name: "白菜",
sku_name: "小白菜【斤】",
category1_name: "蔬菜",
std_unit_name: "斤",
addresses: [
{
plan_purchase_amount: 33,
sort_id: "",
sale_unit_name: "斤",
remark: "",
sale_ratio: 1,
address_id: "",
res_name: ""
}
],
price: 430,
stock: 13,
category2_name: "叶菜类",
sale_ratio: 1,
sale_unit_name: "斤",
address_count: 1,
suggest_purchase_num: 19.999999999989086
description: "新增的采购描述字段"
},
...
]
}
采购描述受影响的其他改动接口
设置打印模板相关接口在采购条目中增加采购描述description字段
purchase/task/print_no_login(采购任务分享)
stock/purchase_sheet/details(采购单据打印)
stock/purchase_sheet/details_no_login(采购单据分享)
stock/in_stock_sheet/material/print (入库单打印)
拉取全部供应商接口:station/stock/settle_supplier/get
拉取全部采购员接口:purchase/purchaser/search
新建采购任务拉取spu的接口:merchandise/spu/branch
根据spu id拉取采购规格的接口:purchase/task/get_create_source
采购单据补货拉取采购商品的接口: stock/settle_supplier/supply_sku
拉取一个供应商下有关联关系的采购员接口:/purchase/task/optional_suppliers_purchasers
/purchase/task/optional_suppliers_purchasers(老接口供参考)
接口描述: 批量修改失败时拉取对应的供应商或者采购员,传spec_id拉可选的供应商,传settle_supplier_id拉取可选的采购员
请求方法: get
请求参数:
spec_id C str 采购规格(采购规格和供应商id二选一)
settle_supplier_id C str 供应商id
响应: {
"code": 0,
"msg": "ok",
"data": {
optional_suppliers: C str 可选的供应商
[
{settle_supplier_id M str 供应商id
supplier_name M str 供应商名称
}
...
]
optional_purchasers: C str 可选的采购员
[
{purchaser_id M str 采购员id
purchaser_name M str 采购员名称
}
...
]
}
stock/settle_supplier/supply_sku 采购单据增加条目(老接口供参考)
接口描述: 采购单据增加条目,返回当前供应商和其他供应商的采购规格,
其他供应商的采购规格里面的供应商返回的是当前供应商信息,用于查询七天采购均价(业务逻辑)
请求方法: GET
请求参数:
settle_supplier_id M str 供应商id
name M str 搜索关键词
响应:
{
target_supplier M list<dict> 当前供应商数据
[
{
'settle_supplier_name': M str 供应商名称
'sale_ratio': M float 采购ratio
'spec_name': M str 采购规格名称
'spu_name': M str spu名称
'spec_id': M str 采购规格id
'sale_unit_name': M str 采购单位
'std_unit_name': M str 基本单位
'station_id': M str 站点id
'settle_supplier_id': M str 供应商id
'purchase_price_limit': M float
'category_id_1': M str 一级分类
'category_id_1_name': M str
'category_id_2': M str二级分类
'category_id_2_name': M str,
'price': M float 当前供应商的最近询价
'plan_amount': None
'stock':M float 库存
'description':M float 采购描述
'last_in_stock_price': M float 供应商最近入库价
'last_purchase_price': M float 供应商最近采购价
'last_quote_price': M float 供应商最近询价
'latest_in_stock_price': M float 最近入库价
'latest_purchase_price': M float 最近采购价
'latest_quote_price': M float 最近询价
'stock_avg_price': M float 库存均价
}
]
other_supplier M list<dict> 其他供应商数据
[
{
'settle_supplier_name': M str 供应商名称
'sale_ratio': M float 采购ratio
'spec_name': M str 采购规格名称
'spu_name': M str spu名称
'spec_id': M str 采购规格id
'sale_unit_name': M str 采购单位
'std_unit_name': M str 基本单位
'station_id': M str 站点id
'settle_supplier_id': M str 供应商id
'purchase_price_limit': M float
'category_id_1': M str 一级分类
'category_id_1_name': M str
'category_id_2': M str二级分类
'category_id_2_name': M str,
'price': M float 当前供应商的最近询价
'plan_amount': None
'stock':M float 库存
'description':M float 采购描述
'last_in_stock_price': M float 供应商最近入库价
'last_purchase_price': M float 供应商最近采购价
'last_quote_price': M float 供应商最近询价
'latest_in_stock_price': M float 最近入库价
'latest_purchase_price': M float 最近采购价
'latest_quote_price': M float 最近询价
'stock_avg_price': M float 库存均价
}
]
}
权限部分
在xnn_core_product2库的auth_permission权限表中新增一条权限
name name_en codename level2_id
新建采购单据 Add Create Purchase Sheet add_create_purchase_sheet 30
插入语句为:
INSERT INTO `auth_permission` (`name`, `name_en`, `content_type_id`, `codename`, `level2_id`)
VALUES
('新建采购单据', 'Create Purchase Sheet', 63, 'add_create_purchase_sheet', 30);
开发计划(6天)
2019.09.11 修改老接口purchase/task/create(实际是个新接口、名字沿用原来的)
2019.09.12 新增stock/purchase_sheet/create接口、修改purchase/task/get_create_source接口
2019.09.16 修改stock/purchase_sheet/modify、stock/purchase_sheet/submit接口
2019.09.17 修改stock/purchase_sheet/get、stock/purchase_sheet/details接口
2019.09.18 采购单据可以拉取其他供应商的商品逻辑灰度后合进来、调整相关的逻辑
2019.09.19 修改采购描述相关接口