package cn.gistack.sm.xxljob.jobhandler;
|
|
import cn.gistack.sm.intelligentCall.service.CallService;
|
import cn.gistack.sm.patrol.entity.PatrolTask;
|
import cn.gistack.sm.patrol.service.IPatrolTaskService;
|
import cn.gistack.sm.sjztmd.entity.PatrolResponsiblePerson;
|
import cn.gistack.sm.sjztmd.service.IAttResManagePersonService;
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.xxl.job.core.biz.model.ReturnT;
|
import com.xxl.job.core.handler.IJobHandler;
|
import com.xxl.job.core.handler.annotation.XxlJob;
|
import com.xxl.job.core.log.XxlJobLogger;
|
import com.xxl.job.core.util.ShardingUtil;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springblade.core.tool.utils.DateUtil;
|
import org.springframework.stereotype.Component;
|
|
import java.io.BufferedInputStream;
|
import java.io.BufferedReader;
|
import java.io.InputStreamReader;
|
import java.net.HttpURLConnection;
|
import java.net.URL;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
/**
|
* @PROJECT_NAME: skjcmanager
|
* @DESCRIPTION: 执行器相关
|
* @USER: aix
|
* @DATE: 2023/5/13 14:53
|
*/
|
@Component
|
public class SampleXxlJob {
|
private static final Logger logger = LoggerFactory.getLogger(SampleXxlJob.class);
|
|
private final IPatrolTaskService patrolTaskService;
|
|
private final IAttResManagePersonService attResManagePersonService;
|
|
private final CallService callService;
|
|
public SampleXxlJob(IPatrolTaskService patrolTaskService, IAttResManagePersonService attResManagePersonService, CallService callService) {
|
this.patrolTaskService = patrolTaskService;
|
this.attResManagePersonService = attResManagePersonService;
|
this.callService = callService;
|
}
|
|
/**
|
* 1、简单任务示例(Bean模式)
|
*/
|
@XxlJob("demoJobHandler")
|
public ReturnT<String> demoJobHandler(String param) throws Exception {
|
XxlJobLogger.log("<span style='color:red'>XXL-JOB-BLADE_SM, Hello World.</span>");
|
|
for (int i = 0; i < 5; i++) {
|
XxlJobLogger.log("beat at:" + i);
|
TimeUnit.SECONDS.sleep(2);
|
}
|
return ReturnT.SUCCESS;
|
}
|
|
/**
|
* 智能外呼任务创建定时执行器
|
* @param param
|
* @return
|
* @throws Exception
|
*/
|
@XxlJob("outCallCreateTaskHandle")
|
public ReturnT<String> outCallCreateTaskHandle(String param){
|
XxlJobLogger.log("开始执行任务...");
|
JSONObject jsonParam = JSON.parseObject(param);
|
Map<String, Object> map = new HashMap<>();
|
map.put("isOver",jsonParam.getString("isOver"));
|
map.put("taskScheduleTime",jsonParam.getString("taskScheduleTime"));
|
map.put("personNumber",jsonParam.getString("personNumber"));
|
map.put("day",jsonParam.getString("day"));
|
// 创建外呼任务
|
callService.createCallTaskByParam(map);
|
XxlJobLogger.log("结束自动创建任务...");
|
return ReturnT.SUCCESS;
|
}
|
|
/**
|
* 给巡查责任人定时创建任务执行器
|
* @param param
|
* @return
|
* @throws Exception
|
*/
|
@XxlJob("createTaskJobHandler")
|
public ReturnT<String> createTaskJobHandler(String param) throws Exception {
|
XxlJobLogger.log("开始自动创建任务...");
|
JSONObject jsonParam = JSON.parseObject(param);
|
String processDefinitionId = jsonParam.getString("processDefinitionId");
|
final String taskType = jsonParam.getString("taskType");
|
final String title = jsonParam.getString("title");
|
final String content = jsonParam.getString("content");
|
List<PatrolResponsiblePerson> patrolResponsiblePersonList = attResManagePersonService.getPatrolResponsiblePersonAll();
|
AtomicInteger failureCount = new AtomicInteger();
|
int successCount = 0;
|
patrolResponsiblePersonList.forEach(item -> {
|
XxlJobLogger.log("当前创建任务对象:" + JSON.toJSONString(item));
|
try {
|
PatrolTask patrolTask = new PatrolTask();
|
patrolTask.setProcessDefinitionId(processDefinitionId);
|
patrolTask.setToUserId(item.getUserId());
|
patrolTask.setProjectId(item.getResGuid());
|
patrolTask.setReservoirName(item.getName());
|
patrolTask.setTitle(item.getName() + "-" + title);
|
patrolTask.setContent(DateUtil.format(new Date(),"yyyyMMdd") +content);
|
patrolTask.setTaskType(taskType);
|
// 创建任务
|
patrolTaskService.startProcess(patrolTask);
|
} catch (Exception e) {
|
XxlJobLogger.log("创建任务失败对象:" + JSON.toJSONString(item));
|
failureCount.getAndIncrement();
|
}
|
|
});
|
|
XxlJobLogger.log("结束自动创建任务...");
|
XxlJobLogger.log("总数量:<span style='color:red'>" + patrolResponsiblePersonList.size() + "</span> ... 失败数量:<span style='color:red'>" + failureCount + "</span> ");
|
return ReturnT.SUCCESS;
|
}
|
|
|
/**
|
* 2、分片广播任务
|
*/
|
@XxlJob("shardingJobHandler")
|
public ReturnT<String> shardingJobHandler(String param) throws Exception {
|
|
// 分片参数
|
ShardingUtil.ShardingVO shardingVO = ShardingUtil.getShardingVo();
|
XxlJobLogger.log("分片参数:当前分片序号 = {}, 总分片数 = {}", shardingVO.getIndex(), shardingVO.getTotal());
|
|
// 业务逻辑
|
for (int i = 0; i < shardingVO.getTotal(); i++) {
|
if (i == shardingVO.getIndex()) {
|
XxlJobLogger.log("第 {} 片, 命中分片开始处理", i);
|
} else {
|
XxlJobLogger.log("第 {} 片, 忽略", i);
|
}
|
}
|
|
return ReturnT.SUCCESS;
|
}
|
|
|
/**
|
* 3、命令行任务
|
*/
|
@XxlJob("commandJobHandler")
|
public ReturnT<String> commandJobHandler(String param) throws Exception {
|
String command = param;
|
int exitValue = -1;
|
|
BufferedReader bufferedReader = null;
|
try {
|
// command process
|
Process process = Runtime.getRuntime().exec(command);
|
BufferedInputStream bufferedInputStream = new BufferedInputStream(process.getInputStream());
|
bufferedReader = new BufferedReader(new InputStreamReader(bufferedInputStream));
|
|
// command log
|
String line;
|
while ((line = bufferedReader.readLine()) != null) {
|
XxlJobLogger.log(line);
|
}
|
|
// command exit
|
process.waitFor();
|
exitValue = process.exitValue();
|
} catch (Exception e) {
|
XxlJobLogger.log(e);
|
} finally {
|
if (bufferedReader != null) {
|
bufferedReader.close();
|
}
|
}
|
|
if (exitValue == 0) {
|
return IJobHandler.SUCCESS;
|
} else {
|
return new ReturnT<String>(IJobHandler.FAIL.getCode(), "command exit value(" + exitValue + ") is failed");
|
}
|
}
|
|
|
/**
|
* 4、跨平台Http任务
|
*/
|
@XxlJob("httpJobHandler")
|
public ReturnT<String> httpJobHandler(String param) throws Exception {
|
|
// request
|
HttpURLConnection connection = null;
|
BufferedReader bufferedReader = null;
|
try {
|
// connection
|
URL realUrl = new URL(param);
|
connection = (HttpURLConnection) realUrl.openConnection();
|
|
// connection setting
|
connection.setRequestMethod("GET");
|
connection.setDoOutput(true);
|
connection.setDoInput(true);
|
connection.setUseCaches(false);
|
connection.setReadTimeout(5 * 1000);
|
connection.setConnectTimeout(3 * 1000);
|
connection.setRequestProperty("connection", "Keep-Alive");
|
connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
|
connection.setRequestProperty("Accept-Charset", "application/json;charset=UTF-8");
|
|
// do connection
|
connection.connect();
|
|
//Map<String, List<String>> map = connection.getHeaderFields();
|
|
// valid StatusCode
|
int statusCode = connection.getResponseCode();
|
if (statusCode != 200) {
|
throw new RuntimeException("Http Request StatusCode(" + statusCode + ") Invalid.");
|
}
|
|
// result
|
bufferedReader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
|
StringBuilder result = new StringBuilder();
|
String line;
|
while ((line = bufferedReader.readLine()) != null) {
|
result.append(line);
|
}
|
String responseMsg = result.toString();
|
|
XxlJobLogger.log(responseMsg);
|
return ReturnT.SUCCESS;
|
} catch (Exception e) {
|
XxlJobLogger.log(e);
|
return ReturnT.FAIL;
|
} finally {
|
try {
|
if (bufferedReader != null) {
|
bufferedReader.close();
|
}
|
if (connection != null) {
|
connection.disconnect();
|
}
|
} catch (Exception e2) {
|
XxlJobLogger.log(e2);
|
}
|
}
|
|
}
|
|
/**
|
* 5、生命周期任务示例:任务初始化与销毁时,支持自定义相关逻辑;
|
*/
|
@XxlJob(value = "demoJobHandler2", init = "init", destroy = "destroy")
|
public ReturnT<String> demoJobHandler2(String param) throws Exception {
|
XxlJobLogger.log("XXL-JOB, Hello World.");
|
return ReturnT.SUCCESS;
|
}
|
|
public void init() {
|
logger.info("init");
|
}
|
|
public void destroy() {
|
logger.info("destory");
|
}
|
|
|
}
|