Skip to content

销售经理重构

需求简述

1.取消销售经理类型限制、通过加入权限做数据隔离, 即ma所有账号都可以执行原先限定为销售经理的功能
2.重构 商户=>商户报表 为销售报表, 以承载更丰富的销售经理数据场景

数据库修改

刷数据

权限变动

新权限

生成邀请码/删除固定邀请码  change_invitation
查看站点范围内所有商户数据 get_all_visible_station_customer
查看销售报表、 get_sales_report
导出销售报表、 export_sales_report
导出销售报表详情 export_sales_report_detail

-- 灰度时

-- 1.查询 lv1 权限组 "商户管理" 的 id

select id from management.tbl_permission_class where name ='商户管理';

-- 2.新增lv2 权限组 "可见商户权限"  (填写第1步查询到的id 到 parent_id 对应的括号中)

INSERT INTO management.tbl_permission_class
(name, name_en, `level`, parent_id, create_time, update_time, `delete`)
VALUES('可见商户权限', '可见商户权限', 2, (), '2019-02-23 10:28:12.000', '2019-02-23 10:28:12.000', 0);

-- 3.新增权限 "查看站点范围内所有商户数据"  到第2步创建的 lv2权限组 "可见商户权限"  中去

INSERT INTO management.tbl_permission
(name, name_en, content_type_id, codename, pm_can_see, level2_id)
VALUES('查看站点范围内所有商户数据', 'Get All Visible Station Customer', 35, 'get_all_visible_station_customer', NULL, (select id from management.tbl_permission_class where name = '可见商户权限'));

-- 4.创建 lv2权限组 "新商户邀请"  (填写第1步查询到的id 到 parent_id 对应的括号中)

INSERT INTO management.tbl_permission_class
(name, name_en, `level`, parent_id, create_time, update_time, `delete`)
VALUES('新商户邀请', '新商户邀请', 2, (), '2019-02-23 10:28:12.000', '2019-02-23 10:28:12.000', 0);

-- 5.新增权限 "生成邀请码/删除固定邀请码"  到第4步创建的 lv2权限组"新商户邀请" 中去

INSERT INTO management.tbl_permission
(name, name_en, content_type_id, codename, pm_can_see, level2_id)
VALUES('生成邀请码/删除固定邀请码', 'Change Invitation', 27, 'change_invitation', NULL, (select id from management.tbl_permission_class where name = '新商户邀请'));


-- 6.创建 lv2权限组 "销售报表"  (填写第1步查询到的id 到 parent_id 对应的括号中)

INSERT INTO management.tbl_permission_class
(name, name_en, `level`, parent_id, create_time, update_time, `delete`)
VALUES('销售报表', '销售报表', 2, (), '2019-02-23 10:28:12.000', '2019-02-23 10:28:12.000', 0);

-- 7.新增权限 "查看销售报表"  到第6步创建的 lv2权限组"销售报表" 中去

INSERT INTO management.tbl_permission
(name, name_en, content_type_id, codename, pm_can_see, level2_id)
VALUES('查看销售报表', 'Get Sales Report', 22, 'get_sales_report', NULL, (select id from management.tbl_permission_class where name = '销售报表'));


-- 8.新增权限 "导出销售报表"  到第6步创建的 lv2权限组"销售报表" 中去

INSERT INTO management.tbl_permission
(name, name_en, content_type_id, codename, pm_can_see, level2_id)
VALUES('导出销售报表', 'Export Sales Report', 22, 'export_sales_report', NULL, (select id from management.tbl_permission_class where name = '销售报表'));

-- 9.新增权限 "导出销售报表详情"  到第6步创建的 lv2权限组"销售报表" 中去

INSERT INTO management.tbl_permission
(name, name_en, content_type_id, codename, pm_can_see, level2_id)
VALUES('导出销售报表详情', 'Export Sales Report Detail', 22, 'export_sales_report_detail', NULL, (select id from management.tbl_permission_class where name = '销售报表'));




-- 全量时

-- 1.创建一个lv1 的名为 '废弃'的 permission_class, 用于存放废弃权限组

INSERT INTO management.tbl_permission_class
(name, name_en, `level`, parent_id, create_time, update_time, `delete`)
VALUES('废弃', '废弃', 1, NULL, '2019-02-23 10:28:12.000', '2019-02-23 10:28:12.000', 0);

-- 2.查询刚刚创建的 '废弃' 组 id

select id from management.tbl_permission_class where name = '废弃';

-- 3.将 lv2权限组 "销售人员管理" 移到 第1步创建的 lv1权限组"废弃" 下, (在 括号中填上 第2步查到的id)

UPDATE management.tbl_permission_class
SET parent_id=() where name = '销售人员管理';

-- 4.将 lv2权限组 "商户邀请" 移到 第1步创建的 lv1权限组"废弃" 下, (在 括号中填上 第2步查到的id)

UPDATE management.tbl_permission_class
SET parent_id=() where name = '商户邀请';

-- 5.将 lv2权限组 "商户报表" 移到 第1步创建的 lv1权限组"废弃" 下, (在 括号中填上 第2步查到的id)

UPDATE management.tbl_permission_class
SET parent_id=() where name = '商户报表';





-- 10.查询 '生成邀请码/删除固定邀请码' 权限 的id

select * from management.tbl_permission where name ='生成邀请码/删除固定邀请码';

-- 11.给所有 加盟商赋予 '生成邀请码/删除固定邀请码' 权限 , 将第10步查询到的id 填入括号

INSERT INTO management.tbl_partner_permission (partner_id, permission_id)
SELECT id, ()
FROM   management.tbl_partner;

-- 12.给所有 角色赋予 '生成邀请码/删除固定邀请码' 权限 , 将第10步查询到的id 填入括号

INSERT INTO management.tbl_role_permission (role_id, permission_id)
SELECT ID, ()
FROM management.tbl_role;




-- 13.查询 '查看销售报表' 权限 的id

select id from management.tbl_permission where name ='查看销售报表';

-- 14.给所有 加盟商赋予 '查看销售报表' 权限 , 将第13步查询到的id 填入括号
INSERT INTO management.tbl_partner_permission (partner_id, permission_id)
SELECT id, ()
FROM   management.tbl_partner;


-- 15.给所有 角色赋予 '查看销售报表' 权限 , 将第13步查询到的id 填入括号
INSERT INTO management.tbl_role_permission (role_id, permission_id)
SELECT ID, ()
FROM management.tbl_role;




-- 16.查询 '导出销售报表' 权限 的id

select id from management.tbl_permission where name ='导出销售报表';

-- 17.给所有 加盟商赋予 '导出销售报表' 权限 , 将第16步查询到的id 填入括号
INSERT INTO management.tbl_partner_permission (partner_id, permission_id)
SELECT id, ()
FROM   management.tbl_partner;


-- 18.给所有 角色赋予 '导出销售报表' 权限 , 将第16步查询到的id 填入括号
INSERT INTO management.tbl_role_permission (role_id, permission_id)
SELECT ID, ()
FROM management.tbl_role;




-- 19.查询 '导出销售报表详情' 权限 的id

select id from management.tbl_permission where name ='导出销售报表详情';

-- 20.给所有 加盟商赋予 '导出销售报表详情' 权限 , 将第19步查询到的id 填入括号
INSERT INTO management.tbl_partner_permission (partner_id, permission_id)
SELECT id, ()
FROM   management.tbl_partner;


-- 21.给所有 角色赋予 '导出销售报表详情' 权限 , 将第19步查询到的id 填入括号
INSERT INTO management.tbl_role_permission (role_id, permission_id)
SELECT ID, ()
FROM management.tbl_role;



-- 22.查询 '查看站点范围内所有商户数据' 权限 的id

select id from management.tbl_permission where name ='查看站点范围内所有商户数据';

-- 23.给所有 加盟商赋予 '查看站点范围内所有商户数据' 权限 ,将第22步查询到的id 填入括号 (该权限无需默认给所有角色)
INSERT INTO management.tbl_partner_permission (partner_id, permission_id)
SELECT id, ()
FROM   management.tbl_partner;



脚本

查看站点范围内所有商户数据

生成邀请码/删除固定邀请码
查看销售报表、
导出销售报表、
导出销售报表详情

对于本次重构需求的以上几个新权限,


其他

接口

Ma(gm_management)

[新增] GET 获取简洁的MA账号数据 /custommanage/saleemployee/simple_info

获取当前站点下的所有账号及其角色分组
request:
response:

{
  "code": 0,
  "msg": "ok",
  "data":{
      'sale_employees' M list [{
        'id'       M int           销售经理id
        'username' M str           销售经理账号
        'name'     M str           销售经理名称
        'role_ids' M list          角色列表
      },
    ...
    ],
    'roles' M list [
      'id'        M int         角色id
      'name'      M str         角色名
    ]
}

[新增] GET 销售报表外页搜索 /custommanage/sales_report/search

根据 下单日期/收货日期 , 时间区间 和 销售经理 搜索销售报表
request:

search_date_type  M int  搜索日期类型 1:下单日期 2:收货日期
begin_date        M date 搜索日期区间头
end_date          M date 搜索日期区间尾
sale_employee_ids O list 搜索的销售经理的id列表
export            O bool 是否是导出
page_obj          O str  分页obj
reverse           O bool 请求上页还是下页, false 为下一页 true 为上一页
limit             O int  页数据条数
sort_type         O str  排序类型
[
'order_address_num',
'order_num',
'money_per_address',
'money_per_order',
'total_price',
'total_pay_without_freight',
'new_address_num',
'all_address_num'
]
中选择一个,不传默认按 ma账号id排序
sort_desc       O  bool 排序是否逆序, 不传或者false为正序, true为逆序
response:

{
  "code": 0,
  "msg": "ok",
  "data":[
      {
        'sale_employee_id'              M int   销售经理id
        'sale_employee_username'       M str   销售经理账号
        'sale_employee_name'           M str   销售经理名称
        'order_address_num'            M int   下单商户数
        'order_num'                     M int  下单商户数
        'money_per_address'            M float 客单价
        'money_per_order'               M float 笔单价
        'total_price'                   M float 下单金额
        'total_pay_without_freight'     M float 销售额(不含运费)
        'new_address_num'     M int   新注册商户数
        'all_address_num'                  M int   总商户数
      },
    ...
  ],
    'pagination' O dict {
    'more'      M   bool    是否有更多数据
    'page_obj'  M   string
    'reverse'   M   string
    'limit'     M   int
  }
}

[新增] GET 销售报表内页详情 /custommanage/sales_report/detail

根据 下单日期/收货日期 , 时间区间 和 销售经理 搜索销售报表

注意: 该接口返回的价格相关数据单位皆为 分

request:

search_date_type M int  搜索日期类型 1:下单日期 2:收货日期
begin_date       M date 搜索日期区间头
end_date         M date 搜索日期区间尾
sale_employee_id M int 搜索的销售经理的id
response:

{
  "code": 0,
  "msg": "ok",
  "data":{
    'orders' M list [
      {
        'order_id'   M str 订单号
        'address_id'  M int    商户id
        'address_name' M str   商户名
        'settle_way'  M int    结款方式(1:先货后款 2:先款后货)
        'real_pay'    M int   实付金额
        'total_pay_without_freight'   M int   销售额 (不包含运费)
        'total_price' M int   下单金额
        'refund_amount' M int 已退金额
        'paid_amount' M int   已付金额
        'pay_status' M int    支付状态 1:未支付 5:部分支付 10:已支付 15:超时关闭
        'status' M int 订单状态 -1-订单已删除, 1-等待出库, 5-正在分拣, 10-正在配送, 15-已签收, 100-已支付
        'date_time' M datetime 下单时间
        'receive_begin_time' M datetime 收货时间
        'sale_employee_name' M str 销售经理名称
        'sale_employee_id' M int 销售经理id
        'station_id' M str
        'station_name' M str
        'skus' M list [
          {
              'sku_id' M str
              'sku_name' M str
              'spu_id' M str
              'spu_name' M str
              'is_out_stock' M bool 是否缺货
              'abnormal_money' M int 异常金额
              'abnormal_quantity' M int 异常数
              'accept_std_count' M int 记账数(基本单位)
              'category_id_1' M str
              'category_id_1_name' M str
              'category_id_2' M str
              'category_id_2_name' M str
              'pinlei_id' M str
              'pinlei_name' M str
              'cost' M int 单位出库成本(基本单位)
              'quantity' M int 下单数量(包含损耗)
              'real_quantity' M int 出库数(销售单位)
              'real_refund_amount' M int 退货数量(销售单价)
              'real_refund_money' M int 退货金额
              'real_std_count' M float 出库数(基本单位)
              'sale_price' M int 销售单价
              'sale_unit_name' M str 销售单位
              'sale_ratio' M float 基本单位和销售单位的转换规格
              'std_sale_price' M int 基本单价
              'std_unit_name' M str 基本单位
              'tax' M int 税额,单位分
          },
          ...
        ],
      },
      ...
    ],
  'no_order_addresses' M list [
    {
      'address_id' M str  商户ID
      'address_name' M str 商户名称
      'register_time' M datetime  注册时间
      'fist_order_time' M datetime 首次下单时间
      'last_order_time' M datetime 最近订单下单时间
      'payment_name' M str 结款联系人
      'payment_telephone' M str 电话
    },
    ...
  ],
  'order_addresses' M list [{
      'address_id'  M int    商户id
      'address_name' M str   商户名
      'register_time' M datetime  注册时间
      'fist_order_time' M datetime 首次下单时间
      'last_order_time' M datetime 最近订单下单时间
    },
  ...
  ]
  }
}

逻辑变化接口(无交互变化)

[修改] GET 原商户报表过滤用数据 /custommanage/report

说明:

    修改前:原 商户=>商户报表 界面 拉 销售经理 用于下拉选择过滤的销售经理

    修改后:按新逻辑拉取 ma账号信息

[修改] GET 商户列表过滤用数据 /custommanage/

说明:

    修改前:原 商户=>商户列表 界面 拉 销售经理 用于下拉选择过滤的销售经理

    修改后:按新逻辑拉取 ma账号信息

[修改] GET 商户结算/商户对账单 拉取过滤头 /custommanage/bill/filter_options

说明:

    修改前:原 财务=>商户结算/商户对账单 界面 拉 销售经理 用于下拉选择过滤的销售经理

    修改后:按新权限逻辑拉取 ma账号信息

[修改] GET /custommanage/edit

说明:

    修改前:原 商户=>商户列表=>详情 界面 拉 销售经理 用于下拉选择销售经理

    修改后:按新权限逻辑拉取 ma账号信息

Account(gm_server_account)

[修改] GET /gm_account/ma/user/detail

说明:

    修改前: 会返回 is_sale_manager 字段 用于展示是否是销售经理

    修改后: 不再返回

[修改] POST /gm_account/ma/user/update

说明:

    修改前: 提交请求时会带上 is_sale_manager 字段用于 更新 是否是销售经理

    修改后: 不用再带上

Ma(gm_server_management)

[修改] 脚本 /gm_management/tools/update_order_sales.py

说明:

    修改前: 该脚本会每天跑一次,绑定订单和销售经理的关联

    修改后: 5分钟绑定一次关联