menu.py 5.88 KB
Newer Older
1 2 3 4 5 6 7 8
'''
Author: your name
Date: 2021-07-27 16:19:06
LastEditTime: 2021-07-28 09:28:49
LastEditors: your name
Description: In User Settings Edit
FilePath: \evm-store\tools\build_out\controllers\menu.py
'''
9 10 11
#!/usr/bin/env python
# -*- coding: utf_8 -*-

12
from pprint import pprint
13 14
from datetime import datetime
from application.app import db
15
from models.user import UserModel
16 17 18 19 20 21 22 23
from models.menu import MenuModel
from webcreator.log import logger
from webcreator.response import ResponseCode

class MenuResource(object):
    def __init__(self):
        super().__init__()

24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
    def print_tree(self, group_name, tab=1):
        """
        :param str group_name:要查找的树的根的名称
        :param int tab: 格式化用的-数量
        """
        group = db.session.query(MenuModel).filter_by(name=group_name).one_or_none()
        if not group:
            return
        # group found - print name and find children
        print('- ' * tab + group.name)
        for child_group in group.children:  # type: TreeGroup
            # new tabulation value for child record
            self.print_tree(child_group.name, tab * 2)

    def batch(self, params={}, jwt={}):
        # 如果id里面包含无法转换为数字的字符,那么该接口将会报错
        ids = list(map(lambda x:int(x), params.get("ids").split(",")))

        result = db.session.query(MenuModel).filter(MenuModel.id in ids).delete()
        db.session.commit() # 这是批量删除模式
        logger.info(result)
        return True, ResponseCode.HTTP_SUCCESS

    def updateSort(self, params={}, jwt={}):
        user = db.session.query(UserModel).filter(UserModel.uuid==jwt.get("uuid")).one_or_none()
        if not user:
            return False, ResponseCode.USER_NOT_EXISTS
        
        # 接口字段可能和数据库字段不一致
        result = db.session.query(MenuModel).filter(MenuModel.id==params.get("id")).one_or_none()
        if result:
            sort = 1
            if params.get("direction") == "bottom":
                sort = -1
            result.update_at = datetime.now()
            result.update_by = user.id
            result.sort = result.sort + sort
            db.session.commit()
            return True, ResponseCode.HTTP_SUCCESS
        else:
            return False, ResponseCode.HTTP_NOT_FOUND

    def create(self, params={}, jwt={}):
        user = db.session.query(UserModel).filter(UserModel.uuid==jwt.get("uuid")).one_or_none()
        if not user:
            return False, ResponseCode.USER_NOT_EXISTS
        # 接口字段可能和数据库字段不一致
        extends = MenuModel.fields_mapping()
        data = dict(is_delete=False, sort=0, remarks="")
        data.update({
            'create_by': user.id,
            'create_at': datetime.niw(),
            'update_by': user.id,
            'update_at': datetime.now()
        })
        for k in params.keys():
            if k in extends:
                k[extends[k]] = params[k]
                continue
            if hasattr(MenuModel, k):
                data[k] = params[k]

        if data.get("sort") == 0:
            data.sort = db.session.query(MenuModel).filter().count() + 1
        # 默认设置sort等于表内记录个数
        logger.info(data.sort)
        result = MenuModel(**data)
        db.session.add(result)
        db.session.commit()
        return True, ResponseCode.HTTP_SUCCESS

    def treeList(self, params={}, jwt={}):
96
        filters = [MenuModel.is_delete==False]
97 98
        result = db.session.query(MenuModel).filter(*filters).order_by(MenuModel.sort).order_by(MenuModel.update_at.desc()).all()
        data = []
99
        if result:
100 101
            print(result)
            tab = 1
102
            for item in result:
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
                tmp = item.get_tree(session=db.session)
                # print(tmp, tmp.get("node"))
                for tt in tmp:
                    logger.info(tt)
                    logger.info(tt.get("node"))
                # pprint(item.get_tree(session=db.session, json=True))
                pprint(item.get_children(session=db.session))
            #     for child_group in i.children:  # type: TreeGroup
            #         # new tabulation value for child record
            #         self.print_tree(child_group.name, tab * 2)
            # for item in result:
            #     t = item.dict()
            #     data.append(t)
            # return result, ResponseCode.HTTP_SUCCESS
        return data, ResponseCode.HTTP_NOT_FOUND
118

119 120 121 122
    def treeNodes(self, params={}, jwt={}):
        filters = [MenuModel.is_delete==False, MenuModel.parent_id==0]
        result = db.session.query(MenuModel).filter(*filters).order_by(MenuModel.sort).order_by(MenuModel.update_at.desc()).all()
        logger.info(result)
123 124 125 126
        if result:
            return result, ResponseCode.HTTP_SUCCESS
        return None, ResponseCode.HTTP_NOT_FOUND

127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
    def updateById(self, params={}, jwt={}):
        user = db.session.query(UserModel).filter(UserModel.uuid==jwt.get("uuid")).one_or_none()
        if not user:
            return False, ResponseCode.USER_NOT_EXISTS
        # 接口字段可能和数据库字段不一致
        extends = MenuModel.fields_mapping()
        data = dict(is_delete=False)
        data.update({
            'update_at': datetime.now(),
            'update_by': user.id
        })
        for k in params.keys():
            if k in extends:
                k[extends[k]] = params[k]
                continue
            if hasattr(MenuModel, k):
                data[k] = params[k]
        
        logger.info(data)
        # filters = [MenuModel.is_delete==False]
        # result = MenuModel.query.filter(*filters).first()
        result = MenuModel.query.filter(MenuModel.id==params.get("id")).update(data, synchronize_session=False)
        db.session.commit()
        logger.info(result)
151 152 153 154 155 156
        if result:
            return result, ResponseCode.HTTP_SUCCESS
        return None, ResponseCode.HTTP_NOT_FOUND


menuManager = MenuResource()