销售经理重构
需求简述
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)
说明:
修改前: 该脚本会每天跑一次,绑定订单和销售经理的关联
修改后: 5分钟绑定一次关联