Skip to content

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": ""
    }
}