|  |  | 
 |  |  | package com.zy.asrs.service.impl; | 
 |  |  |  | 
 |  |  | import com.alibaba.fastjson.JSON; | 
 |  |  | import com.alibaba.fastjson.JSONObject; | 
 |  |  | import com.baomidou.mybatisplus.mapper.EntityWrapper; | 
 |  |  | import com.core.common.Cools; | 
 |  |  | import com.core.common.R; | 
 |  |  | import com.core.exception.CoolException; | 
 |  |  | import com.zy.asrs.entity.*; | 
 |  |  | import com.zy.asrs.entity.BasCircularShuttle; | 
 |  |  | import com.zy.asrs.entity.BasDevpPosition; | 
 |  |  | import com.zy.asrs.entity.BasRgv; | 
 |  |  | import com.zy.asrs.entity.WrkMast; | 
 |  |  | import com.zy.asrs.service.BasCircularShuttleService; | 
 |  |  | import com.zy.asrs.service.BasDevpPositionService; | 
 |  |  | import com.zy.asrs.service.WrkMastService; | 
 |  |  | import com.zy.asrs.task.core.ReturnT; | 
 |  |  | import com.zy.asrs.task.escalationParam.RgvTaskReportingParam; | 
 |  |  | import com.zy.asrs.utils.PostMesDataUtils; | 
 |  |  | import com.zy.asrs.utils.SortTheExecutionOfTheCarUtil; | 
 |  |  | import com.zy.asrs.utils.TimeCalculatorUtils; | 
 |  |  | import com.zy.common.CodeRes; | 
 |  |  | import com.zy.common.service.CommonService; | 
 |  |  | import com.zy.common.utils.HttpHandler; | 
 |  |  | import com.zy.core.cache.MessageQueue; | 
 |  |  | import com.zy.core.cache.SlaveConnection; | 
 |  |  | import com.zy.core.enums.*; | 
 |  |  | import com.zy.core.enums.RgvModeType; | 
 |  |  | import com.zy.core.enums.RgvStatusType; | 
 |  |  | import com.zy.core.enums.RgvTaskModeType; | 
 |  |  | import com.zy.core.enums.SlaveType; | 
 |  |  | import com.zy.core.model.RgvSlave; | 
 |  |  | import com.zy.core.model.Task; | 
 |  |  | import com.zy.core.model.command.RgvCommand; | 
 |  |  | 
 |  |  | import org.springframework.stereotype.Service; | 
 |  |  | import org.springframework.transaction.annotation.Transactional; | 
 |  |  |  | 
 |  |  | import java.util.*; | 
 |  |  | import java.util.ArrayList; | 
 |  |  | import java.util.Date; | 
 |  |  | import java.util.List; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  |  * 立体仓库WCS系统主流程业务 | 
 |  |  | 
 |  |  |      */ | 
 |  |  |     public synchronized void updateStePositionNearby() { | 
 |  |  |         try { | 
 |  |  |             List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 1L)); | 
 |  |  |             List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 2L)); | 
 |  |  |             if (wrkMasts.isEmpty()) { | 
 |  |  |                 return; | 
 |  |  |             } | 
 |  |  | 
 |  |  |      */ | 
 |  |  |     public synchronized void DevpTaskNoRun() { | 
 |  |  |         try { | 
 |  |  |             List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 1L).orderBy("modi_time", true)); | 
 |  |  |             List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("rgv_no", 0).orderBy("modi_time", true)); | 
 |  |  |             if (wrkMasts.isEmpty()) { | 
 |  |  |                 return; | 
 |  |  |             } | 
 |  |  | 
 |  |  |             List<WrkMast> wrkMastlistA = new ArrayList<>(); | 
 |  |  |             List<WrkMast> wrkMastlistB = new ArrayList<>(); | 
 |  |  |             for (BasDevpPosition basDevpPosition : basDevpPositionsListUN) { | 
 |  |  |                 List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("sta_no", basDevpPosition.getDevNo()).eq("wrk_sts", 1L).orderBy("modi_time", true)); | 
 |  |  |                 List<WrkMast> wrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("sta_no", basDevpPosition.getDevNo()).eq("rgv_no", 0).orderBy("modi_time", true)); | 
 |  |  |                 for (WrkMast wrkMast : wrkMastList) { | 
 |  |  |                     if (!Cools.isEmpty(wrkMast)) { | 
 |  |  |                         if (SortTheExecutionOfTheCarUtil.devpNoSortbj(basDevpPositionsListUN, wrkMast.getSourceStaNo(), wrkMast.getStaNo())) { | 
 |  |  | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                     List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("rgv_no", rgvProtocol.getRgvNo()).eq("wrk_sts", 2L)); | 
 |  |  |                     List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("rgv_no", rgvProtocol.getRgvNo())); | 
 |  |  |                     if (!wrkMasts.isEmpty()) { | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                     if (rgvProtocol != null | 
 |  |  |                             && rgvProtocol.modeType == RgvModeType.AUTO | 
 |  |  |                     if (rgvProtocol.modeType == RgvModeType.AUTO | 
 |  |  |                             && (rgvProtocol.getStatusType() == RgvStatusType.IDLE || rgvProtocol.getStatusType() == RgvStatusType.ROAM) | 
 |  |  |                             && rgvProtocol.getTaskNo1() == 0 | 
 |  |  |                             && rgvProtocol.getAlarm() == 0) { | 
 |  |  | 
 |  |  |                         rgvCommand.setAckFinish1((short) 0);  // 工位1任务完成确认位 | 
 |  |  |                         rgvCommand.setTaskNo1(wrkMast.getWrkNo().shortValue()); | 
 |  |  |                         rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 工位1任务模式:  取放货 | 
 |  |  |                         rgvCommand.setSourceStaNo1(wrkMast.getSourceStaNo().shortValue());   //工位1起点 | 
 |  |  |                         rgvCommand.setDestinationStaNo1(wrkMast.getStaNo().shortValue());   //工位1目标站点 | 
 |  |  |                         rgvCommand.setSourceStaNo1(wrkMast.getRgvSstaNo().shortValue());   //工位1起点 | 
 |  |  |                         rgvCommand.setDestinationStaNo1(wrkMast.getRgvDstaNo().shortValue());   //工位1目标站点 | 
 |  |  |                         rgvCommand.setCommand((short) 1);   //工位1任务确认 | 
 |  |  |                         if (!MessageQueue.offer(SlaveType.Rgv, rgvProtocol.getRgvNo(), new Task(2, rgvCommand))) { | 
 |  |  |                             // | 
 |  |  | 
 |  |  |                         } | 
 |  |  |                         log.info("RGV命令下发成功,RGV号={},任务数据={}", rgvId, JSON.toJSON(rgvCommand)); | 
 |  |  |  | 
 |  |  |                         wrkMast.setWrkSts(2L); | 
 |  |  |                         wrkMast.setRgvNo(rgvProtocol.getRgvNo()); | 
 |  |  |                         wrkMast.setAppeTime(new Date()); | 
 |  |  |                         try { | 
 |  |  | 
 |  |  |                         && rgvProtocol.getModeType() == RgvModeType.AUTO | 
 |  |  |                         && rgvProtocol.getTaskNo1() != 0 | 
 |  |  |                 ) { | 
 |  |  | //                    log.info("{}号小车等待wcs确认,状态{},参数{}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType(),rgvProtocol); | 
 |  |  |                     log.info("{}号小车等待wcs确认,状态{},参数{}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType(),rgvProtocol); | 
 |  |  |                     WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", rgvProtocol.getTaskNo1().longValue())); | 
 |  |  |                     if (Cools.isEmpty(wrkMast) || !wrkMast.getWrkSts().equals(2L)) { | 
 |  |  |                         log.error("未查到小车执行任务或者执行任务状态不符合!" + wrkMast); | 
 |  |  |                     if (Cools.isEmpty(wrkMast) && (wrkMast.getWrkSts() == 2 || wrkMast.getWrkSts() == 15) && (wrkMast.getRgvNo() == 0 || wrkMast.getRgvNo() > 10)) { | 
 |  |  |                         log.error("未查到小车执行任务或者执行任务状态不符合!" + rgvProtocol.getTaskNo1()); | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                     boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); | 
 |  |  | 
 |  |  |                         log.error("小车复位失败,小车号{}!", rgvProtocol.getRgvNo()); | 
 |  |  |                         break; | 
 |  |  |                     } | 
 |  |  |                     wrkMast.setWrkSts(3L); | 
 |  |  |                     wrkMast.setRgvNo(10+rgvProtocol.getRgvNo()); | 
 |  |  |                     Date now = new Date(); | 
 |  |  |                     wrkMast.setAppeTime(now); | 
 |  |  |                     try{ | 
 |  |  |                         try{ | 
 |  |  |                             if (reportSwitch){ | 
 |  |  |                                 RgvTaskReportingParam rgvTaskReportingParam = new RgvTaskReportingParam(wrkMast); | 
 |  |  |                                 ReturnT<String> result = new PostMesDataUtils().postMesDataWcs(wmsUrl, wmsOutPath, rgvTaskReportingParam); | 
 |  |  |                                 if (result.getCode()==200){ | 
 |  |  |                                     wrkMast.setWrkSts(4L); | 
 |  |  |                                     wrkMast.setAppeTime(now); | 
 |  |  |                                     wrkMastService.updateById(wrkMast); | 
 |  |  |                                     continue; | 
 |  |  |                                 }else { | 
 |  |  |                                     log.error("工作号"+wrkMast.getWrkNo()+"任务完成信息上传处理失败"); | 
 |  |  |                                 } | 
 |  |  |                             } else { | 
 |  |  |                                 //测试用 | 
 |  |  |                                 wrkMast.setWrkSts(4L); | 
 |  |  |                                 wrkMast.setAppeTime(now); | 
 |  |  |                                 wrkMastService.updateById(wrkMast); | 
 |  |  |                                 if (reportSwitchAuto) { | 
 |  |  |                                     WrkMast wrkMast1 = new WrkMast(); | 
 |  |  |                                     int workNo = commonService.getWorkNo(0); | 
 |  |  |                                     wrkMast1.setWrkNo((long) workNo); | 
 |  |  |                                     wrkMast1.setSourceStaNo(wrkMast.getSourceNoCs(autoZ)); | 
 |  |  |                                     wrkMast1.setStaNo(wrkMast.getStaNoCs(autoZ)); | 
 |  |  |                                     wrkMast1.setWrkSts(1L); | 
 |  |  |                                     wrkMast1.setIoType(1); | 
 |  |  |                                     wrkMast1.setModiTime(now); | 
 |  |  |                                     wrkMast1.setAppeTime(now); | 
 |  |  |                                     wrkMast1.setMemo("测试数据"); | 
 |  |  |                                     wrkMastService.insert(wrkMast1); | 
 |  |  |                                 } | 
 |  |  |                                 continue; | 
 |  |  |                             } | 
 |  |  |                         } catch (Exception e){ | 
 |  |  |                             log.error("工作号"+wrkMast.getWrkNo()+"任务完成信息上传处理失败,异常信息:"+e); | 
 |  |  |                         } | 
 |  |  |                     } catch (Exception e){} | 
 |  |  |                     wrkMast.setModiTime(now); | 
 |  |  |                     wrkMastService.updateById(wrkMast); | 
 |  |  |                 } | 
 |  |  |             } |