cssjshtml 可拖拽流程图的实现+代码按流程图执行

葫芦的运维日志

下一篇 搜索 上一篇

浏览量 97851

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:执行修改推荐任务

点击连接在线看效果: 请点击这里查看示例

葫芦的运维日志

打赏

上一篇 搜索 下一篇
© 冰糖葫芦甜(bthlt.com) 2021 王梓打赏联系方式 陕ICP备17005322号-1