package com.xiaopeng.operation.task; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.xiaopeng.api.model.operation.XpElectronicFenceArea; import com.xiaopeng.api.model.operation.XpPoint; import com.xiaopeng.operation.service.IXpElectronicFenceAreaService; import com.xiaopeng.operation.service.IXpElectronicFenceService; import com.xiaopeng.operation.service.XpPointService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * 定时任务工具类 */ @Component @Slf4j public class TaskUtil { @Resource private XpPointService xpPointService; @Resource private IXpElectronicFenceAreaService xpElectronicFenceAreaService; @Resource private IXpElectronicFenceService xpElectronicFenceService; // 每隔1分钟执行一次 如果运营区域不处于启用状态 将关联的点位状态修改为已失效 @Scheduled(fixedRate = 60 * 1000) public void checkPointInFenceArea() { List electronicFenceAreaList = xpElectronicFenceAreaService.lambdaQuery().eq(XpElectronicFenceArea::getAreaStatus, 2) .list(); if (!electronicFenceAreaList.isEmpty()){ List areaIds = electronicFenceAreaList.stream().map(XpElectronicFenceArea::getId) .collect(Collectors.toList()); if (!areaIds.isEmpty()){ List xpPoints = xpPointService.lambdaQuery() .in(XpPoint::getElectronicAreaId, areaIds) .list(); for (XpPoint xpPoint : xpPoints) { xpPoint.setElectronicAreaId(null); xpPoint.setOperationStatus(4); } xpPointService.updateBatchById(xpPoints); } } } // 每隔1分钟执行一次 如果电子围栏失效,所属点位和运营区域都要改成失效 @Scheduled(fixedRate = 60 * 1000) public void checkFenceAreaStatus() { List electronicFenceAreaList = xpElectronicFenceAreaService.lambdaQuery().eq(XpElectronicFenceArea::getAreaStatus, 2) .list(); if (!electronicFenceAreaList.isEmpty()){ List areaIds = electronicFenceAreaList.stream().map(XpElectronicFenceArea::getId) .collect(Collectors.toList()); if (!areaIds.isEmpty()){ List xpPoints = xpPointService.lambdaQuery() .in(XpPoint::getElectronicAreaId, areaIds) .list(); for (XpPoint xpPoint : xpPoints) { xpPoint.setElectronicAreaId(null); xpPoint.setOperationStatus(4); } xpPointService.updateBatchById(xpPoints); } } } }