Наполнение справочников: различия между версиями

Материал из DPA
Перейти к навигации Перейти к поиску
Строка 418: Строка 418:
 
             "equipment": "WC2", - наименование оборудования, на которое запланировано задание
 
             "equipment": "WC2", - наименование оборудования, на которое запланировано задание
 
             "isMaintenance": true, - признак того, что задание является ТОиР
 
             "isMaintenance": true, - признак того, что задание является ТОиР
             "productionType": 5, - тип задания (1-производство, 2-Наладка, 3-Внедрение, 4-Производство сналадкой, 5-ТОиР)
+
             "productionType": 5, - тип задания (1-производство, 2-Наладка, 3-Внедрение, 4-Производство с наладкой, 5-ТОиР)
 
             "order": null, - Название задания (в версии 5.7 не используется для ТОиР)
 
             "order": null, - Название задания (в версии 5.7 не используется для ТОиР)
 
             "productName": null, - наименование производимого изделия (для заданий типа 1-4)
 
             "productName": null, - наименование производимого изделия (для заданий типа 1-4)
Строка 439: Строка 439:
 
<pre>
 
<pre>
 
[POST] api/jobs/createAndAssign
 
[POST] api/jobs/createAndAssign
 +
            {
 +
                "order": "job/order name", - Название задания
 +
                "lot": null, - партия(не используется)
 +
                "productVersionId": 1424, - идентификатор версии производимого изделия (может не указываться)
 +
                "technologyVersionId": 1455, - идентификатор версии технологии, по которой производится изделие (может не указываться)
 +
                "technologyStageId": 1456, - идентификатор этапа технологии, по которому производится изделие (указываться совместно с technologyVersionId)
 +
                "count": "111", - плановое количество
 +
                "startDate": "2022-07-19T08:16:00.000Z", - плановое время начала (указывается совместно с временем окончания и оборудованием)
 +
                "endDate": "2022-07-19T18:03:00.000Z", - плановое время окончания (указывается совместно с временем начала и оборудованием)
 +
                "productionType": 1, - тип задания (1-производство, 2-Наладка, 3-Внедрение, 4-Производство с наладкой)
 +
                "comment": "some comment here", - комментарий
 +
                "equipmentId": 898 - идентификатор оборудования, на которое запланировано задание (указывается совместно с временем начала и окончания)
 +
            }
 +
</pre>
 +
'''Редактировоание задания на производство:
 +
<Pre>
 +
[POST] api/jobs/updateAndAssign/{идентификатор_задания}
  
 
             {
 
             {
Строка 444: Строка 461:
 
                 "lot": null, - партия(не используется)
 
                 "lot": null, - партия(не используется)
 
                 "productVersionId": 1424, - идентификатор версии производимого изделия (может не указываться)
 
                 "productVersionId": 1424, - идентификатор версии производимого изделия (может не указываться)
                 "technologyVersionId": 1455, - идентифкатор версии технологии, по которой производится изделие (может не указываться)
+
                 "technologyVersionId": 1455, - идентификатор версии технологии, по которой производится изделие (может не указываться)
                 "technologyStageId": 1456, - идентификатор этапа технологии, по которому производится изделие (указываться совместно с technologyVersionId)
+
                 "technologyStageId": 1456, - идентификатор этапа технологии, по которому производится изделие (указывается совместно с technologyVersionId)
 
                 "count": "111", - плановое количество
 
                 "count": "111", - плановое количество
 
                 "startDate": "2022-07-19T08:16:00.000Z", - плановое время начала (указывается совместно с временем окончания и оборудованием)
 
                 "startDate": "2022-07-19T08:16:00.000Z", - плановое время начала (указывается совместно с временем окончания и оборудованием)
 
                 "endDate": "2022-07-19T18:03:00.000Z", - плановое время окончания (указывается совместно с временем начала и оборудованием)
 
                 "endDate": "2022-07-19T18:03:00.000Z", - плановое время окончания (указывается совместно с временем начала и оборудованием)
                 "productionType": 1, - тип задания (1-производство, 2-Наладка, 3-Внедрение, 4-Производство сналадкой)
+
                 "productionType": 1, - тип задания (1-производство, 2-Наладка, 3-Внедрение, 4-Производство с наладкой)
 
                 "comment": "some comment here", - комментарий
 
                 "comment": "some comment here", - комментарий
 
                 "equipmentId": 898 - идентификатор оборудования, на которое запланировано задание (указывается совместно с временем начала и окончания)
 
                 "equipmentId": 898 - идентификатор оборудования, на которое запланировано задание (указывается совместно с временем начала и окончания)
 +
            }
 +
</pre>
 +
'''Создание и редактирование задания ТОиР:
 +
<pre>[POST] api/jobs/saveMaintenanceJob
 +
 +
            {
 +
                "id": 0, - идентификатор задания (0-при создании)
 +
                "equipmentId": 899, - идентификатор оборудования, на которое запланировано задание
 +
                "startTime": "2022-07-19T07:20:00.000Z", - плановое время начала
 +
                "endTime": "2022-07-19T08:20:00.000Z", - плановое время окончания
 +
                "type": 1, - тип ТОиР (1-плановый, 2-внеплановый, 3-авария)
 +
                "cause": "reason", - причина(текст)
 +
                "mode": 2, - всегда=2
 +
                "comment": "comment", - комментарий
 
             }
 
             }
 
</pre>
 
</pre>

Версия 21:28, 16 ноября 2022

Опции спискового отображения

{
  "sort": [
    {
      "selector": "name",
      "desc": false
    }
  ],
  "filter": [
    [
      "sortOrder",
      "=",
      123
    ],
    "and",
    [
      [
        [
          "reasonCategory",
          "=",
          1
        ]
      ]

Параметры и их описание:

RequireTotalCount' - Возвращать ли общее количество записей, результат в зависимости от значения:
{ data: <массив данных>, totalCount: <число-общее количество записей>} или Skip - сколько сначала записей пропустить (используется для постраничного вывода)
Take - сколько записей вернуть
Sort - параметры сортировки в виде массива:
SearchOperation - принимает значение "contains". на текущий момент другие значения параметра не поддерживаются. Используется совместно с SearchValue и SearchExpr для множественного поиска по вхождению строки в строку по одному или нескольким полям записи. SearchValue - одно или несколько строковых значений для поиска, разделенных знаками пробела, например: "строка1" или "строка1 строка2 строка3" SearchExpr - поле/поля, в которых будет производиться поиск строки/строк по вхождению:

 
     "field" - одно поле
    ["field1", "field2", ...] - несколько полей
    

DataField - не используется

 
        {selector: "category", - наименование поля для сортировки             desc: false - порядок сортировки по возрастанию/убыванию         }, - сортировка №1
        {selector: "name", desc: false} - сортировка №2

Filter - фильтр записей в виде массива фильтров:

    [
        [
         "name", - наименование поля фильтрации
         "contains", - операция фильтра: 
            contains - содержит
            notcontains - не содержит
            startswith - начинается с 
            endswith - заканчивается на
            = - равно
            <> - не рвано
         "программа" - значение фильтра
        ],
        "and", - тип соединения условий фильтра: and/or
        ["category", "startswith", "категория"]]

Справочники

Справочник Наименование справочника в API
1 3D-модели рабочих центров ReferenceBookOfThreeDModel
2 Анализ циклов ReferenceBookOfCycleAnalize
3 Бригады ReferenceBookOfBrigade
4 Группы рабочих центров ReferenceBookOfGroupOfWorkingCenters
5 Диапазоны значений ValueRange
6 Должности ReferenceBookOfPositions
7 Имена смен ShiftName
8 Метатеги УП ReferenceBookOfControlProgramTag
9 Недопроизводство UnderproductionReason
10 Обработки ReferenceBookOfControlProgramProcessingType
11 Отклонения ReferenceBookReasonsOfOvertime
12 Приостановки/Пропуски OperationRunSuspendReason
13 Простои ReferenceBookReasonsOfDowntime
15 Типы изделий ReferenceBookOfProductType
16 Типы причин простоя ReferenceBookOfDowntimeReasonType
17 Типы программ ReferenceBookOfControlProgramType
18 Шаблоны расписаний ScheduleTemplate
19 Шаблоны сообщений MessageTemplate

Другие метаданные

Наименование Наименование справочника в API
1 Изделия (ReferenceBookOfProducts)
2 УП (ReferenceBookOfControlPrograms)
3 Подпрограммы (ReferenceBookOfSubprograms)
4 Группа тикета (TicketGroup)
5 Источник тикета (TicketSource)
6 Тип тикета (TicketType)
7 Фильтр тикета (TicketFilter)
8 Оповещение тикета (TicketNotification)

Работа со структурой предприятия

Получение информации о конкретном предприятии

 api/dpaEnterpriseStrusture/getEnterprise/{id}    api/ManageEnterpriseStructure/getEnterprise/{id} 

Получение информации о конкретном цехе

  api/dpaEnterpriseStrusture/getSite/{id}    api/ManageEnterpriseStructure/getSite/{id}

Получение информации о конкретном подразделении

 api/dpaEnterpriseStrusture/getDepartment/{id}    api/ManageEnterpriseStructure/getDepartment/{id}>

Получение информации о конкретном рабочем центре

 api/dpaEnterpriseStrusture/getEquipment/{id}    api/ManageEnterpriseStructure/getEquipment/{id}

Создание предприятия

 api/dpaEnterpriseStrusture/create    api/ManageEnterpriseStructure/create

POST {         
        "name": "Предприятие", - наименование         
        "description": "Описание строкой", - описание     
           } 

Cохранение информации о предприятии

 api/dpaEnterpriseStrusture/saveEnterprise    api/ManageEnterpriseStructure/saveEnterprise 

POST {         
        "id": 348, - идентификатор         
        "name": "Предприятие", - наименование         
        "description": "Описание строкой", - описание                  // Настройки безопасности общие для всех структурных единиц: Предприятия/Цех/Подразделение/Рабочий центр - поэтому в остальных запросах описание пропущено         
        "inherit": false, - признак наследуемости настроек безопасности (не используется для предприятия)         
        "groupIds": [], - идентификаторы групп безопасности, которым будет доступен просмотр структурной единицы (в случае, если настройки не наследуются)                                         
        "availableToAll": true, - признак доступности всем группам безопасности (в случае, если настройки не наследуются)     
     } 

Создание цеха

   api/dpaEnterpriseStrusture/createSite    api/ManageEnterpriseStructure/createSite 

POST {
        "name": "Цех №1", - наименование         
        "description": "Описание строкой", - описание         
        "enterpriseId": 123456 - идентификатор родительского предприятия     
     } 

Сохранение информации о цехе

api/dpaEnterpriseStrusture/saveSite    api/ManageEnterpriseStructure/saveSite

POST {         
        "id": 21, - идентификатор         
        "name": "Цех №1", - наименование         
        "description": "Описание строкой", - описание                  
        "inherit": true,         
        "groupIds": [],         
        "availableToAll": false,         
     }

Создание подразделения

 api/dpaEnterpriseStrusture/createDepartment    api/ManageEnterpriseStructure/createDepartment 

POST {         
        "name": "Подразделение №1", - наименование         
        "description": "Описание строкой", - описание         
        "siteId": 123456 - идентификатор родительского цеха         
        "ownerDepartmentId": 123456 - идентификатор родительского подразделения (не указывается если родителем является цех)     
      } 

Сохранение информации о подразделении

 api/dpaEnterpriseStrusture/saveDepartment    api/ManageEnterpriseStructure/saveDepartment

POST {         
        "id": 22, - идентификатор         
        "name": "Подразделение Alpha", - наименование         
        "description": "описание", - описание         
        "threeDModelId": 50253885, - идентификатор привязанной 3D-модели подразделения                  
        "inherit": true,         
        "groupIds": [],         
        "availableToAll": false,     
     } 

Cоздание РЦ

 api/dpaEnterpriseStrusture/createEquipment    api/ManageEnterpriseStructure/createEquipment

POST {         
        "departmentId": 56539853, - идентификатор родительского подразделения         
        "name": "Alpha 700-IST-1", - наименование         
        "description": "описание", - описание         
        "equipmentGroupIds": [], - идентификаторы групп РЦ, в которые входи РЦ         
        "driverIdentifier": "68f6e95d-fa95-4dd6-a670-3f4181a693ab", - идентификатор драйвера, к которому привязан РЦ         
        "serverId": 23, - идентификатор сервера DPA, к которому привязан РЦ     
     } 

Cохранение информации о РЦ

 api/dpaEnterpriseStrusture/saveEquipment    api/ManageEnterpriseStructure/saveEquipment

POST {
        "id": 26, - идентификатор
        "name": "Alpha 700-IST-1", - наименование
        "model": "модель рабочего центра", - наименование модели
        "inventoryNumber": "ITX-111", - инвентарный номер
        "description": "", - описание
        "equipmentGroupIds": [], - идентификаторы групп РЦ, в которые входи РЦ
        "driverIdentifier": "68f6e95d-fa95-4dd6-a670-3f4181a693ab", - идентификатор драйвера, к которому привязан РЦ
        "serverId": 23, - идентификатор сервера DPA, к которому привязан РЦ
        "mainChannel": 0, - номер основного канала драйвера
        "channelInfoList": [ - информация о каналах драйвера
           

{                 "channelNumber": 0, - номер канала                 "isUsedInSummaryState": true - учавствует ли канал в формировании состояния РЦ             }
,
           

{                 "channelNumber": 1,                 "isUsedInSummaryState": false             }
        ],
        
        "releaseCountingType": 0, - тип подсчета выпуска (0-по нормам УП; 1-по счётчику; 2-без выпуска)
        "counterIncrementType": 0, - тип инкрементации счетчика (0-инкрементация на разницу значений счетчика; 1-инкрементация на единицу)
        "releaseDiscreteness": 1, - дискретность выпуска по счётчику
        "normativeReleaseDiscreteness": 1, - дискретность выпуска по норме
        "releaseQualityMark": 0, -  отметка качества(0-условно-годные; 1-годные; 2-брак)
        "masterMustComfirmIncompleteJobClose": true, - Мастер должен подтверждать закрытие задания с недопроизводством или перепроизводством
        "masterMustComfirmDisorderedJobStart": true, - Мастер должен подтверждать запуск задания не по порядку и пропуск задания
        "allowMultipleTasksSimultaneously": true, - разрешить запуск нескольких заданий одновременно
        "prohibitedJobStartWhenAnotherJobIsSuspended": false, - Запретить запуск задания, если другое задание стоит на паузе
        "allowMultiplePersonalShifts": true, - Разрешить открытие больше одной смены оператора одновременно
        "useMachineStatisticsOutput": true, - Использовать выпуск по по машинным данным
        
        "parseNcDataType": 1, - тип определения УП (0-отключено; 1-по имени УП; 2-по метатегам УП)
        
        "threeDModelId": 25, - идентификатор 3D-модели        

        "inherit": false,
        "groupIds": [ 5 ],
        "availableToAll": false,
    }

Шаблоны расписаний

[POST] /api/schedule/saveScheduleTemplateRecord пример недельного шаблона расписания: {

 "id": -1, - идентификатор шаблона (-1 для создания нового)
 "name": "наименование шаблона расписания", - наименование
 "templateType": 2, - тип шаблона (1-дневной; 2-недельный)
 "intervals": [ - коллекция интервалов, описывающих расписание
  

{ "shiftId": 641, - идентификатор имени смены "start": "00.00:00:00", - время начала интервала (смещение от начала недели, т.е. от понедельника 00:00) "end": "00.04:10:00" - время окончания интервала // время начала и окончания интервала передается в разрезе дней. В случае если смена переходит из одного дня в другой, необходимо передать два интервала - для первого дня и для второго. // интервалы времени должны передаваться в хронологическом порядке. } ,

   { "shiftId": 642, "start": "00.04:10:00", "end": "00.09:20:00" },
   { "shiftId": 641, "start": "00.09:20:00", "end": "01.00:00:00" },
   { "shiftId": 641, "start": "01.00:00:00", "end": "01.07:30:00" },
   { "shiftId": 643, "start": "01.07:30:00", "end": "01.13:40:00" },
   { "shiftId": 641, "start": "01.13:40:00", "end": "02.00:00:00" },
   { "shiftId": 641, "start": "02.00:00:00", "end": "02.04:30:00" },
   { "shiftId": 644, "start": "02.04:30:00", "end": "02.11:50:00" },
   { "shiftId": 641, "start": "02.11:50:00", "end": "02.14:20:00" },
   { "shiftId": 53144555, "start": "02.14:20:00", "end": "02.21:10:00" },
   { "shiftId": 641, "start": "02.21:10:00", "end": "03.00:00:00" },
   { "shiftId": 641, "start": "03.00:00:00", "end": "04.00:00:00" },
   { "shiftId": 641, "start": "04.00:00:00", "end": "05.00:00:00" },
   { "shiftId": 641, "start": "05.00:00:00", "end": "06.00:00:00" },
   { "shiftId": 641, "start": "06.00:00:00", "end": "07.00:00:00" }
 ]

}

Дополнительно к расписанию

Отвязка структурной единицы от родительского расписания:

 
[POST] api/schedule/detachScheduleFromParent/{scheduleOwnerType}/{scheduleOwnerId} 
где:
    scheduleOwnerType - тип структурной единицы открепляемой от родительского расписания (1-РЦ; 2-подразделение; 3-цех; 5-предприятие)
    scheduleOwnerId - идентификатор структурной единицы 

при отвязке от родительского расписания для структурной единицы содается собственное расписание и далее работа производится уже с ним

Приявязка структурной единицы к родительскому расписанию:

 [POST] api/schedule/attachScheduleToParent/{scheduleOwnerType}/{scheduleOwnerId}
где:
    scheduleOwnerType - тип структурной единицы прикрепляемой к родительскому расписанию (1-РЦ; 2-подразделение; 3-цех; 5-предприятие)
    scheduleOwnerId - идентификатор структурной единицы 

при привязке к родительскому расписанию происходит удаление собственного расписания работы структурной единицы

Применения шаблона расписания к расписанию структурной единицы:

 [POST] api/schedule/applyScheduleTemplateToSchedule/{scheduleOwnerType}/{scheduleOwnerId}/{scheduleTemplateId}

где:

   scheduleOwnerType - тип структурной единицы (1-РЦ; 2-подразделение; 3-цех; 5-предприятие)
   scheduleOwnerId - идентификатор структурной единицы
   scheduleTemplateId - идентификатор шаблона расписания

тело метода:

{   
       "start": "2022-07-03T19:00:00.000Z", - начало периода, на который применяется шаблон расписания   
       "end": "2022-07-10T19:00:00.000Z" - окончание периода, на который применяется шаблон расписания } 

Получение информации по простоям

Журнал простоев

    [POST] http://dpadev/api/journals/getJournalDatas/DowntimeReason
    Тело:
    {
      "dateTimeFrom": "2022-07-10T21:00:00.000Z", - время начала периода
      "dateTimeUntil": "2022-07-11T20:59:59.999Z", - время окончания периода
      "itemIds": [1, 2, 3], - список идентификаторов оборудования
      "gridOptions": { - опции спискового отображения (описание есть в вопрос №1)
        "requireTotalCount": true,
        "skip": 0,
        "take": 20,
        "sort": [
         

{             "selector": "startDate",             "desc": true           }
        ]
      }
    }
   Возращаемая структура данных:
    [
       
{             
        "downtimeInfo": "Delta  UQ-3",             
        "startDate": "2022-07-11T08:13:49.1990938+00:00", - начало периода причины простоя             
        "endDate": "2022-07-11T08:13:49.6935685+00:00", - окончание периода причины простоя             
        "status": 2, - статус простоя (1-необработанный;2-обработанный)             
        "reason": "Перерыв между сменами", - наименование причины простоя             
        "timeStamp": "2022-07-11T11:13:52.477789+03:00", - время последней классификации периода простоя             
        "operatorComment": null, - комментарий причины простоя             
        "user": "Пользоватль 123", - имя пользователя классифицировашего период простоя             
        "id": 356166430, - идентификатор периода причины простоя             
        "createdOn": "2022-07-11T08:13:52.477789+03:00", - время создания периода причины простоя             
        "createdBy": 1 - идентификатор пользователя создавшего период причины простоя         }
    ]

Работа с пользователями

Добавление/удаление пользователей в/из группы

 [POST] api/securityManagment/subjectInheritance/{userId}
    
    где: userId - идентификатор пользователя 
   тело:
  

{         "added": [1, 2, 3], - список идентификаторов добавляемых пользователю групп         
          "removed": [4, 5, 6] - список идентификаторов удаляемых у пользователя групп     } 

Получение списка пользователей:

       [POST] api/security/userRecords
       тело: 
      

{ - опции спискового отображения (описание есть в вопрос №1) "sort": null, "requireTotalCount": true, "searchOperation": "contains", "searchValue": null, "skip": 0, "take": 20, }

Возращаемая структура данных:

       {
            totalCount: 10,
            data:[
               

{          
          "personnelNumber": "1378698466", - табельный номер                     
          "positionName": null, - наименование занимаемой должности                     
          "positionId": null, - идентификатор занимаемой должности                     
          "isSystemUser": false, - признак того, что пользователь системный                     
          "surname": "Виноградов", - фамилия                     
          "name": "Михаил", - имя                     
          "patronymic": "Сергеевич", - отчество                     
          "language": "ru-RU", - текущая локализация                     
          "blocked": false, - признак заблокированности                     
          "id": 2689, - идентификатор пользователя                     
          "displayName": "Виноградов М.С." - отображаемое имя                 }

Получение списка групп:

 [POST] api/security/groupRecords 

{ - опции спискового отображения             
          "sort": null,             
          "requireTotalCount": true,             
          "searchOperation": "contains",             
          "searchValue": null,             
          "skip": 0,             
          "take": 20,         } 

Возвращаемая структура данных:

        {
            totalCount: 30,
            data:[
               

{                     
           "name": "Операторы", - наименование                     
           "description": null, - описание                     
           "id": 2, - идентификатор                     
           "displayName": "Операторы" - отображаемое наименование                 } 

Работа с заданиями

Получение списка заданий:

 [POST] api/jobs/getJobDatas
{  
    "requireTotalCount": true,
    "skip": 0,
    "take": 20,
    "sort": [ { "selector": "startDate", "desc": true } ]
} 

Результат:

{
            "id": 9347, - идентификатор
            "equipmentId": 899, - идентификатор оборудования, на которое запланировано задание
            "equipment": "WC2", - наименование оборудования, на которое запланировано задание
            "isMaintenance": true, - признак того, что задание является ТОиР
            "productionType": 5, - тип задания (1-производство, 2-Наладка, 3-Внедрение, 4-Производство с наладкой, 5-ТОиР)
            "order": null, - Название задания (в версии 5.7 не используется для ТОиР)
            "productName": null, - наименование производимого изделия (для заданий типа 1-4)
            "productVersion": null, - номер версии производимого изделия (для заданий типа 1-4)
            "plannedCount": null, - плановое количество (для заданий типа 1,3,4)
            "actualCount": null, - фактическое количество (для заданий типа 1,3,4)
            "rejectedCount": null, - количество брака (для заданий типа 1,3,4)
            "technologyVersion": null, - версия технологии, по которой производится изделие (для заданий типа 1-4)
            "stage": null, - наименование этапа технологии  (для заданий типа 1-4)
            "plannedStart": "2022-07-19T12:20:00+05:00", - плановое время начала
            "plannedEnd": "2022-07-19T13:20:00+05:00", - плановое время окончания
            "actualStart": null, - фактическое время начала
            "actualEnd": null, - фактическое время окончания
            "status": 1, - первичный статус задания (0-создани, 1-запланировано, 2-начато, 3-завершено)
            "secondaryStatus": 0, - вторичный статус задания (0-нет, 1-пауза, 2-пропущено, 3- ---, 4-пропущено и скрыто)
            "isImported": false - признак того, что задание получено через импорт
        } 

Создание задания на производство

[POST] api/jobs/createAndAssign
            {
                "order": "job/order name", - Название задания
                "lot": null, - партия(не используется)
                "productVersionId": 1424, - идентификатор версии производимого изделия (может не указываться)
                "technologyVersionId": 1455, - идентификатор версии технологии, по которой производится изделие (может не указываться)
                "technologyStageId": 1456, - идентификатор этапа технологии, по которому производится изделие (указываться совместно с technologyVersionId)
                "count": "111", - плановое количество
                "startDate": "2022-07-19T08:16:00.000Z", - плановое время начала (указывается совместно с временем окончания и оборудованием)
                "endDate": "2022-07-19T18:03:00.000Z", - плановое время окончания (указывается совместно с временем начала и оборудованием)
                "productionType": 1, - тип задания (1-производство, 2-Наладка, 3-Внедрение, 4-Производство с наладкой)
                "comment": "some comment here", - комментарий
                "equipmentId": 898 - идентификатор оборудования, на которое запланировано задание (указывается совместно с временем начала и окончания)
            }

Редактировоание задания на производство:

[POST] api/jobs/updateAndAssign/{идентификатор_задания}

            {
                "order": "job/order name", - Название задания
                "lot": null, - партия(не используется)
                "productVersionId": 1424, - идентификатор версии производимого изделия (может не указываться)
                "technologyVersionId": 1455, - идентификатор версии технологии, по которой производится изделие (может не указываться)
                "technologyStageId": 1456, - идентификатор этапа технологии, по которому производится изделие (указывается совместно с technologyVersionId)
                "count": "111", - плановое количество
                "startDate": "2022-07-19T08:16:00.000Z", - плановое время начала (указывается совместно с временем окончания и оборудованием)
                "endDate": "2022-07-19T18:03:00.000Z", - плановое время окончания (указывается совместно с временем начала и оборудованием)
                "productionType": 1, - тип задания (1-производство, 2-Наладка, 3-Внедрение, 4-Производство с наладкой)
                "comment": "some comment here", - комментарий
                "equipmentId": 898 - идентификатор оборудования, на которое запланировано задание (указывается совместно с временем начала и окончания)
            }

Создание и редактирование задания ТОиР:

[POST] api/jobs/saveMaintenanceJob

            {
                "id": 0, - идентификатор задания (0-при создании)
                "equipmentId": 899, - идентификатор оборудования, на которое запланировано задание
                "startTime": "2022-07-19T07:20:00.000Z", - плановое время начала
                "endTime": "2022-07-19T08:20:00.000Z", - плановое время окончания
                "type": 1, - тип ТОиР (1-плановый, 2-внеплановый, 3-авария)
                "cause": "reason", - причина(текст)
                "mode": 2, - всегда=2
                "comment": "comment", - комментарий
            }