291 lines
12 KiB
Java
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);
|
|
}
|
|
|
|
}
|