| | |
| | | package com.zy.acs.manager.core.cache; |
| | | |
| | | import com.zy.acs.manager.core.domain.CodeStepDto; |
| | | |
| | | import java.util.Map; |
| | | import java.util.concurrent.ConcurrentHashMap; |
| | | |
| | |
| | | |
| | | public static final Map<Long, Integer> AGV_BACKPACK_USED_CACHE = new ConcurrentHashMap<>(); |
| | | |
| | | public static final Map<Long, CodeStepDto> AGV_MOCK_STEP_CACHE = new ConcurrentHashMap<>(); |
| | | |
| | | } |
New file |
| | |
| | | package com.zy.acs.manager.core.domain; |
| | | |
| | | import com.zy.acs.manager.core.domain.type.JobType; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | @Data |
| | | public class CodeStepDto implements Serializable { |
| | | |
| | | private static final long serialVersionUID = 5750534229295043118L; |
| | | |
| | | private String codeData; |
| | | |
| | | private JobType jobType; |
| | | |
| | | public CodeStepDto() { |
| | | } |
| | | |
| | | public CodeStepDto(String codeData, JobType jobType) { |
| | | this.codeData = codeData; |
| | | this.jobType = jobType; |
| | | } |
| | | |
| | | public static CodeStepDto build(String codeData, JobType jobType) { |
| | | return new CodeStepDto(codeData, jobType); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.zy.acs.manager.core.domain.type; |
| | | |
| | | @SuppressWarnings("all") |
| | | public enum JobType { |
| | | |
| | | CONVEYOR_PICK(3000), |
| | | CONVEYOR_DROP(3000), |
| | | LOC_PICK(1500), |
| | | LOCK_DROP(1500), |
| | | ; |
| | | |
| | | public static void main(String[] args) { |
| | | System.out.println(); |
| | | } |
| | | |
| | | public long waitTime; |
| | | |
| | | JobType(long waitTime) { |
| | | this.waitTime = waitTime; |
| | | } |
| | | } |
| | |
| | | action.setStartTime(now); |
| | | action.setIoTime(now); |
| | | action.setUpdateTime(now); |
| | | if (!actionService.updateById(action)) { |
| | | throw new BusinessException(action.getPriority() + " - " + action.getName() + "动作更新失败"); |
| | | } |
| | | } |
| | | if (!actionService.updateBatchById(actionList)) { |
| | | throw new BusinessException("failed to update action batch !!!"); |
| | | } |
| | | |
| | | // task |
| | |
| | | import com.zy.acs.framework.common.Cools; |
| | | import com.zy.acs.framework.common.R; |
| | | import com.zy.acs.manager.core.cache.CoreCache; |
| | | import com.zy.acs.manager.manager.entity.*; |
| | | import com.zy.acs.manager.core.domain.CodeStepDto; |
| | | import com.zy.acs.manager.core.domain.type.JobType; |
| | | import com.zy.acs.manager.manager.entity.Agv; |
| | | import com.zy.acs.manager.manager.entity.AgvDetail; |
| | | import com.zy.acs.manager.manager.entity.Code; |
| | | import com.zy.acs.manager.manager.entity.Travel; |
| | | import com.zy.acs.manager.manager.enums.StatusType; |
| | | import com.zy.acs.manager.manager.enums.TaskTypeType; |
| | | import com.zy.acs.manager.manager.enums.TravelStateType; |
| | |
| | | }}; |
| | | |
| | | private Map<String, JobType> agvJobMap = new ConcurrentHashMap<>(); |
| | | public enum JobType { |
| | | CONVEYOR_PICK, |
| | | CONVEYOR_DROP, |
| | | LOC_PICK, |
| | | LOCK_DROP, |
| | | ; |
| | | } |
| | | |
| | | @Autowired |
| | | private AgvService agvService; |
| | |
| | | |
| | | if (mainLockWrapService.buildMinorTask(agvId, TaskTypeType.MOVE, destinationCodeData, null)) { |
| | | log.info( "{}开始作业演示...", agvNo); |
| | | |
| | | CoreCache.AGV_MOCK_STEP_CACHE.put(agvId, CodeStepDto.build(destinationCodeData, jobType)); |
| | | switch (jobType) { |
| | | case LOC_PICK: |
| | | Integer usedSlotsByLocPick = CoreCache.AGV_BACKPACK_USED_CACHE.get(agvId); |
| | |
| | | if (cancelled) { |
| | | AGV_PATROL_MAP.remove(agvNo); |
| | | CoreCache.AGV_BACKPACK_USED_CACHE.remove(agvId); |
| | | CoreCache.AGV_MOCK_STEP_CACHE.remove(agvId); |
| | | this.agvJobMap.remove(agvNo); |
| | | log.info("已停止AGV " + agvNo + " 的跑库任务。"); |
| | | return R.ok("已停止AGV " + agvNo + " 的跑库任务。"); |
| | |
| | | package com.zy.acs.manager.fake; |
| | | |
| | | import com.zy.acs.common.constant.RedisConstant; |
| | | import com.zy.acs.common.domain.AgvProtocol; |
| | | import com.zy.acs.common.domain.protocol.AGV_11_UP; |
| | | import com.zy.acs.common.enums.AgvCompleteType; |
| | | import com.zy.acs.common.utils.RedisSupport; |
| | | import com.zy.acs.manager.core.cache.CoreCache; |
| | | import com.zy.acs.manager.core.domain.CodeStepDto; |
| | | import com.zy.acs.manager.core.scheduler.MapDataWsScheduler; |
| | | import com.zy.acs.manager.core.service.MainService; |
| | | import com.zy.acs.manager.core.service.MapService; |
| | | import com.zy.acs.manager.manager.entity.Action; |
| | | import com.zy.acs.manager.manager.entity.Agv; |
| | | import com.zy.acs.manager.manager.entity.AgvDetail; |
| | | import com.zy.acs.manager.manager.entity.Code; |
| | | import com.zy.acs.manager.manager.enums.ActionStsType; |
| | | import com.zy.acs.manager.manager.enums.ActionTypeType; |
| | |
| | | } |
| | | |
| | | private void finishActionList(String qrCode) { |
| | | // 1.complete data |
| | | // 1.show effect |
| | | CodeStepDto codeStepDto = CoreCache.AGV_MOCK_STEP_CACHE.get(this.agv.getId()); |
| | | if (null != codeStepDto && qrCode.equals(codeStepDto.getCodeData())) { |
| | | // Code currentCode = agvDetailService.getCurrentCode(this.agv.getId()); |
| | | try { Thread.sleep(codeStepDto.getJobType().waitTime); } catch (InterruptedException ignore) {} |
| | | CoreCache.AGV_MOCK_STEP_CACHE.remove(this.agv.getId()); |
| | | } |
| | | |
| | | // 2.complete data |
| | | AGV_11_UP agv_11_up = new AGV_11_UP(); |
| | | agv_11_up.setSerialNo(groupId); |
| | | agv_11_up.setCompleteCode(AgvCompleteType.ENTIRE_PATH_COMPLETE.getCode()); |
| | |
| | | for (Agv agv : agvList) { |
| | | |
| | | if (!AGV_PROCESSING_MAP.get(agv.getId())) { |
| | | AGV_PROCESSING_MAP.put(agv.getId(), true); |
| | | List<Action> actionList = actionService.queryLatestGroup(agv.getId(), ActionStsType.ISSUED); |
| | | if (!Cools.isEmpty(actionList)) { |
| | | AGV_PROCESSING_MAP.put(agv.getId(), true); |
| | | executorService.submit(new AgvSimulatorTask( |
| | | agv |
| | | , redis |
| | |
| | | , mainService |
| | | , actionList |
| | | )); |
| | | } else { |
| | | AGV_PROCESSING_MAP.put(agv.getId(), false); |
| | | } |
| | | } |
| | | |
| | |
| | | import com.zy.acs.manager.manager.entity.Agv; |
| | | import com.zy.acs.manager.manager.entity.AgvDetail; |
| | | import com.zy.acs.manager.manager.entity.AgvModel; |
| | | import com.zy.acs.manager.manager.entity.Code; |
| | | |
| | | public interface AgvDetailService extends IService<AgvDetail> { |
| | | |
| | |
| | | |
| | | Boolean isPowerLoss(Agv agv, AgvDetail agvDetail, AgvModel agvModel); |
| | | |
| | | Code getCurrentCode(Long agvId); |
| | | |
| | | } |
| | |
| | | import com.zy.acs.manager.manager.entity.Agv; |
| | | import com.zy.acs.manager.manager.entity.AgvDetail; |
| | | import com.zy.acs.manager.manager.entity.AgvModel; |
| | | import com.zy.acs.manager.manager.entity.Code; |
| | | import com.zy.acs.manager.manager.mapper.AgvDetailMapper; |
| | | import com.zy.acs.manager.manager.service.AgvDetailService; |
| | | import com.zy.acs.manager.manager.service.AgvModelService; |
| | | import com.zy.acs.manager.manager.service.AgvService; |
| | | import com.zy.acs.manager.manager.service.CodeService; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | |
| | | private AgvService agvService; |
| | | @Autowired |
| | | private AgvModelService agvModelService; |
| | | @Autowired |
| | | private CodeService codeService; |
| | | |
| | | @Override |
| | | public AgvDetail selectMajorByAgvId(Long agvId) { |
| | |
| | | @Override |
| | | public Boolean isPowerLoss(Agv agv, AgvDetail agvDetail, AgvModel agvModel) { |
| | | if (null == agvDetail) { |
| | | agvDetail = this.selectByAgvId(agv.getId()); |
| | | agvDetail = this.selectMajorByAgvId(agv.getId()); |
| | | } |
| | | if (null == agvModel) { |
| | | agvModel = agvModelService.getByAgvId(agv.getId()); |
| | |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public Code getCurrentCode(Long agvId) { |
| | | AgvDetail agvDetail = this.selectMajorByAgvId(agvId); |
| | | Long recentCode = agvDetail.getRecentCode(); |
| | | if (null == recentCode) { |
| | | return null; |
| | | } |
| | | return codeService.getById(recentCode); |
| | | } |
| | | |
| | | } |