PDA扫码&商品预分拣
DB改动
mysql xnn_core_product_2
sort_package
id str 主键id
package_id str 包装id
station_id str 站点id
group_id int group_id
sku_id str sku_id
quantity decimal 重量 基本单位
package_operator int 打包人
package_time datetime 打包时间
sort_status int 分拣状态
sort_operator int 分拣操作人
employee_id int 供应商id/操作员id
sort_time datetime 分拣时间
order_id str 关联订单号
create_time datetime 创建时间
update_time datetime 更新时间
status int 删除标记 0为删除
delete_time datetime 删除时间
mongo order表
details 中新增
sort_way int 1: pc, 2: pda 分拣渠道
CREATE TABLE `tbl_sort_package` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`package_id` varchar(32) NOT NULL,
`station_id` varchar(16) NOT NULL,
`group_id` int(11) NOT NULL,
`spu_id` varchar(32) NOT NULL,
`sku_id` varchar(32) NOT NULL,
`quantity` decimal(15,4) NOT NULL DEFAULT '0.0000',
`package_operator` int(11) NOT NULL DEFAULT '0',
`package_time` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
`package_employee_id` varchar(16) NOT NULL DEFAULT '',
`sort_status` tinyint(4) NOT NULL DEFAULT '1',
`sort_operator` int(11) NOT NULL DEFAULT '0',
`sort_time` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
`order_id` varchar(16) NOT NULL DEFAULT '',
`order_sku_id` varchar(16) NOT NULL DEFAULT '',
`source_order_id` varchar(16) NOT NULL DEFAULT '',
`create_time` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
`modify_time` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
`pstatus` tinyint(4) NOT NULL DEFAULT '0',
`delete_time` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
`extra1` int(11) NOT NULL DEFAULT '0',
`extra2` int(11) NOT NULL DEFAULT '0',
`extra3` int(11) NOT NULL DEFAULT '0',
`extra4` varchar(128) NOT NULL DEFAULT '',
`extra5` varchar(128) NOT NULL DEFAULT '',
`extra6` varchar(128) NOT NULL DEFAULT '',
`extra7` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
`extra8` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
`extra9` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
`extra10` decimal(15,4) NOT NULL DEFAULT '0.0000',
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_package_id` (`package_id`),
KEY `idx_order_id` (`order_id`),
KEY `idx_sku_id` (`sku_id`),
KEY `idx_order_sku_id` (`order_sku_id`),
KEY `idx_station_id` (`station_id`)
) ENGINE=InnoDB AUTO_INCREMENT=121 DEFAULT CHARSET=utf8mb4;
INSERT INTO `tbl_permission_class` (`id`, `name`, `name_en`, `level`, `parent_id`, `create_time`, `update_time`, `delete`, `sort_no`)
VALUES
(41, '分拣系统', '分拣系统', 1, NULL, '2019-01-03 14:29:00', '2019-01-03 14:29:00', 0, 30),
(42, 'PC端称重软件', 'PC端称重软件', 2, 41, '2019-01-03 14:29:00', '2019-01-03 14:29:00', 0, 3005);
INSERT INTO `django_content_type` (`id`, `name`, `app_label`, `model`)
VALUES
(76, 'PC端称重软件', 'mes', 'mes');
INSERT INTO `auth_permission` (`id`, `name`, `name_en`, `content_type_id`, `codename`, `level2_id`)
VALUES
(500, '查看预分拣', 'Get Beforehand Sorting', 76, 'get_package', 42),
(501, '导出打包绩效', 'Export Package Performance', 76, 'export_package', 42);
INSERT INTO `subscription_new` (`id`, `trigger`, `topic`, `endpoint`, `check_url`, `method`, `name`, `create_time`, `modify_time`, `status`)
VALUES
(20, 'delete_order', 'order', 'http://mq.station.cluster.gm/weight/package/sync_by_order', 'http://mq.station.cluster.gm/station/order/check_serial', 'POST', 'sort_package', '2018-12-29 14:44:00', '2018-12-29 14:44:00', 2),
(20, 'edit_order', 'order', 'http://mq.station.cluster.gm/weight/package/sync_by_order', 'http://mq.station.cluster.gm/station/order/check_serial', 'POST', 'sort_package', '2018-12-29 14:44:00', '2018-12-29 14:44:00', 2);
分拣状态
pc\pda 1:未分拣,2:已分拣,3:缺货,4:已打印
预分拣部分
/weight/category/tree 拉取商品分类tree【老接口】
GET weight/category/tree
reuqest:
response:
{
code: 0
msg: ok
data: [{
"id": "A001",
"name": "蔬菜",
"sub": [{
"id": "B001",
"name": "白菜",
"sub": [{
"id": "D000001"
"name": "白菜菜"
}]
}]
}]
}
/weight/package/spu/details 获取预分拣spu详情
GET
reuqest:
spu_ids M list
start_date M
end_date M
package_id O 分拣序号,精确匹配
response:
{
code: 0
msg: ok
data: [
{
spu_id
sku_id
sku_name
sale_ratio
unit_name
std_unit_name
total_count 总打包数
unsort_count 未分拣数
sort_count 已分拣数
packages: [
{
package_date 打包日期
package_id 包装id
quantity 实称数
sort_status 分拣状态 1:未分拣,2:已分拣
order_id 关联订单号
}
]
}
]
}
/weight/package/sku/list 获取预分拣spu详情 (优化方案
GET
reuqest:
spu_ids M list
start_date M
end_date M
package_id O 分拣序号,精确匹配
response:
{
code: 0
msg: ok
data: [
{
spu_id
sku_id
sku_name
sale_ratio
unit_name
std_unit_name
}
]
}
/weight/package/sku/details 获取预分拣sku详情包装 (优化方案
GET
reuqest:
sku_id O str
start_date M
end_date M
package_id O 分拣序号,精确匹配 与sku_id参数二选一,同时传会覆盖sku_id参数
limit O 默认100
response:
{
code: 0
msg: ok
data: {
sku_id
sku_name
sale_ratio
unit_name
std_unit_name
total_count 总打包数
unsort_count 未分拣数
sort_count 已分拣数
packages: [
{
package_date 打包日期
package_id 包装id
quantity 实称数
sort_status 分拣状态 1:未分拣,2:已分拣
order_id 关联订单号
}
]
}
pagination: {
"page_obj": "",不用管
"more": true:还有数据,false:没有数据
}
}
/weight/package/create 预分拣/批量打印标签
POST
reuqest:
sku_id M
quantity M 基本单位称重数
count O default 1
response:
{
code: 0
msg: ok
data: [{
package_date 打包日期
package_id 包装id
quantity 实称数
sort_status 分拣状态 1:未分拣,2:已分拣
order_id 关联订单号
}]
}
/weight/package/delete 删除包装
POST
reuqest:
package_id M 包装id
response:
{
code: 0
msg: ok
data: {}
}
weight/baskets/list 称重筐展示【老接口】
接口: weight/baskets/list
Method: GET
请求:
请求示例:
响应示例:
{
"msg": "ok",
"code": 0,
"data": [
{"name":"筐A","basket_weight": 100,"id":"WBK00001"},
{"name":"筐B","basket_weight": 2100,"id":"WBK00002"},
]
}
/weight/skus/export
response
[{
"resname": "商户名称A",
"category1_name": "蔬菜",
"category2_name": "叶菜",
"order_id": "PL1050756",
"sort_id": 1, # 分拣号
"spu_id": "C115348",
"id": "D1475919",
"name": "菜心|小条",
"is_weight": true, # 是否称重商品
"quantity": "3.00斤", # 下单数
"real_quantity": "3.50斤", # 出库数
"driver_name": null, # 司机
"user_name": "ceshik10admin", # 用户名
"employee_number": "1", # 工号
"operate_time": "2018-01-12 14:47:04" # 操作时间
#新增
'route' 线路
'sort_way' 分拣渠道
'sale_ratio' 规格
'unit_name' 销售单位
'std_unit_name'基本单位
'packages' [package_id, package_id] 关联包装id
}]
/weight/package/export 绩效导出 # 老接口也改成类似的返回
POST
请求:
start_date str O 日期,形如 2017-08-01
end_date str O 日期,形如 2017-08-01
/weight/package/async_export 绩效导出 # 异步导出接口,先观察客户使用习惯与数据量再与同步接口做取舍
GET
请求:
date str O 日期,形如 2017-08-01
resopnse:
{
data:{
task_id
}
}
PDA 部分
/weight/pda/ pda入口
/station/login 登陆【老接口】
接口名: /station/login
Method: POST
请求:
username M string 用户名
password M string 密码
响应:
code M int 0为成功,其它为失败
msg M string 提示信息
/station/logout 登出【老接口】
接口名: /station/logout
Method: POST
请求:
无
响应:
code M int 0为成功,其它为失败
msg M string 提示信息
/station/user 获取用户信息 (改
GET
请求:
响应:
{
"msg": "ok",
"code": 0,
"data": [{
'station_id'
'station_name'
'id'
'username'
'user_permission' list 权限列表
}]
}
weight/employee/set 设置工号 【老接口】
POST weight/employee/set
请求参数:
number str M 工号
返回数据:
{
"code": 0
}
/station/service_time 获取运营周期信息【老接口】
接口名: /station/service_time
Method: GET
请求:
响应:
{
"msg": "ok",
"code": 0,
"data": [{
"type": 0,
"_id": "ST001",
"receive_time_limit": {
"start": "06:00",
"s_span_time": 1,
"receiveTimeSpan": "30",
"end": "12:00",
"e_span_time": 1
},
"order_time_limit": {
"start": "06:00",
"end": "23:00",
"e_span_time": 0
},
"task_begin_time": "06:00",
"service_time_creator": "T001",
"final_distribute_time": "06:00",
"final_distribute_time_span": 1,
"desc": "默认服务时间",
"name": "默认服务时间"
}]
}
/weight/pda/package/get 包装编码查询 (改
GET
request:
package_id M 包装id
check_spu_id O 验证包装的绑定状态,扫码分拣时传对应的spu_id,包装编码查询时不传
response:
{
code: 0
msg: ok
data: {
package_id 包装id
package_date 打包日期
package_operator 打包人
package_operator_name
sort_date 分拣日期
sort_operator 分拣人
sort_operator_name
sku_id 商品id
spu_id
sku_name 商品名
quantity 实称数
sort_status 分拣状态 1:未分拣,2:已分拣,
order_id 关联订单号 # 关联订单信息是否放在一个{}里
address_id 关联商户id
address_name 关联商户name
route 关联订单路线
sort_id 关联订单分拣序号
status 0 1
}
}
spu_id != spu_id 与当前规格ID不一致
status = 0 该编码已被删除
order_id is not null 该编码已被分拣
{
code: 99
msg: 错误信息 ps:'找不到对应编码'
}
station/address_route/list 获取商户路线列表 【老接口】
GET station/address_route/list
商户线路 列表
请求参数:
search_text str O name
export int O 1:导出
page_obj string O 传递返回数据里的pagination,第一次不用传
limit int O 返回条数,默认20
reverse bool O 是否反向查询。1:是,0:不是
offset int O 查询起点偏移条数,默认 0
peek int O 是否需要 pick,默认 false;peek 必须大于 limit。
什么都不传,就是站点下的所有 线路
export int O 1导出
返回数据:
{
"code": 0,
"msg": "ok",
"data": [{
"id": 12345,
"name": "",
"create_user": "",
"create_time": "",
"address_count": 9,
},]
"pagination": {
"page_obj": "",不用管
"more": true:还有数据,false:没有数据
"peek": 100
}
}
/weight/pda/order/list 按订单拣货-订单列表
GET
request:
date M
time_config_id M
status O 不传:全部 5:分拣中 10:配送中
route_id O 不传:全部
search_text O 搜索 商户名/分拣序号
page_obj string O 传递返回数据里的pagination,第一次不用传
limit int O 返回条数,默认50
response:
{
code: 0
msg: ok
data: {
total_count 分拣任务总数
finish_count 分拣任务完成数
orders: [{
route_id
route_name
order_id 订单号
address_id 商户id
address_name 商户名
sort_schedule 分拣进度
sort_id 分拣序号
total_count 分拣任务总数
finish_count 分拣任务完成数
status 订单状态
driver_id 司机id
driver_name 司机名
index bool 是否为索引位置 如果是 则展示route_id, route_name
}]
}
"pagination": {
"page_obj": "",不用管
"more": true:还有数据,false:没有数据
}
}
/weight/pda/order/detail 按订单拣货-订单详情 (200~300条尚可不分页
GET
request:
order_id M 订单号
real_is_weight O 是否记重 不传:全部,1:记重,0:不记重
is_weight O 称重状态 不传:全部,1:未称重,2:已称重
out_of_stock O 缺货状态 不传:全部,1:未缺货,2:已缺货
is_print O 打印状态 不传:全部,1:未打印,2:已打印
search_text O 搜索 商品名
page_obj
limit
response:
{
code: 0
msg: ok
data: {
order_id 订单号
source_order_id 上游订单id
address_id 商户id
address_name 商户名
sort_schedule 分拣进度
total_count 分拣任务总数
finish_count 分拣任务完成数
status 订单状态
driver_id 司机id
driver_name 司机名
details: [{ 记重商品列表
sku_id 商品id
sku_name 商品名
sale_ratio 销售系数
unit_name 销售单位
std_unit_name 基本单位
sort_status 分拣状态 1:未分拣,2:已分拣,3:缺货,4:已打印
quantity 下单数
std_quantity 基本单位下单数
sort_schedule 分拣进度
weighting_quantity 基本单位称重数
real_is_weight 是否记重
source_order_id 上游订单 可以为"",点进sku详情需要传
index bool 是否为索引位置 如果是 则展示real_is_weight
}]
}
'pagination': {
'page_obj'
'more'
}
}
/weight/pda/sku/list 按商品拣货-商品列表 逻辑类似weight/skus
GET
request:
date M
time_config_id M
search_text O 搜索 商品名
page_obj string O 传递返回数据里的pagination,第一次不用传
limit int O 返回条数,默认50
response:
{
code: 0
msg: ok
data: [{
sku_id
sku_name
sale_ratio 销售系数
unit_name 销售单位
std_unit_name 基本单位
}]
"pagination": {
"page_obj": "",不用管
"more": true:还有数据,false:没有数据
}
}
/weight/pda/sku/detail 按商品拣货-商品详情 分页
GET
request:
sku_id M
date M
time_config_id M
status O
route_id O
search_text O 搜索 商户名/分拣序号
page_obj string O 传递返回数据里的pagination,第一次不用传
limit int O 返回条数,默认50
response:
{
code: 0
msg: ok
data: {
sku_id sku_id
sku_name sku名
sale_ratio 销售系数
unit_name 销售单位
std_unit_name 基本单位
total_count 分拣任务总数
finish_count 分拣任务完成数
orders: [{
route_id
route_name
order_id
source_order_id 上游订单id
sort_id 分拣序号
address_id
address_name
quantity 下单数
std_quantity 基本单位下单数
sort_schedule 分拣进度
weighting_quantity 称重数
status
driver_id
driver_name
index bool 是否为索引位置 如果是 则展示route_id, route_name
----
sort_state bool 是否完成
}]
}
"pagination": {
"page_obj": "",不用管
"more": true:还有数据,false:没有数据
}
}
/weight/pda/sort/detail 分拣详情页面
GET
request:
order_id M str
sku_id M str
source_order_id O str
response:
{
code: 0
msg: ok
data: {
order_id 订单号
sku_id 商品id
sku_name 商品名
spu_id spu_id
sort_id 分拣号
sort_status 分拣状态 1:未分拣,2:已分拣,3:缺货,4:已打印
sort_way 分拣渠道 0: 未分拣, 1: mes, 2: pda
address_id 商户id
address_name 商户名
driver_id 司机id
driver_name 司机名
remark 分拣备注
quantity 下单数
std_quantity 基本单位下单数
weighting_quantity 称重数
sale_ratio 销售系数
unit_name 销售单位
std_unit_name 基本单位
package_count 关联的包装数
packages: [{
package_id 包装id
quantity 重量基本单位
}]
}
}
/weight/pda/sort/set_weight 分拣 (改
POST
request:
order_id M str
sku_id M str
package_ids M list
weighting_quantity M float
source_order_id O str
employee_id O str
response:
{
code: 0
msg: ok
data: {}
}
分拣冲突
{
code: 101
msg: '该商品已在(其它设备/pda)完成分拣'
data: {
"id"
"real_is_weight"
"is_weight"
"sort_way": 1: pc, 2: pda
"quantity": 10, # 下单数
'std_quantity'
"weighting_quantity": 12, # 称重数
"real_quantity": 10, # 出库数
}
}
有 check 未通过的条码
{
code: 99
msg: '存在未绑定成功的编码'
data:[
{
package_id
err_msg
}
]
}
/weight/pda/sort/out_of_stock 缺货 (改
POST
request:
POST
request:
order_id M str
sku_id M str
source_order_id O str
reset O int 1 取消缺货 0/不传 设置缺货
employee_id O str
response:
{
code: 0
msg: ok
data: {}
}
分拣部分
weight/sku/set_weight 设置称重数【老接口修改】
POST weight/sku/set_weight
请求参数:
weights list M 称重列表 形如 [{"sku_id":"D00001", "order_id": "PL0001","source_order_id":"","weight": 10,"set_weight": 10}] source_order_id可选
add bool O 默认false,表示是否为加入称重数操作
返回数据:
# 请求成功
{
"code": 0
}
# sku weight未更新,返回sku最新的数据
{
code = 101
data: {
"id": "",
"is_weight": 1,
"has_weight": 1,
"sort_way": 1: pc, 2: pda #新增
"quantity": 10, # 下单数
'std_quantity'
"weighting_quantity": 12, # 称重数
"real_quantity": 10, # 出库数
}
}
weight/skus 拉取分拣任务 【老接口修改】
GET/POST weight/skus
请求参数:
time_config_id str M 运营时间配置id
date str M 周期日期
order_search str O 订单号/序号/用户名
sku_search str O 商品名搜索
is_weight int o 是否称重商品,1:是 0:否
has_weight int O 是否已称重,1:是 0:否
category1_ids list O 一级分类列表
category2_ids list O 二级分类列表
spu_ids list O spu列表
group_ids list O 分组列表
out_of_group int O 按未分组的spu筛选 1:是 0:否
diff str O 差异商品,all:全部 weight:重量变化 new:新商品 remove:删除商品
next str O 分页id
返回参数:
{
"skus": [{
"id": "",
"spu_id": "", # spu_id
"last_print_time":"", 无值是null
"name": "",
"remark": "",
"order_id": "",
"source_order_od":"", #上游订单id
"is_weight": 1,
"has_weight": 1,
"quantity": 10, # 下单数
"weight_quantity": 12, # 称重数
"real_quantity": 10, # 出库数
"out_of_group": ture, # 缺货标记
"sale_ratio": 1,
"std_unit_name": "斤",
"std_sale_price": 1,
"sale_unit_name": "包",
"sale_unit_price": 1357,
"category_id_1": "A102", # 一级分类id
"category1_name": "鲜肉", # 一级分类名
"category_id_2": "B111", # 二级分类id
"category2_name": "鲜猪肉", # 二级分类id
"diff": "new" # 当查询diff时候返回,对应每一个diff的类型, new/weight/remove
# 新增
'sort_way' 分拣渠道 0 未分拣(不准确,不要使用这个值做是否分拣的判断) 1 mes/分拣任务 2 pda
}],
"orders": {
"PL00001":{
"batch_remark": "",
"sort_id": 1,
"address_name": ""
}
},
"pagination": {
"next": ""
}
}