package org.wfc.omada.api.device;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.wfc.omada.config.FeignConfig;
import org.wfc.omada.api.device.model.ActiveDeviceMultiSiteOpenApiVo;
import org.wfc.omada.api.device.model.ActiveDeviceOpenApiVo;
import org.wfc.omada.api.device.model.ActiveDeviceRespVo;
import org.wfc.omada.api.device.model.ActiveDeviceSnOpenApiVo;
import org.wfc.omada.api.device.model.ActiveDeviceSnRespVo;
import org.wfc.omada.api.device.model.AdoptDeviceRequest;
import org.wfc.omada.api.device.model.BatchTagRespOpenApiVo;
import org.wfc.omada.api.device.model.DeleteTagOpenApiVo;
import org.wfc.omada.api.device.model.DeviceCopyConfigurationOpenApiVo;
import org.wfc.omada.api.device.model.DeviceListAddBySnOpenApiVo;
import org.wfc.omada.api.device.model.DeviceListAddMultiSiteBySnOpenApiVo;
import org.wfc.omada.api.device.model.DeviceListAddOpenApiVo;
import org.wfc.omada.api.device.model.DeviceMoveSiteOpenApiVo;
import org.wfc.omada.api.device.model.LocateDeviceRequest;
import org.wfc.omada.api.device.model.ModifyTagOpenApiVo;
import org.wfc.omada.api.device.model.OperationResponseAdoptResult;
import org.wfc.omada.api.device.model.OperationResponseCheckFirmwareRes;
import org.wfc.omada.api.device.model.OperationResponseDeviceAddProcessRespVo;
import org.wfc.omada.api.device.model.OperationResponseDeviceAddRespOpenApiVo;
import org.wfc.omada.api.device.model.OperationResponseDeviceFirmwareInfo;
import org.wfc.omada.api.device.model.OperationResponseFile;
import org.wfc.omada.api.device.model.OperationResponseGridVoDeviceInfo;
import org.wfc.omada.api.device.model.OperationResponseGridVoGlobalKnownDeviceOpenApiVo;
import org.wfc.omada.api.device.model.OperationResponseGridVoGlobalUnknownDeviceOpenApiVo;
import org.wfc.omada.api.device.model.OperationResponseOnlineUpgradeRes;
import org.wfc.omada.api.device.model.OperationResponseRetryAddDeviceRespOpenApiVo;
import org.wfc.omada.api.device.model.OperationResponseRollingUpgradeRes;
import org.wfc.omada.api.device.model.OperationResponseUpgradeRes;
import org.wfc.omada.api.device.model.OperationResponseUpgradeTask;
import org.wfc.omada.api.device.model.OperationResponseWithoutResult;
import org.wfc.omada.api.device.model.RetryAddDeviceOpenApiVo;
import org.wfc.omada.api.device.model.RollingUpgradeRequest;
import org.wfc.omada.api.device.model.SetTagOpenApiVo;
import org.wfc.omada.api.device.model.TagOpenApiVo;
import org.wfc.omada.api.device.model.TagRespOpenApiVo;
import org.wfc.omada.api.device.model.UnbindActiveDeviceSnOpenApiVo;
import org.wfc.omada.api.device.model.UnbindDeviceOpenApiVo;
import org.wfc.omada.api.device.model.UnbindDeviceRespVo;
import org.wfc.omada.api.device.model.UnbindDeviceSnOpenApiVo;
import org.wfc.omada.api.device.model.UnbindDeviceSnRespVo;
import org.wfc.omada.api.device.model.UpgradeRequest;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.SpringCodegen", date = "2024-12-04T11:26:16.669+08:00[Asia/Shanghai]")

@Validated
@Api(value = "OmadaDevice", description = "the OmadaDevice API")
@FeignClient(name="OmadaDeviceApi", url = "${omada.omada-url}", configuration = FeignConfig.class)
public interface OmadaDeviceApi {

    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/multi-devices/active : Batch active devices
     * Batch active devices.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Bind/Unbind License Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param activeDeviceOpenApiVo  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Batch active devices", nickname = "activeDevice", notes = "Batch active devices.<br/><br/>The interface requires one of the permissions: <br/>Site Bind/Unbind License Manager Modify", response = ActiveDeviceRespVo.class, responseContainer = "List", tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = ActiveDeviceRespVo.class, responseContainer = "List") })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/multi-devices/active",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<List<ActiveDeviceRespVo>> activeDevice(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) ActiveDeviceOpenApiVo activeDeviceOpenApiVo);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/multi-devices/sn-active : Batch active devices by SN
     * Batch active devices by SN.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Bind/Unbind License Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param activeDeviceSnOpenApiVo  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Batch active devices by SN", nickname = "activeDeviceBySn", notes = "Batch active devices by SN.<br/><br/>The interface requires one of the permissions: <br/>Site Bind/Unbind License Manager Modify", response = ActiveDeviceSnRespVo.class, responseContainer = "List", tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = ActiveDeviceSnRespVo.class, responseContainer = "List") })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/multi-devices/sn-active",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<List<ActiveDeviceSnRespVo>> activeDeviceBySn(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) ActiveDeviceSnOpenApiVo activeDeviceSnOpenApiVo);


    /**
     * POST /openapi/v1/{omadacId}/multi-devices/active : Batch active devices with multi site
     * Batch active devices with multi site.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Bind/Unbind License Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param activeDeviceMultiSiteOpenApiVo  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Batch active devices with multi site", nickname = "activeDeviceWithMultiSite", notes = "Batch active devices with multi site.<br/><br/>The interface requires one of the permissions: <br/>Site Bind/Unbind License Manager Modify", response = ActiveDeviceRespVo.class, responseContainer = "List", tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = ActiveDeviceRespVo.class, responseContainer = "List") })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/multi-devices/active",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<List<ActiveDeviceRespVo>> activeDeviceWithMultiSite(@ApiParam(value = ""  )  @Valid @RequestBody(required = false) ActiveDeviceMultiSiteOpenApiVo activeDeviceMultiSiteOpenApiVo);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/devices/multi-add : Batch add devices
     * Batch add devices.This interface has been deprecated. Please use the following interface instead: Batch add devices by SN&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Adopt Device Manager Access&lt;br/&gt;&lt;br/&gt;The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): &lt;br/&gt;-39039  -  Too many devices imported at a time.&lt;br/&gt;-39042  -  Invalid device serial number in the imported file.&lt;br/&gt;-39043  -  Importing... Please wait.&lt;br/&gt;-53125  -  The Add Devices function has been locked due to too many invalid attempts.
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param deviceListAddOpenApiVo  (optional)
     * @return OK (status code 200)
     * @deprecated
     */
    @ApiOperation(value = "Batch add devices", nickname = "addDevices", notes = "Batch add devices.This interface has been deprecated. Please use the following interface instead: Batch add devices by SN<br/><br/>The interface requires one of the permissions: <br/>Site Adopt Device Manager Access<br/><br/>The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): <br/>-39039  -  Too many devices imported at a time.<br/>-39042  -  Invalid device serial number in the imported file.<br/>-39043  -  Importing... Please wait.<br/>-53125  -  The Add Devices function has been locked due to too many invalid attempts.", response = OperationResponseDeviceAddRespOpenApiVo.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseDeviceAddRespOpenApiVo.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/devices/multi-add",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseDeviceAddRespOpenApiVo> addDevices(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) DeviceListAddOpenApiVo deviceListAddOpenApiVo);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/multi-devices/sn-add : Batch add devices by SN
     * Batch add devices by SN.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Adopt Device Manager Access&lt;br/&gt;&lt;br/&gt;The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): &lt;br/&gt;-39039  -  Too many devices imported at a time.&lt;br/&gt;-39042  -  Invalid device serial number in the imported file.&lt;br/&gt;-39043  -  Importing... Please wait.&lt;br/&gt;-53125  -  The Add Devices function has been locked due to too many invalid attempts.
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param deviceListAddBySnOpenApiVo  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Batch add devices by SN", nickname = "addDevicesBySn", notes = "Batch add devices by SN.<br/><br/>The interface requires one of the permissions: <br/>Site Adopt Device Manager Access<br/><br/>The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): <br/>-39039  -  Too many devices imported at a time.<br/>-39042  -  Invalid device serial number in the imported file.<br/>-39043  -  Importing... Please wait.<br/>-53125  -  The Add Devices function has been locked due to too many invalid attempts.", response = OperationResponseDeviceAddRespOpenApiVo.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseDeviceAddRespOpenApiVo.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/multi-devices/sn-add",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseDeviceAddRespOpenApiVo> addDevicesBySn(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) DeviceListAddBySnOpenApiVo deviceListAddBySnOpenApiVo);


    /**
     * POST /openapi/v1/{omadacId}/multi-devices/sn-add : Batch add devices by SN with multi site
     * Batch add devices by SN with multi site.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Adopt Device Manager Access&lt;br/&gt;&lt;br/&gt;The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): &lt;br/&gt;-39039  -  Too many devices imported at a time.&lt;br/&gt;-39042  -  Invalid device serial number in the imported file.&lt;br/&gt;-39043  -  Importing... Please wait.&lt;br/&gt;-53125  -  The Add Devices function has been locked due to too many invalid attempts.
     *
     * @param omadacId Omada ID (required)
     * @param deviceListAddMultiSiteBySnOpenApiVo  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Batch add devices by SN with multi site", nickname = "addDevicesBySnWithMultiSite", notes = "Batch add devices by SN with multi site.<br/><br/>The interface requires one of the permissions: <br/>Site Adopt Device Manager Access<br/><br/>The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): <br/>-39039  -  Too many devices imported at a time.<br/>-39042  -  Invalid device serial number in the imported file.<br/>-39043  -  Importing... Please wait.<br/>-53125  -  The Add Devices function has been locked due to too many invalid attempts.", response = OperationResponseDeviceAddRespOpenApiVo.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseDeviceAddRespOpenApiVo.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/multi-devices/sn-add",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseDeviceAddRespOpenApiVo> addDevicesBySnWithMultiSite(@ApiParam(value = ""  )  @Valid @RequestBody(required = false) DeviceListAddMultiSiteBySnOpenApiVo deviceListAddMultiSiteBySnOpenApiVo);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/devices/tag : Create new tag
     * Create new tag.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Device Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param tagOpenApiVo  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Create new tag", nickname = "addTag", notes = "Create new tag.<br/><br/>The interface requires one of the permissions: <br/>Site Device Manager Modify", response = TagRespOpenApiVo.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = TagRespOpenApiVo.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/devices/tag",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<TagRespOpenApiVo> addTag(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) TagOpenApiVo tagOpenApiVo);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/devices/{deviceMac}/start-adopt : Start adopt device
     * Start adopt device.This interface does not return the actual adoptive result, you need to use the interface:Get device adopt result to obtain the adoptive result&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Adopt Device Manager Access
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param deviceMac Device MAC address, like AA-BB-CC-DD-EE-FF (required)
     * @param adoptDeviceRequest  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Start adopt device", nickname = "adoptDevice", notes = "Start adopt device.This interface does not return the actual adoptive result, you need to use the interface:Get device adopt result to obtain the adoptive result<br/><br/>The interface requires one of the permissions: <br/>Site Adopt Device Manager Access", response = OperationResponseWithoutResult.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/devices/{deviceMac}/start-adopt",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseWithoutResult> adoptDevice(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "Device MAC address, like AA-BB-CC-DD-EE-FF",required=true) @PathVariable("deviceMac") String deviceMac,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) AdoptDeviceRequest adoptDeviceRequest);


    /**
     * DELETE /openapi/v1/{omadacId}/sites/{siteId}/multi-devices/rolling-upgrade-tasks/{taskId} : End the rolling upgrade task
     * Cancel the rolling upgrade task in the site. But the devices which have completed the upgrade will not be rolled back to the old version&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Device Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param taskId Task ID. The ID is the return value of &#39;Start batch rolling upgrade&#39; interface. (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "End the rolling upgrade task", nickname = "cancelRollingUpgrade", notes = "Cancel the rolling upgrade task in the site. But the devices which have completed the upgrade will not be rolled back to the old version<br/><br/>The interface requires one of the permissions: <br/>Site Device Manager Modify", response = OperationResponseWithoutResult.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/multi-devices/rolling-upgrade-tasks/{taskId}",
        produces = "*/*", 
        method = RequestMethod.DELETE)
    ResponseEntity<OperationResponseWithoutResult> cancelRollingUpgrade(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "Task ID. The ID is the return value of 'Start batch rolling upgrade' interface.",required=true) @PathVariable("taskId") String taskId);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/devices/copy : Copy configuration
     * Copy the configuration of one device to another device of the same model. Only for switch and access point.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Device Manager Modify&lt;br/&gt;&lt;br/&gt;The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): &lt;br/&gt;-39050  -  This device does not exist.&lt;br/&gt;-39056  -  Failed to copy config because of source device not exist.&lt;br/&gt;-39057  -  Failed to copy config because of the copied device is different from the model of the source device.
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param deviceCopyConfigurationOpenApiVo  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Copy configuration", nickname = "copyDeviceConfiguration", notes = "Copy the configuration of one device to another device of the same model. Only for switch and access point.<br/><br/>The interface requires one of the permissions: <br/>Site Device Manager Modify<br/><br/>The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): <br/>-39050  -  This device does not exist.<br/>-39056  -  Failed to copy config because of source device not exist.<br/>-39057  -  Failed to copy config because of the copied device is different from the model of the source device.", response = OperationResponseWithoutResult.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/devices/copy",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseWithoutResult> copyDeviceConfiguration(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) DeviceCopyConfigurationOpenApiVo deviceCopyConfigurationOpenApiVo);


    /**
     * DELETE /openapi/v1/{omadacId}/sites/{siteId}/devices/tag : Delete an existing tag
     * Delete an existing tag.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Device Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param deleteTagOpenApiVo  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Delete an existing tag", nickname = "deleteTag", notes = "Delete an existing tag.<br/><br/>The interface requires one of the permissions: <br/>Site Device Manager Modify", response = OperationResponseWithoutResult.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/devices/tag",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.DELETE)
    ResponseEntity<OperationResponseWithoutResult> deleteTag(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) DeleteTagOpenApiVo deleteTagOpenApiVo);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/devices/{deviceMac}/force-provision : Force provision device
     * Force provision device.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Device Manager Modify&lt;br/&gt;&lt;br/&gt;The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): &lt;br/&gt;-1  -  Something went wrong. Please try again later or contact our technical support.&lt;br/&gt;-1001  -  Invalid request parameters.&lt;br/&gt;-1200  -  You have been logged out of the controller. This may have been caused by data restore, reboot, session timeout or disabled cloud access. Please try to log in again later.&lt;br/&gt;-39050  -  This device does not exist.&lt;br/&gt;-39051  -  Operation failed. Please try again later.
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param deviceMac Device MAC address, like AA-BB-CC-DD-EE-FF (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Force provision device", nickname = "forceProvisionDevice", notes = "Force provision device.<br/><br/>The interface requires one of the permissions: <br/>Site Device Manager Modify<br/><br/>The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): <br/>-1  -  Something went wrong. Please try again later or contact our technical support.<br/>-1001  -  Invalid request parameters.<br/>-1200  -  You have been logged out of the controller. This may have been caused by data restore, reboot, session timeout or disabled cloud access. Please try to log in again later.<br/>-39050  -  This device does not exist.<br/>-39051  -  Operation failed. Please try again later.", response = OperationResponseWithoutResult.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/devices/{deviceMac}/force-provision",
        produces = "*/*", 
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseWithoutResult> forceProvisionDevice(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "Device MAC address, like AA-BB-CC-DD-EE-FF",required=true) @PathVariable("deviceMac") String deviceMac);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/devices/{deviceMac}/forget : Forget device
     * Forget device.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Device Manager Modify&lt;br/&gt;MSP Device Manager Modify&lt;br/&gt;&lt;br/&gt;The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): &lt;br/&gt;-39013  -  Deletion failed. This device does not exist.&lt;br/&gt;-39014  -  To avoid damage, please do not forget the device during upgrading.&lt;br/&gt;-39054  -  Controller failed to forget device.&lt;br/&gt;-39055  -  Controller has forgotten the device but failed to reset it.
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param deviceMac Device MAC address, like AA-BB-CC-DD-EE-FF (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Forget device", nickname = "forgetDevice", notes = "Forget device.<br/><br/>The interface requires one of the permissions: <br/>Site Device Manager Modify<br/>MSP Device Manager Modify<br/><br/>The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): <br/>-39013  -  Deletion failed. This device does not exist.<br/>-39014  -  To avoid damage, please do not forget the device during upgrading.<br/>-39054  -  Controller failed to forget device.<br/>-39055  -  Controller has forgotten the device but failed to reset it.", response = OperationResponseWithoutResult.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/devices/{deviceMac}/forget",
        produces = "*/*", 
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseWithoutResult> forgetDevice(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "Device MAC address, like AA-BB-CC-DD-EE-FF",required=true) @PathVariable("deviceMac") String deviceMac);


    /**
     * GET /openapi/v1/{omadacId}/sites/{siteId}/multi-devices/add/{operateId}/status : Batch get added device status
     * Batch get added device status.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Add Device Manager Access
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param operateId  (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Batch get added device status", nickname = "getAddDevicesStatus", notes = "Batch get added device status.<br/><br/>The interface requires one of the permissions: <br/>Site Add Device Manager Access", response = OperationResponseDeviceAddProcessRespVo.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseDeviceAddProcessRespVo.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/multi-devices/add/{operateId}/status",
        produces = "*/*", 
        method = RequestMethod.GET)
    ResponseEntity<OperationResponseDeviceAddProcessRespVo> getAddDevicesStatus(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "",required=true) @PathVariable("operateId") String operateId);


    /**
     * GET /openapi/v1/{omadacId}/multi-devices/add/{operateId}/status : Batch get added device status with multi site
     * Batch get added device status with multi site.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Add Device Manager Access
     *
     * @param omadacId Omada ID (required)
     * @param operateId  (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Batch get added device status with multi site", nickname = "getAddDevicesStatusMultiSite", notes = "Batch get added device status with multi site.<br/><br/>The interface requires one of the permissions: <br/>Site Add Device Manager Access", response = OperationResponseDeviceAddProcessRespVo.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseDeviceAddProcessRespVo.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/multi-devices/add/{operateId}/status",
        produces = "*/*", 
        method = RequestMethod.GET)
    ResponseEntity<OperationResponseDeviceAddProcessRespVo> getAddDevicesStatusMultiSite(@ApiParam(value = "",required=true) @PathVariable("operateId") String operateId);


    /**
     * GET /openapi/v1/{omadacId}/sites/{siteId}/all-devices/check-latest-firmware-tasks/{taskId} : Get the result of the given check latest firmware task
     * Get the result of the firmware update task, containing a list of devices with firmware updates&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Device Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param taskId Task ID. The ID is the return value of &#39;Start check latest firmware for all devices&#39; interface (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Get the result of the given check latest firmware task", nickname = "getCheckFirmwareTaskResult", notes = "Get the result of the firmware update task, containing a list of devices with firmware updates<br/><br/>The interface requires one of the permissions: <br/>Site Device Manager Modify", response = OperationResponseCheckFirmwareRes.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseCheckFirmwareRes.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/all-devices/check-latest-firmware-tasks/{taskId}",
        produces = "*/*", 
        method = RequestMethod.GET)
    ResponseEntity<OperationResponseCheckFirmwareRes> getCheckFirmwareTaskResult(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "Task ID. The ID is the return value of 'Start check latest firmware for all devices' interface",required=true) @PathVariable("taskId") String taskId);


    /**
     * GET /openapi/v1/{omadacId}/sites/{siteId}/devices/{deviceMac}/adopt-result : Get device adopt result
     * Get device adopt result.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Adopt Device Manager Access
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param deviceMac Device MAC address, like AA-BB-CC-DD-EE-FF (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Get device adopt result", nickname = "getDeviceAdoptResult", notes = "Get device adopt result.<br/><br/>The interface requires one of the permissions: <br/>Site Adopt Device Manager Access", response = OperationResponseAdoptResult.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseAdoptResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/devices/{deviceMac}/adopt-result",
        produces = "*/*", 
        method = RequestMethod.GET)
    ResponseEntity<OperationResponseAdoptResult> getDeviceAdoptResult(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "Device MAC address, like AA-BB-CC-DD-EE-FF",required=true) @PathVariable("deviceMac") String deviceMac);


    /**
     * GET /openapi/v1/{omadacId}/sites/{siteId}/devices : Get site device list
     * Get site device list.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Device Manager View Only&lt;br/&gt;MSP Device Manager View Only
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param page Start page number. Start from 1. (required)
     * @param pageSize Number of entries per page. It should be within the range of 1–1000. (required)
     * @param sortsName Sort parameter may be one of asc or desc. Optional parameter. If it is not carried, it means it is not sorted by this field. When there are more than one, the first one takes effect (optional)
     * @param sortsStatus Sort parameter may be one of asc or desc. Optional parameter. If it is not carried, it means it is not sorted by this field. When there are more than one, the first one takes effect (optional)
     * @param sortsIp Sort parameter may be one of asc or desc. Optional parameter. If it is not carried, it means it is not sorted by this field. When there are more than one, the first one takes effect (optional)
     * @param searchKey Fuzzy query parameters, support field name,mac,ip (optional)
     * @param filtersTag Filter query parameters, support field tag name (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Get site device list", nickname = "getDeviceList", notes = "Get site device list.<br/><br/>The interface requires one of the permissions: <br/>Site Device Manager View Only<br/>MSP Device Manager View Only", response = OperationResponseGridVoDeviceInfo.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseGridVoDeviceInfo.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/devices",
        produces = "*/*", 
        method = RequestMethod.GET)
    ResponseEntity<OperationResponseGridVoDeviceInfo> getDeviceList(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@NotNull @ApiParam(value = "Start page number. Start from 1.", required = true) @Valid @RequestParam(value = "page", required = true) Integer page,@NotNull @ApiParam(value = "Number of entries per page. It should be within the range of 1–1000.", required = true) @Valid @RequestParam(value = "pageSize", required = true) Integer pageSize,@ApiParam(value = "Sort parameter may be one of asc or desc. Optional parameter. If it is not carried, it means it is not sorted by this field. When there are more than one, the first one takes effect") @Valid @RequestParam(value = "sorts.name", required = false) String sortsName,@ApiParam(value = "Sort parameter may be one of asc or desc. Optional parameter. If it is not carried, it means it is not sorted by this field. When there are more than one, the first one takes effect") @Valid @RequestParam(value = "sorts.status", required = false) String sortsStatus,@ApiParam(value = "Sort parameter may be one of asc or desc. Optional parameter. If it is not carried, it means it is not sorted by this field. When there are more than one, the first one takes effect") @Valid @RequestParam(value = "sorts.ip", required = false) String sortsIp,@ApiParam(value = "Fuzzy query parameters, support field name,mac,ip") @Valid @RequestParam(value = "searchKey", required = false) String searchKey,@ApiParam(value = "Filter query parameters, support field tag name") @Valid @RequestParam(value = "filters.tag", required = false) String filtersTag);

    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/devices",
            produces = "*/*",
            method = RequestMethod.GET)
    ResponseEntity<OperationResponseGridVoDeviceInfo> getDeviceList(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@NotNull @ApiParam(value = "Start page number. Start from 1.", required = true) @Valid @RequestParam(value = "page", required = true) Integer page,@NotNull @ApiParam(value = "Number of entries per page. It should be within the range of 1–1000.", required = true) @Valid @RequestParam(value = "pageSize", required = true) Integer pageSize);

    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/devices",
            produces = "*/*",
            method = RequestMethod.GET)
    ResponseEntity<OperationResponseGridVoDeviceInfo> getDeviceList(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@NotNull @ApiParam(value = "Start page number. Start from 1.", required = true) @Valid @RequestParam(value = "page", required = true) Integer page,@NotNull @ApiParam(value = "Number of entries per page. It should be within the range of 1–1000.", required = true) @Valid @RequestParam(value = "pageSize", required = true) Integer pageSize, @ApiParam(value = "Fuzzy query parameters, support field name,mac,ip") @Valid @RequestParam(value = "searchKey", required = false) String searchKey);


    /**
     * GET /openapi/v1/{omadacId}/sites/{siteId}/devices/{deviceMac}/latest-firmware-info : Get the latest firmware info of the device
     * Get latest firmware info of the device, including the latest firmware version and release logs.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Device Manager View Only&lt;br/&gt;&lt;br/&gt;The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): &lt;br/&gt;-39050  -  This device does not exist.
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param deviceMac Device MAC address, like AA-BB-CC-DD-EE-FF (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Get the latest firmware info of the device", nickname = "getFirmwareInfo", notes = "Get latest firmware info of the device, including the latest firmware version and release logs.<br/><br/>The interface requires one of the permissions: <br/>Site Device Manager View Only<br/><br/>The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): <br/>-39050  -  This device does not exist.", response = OperationResponseDeviceFirmwareInfo.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseDeviceFirmwareInfo.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/devices/{deviceMac}/latest-firmware-info",
        produces = "*/*", 
        method = RequestMethod.GET)
    ResponseEntity<OperationResponseDeviceFirmwareInfo> getFirmwareInfo(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "Device MAC address, like AA-BB-CC-DD-EE-FF",required=true) @PathVariable("deviceMac") String deviceMac);


    /**
     * GET /openapi/v1/{omadacId}/devices/known-devices : Get global known device list
     * Get global known device list.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Device Manager View Only&lt;br/&gt;MSP Device Manager View Only
     *
     * @param omadacId Omada ID (required)
     * @param page Start page number. Start from 1. (required)
     * @param pageSize Number of entries per page. It should be within the range of 1–1000. (required)
     * @param sortsMac Sort parameter may be one of asc or desc. Optional parameter. If it is not carried, it means it is not sorted by this field. When there are more than one, the first one takes effect (optional)
     * @param searchMacs Fuzzy query parameters, support field mac (optional)
     * @param searchNames Fuzzy query parameters, support field name (optional)
     * @param searchModels Fuzzy query parameters, support field model (optional)
     * @param searchSns Fuzzy query parameters, support field sn (optional)
     * @param filtersTag Filter query parameters, support field tag ID (optional)
     * @param filtersDeviceSeriesType Filter query parameters, support field Device series type. 0: basic; 1: pro. (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Get global known device list", nickname = "getGlobalKnownDeviceList", notes = "Get global known device list.<br/><br/>The interface requires one of the permissions: <br/>Site Device Manager View Only<br/>MSP Device Manager View Only", response = OperationResponseGridVoGlobalKnownDeviceOpenApiVo.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseGridVoGlobalKnownDeviceOpenApiVo.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/devices/known-devices",
        produces = "*/*", 
        method = RequestMethod.GET)
    ResponseEntity<OperationResponseGridVoGlobalKnownDeviceOpenApiVo> getGlobalKnownDeviceList(@NotNull @ApiParam(value = "Start page number. Start from 1.", required = true) @Valid @RequestParam(value = "page", required = true) Integer page,@NotNull @ApiParam(value = "Number of entries per page. It should be within the range of 1–1000.", required = true) @Valid @RequestParam(value = "pageSize", required = true) Integer pageSize,@ApiParam(value = "Sort parameter may be one of asc or desc. Optional parameter. If it is not carried, it means it is not sorted by this field. When there are more than one, the first one takes effect") @Valid @RequestParam(value = "sorts.mac", required = false) String sortsMac,@ApiParam(value = "Fuzzy query parameters, support field mac") @Valid @RequestParam(value = "searchMacs", required = false) String searchMacs,@ApiParam(value = "Fuzzy query parameters, support field name") @Valid @RequestParam(value = "searchNames", required = false) String searchNames,@ApiParam(value = "Fuzzy query parameters, support field model") @Valid @RequestParam(value = "searchModels", required = false) String searchModels,@ApiParam(value = "Fuzzy query parameters, support field sn") @Valid @RequestParam(value = "searchSns", required = false) String searchSns,@ApiParam(value = "Filter query parameters, support field tag ID") @Valid @RequestParam(value = "filters.tag", required = false) String filtersTag,@ApiParam(value = "Filter query parameters, support field Device series type. 0: basic; 1: pro.") @Valid @RequestParam(value = "filters.deviceSeriesType", required = false) String filtersDeviceSeriesType);


    /**
     * GET /openapi/v1/{omadacId}/devices/unknown-devices : Get global unknown device list
     * Get global unknown device list.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Device Manager View Only&lt;br/&gt;MSP Device Manager View Only
     *
     * @param omadacId Omada ID (required)
     * @param page Start page number. Start from 1. (required)
     * @param pageSize Number of entries per page. It should be within the range of 1–1000. (required)
     * @param sortsMac Sort parameter may be one of asc or desc. Optional parameter. If it is not carried, it means it is not sorted by this field. When there are more than one, the first one takes effect (optional)
     * @param searchMacs Fuzzy query parameters, support field mac (optional)
     * @param searchNames Fuzzy query parameters, support field name (optional)
     * @param searchModels Fuzzy query parameters, support field model (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Get global unknown device list", nickname = "getGlobalUnknownDeviceList", notes = "Get global unknown device list.<br/><br/>The interface requires one of the permissions: <br/>Site Device Manager View Only<br/>MSP Device Manager View Only", response = OperationResponseGridVoGlobalUnknownDeviceOpenApiVo.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseGridVoGlobalUnknownDeviceOpenApiVo.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/devices/unknown-devices",
        produces = "*/*", 
        method = RequestMethod.GET)
    ResponseEntity<OperationResponseGridVoGlobalUnknownDeviceOpenApiVo> getGlobalUnknownDeviceList(@NotNull @ApiParam(value = "Start page number. Start from 1.", required = true) @Valid @RequestParam(value = "page", required = true) Integer page,@NotNull @ApiParam(value = "Number of entries per page. It should be within the range of 1–1000.", required = true) @Valid @RequestParam(value = "pageSize", required = true) Integer pageSize,@ApiParam(value = "Sort parameter may be one of asc or desc. Optional parameter. If it is not carried, it means it is not sorted by this field. When there are more than one, the first one takes effect") @Valid @RequestParam(value = "sorts.mac", required = false) String sortsMac,@ApiParam(value = "Fuzzy query parameters, support field mac") @Valid @RequestParam(value = "searchMacs", required = false) String searchMacs,@ApiParam(value = "Fuzzy query parameters, support field name") @Valid @RequestParam(value = "searchNames", required = false) String searchNames,@ApiParam(value = "Fuzzy query parameters, support field model") @Valid @RequestParam(value = "searchModels", required = false) String searchModels);


    /**
     * GET /openapi/v1/{omadacId}/sites/{siteId}/multi-devices/manually-upgrade-tasks/{taskId} : Get the result of the given manually upgrade task
     * Get the result of the manually upgrade task. The results include whether the task is finished and how many devices have not completed the upgrade.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Manual Firmware Upgrade Access
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param taskId Task ID. The ID is the return value of &#39;Start manually upgrade&#39; interface. (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Get the result of the given manually upgrade task", nickname = "getManuallyUpgradeRes", notes = "Get the result of the manually upgrade task. The results include whether the task is finished and how many devices have not completed the upgrade.<br/><br/>The interface requires one of the permissions: <br/>Site Manual Firmware Upgrade Access", response = OperationResponseUpgradeRes.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseUpgradeRes.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/multi-devices/manually-upgrade-tasks/{taskId}",
        produces = "*/*", 
        method = RequestMethod.GET)
    ResponseEntity<OperationResponseUpgradeRes> getManuallyUpgradeRes(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "Task ID. The ID is the return value of 'Start manually upgrade' interface.",required=true) @PathVariable("taskId") String taskId);


    /**
     * GET /openapi/v1/{omadacId}/sites/{siteId}/devices/{deviceMac}/online-upgrade-result : Get online upgrade result
     * Get the result of the online upgrade.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Device Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param deviceMac Device MAC address, like AA-BB-CC-DD-EE-FF (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Get online upgrade result", nickname = "getOnlineUpgradeRes", notes = "Get the result of the online upgrade.<br/><br/>The interface requires one of the permissions: <br/>Site Device Manager Modify", response = OperationResponseOnlineUpgradeRes.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseOnlineUpgradeRes.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/devices/{deviceMac}/online-upgrade-result",
        produces = "*/*", 
        method = RequestMethod.GET)
    ResponseEntity<OperationResponseOnlineUpgradeRes> getOnlineUpgradeRes(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "Device MAC address, like AA-BB-CC-DD-EE-FF",required=true) @PathVariable("deviceMac") String deviceMac);


    /**
     * GET /openapi/v1/{omadacId}/sites/{siteId}/multi-devices/rolling-upgrade-tasks/{taskId} : Get the result of the given rolling upgrade task
     * Get the result of the rolling upgrade task. The results include whether the task is finished and how many devices have not completed the upgrade.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Device Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param taskId Task ID. The ID is the return value of &#39;Start batch rolling upgrade&#39; interface. (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Get the result of the given rolling upgrade task", nickname = "getRollingUpgradeRes", notes = "Get the result of the rolling upgrade task. The results include whether the task is finished and how many devices have not completed the upgrade.<br/><br/>The interface requires one of the permissions: <br/>Site Device Manager Modify", response = OperationResponseRollingUpgradeRes.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseRollingUpgradeRes.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/multi-devices/rolling-upgrade-tasks/{taskId}",
        produces = "*/*", 
        method = RequestMethod.GET)
    ResponseEntity<OperationResponseRollingUpgradeRes> getRollingUpgradeRes(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "Task ID. The ID is the return value of 'Start batch rolling upgrade' interface.",required=true) @PathVariable("taskId") String taskId);


    /**
     * GET /openapi/v1/{omadacId}/sites/{siteId}/devices/tag : Get tag list
     * Get tag list.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Device Manager View Only&lt;br/&gt;Site Map Manager View Only
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Get tag list", nickname = "getTags", notes = "Get tag list.<br/><br/>The interface requires one of the permissions: <br/>Site Device Manager View Only<br/>Site Map Manager View Only", response = TagRespOpenApiVo.class, responseContainer = "List", tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = TagRespOpenApiVo.class, responseContainer = "List") })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/devices/tag",
        produces = "*/*", 
        method = RequestMethod.GET)
    ResponseEntity<List<TagRespOpenApiVo>> getTags(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/devices/{deviceMac}/locate : Locate device
     * Locate device.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Device Manager Modify&lt;br/&gt;&lt;br/&gt;The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): &lt;br/&gt;-39005  -  Failed to adopt this device because the device is not connected.
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param deviceMac Device MAC address, like AA-BB-CC-DD-EE-FF (required)
     * @param locateDeviceRequest  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Locate device", nickname = "locateDevice", notes = "Locate device.<br/><br/>The interface requires one of the permissions: <br/>Site Device Manager Modify<br/><br/>The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): <br/>-39005  -  Failed to adopt this device because the device is not connected.", response = OperationResponseWithoutResult.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/devices/{deviceMac}/locate",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseWithoutResult> locateDevice(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "Device MAC address, like AA-BB-CC-DD-EE-FF",required=true) @PathVariable("deviceMac") String deviceMac,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) LocateDeviceRequest locateDeviceRequest);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/multi-devices/start-manually-upgrade : Start manually upgrade
     * Manually upgrade the devices of the same model in the site. The firmware needs to be uploaded first. Note: Each site can only execute one multi-device upgrade task at a time, and there is a number limit of the tasks that can be executed simultaneously in the controller.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Manual Firmware Upgrade Access&lt;br/&gt;&lt;br/&gt;The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): &lt;br/&gt;-39020  -  Failed to upgrade because no device is ready for upgrading.&lt;br/&gt;-39050  -  This device does not exist.&lt;br/&gt;-43704  -  The file has expired.
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param upgradeRequest  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Start manually upgrade", nickname = "manuallyUpgrade", notes = "Manually upgrade the devices of the same model in the site. The firmware needs to be uploaded first. Note: Each site can only execute one multi-device upgrade task at a time, and there is a number limit of the tasks that can be executed simultaneously in the controller.<br/><br/>The interface requires one of the permissions: <br/>Site Manual Firmware Upgrade Access<br/><br/>The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): <br/>-39020  -  Failed to upgrade because no device is ready for upgrading.<br/>-39050  -  This device does not exist.<br/>-43704  -  The file has expired.", response = OperationResponseUpgradeTask.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseUpgradeTask.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/multi-devices/start-manually-upgrade",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseUpgradeTask> manuallyUpgrade(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) UpgradeRequest upgradeRequest);


    /**
     * PATCH /openapi/v1/{omadacId}/sites/{siteId}/devices/tag : Modify an existing tag
     * Modify an existing tag.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Device Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param modifyTagOpenApiVo  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Modify an existing tag", nickname = "modifyTag", notes = "Modify an existing tag.<br/><br/>The interface requires one of the permissions: <br/>Site Device Manager Modify", response = OperationResponseWithoutResult.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/devices/tag",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.PATCH)
    ResponseEntity<OperationResponseWithoutResult> modifyTag(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) ModifyTagOpenApiVo modifyTagOpenApiVo);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/devices/{deviceMac}/site-move : Move site
     * Move the device to another site&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Device Manager Modify&lt;br/&gt;&lt;br/&gt;The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): &lt;br/&gt;-33000  -  This site does not exist.&lt;br/&gt;-33421  -  The gateway model in the target site is different from the gateway model configured in the WAN Settings Overrides in the original site.&lt;br/&gt;-39050  -  This device does not exist.&lt;br/&gt;-39094  -  The site type does not match the device series, pro site can only manage Omada Pro device.&lt;br/&gt;-39095  -  The site type does not match the device series, basic site can only manage Omada device.&lt;br/&gt;-39502  -  Failed to move the gateway. The target site already has a gateway.
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param deviceMac Device MAC address, like AA-BB-CC-DD-EE-FF (required)
     * @param deviceMoveSiteOpenApiVo  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Move site", nickname = "moveSite", notes = "Move the device to another site<br/><br/>The interface requires one of the permissions: <br/>Site Device Manager Modify<br/><br/>The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): <br/>-33000  -  This site does not exist.<br/>-33421  -  The gateway model in the target site is different from the gateway model configured in the WAN Settings Overrides in the original site.<br/>-39050  -  This device does not exist.<br/>-39094  -  The site type does not match the device series, pro site can only manage Omada Pro device.<br/>-39095  -  The site type does not match the device series, basic site can only manage Omada device.<br/>-39502  -  Failed to move the gateway. The target site already has a gateway.", response = OperationResponseWithoutResult.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/devices/{deviceMac}/site-move",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseWithoutResult> moveSite(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "Device MAC address, like AA-BB-CC-DD-EE-FF",required=true) @PathVariable("deviceMac") String deviceMac,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) DeviceMoveSiteOpenApiVo deviceMoveSiteOpenApiVo);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/all-devices/start-check-latest-firmware : Start check latest firmware for all devices
     * Start a task to query the latest firmware of all devices in the cloud.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Device Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Start check latest firmware for all devices", nickname = "onlineCheckUpgrade", notes = "Start a task to query the latest firmware of all devices in the cloud.<br/><br/>The interface requires one of the permissions: <br/>Site Device Manager Modify", response = OperationResponseUpgradeTask.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseUpgradeTask.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/all-devices/start-check-latest-firmware",
        produces = "*/*", 
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseUpgradeTask> onlineCheckUpgrade(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/multi-devices/start-rolling-upgrade : Start batch rolling upgrade
     * Batch online upgrade the devices in a certain order in the site. It is suggested to check firmware update before the operation, or the firmware might not be the latest&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Device Manager Modify&lt;br/&gt;&lt;br/&gt;The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): &lt;br/&gt;-39020  -  Failed to upgrade because no device is ready for upgrading.
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param rollingUpgradeRequest  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Start batch rolling upgrade", nickname = "onlineRollingUpgrade", notes = "Batch online upgrade the devices in a certain order in the site. It is suggested to check firmware update before the operation, or the firmware might not be the latest<br/><br/>The interface requires one of the permissions: <br/>Site Device Manager Modify<br/><br/>The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): <br/>-39020  -  Failed to upgrade because no device is ready for upgrading.", response = OperationResponseUpgradeTask.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseUpgradeTask.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/multi-devices/start-rolling-upgrade",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseUpgradeTask> onlineRollingUpgrade(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) RollingUpgradeRequest rollingUpgradeRequest);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/devices/{deviceMac}/start-online-upgrade : Start online upgrade
     * Upgrade the device with the latest firmware in the cloud. It is suggested to check firmware update before the operation, or the firmware might not be the latest&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Device Manager Modify&lt;br/&gt;&lt;br/&gt;The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): &lt;br/&gt;-39020  -  Failed to upgrade because no device is ready for upgrading.&lt;br/&gt;-39026  -  The upgrade file is the same with the current version.
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param deviceMac Device MAC address, like AA-BB-CC-DD-EE-FF (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Start online upgrade", nickname = "onlineUpgrade", notes = "Upgrade the device with the latest firmware in the cloud. It is suggested to check firmware update before the operation, or the firmware might not be the latest<br/><br/>The interface requires one of the permissions: <br/>Site Device Manager Modify<br/><br/>The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): <br/>-39020  -  Failed to upgrade because no device is ready for upgrading.<br/>-39026  -  The upgrade file is the same with the current version.", response = OperationResponseWithoutResult.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/devices/{deviceMac}/start-online-upgrade",
        produces = "*/*", 
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseWithoutResult> onlineUpgrade(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "Device MAC address, like AA-BB-CC-DD-EE-FF",required=true) @PathVariable("deviceMac") String deviceMac);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/devices/{deviceMac}/reboot : Reboot device
     * Reboot device.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Device Manager Modify&lt;br/&gt;&lt;br/&gt;The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): &lt;br/&gt;-39006  -  Operation failed. This device does not exist.&lt;br/&gt;-39007  -  Failed to reboot this device because the device is not connected.&lt;br/&gt;-39008  -  To avoid damage, please do not reboot the device during upgrading.&lt;br/&gt;-39009  -  Rebooting... Please wait.&lt;br/&gt;-39010  -  Failed to reboot. The device is synchronizing configurations.&lt;br/&gt;-39011  -  Failed to reboot. The controller is making provision for the device.&lt;br/&gt;-39012  -  Failed to send the reboot command to the device.
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param deviceMac Device MAC address, like AA-BB-CC-DD-EE-FF (required)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Reboot device", nickname = "rebootDevice", notes = "Reboot device.<br/><br/>The interface requires one of the permissions: <br/>Site Device Manager Modify<br/><br/>The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): <br/>-39006  -  Operation failed. This device does not exist.<br/>-39007  -  Failed to reboot this device because the device is not connected.<br/>-39008  -  To avoid damage, please do not reboot the device during upgrading.<br/>-39009  -  Rebooting... Please wait.<br/>-39010  -  Failed to reboot. The device is synchronizing configurations.<br/>-39011  -  Failed to reboot. The controller is making provision for the device.<br/>-39012  -  Failed to send the reboot command to the device.", response = OperationResponseWithoutResult.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/devices/{deviceMac}/reboot",
        produces = "*/*", 
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseWithoutResult> rebootDevice(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "Device MAC address, like AA-BB-CC-DD-EE-FF",required=true) @PathVariable("deviceMac") String deviceMac);


    /**
     * POST /openapi/v1/msp/{mspId}/customers/{customerId}/sites/{siteId}/devices/{deviceMac}/add/retry : retry add device in msp view
     * retry add device in msp view&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;MSP Adopt Device Manager Access&lt;br/&gt;MSP Add Device Manager Access
     *
     * @param customerId Omada ID (required)
     * @param deviceMac Device MAC address, like AA-BB-CC-DD-EE-FF (required)
     * @param mspId  (required)
     * @param siteId  (required)
     * @param retryAddDeviceOpenApiVo  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "retry add device in msp view", nickname = "retryAddDeviceByMsp", notes = "retry add device in msp view<br/><br/>The interface requires one of the permissions: <br/>MSP Adopt Device Manager Access<br/>MSP Add Device Manager Access", response = OperationResponseRetryAddDeviceRespOpenApiVo.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseRetryAddDeviceRespOpenApiVo.class) })
    @RequestMapping(value = "/openapi/v1/msp/{mspId}/customers/{customerId}/sites/{siteId}/devices/{deviceMac}/add/retry",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseRetryAddDeviceRespOpenApiVo> retryAddDeviceByMsp(@ApiParam(value = "Omada ID",required=true) @PathVariable("customerId") String customerId,@ApiParam(value = "Device MAC address, like AA-BB-CC-DD-EE-FF",required=true) @PathVariable("deviceMac") String deviceMac,@ApiParam(value = "",required=true) @PathVariable("mspId") String mspId,@ApiParam(value = "",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) RetryAddDeviceOpenApiVo retryAddDeviceOpenApiVo);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/devices/sn-unbind-active : Change the license from the old device to the new device
     * Change the license from the old device to the new device (using the same license).&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Bind/Unbind License Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param unbindActiveDeviceSnOpenApiVo  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Change the license from the old device to the new device", nickname = "unbindActiveDeviceBySn", notes = "Change the license from the old device to the new device (using the same license).<br/><br/>The interface requires one of the permissions: <br/>Site Bind/Unbind License Manager Modify", response = OperationResponseWithoutResult.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseWithoutResult.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/devices/sn-unbind-active",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseWithoutResult> unbindActiveDeviceBySn(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) UnbindActiveDeviceSnOpenApiVo unbindActiveDeviceSnOpenApiVo);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/multi-devices/unbind : Batch unbind devices
     * Batch unbind devices.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Bind/Unbind License Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param unbindDeviceOpenApiVo  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Batch unbind devices", nickname = "unbindDevice", notes = "Batch unbind devices.<br/><br/>The interface requires one of the permissions: <br/>Site Bind/Unbind License Manager Modify", response = UnbindDeviceRespVo.class, responseContainer = "List", tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = UnbindDeviceRespVo.class, responseContainer = "List") })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/multi-devices/unbind",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<List<UnbindDeviceRespVo>> unbindDevice(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) UnbindDeviceOpenApiVo unbindDeviceOpenApiVo);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/multi-devices/sn-unbind : Batch unbind devices by SN
     * Batch unbind devices by SN.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Bind/Unbind License Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param unbindDeviceSnOpenApiVo  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Batch unbind devices by SN", nickname = "unbindDeviceBySn", notes = "Batch unbind devices by SN.<br/><br/>The interface requires one of the permissions: <br/>Site Bind/Unbind License Manager Modify", response = UnbindDeviceSnRespVo.class, responseContainer = "List", tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = UnbindDeviceSnRespVo.class, responseContainer = "List") })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/multi-devices/sn-unbind",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<List<UnbindDeviceSnRespVo>> unbindDeviceBySn(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) UnbindDeviceSnOpenApiVo unbindDeviceSnOpenApiVo);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/multi-devices/tag : Set device tag for given devices
     * Set device tag for given devices.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Device Manager Modify
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param setTagOpenApiVo  (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Set device tag for given devices", nickname = "updateDeviceTag", notes = "Set device tag for given devices.<br/><br/>The interface requires one of the permissions: <br/>Site Device Manager Modify", response = BatchTagRespOpenApiVo.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = BatchTagRespOpenApiVo.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/multi-devices/tag",
        produces = "*/*", 
        consumes = "application/json",
        method = RequestMethod.POST)
    ResponseEntity<BatchTagRespOpenApiVo> updateDeviceTag(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = ""  )  @Valid @RequestBody(required = false) SetTagOpenApiVo setTagOpenApiVo);


    /**
     * POST /openapi/v1/{omadacId}/sites/{siteId}/devices/upgrade-file : Upload device firmware
     * Upload device firmware for manually upgrade.&lt;br/&gt;&lt;br/&gt;The interface requires one of the permissions: &lt;br/&gt;Site Manual Firmware Upgrade Access&lt;br/&gt;&lt;br/&gt;The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): &lt;br/&gt;-39021  -  Invalid file for upgrading.&lt;br/&gt;-39022  -  This file size is too large.
     *
     * @param omadacId Omada ID (required)
     * @param siteId Site ID (required)
     * @param file Upload a file in request body. (optional)
     * @return OK (status code 200)
     */
    @ApiOperation(value = "Upload device firmware", nickname = "uploadUpgradeFile", notes = "Upload device firmware for manually upgrade.<br/><br/>The interface requires one of the permissions: <br/>Site Manual Firmware Upgrade Access<br/><br/>The possible error code for the interface in the returned body is one of the following error codes (non generic error codes): <br/>-39021  -  Invalid file for upgrading.<br/>-39022  -  This file size is too large.", response = OperationResponseFile.class, tags={ "Omada/Device","Device", })
    @ApiResponses(value = { 
        @ApiResponse(code = 200, message = "OK", response = OperationResponseFile.class) })
    @RequestMapping(value = "/openapi/v1/${omada.omadac-id}/sites/{siteId}/devices/upgrade-file",
        produces = "*/*", 
        consumes = "multipart/form-data",
        method = RequestMethod.POST)
    ResponseEntity<OperationResponseFile> uploadUpgradeFile(@ApiParam(value = "Site ID",required=true) @PathVariable("siteId") String siteId,@ApiParam(value = "Upload a file in request body.") @RequestParam("file") MultipartFile file);

}
