From d8b7de110ce5e16b95f87f79aec65c13b7f475f2 Mon Sep 17 00:00:00 2001 From: zjj <3272660260@qq.com> Date: 星期六, 20 四月 2024 17:44:50 +0800 Subject: [PATCH] #演示 --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 408 ++++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 313 insertions(+), 95 deletions(-) diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java index 2aa80f7..c4ae583 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -1,148 +1,366 @@ package com.zy.asrs.service.impl; +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.entity.LocMast; -import com.zy.asrs.entity.WaitPakin; -import com.zy.asrs.entity.WrkMast; -import com.zy.asrs.mapper.WaitPakinMapper; -import com.zy.asrs.mapper.WrkMastMapper; -import com.zy.asrs.service.LocMastService; -import com.zy.asrs.service.WrkDetlService; +import com.zy.asrs.entity.*; +import com.zy.asrs.mapper.*; +import com.zy.asrs.service.*; +import com.zy.asrs.utils.Utils; +import com.zy.asrs.utils.VersionUtils; +import com.zy.common.model.LocTypeDto; +import com.zy.common.model.MatDto; +import com.zy.common.model.SearchLocParam; import com.zy.common.model.StartupDto; +import com.zy.common.service.CommonService; +import com.zy.common.utils.CollectionUtils; +import com.zy.common.utils.HttpHandler; +import com.zy.core.CrnThread; +import com.zy.core.DevpThread; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.SlaveConnection; -import com.zy.core.enums.SlaveType; -import com.zy.core.model.DevpSlave; -import com.zy.core.model.Task; +import com.zy.core.enums.*; +import com.zy.core.model.*; +import com.zy.core.model.command.CrnCommand; +import com.zy.core.model.command.LedCommand; +import com.zy.core.model.command.RgvCommand; +import com.zy.core.model.protocol.CrnProtocol; +import com.zy.core.model.protocol.RgvProtocol; import com.zy.core.model.protocol.StaProtocol; import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.BarcodeThread; -import com.zy.core.thread.DevpThread; +import com.zy.core.thread.LedThread; +import com.zy.core.thread.SiemensDevpThread; +import com.zy.core.thread.SiemensRgvThread; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.jdbc.core.JdbcTemplate; +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 java.util.Date; -import java.util.List; +import java.util.*; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; /** + * 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔� * Created by vincent on 2020/8/6 */ @Slf4j @Service("mainService") +@Transactional public class MainServiceImpl { + + public static final long COMMAND_TIMEOUT = 5 * 1000; @Autowired private CommonService commonService; @Autowired private SlaveProperties slaveProperties; @Autowired - private WrkMastMapper wrkMastMapper; + private WrkMastStaMapper wrkMastStaMapper; @Autowired - private WrkDetlService wrkDetlService; + private FillingMastService fillingMastService; @Autowired - private WaitPakinMapper waitPakinMapper; - @Autowired - private LocMastService locMastService; - @Autowired - private JdbcTemplate jdbcTemplate; + private VacuumMastService vacuumMastService; + + @Value("${wms.url}") + private String wmsUrl; + + public Integer wrkNo1 = 10000; + + public Integer wrkNo2 = 20000; + + /** - * 鍏ュ簱绔欙紝鏍规嵁鏉$爜鎵弿鐢熸垚鍏ュ簱宸ヤ綔妗o紝宸ヤ綔鐘舵�� 2 + * 鍫嗗灈鏈烘紨绀� ===>> 搴撲綅绉昏浆 */ - @Transactional - public void generateStoreWrkFile() { - // 鏍规嵁杈撻�佺嚎plc閬嶅巻 + public void getRgvTask() { for (DevpSlave devp : slaveProperties.getDevp()) { - // 閬嶅巻鍏ュ簱鍙� - for (DevpSlave.InSta inSta : devp.getInSta()) { - // 鑾峰彇鏉$爜 - BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); - String barcode = barcodeThread.getBarcode(); - // 鑾峰彇鍏ュ簱绔欎俊鎭� - DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); - StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); - // 鍒ゆ柇鏄惁婊¤冻鍏ュ簱鏉′欢 - if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInreq1() - && !staProtocol.isEmptyMk() && staProtocol.isInreq1() && staProtocol.getWorkNO() ==0 - && staProtocol.isPakMk() && !Cools.isEmpty(barcode)) { - // 鍒ゆ柇閲嶅宸ヤ綔妗� - WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode); - if (wrkMast != null) { - log.warn("宸ヤ綔妗d腑宸插瓨鍦ㄨ绔欑姸鎬佷负1鐨勬暟鎹�,宸ヤ綔鍙�-{}", wrkMast.getWrkNo()); + for (DevpSlave.Sta inSta : devp.getInSta()) { + for (RgvSlave rgv : slaveProperties.getRgv()) { + if (!rgv.getDemo()){ continue; + } - // 鑾峰彇鍏ュ簱閫氱煡妗� - List<WaitPakin> waitPakins = waitPakinMapper.selectList(new EntityWrapper<WaitPakin>().eq("barcode", barcode)); - // 宸ヤ綔鍙� - int workNo = commonService.getWorkNo(0); - // 妫�绱㈠簱浣� - List<String> matNos = waitPakins.stream().map(WaitPakin::getMatnr).distinct().collect(Collectors.toList()); - StartupDto startupDto = commonService.getLocNo(1, 1, inSta.getStaNo(), matNos); - String locNo = startupDto.getLocNo(); - if (!waitPakins.isEmpty()) { - // 鎻掑叆宸ヤ綔鏄庣粏妗� - wrkDetlService.createWorkDetail(workNo, waitPakins, barcode); + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); + StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); + if (staProtocol == null) { + continue; } else { - log.warn("鏃犳鍏ュ簱鏉$爜鏁版嵁---{}", barcode); - continue; + staProtocol = staProtocol.clone(); } - // 鎻掑叆宸ヤ綔涓绘。 - wrkMast = new WrkMast(); - wrkMast.setWrkNo(workNo); - wrkMast.setIoTime(new Date()); - wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵�侊細2.璁惧涓婅蛋 - wrkMast.setIoType(1); // 鍏ュ嚭搴撶姸鎬侊細1.鍏ュ簱 - wrkMast.setIoPri(10D); // 浼樺厛绾э細10 - wrkMast.setCrnNo(startupDto.getCrnNo()); - wrkMast.setSourceStaNo(startupDto.getSourceStaNo()); - wrkMast.setStaNo(startupDto.getStaNo()); - wrkMast.setLocNo(startupDto.getLocNo()); - wrkMast.setBarcode(barcode); // 鎵樼洏鐮� - wrkMast.setFullPlt("Y"); // 婊℃澘锛歒 - wrkMast.setPicking("N"); // 鎷f枡 - wrkMast.setExitMk("N"); // 閫�鍑� - wrkMast.setEmptyMk("N"); // 绌烘澘 - wrkMast.setLinkMis("N"); -// wrkMast.setCtnType(sourceStaNo.getCtnType()); // 瀹瑰櫒绫诲瀷 - // 鎿嶄綔浜哄憳鏁版嵁 - wrkMast.setAppeTime(new Date()); - wrkMast.setModiTime(new Date()); - Integer insert = wrkMastMapper.insert(wrkMast); - if (insert == 0) { - throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�"); + if (staProtocol.isPakMk()){ + VacuumMast vacuumMast = vacuumMastService.selectByStatusIsN(); + FillingMast fillingMast = fillingMastService.selectByStatusIsn(); + Date now = new Date(); + WrkMastSta wrkMastSta = new WrkMastSta(); + int workNo = commonService.getWorkNo(0); + wrkMastSta.setWrkNo((long)workNo); + wrkMastSta.setWrkStart(2); + wrkMastSta.setWrkEnd(vacuumMast.getStaNo()); +// wrkMastSta.setStaStart(); + wrkMastSta.setStaEnd(fillingMast.getStaNo()); + wrkMastSta.setCreateTime(now); + wrkMastSta.setUpdateTime(now); + wrkMastSta.setBignTime(now); + wrkMastSta.setType(0); //绫诲瀷 0:闈炵┖ 1:绌烘澘 + wrkMastSta.setWrkType(3); //宸ヤ綔绫诲瀷 1:鍙栵紙鍙犵洏锛� 2锛氭斁 3锛氬彇鏀� 4锛氭媶鐩� + Integer insert = wrkMastStaMapper.insert(wrkMastSta); + if (insert>0){ + devpThread.setPakMk(devp.getId(),false); + } } - // 鏇存柊鐩爣搴撲綅鐘舵�� - LocMast locMast = locMastService.selectById(startupDto.getLocNo()); - locMast.setLocSts("S"); // S.鍏ュ簱棰勭害 - locMast.setModiTime(new Date()); - if (!locMastService.updateById(locMast)){ - throw new CoolException("鏀瑰彉搴撲綅鐘舵�佸け璐�"); - } - - // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护 - staProtocol - boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task<>(4, staProtocol)); - if (!result) { - throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触"); - } - } - } } + } + public synchronized void RGVDemoShow0() { + try { + for (DevpSlave devp : slaveProperties.getDevp()) { + for (DevpSlave.Sta inSta : devp.getInSta()) { + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); + StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); + if (staProtocol == null) { + continue; + } else { + staProtocol = staProtocol.clone(); + } +// if (){ //杈撻�佺嚎鐘舵�� +// +// } + for (RgvSlave rgv : slaveProperties.getRgv()) { + + SiemensRgvThread rgvThread = (SiemensRgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + continue; + }else { + rgvProtocol = rgvProtocol.clone(); + } + if (rgvProtocol.getStatusType() == RgvStatusType.IDLE + && rgvProtocol.getModeType() == RgvModeType.AUTO + && rgvProtocol.getLoaded1()==0 + && rgvProtocol.getTaskNo1() == 0 + && rgvThread.isPakMk() + ){ + WrkMastSta wrkMastSta = wrkMastStaMapper.selectWrkSts0(); + if (!Cools.isEmpty(wrkMastSta)){ + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(rgv.getId()); // RGV缂栧彿 + rgvCommand.setAckFinish1(false); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(wrkNo1); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 宸ヤ綅1浠诲姟妯″紡: 鍙栨斁璐� + rgvCommand.setSourceStaNo1(wrkMastSta.getWrkStart().shortValue()); //宸ヤ綅1璧风偣 + rgvCommand.setDestinationStaNo1(wrkMastSta.getWrkEnd().shortValue()); //宸ヤ綅1鐩爣绔欑偣 + rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(4, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgv.getId(), JSON.toJSON(rgvCommand)); + + } else { + vacuumMastStatusSetY(wrkMastSta.getWrkEnd()); + rgvThread.setPakMk(false); + + wrkMastSta.setWrkSts(1); + Integer update = wrkMastStaMapper.updateById(wrkMastSta); + if (update>0){ + + }else { + log.error("RGV鍛戒护涓嬪彂鍚庯紝鏇存柊宸ヤ綔浠诲姟鐘舵�佸け璐�"); + } + + } + + } + + + } + + } + } + + } + + } catch (Exception e) { + log.error("Rgv婕旂ず ===>> 澶辫触", e); + e.printStackTrace(); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } } - public static void main(String[] args) { + public synchronized void RGVDemoShow1() { + try { + for (DevpSlave devp : slaveProperties.getDevp()) { + for (DevpSlave.Sta inSta : devp.getInSta()) { + SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); + StaProtocol staProtocol = devpThread.getStation().get(inSta.getStaNo()); + if (staProtocol == null) { + continue; + } else { + staProtocol = staProtocol.clone(); + } +// if (){ //杈撻�佺嚎鐘舵�� +// +// } + for (RgvSlave rgv : slaveProperties.getRgv()) { + if (!rgv.getDemo()) { + continue; + } + SiemensRgvThread rgvThread = (SiemensRgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + continue; + }else { + rgvProtocol = rgvProtocol.clone(); + } + if (rgvProtocol.getStatusType() == RgvStatusType.IDLE + && rgvProtocol.getModeType() == RgvModeType.AUTO + && rgvProtocol.getLoaded1()==0 + && rgvProtocol.getTaskNo1() == 0 + && rgvThread.isPakMk() + ){ + WrkMastSta wrkMastSta = wrkMastStaMapper.selectWrkSts1(); + if (!Cools.isEmpty(wrkMastSta)){ + // 鍛戒护涓嬪彂鍖� -------------------------------------------------------------------------- + RgvCommand rgvCommand = new RgvCommand(); + rgvCommand.setRgvNo(rgv.getId()); // RGV缂栧彿 + rgvCommand.setAckFinish1(false); // 宸ヤ綅1浠诲姟瀹屾垚纭浣� + rgvCommand.setTaskNo1(wrkNo1); // 宸ヤ綅1宸ヤ綔鍙� + rgvCommand.setTaskMode1(RgvTaskModeType.FETCH_PUT); // 宸ヤ綅1浠诲姟妯″紡: 鍙栨斁璐� + rgvCommand.setSourceStaNo1(wrkMastSta.getWrkEnd().shortValue()); //宸ヤ綅1璧风偣 + rgvCommand.setDestinationStaNo1(wrkMastSta.getStaEnd().shortValue()); //宸ヤ綅1鐩爣绔欑偣 + rgvCommand.setCommand((short) 1); //宸ヤ綅1浠诲姟纭 + if (!MessageQueue.offer(SlaveType.Rgv, rgv.getId(), new Task(4, rgvCommand))) { + //step=2,宸ヤ綅1銆�2鍐欎换鍔★紱 step=4锛屽伐浣�1鍐欎换鍔★紱 step=5锛屽伐浣�2鍐欎换鍔� + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}锛屼换鍔℃暟鎹�={}", rgv.getId(), JSON.toJSON(rgvCommand)); + + } else { + rgvThread.setPakMk(false); + vacuumMastStatusSetN(wrkMastSta.getWrkEnd()); + fillingMastStatusSetY(wrkMastSta.getStaEnd()); + + wrkMastSta.setWrkSts(2); + Integer update = wrkMastStaMapper.updateById(wrkMastSta); + if (update>0){ + + }else { + log.error("RGV鍛戒护涓嬪彂鍚庯紝鏇存柊宸ヤ綔浠诲姟鐘舵�佸け璐�"); + } + + } + + } + + + } + + } + } + + } + + } catch (Exception e) { + log.error("Rgv婕旂ず ===>> 澶辫触", e); + e.printStackTrace(); + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + } } + public synchronized void RGVDemoShow2() throws InterruptedException { + for (RgvSlave rgv : slaveProperties.getRgv()) { +// if (!rgv.getDemo()) { +// continue; +// } + SiemensRgvThread rgvThread = (SiemensRgvThread) SlaveConnection.get(SlaveType.Rgv, rgv.getId()); + RgvProtocol rgvProtocol = rgvThread.getRgvProtocol(); + if (rgvProtocol == null) { + continue; + }else { + rgvProtocol = rgvProtocol.clone(); + } + if ((rgvProtocol.getStatusType1() == RgvStatusType.WAITING || rgvProtocol.getStatusType1()==RgvStatusType.FETCHWAITING) + && rgvProtocol.getModeType() == RgvModeType.AUTO + && rgvProtocol.getTaskNo1() >0 +// && (rgvProtocol.getStatusType() == RgvStatusType.WORKING1) + ){ + boolean rgvComplete = rgvComplete(rgv.getId()); + if (rgvComplete){ + rgvThread.setPakMk(true); + } + + } + + } + } + + public boolean vacuumMastStatusSetN(Integer staNo){ + EntityWrapper<VacuumMast> vacuumMastEntityWrapper = new EntityWrapper<>(); + vacuumMastEntityWrapper.eq("sta_no",staNo); + VacuumMast vacuumMast = vacuumMastService.selectOne(vacuumMastEntityWrapper); + vacuumMast.setStatus("N"); + boolean update = vacuumMastService.update(vacuumMast, vacuumMastEntityWrapper); + return update; + } + public boolean vacuumMastStatusSetY(Integer staNo){ + EntityWrapper<VacuumMast> vacuumMastEntityWrapper = new EntityWrapper<>(); + vacuumMastEntityWrapper.eq("sta_no",staNo); + VacuumMast vacuumMast = vacuumMastService.selectOne(vacuumMastEntityWrapper); + vacuumMast.setStatus("Y"); + boolean update = vacuumMastService.update(vacuumMast, vacuumMastEntityWrapper); + return update; + } + public boolean fillingMastStatusSetN(Integer staNo){ + EntityWrapper<FillingMast> fillingMastEntityWrapper = new EntityWrapper<>(); + fillingMastEntityWrapper.eq("sta_no",staNo); + FillingMast fillingMast = fillingMastService.selectOne(fillingMastEntityWrapper); + fillingMast.setStatus("N"); + boolean update = fillingMastService.update(fillingMast, fillingMastEntityWrapper); + return update; + } + + public boolean fillingMastStatusSetY(Integer staNo){ + EntityWrapper<FillingMast> fillingMastEntityWrapper = new EntityWrapper<>(); + fillingMastEntityWrapper.eq("sta_no",staNo); + FillingMast fillingMast = fillingMastService.selectOne(fillingMastEntityWrapper); + fillingMast.setStatus("Y"); + boolean update = fillingMastService.update(fillingMast, fillingMastEntityWrapper); + return update; + } + + + + /* + * 灏忚溅澶嶄綅 + * */ + 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鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}",rgvId); + return false; + } else { + log.info("RGV鍛戒护涓嬪彂鎴愬姛锛孯GV鍙�={}",rgvId); + return true; + } + }catch (Exception e){ + log.error("RGV鍛戒护涓嬪彂澶辫触锛孯GV鍙�={}銆傚紓甯革細"+e,rgvId); + return false; + } + } + + + } -- Gitblit v1.9.1