package com.maibu.controller; import java.time.LocalDate; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.eclipse.paho.client.mqttv3.MqttException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.maibu.core.business.DevicePlan; import com.maibu.core.business.RegionConsecutiveTaskRecord; import com.maibu.core.business.dto.ConsecutiveTaskDTO; import com.maibu.core.business.dto.ConsecutiveTaskQueryDTO; import com.maibu.core.business.dto.DeviceTaskCommandDTO; import com.maibu.core.controller.BaseController; import com.maibu.core.domain.AjaxResult; import com.maibu.core.domain.model.LoginUser; import com.maibu.core.enums.DeviceTaskStaus; import com.maibu.core.page.TableDataInfo; import com.maibu.dto.DeviceTaskQueryDTO; import com.maibu.memory.GlobalMemory; import com.maibu.memory.SiteMemory; import com.maibu.service.DeviceTaskService; import com.maibu.utils.SecurityUtils; @RestController @RequestMapping("/iot/deviceTask") public class DeviceTaskController extends BaseController { @Autowired private DeviceTaskService deviceTaskService; @PostMapping("/save") public AjaxResult insertOrUpdate(@RequestBody DevicePlan devicePlan) { LoginUser loginUser = SecurityUtils.getLoginUser(); return AjaxResult.success(deviceTaskService.insertOrUpdate(devicePlan, loginUser)); } @GetMapping("/getAllDeviceTaskByUser") public AjaxResult getAllDeviceTaskByUser(@RequestParam Long userId) { return AjaxResult.success(deviceTaskService.getDeviceTaskByUser(userId)); } @GetMapping("/getSiteDevicePlan") public AjaxResult getSiteDevicePlan(@RequestParam Long siteId, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate startTime, @RequestParam(required = false) @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate endTime, @RequestParam(required = false) String deviceId, @RequestParam(required = false) DeviceTaskStaus taskStaus) { return AjaxResult.success(deviceTaskService.getSiteDevicePlan(siteId, startTime, endTime, deviceId, taskStaus)); } @PostMapping("/getDevicePlan") public AjaxResult getDevicePlan(@RequestBody DeviceTaskQueryDTO dto) { return AjaxResult.success(deviceTaskService.getDeviceTask(dto)); } @GetMapping("/delete") public AjaxResult delete(@RequestParam Long id) { return AjaxResult.success(deviceTaskService.delete(id)); } @GetMapping("/start") public AjaxResult start(@RequestParam Long id) { LoginUser loginUser = SecurityUtils.getLoginUser(); deviceTaskService.start(id, loginUser); return AjaxResult.success(); } @GetMapping("/devicePlanStatistics") public AjaxResult devicePlanStatistics(@RequestParam Long userId) { return AjaxResult.success(deviceTaskService.getDevicePlanStatistics(userId)); } @GetMapping("/devicePlanTaskStatistics") public AjaxResult devicePlanTaskStatistics(@RequestParam Long userId) { return AjaxResult.success(deviceTaskService.getDevicePlanTaskStatistics(userId)); } @GetMapping("/concurrentDeviceRoute") public AjaxResult concurrentDeviceRoute(@RequestParam String deviceId) { return AjaxResult.success(deviceTaskService.concurrentDevicePlanTask(deviceId)); } @GetMapping("/workStatistics") public AjaxResult workStatistics(@RequestParam Long userId) { return AjaxResult.success(deviceTaskService.workStatistics(userId)); } @PostMapping("/deviceTaskPool") public TableDataInfo deviceTaskPool(@RequestBody DeviceTaskQueryDTO dto) { startPostPage(dto.getPageNum(), dto.getPageSize()); return getDataTable(deviceTaskService.deviceTaskPool(dto)); } @PostMapping("/getSiteDeviceTaskHistory") public TableDataInfo getSiteDeviceTaskHistory(@RequestBody DeviceTaskQueryDTO dto) { startPostPage(dto.getPageNum(), dto.getPageSize()); return getDataTable(deviceTaskService.getSiteDeviceTaskHistory(dto)); } @PostMapping("/createDeviceTask") public AjaxResult createDeviceTask(@RequestBody DeviceTaskCommandDTO dto) throws Exception { String deviceId = dto.getDeviceId(); Long siteId = dto.getSiteId(); Long orgId = dto.getOrgId(); if (StringUtils.isEmpty(deviceId)) { return AjaxResult.error("deviceId为空!"); } if (siteId == null) { return AjaxResult.error("siteId为空!"); } if (orgId == null) { return AjaxResult.error("orgId为空!"); } SiteMemory siteMemory = GlobalMemory.getSiteMemory(orgId, siteId); if (siteMemory.hasTask(deviceId)) { return AjaxResult.error("当前设备存在任务!"); } Integer mode = siteMemory.getDeviceControlMode(deviceId); if (mode == null) { return AjaxResult.error("当前设备模式不存在,无法自动任务!"); } if (mode != 2) { String modeStr = switchMode(mode); return AjaxResult.error("当前设备模式:" + modeStr + ",无法自动任务!"); } return AjaxResult.success(deviceTaskService.createDeviceTask(dto, getLoginUser().getUsername())); } @PostMapping("/createRegionDefaultTask") public AjaxResult createRegionDeviceTask(@RequestBody DeviceTaskCommandDTO dto) throws Exception { String deviceId = dto.getDeviceId(); Long siteId = dto.getSiteId(); Long orgId = dto.getOrgId(); Long regionId = dto.getRegionId(); if (StringUtils.isEmpty(deviceId)) { return AjaxResult.error("deviceId为空!"); } if (siteId == null) { return AjaxResult.error("siteId为空!"); } if (orgId == null) { return AjaxResult.error("orgId为空!"); } if (regionId == null) { return AjaxResult.error("regionId为空!"); } SiteMemory siteMemory = GlobalMemory.getSiteMemory(orgId, siteId); if (siteMemory.hasTask(deviceId)) { return AjaxResult.error("当前设备存在任务!"); } Integer mode = siteMemory.getDeviceControlMode(deviceId); if (mode == null) { return AjaxResult.error("当前设备模式不存在,无法自动任务!"); } if (mode != 2) { String modeStr = switchMode(mode); return AjaxResult.error("当前设备模式:" + modeStr + ",无法自动任务!"); } return AjaxResult.success(deviceTaskService.createRegionDeviceTask(dto, getLoginUser().getUsername())); } @PostMapping("/cancelTask") public AjaxResult cancelTask(@RequestBody DeviceTaskCommandDTO dto) throws MqttException { String deviceId = dto.getDeviceId(); if (StringUtils.isEmpty(deviceId) && dto.getTaskId() == null) { return AjaxResult.error("deviceId或taskId为空!"); } return AjaxResult.success(deviceTaskService.cancelTask(dto)); } @PostMapping("/pauseTask") public AjaxResult pauseTask(@RequestBody DeviceTaskCommandDTO dto) throws MqttException { String deviceId = dto.getDeviceId(); if (StringUtils.isEmpty(deviceId) && dto.getTaskId() == null) { return AjaxResult.error("deviceId或taskId为空!"); } return AjaxResult.success(deviceTaskService.pauseTask(dto, getUsername())); } @PostMapping("/recoveryTask") public AjaxResult recoveryTask(@RequestBody DeviceTaskCommandDTO dto) throws InterruptedException, MqttException { String deviceId = dto.getDeviceId(); if (StringUtils.isEmpty(deviceId) && dto.getTaskId() == null) { return AjaxResult.error("deviceId或taskId为空!"); } return AjaxResult.success(deviceTaskService.recoveryTask(dto, getUsername())); } @PostMapping("/backToRestPoint") public AjaxResult backToRestPoint(@RequestBody DeviceTaskCommandDTO dto) throws Exception { String deviceId = dto.getDeviceId(); Long siteId = dto.getSiteId(); Long orgId = dto.getOrgId(); if (StringUtils.isEmpty(deviceId)) { return AjaxResult.error("deviceId为空!"); } if (siteId == null) { return AjaxResult.error("siteId为空!"); } if (orgId == null) { return AjaxResult.error("orgId为空!"); } SiteMemory siteMemory = GlobalMemory.getSiteMemory(orgId, siteId); if (siteMemory.hasTask(deviceId)) { return AjaxResult.error("当前设备存在任务!"); } Integer mode = siteMemory.getDeviceControlMode(deviceId); if (mode == null) { return AjaxResult.error("当前设备模式不存在,无法自动任务!"); } if (mode != 2) { String modeStr = switchMode(mode); return AjaxResult.error("当前设备模式:" + modeStr + ",无法自动任务!"); } return AjaxResult.success(deviceTaskService.backToRestPoint(dto, getLoginUser().getUsername())); } @PostMapping("/createConsecutiveTask") public AjaxResult createConsecutiveTasks(@RequestBody ConsecutiveTaskDTO dto) throws Exception { String deviceId = dto.getDeviceId(); Long siteId = dto.getSiteId(); Long orgId = dto.getOrgId(); if (StringUtils.isEmpty(deviceId)) { return AjaxResult.error("deviceId为空!"); } if (siteId == null) { return AjaxResult.error("siteId为空!"); } if (orgId == null) { return AjaxResult.error("orgId为空!"); } SiteMemory siteMemory = GlobalMemory.getSiteMemory(orgId, siteId); if (siteMemory.hasTask(deviceId)) { return AjaxResult.error("当前设备存在任务!"); } Integer mode = siteMemory.getDeviceControlMode(deviceId); if (mode == null) { return AjaxResult.error("当前设备模式不存在,无法自动任务!"); } if (mode != 2) { String modeStr = switchMode(mode); return AjaxResult.error("当前设备模式:" + modeStr + ",无法自动任务!"); } deviceTaskService.createConsecutiveTasks(dto, getLoginUser().getUsername()); return AjaxResult.success(); } public String switchMode(Integer mode) { String modeStr = ""; switch (mode) { case 0: modeStr = "无控制"; break; case 1: modeStr = "本地遥控"; break; case 2: modeStr = "自动任务"; break; case 3: modeStr = "远程遥控"; break; } return modeStr; } @PostMapping("/cancelConsecutiveTask") public AjaxResult cancelConsecutiveTask(@RequestBody List deviceIds) throws MqttException { deviceTaskService.cancelConsecutiveTask(deviceIds); return AjaxResult.success(); } @PostMapping("/getConsecutiveTask") public TableDataInfo getConsecutiveTask(@RequestBody ConsecutiveTaskQueryDTO dto) { startPage(); List list = deviceTaskService.getRegionConsecutiveTaskRecords(dto); return getDataTable(list); } }