package com.zy.asrs.task;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.zy.asrs.entity.BasStation;
|
import com.zy.asrs.entity.WrkMast;
|
import com.zy.asrs.service.BasStationService;
|
import com.zy.asrs.service.WrkAnalysisService;
|
import com.zy.asrs.service.WrkMastService;
|
import com.zy.core.cache.SlaveConnection;
|
import com.zy.core.enums.SlaveType;
|
import com.zy.core.enums.StationCommandType;
|
import com.zy.core.enums.WrkStsType;
|
import com.zy.core.model.CommandResponse;
|
import com.zy.core.model.command.StationCommand;
|
import com.zy.core.model.protocol.StationProtocol;
|
import com.zy.core.thread.StationThread;
|
import com.zy.core.utils.StationOperateProcessUtils;
|
import org.junit.jupiter.api.Test;
|
|
import java.util.Collections;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.when;
|
|
class WrkAnalysisStationArrivalScannerTest {
|
|
@Test
|
void scanInboundStationArrival_completesTaskWhenRecentArrivalWasObserved() {
|
WrkMastService wrkMastService = mock(WrkMastService.class);
|
BasStationService basStationService = mock(BasStationService.class);
|
WrkAnalysisService wrkAnalysisService = mock(WrkAnalysisService.class);
|
StationOperateProcessUtils stationOperateProcessUtils = mock(StationOperateProcessUtils.class);
|
|
WrkAnalysisStationArrivalScanner scanner = new WrkAnalysisStationArrivalScanner(
|
wrkMastService,
|
basStationService,
|
wrkAnalysisService,
|
stationOperateProcessUtils
|
);
|
|
WrkMast wrkMast = new WrkMast();
|
wrkMast.setWrkNo(1001);
|
wrkMast.setIoType(1);
|
wrkMast.setWrkSts(WrkStsType.INBOUND_STATION_RUN.sts);
|
wrkMast.setStaNo(12);
|
|
BasStation basStation = new BasStation();
|
basStation.setStationId(12);
|
basStation.setDeviceNo(3);
|
|
when(wrkMastService.list(any(QueryWrapper.class))).thenReturn(List.of(wrkMast));
|
when(basStationService.getOne(any())).thenReturn(basStation);
|
when(wrkAnalysisService.completeInboundStationRun(any(WrkMast.class), any(Date.class))).thenReturn(true);
|
|
ArrivalAwareStationThread stationThread = new ArrivalAwareStationThread(true);
|
StationProtocol stationProtocol = new StationProtocol();
|
stationProtocol.setStationId(12);
|
stationProtocol.setTaskNo(0);
|
stationProtocol.setLoading(false);
|
stationThread.putStatus(stationProtocol);
|
|
SlaveConnection.put(SlaveType.Devp, 3, stationThread);
|
try {
|
scanner.scanInboundStationArrival();
|
} finally {
|
SlaveConnection.remove(SlaveType.Devp, 3);
|
}
|
|
verify(wrkAnalysisService).completeInboundStationRun(any(WrkMast.class), any(Date.class));
|
}
|
|
private static class ArrivalAwareStationThread implements StationThread {
|
|
private final boolean recentArrival;
|
private final Map<Integer, StationProtocol> statusMap = new HashMap<>();
|
|
private ArrivalAwareStationThread(boolean recentArrival) {
|
this.recentArrival = recentArrival;
|
}
|
|
private void putStatus(StationProtocol stationProtocol) {
|
statusMap.put(stationProtocol.getStationId(), stationProtocol);
|
}
|
|
@Override
|
public List<StationProtocol> getStatus() {
|
return Collections.emptyList();
|
}
|
|
@Override
|
public Map<Integer, StationProtocol> getStatusMap() {
|
return statusMap;
|
}
|
|
public boolean hasRecentArrival(Integer stationId, Integer taskNo) {
|
return recentArrival;
|
}
|
|
@Override
|
public StationCommand getCommand(StationCommandType commandType, Integer taskNo, Integer stationId, Integer targetStationId, Integer palletSize) {
|
return null;
|
}
|
|
@Override
|
public boolean clearPath(Integer taskNo) {
|
return false;
|
}
|
|
@Override
|
public CommandResponse sendCommand(StationCommand command) {
|
return null;
|
}
|
|
@Override
|
public CommandResponse sendOriginCommand(String address, short[] data) {
|
return null;
|
}
|
|
@Override
|
public byte[] readOriginCommand(String address, int length) {
|
return new byte[0];
|
}
|
|
@Override
|
public void run() {
|
}
|
|
@Override
|
public boolean connect() {
|
return true;
|
}
|
|
@Override
|
public void close() {
|
}
|
}
|
}
|