| | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.core.common.DateUtils; |
| | | import com.core.exception.CoolException; |
| | | import com.zy.asrs.controller.requestParam.StationRequestParam; |
| | | import com.zy.asrs.controller.vo.OpenBusSubmitParam; |
| | | import com.zy.asrs.controller.vo.StationStatus; |
| | | import com.zy.asrs.controller.vo.TaskDto; |
| | | import com.zy.asrs.entity.Job; |
| | | import com.zy.asrs.enums.WorkNoTypeType; |
| | | import com.zy.asrs.mapper.JobMapper; |
| | |
| | | import org.springframework.transaction.interceptor.TransactionAspectSupport; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | |
| | | @Value("${ctu.station}") |
| | | private String station; |
| | | |
| | | @Value("${ctu.sendTask}") |
| | | private String sendTask; |
| | | |
| | | |
| | | @Autowired |
| | | private SlaveProperties slaveProperties; |
| | |
| | | /** |
| | | * 出库的时候,设备上走 |
| | | */ |
| | | @Transactional |
| | | public synchronized void out(Integer mark) { |
| | | try { |
| | | // 根据输送线plc遍历 |
| | |
| | | continue; |
| | | } |
| | | //&& staProtocol.isOutEnable() |
| | | if (staProtocol.isAutoing() && staProtocol.getWorkNo() == 0 ) { |
| | | if (staProtocol.isAutoing() && staProtocol.getWorkNo() == 0) { |
| | | String seqNum = checkStationStatus(releaseSta.getStaNo()); |
| | | if (seqNum != null) { |
| | | Job jobBySeqNum = jobMapper.getJobBySeqNum(seqNum); |
| | |
| | | // 下发移动 且 下发plc命令 |
| | | staProtocol.setWorkNo(workNo); |
| | | staProtocol.setStaNo(releaseSta.getTargetSta()); |
| | | if (jobMapper.insert(new Job(seqNum, workNo)) == 0) { |
| | | Job job = new Job(); |
| | | job.setSeqNum(seqNum); |
| | | job.setJobNo(workNo); |
| | | job.setJobSts(2); |
| | | if (jobMapper.insert(job) == 0) { |
| | | throw new CoolException("插入输送线任务失败," + jobBySeqNum + " - " + workNo); |
| | | } |
| | | devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | |
| | | /** |
| | | * 从拣料站到入库站(CTU取货站) |
| | | */ |
| | | @Transactional |
| | | public synchronized void fake(Integer mark) { |
| | | try { |
| | | // 根据输送线plc遍历 |
| | |
| | | return; |
| | | } |
| | | if (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing()) { |
| | | Job jobByWorkNo = jobMapper.getJobByWorkNo(staProtocol.getWorkNo()); |
| | | Job jobByWorkNo = jobMapper.getJobByJobNo(staProtocol.getWorkNo()); |
| | | if (jobByWorkNo != null && jobByWorkNo.getJobSts() == 1) { |
| | | staProtocol.setStaNo(1006); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol)); |
| | | if (result) { |
| | | jobByWorkNo.setJobSts(2); |
| | | jobByWorkNo.setJobSts(3); |
| | | jobByWorkNo.setMemo("模拟按按钮"); |
| | | jobMapper.updateById(jobByWorkNo); |
| | | log.info("入库输送线下发:{},{}", staProtocol.getWorkNo(), 1006); |
| | | } |
| | |
| | | return; |
| | | } |
| | | if (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing()) { |
| | | if (checkStationStatus(takeSta.getStaNo()) != null) { |
| | | Job job = jobMapper.getJobByJobNo(staProtocol.getWorkNo()); |
| | | if (job != null && job.getJobSts() >= 5) { |
| | | staProtocol.setWorkNo(0); |
| | | staProtocol.setStaNo(0); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol)); |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | @Transactional |
| | | public synchronized void waitTake(Integer mark) { |
| | | try { |
| | | // 根据输送线plc遍历 |
| | |
| | | if (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing()) { |
| | | StaProtocol targetStaProtocol = devpThread.getStation().get(inSta.getTargetSta()); |
| | | if (targetStaProtocol.getWorkNo() == 0 && targetStaProtocol.isAutoing() && !targetStaProtocol.isLoading()) { |
| | | staProtocol.setWorkNo(staProtocol.getWorkNo()); |
| | | staProtocol.setStaNo(inSta.getTargetSta()); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol)); |
| | | if (result) { |
| | | log.info("" + (mark + LOG_STEP) + "入库前进:{},{}", staProtocol.getWorkNo(), inSta.getTargetSta()); |
| | | Job job = jobMapper.getJobByJobNoAndJobSts(staProtocol.getWorkNo(), 2); |
| | | if (job != null) { |
| | | staProtocol.setWorkNo(staProtocol.getWorkNo()); |
| | | staProtocol.setStaNo(inSta.getTargetSta()); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol)); |
| | | if (result) { |
| | | job.setJobSts(4); |
| | | job.setInTime(new Date()); |
| | | if (jobMapper.updateById(job) == 0) { |
| | | throw new CoolException("更新输送线任务失败," + " - " + staProtocol.getWorkNo()); |
| | | } |
| | | log.info("" + (mark + LOG_STEP) + "入库前进:{},{}", staProtocol.getWorkNo(), inSta.getTargetSta()); |
| | | } |
| | | } else { |
| | | // 模拟操作逻辑 |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | |
| | | @Transactional |
| | | public synchronized void createTake(Integer mark) { |
| | | try { |
| | | // 根据输送线plc遍历 |
| | | for (DevpSlave devp : slaveProperties.getDevp()) { |
| | | // 遍历入库口 |
| | | for (DevpSlave.Sta inSta : devp.getInSta()) { |
| | | // 根据输送线plc遍历 |
| | | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(inSta.getTargetSta()); |
| | | if (staProtocol == null) { |
| | | return; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | | // 判断是否满足条件 |
| | | if (!staProtocol.isLoading()) { |
| | | return; |
| | | } |
| | | if (staProtocol.getWorkNo() > 0 && staProtocol.isAutoing()) { |
| | | Job job = jobMapper.getJobByJobNo(staProtocol.getWorkNo()); |
| | | if (job != null && job.getJobSts() == 4) { |
| | | job.setJobSts(5); |
| | | job.setRcsTime(new Date()); |
| | | jobMapper.updateById(job); |
| | | if (!fakeWms(staProtocol)) { |
| | | throw new CoolException("任务发送给RCS失败," + job.getSeqNum() + " - " + job.getSeqNum()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | } |
| | | } |
| | | |
| | | public boolean fakeWms(StaProtocol staProtocol) { |
| | | OpenBusSubmitParam openBusSubmitParam = new OpenBusSubmitParam(); |
| | | openBusSubmitParam.setBatch(DateUtils.convert(new Date())); |
| | | List<TaskDto> taskList = new ArrayList<>(); |
| | | TaskDto taskDto = new TaskDto(); |
| | | taskDto.setSeqNum("SSX-RK" + staProtocol.getWorkNo()); |
| | | taskDto.setOriSta("1007"); |
| | | taskDto.setPriority(9527); |
| | | taskList.add(taskDto); |
| | | openBusSubmitParam.setTaskList(taskList); |
| | | return sendTask(openBusSubmitParam, staProtocol); |
| | | } |
| | | |
| | | @Transactional |
| | | public boolean sendTask(OpenBusSubmitParam openBusSubmitParam, StaProtocol staProtocol) { |
| | | String response = ""; |
| | | try { |
| | | response = new HttpHandler.Builder() |
| | | .setUri(ctuUrl) |
| | | .setPath(sendTask) |
| | | .setTimeout(1200, TimeUnit.SECONDS) |
| | | .setJson(JSON.toJSONString(openBusSubmitParam)) |
| | | .build() |
| | | .doPost(); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | if (jsonObject.getInteger("code").equals(200)) { |
| | | log.info("下发任务返回数据:{}", response); |
| | | return true; |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("请求接口失败!!!url:{};request:{};response:{}", ctuUrl + sendTask, JSON.toJSONString(openBusSubmitParam), response); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * 检查站点状态 |
| | |
| | | for (StationStatus object : stationStatuses) { |
| | | if (object.getStaNo().equals(staNo + "")) { |
| | | if (object.getConveyable()) { |
| | | return object.getSeqNum(); |
| | | return object.getSeqNum() == null ? System.currentTimeMillis() + "" : object.getSeqNum(); |
| | | } else { |
| | | log.info("站点:{}状态不对", staNo); |
| | | return null; |