package com.ruoyi.device.service.impl;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ruoyi.common.utils.StringUtils;
|
import com.ruoyi.common.utils.bean.BeanUtils;
|
import com.ruoyi.device.mapper.DeviceAreaMapper;
|
import com.ruoyi.device.mapper.MaintenanceTaskMapper;
|
import com.ruoyi.device.pojo.DeviceArea;
|
import com.ruoyi.device.pojo.DeviceLedger;
|
import com.ruoyi.device.pojo.MaintenanceTask;
|
import com.ruoyi.device.service.IDeviceLedgerService;
|
import com.ruoyi.device.service.MaintenanceTaskService;
|
import com.ruoyi.framework.web.domain.AjaxResult;
|
import com.ruoyi.inspectiontask.pojo.TimingTask;
|
import com.ruoyi.inspectiontask.service.impl.TimingTaskServiceImpl;
|
import com.ruoyi.project.system.domain.SysUser;
|
import com.ruoyi.project.system.mapper.SysUserMapper;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.time.LocalDateTime;
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.HashMap;
|
import java.util.HashSet;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Set;
|
import java.util.stream.Collectors;
|
|
@Service
|
@Slf4j
|
public class MaintenanceTaskServiceImpl extends ServiceImpl<MaintenanceTaskMapper, MaintenanceTask> implements MaintenanceTaskService {
|
|
@Autowired
|
private MaintenanceTaskMapper maintenanceTaskMapper;
|
@Autowired
|
private SysUserMapper sysUserMapper;
|
@Autowired
|
private TimingTaskServiceImpl timingTaskService;
|
@Autowired
|
private MaintenanceTaskScheduler maintenanceTaskScheduler;
|
@Autowired
|
private IDeviceLedgerService deviceLedgerService;
|
@Autowired
|
private DeviceAreaMapper deviceAreaMapper;
|
|
@Override
|
public AjaxResult listPage(Page page, MaintenanceTask maintenanceTask) {
|
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<MaintenanceTask> queryWrapper =
|
new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<>();
|
if (StringUtils.isNotEmpty(maintenanceTask.getTaskName())) {
|
queryWrapper.like(MaintenanceTask::getTaskName, maintenanceTask.getTaskName());
|
}
|
if (maintenanceTask.getAreaId() != null) {
|
queryWrapper.eq(MaintenanceTask::getAreaId, maintenanceTask.getAreaId());
|
}
|
Page<MaintenanceTask> taskPage = maintenanceTaskMapper.selectPage(page, queryWrapper);
|
if (taskPage.getRecords().isEmpty()) {
|
return AjaxResult.success(taskPage);
|
}
|
|
Set<Long> userIds = new HashSet<>();
|
taskPage.getRecords().forEach(task -> {
|
if (task.getRegistrantId() != null) {
|
userIds.add(task.getRegistrantId());
|
}
|
});
|
|
Map<Long, String> userNickNameMap = new HashMap<>();
|
if (!userIds.isEmpty()) {
|
List<SysUser> users = sysUserMapper.selectUserByIds(new ArrayList<>(userIds));
|
users.forEach(user -> userNickNameMap.put(user.getUserId(), user.getNickName()));
|
}
|
Map<Long, String> areaNameMap = deviceAreaMapper.selectBatchIds(taskPage.getRecords().stream()
|
.map(MaintenanceTask::getAreaId)
|
.filter(java.util.Objects::nonNull)
|
.distinct()
|
.collect(Collectors.toList()))
|
.stream()
|
.collect(Collectors.toMap(DeviceArea::getId, DeviceArea::getAreaName, (left, right) -> left, HashMap::new));
|
taskPage.getRecords().forEach(task -> {
|
if (task.getRegistrantId() != null) {
|
task.setRegistrant(userNickNameMap.getOrDefault(task.getRegistrantId(), "未知用户"));
|
}
|
task.setAreaName(areaNameMap.get(task.getAreaId()));
|
});
|
return AjaxResult.success(taskPage);
|
}
|
|
@Override
|
public AjaxResult add(MaintenanceTask maintenanceTask) {
|
if (!prepareMaintenanceTask(maintenanceTask)) {
|
return AjaxResult.error("请选择设备");
|
}
|
maintenanceTask.setActive(true);
|
TimingTask task = new TimingTask();
|
task.setFrequencyType(maintenanceTask.getFrequencyType());
|
task.setFrequencyDetail(maintenanceTask.getFrequencyDetail());
|
LocalDateTime firstExecutionTime = timingTaskService.calculateFirstExecutionTime(task);
|
maintenanceTask.setNextExecutionTime(firstExecutionTime);
|
int insert = maintenanceTaskMapper.insert(maintenanceTask);
|
if (insert > 0) {
|
maintenanceTaskScheduler.scheduleMaintenanceTask(maintenanceTask);
|
}
|
return AjaxResult.success("添加成功");
|
}
|
|
@Override
|
public AjaxResult updateByMaintenanceTaskId(MaintenanceTask maintenanceTask) {
|
MaintenanceTask maintenanceTask1 = maintenanceTaskMapper.selectById(maintenanceTask.getId());
|
if (maintenanceTask1 == null) {
|
return AjaxResult.warn("没有此数据");
|
}
|
BeanUtils.copyProperties(maintenanceTask, maintenanceTask1);
|
if (!prepareMaintenanceTask(maintenanceTask1)) {
|
return AjaxResult.error("请选择设备");
|
}
|
maintenanceTask1.setDeviceLedgerIds(null);
|
int update = maintenanceTaskMapper.updateById(maintenanceTask1);
|
if (update > 0) {
|
maintenanceTaskScheduler.rescheduleMaintenanceTask(maintenanceTask1);
|
}
|
return AjaxResult.success("更新成功");
|
}
|
|
@Override
|
public AjaxResult delete(List<Long> ids) {
|
int delete = maintenanceTaskMapper.deleteBatchIds(ids);
|
if (delete > 0) {
|
ids.forEach(id -> maintenanceTaskScheduler.unscheduleMaintenanceTask(id));
|
}
|
return AjaxResult.success("删除成功");
|
}
|
|
private boolean prepareMaintenanceTask(MaintenanceTask task) {
|
Long[] deviceIds = task.getDeviceLedgerIds();
|
if ((deviceIds == null || deviceIds.length == 0) && StringUtils.isNotEmpty(task.getDeviceLedgerIdsStr())) {
|
deviceIds = Arrays.stream(task.getDeviceLedgerIdsStr().split(","))
|
.filter(StringUtils::isNotEmpty)
|
.map(Long::valueOf)
|
.toArray(Long[]::new);
|
}
|
if (deviceIds == null || deviceIds.length == 0) {
|
deviceIds = task.getTaskId() == null ? new Long[0] : new Long[]{task.getTaskId()};
|
}
|
List<Long> validIds = Arrays.stream(deviceIds).distinct().collect(Collectors.toList());
|
if (validIds.isEmpty()) {
|
return false;
|
}
|
List<DeviceLedger> devices = validIds.stream()
|
.map(deviceLedgerService::getById)
|
.filter(device -> device != null)
|
.collect(Collectors.toList());
|
if (devices.isEmpty()) {
|
return false;
|
}
|
task.setTaskId(devices.get(0).getId());
|
if (task.getAreaId() == null) {
|
task.setAreaId(devices.get(0).getAreaId());
|
}
|
task.setDeviceLedgerIdsStr(devices.stream().map(item -> String.valueOf(item.getId())).collect(Collectors.joining(",")));
|
task.setTaskName(devices.stream().map(DeviceLedger::getDeviceName).filter(StringUtils::isNotEmpty).distinct().collect(Collectors.joining(",")));
|
task.setDeviceModel(devices.stream().map(DeviceLedger::getDeviceModel).filter(StringUtils::isNotEmpty).distinct().collect(Collectors.joining(",")));
|
return true;
|
}
|
}
|