Skip to content

采购优先供应商

采购优先供应商

  • Author: GuLong
  • Status: create
  • Type: Standards
  • Created: 2019-04-25
  • 需求文档:https://shimo.im/docs/iNI7pPRn7PwxEHQJ/read

数据库相关

mysql
xnn_core_product_2.auth_permission (mysql)
# 添加 设置优先供应商(codename: edit_priority_supplier)
sql: INSERT INTO `xnn_core_product_2`.`auth_permission`(`name`, `name_en`, 
`content_type_id`, `codename`, `level2_id`) 
VALUES ('设置优先供应商', 'Edit Priority Supplier', 15, 'edit_priority_supplier', 8);


-- xnn_core_product_2 库:  
-- 新增 tbl_priority_supplier 优先供应商表 (商品-商户-供应商 关系表)
CREATE TABLE `tbl_priority_supplier` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `station_id` varchar(32) NOT NULL COMMENT '站点ID',
      `group_id` int(11) NOT NULL COMMENT 'group ID',
      `sku_id` varchar(32) NOT NULL COMMENT '销售商品ID',
      `spu_id` varchar(32) NOT NULL COMMENT 'spu id',
      `address_id` int(11) NOT NULL COMMENT '商户id',
      `supplier_id` varchar(32) NOT NULL COMMENT '供应商id',
      `salemenu_id` varchar(32) NOT NULL COMMENT '销售单ID',

      `create_time` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '创建时间',
      `modify_time` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '修改时间',
      `delete_time` datetime NOT NULL DEFAULT '0001-01-01 00:00:00' COMMENT '删除时间',
      `pstatus` int(11) NOT NULL DEFAULT '0' COMMENT '物理状态,0:正常--默认,1:已删除',

      `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`),
      KEY `idx_salemenu_id` (`salemenu_id`),
      KEY `idx_supplier_id` (`supplier_id`),
      KEY `idx_sku_id_address_id` (`sku_id`, `address_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Station接口改动

/supplier/priority_supplier/list 优先供应商列表 (新接口)

接口描述
    报价单下所有优先供应商的关系列表
Method
    GET
请求
    salemenu_id     M       string      报价单id
    route_id        O       string      线路id,route_id=-1时为无线路
    q               O       string      搜索商品名/商品ID/销售规格名/销售规格ID/商户ID/
                                        商户名称/供应商ID/供应商名称、
                                        或[商品,商户,供应商]组合搜索(参考订单列表-按商品查看)

    # 分页参数,可参考[分页规范详解](https://doc.guanmai.cn/模块文档/分页/)
    page_obj    O   string  起始页(不包含),默认第0页
    reverse     O   bool    是否反向查询。1:是,0:不是。默认为否。
    limit       O   int     返回条数,默认10。传0表示返回所有数据。
    offset      O   int     查询起点偏移条数,默认0
    peek        O   int     是否需要 pick,默认 false;peek 必须大于 limit。
    count       O   bool    是否需要 count,1:是,0:不是。默认为否。(部分接口可能不实现本功能, 因为如果数据量极大,count 会很耗时)
响应
    {
      "code": 0,
      "data": [
          {
              id                    记录id
              address_id            商户ID
              address_name          商户名称
              sku_id                商品id
              sku_name              商品名称
              spu_id
              spu_name              
              sale_ratio            销售规格信息
              sale_unit_name
              std_unit_name
              route_name            线路
              supplier_id           供应商ID
              supplier_name         供应商名称
          },
          ...
      ],
      "msg": "ok"
    }

/supplier/priority_supplier/export 优先供应商导出 (新接口)

接口描述
    导出报价单下所有优先供应商的关系列表
Method
    GET
请求
    # 同接口 【优先供应商列表】
    salemenu_id     M       string      报价单id
    route_id        O       string      线路id,route_id=-1时为无线路
    q               O       string      搜索商品名/商品ID/销售规格名/销售规格ID/商户ID/
                                        商户名称/供应商ID/供应商名称、
                                        或[商品,商户,供应商]组合搜索(参考订单列表-按商品查看)
响应
    {
        "code": 0,              # 返回码,0表示成功,其他表示错误
        "msg": "ok",
        "data": {
            "async": 0,         # 0:同步,1:异步
            "task_url": None,   # 异步返回url,同步则为None
            "data": $data       # 同步时返回数据,异步则为None
            "filename": "x"     # 同步时返回生成的文件名
        }
    }

$data格式
    [
          {
              id                    记录id
              address_id            商户ID
              address_name          商户名称
              sku_id                商品id
              sku_name              商品名称
              sale_ratio            销售规格信息
              sale_unit_name
              std_unit_name
              route_name            线路
              supplier_id           供应商ID
              supplier_name         供应商名称
          },
          ...
      ]

当数据量<=500时 前端生成,>500走异步任务下载

/supplier/priority_supplier/delete 删除优先供应商 (新接口)

接口描述
    删除优先供应商的关系
Method
    POST
请求
    ids     M       list        优先供应商记录的id列表
响应
    {
      "code": 0,
      "data": null,
      "msg": "ok"
    }

/supplier/priority_supplier/address/list 商户列表 (新接口)

接口描述
    获取商户列表
Method
    GET
请求
    salemenu_id     O       string      报价单id,筛选出该报价单所关联的商户
响应
    {
      "code": 0,
      "data": [
          {
              address_id            商户ID
              address_name          商户名称
              route_id              线路id
              route_name            线路
          },
          ...
      ]
      "msg": "ok"
    }

/station/promotion/sku/list 营销活动sku tree列表 (修改老接口)

接口描述
    营销活动sku tree列表
Method
    GET
请求
    # 新增参数
    salemenu_ids        O       list        报价单id数组,只筛选出这些报价单下的sku
响应
    不变

/supplier/priority_supplier/batch_set 批量更新优先供应商 (新接口)

接口描述
    批量设置的优先供应商关系
Method
    POST
请求
    supplier_id     M       string      需要设置的供应商id
    address_ids     M       list        商户id列表
    sku_ids         M       list        商品id列表
    # (address_ids 和 sku_ids 进行全组合)
响应
    同接口/supplier/priority_supplier/batch_update

/supplier/priority_supplier/batch_update 批量更新优先供应商 (新接口)

接口描述
    批量更新的优先供应商关系
Method
    POST
请求
    all             M       int         是否全选(0 不全选, 1 全选)

    # 当 all=1 时
    salemenu_id     M       string      报价单id
    route_id        O       string      线路id,route_id=-1时为无线路
    q               O       string      搜索字符串
    supplier_id     M       string      需要设置的供应商id

    # 当 all=0 时
    data: [         M       list        优先供应商关的参数列表
        {
            # 如果 sku_id + address_id 已设置对应的优先供应商则为更新操作
            sku_id          商品id
            address_id      商户id
            supplier_id     供应商id
        },
        ...
    ]
响应
    {
        "code": 0,              # 返回码,0表示成功,其他表示错误
        "msg": "ok",
        "data": {
            "async": 0,         # 0:同步,1:异步 (异步任务type=13)
            "task_url": None,   # 异步返回url,同步则为None
            "total_num": 1,
            "error_num": 1,
            "error_list": $data       # 同步时返回数据,异步则为None
        }
    }

$data格式
    [
          {
              address_id            商户id
              address_name          商户名称
              sku_id                商品id
              sku_name              商品名称
              sale_ratio            销售规格信息
              sale_unit_name
              std_unit_name
              route_name            线路名称
              before_supplier_id    修改前供应商id
              before_supplier_name  修改前供应商名称
              supplier_id           修改后(当前)供应商id
              supplier_name         修改后(当前)供应商名称
              status                status=0 操作成功
                                    status=1 供应商无法供商品
                                    status=2 服务器错误
          },
          ...
      ]

/supplier/priority_supplier/batch_set/task 批量设置优先供应商异步结果 (新接口)

接口描述
    获取异步任务执行结果
Method
    GET
请求
    task_id     M       int     任务id
响应
    {
        "code": 0,              # 返回码,0表示成功,其他表示错误
        "msg": "ok",
        "data": {
            "total_num": 1,
            "error_num": 1,
            "error_list": [
              {
                  address_id            商户id
                  address_name          商户名称
                  sku_id                商品id
                  sku_name              商品名称
                  sale_ratio            销售规格信息
                  sale_unit_name
                  std_unit_name
                  route_name            线路名称
                  before_supplier_id    修改前供应商id
                  before_supplier_name  修改前供应商名称
                  supplier_id           修改后(当前)供应商id
                  supplier_name         修改后(当前)供应商名称
                  status                status=0 操作成功
                                        status=1 供应商无法供商品
                                        status=2 服务器错误
              },
              ...
            ]
        }
    }

/supplier/priority_supplier/batch_set_import 导入批量设置优先供应商 (新接口)

接口描述
    通过导入excel,批量设置的优先供应商关系
    先检查,发现有一条错误直接返回, 全部返回,status+index
Method
    POST
请求
    同 【批量设置优先供应商】 接口
    data: [         M       list        优先供应商关的参数列表
        {
            # 如果 sku_id + customer_id 已设置对应的优先供应商则为更新操作
            sku_id          商品id
            customer_id     商户id
            supplier_id     供应商id
        },
        ...
    ]
响应
    大于500条走异步任务
    {
        "code": 0,              # 返回码,0表示成功,其他表示错误
        "msg": "ok",
        "data": {
            "status": 0,        # 0: 参数检查通过,1: 参数检查不通过
                                # status=1时:检查不通过时,错误列表
                                # status=0时:检查通过,执行结果(同步结果、异步任务)
            "async": 0,         # 0:同步,1:异步
            "task_url": None,   # 异步返回url,同步则为None
            "data": $data       # 同步时返回数据,异步则为None
        }
    }

$data格式 参数检查通过,同步执行的结果
        [
              {
                  customer_id           商户id
                  customer_name         商户名称
                  sku_id                商品id
                  sku_name              商品名称
                  sale_ratio            销售规格信息
                  sale_unit_name
                  std_unit_name
                  route_name            线路名称
                  before_supplier_id    修改前供应商id
                  before_supplier_name  修改前供应商名称
                  supplier_id           修改后(当前)供应商id
                  supplier_name         修改后(当前)供应商名称
                  status                status=0 操作成功
                                        status=1 供应商无法供商品
                                        status=2 服务器错误
              },
              ...
        ]

/supplier/priority_supplier/batch_set_import/task 导入批量设置优先供应商异步结果 (新接口)

接口描述
    获取异步任务执行结果
Method
    GET
请求
    task_id     M       int     任务id
响应
    {
        "code": 0,              # 返回码,0表示成功,其他表示错误
        "msg": "ok",
        "data": [
              {
                  customer_id           商户id
                  customer_name         商户名称
                  sku_id                商品id
                  sku_name              商品名称
                  sale_ratio            销售规格信息
                  sale_unit_name
                  std_unit_name
                  route_name            线路名称
                  before_supplier_id    修改前供应商id
                  before_supplier_name  修改前供应商名称
                  supplier_id           修改后(当前)供应商id
                  supplier_name         修改后(当前)供应商名称
                  status                status=0 操作成功
                                        status=1 供应商无法供商品
                                        status=2 服务器错误
              },
              ...
        ]
    }

/supplier/priority_supplier/all_type/list 全部供应商列表 (新接口)

接口描述
    页面【设置全部供应商】
    报价单下的单个商品sku的所有供应商关系,
    拉取该商品的所有商户以及其对应的供应商,包含默认供应商与优先供应商
Method
    GET
请求
    sku_id          M       string      商品id
    route_id        O       string      线路id
    q               O       string      商户ID/商户名称/供应商ID/供应商名称
                                        或[商户,供应商]组合搜索

    # 分页参数,可参考[分页规范详解](https://doc.guanmai.cn/模块文档/分页/)
    page_obj    O   string  起始页(不包含),默认第0页
    reverse     O   bool    是否反向查询。1:是,0:不是。默认为否。
    limit       O   int     返回条数,默认10。传0表示返回所有数据。
    offset      O   int     查询起点偏移条数,默认0
    peek        O   int     是否需要 pick,默认 false;peek 必须大于 limit。
    count       O   bool    是否需要 count,1:是,0:不是。默认为否。(部分接口可能不实现本功能, 因为如果数据量极大,count 会很耗时)
响应
    {
      "code": 0,
      "data": [
              id                    记录id        # 为空时 该条目是默认供应商记录项
              spu_id                spu id
              spu_name              spu name
              customer_id           商户ID
              customer_name         商户名称
              route_name            线路
              supplier_id           供应商ID       # 为空时 该条目是默认供应商记录项
              supplier_name         供应商名称       # 为空时 该条目是默认供应商记录项
      ]
      "msg": "ok"
    }

/supplier/priority_supplier/all_type/batch_set 批量设置全部供应商 (新接口)

接口描述
    批量设置的全部供应商关系, 数据量较少,暂时全部同步处理
Method
    POST
请求
    all             M       int         是否全选(0 不全选, 1 全选)
    sku_id          M       string      sku id
    supplier_id     M       string      需要设置的供应商id

    # 当 all=1 时
    route_id        O       string      线路id,route_id=-1时为无线路
    q               O       string      搜索字符串

    # 当 all=0 时
    address_ids     O       list        商户id列表
响应
    {
        "code": 0,              # 返回码,0表示成功,其他表示错误
        "msg": "ok",
        "data": {
            "total_num": 1,
            "error_num": 1,
            "error_list": [
              {
                  address_id            商户id
                  address_name          商户名称
                  sku_id                商品id
                  sku_name              商品名称
                  sale_ratio            销售规格信息
                  sale_unit_name
                  std_unit_name
                  route_name            线路名称
                  before_supplier_id    修改前供应商id
                  before_supplier_name  修改前供应商名称
                  supplier_id           修改后(当前)供应商id
                  supplier_name         修改后(当前)供应商名称
                  status                status=0 操作成功
                                        status=1 供应商无法供商品
                                        status=2 服务器错误
              },
              ...
            ]
        }
    }

/supplier/priority_supplier/statistics 统计信息 (新接口)

接口描述
    展示列表时获取相应商户数、商品数的统计信息, 全选列表去设置优先供应商时需要展示
Method
    GET
请求
    # salemenu_id、sku_id 二选一
    # 当传递salemenu_id时 统计报价单下的商户数、商品数
    # 当传递sku_id时 统计某个商品的全部供应商下的商户数、商品数
    salemenu_id     O       string      报价单id
    sku_id          O       string      商品id
    route_id        O       string      线路id,route_id=-1时为无线路
    q               O       string      搜索字符串
响应
    {
      "code": 0,
      "data": {
            "address_num": 1,     # 商户数
            "sku_num": 1,         # 商品数
      }
      "msg": "ok"
    }

其他逻辑

订单采购任务的异步创建

func: create_task_from_order 逻辑变更:
    判断对应 sku-customer 是否存在已设置的优先供应商
    有
        生成对应的采购任务时使用优先供应商
    没有
        原逻辑

开发计划

04.29   列表、导出接口
04.30   批量设置
05.05   删除接口、全部供应商列表
05.06   采购任务相关逻辑
05.07   其他接口