3 changed files with 74 additions and 3 deletions
@ -0,0 +1,72 @@ |
|||||
|
package org.nl.wms.sch_manage.service.util; |
||||
|
|
||||
|
|
||||
|
import cn.hutool.core.util.ObjectUtil; |
||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
|
import lombok.RequiredArgsConstructor; |
||||
|
import lombok.SneakyThrows; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
import org.nl.wms.sch_manage.enums.TaskStatus; |
||||
|
import org.nl.wms.sch_manage.service.ISchBaseTaskService; |
||||
|
import org.nl.wms.sch_manage.service.dao.SchBaseTask; |
||||
|
import org.nl.wms.warehouse_management.enums.IOSConstant; |
||||
|
import org.redisson.api.RLock; |
||||
|
import org.redisson.api.RedissonClient; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.List; |
||||
|
import java.util.concurrent.TimeUnit; |
||||
|
|
||||
|
@Slf4j |
||||
|
@Component |
||||
|
@RequiredArgsConstructor |
||||
|
public class AutoTask { |
||||
|
|
||||
|
/** |
||||
|
* 任务服务 |
||||
|
*/ |
||||
|
@Autowired |
||||
|
private ISchBaseTaskService taskService; |
||||
|
|
||||
|
/** |
||||
|
* 任务工厂服务 |
||||
|
*/ |
||||
|
@Autowired |
||||
|
private TaskFactory taskFactory; |
||||
|
|
||||
|
private final RedissonClient redissonClient; |
||||
|
|
||||
|
@SneakyThrows |
||||
|
public void run() { |
||||
|
RLock lock = redissonClient.getLock(this.getClass().getName()); |
||||
|
boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS); |
||||
|
try { |
||||
|
if (tryLock) { |
||||
|
sendTask(); |
||||
|
} |
||||
|
} catch (Exception e) { |
||||
|
if (tryLock) { |
||||
|
lock.unlock(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 下发任务 |
||||
|
*/ |
||||
|
private void sendTask() { |
||||
|
List<SchBaseTask> taskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>() |
||||
|
.eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO) |
||||
|
.eq(SchBaseTask::getTask_status, TaskStatus.CREATE.getCode())); |
||||
|
if (ObjectUtil.isEmpty(taskList)) { |
||||
|
return; |
||||
|
} |
||||
|
// 整理下发acs参数
|
||||
|
for (SchBaseTask taskDao : taskList) { |
||||
|
AbstractTask task = taskFactory.getTask(taskDao.getConfig_code()); |
||||
|
task.sendTaskOne(taskDao.getTask_id()); |
||||
|
} |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue