| | |
| | | |
| | | 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 org.springframework.stereotype.Service; |
| | | |
| | | import java.time.LocalDateTime; |
| | | import java.util.*; |
| | | 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; |
| | | |
| | | /** |
| | | * @author :yys |
| | | * @date : 2025/12/22 14:57 |
| | | */ |
| | | @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) { |
| | | Page<MaintenanceTask> taskPage = maintenanceTaskMapper.selectPage(page, null); |
| | | // 2. 如果没有数据,直接返回空分页 |
| | | 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); |
| | | } |
| | | |
| | | // 3. 收集所有需要查询的用户ID |
| | | Set<Long> userIds = new HashSet<>(); |
| | | |
| | | // 收集登记人ID |
| | | taskPage.getRecords().forEach(task -> { |
| | | if (task.getRegistrantId() != null) { |
| | | userIds.add(task.getRegistrantId()); |
| | | } |
| | | }); |
| | | |
| | | // 4. 批量查询用户信息 |
| | | Map<Long, String> userNickNameMap = new HashMap<>(); |
| | | if (!userIds.isEmpty()) { |
| | | List<SysUser> users = sysUserMapper.selectUserByIds((new ArrayList<>(userIds))); |
| | | 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()); |
| | |
| | | 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); |
| | |
| | | public AjaxResult delete(List<Long> ids) { |
| | | int delete = maintenanceTaskMapper.deleteBatchIds(ids); |
| | | if (delete > 0) { |
| | | ids.forEach(id -> { |
| | | maintenanceTaskScheduler.unscheduleMaintenanceTask(id); |
| | | }); |
| | | 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; |
| | | } |
| | | } |