src/main/java/com/zy/asrs/entity/MesReturn.java
New file @@ -0,0 +1,20 @@ package com.zy.asrs.entity; import com.alibaba.fastjson.annotation.JSONField; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; // MES接口返回结果 @Data public class MesReturn { // 1:成功;2:失败 @JsonProperty("Success") @JSONField(name = "Success") private String Success; // 失败消息 @JsonProperty("Message") @JSONField(name = "Message") private String Message; } src/main/java/com/zy/asrs/entity/TransParent.java
@@ -12,7 +12,7 @@ private String taskno; // 任务名称,wcs_task_header表中的task_name private String taskname; // AGV编码 // 下发申请是:1.滑块库 2.连接器库 @JsonProperty("AgvCode") @JSONField(name = "AgvCode") private String AgvCode; src/main/java/com/zy/asrs/entity/WrkMast.java
@@ -26,7 +26,7 @@ private static final long serialVersionUID = 1L; @ApiModelProperty(value= "") @TableId(value = "id", type = IdType.AUTO) @TableId(value = "id", type = IdType.INPUT) private Long id; /** src/main/java/com/zy/asrs/entity/WrkMastLog.java
@@ -29,6 +29,9 @@ @ApiModelProperty(value= "编号") private Long id; @ApiModelProperty("日志ID") private Long logId; /** * 工作号 */ src/main/java/com/zy/asrs/enums/RcsRetMethodEnum.java
@@ -6,7 +6,9 @@ TASK_OUT_BIN("outbin", "走出储位"), APPLY_IN_STATION("applyInStation", "入站请求"), APPLY_OFF_STATION("applyOutStation", "离站请求"), // APPLY_OFF_STATION("applyOutStation", "离站请求"), APPLY_IN_OFF_STATION("applyInOffStation", "取货离站请求"), APPLY_OFF_STATION("applyOutOffStation", "放货离站请求"), ARRIVE_ON_STATION("arriveOnStation", "到站完成"), ARRIVE_OFF_STATION("arriveOffStation", "离站完成"), src/main/java/com/zy/asrs/service/AgvTaskService.java
File was renamed from src/main/java/com/zy/asrs/service/TaskService.java @@ -5,5 +5,5 @@ import org.springframework.stereotype.Service; @Service public interface TaskService extends IService<AgvTask> { public interface AgvTaskService extends IService<AgvTask> { } src/main/java/com/zy/asrs/service/impl/AgvTaskServiceImpl.java
New file @@ -0,0 +1,12 @@ package com.zy.asrs.service.impl; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.zy.asrs.entity.AgvTask; import com.zy.asrs.mapper.TaskMapper; import com.zy.asrs.service.AgvTaskService; import org.springframework.stereotype.Service; @Service public class AgvTaskServiceImpl extends ServiceImpl<TaskMapper, AgvTask> implements AgvTaskService { } src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -101,6 +101,8 @@ @Autowired private HikUtils hikUtils; @Autowired private AgvTaskServiceImpl agvTaskService; /** * 组托 @@ -129,6 +131,38 @@ //LED LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, inSta.getLed()); // 尺寸检测异常 boolean back = false; String errMsg = ""; if (staProtocol.isFrontError()) { errMsg = "前超限"; back = true; } if (!back && staProtocol.isBackError()) { errMsg = "后超限"; back = true; } if (!back && staProtocol.isHighError()) { errMsg = "高超限"; back = true; } if (!back && staProtocol.isLeftError()) { errMsg = "左超限"; back = true; } if (!back && staProtocol.isRightError()) { errMsg = "右超限"; back = true; } if (!back && staProtocol.isWeightError()) { errMsg = "超重"; back = true; } if (!back && staProtocol.isBarcodeError()) { errMsg = "扫码失败"; back = true; } // 判断是否满足入库条件 if (!staProtocol.isLoading()) { continue; @@ -137,14 +171,39 @@ if (staProtocol.isAutoing() && staProtocol.isInEnable() && !staProtocol.isEmptyMk() && staProtocol.getWorkNo() == 9999 && staProtocol.getWorkNo() >9990 && staProtocol.isEmptyOutType() && staProtocol.isPakMk()) { News.warnNoLog("" + mark + " - 0" + " - 开始执行"); Short wrkNo = 9981; Short bark = 303; if(staProtocol.getSiteId()==304){ wrkNo = 9982; bark = 306; }else if(staProtocol.getSiteId()==307){ wrkNo = 9983; bark = 307; } if (back) { // led 异常显示 if (ledThread != null) { String errorMsg = errMsg; MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg)); } log.error("输送线异常组托退回={}",errMsg); staProtocol.setWorkNo( wrkNo); staProtocol.setStaNo(bark); // devpThread.setPakMk(staProtocol.getSiteId(), false); boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); continue; } String barcode = barcodeThread.getBarcode(); if (!Cools.isEmpty(barcode)) { News.info("" + mark + " - 1" + " - {}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode); if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)) { if ("NG".endsWith(barcode) || "NoRead".equals(barcode) || "empty".equals(barcode)|| "00000000".equals(barcode)) { // staProtocol.setWorkNo((short) 9992); // staProtocol.setStaNo(inSta.getBackSta().shortValue()); // devpThread.setPakMk(staProtocol.getSiteId(), false); @@ -155,6 +214,12 @@ String errorMsg = "扫码失败,请重试"; MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg)); } log.error("输送线异常组托退回={}",errMsg); staProtocol.setWorkNo( wrkNo); staProtocol.setStaNo(bark); // devpThread.setPakMk(staProtocol.getSiteId(), false); boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); continue; } } else { @@ -169,6 +234,12 @@ String errorMsg = "扫码失败,请重试"; MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg)); } log.error("输送线异常组托退回={}",errMsg); staProtocol.setWorkNo( wrkNo); staProtocol.setStaNo(bark); // devpThread.setPakMk(staProtocol.getSiteId(), false); boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); continue; } @@ -283,6 +354,12 @@ String errorMsg = jsonObject.getString("msg"); MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg)); } log.error("输送线异常组托退回={}",errMsg); staProtocol.setWorkNo( wrkNo); staProtocol.setStaNo(bark); // devpThread.setPakMk(staProtocol.getSiteId(), false); boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); } } catch (Exception e) { @@ -540,7 +617,7 @@ if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() == 9991 && staProtocol.isPakMk()) { News.warnNoLog("" + mark + " - 0" + " - 开始执行"); @@ -549,7 +626,21 @@ if (barcodeThread == null) { continue; } String name="401"; if (staProtocol.getSiteId()==402){ name = "402"; } String bar = ""; Config name1 = configService.selectOne(new EntityWrapper<Config>().eq("name", name)); if (!Cools.isEmpty(name1)) { bar = name1.getValue(); } String barcode = barcodeThread.getBarcode(); if (barcode.equals("00000000")){ barcode = bar; } if (!Cools.isEmpty(barcode)) { News.info("" + mark + " - 1" + " - {}号条码扫描器检测条码信息:{}", insta.getBarcode(), barcode); if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) { @@ -606,7 +697,8 @@ throw new CoolException("保存工作明细档历史档失败"); } // 保存工作主档历史档 if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) { if (!wrkMastLogService.save(wrkMast.getWrkNo())) { throw new CoolException("保存工作主档历史档失败"); } @@ -704,7 +796,7 @@ staProtocol = staProtocol.clone(); } if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) { if (staProtocol.isAutoing() && staProtocol.isLoading()) { CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkMast.getCrnNo()); CrnProtocol crnProtocol = crnThread.getCrnProtocol(); @@ -718,9 +810,6 @@ .eq("loc_no", wrkMast.getSourceLocNo())); short staNo = wrkMast.getStaNo().shortValue(); if (wrkMast.getStaNo() == 1004) { staNo = 2003; } // 下发站点信息 staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); @@ -1168,14 +1257,14 @@ } //查询在库信息 LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>() .eq("loc_sts", "R") .in("loc_sts", "R","P") .eq("loc_no", wrkMast.getSourceLocNo())); if (Cools.isEmpty(locMast)) { News.error("出库 ===>> 库位中没有这笔资料", wrkMast.getSourceLocNo()); continue; } //堆垛机接驳站点没有空料架 if(staProtocol.getSiteId()==307&&!staProtocol.isEmptyOutType()&&(Cools.isEmpty(wrkMast.getCtnType())||wrkMast.getCtnType()==0)){ if(!staProtocol.isEmptyOutType()&&(Cools.isEmpty(wrkMast.getCtnType())||wrkMast.getCtnType()==0)){ //请求wms下发agv搬运空料架到堆垛机接驳站点任务 try { HashMap<String,Object> hashMap=new HashMap<>(); @@ -1198,17 +1287,17 @@ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } } Boolean config = true; if (staProtocol.getSiteId()==307 && !staProtocol.isEmptyOutType()){ config = false; } // 判断堆垛机出库站状态 // 判断堆垛机出库站状态&& staProtocol.isOutEnable() if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") && staProtocol.getWorkNo() == 0 && staProtocol.isOutEnable() && config) { && staProtocol.isEmptyOutType()) { // 命令下发区 -------------------------------------------------------------------------- //判断是否有正在执行中的AGV任务 List<AgvTask> agvTasks = agvTaskService.selectList(new EntityWrapper<AgvTask>().eq("wrk_sts", 302).eq("source_sta_no", staProtocol.getSiteId())); if (agvTasks != null && agvTasks.size() > 0) { continue; } // 堆垛机控制过滤 if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) { // continue; @@ -1288,16 +1377,6 @@ } break; } }else if ((staProtocol.getSiteId()==304 || staProtocol.getSiteId()==301) && staProtocol.isAutoing() && (staProtocol.isLoading() || staProtocol.getWorkNo() != 0)) { if (staProtocol.getSiteId() == 304){ wrkMast.setSourceStaNo(301); }else { wrkMast.setSourceStaNo(304); } wrkMast.setModiTime(new Date()); wrkMastMapper.updateById(wrkMast); } } @@ -1805,10 +1884,7 @@ // 站点条件判断 if (staProtocol.isAutoing() && staProtocol.isInEnable() && staProtocol.isEmptyMk() && (staProtocol.getWorkNo() ==0) && staProtocol.isPakMk() // && staProtocol.getEmptyInType() == 1 ) { News.warnNoLog("" + mark + " - 0" + " - 开始执行:空栈板初始化入库,叉车入库站放货"); @@ -1841,7 +1917,6 @@ try { LocTypeDto locTypeDto = new LocTypeDto(staProtocol); SearchLocParam param = new SearchLocParam(); param.setIoType(10); param.setSourceStaNo(emptyInSta.getStaNo()); @@ -2021,9 +2096,8 @@ DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId()); // 命令集合 List<LedCommand> commands = new ArrayList<>(); // // 工作档集合 // List<WrkMast> wrkMasts = new ArrayList<>(); List<Integer> workNoList = new ArrayList<>(); // 工作档集合 List<WrkMast> wrkMasts = new ArrayList<>(); for (Integer staNo : led.getStaArr()) { // 获取叉车站点 StaProtocol staProtocol = devpThread.getStation().get(staNo); @@ -2032,48 +2106,20 @@ } else { staProtocol = staProtocol.clone(); } Integer wrkNo = null; Integer ioType = null; Integer targetStaNo = null; String sourceLocNo = null; String locNo = null; String barcode = null; // 获取工作档数据 WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo()); // if (null == wrkMast || wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { continue; } if (null == wrkMast) { List<WrkMastLog> wrkMastLogs = wrkMastLogService.selectList(new EntityWrapper<WrkMastLog>() .eq("wrk_no", staProtocol.getWorkNo()) .orderBy("modi_time", false) ); if (wrkMastLogs.isEmpty()) { continue; } WrkMastLog wrkMastLog = wrkMastLogs.get(0); wrkNo = wrkMastLog.getWrkNo(); ioType = wrkMastLog.getIoType(); sourceLocNo = wrkMastLog.getSourceLocNo(); locNo = wrkMastLog.getLocNo(); targetStaNo = wrkMastLog.getStaNo(); barcode = wrkMastLog.getBarcode(); }else { wrkNo = wrkMast.getWrkNo(); ioType = wrkMast.getIoType(); sourceLocNo = wrkMast.getSourceLocNo(); locNo = wrkMast.getLocNo(); targetStaNo = wrkMast.getStaNo(); barcode = wrkMast.getBarcode(); continue; } News.warnNoLog("" + mark + " - 0" + " - 开始执行:出库 ===>> 工作档信息写入led显示器"); workNoList.add(wrkNo); News.warnNoLog(""+mark+" - 0"+" - 开始执行:出库 ===>> 工作档信息写入led显示器"); wrkMasts.add(wrkMast); // 组装命令 LedCommand ledCommand = new LedCommand(); ledCommand.setWorkNo(wrkNo); ledCommand.setIoType(ioType); ledCommand.setWorkNo(wrkMast.getWrkNo()); ledCommand.setIoType(wrkMast.getIoType()); // 出库模式 switch (ioType) { switch (wrkMast.getIoType()) { case 1: ledCommand.setTitle("全板入库"); break; @@ -2106,104 +2152,34 @@ ledCommand.setTitle("并板入库"); break; default: News.error("" + mark + " - 1" + " - 任务入出库类型错误!!![工作号:{}] [入出库类型:{}]", wrkNo, ioType); News.error(""+mark+" - 1"+" - 任务入出库类型错误!!![工作号:{}] [入出库类型:{}]", wrkMast.getWrkNo(), wrkMast.getIoType()); break; } ledCommand.setSourceLocNo(sourceLocNo); ledCommand.setLocNo(locNo); ledCommand.setStaNo(targetStaNo); ledCommand.setBarcode(barcode); ledCommand.setSourceLocNo(wrkMast.getSourceLocNo()); ledCommand.setLocNo(wrkMast.getLocNo()); ledCommand.setStaNo(wrkMast.getStaNo()); // ledCommand.setSourceStaNo(wrkMast.getSourceStaNo()); if (ioType != 110 && ioType != 10) { List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkNo); if (!wrkDetls.isEmpty()) { WrkDetl wrkDetl = wrkDetls.get(0); double anfme = 0D; double weight = 0D; for (WrkDetl detl : wrkDetls) { anfme += detl.getAnfme(); weight += detl.getWeight(); wrkDetl.setAnfme(anfme); wrkDetl.setWeight(weight); } List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>() .eq("loc_no", wrkMast.getSourceLocNo())); double totalAnfme = 0D; double totalWeight = 0D; for (LocDetl locDetl : locDetls) { totalAnfme += locDetl.getAnfme(); totalWeight += locDetl.getWeight(); } wrkDetl.setStockNum(totalAnfme); wrkDetl.setStockNum2(totalWeight); ledCommand.getMatDtos().add(new MatDto( wrkDetl.getMatnr() , wrkDetl.getMaktx() , wrkDetl.getAnfme() , wrkDetl.getWeight() , wrkDetl.getStockNum() , wrkDetl.getStockNum2() , wrkDetl.getSpecs() , wrkDetl.getSku() , wrkDetl.getZpallet() , wrkDetl.getModel() , wrkDetl.getSupp() , wrkDetl.getKpCstmrName() , wrkDetl.getOrderNo() , wrkDetl.getCstateid$() )); }else { List<WrkDetlLog> wrkDetlLogs = wrkDetlLogService.selectTodayByWrkNo(wrkNo); if(!wrkDetlLogs.isEmpty()) { WrkDetlLog wrkDetlLog = wrkDetlLogs.get(0); double anfme = 0D; double weight = 0D; for (WrkDetlLog detl : wrkDetlLogs) { anfme += detl.getAnfme(); weight += detl.getWeight(); wrkDetlLog.setAnfme(anfme); wrkDetlLog.setWeight(weight); if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) { List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo()); try{ if (wrkMast.getIoType()>100){ for (WrkDetl wrkDetl : wrkDetls){ LocDetl locDetl = locDetlService.selectMatnrSpecs(wrkDetl.getMatnr(), wrkDetl.getSpecs(), wrkMast.getSourceLocNo()); wrkDetl.setWeight(locDetl.getAnfme()); } List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>() .eq("loc_no", sourceLocNo)); double totalAnfme = 0D; double totalWeight = 0D; for (LocDetl locDetl : locDetls) { totalAnfme += locDetl.getAnfme(); totalWeight += locDetl.getWeight(); }else { for (WrkDetl wrkDetl : wrkDetls){ wrkDetl.setWeight(wrkDetl.getAnfme()); } wrkDetlLog.setStockNum(totalAnfme); wrkDetlLog.setStockNum2(totalWeight); ledCommand.getMatDtos().add(new MatDto( wrkDetlLog.getMatnr() , wrkDetlLog.getMaktx() , wrkDetlLog.getAnfme() , wrkDetlLog.getWeight() , wrkDetlLog.getStockNum() , wrkDetlLog.getStockNum2() , wrkDetlLog.getSpecs() , wrkDetlLog.getSku() , wrkDetlLog.getZpallet() , wrkDetlLog.getModel() , wrkDetlLog.getSupp() , wrkDetlLog.getKpCstmrName() , wrkDetlLog.getOrderNo() , wrkDetlLog.getCstateid$() )); } }catch (Exception e){ log.error("工作档案明细输入电视机失败1:异常信息==》"+e); } wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme(),wrkDetl.getWeight(),wrkDetl.getSpecs(),wrkDetl.getSku()))); } commands.add(ledCommand); } Set<Integer> workNos = new HashSet<>(workNoList); Set<Integer> workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet()); // 获取LED线程 LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId()); // 相同工作号集合则过滤 @@ -2234,22 +2210,19 @@ if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(3, commands))) { News.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); continue; } else { }else { ledThread.setLedMk(false); } } try { // 修改主档led标记 for (Integer wrkNo : workNoList) { WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", wrkNo)); if (wrkMast != null) { wrkMast.setOveMk("Y"); wrkMast.setModiTime(new Date()); if (wrkMastMapper.updateById(wrkMast) == 0) { News.errorNoLog("" + mark + " - 4" + " - 更新工作档失败"); throw new CoolException("更新工作档失败"); } for (WrkMast wrkMast : wrkMasts) { wrkMast.setOveMk("Y"); wrkMast.setModiTime(new Date()); if (wrkMastMapper.updateById(wrkMast) == 0) { News.errorNoLog(""+mark+" - 4"+" - 更新工作档失败"); throw new CoolException("更新工作档失败"); } } @@ -2262,7 +2235,7 @@ } } News.infoNoLog("" + mark + " - 0" + " - 出库 ===>> 工作档信息写入led显示器执行完成"); News.infoNoLog(""+mark+" - 0"+" - 出库 ===>> 工作档信息写入led显示器执行完成"); } /** @@ -2270,7 +2243,7 @@ */ public synchronized void ledReset(Integer mark) { News.warnNoLog("" + mark + " - 0" + " - 开始执行:其他 ===>> LED显示器复位,显示默认信息"); News.warnNoLog(""+mark+" - 0"+" - 开始执行:其他 ===>> LED显示器复位,显示默认信息"); for (LedSlave led : slaveProperties.getLed()) { // 获取输送线plc线程 @@ -2294,13 +2267,13 @@ if (reset && !ledThread.isLedMk()) { ledThread.setLedMk(true); if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(4, new ArrayList<>()))) { News.error("" + mark + " - 1" + " - {}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); News.error(""+mark+" - 1"+" - {}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); } else { } } } News.infoNoLog("" + mark + " - 0" + " - 执行完成:其他 ===>> LED显示器复位,显示默认信息"); News.infoNoLog(""+mark+" - 0"+" - 执行完成:其他 ===>> LED显示器复位,显示默认信息"); } /** @@ -2436,7 +2409,6 @@ int workNo = commonService.getWorkNo(0); // 保存工作档 WrkMast wrkMast = new WrkMast(); wrkMast.setId(); wrkMast.setWrkNo(workNo); wrkMast.setIoTime(new Date()); wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID src/main/java/com/zy/asrs/service/impl/RcsServiceImpl.java
@@ -4,15 +4,13 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.Cools; import com.core.common.R; import com.zy.asrs.entity.*; import com.zy.asrs.enums.RcsRetMethodEnum; import com.zy.asrs.service.AgvTaskService; import com.zy.asrs.service.RcsService; import com.zy.asrs.service.TaskService; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.SlaveType; import com.zy.core.model.Task; import com.zy.core.model.protocol.StaProtocol; import com.zy.core.thread.SiemensDevpThread; import lombok.extern.slf4j.Slf4j; @@ -29,12 +27,8 @@ import java.net.URL; import java.net.URLConnection; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; @Slf4j @Service @@ -43,8 +37,11 @@ @Value("${hik.url}") private String HIK_URL; @Value("${mes.url}") public String MES_URL; @Autowired private TaskService taskService; private AgvTaskService agvTaskService; /** @@ -56,6 +53,7 @@ */ @Override public RcsReturn reporterTask(RcsReporterTask rcsReporterTask) { log.info("海康AGV站点任务请求={}", JSONObject.toJSONString(rcsReporterTask)); RcsReturn rcsReturn = new RcsReturn(); @@ -71,70 +69,29 @@ String slotCode = values.getString("slotCode"); EntityWrapper<AgvTask> wrapper = new EntityWrapper<>(); wrapper.eq("task_no", robotTaskCode); AgvTask task = taskService.selectOne(wrapper); if(!Cools.isEmpty(task)){ AgvTask task = agvTaskService.selectOne(wrapper); if (!Cools.isEmpty(task)) { try { // q3,q8=1 if ("1".equals(carrierType)) { //AGV switch (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method))) { //放货申请 case APPLY_PUT: { switch (Objects.requireNonNull(RcsRetMethodEnum.getEnum(method))) { //放货申请 case APPLY_PUT: { if(task.getStaNo().equals("401")||task.getStaNo().equals("402")||task.getStaNo().equals("307")) { Integer sourceStaNo = Integer.valueOf(task.getStaNo()); SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); StaProtocol staProtocol = siemensDevpThread.getStation().get(sourceStaNo).clone(); //wcs反馈rcs继续执行 if (staProtocol != null && !staProtocol.isLoading() && !staProtocol.isEmptyOutType()) { RcsTaskContinue rcsTaskContinue = new RcsTaskContinue(); rcsTaskContinue.setRobotTaskCode(task.getTaskNo()); rcsTaskContinue.setTriggerType("TASK"); rcsTaskContinue.setTriggerCode(task.getTaskNo()); if(task.getTaskType().equals("AGV补空料架")){ RcsTaskContinue rcsTaskContinue = new RcsTaskContinue(); rcsTaskContinue.setRobotTaskCode(task.getTaskNo()+"-"+(task.getCtnType()-1)); rcsTaskContinue.setTriggerType("TASK"); rcsTaskContinue.setTriggerCode(task.getTaskNo()+"-"+(task.getCtnType()-1)); String url =HIK_URL + "api/robot/controller/task/extend/continue"; String response = sendPost(url, JSONObject.toJSONString(rcsTaskContinue)); if (!StringUtils.isEmpty(response) && response.contains("code")){ RcsReturn rcsReturn1 = JSONObject.parseObject(response, RcsReturn.class); if("200".equals(rcsReturn1.getCode())) { //出发PLC站点的扫码器扫码 boolean result = MessageQueue.offer(SlaveType.Devp, 1, new com.zy.core.model.Task(3, staProtocol)); log.info("AGV放货完成,给站点写9991工作号,下发任务:{},站点:{},agv任务号:{}",result,task.getStaNo(),task.getTaskNo()); if (result) { // 返回RCS rcsReturn.setCode("SUCCESS"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); }else { // 返回RCS rcsReturn.setCode("Err_Internal"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); } String url = HIK_URL + "api/robot/controller/task/extend/continue"; String response = sendPost(url, JSONObject.toJSONString(rcsTaskContinue)); if (!StringUtils.isEmpty(response) && response.contains("code")) { log.info("允许AGV放货成功"); } } } } break; //放货完成 --》agv已经离开 case TASK_END: { Integer sourceStaNo = Integer.valueOf(task.getStaNo()); SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); StaProtocol staProtocol = siemensDevpThread.getStation().get(sourceStaNo).clone(); //放货完成 --》agv已经离开 --》给PLC站点写9991工作号 if (staProtocol != null && staProtocol.isLoading() && staProtocol.isEmptyOutType() && staProtocol.getWorkNo() ==0) { staProtocol.setWorkNo((short) 9991); staProtocol.setStaNo(Short.valueOf(task.getStaNo())); boolean result = MessageQueue.offer(SlaveType.Devp, 1, new com.zy.core.model.Task(2, staProtocol)); log.info("AGV放货完成,给站点写9991工作号,下发任务:{},站点:{},agv任务号:{}",result,task.getStaNo(),task.getTaskNo()); if(result){ // 更新任务状态等内部逻辑 task.setWrkSts(304L); // 301 任务下发、302 任务执行、303 任务中断、304 任务结束 task.setModiTime(new Date()); taskService.updateById(task); // 返回RCS rcsReturn.setCode("SUCCESS"); rcsReturn.setMessage(""); @@ -142,42 +99,27 @@ data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); }else { // 返回RCS rcsReturn.setCode("Err_Internal"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); } } } break; //rcs请求wms取货申请 case APPLY_PICK: { Integer sourceStaNo = Integer.valueOf(task.getSourceStaNo()); SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); StaProtocol staProtocol = siemensDevpThread.getStation().get(sourceStaNo).clone(); //判断站点是否有料架和托盘 if (staProtocol != null && staProtocol.isLoading() && staProtocol.isEmptyOutType() && staProtocol.getWorkNo() >0 && staProtocol.getWorkNo() <9990) { RcsTaskContinue rcsTaskContinue = new RcsTaskContinue(); rcsTaskContinue.setRobotTaskCode(task.getTaskNo()); rcsTaskContinue.setTriggerType("TASK"); rcsTaskContinue.setTriggerCode(task.getTaskNo()); String url =HIK_URL + "api/robot/controller/task/extend/continue"; String response = sendPost(url, JSONObject.toJSONString(rcsTaskContinue)); if (!StringUtils.isEmpty(response) && response.contains("code")){ RcsReturn rcsReturn1 = JSONObject.parseObject(response, RcsReturn.class); if("200".equals(rcsReturn1.getCode())) { //出发PLC站点的扫码器扫码 boolean result = MessageQueue.offer(SlaveType.Devp, 1, new com.zy.core.model.Task(3, staProtocol)); if (result) { log.info("入库站点={}触发扫码成功", staProtocol.getSiteId()); // 返回RCS rcsReturn.setCode("SUCCESS"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); }else { RcsTaskContinue rcsTaskContinue = new RcsTaskContinue(); rcsTaskContinue.setRobotTaskCode(task.getTaskNo()+"-"+(task.getCtnType()-1)); rcsTaskContinue.setTriggerType("TASK"); rcsTaskContinue.setTriggerCode(task.getTaskNo()+"-"+(task.getCtnType()-1)); String url = HIK_URL + "api/robot/controller/task/extend/continue"; String response = sendPost(url, JSONObject.toJSONString(rcsTaskContinue)); if (!StringUtils.isEmpty(response) && response.contains("code")) { log.info("允许AGV放货成功"); } } else { // 返回RCS rcsReturn.setCode("Err_Internal"); rcsReturn.setMessage(""); @@ -187,27 +129,65 @@ } } } }else { TransParent transParent = new TransParent(); transParent.setTaskno(task.getTaskNo()+"-"+(task.getCtnType()-1)); transParent.setTaskname(task.getTaskNo()+"-"+(task.getCtnType()-1)); transParent.setStationId(task.getStaNo()); transParent.setAgvCode("2");//连接器库 int i = applyInStation(transParent); if (i == 1) { rcsReturn.setCode("SUCCESS"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); }else { // 返回RCS rcsReturn.setCode("Err_Internal"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); } } break; //rcs取货完成,已退出输送线 case PICK_COMPLETE: { Integer sourceStaNo = Integer.valueOf(task.getSourceStaNo()); } break; //放货完成 --》agv已经离开 case TASK_END: { if(task.getStaNo().equals("401")||task.getStaNo().equals("402")||task.getStaNo().equals("307")) { Integer sourceStaNo = Integer.valueOf(task.getStaNo()); SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); StaProtocol staProtocol = siemensDevpThread.getStation().get(sourceStaNo).clone(); Boolean boo = false; Short wrkNo = 9991; //放货完成 --》agv已经离开 --》给PLC站点写9991工作号 if (staProtocol != null && !staProtocol.isLoading() && !staProtocol.isEmptyOutType() && staProtocol.getWorkNo() >0 && staProtocol.getWorkNo() <9990) { staProtocol.setWorkNo((short) 0); staProtocol.setStaNo((short) 0); //补空料架 --》agv已经立库 --》给PLC站点写9995工作号 if (task.getTaskType().equals("AGV补空料架") && staProtocol != null && !staProtocol.isLoading() && staProtocol.isEmptyOutType() && staProtocol.getWorkNo() == 0) { boo = true; wrkNo = 9995; } else if (!task.getTaskType().equals("AGV补空料架") && staProtocol != null && staProtocol.isLoading() && staProtocol.isEmptyOutType() && staProtocol.getWorkNo() == 0) { boo = true; } if (boo) { staProtocol.setWorkNo(wrkNo);//空料架到位信号点 staProtocol.setStaNo(Short.valueOf("0")); boolean result = MessageQueue.offer(SlaveType.Devp, 1, new com.zy.core.model.Task(2, staProtocol)); log.info("AGV取货完成,给站点写0工作号,下发任务:{},站点:{},agv任务号:{}",result,task.getStaNo(),task.getTaskNo()); if(result){ log.info("AGV放货完成,给站点写9991工作号,下发任务:{},站点:{},agv任务号:{}", result, task.getStaNo(), task.getTaskNo()); if (result) { // 更新任务状态等内部逻辑 task.setWrkSts(304L); // 301 任务下发、302 任务执行、303 任务中断、304 任务结束 task.setModiTime(new Date()); agvTaskService.updateById(task); // 返回RCS rcsReturn.setCode("SUCCESS"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); }else { } else { // 返回RCS rcsReturn.setCode("Err_Internal"); rcsReturn.setMessage(""); @@ -215,16 +195,232 @@ data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); } } else { // 返回RCS rcsReturn.setCode("Err_Internal"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); } }else { // 更新任务状态等内部逻辑 task.setWrkSts(304L); // 301 任务下发、302 任务执行、303 任务中断、304 任务结束 task.setModiTime(new Date()); agvTaskService.updateById(task); // 返回RCS rcsReturn.setCode("SUCCESS"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); } } break; //rcs请求wms取货申请 case APPLY_PICK: { if(task.getSourceStaNo().equals("401")||task.getSourceStaNo().equals("402")||task.getSourceStaNo().equals("307")) { Integer sourceStaNo = Integer.valueOf(task.getSourceStaNo()); SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); StaProtocol staProtocol = siemensDevpThread.getStation().get(sourceStaNo).clone(); //判断站点是否有料架和托盘 if (staProtocol != null && (staProtocol.isLoading() || task.getTaskType().equals("AGV空料架回缓存区")) && staProtocol.isEmptyOutType()) { RcsTaskContinue rcsTaskContinue = new RcsTaskContinue(); rcsTaskContinue.setRobotTaskCode(task.getTaskNo() + "-" + (task.getCtnType() - 1)); rcsTaskContinue.setTriggerType("TASK"); rcsTaskContinue.setTriggerCode(task.getTaskNo() + "-" + (task.getCtnType() - 1)); String url = HIK_URL + "api/robot/controller/task/extend/continue"; String response = sendPost(url, JSONObject.toJSONString(rcsTaskContinue)); if (!StringUtils.isEmpty(response) && response.contains("code")) { RcsReturn rcsReturn1 = JSONObject.parseObject(response, RcsReturn.class); if ("200".equals(rcsReturn1.getCode())) { // 返回RCS rcsReturn.setCode("SUCCESS"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); } else { // 返回RCS rcsReturn.setCode("Err_Internal"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); } } } }else { TransParent transParent = new TransParent(); transParent.setTaskno(task.getTaskNo()+"-"+(task.getCtnType()-1)); transParent.setTaskname(task.getTaskNo()+"-"+(task.getCtnType()-1)); transParent.setStationId(task.getStaNo()); transParent.setAgvCode("2");//连接器库 int i = applyInStation(transParent); if (i == 1) { rcsReturn.setCode("SUCCESS"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); }else { // 返回RCS rcsReturn.setCode("Err_Internal"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); } } break; } break; //rcs取货完成,已退出输送线 case PICK_COMPLETE: { Integer sourceStaNo = Integer.valueOf(task.getSourceStaNo()); SiemensDevpThread siemensDevpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, 1); StaProtocol staProtocol = siemensDevpThread.getStation().get(sourceStaNo).clone(); //放货完成 --》agv已经离开 --》给PLC站点写9991工作号 if (staProtocol != null && !staProtocol.isLoading() && !staProtocol.isEmptyOutType()) { staProtocol.setWorkNo((short) 0); staProtocol.setStaNo((short) 0); boolean result = MessageQueue.offer(SlaveType.Devp, 1, new com.zy.core.model.Task(2, staProtocol)); log.info("AGV取货完成,给站点写0工作号,下发任务:{},站点:{},agv任务号:{}", result, task.getStaNo(), task.getTaskNo()); if (result) { // 返回RCS rcsReturn.setCode("SUCCESS"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); } else { // 返回RCS rcsReturn.setCode("Err_Internal"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); } default: { } } break; //AGV取货离站请求 case APPLY_IN_OFF_STATION:{ //如果是立库站点直接允许离站 if(task.getSourceStaNo().equals("401")||task.getSourceStaNo().equals("402")||task.getSourceStaNo().equals("307")) { RcsTaskContinue rcsTaskContinue = new RcsTaskContinue(); rcsTaskContinue.setRobotTaskCode(task.getTaskNo() + "-" + (task.getCtnType() - 1)); rcsTaskContinue.setTriggerType("TASK"); rcsTaskContinue.setTriggerCode(task.getTaskNo() + "-" + (task.getCtnType() - 1)); String url = HIK_URL + "api/robot/controller/task/extend/continue"; String response = sendPost(url, JSONObject.toJSONString(rcsTaskContinue)); if (!StringUtils.isEmpty(response) && response.contains("code")) { RcsReturn rcsReturn1 = JSONObject.parseObject(response, RcsReturn.class); if ("200".equals(rcsReturn1.getCode())) { // 返回RCS rcsReturn.setCode("SUCCESS"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); } else { // 返回RCS rcsReturn.setCode("Err_Internal"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); } } }else{ //如果是工位需要像mes请求离站 TransParent transParent = new TransParent(); transParent.setTaskno(task.getTaskNo()+"-"+(task.getCtnType()-1)); transParent.setTaskname(task.getTaskNo()+"-"+(task.getCtnType()-1)); transParent.setStationId(task.getStaNo()); transParent.setAgvCode("2");//连接器库 int i = applyOutStation(transParent); if (i == 1) { rcsReturn.setCode("SUCCESS"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); }else { // 返回RCS rcsReturn.setCode("Err_Internal"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); } } break; } //AGV放货离站请求 case APPLY_OFF_STATION:{ //如果是立库站点直接允许离站 if(task.getStaNo().equals("401")||task.getStaNo().equals("402")||task.getStaNo().equals("307")) { RcsTaskContinue rcsTaskContinue = new RcsTaskContinue(); rcsTaskContinue.setRobotTaskCode(task.getTaskNo() + "-" + (task.getCtnType() - 1)); rcsTaskContinue.setTriggerType("TASK"); rcsTaskContinue.setTriggerCode(task.getTaskNo() + "-" + (task.getCtnType() - 1)); String url = HIK_URL + "api/robot/controller/task/extend/continue"; String response = sendPost(url, JSONObject.toJSONString(rcsTaskContinue)); if (!StringUtils.isEmpty(response) && response.contains("code")) { RcsReturn rcsReturn1 = JSONObject.parseObject(response, RcsReturn.class); if ("200".equals(rcsReturn1.getCode())) { // 返回RCS rcsReturn.setCode("SUCCESS"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); } else { // 返回RCS rcsReturn.setCode("Err_Internal"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); } } }else{ //如果是工位需要像mes请求离站 TransParent transParent = new TransParent(); transParent.setTaskno(task.getTaskNo()+"-"+(task.getCtnType()-1)); transParent.setTaskname(task.getTaskNo()+"-"+(task.getCtnType()-1)); transParent.setStationId(task.getStaNo()); transParent.setAgvCode("2");//连接器库 int i = applyOutStation(transParent); if (i == 1) { rcsReturn.setCode("SUCCESS"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); }else { // 返回RCS rcsReturn.setCode("Err_Internal"); rcsReturn.setMessage(""); JSONObject data = new JSONObject(); data.put("robotTaskCode", robotTaskCode); rcsReturn.setData(data); } } break; } default: { } break; } } catch (Exception e) { log.error("RCS反馈任务进度处理异常 - {}", rcsReporterTask, e); @@ -241,7 +437,7 @@ /** * 向指定 URL 发送POST方法的请求 * * @param url 发送请求的 URL * @param url 发送请求的 URL * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。 * @return 所代表远程资源的响应结果 */ @@ -249,8 +445,7 @@ PrintWriter out = null; BufferedReader in = null; StringBuilder result = new StringBuilder(); try { try { log.info("sendPost - {} - {}", url, param); URL realUrl = new URL(url); URLConnection conn = realUrl.openConnection(); @@ -273,46 +468,70 @@ out.flush(); in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8)); String line; while ((line = in.readLine()) != null) { while ((line = in.readLine()) != null) { result.append(line); } log.info("recv - {}", result); } catch (ConnectException e) { } catch (ConnectException e) { log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e); } catch (SocketTimeoutException e) { } catch (SocketTimeoutException e) { log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e); } catch (IOException e) { } catch (IOException e) { log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e); } catch (Exception e) { } catch (Exception e) { log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e); } finally { try { if (out != null) { } finally { try { if (out != null) { out.close(); } if (in != null) { if (in != null) { in.close(); } } catch (IOException ex) { } catch (IOException ex) { log.error("调用in.close Exception, url=" + url + ",param=" + param, ex); } } return result.toString(); } /** * 入站请求:转发AGV->入站请求->给MES * * @param apply * @return */ public int applyInStation(TransParent apply) { String path = "AGVTransportPalletNotice"; String url = MES_URL + path; String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(apply)); if (!StringUtils.isEmpty(response) && response.contains("Success")) { MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class); if ("1".equals(mesReturn.getSuccess())) { return 1; } } return 0; } /** * 离站请求:转发AGV->离站请求->给MES * * @param apply * @return */ public int applyOutStation(TransParent apply) { String url = MES_URL + "AGVDepartureRequest"; String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(apply)); if (!StringUtils.isEmpty(response) && response.contains("Success")) { MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class); if ("1".equals(mesReturn.getSuccess())) { return 1; } } return 0; } } src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java
File was deleted src/main/java/com/zy/asrs/service/impl/WrkMastLogServiceImpl.java
@@ -1,17 +1,40 @@ package com.zy.asrs.service.impl; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.exception.CoolException; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.mapper.WrkMastLogMapper; import com.zy.asrs.entity.WrkMastLog; import com.zy.asrs.service.WrkMastLogService; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.zy.asrs.service.WrkMastService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Objects; @Service("wrkMastLogService") public class WrkMastLogServiceImpl extends ServiceImpl<WrkMastLogMapper, WrkMastLog> implements WrkMastLogService { @Autowired private WrkMastService wrkMastService; @Autowired private WrkMastLogService wrkMastLogService; @Override public boolean save(Integer workNo) { return this.baseMapper.save(workNo) > 0; WrkMast mast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", workNo)); if (Objects.isNull(mast)) { throw new CoolException("数据错误:任务不存在!!"); } WrkMastLog mastLog = new WrkMastLog(); BeanUtils.copyProperties(mast, mastLog); mastLog.setLogId(mast.getId()); if (!wrkMastLogService.insert(mastLog)) { throw new CoolException("任务日志保存失败!!"); } return true; } } src/main/java/com/zy/common/model/MatDto.java
@@ -71,4 +71,14 @@ this.orderNo = orderNo; this.cstateid = cstateid; } public MatDto(String matNo, String maktx, Double count,Double total,String specs,String sku) { this.specs = specs; this.matnr = matNo; this.maktx = maktx; this.maknx = maktx; this.count = count; this.total = total; this.sku = sku; } } src/main/java/com/zy/core/MainProcess.java
@@ -42,12 +42,12 @@ } // 演示 mainService.crnDemoOfLocMove1(); // mainService.crnDemoOfLocMove1(); // 入出库模式切换函数 // mainService.ioConvert(); // 入库 ===>> 入库站到堆垛机站,根据条码扫描生成入库工作档 mainService.generateStoreWrkFile(1); // 组托 mainService.generateStoreWrkFile0(2); // WMS入库 // mainService.generateStoreWrkFile0(2); // WMS入库 Thread.sleep(500); // 拣料、并板、盘点再入库 mainService.stnToCrnStnPick(3); src/main/java/com/zy/core/thread/SiemensCrnThread.java
@@ -181,10 +181,10 @@ crnProtocol.setxSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 28)); crnProtocol.setySpeed(siemensNet.getByteTransform().TransInt16(result.Content, 32)); crnProtocol.setzSpeed(siemensNet.getByteTransform().TransInt16(result.Content, 36)); crnProtocol.setxDistance(siemensNet.getByteTransform().TransInt16(result.Content, 40)); crnProtocol.setyDistance(siemensNet.getByteTransform().TransInt16(result.Content, 44)); crnProtocol.setxDuration(siemensNet.getByteTransform().TransInt16(result.Content, 48)); crnProtocol.setyDuration(siemensNet.getByteTransform().TransInt16(result.Content, 52)); crnProtocol.setxDistance((short) siemensNet.getByteTransform().TransSingle(result.Content, 40)); crnProtocol.setyDistance((short) siemensNet.getByteTransform().TransSingle(result.Content, 44)); crnProtocol.setxDuration((short) siemensNet.getByteTransform().TransSingle(result.Content, 48)); crnProtocol.setyDuration((short) siemensNet.getByteTransform().TransSingle(result.Content, 52)); OutputQueue.CRN.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId())); src/main/resources/application.yml
@@ -36,6 +36,13 @@ wms: url: 127.0.0.1:8083/ljqwms #mes对接 mes: url: http://192.9.100.173:8088/prod-api/basicmodel/WmsFit/Api/ #默认接口操作人员id defaultUserId: 30 #海康对接 hik: switch: false src/main/resources/mapper/WrkMastMapper.xml
@@ -4,7 +4,8 @@ <!-- 通用查询映射结果 --> <resultMap id="BaseResultMap" type="com.zy.asrs.entity.WrkMast"> <id column="wrk_no" property="wrkNo" /> <id column="id" property="id" /> <result column="wrk_no" property="wrkNo" /> <result column="inv_wh" property="invWh" /> <result column="ymd" property="ymd" /> <result column="mk" property="mk" /> @@ -104,7 +105,7 @@ </select> <select id="selectPickStep" resultMap="BaseResultMap"> select top 1 * from asr_wrk_mast where barcode=#{barcode} and wrk_sts=14 and (io_type=103 or io_type=107 or io_type=104) select top 1 * from asr_wrk_mast where barcode=#{barcode} and wrk_sts=20 and (io_type=103 or io_type=107 or io_type=104) </select> <select id="selectPakOutStep1" resultMap="BaseResultMap">