package com.yaochen.boss.job;
import java.util.List;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.yaochen.boss.job.component.TaskComponent;
import com.yaochen.myquartz.Job2;
import com.yaochen.myquartz.Job2ExecutionContext;
import com.ycsoft.beans.task.WTaskLog;
import com.ycsoft.boss.remoting.cfocn.CFOCN_WebSvc_WorkOrderStub.ResultHead;
import com.ycsoft.boss.remoting.cfocn.WordOrderException;
import com.ycsoft.boss.remoting.cfocn.WorkOrderClient;
import com.ycsoft.boss.remoting.ott.Result;
import com.ycsoft.commons.constants.BusiCodeConstants;
import com.ycsoft.commons.constants.SystemConstants;
/**
* 发送工单创建信息
* @author panyb
*/
@Service
public class TaskServiceJob implements Job2 {
private static final long serialVersionUID = -5000336520239971955L;
private final Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private TaskComponent taskComponent;
@Autowired
private WorkOrderClient workOrderClient;
@Override
public void execute(Job2ExecutionContext context)
throws JobExecutionException {
//WorkOrderClient client = workOrderClient;
List<WTaskLog> taskLogList = null;
//施工队
String cfonTeamId =null;
try{
taskLogList = taskComponent.querySynTaskLog();
if(taskLogList.size()>0){
cfonTeamId=taskComponent.getTeamId(SystemConstants.TEAM_TYPE_CFOCN);
}
}catch(Exception e){
e.printStackTrace();
logger.error("读取工单同步信息错误"+e.getMessage());
return;
}
for (WTaskLog taskLog:taskLogList){
Result result = new Result();
/**JsonObject params =null;
if (StringHelper.isNotEmpty(taskLog.getLog_detail()))
params = new JsonParser().parse(taskLog.getLog_detail()).getAsJsonObject();
**/
try{
if (taskLog.getBusi_code().equals(BusiCodeConstants.TASK_Withdraw)){
//撤回工单
taskComponent.cancelTaskService(workOrderClient,taskLog.getTask_id(),taskLog.getDone_code());
} else if (taskLog.getBusi_code().equals(BusiCodeConstants.TASK_ASSIGN)){
taskComponent.sendNewWorkOrder(workOrderClient,taskLog.getTask_id(),cfonTeamId);
}else {
result.setStatus(Result.BOSS_ERROR_STATUS);
result.setReason("未定义的同步类型");
}
if(result.getStatus()==null){
result.setErr("0");
result.setReason("成功");
}
} catch (WordOrderException e){
ResultHead rh =e.getResult();
if (rh == null){
//系统异常
result.setErr(Result.UNDEFINED_ERROR_STATUS);
result.setReason(e.getMessage());
logger.error("未知严重错误,暂停发送!",e);
} else {
result.setErr(rh.getHeadCode());
result.setReason(rh.getHeadMsg());
}
}catch(Exception e){
result.setErr(Result.UNDEFINED_ERROR_STATUS);
result.setReason(e.getMessage());
logger.error("未知严重错误,暂停发送!",e);
}
//保存发送结果
try{
taskComponent.saveTaskSynResult(taskLog, result);
} catch(Exception e){
e.printStackTrace();
logger.error("保存工单同步结果失败",e);
return;
}
//网络错误或系统未知错误额外休眠5秒
if (!result.isSuccess()&&(result.isConnectionError()||result.isUndefinedError())){
try {
Thread.sleep(1000*5);
} catch (Exception e) {
logger.error("网络错误和未知错误休眠失败",e);
}
}
}
}
/**
private String getJsonValue(JsonObject jo,String key){
return jo.get(key).isJsonNull()?null:jo.get(key).getAsString();
}**/
}