Example #1
0
def yzl_info():
    info = request.form.get('info', '')
    user_id = request.form.get('user_id', '')
    if not info.startswith("@助手"):
        return "回复:不是给我的命令"
    info_arr = info.split()
    if info_arr[1] == 'list':
        with glb.db_connect() as conn:
            with conn.cursor(as_dict=True) as cursor:
                cursor.execute(
                    'SELECT id,report_name FROM zhanbao_tbl WHERE worker_no=%s and is_catalog=0 order by xuhao asc',
                    user_id)
                ret = cursor.fetchall()
        return '\n'.join([f"{x['id']}_{x['report_name']}" for x in ret])
    if is_number(info_arr[1]):
        with glb.db_connect() as conn:
            with conn.cursor(as_dict=True) as cursor:
                cursor.execute(
                    'SELECT config_txt,report_name FROM zhanbao_tbl WHERE worker_no=%(user_id)s and id=%(id)d and is_catalog=0 order by xuhao asc',
                    {
                        "user_id": user_id,
                        "id": int(info_arr[1])
                    })
                ret = cursor.fetchone()
        if ret is None:
            return "没有这个ID:" + info_arr[1]
        hnclic.tasks.zb_execute.delay(int(info_arr[1]),
                                      json.loads(ret['config_txt']), user_id,
                                      ret['report_name'])
        return ret['report_name'] + ",已经开始执行"
    return """ @助手 list   可以看到所有自己做的战报ID 和名字
Example #2
0
def getMenu(parentId):

    if (parentId == '0'):
        with glb.db_connect() as conn:
            with conn.cursor(as_dict=True) as cursor:
                cursor.execute(
                    'SELECT id,report_name,isnull(pid,0) pid,is_catalog FROM zhanbao_tbl WHERE worker_no=%s  order by xuhao asc',
                    session['userid'])
                ret = cursor.fetchall()
        ret = [{
            'path': f'/zb/zb/{x["id"]}',
            'icon': 'el-icon-document',
            'component': 'views/zhanbao/zb_index',
            'label': x["report_name"],
            'id': x["id"],
            'pid': x["pid"],
            "is_catalog": x['is_catalog'],
            'meta': {
                'id': x["id"],
                'keepAlive': True
            }
        } for x in ret]
    elif parentId == '1':
        with glb.db_connect() as conn:
            with conn.cursor(
                    as_dict=True) as cursor:  #.encode('latin-1').decode('gbk')
                cursor.execute(
                    """SELECT m.id, m.name label, m.parent_id pid, m.url res_url, m.icon
FROM [10.20.54.104].localapp.dbo.protal_sys_menu m
LEFT JOIN [10.20.54.104].localapp.dbo.protal_sys_role_menu rm ON (rm.menu_id = m.id)
LEFT JOIN [10.20.54.104].localapp.dbo.protal_sys_user_role ur ON (ur.role_id = rm.role_id)
LEFT JOIN [10.20.54.104].localapp.dbo.protal_sys_user u ON (u.id = ur.user_id)
WHERE u.name = %s""", session['userid'])
                ret = cursor.fetchall()
        ret = [{
            'path': x["res_url"] if x["res_url"] != None else "",
            'icon': 'el-icon-document-copy',
            'label': x["label"].encode('latin-1').decode('gbk'),
            'id': x["id"],
            'pid': x["pid"],
            'meta': {
                'id': x["id"],
                'isTab': False
            }
        } for x in ret]
    elif parentId == '2' and session['userid'] == '14100298':
        ret = [{
            'label': "报表目录",
            'icon': 'el-icon-document',
            'path': "/rpt-list/index"
        }]
    else:
        ret = []
    return jsonify(data=ret)
Example #3
0
def test():
    with glb.db_connect() as conn:
        with conn.cursor(as_dict=True) as cursor:
            cursor.execute('SELECT * FROM zhanbao_tbl WHERE id=6817  ')
            row = cursor.fetchone()
            upload_path=f"{glb.config['UPLOAD_FOLDER']}\\{row['worker_no']}\\{row['id']}"
            return load_all_data(json.loads(row['config_txt']),row['id'],upload_path=upload_path,userid=row['worker_no'])
Example #4
0
def ReportDefine_list():
    with glb.db_connect() as conn:
        with conn.cursor(as_dict=True) as cursor:
            cursor.execute(
                'SELECT id,report_name label FROM zhanbao_tbl WHERE worker_no=%s',
                session['userid'])
            ret = cursor.fetchall()
            return json.dumps(ret, ensure_ascii=False)
Example #5
0
def raw_get(id, rawtype, ds_names):
    glb.redis.hincrby("zb:tj", 'api')
    ds_names = ds_names.split(',')
    cur = None
    with glb.db_connect() as conn:
        with conn.cursor(as_dict=True) as cursor:
            cursor.execute('SELECT * FROM zhanbao_tbl WHERE id=%s', id)
            config_data = json.loads(cursor.fetchone()['config_txt'])
    #for one_data_from in json.loads(cur_row['config_txt'])['data_from'] for one on one_data_from['ds'] is one['name'] in ds_names
    user_input_form_data = {**request.args, **request.form}
    # ds_dict= ce.load_all_data(config_data,id,args=args,upload_path=glb.user_report_upload_path(id),userid=glb.ini['user_login']['test_user'])

    async_result = hnclic.tasks.load_all_data.delay(
        config_data,
        id,
        user_input_form_data=user_input_form_data,
        upload_path=glb.user_report_upload_path(id),
        userid=glb.ini['user_login']['test_user'])
    while not async_result.ready():
        asyncio.run(asyncio.sleep(0.1))
    if async_result.status == 'FAILURE':
        raise RuntimeError(async_result.traceback.replace('\n', '<br>\n'))

    df_arr, ds_dict, ret_config_data = async_result.result
    if isinstance(df_arr, str):
        raise RuntimeError(df_arr)

    ret_dict = dict(
        {key: value
         for key, value in ds_dict.items() if key in ds_names})
    rawtype = rawtype.split(":")
    ret_str = '{"errcode":0,"message":"success",'
    if rawtype[0] == 'json':
        '''json的格式如下
        split ,样式为 {index -> [index], columns -> [columns], data -> [values]}
        records ,样式为[{column -> value}, … , {column -> value}]
        index ,样式为 {index -> {column -> value}}
        columns ,样式为 {index -> {column -> value}}
        values ,数组样式
        table ,样式为{‘schema': {schema}, ‘data': {data}},和records类似
        '''
        json_type = 'records'
        if len(rawtype) == 2:
            if rawtype[1] in "split,records,index,columns,values,table":
                json_type = rawtype[1]
            else:
                return '{"errcode":1,"message":"json选择的类型不正确,应该是下面之一: split,records,index,columns,values,table"}'
        for key, value in ret_dict.items():
            ret = json.loads(value)
            ret_str = ret_str + '\n"' + key + '":' + pd.DataFrame(
                ret["data"], columns=ret["columns"]).to_json(
                    orient=json_type, force_ascii=False) + ','
    ret_str = ret_str[:-1] + '}'
    return ret_str
Example #6
0
def ReportDefine_get(id):
    my_path = glb.user_report_upload_path(id)
    my_file_list = [{
        'name': x,
        'url': f'/mg/file/download/{id}/{x}'
    } for x in (os.listdir(my_path) if os.path.exists(my_path) else [])]
    with glb.db_connect() as conn:
        with conn.cursor(as_dict=True) as cursor:
            cursor.execute('SELECT * FROM zhanbao_tbl WHERE id=%d', id)
            ret = cursor.fetchone()
            ret['fileList'] = my_file_list
            return json.dumps(ret, ensure_ascii=False)
Example #7
0
def delete_one():
    glb.update_scheduler(request.json['id'], '0', None, None, None, None)
    with glb.db_connect() as conn:
        with conn.cursor(as_dict=True) as cursor:
            cursor.execute(
                'delete from zhanbao_tbl where worker_no=%(worker_no)s and id=%(id)d',
                {
                    'worker_no': session['userid'],
                    'id': request.json['id']
                })
            conn.commit()
            return {'code': 0, 'message': 'success'}
Example #8
0
def update_title():
    with glb.db_connect() as conn:
        with conn.cursor(as_dict=True) as cursor:
            params = {**request.json}
            params['worker_no'] = session['userid']
            cursor.execute(
                'update zhanbao_tbl set report_name=%(label)s where id=%(id)s',
                {
                    'label': request.json['label'],
                    'id': request.json['id']
                })
            conn.commit()
            return {'code': 0, 'message': ""}
Example #9
0
def sys_register(action):
    if glb.ini['user_login']['test_user'] != session['userid']:
        return {'errcode': 1, 'message': '你没有权限修改配置'}
    data = json.loads(json.dumps(request.json))
    data['worker_no'] = session['userid']
    data['json_txt'] = json.dumps(request.json, ensure_ascii=False)
    with glb.db_connect() as conn:
        with conn.cursor(as_dict=True) as cursor:
            if action == "delete":
                cursor.execute("delete from sys_register where id=%d",
                               data['id'])
                conn.commit()
                glb.redis.hdel("zb:sys_register", data['name'])
                del glb.login_getData_template_dict[data['name']]
                return jsonify(errcode=0, )
            if data.get('id') is None or data['id'] == 0:
                cursor.execute(
                    """INSERT INTO [dbo].[sys_register]([name],worker_no,[type],json_txt)
                    VALUES (%(name)s,%(worker_no)s,%(type)s,%(json_txt)s)""", {
                        'name': data['name'],
                        'worker_no': data['worker_no'],
                        'type': data['type'],
                        'json_txt': data['json_txt']
                    })
                conn.commit()
                data['id'] = cursor.lastrowid
                glb.redis.hset("zb:sys_register", data['name'],
                               data['json_txt'])
                glb.login_getData_template_dict[data['name']] = json.loads(
                    data['json_txt'])
                return jsonify(errcode=0, id=cursor.lastrowid)
            else:
                cursor.execute(
                    """ update [sys_register] set
                    name=%(name)s,worker_no=%(worker_no)s
                    ,type=%(type)s
                    ,json_txt=%(json_txt)s where id=%(id)d
                    """, {
                        'name': data['name'],
                        'worker_no': data['worker_no'],
                        'type': data['type'],
                        'json_txt': data['json_txt'],
                        'id': data['id']
                    })
                conn.commit()
                glb.redis.hset("zb:sys_register", data['name'],
                               data['json_txt'])
                glb.login_getData_template_dict[data['name']] = json.loads(
                    data['json_txt'])
                return jsonify(errcode=0, )
Example #10
0
def get(data_from, userid, user_login=None):
    #if data_from['type'] in ["html",'json'] and (data_from['ds'] is None or len(data_from['ds'])==0):
    #    match_arry=[]
    #    url=data_from['url']
    #    for k,v in glb.login_getData_template_dict.items():
    #        if re.search(v['allow_userid'],userid):
    #            for one_rule in v['patterns']:
    #                if url.startswith(one_rule):
    #                    match_arry.append((v["name"],v,one_rule))
    #                    break
    #    if len(match_arry)==0:
    #        raise RuntimeError(f"你的工号不能查询这个网址!")
    #    else:
    #        match_arry=sorted(match_arry,key=lambda x:-len(x[2])) #按匹配最长的URL被选中
    #        data_from['type']=match_arry[0][0]

    if data_from['type'] in ["html", 'json'] and userid[1:3] == "41":
        sys_name = "河南通用"
    else:
        sys_name = data_from['type']
    #
    login_getData_template = glb.getSysRegister(sys_name)
    if login_getData_template is None:
        raise RuntimeError(f"没有实现类型<{module_name}>!")
    module_name = login_getData_template['type']
    module = module_dict.get(module_name)
    if module is None:
        module = __import__(module_name)
        module_dict[module_name] = module

    if module is None:
        raise RuntimeError(f"没有实现类型<{module_name}>!")
    if user_login is None:
        with glb.db_connect() as conn:
            with conn.cursor(as_dict=True) as cursor:
                cursor.execute(
                    'SELECT * FROM login_tbl WHERE sys_name=%(sys_name)s and worker_no=%(worker_no)s',
                    {
                        "sys_name": sys_name,
                        "worker_no": userid
                    })
                user_login = cursor.fetchone()
    #user_login=user_login_dict.get(sys_name,{})
    #user_login_decrypt=dict()
    #for k,v in user_login.items():
    #    user_login_decrypt[k]=AES_decrypt(v,login_getData_template['name'])

    ret = module.MyDataInterface(data_from, userid, login_getData_template,
                                 user_login if user_login is not None else {})
    return ret
Example #11
0
def ReportDefine_save(id):
    lastrowid = id

    cron_str = request.json.get('cron_str', '')
    if cron_str is None:
        cron_str = ''
    cron_start = request.json.get('cron_start', 0)
    if cron_start is None:
        cron_start = 0

    if cron_str.startswith("*") or cron_str.startswith("* *"):
        return {'message': '设置的定时会太频繁执行,请修改,前两位不要是: * *!', 'errcode': -1}
    data = {
        'config_data': json.dumps(request.json['config_data'],
                                  ensure_ascii=False),
        'userid': session['userid'],
        'id': id,
        'report_name': request.json['report_name'],
        'cron_str': cron_str,
        'cron_start': int(cron_start),
    }
    with glb.db_connect() as conn:
        with conn.cursor() as cursor:
            if id == 0:
                cursor.execute(
                    'insert into zhanbao_tbl(config_txt,worker_no,report_name,cron_str,cron_start) '
                    +
                    'values(%(config_data)s, %(userid)s,%(report_name)s,%(cron_str)s,%(cron_start)s)',
                    data)
                lastrowid = cursor.lastrowid
            else:
                cursor.execute(
                    'update zhanbao_tbl set config_txt=%(config_data)s,report_name=%(report_name)s,'
                    + 'cron_str=%(cron_str)s,cron_start=%(cron_start)d' +
                    'WHERE id=%(id)d and worker_no=%(userid)s', data)
            conn.commit()
    #id,cron_str,cron_start,config_data,userid
    glb.update_scheduler(id, cron_str, data['cron_start'],
                         request.json['config_data'], session['userid'],
                         request.json['report_name'])
    return {
        'errcode': 0,
        'message': '更新成功!',
        'lastrowid': int(str(lastrowid)),
        'report_name': request.json['report_name']
    }
Example #12
0
def create_one():
    with glb.db_connect() as conn:
        with conn.cursor(as_dict=True) as cursor:
            pid = request.json.get('id', 0)
            cursor.execute('insert into zhanbao_tbl(worker_no,report_name,is_catalog,pid,config_txt,cron_start) ' + \
                'values(%(worker_no)s,%(label)s,%(is_catalog)d,%(pid)d,\'{"data_from": [],"fileList": [ ],"output": [ ],"form_input": [ ] }\',0)',
                            {'label':request.json['label'],
                            'worker_no':session['userid'],
                            'is_catalog':request.json['type']=="Catalog",
                            'pid':pid
                            })
            id = cursor.lastrowid
            conn.commit()
            return {
                'path': f'/zb/zb/{id}',
                'icon': 'list',
                'label': request.json['label'],
                'id': id,
                'pid': pid,
                'is_catalog': request.json['type'] == "Catalog"
            }
Example #13
0
def login_tbl():
    data = request.json
    data['userid'] = session['userid']
    sys_reg = glb.getSysRegister(data['sys_name'])
    di = data_adapter.get({"type": data['sys_name']}, data['userid'], {
        "username": data["username"],
        "password": data["password"]
    })
    cookies, login_headers = asyncio.run(di.login_check())
    with glb.db_connect() as conn:
        with conn.cursor(as_dict=True) as cursor:
            cursor.execute(
                """ MERGE INTO [login_tbl] t 
                USING (VALUES (%(sys_name)s,%(username)s,%(password)s,%(userid)s)) 
                    AS s(sys_name,username,password,worker_no) 
                    ON (t.[sys_name]=s.[sys_name] and t.worker_no=s.worker_no)
                    WHEN MATCHED THEN  UPDATE SET [username]=%(username)s,[password]=%(password)s 
                    WHEN NOT MATCHED THEN    INSERT (sys_name,username,password,worker_no)           
                    VALUES(%(sys_name)s,%(username)s,%(password)s,%(userid)s);""",
                data)
            conn.commit()
    return jsonify(errcode=0, )
Example #14
0
def move_one():
    #draggingID:draggingNode.data.id,dropID:dropNode.data.id,dropType
    params = {**request.json}
    params['worker_no'] = session['userid']
    with glb.db_connect() as conn:
        with conn.cursor(as_dict=True) as cursor:
            if request.json["dropType"] == "inner":
                cursor.execute(
                    'update zhanbao_tbl set pid=%(dropID)s where id=%(draggingID)s',
                    params)
            elif request.json["dropType"] == "before":
                cursor.execute(
                    '''
                update zhanbao_tbl set pid=(select pid from zhanbao_tbl where id=%(dropID)s) where id=%(draggingID)s
                update zhanbao_tbl set xuhao=(select xuhao+1 from zhanbao_tbl where id=%(dropID)s) where id=%(draggingID)s
                ;with aaa as(
                select pid,id,xuhao,row_number() over(partition by pid order by xuhao) rn from zhanbao_tbl
                where worker_no=%(worker_no)s
                )
                update aaa set xuhao=rn
                update zhanbao_tbl set xuhao=xuhao-1 where worker_no=%(worker_no)s and xuhao<=(select xuhao from zhanbao_tbl where worker_no=%(worker_no)s and id=%(draggingID)s )
                update zhanbao_tbl set xuhao=(select xuhao+1 from zhanbao_tbl where worker_no=%(worker_no)s and id=%(draggingID)s ) where worker_no=%(worker_no)s
                and id=%(dropID)s''', params)
            elif request.json["dropType"] == "after":
                cursor.execute(
                    '''
                update zhanbao_tbl set pid=(select pid from zhanbao_tbl where id=%(dropID)s) where id=%(draggingID)s
                update zhanbao_tbl set xuhao=(select xuhao+1 from zhanbao_tbl where id=%(dropID)s) where id=%(draggingID)s
                ;with aaa as(
                select pid,id,xuhao,row_number() over(partition by pid order by xuhao) rn from zhanbao_tbl
                where worker_no=%(worker_no)s
                )
                update aaa set xuhao=rn
                update zhanbao_tbl set xuhao=xuhao+1 where worker_no=%(worker_no)s and xuhao>=(select xuhao from zhanbao_tbl where worker_no=%(worker_no)s and id=%(draggingID)s )
                update zhanbao_tbl set xuhao=(select xuhao-1 from zhanbao_tbl where worker_no=%(worker_no)s and id=%(draggingID)s ) where worker_no=%(worker_no)s
                and id=%(dropID)s''', params)
            conn.commit()
            return {'code': 0, 'message': ""}
Example #15
0
def zb_execute(self,rptid,config_data=None,userid=None,report_name=""):
    if config_data is None or userid is None:
        with glb.db_connect() as conn:
                with conn.cursor(as_dict=True) as cursor:
                    cursor.execute('SELECT config_txt,worker_no,report_name FROM zhanbao_tbl WHERE id=%(id)d and is_catalog=0 order by xuhao asc', 
                                    {"id":rptid}
                                )
                    ret=cursor.fetchone()
        if ret is None:
            return "没有这个ID:"+rptid    
        config_data=json.loads(ret['config_txt'])
        userid=ret['worker_no']
        report_name=ret['report_name']
    try:
        glb.redis.sadd("zb:executing",rptid)    
        return  asyncio.run(ce.files_template_exec(rptid,config_data,userid,glb.config['UPLOAD_FOLDER'],wx_queue=glb.msg_queue))  
    except Exception as e:
        if self.request.retries>=3:
            glb.msg_queue.put({'type':'sendMessage',"wxid":'qywx:'+userid,"content":f"{rptid}:{report_name},执行报错。错误信息:"+ str(e.args)})
        print(f"{rptid}:{report_name},执行报错。错误信息:"+ str(e))
        raise self.retry(exc=e, countdown=5)
    finally:
        glb.redis.srem("zb:executing",rptid)
Example #16
0
def getLoginGetDataTemplate():
    all_sys = None
    with glb.db_connect() as conn:
        with conn.cursor(as_dict=True) as cursor:
            if glb.ini['user_login']['test_user'] == session['userid']:
                cursor.execute('SELECT * FROM sys_register')
                all_sys = cursor.fetchall()
            cursor.execute('SELECT * FROM login_tbl WHERE worker_no=%s',
                           session['userid'])
            login_tbl = cursor.fetchall()
    return {
        'errcode':
        0,
        'sys_register':
        all_sys if all_sys is not None else [],
        'parsers':
        list([
            x[:-3] for x in os.listdir("./data_adapter/") if x[-3:] == '.py'
            and x != '__init__.py' and x != 'DataInterface.py'
        ]),
        'login_tbl':
        login_tbl
    }
Example #17
0
def user_info():
    r_json = session['userInfo']
    with glb.db_connect() as conn:
        with conn.cursor(as_dict=True) as cursor:
            cursor.execute(
                'SELECT id,report_name,pid,is_catalog FROM zhanbao_tbl WHERE worker_no=%s  order by xuhao asc',
                session['userid'])
            ret = cursor.fetchall()
    r_json['roles'] = ['Admin', 'Vistor']

    r_json['menus'] = [{
        'path': f'/zb/zb/{x["id"]}',
        'icon': 'list',
        'title': x["report_name"],
        'id': x["id"],
        'pid': x["pid"],
        "is_catalog": x['is_catalog']
    } for x in ret]
    r_json['name'] = r_json['username']
    r_json['userInfo'] = {
        'username': session['userid'],
        'name': r_json['username'],
        'avatar': 'https://gitee.com/uploads/61/632261_smallweigit.jpg',
    }
    r_json['permission'] = [
        'sys_crud_btn_add',
        'sys_crud_btn_export',
        'sys_menu_btn_add',
        'sys_menu_btn_edit',
        'sys_menu_btn_del',
        'sys_role_btn1',
        'sys_role_btn2',
    ]
    if glb.ini['user_login']['test_user'] == session['userid']:
        r_json['permission'].append('sys_register')
    r_json['canReadSys'] = glb.getSysByUser(session['userid'])
    return json.dumps({"code": 0, "data": r_json})