DTCloud — это платформа для быстрой разработки приложений от компании «Цифровые технологии и финансы» (DTCloud), предназначенная для предприятий и промышленных IoT-сетей. Платформа использует BIM/CIM+AIoT-архитектуру и технологии управления данными, чтобы обеспечить визуализацию цифрового двойника и помочь в создании интеллектуальных предприятий и связанных с ними приложений.
DTCloud предлагает модули визуализации BIM/CIM, платформу данных IoT, модуль анализа данных AI, поддерживает интеллектуальные большие экраны, мобильные приложения и веб-страницы для различных конечных точек. Платформа предоставляет множество интерфейсов разработки и проектных модулей, что позволяет быстро разрабатывать решения для интеллектуальных сценариев.
Особенности DTCloud:
Примечание: для работы с DTCloud требуется версия Python 3.10 или выше, рекомендуется использовать версию 3.10.9. По умолчанию учётная запись администратора имеет имя admin и пароль DTCloud360.
Локальное управление сервисом: (совместимо с конфигурационными файлами .conf и .yaml)
- Запуск: python dtcloud.py -c dtcloud.yaml
- Запуск queue_job: python dtcloud.py jobqueue -c dtcloud.yaml
Стандарт написания интерфейса:
# -*- coding: utf-8 -*-
# &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
# DTCloud360
# QQ:35350428
# 邮件:35350428@qq.com
# 手机:13584935775
# 作者:yu.qian
# 公司网址: http://www.dtcloud360.com/
# Copyright 中亿丰数字科技集团有限公司 2012-2025
# 日期:
# 文件:main.py
# 备注:基于Springboot&PEP8规范的控制器的接口类
# &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
# Стандартная библиотека
import io
import logging
import pandas as pd
# Сторонние библиотеки
from dtcloud import http
# Пользовательские модули текущего проекта
from commons.web.decorators import render_json, render_file
from commons.web.objects import SuccessData
from commons.core import CRUDBase
# from dtcloud.addons.BaseException.api_error import AppValidationError, AppResourceError, ValidationError
_logger = logging.getLogger(__name__)
def save_data_to_excel_by_pandas():
"""
Запись данных в Excel с помощью pandas
"""
# Заголовок таблицы Excel
struct_columns = ["Дата", "Количество билетов, купленных онлайн", "Количество билетов, купленных офлайн", "Количество групповых билетов", "Общее количество билетов"]
# Структура данных должна быть [[]], а длина внутреннего списка должна соответствовать длине заголовка
datas = [
["2022/10/27", 42, 35, 23, 160]
]
df_detail = pd.DataFrame(datas, columns=struct_columns)
bio = io.BytesIO()
with pd.ExcelWriter(bio, engine='xlsxwriter', engine_kwargs={'options': {'strings_to_urls': False}}) as writer:
# Данные анкеты
df_detail.to_excel(writer, sheet_name='Данные', index=False)
df_detail_shape = df_detail.shape[1]
workbook = writer.book
format_border = workbook.add_format({'border_color': '#e1e4eb'}) # Установить формат границы
worksheets = writer.sheets
worksheet1 = worksheets['Данные']
# Здесь находится ядро, установить формат в соответствии с условиями
worksheet1.conditional_format(0, 0, 0, df_detail_shape, {'type': 'no_blanks', 'format': format_border})
writer.save()
bio.seek(0)
data = bio.read()
return data
class DtMockController(http.Controller, CRUDBase):
"""
Контроллер Mock
"""
@http.route("/api/project/getProjectData/<int:role_id>", type="http", methods=['GET'], auth="none", sitemap=False,
csrf=False,
cors="*",
description='Получение данных Mock', group='Получение данных Mock')
@render_json # Декоратор для возврата данных в стандартном формате json
def get_mock_data(self, **kw):
"""
Получение чувствительных ресурсов dt
:param kw:
:return:
"""
a = {"mock": "Это данные Mock"}
return SuccessData(a=a, msg='Получение списка чувствительных ресурсов dt успешно')
@http.route("/api/getFileData", type="http", methods=['GET'], auth="none", sitemap=False,
csrf=False,
cors="*",
description='Получить данные типа файла', group='Получить данные типа файла')
@render_file # Декоратор для возврата потока файлов
def get_file_data(self, **kw):
data = save_data_to_excel_by_pandas()
return 'Информация о компании.xlsx', data
Методы queue_job, часто используемые:
# 1. Метод для добавления задания в очередь — использование with_delay() для записи или модели
def button_done(self):
self.with_delay().print_confirmation_document(self.state)
self.write({"state": "done"})
return True
# 2. Определение зависимостей
def
``` ```
button_chain_done(self):
self.ensure_one()
job1 = self.browse(1).delayable().generate_thumbnail((50, 50))
job2 = self.browse(1).delayable().generate_thumbnail((50, 50))
job3 = self.browse(1).delayable().generate_thumbnail((50, 50))
"""
На job2 вызывается метод on_done (job3), это означает, что job2 будет выполнен только после завершения job3.
Аналогично, job1 будет выполнен только после выполнения job2. Таким образом создаётся цепочка зависимостей, в которой сначала выполняется job3, затем job2 и, наконец, job1.
"""
job1.on_done(job2.on_done(job3)).delay()
# 3、高阶用法介�оведение chain & group
"""
Здесь chain обозначает последовательность заданий, которые должны быть выполнены по порядку, а group обозначает задания, которые могут выполняться параллельно.
Использование chain() аналогично использованию нескольких вложенных вызовов on_done(), но более читаемо. Эти два подхода можно комбинировать для создания диаграммы.
Например, мы можем сгруппировать задания [A], чтобы предотвратить выполнение другой группы заданий [B]. Задания группы [B] будут выполнены только тогда, когда все задания группы [A] завершатся.
"""
def button_done(self):
group_a = group(self.delayable().method_foo(), self.delayable().method_bar())
group_b = group(self.delayable().method_baz(1), self.delayable().method_baz(2))
chain(group_a, group_b).delay()
self.write({"state": "done"})
return True
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )