| | |
| | | import com.zy.core.model.param.SendDualCrnCommandParam; |
| | | import com.zy.core.model.protocol.DualCrnProtocol; |
| | | import com.zy.core.model.protocol.StationProtocol; |
| | | import com.zy.core.task.MainProcessLane; |
| | | import com.zy.core.task.MainProcessTaskSubmitter; |
| | | import com.zy.core.thread.DualCrnThread; |
| | | import com.zy.core.thread.StationThread; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | private WrkAnalysisService wrkAnalysisService; |
| | | @Autowired |
| | | private StationCommandDispatcher stationCommandDispatcher; |
| | | @Autowired |
| | | private MainProcessTaskSubmitter mainProcessTaskSubmitter; |
| | | |
| | | private static final String CRN_OUT_REQUIRE_STATION_OUT_ENABLE_CONFIG = "crnOutRequireStationOutEnable"; |
| | | |
| | |
| | | public synchronized void dualCrnIoExecute() { |
| | | List<BasDualCrnp> basDualCrnps = basDualCrnpService.list(new QueryWrapper<>()); |
| | | for (BasDualCrnp basDualCrnp : basDualCrnps) { |
| | | dualCrnIoExecute(basDualCrnp); |
| | | } |
| | | } |
| | | |
| | | public void dualCrnIoExecute(BasDualCrnp basDualCrnp) { |
| | | DualCrnThread dualCrnThread = (DualCrnThread) SlaveConnection.get(SlaveType.DualCrn, basDualCrnp.getCrnNo()); |
| | | if(dualCrnThread == null){ |
| | | continue; |
| | | return; |
| | | } |
| | | |
| | | DualCrnProtocol dualCrnProtocol = dualCrnThread.getStatus(); |
| | | if(dualCrnProtocol == null){ |
| | | continue; |
| | | return; |
| | | } |
| | | |
| | | List<WrkMast> wrkMasts = wrkMastService.list(new QueryWrapper<WrkMast>() |
| | |
| | | .in("wrk_sts", WrkStsType.INBOUND_RUN.sts, WrkStsType.OUTBOUND_RUN.sts, WrkStsType.LOC_MOVE_RUN.sts) |
| | | ); |
| | | if(wrkMasts.size() >= 2){ |
| | | continue; |
| | | return; |
| | | } |
| | | |
| | | if(dualCrnProtocol.getMode() != DualCrnModeType.AUTO.id) { |
| | | continue; |
| | | return; |
| | | } |
| | | |
| | | if(dualCrnProtocol.getAlarm() != 0) { |
| | | continue; |
| | | return; |
| | | } |
| | | |
| | | if(dualCrnProtocol.getTaskSend() != 0 || dualCrnProtocol.getTaskSendTwo() != 0) { |
| | | continue; |
| | | return; |
| | | } |
| | | |
| | | this.crnExecute(basDualCrnp, dualCrnThread); |
| | | } |
| | | } |
| | | |
| | | private synchronized void crnExecute(BasDualCrnp basDualCrnp, DualCrnThread dualCrnThread) { |
| | |
| | | public synchronized void dualCrnIoExecuteFinish() { |
| | | List<BasDualCrnp> basDualCrnps = basDualCrnpService.list(new QueryWrapper<>()); |
| | | for (BasDualCrnp basDualCrnp : basDualCrnps) { |
| | | dualCrnIoExecuteFinish(basDualCrnp); |
| | | } |
| | | } |
| | | |
| | | public void dualCrnIoExecuteFinish(BasDualCrnp basDualCrnp) { |
| | | DualCrnThread dualCrnThread = (DualCrnThread) SlaveConnection.get(SlaveType.DualCrn, basDualCrnp.getCrnNo()); |
| | | if(dualCrnThread == null){ |
| | | continue; |
| | | return; |
| | | } |
| | | |
| | | DualCrnProtocol dualCrnProtocol = dualCrnThread.getStatus(); |
| | | if(dualCrnProtocol == null){ |
| | | continue; |
| | | return; |
| | | } |
| | | |
| | | if(dualCrnProtocol.getMode() != DualCrnModeType.AUTO.id) { |
| | | continue; |
| | | return; |
| | | } |
| | | |
| | | if(dualCrnProtocol.getAlarm() != 0) { |
| | | continue; |
| | | return; |
| | | } |
| | | |
| | | if((dualCrnProtocol.getTaskNo() > 0 && dualCrnProtocol.getDeviceTaskNo() > 0) && dualCrnProtocol.getTaskSend() == 0 && dualCrnProtocol.getStatus().equals(DualCrnStatusType.WAITING.id)) { |
| | | executeFinish(basDualCrnp, dualCrnThread, dualCrnProtocol, dualCrnProtocol.getTaskNo(), 1); |
| | | continue; |
| | | return; |
| | | } |
| | | |
| | | if((dualCrnProtocol.getTaskNoTwo() > 0 && dualCrnProtocol.getDeviceTaskNoTwo() > 0) && dualCrnProtocol.getTaskSendTwo() == 0 && dualCrnProtocol.getStatusTwo().equals(DualCrnStatusType.WAITING.id)) { |
| | | executeFinish(basDualCrnp, dualCrnThread, dualCrnProtocol, dualCrnProtocol.getTaskNoTwo(), 2); |
| | | } |
| | | } |
| | | |
| | | public void submitDualCrnIoTasks(long minIntervalMs) { |
| | | submitDualCrnIoTasks(MainProcessLane.DUAL_CRN_IO, minIntervalMs); |
| | | } |
| | | |
| | | public void submitDualCrnIoTasks(MainProcessLane lane, long minIntervalMs) { |
| | | List<BasDualCrnp> basDualCrnps = basDualCrnpService.list(new QueryWrapper<>()); |
| | | for (BasDualCrnp basDualCrnp : basDualCrnps) { |
| | | Integer crnNo = basDualCrnp == null ? null : basDualCrnp.getCrnNo(); |
| | | if (crnNo == null) { |
| | | continue; |
| | | } |
| | | mainProcessTaskSubmitter.submitKeyedSerialTask( |
| | | lane, |
| | | crnNo, |
| | | "dualCrnIoExecute", |
| | | minIntervalMs, |
| | | () -> dualCrnIoExecute(basDualCrnp) |
| | | ); |
| | | } |
| | | } |
| | | |
| | | public void submitDualCrnIoExecuteFinishTasks(long minIntervalMs) { |
| | | submitDualCrnIoExecuteFinishTasks(MainProcessLane.DUAL_CRN_IO_FINISH, minIntervalMs); |
| | | } |
| | | |
| | | public void submitDualCrnIoExecuteFinishTasks(MainProcessLane lane, long minIntervalMs) { |
| | | List<BasDualCrnp> basDualCrnps = basDualCrnpService.list(new QueryWrapper<>()); |
| | | for (BasDualCrnp basDualCrnp : basDualCrnps) { |
| | | Integer crnNo = basDualCrnp == null ? null : basDualCrnp.getCrnNo(); |
| | | if (crnNo == null) { |
| | | continue; |
| | | } |
| | | mainProcessTaskSubmitter.submitKeyedSerialTask( |
| | | lane, |
| | | crnNo, |
| | | "dualCrnIoExecuteFinish", |
| | | minIntervalMs, |
| | | () -> dualCrnIoExecuteFinish(basDualCrnp) |
| | | ); |
| | | } |
| | | } |
| | | |