Files
MiddlePlatform/maibu-netty-server/src/main/java/com/maibu/controller/DeviceTaskController.java
2026-11-10 16:40:15 +08:00

291 lines
12 KiB
Java

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<String> deviceIds) throws MqttException {
deviceTaskService.cancelConsecutiveTask(deviceIds);
return AjaxResult.success();
}
@PostMapping("/getConsecutiveTask")
public TableDataInfo getConsecutiveTask(@RequestBody ConsecutiveTaskQueryDTO dto) {
startPage();
List<RegionConsecutiveTaskRecord> list = deviceTaskService.getRegionConsecutiveTaskRecords(dto);
return getDataTable(list);
}
}