package com.ld.igds.grain.manager; import com.ld.igds.io.RemoteGrainService; import com.ld.igds.io.constant.OrderRespEnum; import com.ld.igds.io.request.CheckGrainRequest; import com.ld.igds.io.response.GrainResponse; import com.ld.igds.models.DepotConf; import com.ld.igds.models.DicSysConf; import com.ld.igds.order.ExeOrderService; import com.ld.igds.order.data.ExeRequest; import lombok.extern.slf4j.Slf4j; import java.util.concurrent.Callable; /** * 为了避免一个分机同时支持多个分机,当分机在被调用时候,创建子任务执行四次 */ @Slf4j public class GrainTask implements Callable { private RemoteGrainService remoteGrainService; private ExeOrderService exeOrderService; private CheckGrainRequest request; private DepotConf depotConf; private DicSysConf sysConf; private Integer index; public RemoteGrainService getRemoteGrainService() { return remoteGrainService; } public CheckGrainRequest getRequest() { return request; } public void setRemoteGrainService(RemoteGrainService remoteGrainService) { this.remoteGrainService = remoteGrainService; } public void setRequest(CheckGrainRequest request) { this.request = request; } public DepotConf getDepotConf() { return depotConf; } public DicSysConf getSysConf() { return sysConf; } public void setDepotConf(DepotConf depotConf) { this.depotConf = depotConf; } public void setSysConf(DicSysConf sysConf) { this.sysConf = sysConf; } public void setIndex(Integer index) { this.index = index; } public GrainTask() { super(); } public ExeOrderService getExeOrderService() { return exeOrderService; } public void setExeOrderService(ExeOrderService exeOrderService) { this.exeOrderService = exeOrderService; } public GrainTask(RemoteGrainService remoteGrainService, ExeOrderService exeOrderService, CheckGrainRequest request, DepotConf depotConf, DicSysConf sysConf, Integer index) { super(); this.remoteGrainService = remoteGrainService; this.exeOrderService = exeOrderService; this.request = request; this.depotConf = depotConf; this.sysConf = sysConf; this.index = index; } @Override public String call() throws Exception { long sleepTime = index * 40 * 1000; Thread.sleep(sleepTime); ExeRequest newExeRequest = new ExeRequest(request); doBatchCheck(newExeRequest); return "SUCCESS"; } private void doBatchCheck(ExeRequest exeRequest) { try { GrainResponse tempResp = remoteGrainService.checkGrain(request); if (OrderRespEnum.ORDER_SUCCESS.getCode().equals(tempResp.getCode())) { exeOrderService.addLogAndCache(exeRequest); } else { String msg = depotConf.getDepotName() + " 粮情命令发送异常:" + tempResp.getMsg(); exeOrderService.addErrorCache(request, msg); } Thread.sleep(1000); } catch (Exception e) { String msg = depotConf.getDepotName() + "粮情请求失败,原因:" + e.getMessage(); log.error("粮情一分机多仓执行失败---------{}", msg); } } }