device_manager.py 4.66 KB
Newer Older
wanli's avatar
wanli committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 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 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
#!/usr/bin/env python
# -*- coding: utf_8 -*-

import copy
import time
import types
import json
import logging
import traceback
from datetime import datetime
from pony.orm import *
from model import fullStackDB
from model.device import Device
from model.user import User
from utils import sql_filter

logger = logging.getLogger("DeviceManager")

class DeviceManager(object):
    def __init__(self):
        super(DeviceManager, self).__init__()

    def add(self, user, data):
        with db_session:
            editor = User.get(id=user)
            if not editor:
                return False, "current user is not exists"

            device = Device.select().where(imei=data.get("imei")).first()
            if device:
                return False, "device has been exists"

            data.update({
                'create_by': editor,
                'create_at': datetime.now(),
                'update_by': editor,
                'update_at': datetime.now(),
            })

            result = Device(**data)
            commit()

            return result, "add Device {}.".format("success" if result else "fail")

    def delete(self, user, uuid):
        editor = User.get(id=user)
        if not editor:
            return False, "current user is not exists"

        result = fullStackDB.update(Device, { 'uuid': uuid }, is_delete=True, delete_at=datetime.now(), delete_by=editor)
        return result, "delete Device {}.".format("success" if result else "fail")

    def get(self, user, data):
        result = Device.get(**data)
        if result:
            result = result.to_dict(with_collections=True, related_objects=True, only=["uuid", "create_at", "update_at", "delete_at"])
        return result, "get Device {}.".format("success" if result else "fail")

    def getList(self, user, data):
        if not data or len(data) <= 0:
            return False, 0, "parameters can not be null."

        temp = copy.deepcopy(data)
        if 'pagenum' in temp:
            temp.pop('pagenum')
        if 'pagesize' in temp:
            temp.pop('pagesize')
        if 'scope_type' in temp:
            temp.pop('scope_type')

        with db_session:
            editor = User.get(id=user)
            if not editor:
                return False, "current user is not exists"

            if editor.role == "ADMIN":
                temp.update({ "is_delete": False })
            else:
                temp.update({"create_by": editor, "is_delete": False})
                

            if "scope_type" in data and data.get("scope_type") == "list":
                result = Device.select().where(**temp).order_by(desc(Device.create_at))
                temp = []
                for item in result:
                    temp.append(item.to_dict(only=["uuid", "name"]))
                return temp, len(temp), "get select {}.".format("success" if temp else "no data")

            result = Device.select().where(**temp).order_by(desc(Device.create_at)).page(data.get("pagenum", 1), data.get("pagesize", 10))
            count = Device.select().where(**temp).count()

            if result and len(result):
                temp = []
                for item in result:
                    t = item.to_dict(with_collections=True, related_objects=True, exclude=["is_delete", "delete_at", "delete_by"])
                    t.update({
                        "create_at": item.create_at.strftime("%Y-%m-%d %H:%M:%S"),
                        "update_at": item.update_at.strftime("%Y-%m-%d %H:%M:%S"),
                        "create_by": item.create_by.to_dict(only=["uuid", "username"]),
                        "update_by": item.update_by.to_dict(only=["uuid", "username"])
                    })
                    temp.append(t)
                result = temp

            return result, count, "get Device {}.".format("success" if result else "no data")

    def update(self, user, uuid, data):
        # 当参数为空时,直接返回错误
        if len(data) <= 0 or (len(data.keys()) == 1 and "id" in data):
            return False, "parameters can not be null."

        with db_session:
            # 查询请求者是否存在
            editor = User.get(id=user)
            if not editor:
                return False, "current user is not exists"

            if data.get("imei"):
                device = Device.select().where(imei=data.get("imei")).first()
                if device:
                    return False, "device has been exists"

            result = Device.get(uuid=uuid)
            if result:
                result.set(update_at=datetime.now(), update_by=editor, **data)
                commit()

            return result, "update role {}.".format("success" if result else "fail")

deviceManager = DeviceManager()