浏览量 97447
2019/04/07 00:10
因项目上要跟策划对接自动开服和自动推荐逻辑,此前都是使用企业微信口头对接,对接流程效率低下,对接完后经常因一方没想清楚,需要做代码层修改。因此项目需要做一个可拖拽,可版本管理的 流程建模页面。
第一步 先解放对接过程中的效率和人力损耗问题。
先上目前效果:
实现工具:vue+elementui+g6+mysql
1.页面生成:具体API可以参考: https://github.com/antvis/g6 ,在这不做赘述。里面提供了react+g6的实现,用vue的话需要做些适配修改。
2.流程图提交保存时,将流程图相关nodes数据post给后台api接口入库。在这里做了密码验证,公司环境可以做用户权限验证。
表字段:nodes,edges,username,flowtime
3.历史记录查询,通过一个以提交时间为维度的下拉表拉取流程图数据,最终生成流程图。
选型时对比了go.js(收费),d3.js(非前端专业学习成本太高)等等,蓦然回首竟发现国内蚂蚁金服的G6 刚好满足我。
第二步 代码根据逻辑图自动执行。
下面以游戏业务上线后 大区推荐位 自动修改举例:
1.业务规则:
最高优先级 大区开服时间>7天 改为 无 次优先级 大区开服时间<2小时 增加 新 大区开服时间>2小时 去掉 新 大区注册数<26000 and 在线数<800 增加推荐 大区注册数>26000 or 在线数>800 去掉推荐 状态重复不修改 终止
2.根据规则画出如下流程图:
3.根据流程图编写代码:
代码编写只用 if 和 else,方便以后根据流程图的后台数据,从流程图中直接生成代码。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2019/4/9 1:59 AM
# @Author : brownwang
# @Email : 277215243@qq.com
# @File : checkflow.py
# @web: https://www.bthlt.com
def checkflow():
"""
id:大区id
optime:距离现在开服时间
reg:注册数
online:在线数
statu:目前状态
"""
zones = [{'id': 1, 'optime': 1, 'reg': 1800, 'online': 300, 'statu': '新'},
{'id': 2, 'optime': 36, 'reg': 200, 'online': 3, 'statu': '推荐+新'},
{'id': 3, 'optime': 183, 'reg': 30000, 'online': 1000, 'statu': '推荐+新'},
{'id': 4, 'optime': 121, 'reg': 2000, 'online': 900, 'statu': '新'},
{'id': 5, 'optime': 32, 'reg': 300, 'online': 1, 'statu': '无'},
{'id': 6, 'optime': 232, 'reg': 300, 'online': 1, 'statu': '推荐'},
{'id': 7, 'optime': 1, 'reg': 8000, 'online': 300, 'statu': '推荐+新'},
{'id': 8, 'optime': 2, 'reg': 9000, 'online': 700, 'statu': '无'}]
for zone in zones:
if zone['optime'] < 2:
if zone['reg'] < 26000:
if zone['online'] < 800:
if zone['statu'] != '推荐+新':
print '大区{0}:执行修改推荐加+新任务'.format(zone['id'])
else:
print '大区{0}:终止'.format(zone['id'])
else:
if zone['statu'] != '新':
print '大区{0}:执行修改新任务'.format(zone['id'])
else:
print '大区{0}:终止'.format(zone['id'])
else:
if zone['statu'] != '新':
print '大区{0}:执行修改新任务'.format(zone['id'])
else:
print '大区{0}:终止'.format(zone['id'])
else:
if zone['optime'] < 7 * 24:
if zone['reg'] < 26000:
if zone['online'] < 800:
if zone['statu'] != '推荐':
print '大区{0}:执行修改推荐任务'.format(zone['id'])
else:
print '大区{0}:终止'.format(zone['id'])
else:
if zone['statu'] != '无':
print '大区{0}:执行修改无任务'.format(zone['id'])
else:
print '大区{0}:终止'.format(zone['id'])
else:
if zone['statu'] != '无':
print '大区{0}:执行修改无任务'.format(zone['id'])
else:
print '大区{0}:终止'.format(zone['id'])
else:
if zone['statu'] != '无':
print '大区{0}:执行修改无任务'.format(zone['id'])
else:
print '大区{0}:终止'.format(zone['id'])
checkflow()
4.预期输出:
大区1:开服时间<2 在线<800 注册<26000 改为 推荐+新
大区2:开服时间>2 在线<800 注册<26000 改为 推荐
大区3:开服时间>7天 改为 无
大区4:开服时间>2 在线>800 改为 无
大区5:开服时间>2 在线<800 注册<26000 改为 推荐
大区6:开服时间>7天 改为 无
大区7:开服时间<2 在线<800 注册<26000 改为 推荐+新 因状态重复终止
大区8:开服时间=2 在线<800 注册<26000 改为 推荐
5.最终输出与预期输出一致:
大区1:执行修改推荐加+新任务
大区2:执行修改推荐任务
大区3:执行修改无任务
大区4:执行修改无任务
大区5:执行修改推荐任务
大区6:执行修改无任务
大区7:终止
大区8:执行修改推荐任务
点击连接在线看效果: 请点击这里查看示例
上一篇 搜索 下一篇