|  |  | 
 |  |  | import com.alibaba.fastjson.JSON; | 
 |  |  | import com.alibaba.fastjson.JSONObject; | 
 |  |  | import com.baomidou.mybatisplus.mapper.EntityWrapper; | 
 |  |  | import com.baomidou.mybatisplus.mapper.Wrapper; | 
 |  |  | import com.core.common.Cools; | 
 |  |  | import com.core.common.DateUtils; | 
 |  |  | import com.core.exception.CoolException; | 
 |  |  | 
 |  |  | import com.zy.asrs.utils.RouteUtils; | 
 |  |  | import com.zy.asrs.utils.Utils; | 
 |  |  | import com.zy.asrs.utils.VersionUtils; | 
 |  |  | import com.zy.common.constant.GhjtApiConstant; | 
 |  |  | import com.zy.common.model.LocTypeDto; | 
 |  |  | import com.zy.common.model.MatDto; | 
 |  |  | import com.zy.common.model.SearchLocParam; | 
 |  |  | 
 |  |  | import com.zy.common.utils.CollectionUtils; | 
 |  |  | import com.zy.common.utils.HttpHandler; | 
 |  |  | import com.zy.common.utils.RedisUtil; | 
 |  |  | import com.zy.common.utils.RgvUtils; | 
 |  |  | import com.zy.core.CrnThread; | 
 |  |  | import com.zy.core.DevpThread; | 
 |  |  | import com.zy.core.cache.MessageQueue; | 
 |  |  | 
 |  |  | import com.zy.core.thread.LedThread; | 
 |  |  | import com.zy.core.thread.RgvThread; | 
 |  |  | import com.zy.core.thread.SiemensDevpThread; | 
 |  |  | import com.zy.system.entity.Config; | 
 |  |  | import com.zy.system.mapper.ConfigMapper; | 
 |  |  | import lombok.extern.slf4j.Slf4j; | 
 |  |  | import org.apache.poi.ss.formula.functions.T; | 
 |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
 |  |  | import org.springframework.beans.factory.annotation.Value; | 
 |  |  | import org.springframework.stereotype.Service; | 
 |  |  | import org.springframework.transaction.annotation.Transactional; | 
 |  |  | import org.springframework.transaction.interceptor.TransactionAspectSupport; | 
 |  |  |  | 
 |  |  | import javax.annotation.Resource; | 
 |  |  | import java.util.*; | 
 |  |  | import java.util.concurrent.TimeUnit; | 
 |  |  | import java.util.stream.Collectors; | 
 |  |  |  | 
 |  |  | /** | 
 |  |  | 
 |  |  |     private WrkMastStaMapper wrkMastStaMapper; | 
 |  |  |     @Autowired | 
 |  |  |     private BasRgvMapMapper basRgvMapMapper; | 
 |  |  |     @Autowired | 
 |  |  |     private RgvOneSignMapper rgvOneSignMapper; | 
 |  |  |  | 
 |  |  |     @Resource | 
 |  |  |     private ConfigMapper configMapper; | 
 |  |  |  | 
 |  |  |     @Value("${wms.url}") | 
 |  |  |     private String wmsUrl; | 
 |  |  | 
 |  |  |                     continue; | 
 |  |  |                 } else { | 
 |  |  |                     staProtocol = staProtocol.clone(); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 // 尺寸检测异常 | 
 |  |  |                 boolean back = false; | 
 |  |  |                 String errMsg = "异常:"; | 
 |  |  |                 if (staProtocol.isFrontErr()) { | 
 |  |  |                     errMsg = errMsg + "前超限;"; | 
 |  |  |                     back = true; | 
 |  |  |                 } | 
 |  |  |                 if (staProtocol.isBackErr()) { | 
 |  |  |                     errMsg = errMsg + "后超限"; | 
 |  |  |                     back = true; | 
 |  |  |                 } | 
 |  |  |                 if (staProtocol.isHighErr()) { | 
 |  |  |                     errMsg = errMsg + "高超限"; | 
 |  |  |                     back = true; | 
 |  |  |                 } | 
 |  |  |                 if (staProtocol.isLeftErr()) { | 
 |  |  |                     errMsg = errMsg + "左超限"; | 
 |  |  |                     back = true; | 
 |  |  |                 } | 
 |  |  |                 if (staProtocol.isRightErr()) { | 
 |  |  |                     errMsg = errMsg + "右超限"; | 
 |  |  |                     back = true; | 
 |  |  |                 } | 
 |  |  |                 if (staProtocol.isWeightErr()) { | 
 |  |  |                     errMsg = errMsg + "超重"; | 
 |  |  |                     back = true; | 
 |  |  |                 } | 
 |  |  |                 if (staProtocol.isBarcodeErr()) { | 
 |  |  |                     errMsg = errMsg + "扫码失败"; | 
 |  |  |                     back = true; | 
 |  |  |                 } | 
 |  |  |                 // 退回 | 
 |  |  |                 if (back) { | 
 |  |  |                     // led 异常显示 | 
 |  |  |                     LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); | 
 |  |  |                     if (ledThread != null) { | 
 |  |  |                         MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errMsg)); | 
 |  |  |                     } | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 // 入出库模式判断 | 
 |  |  | 
 |  |  |                             barcodeThread.setBarcode(""); | 
 |  |  |                             staProtocol.setWorkNo(dto.getWorkNo()); | 
 |  |  |  | 
 |  |  |                             if(Cools.isEmpty(dto.getRgvNo()) || dto.getRgvNo() <= 0) { | 
 |  |  |                             if (Cools.isEmpty(dto.getRgvNo()) || dto.getRgvNo() <= 0) { | 
 |  |  |                                 staProtocol.setStaNo(dto.getStaNo()); | 
 |  |  |                             } else {//如果存在RGV编号,说明需要RGV接驳,先下发任务到RGV源站 | 
 |  |  |                                 staProtocol.setStaNo(dto.getRgvSstaNo()); | 
 |  |  | 
 |  |  |                         && staProtocol.isLoading() | 
 |  |  |                         && staProtocol.isInEnable() | 
 |  |  |                         && staProtocol.isEmptyMk() | 
 |  |  |                         && (staProtocol.getWorkNo() == 0 || (staProtocol.getWorkNo()>9899 && staProtocol.getWorkNo()<10000) ) | 
 |  |  |                         && (staProtocol.getWorkNo() == 0 || (staProtocol.getWorkNo() > 9899 && staProtocol.getWorkNo() < 10000)) | 
 |  |  |                 ) { | 
 |  |  |                     try { | 
 |  |  |                         BasDevp basDevp = basDevpService.selectById(driveSta.getStaNo()); | 
 |  |  |                         if (basDevp.getReportSign()>0){ | 
 |  |  |                         if (basDevp.getReportSign() > 0) { | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |                         basDevp.setBarcode(barcode); | 
 |  |  | 
 |  |  |                     // 更新站点信息 且 下发plc命令 | 
 |  |  |                     staProtocol.setWorkNo(wrkMast.getWrkNo()); | 
 |  |  |                     Integer staNo = wrkMast.getStaNo(); | 
 |  |  |                     if (wrkMast.getSourceStaNo()==145){ | 
 |  |  |                     if (wrkMast.getSourceStaNo() == 145) { | 
 |  |  |                         staNo = 147; | 
 |  |  |                     } | 
 |  |  |                     staProtocol.setStaNo(staNo); | 
 |  |  | 
 |  |  |  | 
 |  |  |                 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()) { | 
 |  |  | //                    WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode); | 
 |  |  |                     WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo()); | 
 |  |  |                     WrkMast wrkMast = wrkMastMapper.selectPakInStep5(staProtocol.getSiteId(), "7"); | 
 |  |  |                     if (wrkMast == null) { | 
 |  |  |                         // 无拣料数据 | 
 |  |  |                         continue; | 
 |  |  | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                     // 获取目标站 | 
 |  |  |                     Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() | 
 |  |  |                             .eq("type_no", wrkMast.getIoType() - 50) | 
 |  |  |                             .eq("stn_no", pickSta.getStaNo()) // 作业站点 = 拣料出库的目标站 | 
 |  |  |                             .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号 | 
 |  |  |                     StaDesc staDesc = staDescService.selectOne(wrapper); | 
 |  |  |                     if (Cools.isEmpty(staDesc)) { | 
 |  |  |                         log.error("入库路径不存在!type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo()); | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                     //   获取库位号 | 
 |  |  |                     try { | 
 |  |  |                         // 保存工作明细档历史档 | 
 |  |  |                         if (wrkMastMapper.saveWrkDetlLog(wrkMast.getWrkNo()) == 0) { | 
 |  |  |                             throw new CoolException("保存工作明细档历史档失败"); | 
 |  |  |                         SearchLocParam param = new SearchLocParam(); | 
 |  |  |                         param.setBarcode(wrkMast.getBarcode()); | 
 |  |  |                         param.setIoType(wrkMast.getIoType()); | 
 |  |  |                         param.setSourceStaNo(pickSta.getStaNo()); //作业站点 | 
 |  |  |                         param.setLocType1((short) 1); | 
 |  |  |                         String response = ""; | 
 |  |  |                         log.info("入库作业站" + pickSta.getStaNo() + "盘点再入库任务请求WMS===>>参数:" + param); | 
 |  |  |                         try { | 
 |  |  |                             response = new HttpHandler.Builder() | 
 |  |  |                                     .setUri(wmsUrl) | 
 |  |  |                                     .setPath("/rpc/pakin2/loc/v1") | 
 |  |  |                                     .setJson(JSON.toJSONString(param)) | 
 |  |  |                                     .setTimeout(15, TimeUnit.SECONDS) | 
 |  |  |                                     .build() | 
 |  |  |                                     .doPost(); | 
 |  |  |                         } catch (Exception e) { | 
 |  |  |                             log.error("入库作业站" + pickSta.getStaNo() + "盘点再入库任务请求WMS===>>参数:" + param); | 
 |  |  |                             log.error("stnToCrnStnPick2===>>盘点查库位入库接口失败", e); | 
 |  |  |                             e.printStackTrace(); | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |                         // 保存工作主档历史档 | 
 |  |  |                         if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) { | 
 |  |  |                             throw new CoolException("保存工作主档历史档失败"); | 
 |  |  |                         log.info("入库作业站" + pickSta.getStaNo() + "盘点再入库任务请求WMS===>>参数:" + param); | 
 |  |  |                         log.info("入库作业站" + pickSta.getStaNo() + "下发盘点再入库任务请求WMS返回结果===>>" + response); | 
 |  |  |                         if (response.equals("")) { | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |  | 
 |  |  |                         Date now = new Date(); | 
 |  |  |                         // 堆垛机站点(目标站) | 
 |  |  |                         Integer staNo = staDesc.getCrnStn(); | 
 |  |  |                         // 更新工作档数据状态 | 
 |  |  |                         wrkMast.setIoTime(now); | 
 |  |  |                         wrkMast.setIoType(wrkMast.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57 | 
 |  |  |                         wrkMast.setWrkSts(2L); // 工作状态: 2.设备上走 | 
 |  |  |                         wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 源站 | 
 |  |  |                         wrkMast.setStaNo(staNo); // 目标站 | 
 |  |  |                         wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 目标库位 = 出库时的源库位 | 
 |  |  |                         wrkMast.setSourceLocNo(""); // 源库位清空 | 
 |  |  |                         wrkMast.setModiTime(now); | 
 |  |  |                         if (wrkMastMapper.updateById(wrkMast) == 0) { | 
 |  |  |                             throw new CoolException("更新工作档数据状态失败"); | 
 |  |  |                         } | 
 |  |  |                         // 更新明细档io_time (历史档关联使用) | 
 |  |  |                         wrkDetlService.updateIoTime(wrkMast.getWrkNo(), now); | 
 |  |  |                         // 修改库位状态 Q.拣料/盘点/并板再入库 | 
 |  |  |                         LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); | 
 |  |  |                         locMast.setLocSts("Q"); | 
 |  |  |                         locMast.setModiTime(new Date()); | 
 |  |  |                         if (!locMastService.updateById(locMast)) { | 
 |  |  |                             throw new CoolException("修改库位状态失败"); | 
 |  |  |                         JSONObject jsonObject = JSON.parseObject(response); | 
 |  |  | //                        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed()); | 
 |  |  |                         Integer code = jsonObject.getInteger("code"); | 
 |  |  |                         if (code == 200) { | 
 |  |  |                             StartupDto dto = jsonObject.getObject("data", StartupDto.class); | 
 |  |  |                             if (Cools.isEmpty(dto) || Cools.isEmpty(dto.getStaNo())) { | 
 |  |  |                                 log.error("任务号" + wrkMast.getWrkNo() + "盘点再入库查询库位失败===>>" + jsonObject.toJSONString()); | 
 |  |  |                             } else { | 
 |  |  |                                 log.info("任务号" + wrkMast.getWrkNo() + "盘点再入库查询库位成功===>>" + jsonObject.toJSONString()); | 
 |  |  |                                 try { | 
 |  |  |                                     // 更新站点信息 且 下发plc命令 | 
 |  |  |                                     staProtocol.setWorkNo(wrkMast.getWrkNo()); | 
 |  |  |                                     staProtocol.setStaNo(dto.getStaNo()); | 
 |  |  |                                     devpThread.setPakMk(staProtocol.getSiteId(), false); | 
 |  |  | //                                    ledThread.errorReset(); | 
 |  |  |                                     boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
 |  |  |                                     if (!result) { | 
 |  |  |                                         log.error("发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); | 
 |  |  |                                     } | 
 |  |  |                                     log.info("任务号" + wrkMast.getWrkNo() + "盘点/拣料再入库任务下发成功===>>" + staProtocol); | 
 |  |  |                                 } catch (Exception e) { | 
 |  |  |                                     log.error("盘点再入库失败===>>" + e); | 
 |  |  |                                     e.printStackTrace(); | 
 |  |  |                                     TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
 |  |  |                                 } | 
 |  |  |                             } | 
 |  |  |                         } else { | 
 |  |  |                             log.error("请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/pakin2/loc/v1", JSON.toJSONString(param), response); | 
 |  |  |                         } | 
 |  |  |                     } catch (Exception e) { | 
 |  |  |                         log.error("stnToCrnStnPick2===>>fail", e); | 
 |  |  |                         e.printStackTrace(); | 
 |  |  |                         TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                     // 更新站点信息 且 下发plc命令 | 
 |  |  |                     staProtocol.setWorkNo(wrkMast.getWrkNo()); | 
 |  |  |                     staProtocol.setStaNo(wrkMast.getStaNo()); | 
 |  |  |                     devpThread.setPakMk(staProtocol.getSiteId(), false); | 
 |  |  |                     boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
 |  |  |                     if (!result) { | 
 |  |  |                         log.error("发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                 } | 
 |  |  | 
 |  |  |                     staProtocol = staProtocol.clone(); | 
 |  |  |                 } | 
 |  |  |                 BasDevp basDevp = basDevpService.selectById(staProtocol.getSiteId()); | 
 |  |  |                 if (Cools.isEmpty(basDevp) || basDevp.getReportSign()!=1){ | 
 |  |  |                 if (Cools.isEmpty(basDevp) || basDevp.getReportSign() != 1) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isPakMk() && staProtocol.getWorkNo()==0 && !staProtocol.isOutEnable() && staProtocol.isInEnable()) { | 
 |  |  |                     WrkMast wrkMast = wrkMastMapper.selectPakInStep4(staProtocol.getSiteId(),"3"); | 
 |  |  |                 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isPakMk() && staProtocol.getWorkNo() == 0 && !staProtocol.isOutEnable() && staProtocol.isInEnable()) { | 
 |  |  |                     WrkMast wrkMast = wrkMastMapper.selectPakInStep4(staProtocol.getSiteId(), "3"); | 
 |  |  |  | 
 |  |  |                     if (wrkMast == null) { | 
 |  |  | //                        WrkMast wrkMast1 = wrkMastMapper.selectPakInStep5(staProtocol.getSiteId(),"3"); | 
 |  |  | //                        if (Cools.isEmpty(wrkMast1) && staProtocol.isEmptyMk()){ | 
 |  |  | //                            WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(staProtocol.getSiteId() + 9999L); | 
 |  |  | //                            if (Cools.isEmpty(wrkMastSta)){ | 
 |  |  | //                                WrkMastSta wrkMastSta1 = new WrkMastSta(new Date(),staProtocol.getSiteId()); | 
 |  |  | //                                wrkMastSta1.setType(2); | 
 |  |  | //                                wrkMastSta1.setWrkType(1); | 
 |  |  | //                                wrkMastStaMapper.insert(wrkMastSta1); | 
 |  |  | //                            } | 
 |  |  | //                            continue; | 
 |  |  | //                        } | 
 |  |  | //                        log.error("站点号"+staProtocol.getSiteId()+"未查询到工作档案!"); | 
 |  |  |                         // 无拣料数据 | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                     if (staProtocol.isEmptyMk()){ | 
 |  |  |                         log.error("站点号"+staProtocol.getSiteId()+"空板信号异常!"); | 
 |  |  |                     if (staProtocol.isEmptyMk()) { | 
 |  |  |                         log.error("站点号" + staProtocol.getSiteId() + "空板信号异常!"); | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                     if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) | 
 |  |  | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                     // 获取目标站 | 
 |  |  |                     Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() | 
 |  |  |                             .eq("type_no", wrkMast.getIoType() - 50) | 
 |  |  |                             .eq("stn_no", pickSta.getStaNo()) // 作业站点 = 拣料出库的目标站 | 
 |  |  |                             .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号 | 
 |  |  |                     StaDesc staDesc = staDescService.selectOne(wrapper); | 
 |  |  |                     if (Cools.isEmpty(staDesc)) { | 
 |  |  |                         log.error("入库路径不存在!type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo()); | 
 |  |  |                     String barcode = wrkMast.getBarcode(); | 
 |  |  |                     if (!Cools.isEmpty(barcode)) { | 
 |  |  |                         if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) { | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |                     } else { | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                     //   获取库位号 | 
 |  |  |                     try { | 
 |  |  |                         // 保存工作明细档历史档 | 
 |  |  |                         if (wrkMastMapper.saveWrkDetlLog(wrkMast.getWrkNo()) == 0) { | 
 |  |  |                             throw new CoolException("保存工作明细档历史档失败"); | 
 |  |  |                         SearchLocParam param = new SearchLocParam(); | 
 |  |  |                         param.setBarcode(barcode); | 
 |  |  |                         param.setIoType(wrkMast.getIoType()); | 
 |  |  |                         param.setSourceStaNo(pickSta.getStaNo()); //作业站点 | 
 |  |  |                         param.setLocType1((short) 1); | 
 |  |  |                         String response = ""; | 
 |  |  |                         log.info("入库作业站" + pickSta.getStaNo() + "盘点再入库任务请求WMS===>>参数:" + param); | 
 |  |  |                         try { | 
 |  |  |                             response = new HttpHandler.Builder() | 
 |  |  |                                     .setUri(wmsUrl) | 
 |  |  |                                     .setPath("/rpc/pakin2/loc/v1") | 
 |  |  |                                     .setJson(JSON.toJSONString(param)) | 
 |  |  |                                     .setTimeout(15, TimeUnit.SECONDS) | 
 |  |  |                                     .build() | 
 |  |  |                                     .doPost(); | 
 |  |  |                         } catch (Exception e) { | 
 |  |  |                             log.error("入库作业站" + pickSta.getStaNo() + "盘点再入库任务请求WMS===>>参数:" + param); | 
 |  |  |                             log.error("stnToCrnStnPick2===>>盘点查库位入库接口失败", e); | 
 |  |  |                             e.printStackTrace(); | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |                         // 保存工作主档历史档 | 
 |  |  |                         if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) { | 
 |  |  |                             throw new CoolException("保存工作主档历史档失败"); | 
 |  |  |                         log.info("入库作业站" + pickSta.getStaNo() + "盘点再入库任务请求WMS===>>参数:" + param); | 
 |  |  |                         log.info("入库作业站" + pickSta.getStaNo() + "下发盘点再入库任务请求WMS返回结果===>>" + response); | 
 |  |  |                         if (response.equals("")) { | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |  | 
 |  |  |                         Date now = new Date(); | 
 |  |  |                         // 堆垛机站点(目标站) | 
 |  |  |                         Integer staNo = staDesc.getCrnStn(); | 
 |  |  |                         // 更新工作档数据状态 | 
 |  |  |                         wrkMast.setIoTime(now); | 
 |  |  |                         wrkMast.setIoType(wrkMast.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57 | 
 |  |  |                         wrkMast.setWrkSts(2L); // 工作状态: 2.设备上走 | 
 |  |  |                         wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 源站 | 
 |  |  |                         wrkMast.setStaNo(staNo); // 目标站 | 
 |  |  |                         wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 目标库位 = 出库时的源库位 | 
 |  |  |                         wrkMast.setSourceLocNo(""); // 源库位清空 | 
 |  |  |                         wrkMast.setModiTime(now); | 
 |  |  |                         if (wrkMastMapper.updateById(wrkMast) == 0) { | 
 |  |  |                             throw new CoolException("更新工作档数据状态失败"); | 
 |  |  |                         } | 
 |  |  |                         // 更新明细档io_time (历史档关联使用) | 
 |  |  |                         wrkDetlService.updateIoTime(wrkMast.getWrkNo(), now); | 
 |  |  |                         // 修改库位状态 Q.拣料/盘点/并板再入库 | 
 |  |  |                         LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); | 
 |  |  |                         locMast.setLocSts("Q"); | 
 |  |  |                         locMast.setModiTime(new Date()); | 
 |  |  |                         if (!locMastService.updateById(locMast)) { | 
 |  |  |                             throw new CoolException("修改库位状态失败"); | 
 |  |  |                         JSONObject jsonObject = JSON.parseObject(response); | 
 |  |  | //                        LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed()); | 
 |  |  |                         Integer code = jsonObject.getInteger("code"); | 
 |  |  |                         if (code == 200) { | 
 |  |  |                             StartupDto dto = jsonObject.getObject("data", StartupDto.class); | 
 |  |  |                             if (Cools.isEmpty(dto) || Cools.isEmpty(dto.getStaNo())) { | 
 |  |  |                                 log.error("任务号" + wrkMast.getWrkNo() + "盘点再入库查询库位失败===>>" + jsonObject.toJSONString()); | 
 |  |  |                             } else { | 
 |  |  |                                 log.info("任务号" + wrkMast.getWrkNo() + "盘点再入库查询库位成功===>>" + jsonObject.toJSONString()); | 
 |  |  |                                 try { | 
 |  |  |                                     // 更新站点信息 且 下发plc命令 | 
 |  |  |                                     staProtocol.setWorkNo(wrkMast.getWrkNo()); | 
 |  |  |                                     staProtocol.setStaNo(dto.getStaNo()); | 
 |  |  |                                     devpThread.setPakMk(staProtocol.getSiteId(), false); | 
 |  |  | //                                    ledThread.errorReset(); | 
 |  |  |                                     boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
 |  |  |                                     if (!result) { | 
 |  |  |                                         log.error("发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); | 
 |  |  |                                     } | 
 |  |  |                                     log.info("任务号" + wrkMast.getWrkNo() + "盘点/拣料再入库任务下发成功===>>" + staProtocol); | 
 |  |  |                                 } catch (Exception e) { | 
 |  |  |                                     log.error("盘点再入库失败===>>" + e); | 
 |  |  |                                     e.printStackTrace(); | 
 |  |  |                                     TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
 |  |  |                                 } | 
 |  |  |                             } | 
 |  |  |                         } else { | 
 |  |  |                             log.error("请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/pakin2/loc/v1", JSON.toJSONString(param), response); | 
 |  |  |                         } | 
 |  |  |                     } catch (Exception e) { | 
 |  |  |                         log.error("stnToCrnStnPick2===>>fail", e); | 
 |  |  |                         e.printStackTrace(); | 
 |  |  |                         TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                     // 更新站点信息 且 下发plc命令 | 
 |  |  |                     staProtocol.setWorkNo(wrkMast.getWrkNo()); | 
 |  |  |                     staProtocol.setStaNo(wrkMast.getStaNo()); | 
 |  |  |                     devpThread.setPakMk(staProtocol.getSiteId(), false); | 
 |  |  |                     boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
 |  |  |                     if (!result) { | 
 |  |  |                         log.error("发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); | 
 |  |  |                     } | 
 |  |  | //                    // 获取目标站 | 
 |  |  | //                    Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() | 
 |  |  | //                            .eq("type_no", wrkMast.getIoType() - 50) | 
 |  |  | //                            .eq("stn_no", pickSta.getStaNo()) // 作业站点 = 拣料出库的目标站 | 
 |  |  | //                            .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号 | 
 |  |  | //                    StaDesc staDesc = staDescService.selectOne(wrapper); | 
 |  |  | //                    if (Cools.isEmpty(staDesc)) { | 
 |  |  | //                        log.error("入库路径不存在!type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo()); | 
 |  |  | //                        continue; | 
 |  |  | //                    } | 
 |  |  | // | 
 |  |  | //                    try { | 
 |  |  | //                        // 保存工作明细档历史档 | 
 |  |  | //                        if (wrkMastMapper.saveWrkDetlLog(wrkMast.getWrkNo()) == 0) { | 
 |  |  | //                            throw new CoolException("保存工作明细档历史档失败"); | 
 |  |  | //                        } | 
 |  |  | //                        // 保存工作主档历史档 | 
 |  |  | //                        if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) { | 
 |  |  | //                            throw new CoolException("保存工作主档历史档失败"); | 
 |  |  | //                        } | 
 |  |  | // | 
 |  |  | //                        Date now = new Date(); | 
 |  |  | //                        // 堆垛机站点(目标站) | 
 |  |  | //                        Integer staNo = staDesc.getCrnStn(); | 
 |  |  | //                        // 更新工作档数据状态 | 
 |  |  | //                        wrkMast.setIoTime(now); | 
 |  |  | //                        wrkMast.setIoType(wrkMast.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57 | 
 |  |  | //                        wrkMast.setWrkSts(2L); // 工作状态: 2.设备上走 | 
 |  |  | //                        wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 源站 | 
 |  |  | //                        wrkMast.setStaNo(staNo); // 目标站 | 
 |  |  | //                        wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 目标库位 = 出库时的源库位 | 
 |  |  | //                        wrkMast.setSourceLocNo(""); // 源库位清空 | 
 |  |  | //                        wrkMast.setModiTime(now); | 
 |  |  | //                        if (wrkMastMapper.updateById(wrkMast) == 0) { | 
 |  |  | //                            throw new CoolException("更新工作档数据状态失败"); | 
 |  |  | //                        } | 
 |  |  | //                        // 更新明细档io_time (历史档关联使用) | 
 |  |  | //                        wrkDetlService.updateIoTime(wrkMast.getWrkNo(), now); | 
 |  |  | //                        // 修改库位状态 Q.拣料/盘点/并板再入库 | 
 |  |  | //                        LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); | 
 |  |  | //                        locMast.setLocSts("Q"); | 
 |  |  | //                        locMast.setModiTime(new Date()); | 
 |  |  | //                        if (!locMastService.updateById(locMast)) { | 
 |  |  | //                            throw new CoolException("修改库位状态失败"); | 
 |  |  | //                        } | 
 |  |  | //                    } catch (Exception e) { | 
 |  |  | //                        e.printStackTrace(); | 
 |  |  | //                        TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
 |  |  | //                        continue; | 
 |  |  | //                    } | 
 |  |  | // | 
 |  |  | //                    // 更新站点信息 且 下发plc命令 | 
 |  |  | //                    staProtocol.setWorkNo(wrkMast.getWrkNo()); | 
 |  |  | //                    staProtocol.setStaNo(wrkMast.getStaNo()); | 
 |  |  | //                    devpThread.setPakMk(staProtocol.getSiteId(), false); | 
 |  |  | //                    boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
 |  |  | //                    if (!result) { | 
 |  |  | //                        log.error("发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); | 
 |  |  | //                    } | 
 |  |  |  | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 2楼212呼叫空板 | 
 |  |  |      */ | 
 |  |  |     public synchronized void stnToCrnStnPick3Auto(Integer sign) { | 
 |  |  |         try { | 
 |  |  |             SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 2); | 
 |  |  |             StaProtocol staProtocol = devpThread.getStation().get(212); | 
 |  |  |             if (staProtocol == null) { | 
 |  |  |                 return; | 
 |  |  |             } else { | 
 |  |  |                 staProtocol = staProtocol.clone(); | 
 |  |  |             } | 
 |  |  |             if (staProtocol.isAutoing() && !staProtocol.isLoading() && staProtocol.getWorkNo() == 0) { | 
 |  |  |                 switch (sign) { | 
 |  |  |                     //执行小车货物搬运任务 | 
 |  |  |                     case 1: | 
 |  |  |                     case 4: | 
 |  |  |                         stnToCrnStnPick3(); | 
 |  |  |                         return; | 
 |  |  |                     //执行小车空板搬运任务 | 
 |  |  |                     case 2://放//拆盘 | 
 |  |  |                     case 5://放//拆盘 | 
 |  |  |                         stnToCrnStnPick4(); | 
 |  |  |                         return; | 
 |  |  |                     default: | 
 |  |  |                         return; | 
 |  |  |                 } | 
 |  |  |             } else if (staProtocol.isAutoing() && staProtocol.isLoading()) { | 
 |  |  |                 switch (sign) { | 
 |  |  |                     case 3://满放 | 
 |  |  |                     case 6://满放 | 
 |  |  |                         stnToCrnStnPick5(); | 
 |  |  |                         return; | 
 |  |  |                     default: | 
 |  |  |                         return; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("2楼212呼叫空板" + e); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 2楼212呼叫空板 | 
 |  |  |      */ | 
 |  |  |     public synchronized void stnToCrnStnPick3() { | 
 |  |  |         WrkMast wrkMast = wrkMastMapper.selectWrkMastUnstackingOne212(); | 
 |  |  |         if (Cools.isEmpty(wrkMast) || wrkMast.getWrkSts() != 61) {//61、等待空板 | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         for (DevpSlave devp : slaveProperties.getDevp()) { | 
 |  |  |             for (DevpSlave.Sta driveSta : devp.getDriveSta()) { | 
 |  |  |                 if (driveSta.getStaNo() != 215) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 // 获取拣料入库站信息 | 
 |  |  |                 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); | 
 |  |  |                 StaProtocol staProtocol = devpThread.getStation().get(driveSta.getStaNo()); | 
 |  |  |                 if (staProtocol == null) { | 
 |  |  |                     continue; | 
 |  |  |                 } else { | 
 |  |  |                     staProtocol = staProtocol.clone(); | 
 |  |  |                 } | 
 |  |  |                 if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 | 
 |  |  |                         || (staProtocol.getWorkNo() > 9899 && staProtocol.getWorkNo() < 10000))) { | 
 |  |  |                     boolean result1 = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol)); | 
 |  |  |  | 
 |  |  |                     staProtocol.setWorkNo(wrkMast.getWrkNo() - 1); | 
 |  |  |                     staProtocol.setStaNo(driveSta.getStaNo() == 215 ? 217 : 221); | 
 |  |  |                     boolean result2 = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
 |  |  |                     if (!result2) { | 
 |  |  |                         log.error("发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); | 
 |  |  |                     } | 
 |  |  |                     wrkMast.setWrkSts(62L); | 
 |  |  |                     wrkMastMapper.updateById(wrkMast); | 
 |  |  |  | 
 |  |  |                     boolean result3 = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(4, staProtocol)); | 
 |  |  |                     return; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 2楼212呼叫空板 | 
 |  |  |      */ | 
 |  |  |     public synchronized void stnToCrnStnPick4() { | 
 |  |  |         WrkMast wrkMast = wrkMastMapper.selectWrkMastUnstackingOne212(); | 
 |  |  |         if (Cools.isEmpty(wrkMast) || wrkMast.getWrkSts() != 62) {//62、等待小车搬运 | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         for (DevpSlave devp : slaveProperties.getDevp()) { | 
 |  |  |             for (DevpSlave.Sta driveSta : devp.getInSta()) { | 
 |  |  |                 if (driveSta.getStaNo() != 217) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 // 获取拣料入库站信息 | 
 |  |  |                 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); | 
 |  |  |                 StaProtocol staProtocol = devpThread.getStation().get(driveSta.getStaNo()); | 
 |  |  |                 if (staProtocol == null) { | 
 |  |  |                     continue; | 
 |  |  |                 } else { | 
 |  |  |                     staProtocol = staProtocol.clone(); | 
 |  |  |                 } | 
 |  |  |                 StaProtocol staProtocol212 = devpThread.getStation().get(212); | 
 |  |  |                 if (staProtocol212 == null) { | 
 |  |  |                     continue; | 
 |  |  |                 } else { | 
 |  |  |                     staProtocol212 = staProtocol212.clone(); | 
 |  |  |                 } | 
 |  |  |                 if (staProtocol212.isAutoing() && !staProtocol212.isLoading() && staProtocol212.getWorkNo() == 0) { | 
 |  |  |                     if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 | 
 |  |  |                             || (staProtocol.getWorkNo() > 9899 && staProtocol.getWorkNo() < 10000) || staProtocol.getWorkNo() == wrkMast.getWrkNo() - 1)) { | 
 |  |  | //                        boolean result1 = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(3, staProtocol)); | 
 |  |  |  | 
 |  |  |                         staProtocol.setWorkNo(wrkMast.getWrkNo()); | 
 |  |  |                         staProtocol.setStaNo(212); | 
 |  |  |                         boolean result2 = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
 |  |  |                         if (!result2) { | 
 |  |  |                             log.error("发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); | 
 |  |  |                         } | 
 |  |  |                         wrkMast.setWrkSts(63L); | 
 |  |  |                         wrkMastMapper.updateById(wrkMast); | 
 |  |  |  | 
 |  |  | //                        boolean result3 = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(4, staProtocol)); | 
 |  |  |                         return; | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 2楼212呼叫空板 | 
 |  |  |      */ | 
 |  |  |     public synchronized void stnToCrnStnPick5() { | 
 |  |  |         WrkMast wrkMast = wrkMastMapper.selectWrkMastUnstackingOne212(); | 
 |  |  |         if (Cools.isEmpty(wrkMast) || wrkMast.getWrkSts() != 63) {//63、等待完成 | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         // 获取拣料入库站信息 | 
 |  |  |         SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 2); | 
 |  |  |         StaProtocol staProtocol = devpThread.getStation().get(212); | 
 |  |  |         if (staProtocol == null) { | 
 |  |  |             return; | 
 |  |  |         } else { | 
 |  |  |             staProtocol = staProtocol.clone(); | 
 |  |  |         } | 
 |  |  |         if (staProtocol.isAutoing() && staProtocol.isLoading()) { | 
 |  |  | //            boolean result1 = MessageQueue.offer(SlaveType.Devp, 2, new Task(3, staProtocol)); | 
 |  |  |  | 
 |  |  |             wrkMast.setWrkSts(64L); | 
 |  |  |             wrkMastMapper.updateById(wrkMast); | 
 |  |  |  | 
 |  |  | //            boolean result3 = MessageQueue.offer(SlaveType.Devp, 2, new Task(4, staProtocol)); | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |                     staProtocol = staProtocol.clone(); | 
 |  |  |                 } | 
 |  |  |                 BasDevp basDevp = basDevpService.selectById(staProtocol.getSiteId()); | 
 |  |  |                 if (Cools.isEmpty(basDevp) || basDevp.getReportSign()!=1){ | 
 |  |  |                 if (Cools.isEmpty(basDevp) || basDevp.getReportSign() != 1) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isPakMk() && staProtocol.getWorkNo()==0 && !staProtocol.isOutEnable() && staProtocol.isInEnable()) { | 
 |  |  |                     WrkMast wrkMast = wrkMastMapper.selectPakInStep4(staProtocol.getSiteId(),"3"); | 
 |  |  |                 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isPakMk() && staProtocol.getWorkNo() == 0 && !staProtocol.isOutEnable() && staProtocol.isInEnable()) { | 
 |  |  |                     WrkMast wrkMast = wrkMastMapper.selectPakInStep4(staProtocol.getSiteId(), "3"); | 
 |  |  |                     if (wrkMast == null) { | 
 |  |  |                         WrkMast wrkMast1 = wrkMastMapper.selectPakInStep5(staProtocol.getSiteId(),"3"); | 
 |  |  |                         if (Cools.isEmpty(wrkMast1) && staProtocol.isEmptyMk()){ | 
 |  |  |                         WrkMast wrkMast1 = wrkMastMapper.selectPakInStep5(staProtocol.getSiteId(), "3"); | 
 |  |  |                         if (Cools.isEmpty(wrkMast1) && staProtocol.isEmptyMk()) { | 
 |  |  |                             WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(staProtocol.getSiteId() + 19999L); | 
 |  |  |                             if (Cools.isEmpty(wrkMastSta)){ | 
 |  |  |                                 WrkMastSta wrkMastSta1 = new WrkMastSta(new Date(),staProtocol.getSiteId()); | 
 |  |  |                             if (Cools.isEmpty(wrkMastSta)) { | 
 |  |  |                                 WrkMastSta wrkMastSta1 = new WrkMastSta(new Date(), staProtocol.getSiteId()); | 
 |  |  |                                 wrkMastSta1.setType(2); | 
 |  |  |                                 wrkMastSta1.setWrkType(1); | 
 |  |  |                                 wrkMastStaMapper.insert(wrkMastSta1); | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 堆垛机站出库到出库站 | 
 |  |  |      */ | 
 |  |  |     public synchronized void crnStnToOutStn1() { | 
 |  |  |         for (CrnSlave crnSlave : slaveProperties.getCrn()) { | 
 |  |  |             // 遍历堆垛机出库站 | 
 |  |  |             for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) { | 
 |  |  |                 // 查询工作档 | 
 |  |  |                 WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(crnStn.getStaNo()); | 
 |  |  |                 if (wrkMast == null) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 // 判断工作档条件 | 
 |  |  |                 if ((wrkMast.getIoType() < 100 && wrkMast.getIoType() != 12) || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 // 判断吊车是否实际已完成,且电脑状态在move中,以备电脑进行更新工作档 | 
 |  |  |                 CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkMast.getCrnNo()); | 
 |  |  |                 CrnProtocol crnProtocol = crnThread.getCrnProtocol(); | 
 |  |  |                 if (crnProtocol.statusType == CrnStatusType.FETCHING || crnProtocol.statusType == CrnStatusType.PUTTING) { | 
 |  |  |                     // 移动中 | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 //  判断堆垛机状态等待确认 | 
 |  |  |                 if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue()) | 
 |  |  |                         && crnProtocol.statusType == CrnStatusType.WAITING | 
 |  |  |                         && crnProtocol.forkPosType == CrnForkPosType.HOME) { | 
 |  |  |  | 
 |  |  |                     // 命令下发区 -------------------------------------------------------------------------- | 
 |  |  |                     // 更新工作档状态为14 | 
 |  |  |                     wrkMast.setWrkSts(13L); | 
 |  |  |                     wrkMast.setCrnEndTime(new Date()); | 
 |  |  |                     if (wrkMastMapper.updateById(wrkMast) != 0) { | 
 |  |  |                         // 复位堆垛机 | 
 |  |  |                         crnThread.setResetFlag(true); | 
 |  |  |                     } else { | 
 |  |  |                         log.error("更新工作档的工作状态为14失败!!! [工作号:{}]", wrkMast.getWrkNo()); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  | 
 |  |  |  | 
 |  |  |                         // 下发站点信息 | 
 |  |  |                         staProtocol.setWorkNo(wrkMast.getWrkNo()); | 
 |  |  |                         staProtocol.setStaNo(RouteUtils.CrnStaEnd(wrkMast.getStaNo(),wrkMast.getSourceStaNo())); | 
 |  |  |                         staProtocol.setStaNo(RouteUtils.CrnStaEnd(wrkMast.getStaNo(), wrkMast.getSourceStaNo())); | 
 |  |  |                         if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) { | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  | 
 |  |  |      * 入出库  ===>>  堆垛机入出库作业下发 | 
 |  |  |      */ | 
 |  |  |     public synchronized void crnIoExecute() { | 
 |  |  |         try{ | 
 |  |  |         try { | 
 |  |  |             for (CrnSlave crn : slaveProperties.getCrn()) { | 
 |  |  |                 // 获取堆垛机信息 | 
 |  |  |                 CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); | 
 |  |  | 
 |  |  | //            this.crnRebackHp(crnProtocol, crnThread); | 
 |  |  |  | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |             log.error("堆垛机出入库下发报错"+e); | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("堆垛机出入库下发报错" + e); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |      * 搜索RGV车。通过目标站搜索哪台车可用 | 
 |  |  |      */ | 
 |  |  |     public synchronized Integer searchRgvNo(Integer staNo) { | 
 |  |  |         try{ | 
 |  |  |         try { | 
 |  |  |             BasDevp basDevp = basDevpService.selectById(staNo); | 
 |  |  |             if (basDevp == null) { | 
 |  |  |                 return null;//目标站不存在 | 
 |  |  | 
 |  |  |                         return rgvThread.getSlave().getId(); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             }else { | 
 |  |  |             } else { | 
 |  |  |                 //小于或等于1台车,分配全路径 | 
 |  |  |                 BasRgvPath basRgvPath = basRgvPathService.selectByRgvNo(0);//获取默认路径 | 
 |  |  |                 if (basRgvPath == null) { | 
 |  |  | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             return null; | 
 |  |  |         }catch (Exception e){ | 
 |  |  |             log.error("搜索RGV车。通过目标站搜索哪台车可用"+e); | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("搜索RGV车。通过目标站搜索哪台车可用" + e); | 
 |  |  |             return null; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | 
 |  |  |      */ | 
 |  |  |     public synchronized void crnStnToLoc1(CrnSlave slave, CrnProtocol crnProtocol) { | 
 |  |  |         List<WrkMast> wrkMasts = wrkMastMapper.selectPakInStep12(slave.getId()); | 
 |  |  |         for(WrkMast wrkMast : wrkMasts){ | 
 |  |  |         for (WrkMast wrkMast : wrkMasts) { | 
 |  |  |             if (wrkMast == null) { | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             CrnSlave.CrnStn crnStn = null; | 
 |  |  |             for (CrnSlave.CrnStn crnStn1 : slave.getCrnInStn()){ | 
 |  |  |                 if(crnStn1.getStaNo().equals(wrkMast.getStaNo())){ | 
 |  |  |             for (CrnSlave.CrnStn crnStn1 : slave.getCrnInStn()) { | 
 |  |  |                 if (crnStn1.getStaNo().equals(wrkMast.getStaNo())) { | 
 |  |  |                     crnStn = crnStn1; | 
 |  |  |                     break; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             if(Cools.isEmpty(crnStn)){ | 
 |  |  |             if (Cools.isEmpty(crnStn)) { | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             boolean flag = false; | 
 |  |  |             boolean flag = true; | 
 |  |  |             // 获取堆垛机入库站信息 | 
 |  |  |             DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); | 
 |  |  |             StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()); | 
 |  |  |             if (staProtocol == null) { | 
 |  |  |                 continue; | 
 |  |  |             } else { | 
 |  |  |                 staProtocol = staProtocol.clone(); | 
 |  |  |             } | 
 |  |  |             // 查询站点详细信息 | 
 |  |  |             BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo()); | 
 |  |  |             if (staDetl == null) { | 
 |  |  |                 log.error("入库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo()); | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  |             if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable() | 
 |  |  |                     && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) { | 
 |  |  |                 flag = true; | 
 |  |  |             } | 
 |  |  |             if (!flag) { | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  | //            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); | 
 |  |  | //            StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()); | 
 |  |  | //            if (staProtocol == null) { | 
 |  |  | //                continue; | 
 |  |  | //            } else { | 
 |  |  | //                staProtocol = staProtocol.clone(); | 
 |  |  | //            } | 
 |  |  | //            // 查询站点详细信息 | 
 |  |  | //            BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo()); | 
 |  |  | //            if (staDetl == null) { | 
 |  |  | //                log.error("入库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo()); | 
 |  |  | //                continue; | 
 |  |  | //            } | 
 |  |  | //            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() > 0 && staProtocol.isInEnable() | 
 |  |  | //                    && staDetl.getCanining() != null && staDetl.getCanining().equals("Y")) { | 
 |  |  | //                flag = true; | 
 |  |  | //            } | 
 |  |  | //            if (!flag) { | 
 |  |  | //                continue; | 
 |  |  | //            } | 
 |  |  |  | 
 |  |  |             // 获取库位信息 | 
 |  |  |             LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); | 
 |  |  | 
 |  |  |  | 
 |  |  |                 } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) { | 
 |  |  |                     // 此标记避免多次执行移库任务 | 
 |  |  |                     if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) { | 
 |  |  | ////                    if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) { | 
 |  |  | //                        wrkMast.setUpdMk("Y"); | 
 |  |  | //                        wrkMast.setIoPri(14D); | 
 |  |  | //                        wrkMastMapper.updateById(wrkMast); | 
 |  |  | //                        // 生成工作档,将浅库位移转到新的库位中 | 
 |  |  | //                        moveLocForDeepLoc(slave, shallowLoc); | 
 |  |  | //                        // 生成工作档、改变浅库位的源库/目标库 库位状态、下发堆垛机命令(立马执行) | 
 |  |  | ////                        moveLocForDeepLocPakin(slave, shallowLoc, wrkMast); | 
 |  |  | ////                    } | 
 |  |  | //                    break; | 
 |  |  |                     WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); | 
 |  |  |                     if (Cools.isEmpty(waitWrkMast)) { | 
 |  |  |                         wrkMast.setUpdMk("Y"); | 
 |  |  |                         wrkMast.setIoPri(14D); | 
 |  |  |                         wrkMastMapper.updateById(wrkMast); | 
 |  |  | 
 |  |  |                         // 生成工作档、改变浅库位的源库/目标库 库位状态、下发堆垛机命令(立马执行) | 
 |  |  | //                        moveLocForDeepLocPakin(slave, shallowLoc, wrkMast); | 
 |  |  |                     } | 
 |  |  |                     continue; | 
 |  |  |                     break; | 
 |  |  |                 } else if (shallowLoc.getLocSts().equals("Q")) { | 
 |  |  |                     WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo); | 
 |  |  |                     if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) { | 
 |  |  | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             // 命令下发区 -------------------------------------------------------------------------- | 
 |  |  |             // 入库命令下发区 -------------------------------------------------------------------------- | 
 |  |  |             CrnCommand crnCommand = new CrnCommand(); | 
 |  |  |             crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 | 
 |  |  |             crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号 | 
 |  |  |             crnCommand.setAckFinish((short) 0);  // 任务完成确认位 | 
 |  |  |             crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转 | 
 |  |  |             crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 源库位排 | 
 |  |  |             crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 源库位列 | 
 |  |  |             crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 源库位层 | 
 |  |  |             //crnCommand.setSourcePosX(crnStn.getRow().shortValue());     // 源库位排 | 
 |  |  |             //crnCommand.setSourcePosY(crnStn.getBay().shortValue());     // 源库位列 | 
 |  |  |             //crnCommand.setSourcePosZ(crnStn.getLev().shortValue());     // 源库位层 | 
 |  |  |             crnCommand.setDestinationPosX(locMast.getRow1().shortValue());     // 目标库位排 | 
 |  |  |             crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 目标库位列 | 
 |  |  |             crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 目标库位层 | 
 |  |  |             crnCommand.setSourceStaNo(crnStn.getPlatNo().shortValue());     // 源库位排 | 
 |  |  |             if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { | 
 |  |  |                 log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); | 
 |  |  |             } else { | 
 |  |  | 
 |  |  |                 wrkMast.setModiTime(now); | 
 |  |  |                 if (wrkMastMapper.updateById(wrkMast) == 0) { | 
 |  |  |                     log.error("修改工作档状态 2.设备上走 => 3.吊车入库中 失败!!,工作号={}", wrkMast.getWrkNo()); | 
 |  |  |                 } else { | 
 |  |  |                     log.info("修改工作档状态 2.设备上走 => 3.吊车入库中 cg!!,工作号={},zhuangty={}", wrkMast.getWrkNo(), wrkMast.getWrkSts()); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  | 
 |  |  |      */ | 
 |  |  |     public synchronized void locToCrnStn1(CrnSlave slave, CrnProtocol crnProtocol) { | 
 |  |  |         List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep12(slave.getId()); | 
 |  |  |         Integer count = wrkMastMapper.countPakOut(); | 
 |  |  |  | 
 |  |  |         for (WrkMast wrkMast : wrkMasts) { | 
 |  |  |             if (wrkMast.getIoType() == 110 && wrkMast.getStaNo() == 2101) { | 
 |  |  |  | 
 |  |  |             } else { | 
 |  |  |                 if (count > 30) { //设备上走托盘不超过30个 | 
 |  |  | //                    log.info("托盘数量不超过指定数量"); | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             // 已经存在吊车执行任务时,则过滤 | 
 |  |  |             if (wrkMastMapper.selectWorking(slave.getId()) != null) { | 
 |  |  |                 break; | 
 |  |  | //                        return; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             // 判断堆垛机站点是否可用 | 
 |  |  |             if (!crnEnabled(wrkMast)) { | 
 |  |  |                 break; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             if (wrkMast == null) { | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             CrnSlave.CrnStn crnStn = null; | 
 |  |  |             for (CrnSlave.CrnStn crnStn1 : slave.getCrnOutStn()){ | 
 |  |  |                 if(crnStn1.getStaNo().equals(wrkMast.getSourceStaNo())){ | 
 |  |  |             for (CrnSlave.CrnStn crnStn1 : slave.getCrnOutStn()) { | 
 |  |  |                 if (crnStn1.getStaNo().equals(wrkMast.getSourceStaNo())) { | 
 |  |  |                     crnStn = crnStn1; | 
 |  |  |                     break; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             if(Cools.isEmpty(crnStn)){ | 
 |  |  |             if (Cools.isEmpty(crnStn)) { | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             log.info("{}号堆垛机选定的出库口是{}", crnProtocol.getCrnNo(), crnStn.getPlatNo()); | 
 |  |  |  | 
 |  |  |             // 工作档状态判断 | 
 |  |  |             if (wrkMast.getIoType() < 100 || wrkMast.getSourceStaNo() == null) { | 
 |  |  |             if ((wrkMast.getIoType() < 100 && wrkMast.getIoType() != 12) || wrkMast.getSourceStaNo() == null) { | 
 |  |  |                 log.error("查询工作档数据不符合条件--入出类型/站点, 工作号={},源库位={},入出类型={}", wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getIoType()); | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  |             // 获取堆垛机出库站信息 | 
 |  |  |             SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); | 
 |  |  |             StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()); | 
 |  |  |             if (staProtocol == null) { | 
 |  |  |                 break; | 
 |  |  | //                    continue; | 
 |  |  |             } else { | 
 |  |  |                 staProtocol = staProtocol.clone(); | 
 |  |  |             } | 
 |  |  |             //SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); | 
 |  |  |             //StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()); | 
 |  |  | //            if (staProtocol == null) { | 
 |  |  | //                break; | 
 |  |  | ////                    continue; | 
 |  |  | //            } else { | 
 |  |  | //                staProtocol = staProtocol.clone(); | 
 |  |  | //            } | 
 |  |  |  | 
 |  |  | //            // 入出库模式判断 | 
 |  |  | //            if (devpThread.ioMode != IoModeType.PAKOUT_MODE) { continue; } | 
 |  |  |             if (wrkMast.getStaNo() == 204 && devpThread.ioModeOf2F != IoModeType.PAKOUT_MODE) { | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  | //            if (wrkMast.getStaNo() == 204 && devpThread.ioModeOf2F != IoModeType.PAKOUT_MODE) { | 
 |  |  | //                continue; | 
 |  |  | //            } | 
 |  |  |  | 
 |  |  |             // 查询站点详细信息 | 
 |  |  |             BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo()); | 
 |  |  | 
 |  |  | //                    continue; | 
 |  |  |             } | 
 |  |  |             // 判断堆垛机出库站状态 | 
 |  |  |             if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") | 
 |  |  |                     && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) { | 
 |  |  |             //if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") | 
 |  |  |             //        && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable()) { | 
 |  |  |             if (staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")) { | 
 |  |  |                 // 命令下发区 -------------------------------------------------------------------------- | 
 |  |  |  | 
 |  |  |                 // 堆垛机控制过滤 | 
 |  |  | 
 |  |  |                             moveLocForDeepLoc(slave, shallowLoc); | 
 |  |  |                         } | 
 |  |  |                         log.error("{}任务出库失败,浅库位堵塞!浅库位号:{}", wrkMast.getWrkNo(), shallowLocNo); | 
 |  |  |                         continue; | 
 |  |  |                         break; | 
 |  |  |                     } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")) { | 
 |  |  |                         WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo); | 
 |  |  |                         if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) { | 
 |  |  | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 // 已经存在吊车执行任务时,则过滤 | 
 |  |  |                 if (wrkMastMapper.selectWorking(slave.getId()) != null) { | 
 |  |  |                     break; | 
 |  |  | //                        return; | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 // 1.堆垛机开始移动 | 
 |  |  |                 // 1.堆垛机开始移动   出库命令 | 
 |  |  |                 CrnCommand crnCommand = new CrnCommand(); | 
 |  |  |                 crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 | 
 |  |  |                 crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号 | 
 |  |  | 
 |  |  |                 crnCommand.setSourcePosX(sourceSta.getRow1().shortValue());     // 源库位排 | 
 |  |  |                 crnCommand.setSourcePosY(sourceSta.getBay1().shortValue());     // 源库位列 | 
 |  |  |                 crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue());     // 源库位层 | 
 |  |  |                 crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 目标库位排 | 
 |  |  |                 crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 目标库位列 | 
 |  |  |                 crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 目标库位层 | 
 |  |  | //                crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 目标库位排 | 
 |  |  | //                crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 目标库位列 | 
 |  |  | //                crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 目标库位层 | 
 |  |  |                 crnCommand.setDestinationStaNo(crnStn.getPlatNo().shortValue()); | 
 |  |  |                 if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { | 
 |  |  |                     log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); | 
 |  |  |                 } else { | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 确认出库码头是否可用 | 
 |  |  |      * | 
 |  |  |      * @param wrkMast 工作档 | 
 |  |  |      * @return 是否可用 | 
 |  |  |      */ | 
 |  |  |     private boolean crnEnabled(WrkMast wrkMast) { | 
 |  |  |  | 
 |  |  |         // 获取请求头 | 
 |  |  |         Map<String, Object> headers = new HashMap<>(); | 
 |  |  |         headers.put("digi-type", "sync "); | 
 |  |  |         headers.put("digi-protocol", "raw"); | 
 |  |  |         headers.put("digi-datakey", " XCommon.ImportData"); | 
 |  |  |  | 
 |  |  |         // 构造请求体 | 
 |  |  |         JSONObject jsonObject = new JSONObject(); | 
 |  |  |         jsonObject.put("staNo", wrkMast.getSourceStaNo()); | 
 |  |  |         jsonObject.put("workNo", wrkMast.getWrkNo()); | 
 |  |  |         String body = jsonObject.toJSONString(); | 
 |  |  |  | 
 |  |  |         boolean success; | 
 |  |  |         String response; | 
 |  |  |         try { | 
 |  |  |             response = new HttpHandler.Builder() | 
 |  |  |                     .setUri(GhjtApiConstant.GWCS_IP_PORT) | 
 |  |  |                     .setPath(GhjtApiConstant.GWCS_CKMT_URL) | 
 |  |  |                     .setHeaders(headers) | 
 |  |  |                     .setJson(body) | 
 |  |  |                     .build() | 
 |  |  |                     .doPost(); | 
 |  |  |             if (!Cools.isEmpty(response)) { | 
 |  |  |                 JSONObject jsonObject1 = JSONObject.parseObject(response); | 
 |  |  |                 if ((Integer) jsonObject1.get("code") == 200 && (Integer) jsonObject1.get("data") == 1) { | 
 |  |  |                     success = true; | 
 |  |  |                 } else { | 
 |  |  |                     success = false; | 
 |  |  |                     log.info("确认出库码头是否可用失败!!!url:{};request:{};response:{}", GhjtApiConstant.GWCS_IP_PORT + GhjtApiConstant.GWCS_CKMT_URL, body, response); | 
 |  |  |                 } | 
 |  |  |             } else { | 
 |  |  |                 log.error("确认出库码头是否可用失败!!!url:{};request:{};response:{}", GhjtApiConstant.GWCS_IP_PORT + GhjtApiConstant.GWCS_CKMT_URL, body, response); | 
 |  |  |                 throw new CoolException("确认出库码头是否可用失败"); | 
 |  |  |             } | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             success = false; | 
 |  |  |             log.error("确认出库码头是否可用异常,工作号:{},{}", wrkMast.getWrkNo(), e.getMessage()); | 
 |  |  |         } finally { | 
 |  |  |  | 
 |  |  | //            try { | 
 |  |  | //                // 保存接口日志 | 
 |  |  | //                apiLogService.save( | 
 |  |  | //                        "从出库码头到出库口", | 
 |  |  | //                        MesConstant.URL + MesConstant.PAKIN_URL, | 
 |  |  | //                        null, | 
 |  |  | //                        "127.0.0.1", | 
 |  |  | //                        jsonObject.toJSONString(), | 
 |  |  | //                        response, | 
 |  |  | //                        success | 
 |  |  | //                ); | 
 |  |  | //            } catch (Exception e) { | 
 |  |  | //                log.error("接口日志保存异常", e); | 
 |  |  | //            } | 
 |  |  |         } | 
 |  |  |         return success; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 查找工作状态为2(设备上走),且RGV入库接驳站符合的的入库工作档,提取出最多2笔 | 
 |  |  |      * | 
 |  |  |      * @param slave | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     public synchronized List<WrkMast> getRgvInTask(RgvSlave slave){ | 
 |  |  |     public synchronized List<WrkMast> getRgvInTask(RgvSlave slave) { | 
 |  |  |         List<WrkMast> wrkMastTask = new ArrayList<>(); | 
 |  |  |         List<Integer> staNos = new ArrayList<>(); | 
 |  |  |         for (RgvSlave.RgvStn rgvStn : slave.getRgvInSStn()) { | 
 |  |  |             staNos.add(rgvStn.getStaNo()); | 
 |  |  |         } | 
 |  |  |         if(staNos.size() < 1){ | 
 |  |  |         if (staNos.size() < 1) { | 
 |  |  |             return null; | 
 |  |  |         } | 
 |  |  |         List<WrkMast> wrkMasts = wrkMastMapper.selectRgvInStep1(slave.getId(), staNos); | 
 |  |  |         for(WrkMast wrkMast : wrkMasts){ | 
 |  |  |         for (WrkMast wrkMast : wrkMasts) { | 
 |  |  |             Integer plcId = 0; | 
 |  |  |             for (RgvSlave.RgvStn rgvStn : slave.getRgvInSStn()) { | 
 |  |  |                 if(rgvStn.getStaNo() == wrkMast.getRgvSstaNo()){ | 
 |  |  |                 if (rgvStn.getStaNo() == wrkMast.getRgvSstaNo()) { | 
 |  |  |                     plcId = rgvStn.getDevpPlcId(); | 
 |  |  |                     break; | 
 |  |  |                 } | 
 |  |  | 
 |  |  |                 flag2 = true; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             if(flag1 && flag2){ | 
 |  |  |             if (flag1 && flag2) { | 
 |  |  |                 wrkMastTask.add(wrkMast); | 
 |  |  |                 if(wrkMastTask.size() >= 2) break; | 
 |  |  |                 if (wrkMastTask.size() >= 2) break; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         return wrkMastTask; | 
 |  |  | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 查找工作状态为14(出库完成),且RGV出库接驳站符合的的出库工作档,提取出最多2笔 | 
 |  |  |      * | 
 |  |  |      * @param slave | 
 |  |  |      * @return | 
 |  |  |      */ | 
 |  |  |     public synchronized List<WrkMast> getRgvOutTask(RgvSlave slave){ | 
 |  |  |     public synchronized List<WrkMast> getRgvOutTask(RgvSlave slave) { | 
 |  |  |         List<WrkMast> wrkMastTask = new ArrayList<>(); | 
 |  |  |         List<Integer> staNos = new ArrayList<>(); | 
 |  |  |         for (RgvSlave.RgvStn rgvStn : slave.getRgvOutSStn()) { | 
 |  |  |             staNos.add(rgvStn.getStaNo()); | 
 |  |  |         } | 
 |  |  |         if(staNos.size() < 1){ | 
 |  |  |         if (staNos.size() < 1) { | 
 |  |  |             return null; | 
 |  |  |         } | 
 |  |  |         List<WrkMast> wrkMasts = wrkMastMapper.selectRgvOutStep1(slave.getId(), staNos); | 
 |  |  |         for(WrkMast wrkMast : wrkMasts){ | 
 |  |  |         for (WrkMast wrkMast : wrkMasts) { | 
 |  |  |             Integer plcId = 0; | 
 |  |  |             for (RgvSlave.RgvStn rgvStn : slave.getRgvOutSStn()) { | 
 |  |  |                 if(rgvStn.getStaNo() == wrkMast.getRgvSstaNo()){ | 
 |  |  |                 if (rgvStn.getStaNo() == wrkMast.getRgvSstaNo()) { | 
 |  |  |                     plcId = rgvStn.getDevpPlcId(); | 
 |  |  |                     break; | 
 |  |  |                 } | 
 |  |  | 
 |  |  |                 flag2 = true; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             if(flag1 && flag2){ | 
 |  |  |             if (flag1 && flag2) { | 
 |  |  |                 wrkMastTask.add(wrkMast); | 
 |  |  |                 if(wrkMastTask.size() >= 2) break; | 
 |  |  |                 if (wrkMastTask.size() >= 2) break; | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         return wrkMastTask; | 
 |  |  | 
 |  |  |         // 堆垛机控制过滤 | 
 |  |  |         if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         // 双深库位且浅库位有货,则需先对浅库位进行库位移转 | 
 |  |  |         if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) { | 
 |  |  |             String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo()); | 
 |  |  |             LocMast shallowLoc = locMastService.selectById(shallowLocNo); | 
 |  |  |             // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬! | 
 |  |  |             if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) { | 
 |  |  |                 WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); | 
 |  |  |                 if (null == waitWrkMast) { | 
 |  |  |                     log.error("{}库位异常,未检索到相应工作档!", shallowLocNo); | 
 |  |  |                 } else { | 
 |  |  |                     if (waitWrkMast.getWrkSts() == 11) { | 
 |  |  |                         waitWrkMast.setIoPri(15D); | 
 |  |  |                         waitWrkMast.setModiTime(new Date()); | 
 |  |  |                         if (wrkMastMapper.updateById(waitWrkMast) == 0) { | 
 |  |  |                             log.error("调整工作档优先级失败!工作号={}", waitWrkMast.getWrkNo()); | 
 |  |  |                         } | 
 |  |  |                         return; | 
 |  |  |                     } else { | 
 |  |  |  | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) { | 
 |  |  | //                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); | 
 |  |  |                 //2022-08-16 modify,不根据updmk标记移库任务(容易被取消导致堵塞),查询工作档是否存在任务 | 
 |  |  |                 WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo); | 
 |  |  |                 // 此标记避免多次执行移库任务 | 
 |  |  | //                            if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk()) | 
 |  |  | //                                || Cools.isEmpty(waitWrkMast)) { | 
 |  |  |                 if (Cools.isEmpty(waitWrkMast)) { | 
 |  |  |                     wrkMast.setUpdMk("Y"); | 
 |  |  |                     wrkMastMapper.updateById(wrkMast); | 
 |  |  |                     // 生成工作档,将浅库位移转到新的库位中 | 
 |  |  |                     moveLocForDeepLoc(slave, shallowLoc); | 
 |  |  |                 } | 
 |  |  |                 log.error("{}任务出库失败,浅库位堵塞!浅库位号:{}", wrkMast.getWrkNo(), shallowLocNo); | 
 |  |  |                 return; | 
 |  |  |             } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")) { | 
 |  |  |                 WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo); | 
 |  |  |                 if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) { | 
 |  |  |                     return; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         // 已经存在吊车执行任务时,则过滤 | 
 |  |  | 
 |  |  |                     // 入库 + 库位转移  ==> 4.入库完成 | 
 |  |  |                     if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) { | 
 |  |  |                         wrkMast.setWrkSts(4L); | 
 |  |  |                         if (wrkMast.getIoType() == 3) { | 
 |  |  |                             wrkMast.setWrkSts(13L); | 
 |  |  |                         } | 
 |  |  |                     } else { | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  | 
 |  |  |      */ | 
 |  |  |     public synchronized void storeEmptyPlt() { | 
 |  |  |         for (DevpSlave devp : slaveProperties.getDevp()) { | 
 |  |  |             if (devp.getId()==1) continue; | 
 |  |  |             if (devp.getId() == 1) continue; | 
 |  |  |             // 遍历空板入库口 | 
 |  |  |             for (DevpSlave.Sta emptyInSta : devp.getEmptyInSta()) { | 
 |  |  |                 // 获取空板入库站信息 | 
 |  |  | 
 |  |  |  | 
 |  |  |                 // 站点条件判断 | 
 |  |  |                 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() | 
 |  |  |                         && staProtocol.isEmptyMk() && ((staProtocol.getWorkNo() > 32222 && staProtocol.getWorkNo() <= 63333) || staProtocol.getWorkNo()==0)  && staProtocol.isPakMk()) { | 
 |  |  |                         && staProtocol.isEmptyMk() && ((staProtocol.getWorkNo() > 32222 && staProtocol.getWorkNo() <= 63333) || staProtocol.getWorkNo() == 0) && staProtocol.isPakMk()) { | 
 |  |  |  | 
 |  |  |                     try { | 
 |  |  |                         LocTypeDto locTypeDto = new LocTypeDto(staProtocol); | 
 |  |  | 
 |  |  |      */ | 
 |  |  |     public synchronized void storeEmptyPlt2() { | 
 |  |  |         for (DevpSlave devp : slaveProperties.getDevp()) { | 
 |  |  |             if (devp.getId()==2) continue; | 
 |  |  |             if (devp.getId() == 2) continue; | 
 |  |  |             // 遍历空板入库口 | 
 |  |  |             for (DevpSlave.Sta emptyInSta : devp.getEmptyInSta()) { | 
 |  |  |                 // 获取空板入库站信息 | 
 |  |  | 
 |  |  |  | 
 |  |  |                 // 站点条件判断 | 
 |  |  |                 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() | 
 |  |  |                         && staProtocol.isEmptyMk() && ((staProtocol.getWorkNo() > 32222 && staProtocol.getWorkNo() <= 63333) || staProtocol.getWorkNo()==0) && staProtocol.isPakMk()) { | 
 |  |  |                         && staProtocol.isEmptyMk() && ((staProtocol.getWorkNo() > 32222 && staProtocol.getWorkNo() <= 63333) || staProtocol.getWorkNo() == 0) && staProtocol.isPakMk()) { | 
 |  |  |                     try { | 
 |  |  |                         WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(staProtocol.getSiteId() + 19999L); | 
 |  |  |                         if (Cools.isEmpty(wrkMastSta)){ | 
 |  |  |                             WrkMastSta wrkMastSta1 = new WrkMastSta(new Date(),staProtocol.getSiteId()); | 
 |  |  |                         if (Cools.isEmpty(wrkMastSta)) { | 
 |  |  |                             WrkMastSta wrkMastSta1 = new WrkMastSta(new Date(), staProtocol.getSiteId()); | 
 |  |  |                             wrkMastSta1.setType(2); | 
 |  |  |                             wrkMastSta1.setWrkType(1);//工作类型  1:取(叠盘)  2:拆盘  3:取放 5:满取  6:满放 | 
 |  |  |                             wrkMastStaMapper.insert(wrkMastSta1); | 
 |  |  | 
 |  |  |      * 空栈板初始化入库,叉车入库站放货 | 
 |  |  |      */ | 
 |  |  |     public synchronized void storeEmptyPlt3() { | 
 |  |  |         try{ | 
 |  |  |             for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
 |  |  |         try { | 
 |  |  |             RgvOneSign rgvOneSign = rgvOneSignMapper.selectOneSign(); | 
 |  |  |             if (Cools.isEmpty(rgvOneSign) || rgvOneSign.getRgvOneSign() == 1) { | 
 |  |  |                 return; | 
 |  |  |             } | 
 |  |  |             for (RgvSlave rgvSlave : slaveProperties.getRgv()) { | 
 |  |  |                 RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
 |  |  |                 RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
 |  |  |                 if (rgvProtocol == null) { | 
 |  |  | 
 |  |  |                         && rgvProtocol.getModeType() == RgvModeType.AUTO | 
 |  |  |                         && rgvProtocol.getStatusType1() == RgvStatusType.IDLE | 
 |  |  |                         && rgvProtocol.getStatusType2() == RgvStatusType.IDLE | 
 |  |  |                         && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 | 
 |  |  |                         &&  (rgvProtocol.getLoaded2()==2  || rgvProtocol.getLoaded2()==3 ) ////0 无物;1 一层无物二层有物  ;2一层有物二层无物 (只能满放);3  1、2层都有物  4:()只允许拆盘 | 
 |  |  |                         && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0 | 
 |  |  | //                        &&  (rgvProtocol.getLoaded2()==2  || rgvProtocol.getLoaded2()==3 ) ////0 无物;1 一层无物二层有物  ;2一层有物二层无物 (只能满放);3  1、2层都有物  4:()只允许拆盘 | 
 |  |  |                         && rgvProtocol.getLoaded2() == 3 ////0 无物;1 一层无物二层有物  ;2一层有物二层无物 (只能满放);3  1、2层都有物  4:()只允许拆盘 | 
 |  |  |                 ) { | 
 |  |  |                     try { | 
 |  |  |                         WrkMast wrkMast1 = wrkMastMapper.selectPakOutStep3(122); | 
 |  |  |                         if (!Cools.isEmpty(wrkMast1)){ | 
 |  |  |                         if (!Cools.isEmpty(wrkMast1)) { | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |                         // 获取空板入库站信息 | 
 |  |  | 
 |  |  |                         SearchLocParam param = new SearchLocParam(); | 
 |  |  |                         param.setIoType(10); | 
 |  |  |                         param.setSourceStaNo(122); | 
 |  |  |                         param.setLocType1((short)1); | 
 |  |  |                         param.setLocType1((short) 1); | 
 |  |  |                         param.setRgvNo(rgvProtocol.getRgvNo()); | 
 |  |  |                         String response = new HttpHandler.Builder() | 
 |  |  |                                 .setUri(wmsUrl) | 
 |  |  |                                 .setPath("/rpc/pakin/empty/loc/v1") | 
 |  |  | 
 |  |  |                             StartupDto dto = jsonObject.getObject("data", StartupDto.class); | 
 |  |  |                             // 更新站点信息 且 下发plc命令 | 
 |  |  |                             WrkMast wrkMast = wrkMastMapper.selectPakInStep3(dto.getWorkNo()); | 
 |  |  |                             if (!Cools.isEmpty(wrkMast) && wrkMast.getIoType()==10 && wrkMast.getWrkSts()==2){ | 
 |  |  |                             if (!Cools.isEmpty(wrkMast) && wrkMast.getIoType() == 10 && wrkMast.getWrkSts() == 2) { | 
 |  |  |                                 WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(wrkMast.getWrkNo().longValue()); | 
 |  |  |                                 if (Cools.isEmpty(wrkMastSta)){ | 
 |  |  |                                     WrkMastSta wrkMastSta1 = new WrkMastSta(new Date(),wrkMast.getStaNo()); | 
 |  |  |                                 if (Cools.isEmpty(wrkMastSta)) { | 
 |  |  |                                     WrkMastSta wrkMastSta1 = new WrkMastSta(new Date(), wrkMast.getStaNo()); | 
 |  |  |                                     wrkMastSta1.setWrkNo(wrkMast.getWrkNo().longValue()); | 
 |  |  |                                     wrkMastSta1.setType(2); | 
 |  |  |                                     wrkMastSta1.setWrkType(6);//工作类型  1:取(叠盘)  2:拆盘  3:取放 5:满取  6:满放 | 
 |  |  | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("3933行执行小车放空板任务下发失败"); | 
 |  |  |             log.error("3933行"+e); | 
 |  |  |             log.error("3933行" + e); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |                         ledCommand.setTitle("空板出库"); | 
 |  |  |                         ledCommand.setEmptyMk(true); | 
 |  |  |                         break; | 
 |  |  |                     case 212: | 
 |  |  |                         ledCommand.setTitle("空板出库"); | 
 |  |  |                         ledCommand.setEmptyMk(true); | 
 |  |  |                         break; | 
 |  |  |                     default: | 
 |  |  |                         log.error("任务入出库类型错误!!![工作号:{}] [入出库类型:{}]", wrkMast.getWrkNo(), wrkMast.getIoType()); | 
 |  |  |                         break; | 
 |  |  | 
 |  |  |             // 命令下发 ------------------------------------------------------------------------------- | 
 |  |  |             if (!commands.isEmpty()) { | 
 |  |  | //                if (led.getId() == 7) { | 
 |  |  |                     if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, commands))) { | 
 |  |  |                         log.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); | 
 |  |  |                         continue; | 
 |  |  |                     } else { | 
 |  |  |                         ledThread.setLedMk(false); | 
 |  |  |                     } | 
 |  |  |                 if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, commands))) { | 
 |  |  |                     log.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); | 
 |  |  |                     continue; | 
 |  |  |                 } else { | 
 |  |  |                     ledThread.setLedMk(false); | 
 |  |  |                 } | 
 |  |  | //                } | 
 |  |  | //                else { | 
 |  |  | //                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) { | 
 |  |  | 
 |  |  |         try { | 
 |  |  |             List<Integer> rows = locMastService.queryDistinctRow(crn.getId()); | 
 |  |  |             LocMast loc = null; | 
 |  |  |  | 
 |  |  |             // 获取备货区配置 | 
 |  |  |             Config config = configMapper.selectConfigByCode("auto_stock_up"); | 
 |  |  |             if (config == null) { | 
 |  |  |                 return; | 
 |  |  |             } | 
 |  |  |             // 备货取是前几列 | 
 |  |  |             int bay1 = Integer.parseInt(config.getValue()); | 
 |  |  |  | 
 |  |  |             for (Integer row : rows) { | 
 |  |  |                 if (Utils.isDeepLoc(slaveProperties, row)) { | 
 |  |  |                     loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1()); | 
 |  |  |                     loc = locMastService.queryFreeLocMastNotBay(row, shallowLoc.getLocType1(), bay1); | 
 |  |  |  | 
 |  |  |                     if (loc != null) { | 
 |  |  |                         if (Utils.isDeepLoc(slaveProperties, loc.getLocNo())) { | 
 |  |  | 
 |  |  |             if (null == loc) { | 
 |  |  |                 for (Integer row : rows) { | 
 |  |  |                     if (Utils.isShallowLoc(slaveProperties, row)) { | 
 |  |  |                         loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1()); | 
 |  |  |                         loc = locMastService.queryFreeLocMastNotBay(row, shallowLoc.getLocType1(), bay1); | 
 |  |  |  | 
 |  |  |                         if (null != loc) {//对应深库位非在库状态,不能移库 | 
 |  |  |                             String deepLoc = Utils.getDeepLoc(slaveProperties, loc.getLocNo()); | 
 |  |  | 
 |  |  |  | 
 |  |  |             if (null == loc) { | 
 |  |  |                 log.error("双深库位 --- 浅库位阻塞异常! 待移转浅库位:" + shallowLoc.getLocNo()); | 
 |  |  |                 throw new CoolException("双深库位 --- 浅库位阻塞异常! 待移转浅库位:" + shallowLoc.getLocNo()); | 
 |  |  |             } | 
 |  |  | //                throw new CoolException("双深库位 --- 浅库位阻塞异常! 待移转浅库位:" + shallowLoc.getLocNo()); | 
 |  |  |             } else { | 
 |  |  |  | 
 |  |  |             // 获取工作号 | 
 |  |  |             int workNo = commonService.getWorkNo(0); | 
 |  |  |             // 保存工作档 | 
 |  |  |             WrkMast wrkMast = new WrkMast(); | 
 |  |  |             wrkMast.setWrkNo(workNo); | 
 |  |  |             wrkMast.setIoTime(new Date()); | 
 |  |  |             wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID | 
 |  |  |             wrkMast.setIoType(11); // 入出库状态: 11.库格移载 | 
 |  |  |             wrkMast.setIoPri(13D); | 
 |  |  |             wrkMast.setCrnNo(crn.getId()); | 
 |  |  |             wrkMast.setSourceLocNo(shallowLoc.getLocNo()); // 源库位 | 
 |  |  |             wrkMast.setLocNo(loc.getLocNo()); // 目标库位 | 
 |  |  |             wrkMast.setFullPlt(shallowLoc.getFullPlt()); // 满板 | 
 |  |  |             wrkMast.setPicking("N"); // 拣料 | 
 |  |  |             wrkMast.setExitMk("N"); // 退出 | 
 |  |  |             wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("D") ? "Y" : "N"); // 空板 | 
 |  |  |             wrkMast.setBarcode(shallowLoc.getBarcode()); // 托盘码 | 
 |  |  |             wrkMast.setLinkMis("N"); | 
 |  |  |             wrkMast.setAppeTime(new Date()); | 
 |  |  |             wrkMast.setModiTime(new Date()); | 
 |  |  |             int res = wrkMastMapper.insert(wrkMast); | 
 |  |  |             if (res == 0) { | 
 |  |  |                 throw new CoolException("保存工作档失败"); | 
 |  |  |             } | 
 |  |  |             // 工作档明细保存 | 
 |  |  |             if (shallowLoc.getLocSts().equals("F")) { | 
 |  |  |                 List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", shallowLoc.getLocNo())); | 
 |  |  |                 for (LocDetl locDetl : locDetls) { | 
 |  |  |                     WrkDetl wrkDetl = new WrkDetl(); | 
 |  |  |                     wrkDetl.setWrkNo(workNo); | 
 |  |  |                     wrkDetl.setIoTime(new Date()); | 
 |  |  |                     wrkDetl.setAnfme(locDetl.getAnfme()); | 
 |  |  |                     VersionUtils.setWrkDetl(wrkDetl, locDetl); // 版本控制 | 
 |  |  |                     wrkDetl.setAppeTime(new Date()); | 
 |  |  |                     wrkDetl.setModiTime(new Date()); | 
 |  |  |                     if (!wrkDetlService.insert(wrkDetl)) { | 
 |  |  |                         throw new CoolException("保存工作档明细失败"); | 
 |  |  |                 // 获取工作号 | 
 |  |  |                 int workNo = commonService.getWorkNo(0); | 
 |  |  |                 // 保存工作档 | 
 |  |  |                 WrkMast wrkMast = new WrkMast(); | 
 |  |  |                 wrkMast.setWrkNo(workNo); | 
 |  |  |                 wrkMast.setIoTime(new Date()); | 
 |  |  |                 wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID | 
 |  |  |                 wrkMast.setIoType(11); // 入出库状态: 11.库格移载 | 
 |  |  |                 wrkMast.setIoPri(13D); | 
 |  |  |                 wrkMast.setCrnNo(crn.getId()); | 
 |  |  |                 wrkMast.setSourceLocNo(shallowLoc.getLocNo()); // 源库位 | 
 |  |  |                 wrkMast.setLocNo(loc.getLocNo()); // 目标库位 | 
 |  |  |                 wrkMast.setFullPlt(shallowLoc.getFullPlt()); // 满板 | 
 |  |  |                 wrkMast.setPicking("N"); // 拣料 | 
 |  |  |                 wrkMast.setExitMk("N"); // 退出 | 
 |  |  |                 wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("D") ? "Y" : "N"); // 空板 | 
 |  |  |                 wrkMast.setBarcode(shallowLoc.getBarcode()); // 托盘码 | 
 |  |  |                 wrkMast.setLinkMis("N"); | 
 |  |  |                 wrkMast.setAppeTime(new Date()); | 
 |  |  |                 wrkMast.setModiTime(new Date()); | 
 |  |  |                 int res = wrkMastMapper.insert(wrkMast); | 
 |  |  |                 if (res == 0) { | 
 |  |  |                     throw new CoolException("保存工作档失败"); | 
 |  |  |                 } | 
 |  |  |                 // 工作档明细保存 | 
 |  |  |                 if (shallowLoc.getLocSts().equals("F")) { | 
 |  |  |                     List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", shallowLoc.getLocNo())); | 
 |  |  |                     for (LocDetl locDetl : locDetls) { | 
 |  |  |                         WrkDetl wrkDetl = new WrkDetl(); | 
 |  |  |                         wrkDetl.setWrkNo(workNo); | 
 |  |  |                         wrkDetl.setIoTime(new Date()); | 
 |  |  |                         wrkDetl.setAnfme(locDetl.getAnfme()); | 
 |  |  |                         VersionUtils.setWrkDetl(wrkDetl, locDetl); // 版本控制 | 
 |  |  |                         wrkDetl.setAppeTime(new Date()); | 
 |  |  |                         wrkDetl.setModiTime(new Date()); | 
 |  |  |                         if (!wrkDetlService.insert(wrkDetl)) { | 
 |  |  |                             throw new CoolException("保存工作档明细失败"); | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             // 修改源库位状态 | 
 |  |  |             if (shallowLoc.getLocSts().equals("D") || shallowLoc.getLocSts().equals("F")) { | 
 |  |  |                 shallowLoc.setLocSts("R"); // R.出库预约 | 
 |  |  |                 shallowLoc.setModiTime(new Date()); | 
 |  |  |                 if (!locMastService.updateById(shallowLoc)) { | 
 |  |  |                     throw new CoolException("更新源库位状态失败"); | 
 |  |  |                 // 修改源库位状态 | 
 |  |  |                 if (shallowLoc.getLocSts().equals("D") || shallowLoc.getLocSts().equals("F")) { | 
 |  |  |                     shallowLoc.setLocSts("R"); // R.出库预约 | 
 |  |  |                     shallowLoc.setModiTime(new Date()); | 
 |  |  |                     if (!locMastService.updateById(shallowLoc)) { | 
 |  |  |                         throw new CoolException("更新源库位状态失败"); | 
 |  |  |                     } | 
 |  |  |                 } else { | 
 |  |  |                     throw new CoolException("源库位出库失败"); | 
 |  |  |                 } | 
 |  |  |             } else { | 
 |  |  |                 throw new CoolException("源库位出库失败"); | 
 |  |  |             } | 
 |  |  |             // 修改目标库位状态 | 
 |  |  |             if (loc.getLocSts().equals("O")) { | 
 |  |  |                 loc.setLocSts("S"); // S.入库预约 | 
 |  |  |                 loc.setModiTime(new Date()); | 
 |  |  |                 if (!locMastService.updateById(loc)) { | 
 |  |  |                     throw new CoolException("更新目标库位状态失败"); | 
 |  |  |                 // 修改目标库位状态 | 
 |  |  |                 if (loc.getLocSts().equals("O")) { | 
 |  |  |                     loc.setLocSts("S"); // S.入库预约 | 
 |  |  |                     loc.setModiTime(new Date()); | 
 |  |  |                     if (!locMastService.updateById(loc)) { | 
 |  |  |                         throw new CoolException("更新目标库位状态失败"); | 
 |  |  |                     } | 
 |  |  |                 } else { | 
 |  |  |                     throw new CoolException("移转失败"); | 
 |  |  |                 } | 
 |  |  |             } else { | 
 |  |  |                 throw new CoolException("移转失败"); | 
 |  |  |             } | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("双深库位阻塞,对浅库位进行移转失败", e); | 
 |  |  | 
 |  |  |      */ | 
 |  |  |     public synchronized void stackingCompletionDriveTray() { | 
 |  |  |         try { | 
 |  |  |             int[] staNos=new int[]{216,220,123};//(3个入库站点,1楼1个退货码垛站,2楼两个入库码垛站) | 
 |  |  |             for (int staNo : staNos){ | 
 |  |  |             int[] staNos = new int[]{215, 219};//(2楼两个入库码垛站) | 
 |  |  |             for (int staNo : staNos) { | 
 |  |  |                 BasDevp basDevp = basDevpService.selectById(staNo); | 
 |  |  |                 if (basDevp.getWrkNo()!=9992 || Cools.isEmpty(basDevp.getBarcode())){ | 
 |  |  |                 if ((basDevp.getWrkNo() != 0 && (basDevp.getWrkNo() < 9900 || basDevp.getWrkNo() > 9999)) || Cools.isEmpty(basDevp.getBarcode())) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 Integer zpallet = waitPakinMapper.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet", basDevp.getBarcode()).eq("status","N")); | 
 |  |  |                 if (zpallet<=0){ | 
 |  |  |                 Integer zpallet = waitPakinMapper.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet", basDevp.getBarcode()).eq("status", "N")); | 
 |  |  |                 if (zpallet <= 0) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 // 获取入库站信息 | 
 |  |  | 
 |  |  | //                    continue; | 
 |  |  | //                } | 
 |  |  |  | 
 |  |  |                 if (!staProtocol.isLoading()){ | 
 |  |  |                     log.info("{}站点无物,正在自动调出空板!",staNo); | 
 |  |  |                 if (!staProtocol.isLoading()) { | 
 |  |  |                     log.info("{}站点无物,正在自动调出空板!", staNo); | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 // 判断是否满足入库条件 | 
 |  |  | 
 |  |  |                         && staProtocol.isLoading() | 
 |  |  |                         && staProtocol.isInEnable() | 
 |  |  |                         && !staProtocol.isEmptyMk() | 
 |  |  |                         && staProtocol.getWorkNo() == 9992 | 
 |  |  |                         && (basDevp.getWrkNo() == 0 || (basDevp.getWrkNo() >= 9900 && basDevp.getWrkNo() <= 9999)) | 
 |  |  |                 ) {//&& staProtocol.isPakMk() && !Cools.isEmpty(barcode)) { | 
 |  |  |  | 
 |  |  |                     staProtocol.setWorkNo(9999); | 
 |  |  |                     staProtocol.setStaNo(staNo + 1); | 
 |  |  |                     int workNo = commonService.getWorkNo(5); | 
 |  |  |                     staProtocol.setWorkNo(workNo); | 
 |  |  |                     staProtocol.setStaNo(staNo + 2); | 
 |  |  |                     devpThread.setPakMk(staProtocol.getSiteId(), false); | 
 |  |  |                     boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol)); | 
 |  |  |                     if (!result) { | 
 |  |  | 
 |  |  |  | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |         } catch (Exception e) { | 
 |  |  | //            e.printStackTrace(); | 
 |  |  | //            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
 |  |  |             log.error("其他  ===>> 码垛完成驱动托盘进入下一步(入库前扫码)"+e); | 
 |  |  |             log.error("其他  ===>> 码垛完成驱动托盘进入下一步(入库前扫码)" + e); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 其他  ===>> 码垛完成驱动托盘进入下一步 | 
 |  |  |      */ | 
 |  |  |     public synchronized void stackingCompletionDriveTray2() { | 
 |  |  |         try { | 
 |  |  |             int[] staNos=new int[]{131,135};//(2个入库站点,1楼2个出库码垛站,根据现场修改) | 
 |  |  |             for (int staNo : staNos){ | 
 |  |  |             int[] staNos = new int[]{131, 135};//(2个入库站点,1楼2个出库码垛站,根据现场修改) | 
 |  |  |             for (int staNo : staNos) { | 
 |  |  |                 BasDevp basDevp = basDevpService.selectById(staNo); | 
 |  |  |                 if (Cools.isEmpty(basDevp) || basDevp.getReportSign()!=1){ | 
 |  |  |                 if (Cools.isEmpty(basDevp) || basDevp.getReportSign() != 1) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 if (basDevp.getWrkNo()!=0 && (basDevp.getWrkNo()<9900 || basDevp.getWrkNo()>9999)){ | 
 |  |  |                 if (basDevp.getWrkNo() != 0 && (basDevp.getWrkNo() < 9900 || basDevp.getWrkNo() > 9999)) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 WrkMast wrkMast = wrkMastMapper.selectWrkMastUnstackingOne202(staNo); | 
 |  |  |                 if (Cools.isEmpty(wrkMast)){ | 
 |  |  |                 if (Cools.isEmpty(wrkMast)) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 // 获取站点信息 | 
 |  |  | 
 |  |  | //                    continue; | 
 |  |  | //                } | 
 |  |  |  | 
 |  |  |                 if (!staProtocol.isLoading()){ | 
 |  |  |                     log.info("{}站点无物,异常!",staNo); | 
 |  |  |                 if (!staProtocol.isLoading()) { | 
 |  |  |                     log.info("{}站点无物,异常!", staNo); | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 // 判断是否满足入库条件 | 
 |  |  |                 if (staProtocol.isAutoing() | 
 |  |  |                         && staProtocol.isLoading() | 
 |  |  |                         && staProtocol.isInEnable() | 
 |  |  |                         && (staProtocol.getWorkNo() == 0 || (staProtocol.getWorkNo()>9899 && staProtocol.getWorkNo()<10000)) | 
 |  |  |                         && (staProtocol.getWorkNo() == 0 || (staProtocol.getWorkNo() > 9899 && staProtocol.getWorkNo() < 10000)) | 
 |  |  |                 ) {//&& staProtocol.isPakMk() && !Cools.isEmpty(barcode)) { | 
 |  |  |  | 
 |  |  |                     //任务完成 | 
 |  |  | 
 |  |  |  | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |         } catch (Exception e) { | 
 |  |  | //            e.printStackTrace(); | 
 |  |  | //            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
 |  |  |             log.error("其他  ===>> 码垛完成驱动托盘进入下一步"+e); | 
 |  |  |             log.error("其他  ===>> 码垛完成驱动托盘进入下一步" + e); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |                     staProtocol = staProtocol.clone(); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isPakMk()  && staProtocol.getWorkNo()!=0 && staProtocol.isOutEnable()) {// | 
 |  |  |                 if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isPakMk() && staProtocol.getWorkNo() != 0 && staProtocol.isOutEnable()) {// | 
 |  |  |                     WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo()); | 
 |  |  |  | 
 |  |  |                     if (wrkMast == null) { | 
 |  |  |                         log.error("站点号"+staProtocol.getSiteId()+"未查询到工作档案!"); | 
 |  |  |                         log.error("站点号" + staProtocol.getSiteId() + "未查询到工作档案!"); | 
 |  |  |                         // 无拣料数据 | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                     if (!wrkMast.getSheetNo().equals("2") || wrkMast.getIoType()<100 || wrkMast.getWrkSts()!=14){ | 
 |  |  |                     if (Cools.isEmpty(wrkMast.getSheetNo()) || !wrkMast.getSheetNo().equals("2") || wrkMast.getIoType() < 100 || wrkMast.getWrkSts() != 14) { | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                     if (wrkMast.getIoType()==101){ | 
 |  |  |                     if (wrkMast.getIoType() == 101) { | 
 |  |  |                         //任务完成 | 
 |  |  |                         boolean result1 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(3, staProtocol)); | 
 |  |  |                         wrkMast.setSheetNo("3"); | 
 |  |  |                         wrkMastMapper.updateById(wrkMast); | 
 |  |  |                     }else { | 
 |  |  |                     } else { | 
 |  |  |                         if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) | 
 |  |  |                                 || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) { | 
 |  |  |                             continue; | 
 |  |  | 
 |  |  |                         wrkMast.setSheetNo("3"); | 
 |  |  |                         wrkMastMapper.updateById(wrkMast); | 
 |  |  |  | 
 |  |  |                         try{ | 
 |  |  |                         try { | 
 |  |  |                             Thread.sleep(100); | 
 |  |  |                         }catch (Exception e){ | 
 |  |  |                         } catch (Exception e) { | 
 |  |  |  | 
 |  |  |                         } | 
 |  |  |  | 
 |  |  | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 其他  ===>> 贴标完成驱动托盘进入下一步 | 
 |  |  |      */ | 
 |  |  |     public synchronized void stackingCompletionDriveTray3() { | 
 |  |  |         try { | 
 |  |  |             int[] staNos=new int[]{144};//(1楼1个贴标位,根据现场修改) | 
 |  |  |             for (int staNo : staNos){ | 
 |  |  |             int[] staNos = new int[]{144};//(1楼1个贴标位,根据现场修改) | 
 |  |  |             for (int staNo : staNos) { | 
 |  |  |                 BasDevp basDevp = basDevpService.selectById(staNo); | 
 |  |  |                 if ((basDevp.getWrkNo()<9900 || basDevp.getWrkNo()>9999) && basDevp.getWrkNo()!=32222){ | 
 |  |  |                 if ((basDevp.getWrkNo() < 9900 || basDevp.getWrkNo() > 9999) && basDevp.getWrkNo() != 32222) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 WrkMast wrkMast = wrkMastMapper.selectWrkMastUnstackingOne202(staNo); | 
 |  |  |                 if (Cools.isEmpty(wrkMast)){ | 
 |  |  |                 if (Cools.isEmpty(wrkMast)) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 // 获取站点信息 | 
 |  |  | 
 |  |  | //                    continue; | 
 |  |  | //                } | 
 |  |  |  | 
 |  |  |                 if (!staProtocol.isLoading()){ | 
 |  |  |                     log.info("{}站点无物,异常!",staNo); | 
 |  |  |                 if (!staProtocol.isLoading()) { | 
 |  |  |                     log.info("{}站点无物,异常!", staNo); | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 if (!staProtocol.getWorkNo().equals(wrkMast.getWrkNo())){ | 
 |  |  |                     log.info("站点工作号={} 与贴标工作号={} 不一致,异常!",staProtocol.getWorkNo(),wrkMast.getWrkNo().shortValue()); | 
 |  |  |                 if (!staProtocol.getWorkNo().equals(wrkMast.getWrkNo())) { | 
 |  |  |                     log.info("站点工作号={} 与贴标工作号={} 不一致,异常!", staProtocol.getWorkNo(), wrkMast.getWrkNo().shortValue()); | 
 |  |  |                 } | 
 |  |  |                 // 判断是否满足入库条件 | 
 |  |  |                 if (staProtocol.isAutoing() | 
 |  |  | 
 |  |  |  | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |         } catch (Exception e) { | 
 |  |  | //            e.printStackTrace(); | 
 |  |  | //            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
 |  |  |             log.error("其他  ===>> 贴标完成驱动托盘进入下一步"+e); | 
 |  |  |             log.error("其他  ===>> 贴标完成驱动托盘进入下一步" + e); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |      */ | 
 |  |  |     public synchronized void stackingCompletionDriveTrayOk3() { | 
 |  |  |         try { | 
 |  |  |             int[] staNos=new int[]{118}; | 
 |  |  |             for (int staNo : staNos){ | 
 |  |  |             int[] staNos = new int[]{118}; | 
 |  |  |             for (int staNo : staNos) { | 
 |  |  |                 BasDevp basDevp = basDevpService.selectById(staNo); | 
 |  |  |                 if (Cools.isEmpty(basDevp) || basDevp.getWrkNo()!=0 || basDevp.getReportSign()!=3){ | 
 |  |  |                 if (Cools.isEmpty(basDevp) || basDevp.getWrkNo() != 0 || basDevp.getReportSign() != 3) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 WrkMast wrkMast = wrkMastMapper.selectWrkMastUnstackingOne145(145); | 
 |  |  |                 if (Cools.isEmpty(wrkMast)){ | 
 |  |  |                 if (Cools.isEmpty(wrkMast)) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 // 获取站点信息 | 
 |  |  | 
 |  |  |                     staProtocol = staProtocol.clone(); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 if (!staProtocol.isLoading()){ | 
 |  |  |                     log.info("{}站点无物,异常!",staNo); | 
 |  |  |                 StaProtocol staProtocol147 = devpThread.getStation().get(147); | 
 |  |  |                 if (staProtocol147 == null) { | 
 |  |  |                     continue; | 
 |  |  |                 } else { | 
 |  |  |                     staProtocol147 = staProtocol147.clone(); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 if (!staProtocol.isLoading()) { | 
 |  |  |                     log.info("{}站点无物,异常!", staNo); | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 if (staProtocol147.isLoading()) { | 
 |  |  |                     log.info("{}站点有物!", staProtocol147.getSiteId()); | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 // 判断是否满足入库条件 | 
 |  |  | 
 |  |  |                         && staProtocol.isLoading() | 
 |  |  |                         && !staProtocol.isEmptyMk() | 
 |  |  |                 ) { | 
 |  |  |  | 
 |  |  |                     boolean result3 = MessageQueue.offer(SlaveType.Devp, 1, new Task(3, staProtocol147)); | 
 |  |  |  | 
 |  |  |                     staProtocol.setWorkNo(wrkMast.getWrkNo()); | 
 |  |  |                     staProtocol.setStaNo(wrkMast.getStaNo()); | 
 |  |  |                     devpThread.setPakMk(staProtocol.getSiteId(), false); | 
 |  |  | 
 |  |  |                     if (!result) { | 
 |  |  |                         throw new CoolException("更新plc站点信息失败==>驱动码垛位托盘前进失败!"); | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                     wrkMast.setSheetNo("5"); | 
 |  |  |                     wrkMastMapper.updateById(wrkMast); | 
 |  |  |  | 
 |  |  |                     boolean result4 = MessageQueue.offer(SlaveType.Devp, 1, new Task(4, staProtocol147)); | 
 |  |  |  | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |         } catch (Exception e) { | 
 |  |  | //            e.printStackTrace(); | 
 |  |  | //            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
 |  |  |             log.error("其他  ===>> 退货码垛完成托盘继续下一步"+e); | 
 |  |  |             log.error("其他  ===>> 退货码垛完成托盘继续下一步" + e); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |      */ | 
 |  |  |     public synchronized void stackingCompletionDriveTray4() { | 
 |  |  |         try { | 
 |  |  |             int[] staNos=new int[]{134};//(134有任务,135空闲,则避让) | 
 |  |  |             for (int staNo : staNos){ | 
 |  |  |             int[] staNos = new int[]{134};//(134有任务,135空闲,则避让) | 
 |  |  |             for (int staNo : staNos) { | 
 |  |  |                 BasDevp basDevp = basDevpService.selectById(staNo); | 
 |  |  |                 BasDevp basDevp135 = basDevpService.selectById(135); | 
 |  |  |                 if (basDevp.getWrkNo()==0 || (basDevp.getWrkNo()<10000 && basDevp.getWrkNo()>9899) ){ | 
 |  |  |                 if (basDevp.getWrkNo() == 0 || (basDevp.getWrkNo() < 10000 && basDevp.getWrkNo() > 9899)) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 if (basDevp135.getReportSign()!=0){ | 
 |  |  |                 if (basDevp135.getReportSign() != 0) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 WrkMast wrkMast131 = wrkMastMapper.selectWrkMastUnstackingOne202Two(131); | 
 |  |  |                 if (Cools.isEmpty(wrkMast131)){ | 
 |  |  |                 if (Cools.isEmpty(wrkMast131)) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 // 获取站点信息 | 
 |  |  | 
 |  |  |                 } else { | 
 |  |  |                     staProtocol135 = staProtocol135.clone(); | 
 |  |  |                 } | 
 |  |  |                 if (staProtocol135.getWorkNo()<9900 || staProtocol135.getWorkNo()>9999 || staProtocol135.getWorkNo()==0 | 
 |  |  |                         || !staProtocol135.isLoading() || !staProtocol135.isAutoing()){ | 
 |  |  |                 if (staProtocol135.getWorkNo() < 9900 || staProtocol135.getWorkNo() > 9999 || staProtocol135.getWorkNo() == 0 | 
 |  |  |                         || !staProtocol135.isLoading() || !staProtocol135.isAutoing()) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 StaProtocol staProtocol = devpThread.getStation().get(staNo); | 
 |  |  | 
 |  |  |                     staProtocol = staProtocol.clone(); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 if (!staProtocol.isLoading()){ | 
 |  |  |                 if (!staProtocol.isLoading()) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  | //                if (!staProtocol.getWorkNo().equals(wrkMast131.getWrkNo())){ | 
 |  |  | 
 |  |  |                 // 判断是否满足入库条件 | 
 |  |  |                 if (staProtocol.isAutoing() | 
 |  |  |                         && staProtocol.isLoading() | 
 |  |  |                         && basDevp.getReportSign()==0 | 
 |  |  |                         && basDevp.getReportSign() == 0 | 
 |  |  |                 ) {//&& staProtocol.isPakMk() && !Cools.isEmpty(barcode)) { | 
 |  |  |                     if (true){ | 
 |  |  |                         return; | 
 |  |  |                     } | 
 |  |  | //                    if (true){ | 
 |  |  | //                        return; | 
 |  |  | //                    } | 
 |  |  |  | 
 |  |  |                     //任务完成 | 
 |  |  |                     boolean result1 = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(3, staProtocol135)); | 
 |  |  |                     try{ | 
 |  |  |                     try { | 
 |  |  |                         Thread.sleep(100); | 
 |  |  |                     }catch (Exception e){ } | 
 |  |  |                     } catch (Exception e) { | 
 |  |  |                     } | 
 |  |  |                     basDevp135.setReportSign(2); | 
 |  |  |                     basDevpService.updateById(basDevp135); | 
 |  |  |                     staProtocol135.setWorkNo(32222); | 
 |  |  |                     int workNo = commonService.getWorkNo(5); | 
 |  |  |                     staProtocol135.setWorkNo(workNo); | 
 |  |  |                     staProtocol135.setStaNo(144); | 
 |  |  |                     devpThread.setPakMk(staProtocol135.getSiteId(), false); | 
 |  |  |                     boolean result = MessageQueue.offer(SlaveType.Devp, devpThread.getSlave().getId(), new Task(2, staProtocol135)); | 
 |  |  | 
 |  |  |  | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |         } catch (Exception e) { | 
 |  |  | //            e.printStackTrace(); | 
 |  |  | //            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
 |  |  |             log.error("其他  ===>> 贴标完成驱动托盘进入下一步"+e); | 
 |  |  |             log.error("其他  ===>> 贴标完成驱动托盘进入下一步" + e); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      *  完成小车任务 | 
 |  |  |      * 完成小车任务 | 
 |  |  |      */ | 
 |  |  |     public synchronized void rgvCompleteWrkMastSta() { | 
 |  |  |         try{ | 
 |  |  |             for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
 |  |  |         try { | 
 |  |  |             for (RgvSlave rgvSlave : slaveProperties.getRgv()) { | 
 |  |  |                 RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
 |  |  |                 RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
 |  |  |                 if (rgvProtocol == null) { | 
 |  |  | 
 |  |  |                 // 只有当RGV等待WCS确认、自动 | 
 |  |  |                 if (rgvProtocol.getStatusType() == RgvStatusType.WORKING | 
 |  |  |                         && rgvProtocol.getModeType() == RgvModeType.AUTO | 
 |  |  |                         && ((rgvProtocol.getStatusType1()==RgvStatusType.WAITING || rgvProtocol.getStatusType2()==RgvStatusType.WAITING ) || | 
 |  |  |                         (rgvProtocol.getStatusType1()==RgvStatusType.FETCHWAITING || rgvProtocol.getStatusType2()==RgvStatusType.FETCHWAITING )) | 
 |  |  |                         && ((rgvProtocol.getStatusType1() == RgvStatusType.WAITING || rgvProtocol.getStatusType2() == RgvStatusType.WAITING) || | 
 |  |  |                         (rgvProtocol.getStatusType1() == RgvStatusType.FETCHWAITING || rgvProtocol.getStatusType2() == RgvStatusType.FETCHWAITING)) | 
 |  |  |                 ) { | 
 |  |  |                     log.info("{}号小车等待wcs确认,状态{},参数{}",rgvProtocol.getRgvNo(),rgvProtocol.getStatusType(),rgvProtocol); | 
 |  |  |                     if (rgvProtocol.getTaskNo1()!=0 && (rgvProtocol.getStatusType1()==RgvStatusType.WAITING || rgvProtocol.getStatusType1()==RgvStatusType.FETCHWAITING)){ | 
 |  |  |                         if (rgvProtocol.getTaskNo1()==(short)32222){ | 
 |  |  |                     log.info("{}号小车等待wcs确认,状态{},参数{}", rgvProtocol.getRgvNo(), rgvProtocol.getStatusType(), rgvProtocol); | 
 |  |  |                     if (rgvProtocol.getTaskNo1() != 0 && (rgvProtocol.getStatusType1() == RgvStatusType.WAITING || rgvProtocol.getStatusType1() == RgvStatusType.FETCHWAITING)) { | 
 |  |  |                         if (rgvProtocol.getTaskNo1() == (short) 32222) { | 
 |  |  |                             boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); | 
 |  |  |                             if (!rgvComplete){ | 
 |  |  |                                 log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); | 
 |  |  |                             if (!rgvComplete) { | 
 |  |  |                                 log.error("小车复位失败,小车号{}!", rgvProtocol.getRgvNo()); | 
 |  |  |                             } | 
 |  |  |                             BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); | 
 |  |  |                             basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); | 
 |  |  |                             rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); | 
 |  |  |                             rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), basRgvMap.getStartRoute()); | 
 |  |  |                             break; | 
 |  |  |                         } | 
 |  |  |                         WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo1().longValue()); | 
 |  |  |                         if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getType()!=1 || wrkMastSta.getWrkSts()!=1){ | 
 |  |  |                             log.error("未查到小车执行任务或者执行任务状态不符合!"+wrkMastSta); | 
 |  |  |                         if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getType() != 1 || wrkMastSta.getWrkSts() != 1) { | 
 |  |  |                             log.error("未查到小车执行任务或者执行任务状态不符合!" + wrkMastSta); | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |                         boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); | 
 |  |  |                         if (!rgvComplete){ | 
 |  |  |                             log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); | 
 |  |  |                             break; | 
 |  |  |                         } | 
 |  |  |  | 
 |  |  |                         DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); | 
 |  |  |                         StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd()); | 
 |  |  |                         WrkMast wrkMast = wrkMastMapper.selectPakInStep3(wrkMastSta.getWrkNo().intValue()); | 
 |  |  |                         if (!Cools.isEmpty(wrkMast)){ | 
 |  |  |                         if (!Cools.isEmpty(wrkMast) && wrkMastSta.getWrkType() != 5) { | 
 |  |  |                             Thread.sleep(200); | 
 |  |  |                             SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); | 
 |  |  |                             StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd()); | 
 |  |  |                             if (staProtocol == null) { | 
 |  |  |                                 continue; | 
 |  |  |                             } else { | 
 |  |  |                                 staProtocol = staProtocol.clone(); | 
 |  |  |                             } | 
 |  |  |                             if (!staProtocol.isAutoing() || !staProtocol.isLoading()) { | 
 |  |  |                                 continue; | 
 |  |  |                             } | 
 |  |  |                             // 下发站点信息 | 
 |  |  |                             staProtocol.setWorkNo(wrkMast.getWrkNo()); | 
 |  |  |                             staProtocol.setStaNo(wrkMast.getStaNo()); | 
 |  |  |                             if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol))) { | 
 |  |  |                                 continue; | 
 |  |  |                             } | 
 |  |  |                             log.error("小车任务完成下发输送线任务:"+staProtocol); | 
 |  |  |                             try{ | 
 |  |  |                                 Thread.sleep(1000); | 
 |  |  |                                 DevpThread devpThreadEnd = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); | 
 |  |  |                                 StaProtocol staProtocolEnd = devpThreadEnd.getStation().get(wrkMastSta.getStaEnd()); | 
 |  |  |                                 log.error("小车任务完成读取输送线任务:"+staProtocolEnd); | 
 |  |  |                                 if (staProtocolEnd.getWorkNo()==0 ){ //|| !staProtocolEnd.getWorkNo().equals(wrkMast.getWrkNo()) | 
 |  |  |                                     staProtocolEnd.setWorkNo(wrkMast.getWrkNo()); | 
 |  |  |                                     staProtocolEnd.setStaNo(wrkMast.getStaNo()); | 
 |  |  |                                     if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocolEnd))) { | 
 |  |  |                                         continue; | 
 |  |  |                                     } | 
 |  |  |                                     log.error("小车任务完成下发输送线任务第二次:"+staProtocolEnd); | 
 |  |  |                                 } | 
 |  |  |                             }catch (Exception e){ | 
 |  |  |  | 
 |  |  |                             } | 
 |  |  |                             log.error("小车任务完成下发输送线任务:" + staProtocol); | 
 |  |  | //                            try{ | 
 |  |  | //                                Thread.sleep(1000); | 
 |  |  | //                                DevpThread devpThreadEnd = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); | 
 |  |  | //                                StaProtocol staProtocolEnd = devpThreadEnd.getStation().get(wrkMastSta.getStaEnd()); | 
 |  |  | //                                log.error("小车任务完成读取输送线任务:"+staProtocolEnd); | 
 |  |  | //                                if (staProtocolEnd.getWorkNo()==0 ){ //|| !staProtocolEnd.getWorkNo().equals(wrkMast.getWrkNo()) | 
 |  |  | //                                    staProtocolEnd.setWorkNo(wrkMast.getWrkNo()); | 
 |  |  | //                                    staProtocolEnd.setStaNo(wrkMast.getStaNo()); | 
 |  |  | //                                    if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocolEnd))) { | 
 |  |  | //                                        continue; | 
 |  |  | //                                    } | 
 |  |  | //                                    log.error("小车任务完成下发输送线任务第二次:"+staProtocolEnd); | 
 |  |  | //                                } | 
 |  |  | //                            }catch (Exception e){ | 
 |  |  | // | 
 |  |  | //                            } | 
 |  |  |                         } | 
 |  |  |                         boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); | 
 |  |  |                         if (!rgvComplete) { | 
 |  |  |                             log.error("小车复位失败,小车号{}!", rgvProtocol.getRgvNo()); | 
 |  |  |                             break; | 
 |  |  |                         } | 
 |  |  |                         wrkMastSta.setWrkSts(3); | 
 |  |  |                         wrkMastStaMapper.updateById(wrkMastSta); | 
 |  |  |                         BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); | 
 |  |  |                         basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); | 
 |  |  |                         rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); | 
 |  |  |                     }else if (rgvProtocol.getTaskNo2()!=0 && (rgvProtocol.getStatusType2()==RgvStatusType.WAITING || rgvProtocol.getStatusType2()==RgvStatusType.FETCHWAITING)){ | 
 |  |  |                         if (rgvProtocol.getTaskNo2()==(short)32222){ | 
 |  |  |                         rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), basRgvMap.getStartRoute()); | 
 |  |  |                     } else if (rgvProtocol.getTaskNo2() != 0 && (rgvProtocol.getStatusType2() == RgvStatusType.WAITING || rgvProtocol.getStatusType2() == RgvStatusType.FETCHWAITING)) { | 
 |  |  |                         if (rgvProtocol.getTaskNo2() == (short) 32222) { | 
 |  |  |                             boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); | 
 |  |  |                             if (!rgvComplete){ | 
 |  |  |                                 log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); | 
 |  |  |                             if (!rgvComplete) { | 
 |  |  |                                 log.error("小车复位失败,小车号{}!", rgvProtocol.getRgvNo()); | 
 |  |  |                             } | 
 |  |  |                             BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); | 
 |  |  |                             basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); | 
 |  |  |                             rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); | 
 |  |  |                             rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), basRgvMap.getStartRoute()); | 
 |  |  |                             break; | 
 |  |  |                         } | 
 |  |  |                         WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(rgvProtocol.getTaskNo2().longValue()); | 
 |  |  |                         if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getType()!=2){ | 
 |  |  |                             log.error("未查到小车执行任务或者执行任务状态不符合!"+wrkMastSta); | 
 |  |  |                         if (Cools.isEmpty(wrkMastSta) || wrkMastSta.getType() != 2) { | 
 |  |  |                             log.error("未查到小车执行任务或者执行任务状态不符合!" + wrkMastSta); | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |                         boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); | 
 |  |  |                         if (!rgvComplete){ | 
 |  |  |                             log.error("小车复位失败,小车号{}!",rgvProtocol.getRgvNo()); | 
 |  |  |                             break; | 
 |  |  |                         } | 
 |  |  |                         DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); | 
 |  |  |                         StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd()); | 
 |  |  |                         WrkMast wrkMast = wrkMastMapper.selectPakInStep3(wrkMastSta.getWrkNo().intValue()); | 
 |  |  |                         if (!Cools.isEmpty(wrkMast)){ | 
 |  |  |                         if (!Cools.isEmpty(wrkMast) && wrkMastSta.getWrkType() != 5) { | 
 |  |  |                             Thread.sleep(200); | 
 |  |  |                             DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); | 
 |  |  |                             StaProtocol staProtocol = devpThread.getStation().get(wrkMastSta.getStaEnd()); | 
 |  |  |                             if (!staProtocol.isAutoing() || !staProtocol.isLoading()) { | 
 |  |  |                                 continue; | 
 |  |  |                             } | 
 |  |  |                             // 下发站点信息 | 
 |  |  |                             staProtocol.setWorkNo(wrkMast.getWrkNo()); | 
 |  |  |                             staProtocol.setStaNo(wrkMast.getStaNo()); | 
 |  |  |                             if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol))) { | 
 |  |  |                                 continue; | 
 |  |  |                             } | 
 |  |  |                             log.error("小车任务完成下发输送线任务:"+staProtocol); | 
 |  |  |                             try{ | 
 |  |  |                                 Thread.sleep(1000); | 
 |  |  |                                 DevpThread devpThreadEnd = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); | 
 |  |  |                                 StaProtocol staProtocolEnd = devpThreadEnd.getStation().get(wrkMastSta.getStaEnd()); | 
 |  |  |                                 log.error("小车任务完成读取输送线任务:"+staProtocolEnd); | 
 |  |  |                                 if (staProtocolEnd.getWorkNo()==0 ){ //|| !staProtocolEnd.getWorkNo().equals(wrkMast.getWrkNo()) | 
 |  |  |                                     staProtocolEnd.setWorkNo(wrkMast.getWrkNo()); | 
 |  |  |                                     staProtocolEnd.setStaNo(wrkMast.getStaNo()); | 
 |  |  |                                     if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocolEnd))) { | 
 |  |  |                                         continue; | 
 |  |  |                                     } | 
 |  |  |                                     log.error("小车任务完成下发输送线任务第二次:"+staProtocolEnd); | 
 |  |  |                                 } | 
 |  |  |                             }catch (Exception e){ | 
 |  |  |  | 
 |  |  |                             } | 
 |  |  |                             log.error("小车任务完成下发输送线任务:" + staProtocol); | 
 |  |  | //                            try{ | 
 |  |  | //                                Thread.sleep(1000); | 
 |  |  | //                                DevpThread devpThreadEnd = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1); | 
 |  |  | //                                StaProtocol staProtocolEnd = devpThreadEnd.getStation().get(wrkMastSta.getStaEnd()); | 
 |  |  | //                                log.error("小车任务完成读取输送线任务:"+staProtocolEnd); | 
 |  |  | //                                if (staProtocolEnd.getWorkNo()==0 ){ //|| !staProtocolEnd.getWorkNo().equals(wrkMast.getWrkNo()) | 
 |  |  | //                                    staProtocolEnd.setWorkNo(wrkMast.getWrkNo()); | 
 |  |  | //                                    staProtocolEnd.setStaNo(wrkMast.getStaNo()); | 
 |  |  | //                                    if (!MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocolEnd))) { | 
 |  |  | //                                        continue; | 
 |  |  | //                                    } | 
 |  |  | //                                    log.error("小车任务完成下发输送线任务第二次:"+staProtocolEnd); | 
 |  |  | //                                } | 
 |  |  | //                            }catch (Exception e){ | 
 |  |  | // | 
 |  |  | //                            } | 
 |  |  |                         } | 
 |  |  |                         boolean rgvComplete = rgvComplete(rgvProtocol.getRgvNo()); | 
 |  |  |                         if (!rgvComplete) { | 
 |  |  |                             log.error("小车复位失败,小车号{}!", rgvProtocol.getRgvNo()); | 
 |  |  |                             break; | 
 |  |  |                         } | 
 |  |  |                         wrkMastSta.setWrkSts(3); | 
 |  |  |                         wrkMastStaMapper.updateById(wrkMastSta); | 
 |  |  |                         BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); | 
 |  |  |                         basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); | 
 |  |  |                         rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); | 
 |  |  |                     }else { | 
 |  |  |                         log.error("小车复位失败,小车号{},等待wcs确认但是没有工作号!",rgvProtocol.getRgvNo()); | 
 |  |  |                         rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), basRgvMap.getStartRoute()); | 
 |  |  |                     } else { | 
 |  |  |                         log.error("小车复位失败,小车号{},等待wcs确认但是没有工作号!", rgvProtocol.getRgvNo()); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |             log.error("小车复位线程报错!"+e); | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("小车复位线程报错!" + e); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 入出库  ===>>  小车作业下发 | 
 |  |  |      */ | 
 |  |  |     public synchronized void rgvIoExecute(Integer sign) { | 
 |  |  |         try{ | 
 |  |  |             for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
 |  |  |     public synchronized boolean rgvIoExecute(Integer sign) { | 
 |  |  |         boolean rgvIoExecuteSign = false; | 
 |  |  |         try { | 
 |  |  |             for (RgvSlave rgvSlave : slaveProperties.getRgv()) { | 
 |  |  |                 // 获取小车信息 | 
 |  |  |                 boolean signWork = false; | 
 |  |  |                 RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
 |  |  | 
 |  |  |                         && rgvProtocol.getStatusType1() == RgvStatusType.IDLE | 
 |  |  |                         && rgvProtocol.getStatusType2() == RgvStatusType.IDLE | 
 |  |  |                         && rgvProtocol.getModeType() == RgvModeType.AUTO | 
 |  |  |                         && rgvProtocol.getLoaded1()==0 | 
 |  |  |                         && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 | 
 |  |  |                         && rgvProtocol.getLoaded1() == 0 | 
 |  |  |                         && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0 | 
 |  |  |                 ) { | 
 |  |  |                     switch (sign){ | 
 |  |  |                     switch (sign) { | 
 |  |  |                         //执行小车货物搬运任务 | 
 |  |  |                         case 1: | 
 |  |  |                             signWork = rgvRunWrkMastFullSta(); | 
 |  |  |                             signWork = rgvRunWrkMastFullSta(rgvSlave); | 
 |  |  |                             break; | 
 |  |  |                         //执行小车空板搬运任务 | 
 |  |  |                         case 2://放//拆盘 | 
 |  |  |                             signWork = rgvRunWrkMastEmptyStaPut(); | 
 |  |  |                             signWork = rgvRunWrkMastEmptyStaPut(rgvSlave); | 
 |  |  |                             break; | 
 |  |  |                         case 3://满放 | 
 |  |  |                             signWork = rgvRunWrkMastEmptyStaPutFull(); | 
 |  |  |                             signWork = rgvRunWrkMastEmptyStaPutFull(rgvSlave); | 
 |  |  |                             break; | 
 |  |  |                         case 4://取叠盘 | 
 |  |  |                             signWork = rgvRunWrkMastEmptyStaTake(); | 
 |  |  |                             signWork = rgvRunWrkMastEmptyStaTake(rgvSlave); | 
 |  |  |                             break; | 
 |  |  |                         case 5:////满取 | 
 |  |  |                             signWork = rgvRunWrkMastEmptyStaTakeFull(); | 
 |  |  |                             signWork = rgvRunWrkMastEmptyStaTakeFull(rgvSlave); | 
 |  |  |                             break; | 
 |  |  |                         case 6:////提升 | 
 |  |  | //                            signWork = qwe(); | 
 |  |  | 
 |  |  |                         default: | 
 |  |  |                             break; | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 for (int signCount = 1;!signWork && signCount<8;signCount++){ | 
 |  |  |                     switch (signCount){ | 
 |  |  |                         case 1://执行小车货物搬运任务 | 
 |  |  |                             signWork = rgvRunWrkMastFullSta(); | 
 |  |  |                             break; | 
 |  |  |                         case 2://放//拆盘 | 
 |  |  |                             signWork = rgvRunWrkMastEmptyStaPut(); | 
 |  |  |                             break; | 
 |  |  |                         case 3://满放 | 
 |  |  |                             signWork = rgvRunWrkMastEmptyStaPutFull(); | 
 |  |  |                             break; | 
 |  |  |                         case 4://取叠盘 | 
 |  |  |                             signWork = rgvRunWrkMastEmptyStaTake(); | 
 |  |  |                             break; | 
 |  |  |                         case 5:////满取 | 
 |  |  |                             signWork = rgvRunWrkMastEmptyStaTakeFull(); | 
 |  |  |                             break; | 
 |  |  |                         case 6:////提升 | 
 |  |  |                     for (int signCount = 1; !signWork && signCount < 7; signCount++) { | 
 |  |  |                         switch (signCount) { | 
 |  |  |                             case 1://执行小车货物搬运任务 | 
 |  |  |                                 signWork = rgvRunWrkMastFullSta(rgvSlave); | 
 |  |  |                                 break; | 
 |  |  |                             case 2://放//拆盘 | 
 |  |  |                                 signWork = rgvRunWrkMastEmptyStaPut(rgvSlave); | 
 |  |  |                                 break; | 
 |  |  |                             case 3://满放 | 
 |  |  |                                 signWork = rgvRunWrkMastEmptyStaPutFull(rgvSlave); | 
 |  |  |                                 break; | 
 |  |  |                             case 4://取叠盘 | 
 |  |  |                                 signWork = rgvRunWrkMastEmptyStaTake(rgvSlave); | 
 |  |  |                                 break; | 
 |  |  |                             case 5:////满取 | 
 |  |  |                                 signWork = rgvRunWrkMastEmptyStaTakeFull(rgvSlave); | 
 |  |  |                                 break; | 
 |  |  |                             case 6:////提升 | 
 |  |  | //                            signWork = rgvRunWrkMastEmptyStaPut(); | 
 |  |  |                             break; | 
 |  |  |                         default: | 
 |  |  |                             if (sign>6){ | 
 |  |  |                                 rgvRunWrkMastEmptyStaAvoidance();//避让 | 
 |  |  |                                 signWork = true; | 
 |  |  |                             } | 
 |  |  |                             break; | 
 |  |  |                                 break; | 
 |  |  |                             default: | 
 |  |  |                                 break; | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 } else { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 if (!rgvIoExecuteSign) { | 
 |  |  |                     rgvIoExecuteSign = signWork; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |             log.error("RGV小车任务下发报错"+e); | 
 |  |  | //            if (!rgvIoExecuteSign){ | 
 |  |  | //                if (sign>6){ | 
 |  |  | // | 
 |  |  | //                } | 
 |  |  | //            } | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("RGV小车任务下发报错" + e); | 
 |  |  |         } | 
 |  |  |         return rgvIoExecuteSign; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 执行小车搬运任务 | 
 |  |  |      */ | 
 |  |  |     public synchronized boolean rgvRunWrkMastFullSta() { | 
 |  |  |         try{ | 
 |  |  |             for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
 |  |  |                 RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
 |  |  |                 RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
 |  |  |                 if (rgvProtocol == null) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); | 
 |  |  |                 if (basRgv == null) { | 
 |  |  |                     log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |     public synchronized boolean rgvRunWrkMastFullSta(RgvSlave rgvSlave) { | 
 |  |  |         try { | 
 |  |  | //            for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
 |  |  |             RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
 |  |  |             RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
 |  |  |             if (rgvProtocol == null) { | 
 |  |  |                 return false; | 
 |  |  |             } | 
 |  |  |             BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); | 
 |  |  |             if (basRgv == null) { | 
 |  |  |                 log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); | 
 |  |  |                 return false; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |                 // 只有当RGV空闲、自动,工位一无物//rgv可用 | 
 |  |  |                 if (rgvProtocol.getStatusType() == RgvStatusType.IDLE | 
 |  |  |                         && rgvProtocol.getStatusType1() == RgvStatusType.IDLE | 
 |  |  |                         && rgvProtocol.getStatusType2() == RgvStatusType.IDLE | 
 |  |  |                         && rgvProtocol.getModeType() == RgvModeType.AUTO | 
 |  |  |                         && rgvProtocol.getLoaded1()==0 | 
 |  |  |                         && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 | 
 |  |  |                 ) { | 
 |  |  |                     BasRgvMap basRgvMap = basRgvMapMapper.selectById(basRgv.getRgvNo()); | 
 |  |  |                     if (basRgvMap == null) { | 
 |  |  |                         log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); | 
 |  |  |             // 只有当RGV空闲、自动,工位一无物//rgv可用 | 
 |  |  |             if (rgvProtocol.getStatusType() == RgvStatusType.IDLE | 
 |  |  |                     && rgvProtocol.getStatusType1() == RgvStatusType.IDLE | 
 |  |  |                     && rgvProtocol.getStatusType2() == RgvStatusType.IDLE | 
 |  |  |                     && rgvProtocol.getModeType() == RgvModeType.AUTO | 
 |  |  |                     && rgvProtocol.getLoaded1() == 0 | 
 |  |  |                     && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0 | 
 |  |  |             ) { | 
 |  |  |                 BasRgvMap basRgvMap = basRgvMapMapper.selectById(basRgv.getRgvNo()); | 
 |  |  |                 if (basRgvMap == null) { | 
 |  |  |                     log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); | 
 |  |  |                     return false; | 
 |  |  |                 } | 
 |  |  |                 List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); | 
 |  |  |                 List<Integer> routeNear = RouteUtils.getRoute(basRgvMap.getStartRouteOther(), basRgvMap.getEndRouteOther()); | 
 |  |  |                 basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 | 
 |  |  |                 if (rgvProtocol.getRgvNo() == 1) {//切换近范围 | 
 |  |  |                     route = routeNear; | 
 |  |  |                 } | 
 |  |  |                 List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route); | 
 |  |  |                 for (WrkMastSta wrkMastSta : wrkMastStaList) { | 
 |  |  |                     if (wrkMastSta.getType() != 1 || wrkMastSta.getWrkType() != 3) {//1:满版   3:取放 | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                     List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); | 
 |  |  |                     basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 | 
 |  |  |                     List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route); | 
 |  |  |                     for (WrkMastSta wrkMastSta : wrkMastStaList){ | 
 |  |  |                         if (wrkMastSta.getType()!=1 || wrkMastSta.getWrkType()!=3){//1:满版   3:取放 | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |                         BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaEnd()); | 
 |  |  |                         if (!basDevp.getAutoing().equals("Y") || basDevp.getLoading().equals("Y")){ | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |                         boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); | 
 |  |  |                         if (sign){ | 
 |  |  |                             boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd()); | 
 |  |  |                             if (signMap){ | 
 |  |  |                                 wrkMastSta.setWrkSts(1); | 
 |  |  |                                 try{ | 
 |  |  |                                     wrkMastStaMapper.updateById(wrkMastSta); | 
 |  |  |                                 }catch (Exception e){ | 
 |  |  |                                     log.error("更新小车任务失败"); | 
 |  |  |                                 } | 
 |  |  |                                 return true; | 
 |  |  |                             }else { | 
 |  |  |                                 log.error("3864行,货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); | 
 |  |  |                             } | 
 |  |  |                         }else { | 
 |  |  |                             log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); | 
 |  |  |                         } | 
 |  |  |                         break; | 
 |  |  |                     BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaEnd()); | 
 |  |  |                     if (!basDevp.getAutoing().equals("Y") || basDevp.getLoading().equals("Y") || basDevp.getWrkNo() != 0) { | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                     List<Integer> STA_WORK_CU1 = new ArrayList<Integer>() {{ | 
 |  |  |                         add(101); | 
 |  |  |                         add(102); | 
 |  |  |                         add(104); | 
 |  |  |                         add(105); | 
 |  |  |                         add(107); | 
 |  |  |                         add(108); | 
 |  |  |                         add(118); | 
 |  |  |                         add(119); | 
 |  |  |                         add(122); | 
 |  |  |                     }}; | 
 |  |  |                     List<Integer> STA_WORK_CU2 = new ArrayList<Integer>() {{ | 
 |  |  |                         add(110); | 
 |  |  |                         add(111); | 
 |  |  |                         add(113); | 
 |  |  |                         add(114); | 
 |  |  |                         add(116); | 
 |  |  |                         add(117); | 
 |  |  |                         add(120); | 
 |  |  |                         add(121); | 
 |  |  |                         add(122); | 
 |  |  |                         add(123); | 
 |  |  |                     }}; | 
 |  |  |                     if (basRgv.getRgvNo() == 1 && !STA_WORK_CU1.contains(wrkMastSta.getStaStart())) { | 
 |  |  |                         continue; | 
 |  |  |                     } else if (basRgv.getRgvNo() == 2 && !STA_WORK_CU2.contains(wrkMastSta.getStaStart())) { | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                     if (basDevp.getDevNo() >= 118 && basDevp.getDevNo() <= 123) { | 
 |  |  |                         if (!basDevp.getEmptyMk().equals("Y")) { | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                     Date date = new Date(); | 
 |  |  |                     log.info(date + "取放任务下发:小车工作档:" + wrkMastSta); | 
 |  |  |                     log.info(date + "取放任务下发:目标站状态:" + basDevp); | 
 |  |  |                     boolean sign = rgvTakeFullAll(basRgvMap.getRgvNo(), wrkMastSta); | 
 |  |  |                     if (sign) { | 
 |  |  |                         boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), wrkMastSta.getStaEnd(), rgvProtocol.getRgvNo() == 1); | 
 |  |  |                         if (signMap) { | 
 |  |  |                             wrkMastSta.setWrkSts(1); | 
 |  |  |                             try { | 
 |  |  |                                 wrkMastStaMapper.updateById(wrkMastSta); | 
 |  |  |                             } catch (Exception e) { | 
 |  |  |                                 log.error("更新小车任务失败"); | 
 |  |  |                             } | 
 |  |  |                             return true; | 
 |  |  |                         } else { | 
 |  |  |                             log.error("3864行,货物搬运任务:工作号{}所属任务下发后地图同步失败", wrkMastSta.getWrkNo()); | 
 |  |  |                         } | 
 |  |  |                     } else { | 
 |  |  |                         log.error("工作号{}所属任务下发失败", wrkMastSta.getWrkNo()); | 
 |  |  |                     } | 
 |  |  |                     break; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  | //            } | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("3875行执行小车搬运任务下发失败"); | 
 |  |  |             log.error("3875行"+e); | 
 |  |  |             log.error("3875行" + e); | 
 |  |  |         } | 
 |  |  |         return false; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 执行小车搬运任务//拆盘 | 
 |  |  |      */ | 
 |  |  |     public synchronized boolean rgvRunWrkMastEmptyStaPut() {//拆盘 | 
 |  |  |         try{ | 
 |  |  |             for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
 |  |  |                 RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
 |  |  |                 RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
 |  |  |                 if (rgvProtocol == null) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); | 
 |  |  |                 if (basRgv == null) { | 
 |  |  |                     log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |     public synchronized boolean rgvRunWrkMastEmptyStaPut(RgvSlave rgvSlave) {//拆盘 | 
 |  |  |         try { | 
 |  |  | //            for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
 |  |  |             RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
 |  |  |             RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
 |  |  |             if (rgvProtocol == null) { | 
 |  |  |                 return false; | 
 |  |  |             } | 
 |  |  |             BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); | 
 |  |  |             if (basRgv == null) { | 
 |  |  |                 log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); | 
 |  |  |                 return false; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |                 // 只有当RGV空闲、自动,工位二有物//rgv可用//拆盘 | 
 |  |  |                 if (rgvProtocol.getStatusType() == RgvStatusType.IDLE | 
 |  |  |                         && rgvProtocol.getStatusType1() == RgvStatusType.IDLE | 
 |  |  |                         && rgvProtocol.getStatusType2() == RgvStatusType.IDLE | 
 |  |  |                         && rgvProtocol.getModeType() == RgvModeType.AUTO | 
 |  |  |                         && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 | 
 |  |  |                         && (rgvProtocol.getLoaded2()==3  || rgvProtocol.getLoaded2()==1 || rgvProtocol.getLoaded2()==4)////0 无物;1 一层无物二层有物 (只能拆叠) ;2一层有物二层无物() ;3  1、2层都有物  4:()只允许拆盘 | 
 |  |  |                 ) { | 
 |  |  |                     BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); | 
 |  |  |                     if (basRgvMap == null) { | 
 |  |  |                         log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); | 
 |  |  |             // 只有当RGV空闲、自动,工位二有物//rgv可用//拆盘 | 
 |  |  |             if (rgvProtocol.getStatusType() == RgvStatusType.IDLE | 
 |  |  |                     && rgvProtocol.getStatusType1() == RgvStatusType.IDLE | 
 |  |  |                     && rgvProtocol.getStatusType2() == RgvStatusType.IDLE | 
 |  |  |                     && rgvProtocol.getModeType() == RgvModeType.AUTO | 
 |  |  |                     && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0 | 
 |  |  |                     && (rgvProtocol.getLoaded2() == 3 || rgvProtocol.getLoaded2() == 1 || rgvProtocol.getLoaded2() == 4)////0 无物;1 一层无物二层有物 (只能拆叠) ;2一层有物二层无物() ;3  1、2层都有物  4:()只允许拆盘 | 
 |  |  |             ) { | 
 |  |  |                 BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); | 
 |  |  |                 if (basRgvMap == null) { | 
 |  |  |                     log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); | 
 |  |  |                     return false; | 
 |  |  |                 } | 
 |  |  |                 basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 | 
 |  |  |                 List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());//获取活动范围 | 
 |  |  |                 List<Integer> routeNear = RouteUtils.getRoute(basRgvMap.getStartRouteOther(), basRgvMap.getEndRouteOther()); | 
 |  |  |                 if (rgvProtocol.getRgvNo() == 2) {//切换近范围 | 
 |  |  |                     route = routeNear; | 
 |  |  |                 } | 
 |  |  |                 List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);//查询可执行任务 | 
 |  |  |                 for (WrkMastSta wrkMastSta : wrkMastStaList) { | 
 |  |  |                     if (wrkMastSta.getType() != 2 || wrkMastSta.getWrkType() != 2) {// 2:空板  || 工作类型  1:取(叠盘)  2:拆盘  5:满取  6:满放 | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                     basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 | 
 |  |  |                     List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());//获取活动范围 | 
 |  |  |                     List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);//查询可执行任务 | 
 |  |  |                     for (WrkMastSta wrkMastSta : wrkMastStaList){ | 
 |  |  |                         if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=2){// 2:空板  || 工作类型  1:取(叠盘)  2:拆盘  5:满取  6:满放 | 
 |  |  |                     boolean sign = false; | 
 |  |  |                     if (wrkMastSta.getStaEnd() != 0) {//放 | 
 |  |  |                         BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaEnd()); | 
 |  |  |                         if (!basDevp.getAutoing().equals("Y") || basDevp.getLoading().equals("Y") || basDevp.getWrkNo() != 0) { | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |                         boolean sign = false; | 
 |  |  |                         if ( wrkMastSta.getStaEnd()!=0){//放 | 
 |  |  |                             BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaEnd()); | 
 |  |  |                             if (!basDevp.getAutoing().equals("Y") || basDevp.getLoading().equals("Y")){ | 
 |  |  |                         if (basDevp.getDevNo() >= 118 && basDevp.getDevNo() <= 123) { | 
 |  |  |                             if (!basDevp.getEmptyMk().equals("Y")) { | 
 |  |  |                                 continue; | 
 |  |  |                             } | 
 |  |  |                             sign = rgvPutEmpty(rgvProtocol.getRgvNo(),wrkMastSta);//拆盘 | 
 |  |  |                         }else { | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |                         if (sign){ | 
 |  |  |                             boolean signMap = rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), wrkMastSta.getStaEnd()); | 
 |  |  |                             if (signMap){ | 
 |  |  |                                 wrkMastSta.setWrkSts(2); | 
 |  |  |                                 try{ | 
 |  |  |                                     wrkMastStaMapper.updateById(wrkMastSta); | 
 |  |  |                                 }catch (Exception e){ | 
 |  |  |                                     log.error("更新小车任务失败"); | 
 |  |  |                                 } | 
 |  |  |                                 return true; | 
 |  |  |                             }else { | 
 |  |  |                                 log.error("3857行,货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); | 
 |  |  |                             } | 
 |  |  |                         }else { | 
 |  |  |                             log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); | 
 |  |  |                         } | 
 |  |  |                         break; | 
 |  |  |                         Date date = new Date(); | 
 |  |  |                         log.info(date + "拆盘任务下发:小车工作档:" + wrkMastSta); | 
 |  |  |                         log.info(date + "拆盘任务下发:目标站状态:" + basDevp); | 
 |  |  |                         sign = rgvPutEmpty(rgvProtocol.getRgvNo(), wrkMastSta);//拆盘 | 
 |  |  |                     } else { | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                     if (sign) { | 
 |  |  |                         boolean signMap = rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), wrkMastSta.getStaEnd(), rgvProtocol.getRgvNo() == 2); | 
 |  |  |                         if (signMap) { | 
 |  |  |                             wrkMastSta.setWrkSts(2); | 
 |  |  |                             try { | 
 |  |  |                                 wrkMastStaMapper.updateById(wrkMastSta); | 
 |  |  |                             } catch (Exception e) { | 
 |  |  |                                 log.error("更新小车任务失败"); | 
 |  |  |                             } | 
 |  |  |                             return true; | 
 |  |  |                         } else { | 
 |  |  |                             log.error("3857行,货物搬运任务:工作号{}所属任务下发后地图同步失败", wrkMastSta.getWrkNo()); | 
 |  |  |                         } | 
 |  |  |                     } else { | 
 |  |  |                         log.error("工作号{}所属任务下发失败", wrkMastSta.getWrkNo()); | 
 |  |  |                     } | 
 |  |  |                     break; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  | //            } | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("3933行执行小车放空板任务下发失败"); | 
 |  |  |             log.error("3933行"+e); | 
 |  |  |             log.error("3933行" + e); | 
 |  |  |         } | 
 |  |  |         return false; | 
 |  |  |     } | 
 |  |  | 
 |  |  |     /** | 
 |  |  |      * 执行小车搬运任务 | 
 |  |  |      */ | 
 |  |  |     public synchronized boolean rgvRunWrkMastEmptyStaPutFull() {//满放 | 
 |  |  |         try{ | 
 |  |  |             for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
 |  |  |                 RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
 |  |  |                 RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
 |  |  |                 if (rgvProtocol == null) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); | 
 |  |  |                 if (basRgv == null) { | 
 |  |  |                     log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |     public synchronized boolean rgvRunWrkMastEmptyStaPutFull(RgvSlave rgvSlave) {//满放 | 
 |  |  |         try { | 
 |  |  | //            for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
 |  |  |             RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
 |  |  |             RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
 |  |  |             if (rgvProtocol == null) { | 
 |  |  |                 return false; | 
 |  |  |             } | 
 |  |  |             BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); | 
 |  |  |             if (basRgv == null) { | 
 |  |  |                 log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); | 
 |  |  |                 return false; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |                 // 只有当RGV空闲、自动,工位二有物//rgv可用 | 
 |  |  |                 if (rgvProtocol.getStatusType() == RgvStatusType.IDLE | 
 |  |  |                         && rgvProtocol.getStatusType1() == RgvStatusType.IDLE | 
 |  |  |                         && rgvProtocol.getStatusType2() == RgvStatusType.IDLE | 
 |  |  |                         && rgvProtocol.getModeType() == RgvModeType.AUTO | 
 |  |  |                         && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 | 
 |  |  |                         &&  (rgvProtocol.getLoaded2()==2  || rgvProtocol.getLoaded2()==3 ) ////0 无物;1 一层无物二层有物  ;2一层有物二层无物 (只能满放);3  1、2层都有物  4:()只允许拆盘 | 
 |  |  |                 ) { | 
 |  |  |                     BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); | 
 |  |  |                     if (basRgvMap == null) { | 
 |  |  |                         log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); | 
 |  |  |             // 只有当RGV空闲、自动,工位二有物//rgv可用 | 
 |  |  |             if (rgvProtocol.getStatusType() == RgvStatusType.IDLE | 
 |  |  |                     && rgvProtocol.getStatusType1() == RgvStatusType.IDLE | 
 |  |  |                     && rgvProtocol.getStatusType2() == RgvStatusType.IDLE | 
 |  |  |                     && rgvProtocol.getModeType() == RgvModeType.AUTO | 
 |  |  |                     && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0 | 
 |  |  |                     && (rgvProtocol.getLoaded2() == 2 || rgvProtocol.getLoaded2() == 3) ////0 无物;1 一层无物二层有物  ;2一层有物二层无物 (只能满放);3  1、2层都有物  4:()只允许拆盘 | 
 |  |  |             ) { | 
 |  |  |                 BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); | 
 |  |  |                 if (basRgvMap == null) { | 
 |  |  |                     log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); | 
 |  |  |                     return false; | 
 |  |  |                 } | 
 |  |  |                 basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 | 
 |  |  |                 List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());//获取活动范围 | 
 |  |  |                 List<Integer> routeNear = RouteUtils.getRoute(basRgvMap.getStartRouteOther(), basRgvMap.getEndRouteOther()); | 
 |  |  |                 if (rgvProtocol.getRgvNo() == 2) {//切换近范围 | 
 |  |  |                     route = routeNear; | 
 |  |  |                 } | 
 |  |  |                 List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);//查询可执行任务 | 
 |  |  |                 for (WrkMastSta wrkMastSta : wrkMastStaList) { | 
 |  |  |                     if (wrkMastSta.getType() != 2 || wrkMastSta.getWrkType() != 6) {// 2:空板  || 工作类型  1:取(叠盘)  2:拆盘  5:满取  6:满放  7:提升 | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                     basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 | 
 |  |  |                     List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute());//获取活动范围 | 
 |  |  |                     List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route);//查询可执行任务 | 
 |  |  |                     for (WrkMastSta wrkMastSta : wrkMastStaList){ | 
 |  |  |                         if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=6){// 2:空板  || 工作类型  1:取(叠盘)  2:拆盘  5:满取  6:满放  7:提升 | 
 |  |  |                     boolean sign = false; | 
 |  |  |                     if (wrkMastSta.getStaEnd() != 0) {//满放 | 
 |  |  |                         BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaEnd()); | 
 |  |  |                         if (!basDevp.getAutoing().equals("Y") || basDevp.getLoading().equals("Y") || basDevp.getWrkNo() != 0) { | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |                         boolean sign = false; | 
 |  |  |                         if ( wrkMastSta.getStaEnd()!=0){//满放 | 
 |  |  |                             BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaEnd()); | 
 |  |  |                             if (!basDevp.getAutoing().equals("Y") || basDevp.getLoading().equals("Y")){ | 
 |  |  |                         if (basDevp.getDevNo() >= 118 && basDevp.getDevNo() <= 123) { | 
 |  |  |                             if (!basDevp.getEmptyMk().equals("Y")) { | 
 |  |  |                                 continue; | 
 |  |  |                             } | 
 |  |  |                             sign = rgvPutEmptyFull(rgvProtocol.getRgvNo(),wrkMastSta); | 
 |  |  |                         }else { | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |                         if (sign){ | 
 |  |  |                             boolean signMap = rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), wrkMastSta.getStaEnd()); | 
 |  |  |                             if (signMap){ | 
 |  |  |                                 wrkMastSta.setWrkSts(2); | 
 |  |  |                                 try{ | 
 |  |  |                                     wrkMastStaMapper.updateById(wrkMastSta); | 
 |  |  |                                 }catch (Exception e){ | 
 |  |  |                                     log.error("更新小车任务失败"); | 
 |  |  |                                 } | 
 |  |  |                                 return true; | 
 |  |  |                             }else { | 
 |  |  |                                 log.error("3857行,货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); | 
 |  |  |                             } | 
 |  |  |                         }else { | 
 |  |  |                             log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); | 
 |  |  |                         } | 
 |  |  |                         break; | 
 |  |  |                         Date date = new Date(); | 
 |  |  |                         log.info(date + "满放任务下发:小车工作档:" + wrkMastSta); | 
 |  |  |                         log.info(date + "满放任务下发:目标站状态:" + basDevp); | 
 |  |  |                         sign = rgvPutEmptyFull(rgvProtocol.getRgvNo(), wrkMastSta); | 
 |  |  |                     } else { | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                     if (sign) { | 
 |  |  |                         boolean signMap = rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), wrkMastSta.getStaEnd(), rgvProtocol.getRgvNo() == 2); | 
 |  |  |                         if (signMap) { | 
 |  |  |                             wrkMastSta.setWrkSts(2); | 
 |  |  |                             try { | 
 |  |  |                                 wrkMastStaMapper.updateById(wrkMastSta); | 
 |  |  |                             } catch (Exception e) { | 
 |  |  |                                 log.error("更新小车任务失败"); | 
 |  |  |                             } | 
 |  |  |                             return true; | 
 |  |  |                         } else { | 
 |  |  |                             log.error("3857行,货物搬运任务:工作号{}所属任务下发后地图同步失败", wrkMastSta.getWrkNo()); | 
 |  |  |                         } | 
 |  |  |                     } else { | 
 |  |  |                         log.error("工作号{}所属任务下发失败", wrkMastSta.getWrkNo()); | 
 |  |  |                     } | 
 |  |  |                     break; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  | //            } | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("3933行执行小车放空板任务下发失败"); | 
 |  |  |             log.error("3933行"+e); | 
 |  |  |             log.error("3933行" + e); | 
 |  |  |         } | 
 |  |  |         return false; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public synchronized boolean rgvRunWrkMastEmptyStaTake() {//叠盘 | 
 |  |  |         try{ | 
 |  |  |             for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
 |  |  |                 RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
 |  |  |                 RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
 |  |  |                 if (rgvProtocol == null) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); | 
 |  |  |                 if (basRgv == null) { | 
 |  |  |                     log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |     public synchronized boolean rgvRunWrkMastEmptyStaTake(RgvSlave rgvSlave) {//叠盘 | 
 |  |  |         try { | 
 |  |  | //            for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
 |  |  |             RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
 |  |  |             RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
 |  |  |             if (rgvProtocol == null) { | 
 |  |  |                 return false; | 
 |  |  |             } | 
 |  |  |             BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); | 
 |  |  |             if (basRgv == null) { | 
 |  |  |                 log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); | 
 |  |  |                 return false; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |                 // 只有当RGV空闲、自动,工位二无物//rgv可用 | 
 |  |  |                 if (rgvProtocol.getStatusType() == RgvStatusType.IDLE | 
 |  |  |                         && rgvProtocol.getStatusType1() == RgvStatusType.IDLE | 
 |  |  |                         && rgvProtocol.getStatusType2() == RgvStatusType.IDLE | 
 |  |  |                         && rgvProtocol.getModeType() == RgvModeType.AUTO | 
 |  |  |                         && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 | 
 |  |  |                         &&  (rgvProtocol.getLoaded2()==0  || rgvProtocol.getLoaded2()==1 ) //现场修改:叠盘机,////0 无物;1 一层无物二层有物(只能拆叠)   ;2一层有物二层无物 (只能满放);3  1、2层都有物  4:()只允许拆盘 | 
 |  |  |                 ) { | 
 |  |  |                     BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); | 
 |  |  |                     if (basRgvMap == null) { | 
 |  |  |                         log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); | 
 |  |  |             // 只有当RGV空闲、自动,工位二无物//rgv可用 | 
 |  |  |             if (rgvProtocol.getStatusType() == RgvStatusType.IDLE | 
 |  |  |                     && rgvProtocol.getStatusType1() == RgvStatusType.IDLE | 
 |  |  |                     && rgvProtocol.getStatusType2() == RgvStatusType.IDLE | 
 |  |  |                     && rgvProtocol.getModeType() == RgvModeType.AUTO | 
 |  |  |                     && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0 | 
 |  |  |                     && (rgvProtocol.getLoaded2() == 0 || rgvProtocol.getLoaded2() == 1) //现场修改:叠盘机,////0 无物;1 一层无物二层有物(只能拆叠)   ;2一层有物二层无物 (只能满放);3  1、2层都有物  4:()只允许拆盘 | 
 |  |  |             ) { | 
 |  |  |                 BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); | 
 |  |  |                 if (basRgvMap == null) { | 
 |  |  |                     log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); | 
 |  |  |                     return false; | 
 |  |  |                 } | 
 |  |  |                 List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); | 
 |  |  |                 List<Integer> routeNear = RouteUtils.getRoute(basRgvMap.getStartRouteOther(), basRgvMap.getEndRouteOther()); | 
 |  |  |                 if (rgvProtocol.getRgvNo() == 2) {//切换近范围 | 
 |  |  |                     route = routeNear; | 
 |  |  |                 } | 
 |  |  |                 basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 | 
 |  |  |                 List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route); | 
 |  |  |                 for (WrkMastSta wrkMastSta : wrkMastStaList) { | 
 |  |  |                     if (wrkMastSta.getType() != 2 || wrkMastSta.getWrkType() != 1) {// 2:空板  || 工作类型  1:取(叠盘)  2:拆盘  5:满取  6:满放 | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                     List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); | 
 |  |  |                     basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 | 
 |  |  |                     List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route); | 
 |  |  |                     for (WrkMastSta wrkMastSta : wrkMastStaList){ | 
 |  |  |                         if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=1){// 2:空板  || 工作类型  1:取(叠盘)  2:拆盘  5:满取  6:满放 | 
 |  |  |                     boolean sign = false; | 
 |  |  |                     if (wrkMastSta.getStaStart() != 0) {//取 | 
 |  |  |                         BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaStart()); | 
 |  |  |                         if (!basDevp.getAutoing().equals("Y") || !basDevp.getLoading().equals("Y")) { | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |                         boolean sign = false; | 
 |  |  |                         if ( wrkMastSta.getStaStart()!=0){//取 | 
 |  |  |                             BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaStart()); | 
 |  |  |                             if (!basDevp.getAutoing().equals("Y") || !basDevp.getLoading().equals("Y")){ | 
 |  |  |                         List<Integer> STA_WORK_CU1 = new ArrayList<Integer>() {{ | 
 |  |  |                             add(101); | 
 |  |  |                             add(102); | 
 |  |  |                             add(104); | 
 |  |  |                             add(105); | 
 |  |  |                             add(107); | 
 |  |  |                             add(108); | 
 |  |  |                             add(118); | 
 |  |  |                             add(119); | 
 |  |  |                             add(122); | 
 |  |  |                         }}; | 
 |  |  |                         List<Integer> STA_WORK_CU2 = new ArrayList<Integer>() {{ | 
 |  |  |                             add(110); | 
 |  |  |                             add(111); | 
 |  |  |                             add(113); | 
 |  |  |                             add(114); | 
 |  |  |                             add(116); | 
 |  |  |                             add(117); | 
 |  |  |                             add(120); | 
 |  |  |                             add(121); | 
 |  |  |                             add(122); | 
 |  |  |                             add(123); | 
 |  |  |                         }}; | 
 |  |  |                         if (basRgv.getRgvNo() == 1 && !STA_WORK_CU1.contains(wrkMastSta.getStaStart())) { | 
 |  |  |                             continue; | 
 |  |  |                         } else if (basRgv.getRgvNo() == 2 && !STA_WORK_CU2.contains(wrkMastSta.getStaStart())) { | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |                         if (basDevp.getDevNo() >= 118 && basDevp.getDevNo() <= 123) { | 
 |  |  |                             if (!basDevp.getEmptyMk().equals("Y")) { | 
 |  |  |                                 continue; | 
 |  |  |                             } | 
 |  |  |                             sign = rgvTakeEmpty(rgvProtocol.getRgvNo(),wrkMastSta);//叠盘 | 
 |  |  |                         }else { | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |                         if (sign){ | 
 |  |  |                             boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), basRgvMap.getStartRoute()); | 
 |  |  |                             if (signMap){ | 
 |  |  |                                 wrkMastSta.setWrkSts(1); | 
 |  |  |                                 try{ | 
 |  |  |                                     wrkMastStaMapper.updateById(wrkMastSta); | 
 |  |  |                                 }catch (Exception e){ | 
 |  |  |                                     log.error("更新小车任务失败"); | 
 |  |  |                                 } | 
 |  |  |                                 return true; | 
 |  |  |                             }else { | 
 |  |  |                                 log.error("3879行,货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); | 
 |  |  |                             } | 
 |  |  |                         }else { | 
 |  |  |                             log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); | 
 |  |  |                         } | 
 |  |  |                         break; | 
 |  |  |                         Date date = new Date(); | 
 |  |  |                         log.info(date + "叠盘任务下发:小车工作档:" + wrkMastSta); | 
 |  |  |                         log.info(date + "叠盘任务下发:目标站状态:" + basDevp); | 
 |  |  |                         sign = rgvTakeEmpty(rgvProtocol.getRgvNo(), wrkMastSta);//叠盘 | 
 |  |  |                     } else { | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                     if (sign) { | 
 |  |  |                         boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), basRgvMap.getStartRoute(), rgvProtocol.getRgvNo() == 2); | 
 |  |  |                         if (signMap) { | 
 |  |  |                             wrkMastSta.setWrkSts(1); | 
 |  |  |                             try { | 
 |  |  |                                 wrkMastStaMapper.updateById(wrkMastSta); | 
 |  |  |                             } catch (Exception e) { | 
 |  |  |                                 log.error("更新小车任务失败"); | 
 |  |  |                             } | 
 |  |  |                             return true; | 
 |  |  |                         } else { | 
 |  |  |                             log.error("3879行,货物搬运任务:工作号{}所属任务下发后地图同步失败", wrkMastSta.getWrkNo()); | 
 |  |  |                         } | 
 |  |  |                     } else { | 
 |  |  |                         log.error("工作号{}所属任务下发失败", wrkMastSta.getWrkNo()); | 
 |  |  |                     } | 
 |  |  |                     break; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  | //            } | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("3989行执行小车取空板任务下发失败"); | 
 |  |  |             log.error("3989行"+e); | 
 |  |  |             log.error("3989行" + e); | 
 |  |  |         } | 
 |  |  |         return false; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public synchronized boolean rgvRunWrkMastEmptyStaTakeFull() {//满取 | 
 |  |  |         try{ | 
 |  |  |             for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
 |  |  |                 RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
 |  |  |                 RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
 |  |  |                 if (rgvProtocol == null) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); | 
 |  |  |                 if (basRgv == null) { | 
 |  |  |                     log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |     public synchronized boolean rgvRunWrkMastEmptyStaTakeFull(RgvSlave rgvSlave) {//满取 | 
 |  |  |         try { | 
 |  |  | //            for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
 |  |  |             RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
 |  |  |             RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
 |  |  |             if (rgvProtocol == null) { | 
 |  |  |                 return false; | 
 |  |  |             } | 
 |  |  |             BasRgv basRgv = basRgvService.selectById(rgvSlave.getId()); | 
 |  |  |             if (basRgv == null) { | 
 |  |  |                 log.error("{}号RGV尚未在数据库进行维护!", rgvSlave.getId()); | 
 |  |  |                 return false; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |                 // 只有当RGV空闲、自动,工位二无物//rgv可用 | 
 |  |  |                 if (rgvProtocol.getStatusType() == RgvStatusType.IDLE | 
 |  |  |                         && rgvProtocol.getStatusType1() == RgvStatusType.IDLE | 
 |  |  |                         && rgvProtocol.getStatusType2() == RgvStatusType.IDLE | 
 |  |  |                         && rgvProtocol.getModeType() == RgvModeType.AUTO | 
 |  |  |                         && rgvProtocol.getTaskNo1()==0 && rgvProtocol.getTaskNo2()==0 | 
 |  |  |                         &&  rgvProtocol.getLoaded2()==0  //现场修改:叠盘机,////0 无物;1 一层无物二层有物(只能拆叠)   ;2一层有物二层无物 (只能满放);3  1、2层都有物  4:()只允许拆盘 | 
 |  |  |                 ) { | 
 |  |  |                     BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); | 
 |  |  |                     if (basRgvMap == null) { | 
 |  |  |                         log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); | 
 |  |  |             // 只有当RGV空闲、自动,工位二无物//rgv可用 | 
 |  |  |             if (rgvProtocol.getStatusType() == RgvStatusType.IDLE | 
 |  |  |                     && rgvProtocol.getStatusType1() == RgvStatusType.IDLE | 
 |  |  |                     && rgvProtocol.getStatusType2() == RgvStatusType.IDLE | 
 |  |  |                     && rgvProtocol.getModeType() == RgvModeType.AUTO | 
 |  |  |                     && rgvProtocol.getTaskNo1() == 0 && rgvProtocol.getTaskNo2() == 0 | 
 |  |  |                     && rgvProtocol.getLoaded2() == 0  //现场修改:叠盘机,////0 无物;1 一层无物二层有物(只能拆叠)   ;2一层有物二层无物 (只能满放);3  1、2层都有物  4:()只允许拆盘 | 
 |  |  |             ) { | 
 |  |  |                 BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); | 
 |  |  |                 if (basRgvMap == null) { | 
 |  |  |                     log.error("{}号RGV尚未在数据库地图中进行维护!", rgvProtocol.getRgvNo()); | 
 |  |  |                     return false; | 
 |  |  |                 } | 
 |  |  |                 List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); | 
 |  |  |                 basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 | 
 |  |  |                 List<Integer> routeNear = RouteUtils.getRoute(basRgvMap.getStartRouteOther(), basRgvMap.getEndRouteOther()); | 
 |  |  |                 if (rgvProtocol.getRgvNo() == 2) {//切换近范围 | 
 |  |  |                     route = routeNear; | 
 |  |  |                 } | 
 |  |  |                 List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route); | 
 |  |  |                 WrkMast wrkMast = wrkMastMapper.selectBy122ManQu(122, 110, 15L); | 
 |  |  |                 if (!Cools.isEmpty(wrkMast)) { | 
 |  |  |                     WrkMastSta wrkMastSta = wrkMastStaMapper.selectByWrkNo(wrkMast.getWrkNo().longValue()); | 
 |  |  |                     if (!Cools.isEmpty(wrkMastSta) && wrkMastSta.getType() == 2 && wrkMastSta.getWrkType() == 5) { | 
 |  |  |                         wrkMastStaList.add(wrkMastSta); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 for (WrkMastSta wrkMastSta : wrkMastStaList) { | 
 |  |  |                     if (wrkMastSta.getType() != 2 || wrkMastSta.getWrkType() != 5) {// 2:空板  || 工作类型  1:取(叠盘)  2:拆盘  5:满取  6:满放 | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                     List<Integer> route = RouteUtils.getRoute(basRgvMap.getStartRoute(), basRgvMap.getEndRoute()); | 
 |  |  |                     basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); //更新小车当前位置站点号 | 
 |  |  |                     List<WrkMastSta> wrkMastStaList = wrkMastStaMapper.selectNoInterfereList(route, route); | 
 |  |  |                     for (WrkMastSta wrkMastSta : wrkMastStaList){ | 
 |  |  |                         if (wrkMastSta.getType()!=2 || wrkMastSta.getWrkType()!=5){// 2:空板  || 工作类型  1:取(叠盘)  2:拆盘  5:满取  6:满放 | 
 |  |  |                     boolean sign = false; | 
 |  |  |                     if (wrkMastSta.getStaStart() != 0) {//满取 | 
 |  |  |                         BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaStart()); | 
 |  |  |                         if (!basDevp.getAutoing().equals("Y") || !basDevp.getLoading().equals("Y")) { | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |                         boolean sign = false; | 
 |  |  |                         if (wrkMastSta.getStaStart()!=0){//满取 | 
 |  |  |                             BasDevp basDevp = basDevpService.selectById(wrkMastSta.getStaStart()); | 
 |  |  |                             if (!basDevp.getAutoing().equals("Y") || !basDevp.getLoading().equals("Y")){ | 
 |  |  |                                 continue; | 
 |  |  |                             } | 
 |  |  |                             sign = rgvTakeEmptyFull(rgvProtocol.getRgvNo(),wrkMastSta); | 
 |  |  |                         }else { | 
 |  |  |                             continue; | 
 |  |  |                         } | 
 |  |  |                         if (sign){ | 
 |  |  |                             boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), basRgvMap.getStartRoute()); | 
 |  |  |                             if (signMap){ | 
 |  |  |                                 wrkMastSta.setWrkSts(1); | 
 |  |  |                                 try{ | 
 |  |  |                                     wrkMastStaMapper.updateById(wrkMastSta); | 
 |  |  |                                 }catch (Exception e){ | 
 |  |  |                                     log.error("更新小车任务失败"); | 
 |  |  |                                 } | 
 |  |  |                                 return true; | 
 |  |  |                             }else { | 
 |  |  |                                 log.error("3879行,货物搬运任务:工作号{}所属任务下发后地图同步失败",wrkMastSta.getWrkNo()); | 
 |  |  |                             } | 
 |  |  |                         }else { | 
 |  |  |                             log.error("工作号{}所属任务下发失败",wrkMastSta.getWrkNo()); | 
 |  |  |                         } | 
 |  |  |                         break; | 
 |  |  |                         Date date = new Date(); | 
 |  |  |                         log.info(date + "满取任务下发:小车工作档:" + wrkMastSta); | 
 |  |  |                         log.info(date + "满取任务下发:目标站状态:" + basDevp); | 
 |  |  |                         sign = rgvTakeEmptyFull(rgvProtocol.getRgvNo(), wrkMastSta); | 
 |  |  |                     } else { | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |                     if (sign) { | 
 |  |  |                         boolean signMap = rgvMapUpdate(basRgvMap, wrkMastSta.getStaStart(), basRgvMap.getStartRoute(), rgvProtocol.getRgvNo() == 2); | 
 |  |  |                         if (signMap) { | 
 |  |  |                             wrkMastSta.setWrkSts(1); | 
 |  |  |                             try { | 
 |  |  |                                 wrkMastStaMapper.updateById(wrkMastSta); | 
 |  |  |                             } catch (Exception e) { | 
 |  |  |                                 log.error("更新小车任务失败"); | 
 |  |  |                             } | 
 |  |  |                             return true; | 
 |  |  |                         } else { | 
 |  |  |                             log.error("3879行,货物搬运任务:工作号{}所属任务下发后地图同步失败", wrkMastSta.getWrkNo()); | 
 |  |  |                         } | 
 |  |  |                     } else { | 
 |  |  |                         log.error("工作号{}所属任务下发失败", wrkMastSta.getWrkNo()); | 
 |  |  |                     } | 
 |  |  |                     break; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  | //            } | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("3989行执行小车取空板任务下发失败"); | 
 |  |  |             log.error("3989行"+e); | 
 |  |  |             log.error("3989行" + e); | 
 |  |  |         } | 
 |  |  |         return false; | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /* | 
 |  |  |     * 有任务但未执行  此时需要调整小车位置 | 
 |  |  |     * */ | 
 |  |  |      * 有任务但未执行  此时需要调整小车位置 | 
 |  |  |      * */ | 
 |  |  |     public synchronized void rgvRunWrkMastEmptyStaAvoidance() { | 
 |  |  |         try{ | 
 |  |  |             Integer integer = wrkMastStaMapper.selectAllWrkStsCount(null,0);//查询状态为0的任务 | 
 |  |  |             if (integer==0){ | 
 |  |  |         try { | 
 |  |  | //            Integer integer = wrkMastStaMapper.selectAllWrkStsCount(null,0);//查询状态为0的任务 | 
 |  |  | //            if (integer==0){ | 
 |  |  | //                return; | 
 |  |  | //            } | 
 |  |  |             WrkMastSta wrkMastSta = wrkMastStaMapper.selectAllWrkStsCountWrkMastSta(null, 0); | 
 |  |  |             if (Cools.isEmpty(wrkMastSta)) { | 
 |  |  |                 return; | 
 |  |  |             } | 
 |  |  |             for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
 |  |  |             Integer[] rgvRunSta = RouteUtils.RgvRunSta(wrkMastSta.getStaStart(), wrkMastSta.getStaEnd()); | 
 |  |  |             boolean signRgv = true; | 
 |  |  |             boolean signRgv1 = true; | 
 |  |  |             boolean signRgv2 = true; | 
 |  |  |             for (RgvSlave rgvSlave : slaveProperties.getRgv()) { | 
 |  |  |                 RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
 |  |  |                 RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
 |  |  |                 if (rgvProtocol == null) { | 
 |  |  | 
 |  |  |                 // 只有当RGV空闲、自动,工位一无物//rgv可用 | 
 |  |  |                 if (rgvProtocol.getStatusType() == RgvStatusType.IDLE | 
 |  |  |                         && rgvProtocol.getModeType() == RgvModeType.AUTO | 
 |  |  |                         && rgvProtocol.getLoaded1()==0  //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 | 
 |  |  |                         && rgvProtocol.getTaskNo1()==0 | 
 |  |  |                         && rgvProtocol.getTaskNo2()==0 | 
 |  |  |                         && rgvProtocol.getLoaded1() == 0  //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 | 
 |  |  |                         && rgvProtocol.getTaskNo1() == 0 | 
 |  |  |                         && rgvProtocol.getTaskNo2() == 0 | 
 |  |  |                         && rgvProtocol.getStatusType1() == RgvStatusType.IDLE | 
 |  |  |                         && rgvProtocol.getStatusType2() == RgvStatusType.IDLE | 
 |  |  |                 ) { | 
 |  |  |                     BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); | 
 |  |  |                     if (rgvProtocol.getRgvPosI().equals(basRgvMap.getStartRoute())){ | 
 |  |  |                         continue; | 
 |  |  | //                    if (rgvProtocol.getRgvPosI().equals(basRgvMap.getStartRoute())){ | 
 |  |  | //                    if (!RouteUtils.RgvRunStaSign(rgvProtocol.getRgvPosI(),RouteUtils.RouteIndexFarMas(rgvProtocol.getRgvNo(),rgvRunSta[rgvProtocol.getRgvNo()-1]),rgvProtocol.getRgvNo())){ | 
 |  |  |                     if (!RouteUtils.RgvRunStaSign(rgvProtocol.getRgvPosI(), rgvRunSta[rgvProtocol.getRgvNo() - 1], rgvProtocol.getRgvNo())) { | 
 |  |  |                         if (rgvProtocol.getRgvNo() == 1) { | 
 |  |  |                             signRgv1 = false; | 
 |  |  |                         } else { | 
 |  |  |                             signRgv2 = false; | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                     if (rgvProtocol.getRgvNo()==1 && (rgvProtocol.getRgvPosI().equals(101) || rgvProtocol.getRgvPosI().equals(102) )){ | 
 |  |  |                         continue; | 
 |  |  |                     } else if (rgvProtocol.getRgvNo()==2 && (rgvProtocol.getRgvPosI().equals(116) || rgvProtocol.getRgvPosI().equals(117) ) ){ | 
 |  |  |                         continue; | 
 |  |  |                     if (rgvProtocol.getRgvNo() == 1 && (rgvProtocol.getRgvPosI().equals(101) || rgvProtocol.getRgvPosI().equals(102))) { | 
 |  |  |                         signRgv = false; | 
 |  |  |                         break; | 
 |  |  |                     } else if (rgvProtocol.getRgvNo() == 2 && (rgvProtocol.getRgvPosI().equals(116) || rgvProtocol.getRgvPosI().equals(117))) { | 
 |  |  |                         signRgv = false; | 
 |  |  |                         break; | 
 |  |  |                     } | 
 |  |  |                     rgvAvoidanceXY(rgvProtocol.getRgvNo()); | 
 |  |  |                     rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); | 
 |  |  |                 } else { | 
 |  |  |                     signRgv = false; | 
 |  |  |                     break; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |             if (signRgv && (signRgv1 || signRgv2)) { | 
 |  |  |                 for (RgvSlave rgvSlave : slaveProperties.getRgv()) { | 
 |  |  |                     RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
 |  |  |                     RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
 |  |  |                     if (rgvProtocol == null) { | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                     // 只有当RGV空闲、自动,工位一无物//rgv可用 | 
 |  |  |                     if (rgvProtocol.getStatusType() == RgvStatusType.IDLE | 
 |  |  |                             && rgvProtocol.getModeType() == RgvModeType.AUTO | 
 |  |  |                             && rgvProtocol.getLoaded1() == 0  //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 | 
 |  |  |                             && rgvProtocol.getTaskNo1() == 0 | 
 |  |  |                             && rgvProtocol.getTaskNo2() == 0 | 
 |  |  |                             && rgvProtocol.getStatusType1() == RgvStatusType.IDLE | 
 |  |  |                             && rgvProtocol.getStatusType2() == RgvStatusType.IDLE | 
 |  |  |                     ) { | 
 |  |  |                         BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvProtocol.getRgvNo()); | 
 |  |  |                         rgvAvoidanceXY(rgvProtocol.getRgvNo(), rgvRunSta); | 
 |  |  |                         rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), basRgvMap.getStartRoute()); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("4109行执行小车初始化任务下发失败"); | 
 |  |  |             log.error("4109行"+e); | 
 |  |  |             log.error("4109行" + e); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | 
 |  |  |      * 刷新地图数据 | 
 |  |  |      * */ | 
 |  |  |     public synchronized void refreshRgvMap() { | 
 |  |  |         try{ | 
 |  |  |             for (RgvSlave rgvSlave:slaveProperties.getRgv()) { | 
 |  |  |         try { | 
 |  |  |             for (RgvSlave rgvSlave : slaveProperties.getRgv()) { | 
 |  |  |                 RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvSlave.getId()); | 
 |  |  |                 RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); | 
 |  |  |                 if (rgvProtocol == null) { | 
 |  |  | 
 |  |  |                 // 只有当RGV空闲、自动,工位一无物//rgv可用 | 
 |  |  |                 if (rgvProtocol.getStatusType() == RgvStatusType.IDLE | 
 |  |  |                         && rgvProtocol.getModeType() == RgvModeType.AUTO | 
 |  |  |                         && rgvProtocol.getLoaded1()==0  //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 | 
 |  |  |                         && rgvProtocol.getTaskNo1()==0 | 
 |  |  |                         && rgvProtocol.getTaskNo2()==0 | 
 |  |  |                         && rgvProtocol.getLoaded1() == 0  //现场修改:叠盘机,不满都算无物,怎么判断需要跟电控对接 | 
 |  |  |                         && rgvProtocol.getTaskNo1() == 0 | 
 |  |  |                         && rgvProtocol.getTaskNo2() == 0 | 
 |  |  |                 ) { | 
 |  |  |                     BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvSlave.getId()); | 
 |  |  |                     basRgvMap.setNowRoute(rgvProtocol.getRgvPosI()); | 
 |  |  |                     rgvMapUpdate(basRgvMap,basRgvMap.getStartRoute(),basRgvMap.getStartRoute()); | 
 |  |  |                     rgvMapUpdate(basRgvMap, basRgvMap.getStartRoute(), basRgvMap.getStartRoute()); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("4109行执行小车初始化任务下发失败"); | 
 |  |  |             log.error("4109行"+e); | 
 |  |  |             log.error("4109行" + e); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /* | 
 |  |  |      * 小车XY移动  避让 | 
 |  |  |      * */ | 
 |  |  |     public synchronized boolean rgvAvoidanceXY(Integer rgvId){ | 
 |  |  |         if (rgvId==1){ | 
 |  |  |             try{ | 
 |  |  |                 BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId); | 
 |  |  |     public synchronized boolean rgvAvoidanceXY(Integer rgvId, Integer[] rgvRunSta) { | 
 |  |  |         if (rgvId == 2) { | 
 |  |  |             try { | 
 |  |  | //                BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId); | 
 |  |  |                 //  命令下发区 -------------------------------------------------------------------------- | 
 |  |  |                 RgvCommand rgvCommand = new RgvCommand(); | 
 |  |  |                 rgvCommand.setRgvNo(rgvId); // RGV编号 | 
 |  |  |                 rgvCommand.setAckFinish1((short) 0);  // 工位1任务完成确认位 | 
 |  |  |                 rgvCommand.setTaskNo1((short)32222); // 工位1工作号 | 
 |  |  |                 rgvCommand.setTaskNo1((short) 32222); // 工位1工作号 | 
 |  |  |                 rgvCommand.setTaskMode1(RgvTaskModeType.X_MOVE); // 工位1任务模式:  回原点 | 
 |  |  |                 //basRgvMap.getLockStartRoute().shortValue() | 
 |  |  |                 rgvCommand.setSourceStaNo1( (short)101); | 
 |  |  |                 rgvCommand.setSourceStaNo1(rgvRunSta[1].shortValue()); | 
 |  |  |                 rgvCommand.setCommand((short) 1);   //工位1任务确认 | 
 |  |  |                 if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(4, rgvCommand))) { | 
 |  |  |                     //step=2,工位1、2写任务;   step=4,工位1写任务;     step=5,工位2写任务   step=9,回原点 9999任务号 | 
 |  |  | 
 |  |  |                 } else { | 
 |  |  |                     return true; | 
 |  |  |                 } | 
 |  |  |             }catch (Exception e){ | 
 |  |  |             } catch (Exception e) { | 
 |  |  |                 return false; | 
 |  |  |  | 
 |  |  |             } | 
 |  |  |         }else { | 
 |  |  |             try{ | 
 |  |  |                 BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId); | 
 |  |  |         } else { | 
 |  |  |             try { | 
 |  |  | //                BasRgvMap basRgvMap = basRgvMapMapper.selectById(rgvId); | 
 |  |  |                 //  命令下发区 -------------------------------------------------------------------------- | 
 |  |  |                 RgvCommand rgvCommand = new RgvCommand(); | 
 |  |  |                 rgvCommand.setRgvNo(rgvId); // RGV编号 | 
 |  |  |                 rgvCommand.setAckFinish2((short) 0);  // 工位2任务完成确认位 | 
 |  |  |                 rgvCommand.setTaskNo2((short)32222); // 工位2工作号 | 
 |  |  |                 rgvCommand.setTaskNo2((short) 32222); // 工位2工作号 | 
 |  |  |                 rgvCommand.setTaskMode2(RgvTaskModeType.X_MOVE); // 工位2任务模式:  回原点 | 
 |  |  |                 rgvCommand.setSourceStaNo2((short)117); | 
 |  |  |                 rgvCommand.setSourceStaNo2(rgvRunSta[0].shortValue()); | 
 |  |  |                 rgvCommand.setCommand((short) 2);   //工位2任务确认 | 
 |  |  |                 if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(5, rgvCommand))) { | 
 |  |  |                     //step=2,工位1、2写任务;   step=4,工位1写任务;     step=5,工位2写任务   step=9,回原点 9999任务号 | 
 |  |  | 
 |  |  |                 } else { | 
 |  |  |                     return true; | 
 |  |  |                 } | 
 |  |  |             }catch (Exception e){ | 
 |  |  |             } catch (Exception e) { | 
 |  |  |                 return false; | 
 |  |  |  | 
 |  |  |             } | 
 |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     /* | 
 |  |  |     * 小车取货至工位任务 | 
 |  |  |     * */ | 
 |  |  |     public synchronized boolean rgvTakeFullAll(Integer rgvId,WrkMastSta wrkMastSta){ | 
 |  |  |         try{ | 
 |  |  |      * 小车取货至工位任务 | 
 |  |  |      * */ | 
 |  |  |     public synchronized boolean rgvTakeFullAll(Integer rgvId, WrkMastSta wrkMastSta) { | 
 |  |  |         try { | 
 |  |  |             //  命令下发区 -------------------------------------------------------------------------- | 
 |  |  |             RgvCommand rgvCommand = new RgvCommand(); | 
 |  |  |             rgvCommand.setRgvNo(rgvId); // RGV编号 | 
 |  |  | 
 |  |  |             } else { | 
 |  |  |                 return true; | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | 
 |  |  |     /* | 
 |  |  |      * 小车取货至工位任务 | 
 |  |  |      * */ | 
 |  |  |     public synchronized boolean rgvTakeFull(Integer rgvId,WrkMastSta wrkMastSta){ | 
 |  |  |         try{ | 
 |  |  |     public synchronized boolean rgvTakeFull(Integer rgvId, WrkMastSta wrkMastSta) { | 
 |  |  |         try { | 
 |  |  |             //  命令下发区 -------------------------------------------------------------------------- | 
 |  |  |             RgvCommand rgvCommand = new RgvCommand(); | 
 |  |  |             rgvCommand.setRgvNo(rgvId); // RGV编号 | 
 |  |  | 
 |  |  |             } else { | 
 |  |  |                 return true; | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /* | 
 |  |  |     * 小车放货至输送线任务 | 
 |  |  |     * */ | 
 |  |  |     public synchronized boolean rgvPutFull(Integer rgvId,WrkMastSta wrkMastSta){ | 
 |  |  |         try{ | 
 |  |  |      * 小车放货至输送线任务 | 
 |  |  |      * */ | 
 |  |  |     public synchronized boolean rgvPutFull(Integer rgvId, WrkMastSta wrkMastSta) { | 
 |  |  |         try { | 
 |  |  |             //  命令下发区 -------------------------------------------------------------------------- | 
 |  |  |             RgvCommand rgvCommand = new RgvCommand(); | 
 |  |  |             rgvCommand.setRgvNo(rgvId); // RGV编号 | 
 |  |  | 
 |  |  |             } else { | 
 |  |  |                 return true; | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | 
 |  |  |     /* | 
 |  |  |      * 小车取空板至工位任务  叠盘 | 
 |  |  |      * */ | 
 |  |  |     public synchronized boolean rgvTakeEmpty(Integer rgvId,WrkMastSta wrkMastSta){ | 
 |  |  |         try{ | 
 |  |  |     public synchronized boolean rgvTakeEmpty(Integer rgvId, WrkMastSta wrkMastSta) { | 
 |  |  |         try { | 
 |  |  |             //  命令下发区 -------------------------------------------------------------------------- | 
 |  |  |             RgvCommand rgvCommand = new RgvCommand(); | 
 |  |  |             rgvCommand.setRgvNo(rgvId); // RGV编号 | 
 |  |  | 
 |  |  |             } else { | 
 |  |  |                 return true; | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | 
 |  |  |     /* | 
 |  |  |      * 小车放空板至输送线任务   //拆盘 | 
 |  |  |      * */ | 
 |  |  |     public synchronized boolean rgvPutEmpty(Integer rgvId,WrkMastSta wrkMastSta){ | 
 |  |  |         try{ | 
 |  |  |     public synchronized boolean rgvPutEmpty(Integer rgvId, WrkMastSta wrkMastSta) { | 
 |  |  |         try { | 
 |  |  |             //  命令下发区 -------------------------------------------------------------------------- | 
 |  |  |             RgvCommand rgvCommand = new RgvCommand(); | 
 |  |  |             rgvCommand.setRgvNo(rgvId); // RGV编号 | 
 |  |  | 
 |  |  |             } else { | 
 |  |  |                 return true; | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | 
 |  |  |     /* | 
 |  |  |      * 小车取空板至工位任务  满取 | 
 |  |  |      * */ | 
 |  |  |     public synchronized boolean rgvTakeEmptyFull(Integer rgvId,WrkMastSta wrkMastSta){ | 
 |  |  |         try{ | 
 |  |  |     public synchronized boolean rgvTakeEmptyFull(Integer rgvId, WrkMastSta wrkMastSta) { | 
 |  |  |         try { | 
 |  |  |             //  命令下发区 -------------------------------------------------------------------------- | 
 |  |  |             RgvCommand rgvCommand = new RgvCommand(); | 
 |  |  |             rgvCommand.setRgvNo(rgvId); // RGV编号 | 
 |  |  | 
 |  |  |             } else { | 
 |  |  |                 return true; | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | 
 |  |  |     /* | 
 |  |  |      * 小车放空板至输送线任务   //满放 | 
 |  |  |      * */ | 
 |  |  |     public synchronized boolean rgvPutEmptyFull(Integer rgvId,WrkMastSta wrkMastSta){ | 
 |  |  |         try{ | 
 |  |  |     public synchronized boolean rgvPutEmptyFull(Integer rgvId, WrkMastSta wrkMastSta) { | 
 |  |  |         try { | 
 |  |  |             //  命令下发区 -------------------------------------------------------------------------- | 
 |  |  |             RgvCommand rgvCommand = new RgvCommand(); | 
 |  |  |             rgvCommand.setRgvNo(rgvId); // RGV编号 | 
 |  |  | 
 |  |  |             } else { | 
 |  |  |                 return true; | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | 
 |  |  |     /* | 
 |  |  |      * 小车复位 | 
 |  |  |      * */ | 
 |  |  |     public synchronized boolean rgvComplete(Integer rgvId){ | 
 |  |  |         try{ | 
 |  |  |     public synchronized boolean rgvComplete(Integer rgvId) { | 
 |  |  |         try { | 
 |  |  |             //  命令下发区 -------------------------------------------------------------------------- | 
 |  |  |             if (!MessageQueue.offer(SlaveType.Rgv, rgvId, new Task(3, new RgvCommand()))) { | 
 |  |  |                 //step=2,工位1、2写任务;   step=4,工位1写任务;     step=5,工位2写任务 | 
 |  |  |                 log.error("RGV命令下发失败,RGV号={}",rgvId); | 
 |  |  |                 log.error("RGV命令下发失败,RGV号={}", rgvId); | 
 |  |  |                 return false; | 
 |  |  |             } else { | 
 |  |  |                 log.info("RGV命令下发成功,RGV号={}",rgvId); | 
 |  |  |                 log.info("RGV命令下发成功,RGV号={}", rgvId); | 
 |  |  |                 return true; | 
 |  |  |             } | 
 |  |  |         }catch (Exception e){ | 
 |  |  |             log.error("RGV命令下发失败,RGV号={}。异常:"+e,rgvId); | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("RGV命令下发失败,RGV号={}。异常:" + e, rgvId); | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  | 
 |  |  |     /* | 
 |  |  |      * 小车地图更新  更新锁 | 
 |  |  |      * */ | 
 |  |  |     public synchronized boolean rgvMapUpdate(BasRgvMap basRgvMapCurrent,Integer staStart,Integer staEnd){ | 
 |  |  |     public synchronized boolean rgvMapUpdate(BasRgvMap basRgvMapCurrent, Integer staStart, Integer staEnd, boolean sign) { | 
 |  |  |         if (sign) { | 
 |  |  |             staStart = RouteUtils.RouteIndexFarMasOtherNearUpMap(basRgvMapCurrent.getRgvNo(), staStart); | 
 |  |  |             staEnd = RouteUtils.RouteIndexFarMasOtherNearUpMap(basRgvMapCurrent.getRgvNo(), staEnd); | 
 |  |  |         } | 
 |  |  |         return rgvMapUpdate(basRgvMapCurrent, staStart, staEnd); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     public synchronized boolean rgvMapUpdate(BasRgvMap basRgvMapCurrent, Integer staStart, Integer staEnd) { | 
 |  |  |  | 
 |  |  | //        List<Integer> integers = RouteUtils.RouteMapCurrentFar(basRgvMapCurrent.getNowRoute(),staStart,staEnd, basRgvMapCurrent.getLockStartRoute()); | 
 |  |  |         //更新当前小车锁 | 
 |  |  |         try{ | 
 |  |  |         try { | 
 |  |  |             Integer farCurrentStaNo = RouteUtils.RouteIndexFarMas(basRgvMapCurrent.getNowRoute(), staStart, staEnd, basRgvMapCurrent.getLockStartRoute());//获取最远站点 | 
 |  |  |             Integer fallMerge = RouteUtils.RouteIndexFarMas(basRgvMapCurrent.getRgvNo(), farCurrentStaNo); //获取合并干涉项 | 
 |  |  |             basRgvMapCurrent.setLockEndRoute(fallMerge); | 
 |  |  | 
 |  |  |             List<Integer> integers = RouteUtils.RouteMapCurrentFar(fallMerge, basRgvMapCurrent.getLockStartRoute()); | 
 |  |  |             Integer lockEndRoute = RouteUtils.RouteMapOtherFarStnNo(integers, basRgvMapCurrent.getLockStartRoute());//另一台小车可活动最远位置 | 
 |  |  |             basRgvMapOther.setEndRoute(lockEndRoute); | 
 |  |  |             basRgvMapOther.setEndRouteOther(RouteUtils.RouteIndexFarMasOtherNear(rgvNoOther, lockEndRoute)); | 
 |  |  |             basRgvMapMapper.updateById(basRgvMapOther); | 
 |  |  |             return true; | 
 |  |  |         }catch (Exception e){ | 
 |  |  |         } catch (Exception e) { | 
 |  |  |             log.error("小车地图更新出错!"); | 
 |  |  |             return false; | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 二楼空托回流到一楼,3.站到站任务 | 
 |  |  |      */ | 
 |  |  |     public synchronized void emptyTrayReflux() { | 
 |  |  |         for (CrnSlave crn : slaveProperties.getCrn()) { | 
 |  |  |             List<WrkMast> wrkMastList = wrkMastMapper.selectList(new EntityWrapper<WrkMast>().eq("wrk_sts", 2) | 
 |  |  |                     .eq("crn_no", crn.getId()).eq("io_type", 3)); | 
 |  |  |             for (WrkMast wrkMast : wrkMastList) { | 
 |  |  |                 CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); | 
 |  |  |                 CrnProtocol crnProtocol = crnThread.getCrnProtocol(); | 
 |  |  |                 if (crnProtocol == null) { | 
 |  |  |                     continue; | 
 |  |  |                 } | 
 |  |  |                 if (crnProtocol.getStatusType() == CrnStatusType.IDLE | 
 |  |  |                         && crnProtocol.getTaskNo() == 0 | 
 |  |  |                         && crnProtocol.getModeType() == CrnModeType.AUTO | 
 |  |  |                         && crnProtocol.getLoaded() == 0 | 
 |  |  |                         && crnProtocol.getForkPos() == 0) { | 
 |  |  |  | 
 |  |  |                     CrnSlave.CrnStn crnStn = null; | 
 |  |  |                     CrnSlave.CrnStn crnStn2 = null; | 
 |  |  |                     for (CrnSlave.CrnStn crnStn1 : crn.getCrnOutStn()) { | 
 |  |  |                         if (crnStn1.getStaNo().equals(wrkMast.getStaNo())) { | 
 |  |  |                             crnStn = crnStn1; | 
 |  |  |                             break; | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                     for (CrnSlave.CrnStn crnStn1 : crn.getCrnInStn()) { | 
 |  |  |                         if (crnStn1.getStaNo().equals(wrkMast.getSourceStaNo())) { | 
 |  |  |                             crnStn2 = crnStn1; | 
 |  |  |                             break; | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                     if (Cools.isEmpty(crnStn) || Cools.isEmpty(crnStn2)) { | 
 |  |  |                         continue; | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                     // 入库命令下发区 -------------------------------------------------------------------------- | 
 |  |  |                     CrnCommand crnCommand = new CrnCommand(); | 
 |  |  |                     crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 堆垛机编号 | 
 |  |  |                     crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号 | 
 |  |  |                     crnCommand.setAckFinish((short) 0);  // 任务完成确认位 | 
 |  |  |                     crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转 | 
 |  |  |                     crnCommand.setSourcePosX(crnStn2.getRow().shortValue());     // 源库位排 | 
 |  |  |                     crnCommand.setSourcePosY(crnStn2.getBay().shortValue());     // 源库位列 | 
 |  |  |                     crnCommand.setSourcePosZ(crnStn2.getLev().shortValue());     // 源库位层 | 
 |  |  |                     crnCommand.setDestinationPosX(crnStn.getRow().shortValue());     // 目标库位排 | 
 |  |  |                     crnCommand.setDestinationPosY(crnStn.getBay().shortValue());     // 目标库位列 | 
 |  |  |                     crnCommand.setDestinationPosZ(crnStn.getLev().shortValue());     // 目标库位层 | 
 |  |  | //                    crnCommand.setSourceStaNo(crnStn.getPlatNo().shortValue());     // 源库位排 | 
 |  |  |                     if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { | 
 |  |  |                         log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); | 
 |  |  |                     } else { | 
 |  |  |                         // 修改工作档状态 2.设备上走 => 3.吊车入库中 | 
 |  |  |                         Date now = new Date(); | 
 |  |  |                         wrkMast.setWrkSts(3L); | 
 |  |  |                         wrkMast.setCrnStrTime(now); | 
 |  |  |                         wrkMast.setModiTime(now); | 
 |  |  |                         if (wrkMastMapper.updateById(wrkMast) == 0) { | 
 |  |  |                             log.error("修改工作档状态 2.设备上走 => 3.吊车入库中 失败!!,工作号={}", wrkMast.getWrkNo()); | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                     break; | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 12.跨巷道移库 | 
 |  |  |      */ | 
 |  |  |     public synchronized void autoMoveLoc() { | 
 |  |  |  | 
 |  |  |     } | 
 |  |  | } |