package com.zy.acs.manager.manager.service.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.zy.acs.framework.common.Cools;
|
import com.zy.acs.manager.core.domain.TaskPosDto;
|
import com.zy.acs.manager.manager.entity.*;
|
import com.zy.acs.manager.manager.enums.SegmentStateType;
|
import com.zy.acs.manager.manager.enums.StaTypeType;
|
import com.zy.acs.manager.manager.enums.StatusType;
|
import com.zy.acs.manager.manager.enums.TravelStateType;
|
import com.zy.acs.manager.manager.mapper.StaMapper;
|
import com.zy.acs.manager.manager.service.*;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
@Service("staService")
|
public class StaServiceImpl extends ServiceImpl<StaMapper, Sta> implements StaService {
|
|
@Autowired
|
private AgvService agvService;
|
@Autowired
|
private AgvDetailService agvDetailService;
|
@Autowired
|
private SegmentService segmentService;
|
@Autowired
|
private TravelService travelService;
|
|
@Override
|
public Sta selectByStaNo(String staNo) {
|
return this.getOne(new LambdaQueryWrapper<Sta>()
|
.eq(Sta::getStaNo, staNo).eq(Sta::getStatus, StatusType.ENABLE.val));
|
}
|
|
@Override
|
public Sta selectByCode(Long codeId, StaTypeType type) {
|
if (Cools.isEmpty(codeId, type)) {
|
return null;
|
}
|
List<Sta> list = this.list(new LambdaQueryWrapper<Sta>()
|
.eq(Sta::getCode, codeId).eq(Sta::getStaType, type.val()).eq(Sta::getStatus, StatusType.ENABLE.val));
|
return list.stream().findFirst().orElse(null);
|
}
|
|
@Override
|
public List<Sta> queryAvailableOutSta(Integer minAvailableQty) {
|
return this.baseMapper.selectAvailableOutSta(minAvailableQty);
|
}
|
|
@Override
|
public List<Sta> queryAvailableInSta(Integer minAvailableQty) {
|
return this.baseMapper.selectAvailableInSta(minAvailableQty);
|
}
|
|
@Override
|
public boolean isRoller(Long staId) {
|
if (staId == null) {
|
return false;
|
}
|
Sta sta = this.getById(staId);
|
if (sta == null || Cools.isEmpty(sta.getStaType())) {
|
return false;
|
}
|
return StaTypeType.ROLLER.val() == sta.getStaType();
|
}
|
|
@Override
|
public Boolean hasWorkingAgv(Long staId) {
|
Sta sta = this.getById(staId);
|
Long codeId = sta.getCode();
|
if (null == codeId) {
|
return false;
|
}
|
|
List<Long> agvIds = agvService.list(new LambdaQueryWrapper<Agv>()
|
.select(Agv::getId)
|
.eq(Agv::getStatus, StatusType.ENABLE.val))
|
.stream().map(Agv::getId).collect(Collectors.toList());
|
if (Cools.isEmpty(agvIds)) {
|
return false;
|
}
|
for (Long agvId : agvIds) {
|
Code currentCode = agvDetailService.getCurrentCode(agvId);
|
if (null == currentCode) { continue; }
|
|
if (!currentCode.getId().equals(codeId)) {
|
continue;
|
}
|
|
// if hit return true
|
Segment lastSeg = segmentService.getOne(new LambdaQueryWrapper<Segment>()
|
.eq(Segment::getAgvId, agvId).eq(Segment::getEndNode, codeId)
|
.orderByDesc(Segment::getId).last("LIMIT 1"));
|
if (null == lastSeg) {
|
return false;
|
// continue;
|
}
|
Travel travel = travelService.getById(lastSeg.getTravelId());
|
if (travel.getState().equals(TravelStateType.FINISH.toString())) {
|
return false;
|
}
|
// running travel
|
List<Segment> segments = segmentService.list(new LambdaQueryWrapper<Segment>()
|
.eq(Segment::getTravelId, travel.getId()));
|
for (Segment segment : segments) {
|
if (segment.getEndNode().equals(codeId)
|
&& segment.getState().equals(SegmentStateType.RUNNING.toString())
|
&& (segment.getPosType().equals(TaskPosDto.PosType.ORI_STA.toString())
|
|| segment.getPosType().equals(TaskPosDto.PosType.DEST_STA.toString()))
|
) {
|
return true;
|
}
|
}
|
}
|
|
return false;
|
}
|
|
}
|