Exemple #1
0
    def get(self, request, uuid):
        db_url = Sidus_Dev_Database

        conn, cursor = SQLHepler.sql_multi_open(db_url)
        data = SQLHepler.sql_multi_fetch_one(SQL_Hardware_Product_UUID_Client,
                                             args=uuid,
                                             cursor=cursor)
        SQLHepler.close(conn=conn, cursor=cursor)

        return Response({
            "status": RET.OK,
            "msg": Info_Map[RET.OK],
            "data": data
        })
Exemple #2
0
    def put(self, request, uuid):
        firmware_id = uuid
        data = request.data.copy()
        user = request.user
        db_url = Sidus_Dev_Database
        conn, cursor = SQLHepler.sql_multi_open(db_url)

        firmware_info = SQLHepler.sql_multi_fetch_one(SQL_Hardware_Firmware_ID,
                                                      args=firmware_id,
                                                      cursor=cursor)
        firmware_uuid = firmware_info.get('uuid_ascii_code')
        if not firmware_uuid:
            SQLHepler.close(conn=conn, cursor=cursor)
            return Response({
                "status": RET.FIRMWARNOTEXIST,
                "msg": Info_Map[RET.FIRMWARNOTEXIST]
            })
            # 判断用户是否参与
        if not self.get_user_permission(user, firmware_uuid):
            return Response({
                "status": RET.ROLEERR,
                "msg": Info_Map[RET.ROLEERR]
            })
        # 更新最后更新人员
        data.update(firmware_updated_admin_name=user.first_name + " " +
                    user.last_name,
                    id=firmware_id)
        firmware_file = data.get('firmware_url')
        if firmware_file:
            try:
                SQLHepler.sql_multi_execute(
                    SQL_Update_Hardware_Firmware_with_file,
                    data,
                    cursor=cursor)
            except Exception as e:
                return Response({
                    "status": RET.PARAMERR,
                    "msg": Info_Map[RET.PARAMERR]
                })
        else:
            try:
                SQLHepler.sql_multi_execute(
                    SQL_Update_Hardware_Firmware_without_file,
                    data,
                    cursor=cursor)
            except Exception as e:
                return Response({"status": RET.PARAMERR, "msg": str(e)})
        SQLHepler.close(conn=conn, cursor=cursor)
        return Response({"status": RET.OK, "msg": Info_Map[RET.OK]})
Exemple #3
0
    def post(self, request, id):
        """启用某个固件"""
        data = request.data.copy()
        user = request.user
        uuid_ascii_code = data.get('uuid_ascii_code')
        firmware_type = data.get('firmware_type')
        hardware_version = data.get('hardware_version')
        # 判断用户是否参与
        if not self.get_user_permission(user, uuid_ascii_code):
            return Response({
                "status": RET.ROLEERR,
                "msg": Info_Map[RET.ROLEERR]
            })

        # 更新其他驱动信息
        try:
            # 更新其他固件版本的available状态
            db_url = Sidus_Dev_Database
            conn, cursor = SQLHepler.sql_multi_open(db_url)
            if firmware_type not in ['Ctr', 'Ble', 'Dr']:
                return Response({
                    "status": RET.PARAMERR,
                    "msg": "Type Must Be 'Ctr','Ble' Or 'Dr'"
                })

            res = SQLHepler.sql_multi_fetch_one(SQL_Hardware_Firmware_ID,
                                                id,
                                                cursor=cursor)

            if not res:
                return Response({"status": RET.PARAMERR, "msg": "Id Error"})

            SQLHepler.sql_multi_execute(
                SQL_Update_Hardware_Firmware_available,
                (uuid_ascii_code, firmware_type, hardware_version),
                cursor=cursor)

            SQLHepler.sql_multi_execute(SQL_Update_Hardware_Firmware_able,
                                        id,
                                        cursor=cursor)
            SQLHepler.close(conn=conn, cursor=cursor)
        except Exception as e:
            return Response({
                "status": RET.PARAMERR,
                "msg": Info_Map[RET.PARAMERR]
            })

        return Response({"status": RET.OK, "msg": Info_Map[RET.OK]})
Exemple #4
0
    def insert_data(user, cursor, **kwargs):
        uuid_ascii_code = kwargs.get('uuid_ascii_code')
        firmware_type = kwargs.get('firmware_type')
        hardware_version = kwargs.get('hardware_version')
        firmware_version = kwargs.get('firmware_version')

        # uuid_ascii_code 是否存在
        if not uuid_ascii_code:
            raise Exception('uuid不能为空')
        # 查询是否已经有存在
        res = SQLHepler.sql_multi_fetch_one(
            SQL_Update_Hardware_Firmware_Exist,
            (uuid_ascii_code, firmware_type, hardware_version,
             firmware_version),
            cursor=cursor)
        if int(res.get('count')) >= 1:
            # 更新数据
            # 更新最后更新人员
            firmware_id = res.get('id')
            kwargs.update(firmware_updated_admin_name=user.first_name + " " +
                          user.last_name,
                          id=firmware_id)
            firmware_file = kwargs.get('firmware_url')
            # 判断是否更新文件
            if firmware_file:
                SQLHepler.sql_multi_execute(
                    SQL_Update_Hardware_Firmware_with_file,
                    kwargs,
                    cursor=cursor)
            else:
                SQLHepler.sql_multi_execute(
                    SQL_Update_Hardware_Firmware_without_file,
                    kwargs,
                    cursor=cursor)

        else:
            # 更新其他固件版本的available
            SQLHepler.sql_multi_execute(
                SQL_Update_Hardware_Firmware_available,
                (uuid_ascii_code, firmware_type, hardware_version),
                cursor=cursor)
            # 补充数据,插入新数据
            kwargs.update(firmware_updated_admin_name=user.first_name + " " +
                          user.last_name,
                          firmware_status=0)
            SQLHepler.sql_multi_execute(SQL_Insert_Hardware_Firmware,
                                        kwargs,
                                        cursor=cursor)
Exemple #5
0
    def get(self, request, uuid):
        user = request.user
        uuid = uuid
        try:
            status = self.get_user_permission(user, uuid)
            data = {}
            ctr = []
            dr = []
            ble = []
            ble_hardware_list = []
            db_url = Sidus_Dev_Database
            conn, cursor = SQLHepler.sql_multi_open(db_url)

            # 获取 基本信息
            firmware_infos = SQLHepler.sql_multi_fetch_all(
                SQL_Hardware_avail_Firmware_Client, args=uuid, cursor=cursor)
            for info in firmware_infos:
                firmware_type = info.get('firmware_type')
                if firmware_type == 'Ctr':
                    res = self.get_firmware(info, uuid, cursor=cursor)
                    ctr.append(res)
                elif firmware_type == 'Dr':
                    res = self.get_firmware(info, uuid, cursor=cursor)
                    dr.append(res)
                elif firmware_type == 'Ble':
                    ble_hardware_version = info.get('hardware_version')
                    ble_hardware_list.append(ble_hardware_version)
                    res = self.get_firmware(info, uuid, cursor=cursor)
                    ble.append(res)

            # 处理蓝牙
            # 获取蓝牙的硬件版本
            ble_hardware_versions = SQLHepler.sql_multi_fetch_all(
                SQL_Hardware_Unavail_Ble_Firmware_Client,
                args=uuid,
                cursor=cursor)
            normal_ble_versions = SQLHepler.sql_multi_fetch_all(
                SQL_Hardware_Unavail_Ble_Firmware_Client,
                args='normal',
                cursor=cursor)

            # 获取没有使用到的版本
            if ble_hardware_versions:
                for ble_version_info in ble_hardware_versions:
                    version = ble_version_info.get('hardware_version')
                    if version not in ble_hardware_list:
                        ble_hardware_list.append(version)
                        # 如果有对应的通用蓝牙,返回,没有,则为空
                        history_info = SQLHepler.sql_multi_fetch_all(
                            SQL_Hardware_Unavail_Firmware_Client,
                            args=(uuid, version, 'Ble'),
                            cursor=cursor)
                        # 获取通用蓝牙的信息
                        normal_info = SQLHepler.sql_multi_fetch_one(
                            SQL_Hardware_Firmware_Blue_Client_Version,
                            args=version,
                            cursor=cursor)
                        if not normal_info:
                            normal_info.update(hardware_version=version,
                                               normal_exist=0)
                        else:
                            normal_info.update(history=history_info,
                                               normal_exist=1)
                        ble.append(normal_info)

            # 如果没有蓝牙信息,添加所有通用蓝牙
            if normal_ble_versions:
                for normal_version_info in normal_ble_versions:
                    normal_version = normal_version_info.get(
                        'hardware_version')
                    if normal_version not in ble_hardware_list:
                        ble_hardware_list.append(normal_version)
                        # 获取所有通用蓝牙的信息
                        normal_info = SQLHepler.sql_multi_fetch_one(
                            SQL_Hardware_Firmware_Blue_Client_Version,
                            args=normal_version,
                            cursor=cursor)
                        if normal_info:
                            normal_info.update(normal_exist=1, history=[])
                            ble.append(normal_info)
            SQLHepler.close(conn=conn, cursor=cursor)
        except Exception as e:
            return Response({"msg": str(e)})
        # 构建输出数据结构
        data['partake_status'] = status
        data['Ctr'] = ctr
        data['Dr'] = dr
        data['Ble'] = ble
        return Response({
            "status": RET.OK,
            "msg": Info_Map[RET.OK],
            "data": data
        })