package cn.cihi.manager;
import java.util.UUID;
import java.util.concurrent.LinkedBlockingQueue;
import com.cihi.service.appealservice.Result;
import cn.cihi.dao.AppealData;
import cn.cihi.entity.AppealEntity;
import cn.cihi.entity.CommentEntity;
import cn.cihi.service.AppealServiceClient;
public class TaskManager {
private static TaskManager workThread = new TaskManager();
/**
* 添加诉求线程
*/
private Thread consumeThread;
private boolean stopped = false;
private LinkedBlockingQueue<TaskEntity> linkedBlockingQueue = new LinkedBlockingQueue<TaskEntity>(
9999);
/**
* 诉求数据库访问类
*/
private AppealData appealData = new AppealData();
private TaskManager() {
}
public static TaskManager getInstance() {
return workThread;
}
public void addTask(TaskEntity task) {
if (consumeThread == null) {
stopped = false;
consumeThread = new Thread(new ConsumeOpertion());
consumeThread.start();
}
linkedBlockingQueue.offer(task);
}
private class ConsumeOpertion implements Runnable {
@Override
public void run() {
while (!stopped) {
TaskEntity task = null;
try {
task = linkedBlockingQueue.take();
Result result = null;
if (task.getTaskType() == 1) {
AppealEntity appeal = (AppealEntity) task;
result = AppealServiceClient
.getInstance()
.createAppeal(appeal.getHino(),
appeal.getType(), appeal.getDuration(),
appeal.getContent(),
appeal.getLocationx(),
appeal.getLocationy(), appeal.getUrls(),appeal.getTopticid(),appeal.getTopticname(),appeal.getAppealType());
if (result == null || !result.success) {
appeal.setAppealId(UUID.randomUUID().toString());
appeal.setState(0);
System.out.println("添加外部appeal未成功");
} else {
String appealId = result.getReturnValue().get("appealid");
if(appeal.isTiming()){
appealData.updateAppealState(appeal.getAppealId(),appealId, 1);
continue;
}else{
appeal.setAppealId(appealId);
appeal.setState(1);
}
}
System.out.println("result:"+result);
// 添加到本地数据库
appealData.addAppeal(appeal);
} else if (task.getTaskType() == 2) {
CommentEntity comment = (CommentEntity) task;
result = AppealServiceClient.getInstance().addComment(
comment);
}
} catch (Exception e) {
e.printStackTrace();
linkedBlockingQueue.add(task);
stopped = true;
consumeThread = null;
}
}
}
}
}