src/main/java/com/zy/asrs/entity/param/CombParam.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/mapper/BasArmMastMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/BasArmMastService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/BasArmMastServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/utils/PostMesDataUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/MainProcess.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/core/model/DevpSlave.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/mapper/BasArmMastMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/entity/param/CombParam.java
New file @@ -0,0 +1,103 @@ package com.zy.asrs.entity.param; import com.core.common.Cools; import com.zy.asrs.entity.BasArmMast; import lombok.Data; import java.util.ArrayList; import java.util.List; /** * Created by vincent on 2020/6/28 */ @Data public class CombParam { // 单据编号 private String orderNo; // 托盘条码 private String barcode; // 库位编号 private String locNo; private List<CombMat> combMats; @Data public static class CombMat { private String orderNo; // 物料编号 private String matnr = ""; // 序列码 private String batch = ""; private String brand = ""; private String standby1 = ""; private String standby2 = ""; private String standby3 = ""; private String boxType1 = "1"; private String boxType2 = "1"; private String boxType3 = "1"; // 物料数量 private Double anfme; // 商品名称 private String maktx = ""; // 规格 private String specs = ""; // sku private String sku = ""; //备注 private String memo = ""; public CombMat() { } public CombMat(BasArmMast basArmMast) { this.orderNo = basArmMast.getOrderNo(); this.matnr = basArmMast.getMatnr(); // this.batch = basArmMast.getCreateTime().toString(); this.anfme = basArmMast.getCtns().doubleValue(); this.specs = basArmMast.getOrderNo(); this.sku = basArmMast.getSku(); } } public CombParam() { } public CombParam(List<BasArmMast> basArmMastList) { this.orderNo = basArmMastList.get(0).getOrderNo(); this.combMats = new ArrayList<>(); List<BasArmMast> basArmMasts = new ArrayList<>(); for (BasArmMast basArmMast : basArmMastList) { if (basArmMasts.isEmpty()){ basArmMasts.add(basArmMast); } else { boolean sign = false; for (BasArmMast basArmMastold : basArmMasts){ if (basArmMastold.getMatnr().equals(basArmMast.getMatnr()) && Cools.eq(basArmMastold.getOrderNo(), basArmMast.getOrderNo())) {//需要完善、和得 basArmMastold.setCtns(basArmMastold.getCtns()+1); sign = true; break; } } if (!sign){ basArmMasts.add(basArmMast); } } } for (BasArmMast basArmMast : basArmMasts) { CombMat combMat = new CombMat(basArmMast); combMats.add(combMat); } } } src/main/java/com/zy/asrs/mapper/BasArmMastMapper.java
@@ -3,10 +3,13 @@ import com.zy.asrs.entity.BasArmMast; import com.baomidou.mybatisplus.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; @Mapper @Repository public interface BasArmMastMapper extends BaseMapper<BasArmMast> { boolean updateArmMastStatus(@Param("armNo")int armNo, @Param("sortingLine")int sortingLine, @Param("status")int status, @Param("endStatus")int endStatus); } src/main/java/com/zy/asrs/service/BasArmMastService.java
@@ -5,4 +5,6 @@ public interface BasArmMastService extends IService<BasArmMast> { boolean updateArmMastStatus(int armNo,int sortingLine,int status,int endStatus); } src/main/java/com/zy/asrs/service/impl/BasArmMastServiceImpl.java
@@ -9,4 +9,8 @@ @Service("basArmMastService") public class BasArmMastServiceImpl extends ServiceImpl<BasArmMastMapper, BasArmMast> implements BasArmMastService { @Override public boolean updateArmMastStatus(int armNo,int sortingLine,int status,int endStatus){ return this.baseMapper.updateArmMastStatus(armNo,sortingLine,status,endStatus); } } src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -9,6 +9,7 @@ import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.ArmTaskAssignmentParam; import com.zy.asrs.entity.param.CombParam; import com.zy.asrs.mapper.*; import com.zy.asrs.service.*; import com.zy.asrs.utils.PostMesDataUtils; @@ -104,6 +105,9 @@ @Value("${wms.url}") private String wmsUrl; @Value("${wms.comb}") private String wmsComb; @Value("${inventory.number}") private Integer inventoryNumber; @@ -4195,6 +4199,111 @@ /* * arm任务完成自动组托 * */ public synchronized void armMissionAccomplished() { try{ for (DevpSlave devp : slaveProperties.getDevp()) { // 遍历拣料入库口 for (DevpSlave.Sta armSta : devp.getArmSta()) { // 获取条码扫描仪信息 BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, armSta.getBarcode()); if (barcodeThread == null) { continue; } String barcode = barcodeThread.getBarcode(); if(!Cools.isEmpty(barcode)) { if("NG".endsWith(barcode) || "NoRead".equals(barcode)) { continue; } } else { continue; } List<BasArm> basArmList = basArmService.selectList(new EntityWrapper<BasArm>() .eq("arm_no", armSta.getArmNo()) .eq("sta_no", armSta.getStaNo()) .eq("status", 1)); for (BasArm basArm : basArmList) { if (basArm.getStatus()!=1){ continue; } try{ List<BasArmMast> basArmMastList = basArmMastService.selectList( new EntityWrapper<BasArmMast>() .eq("arm_no", basArm.getArmNo()) .eq("sorting_line", basArm.getSortingLine()) .eq("status", 3) ); if (basArmMastList.isEmpty()){ continue; } CombParam combParam = new CombParam(basArmMastList); combParam.setBarcode(barcode); //设置工作空间就绪 ReturnT<String> result = new PostMesDataUtils().postMesData("arm任务完成自动组托",wmsUrl, wmsComb, combParam); if (result.getCode()==200){ basArmMastService.updateArmMastStatus(basArm.getArmNo(),basArm.getSortingLine(),3,4); } else { log.error("机械臂抓取任务完成:"+JSON.toJSON(basArmMastList)+"===》自动组托失败,等待重试"); } } catch (Exception e){ log.error("arm编号:"+basArm.getArmNo()+"====》机械臂抓取任务完成"+e.getMessage()); } break; } } } } catch (Exception e){ log.error("机械臂抓取任务完成组托失败"+e.getMessage()); } } public synchronized void armMissionAccomplishedScanToCheckIn() { try{ for (DevpSlave devp : slaveProperties.getDevp()) { // 遍历拣料入库口 for (DevpSlave.Sta armSta : devp.getArmSta()) { List<BasArmMast> basArmMastList = basArmMastService.selectList( new EntityWrapper<BasArmMast>() .eq("arm_no", armSta.getArmNo()) .eq("sta_no", armSta.getStaNo()) .eq("status", 4) ); if (basArmMastList.isEmpty()){ continue; } // 获取站点信息 SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); StaProtocol staProtocol = devpThread.getStation().get(armSta.getStaNo()); if (staProtocol == null) { continue; } else { staProtocol = staProtocol.clone(); } if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk()) { int workNo = commonService.getWorkNo(6);//待完善 // 更新站点信息 且 下发plc命令 staProtocol.setWorkNo(workNo); staProtocol.setStaNo(armSta.getStaNoEnd().shortValue()); devpThread.setPakMk(staProtocol.getSiteId(), false); boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); log.error("输送线下发5:"+workNo+","+armSta.getStaNoEnd()); if (!result) { News.error(""+" - 3"+" - 发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); } basArmMastService.updateArmMastStatus(basArmMastList.get(0).getArmNo(),basArmMastList.get(0).getSortingLine(),4,5); } } } } catch (Exception e){ log.error("组托完成驱动托盘扫码入库失败"+e.getMessage()); } } /* * arm任务下发 * */ public synchronized void armTaskAssignment() { @@ -4211,7 +4320,13 @@ .eq("sorting_line", basArm.getSortingLine()) .eq("status", 1) ); if (basArmMastListRuning.isEmpty()){ List<BasArmMast> basArmMastListRuning3 = basArmMastService.selectList( new EntityWrapper<BasArmMast>() .eq("arm_no", basArm.getArmNo()) .eq("sorting_line", basArm.getSortingLine()) .eq("status", 3) ); if (basArmMastListRuning.isEmpty() && basArmMastListRuning3.isEmpty()){ List<BasArmMast> basArmMastList = basArmMastService.selectList( new EntityWrapper<BasArmMast>() .eq("arm_no", basArm.getArmNo()) @@ -4228,7 +4343,7 @@ for (BasArmMast basArmMast:basArmMastList) { ArmTaskAssignmentParam armTaskAssignmentParam = new ArmTaskAssignmentParam(basArmMast.getSortingLine()); //设置工作空间就绪 ReturnT<String> result = new PostMesDataUtils().postMesData("机械臂抓取任务",ArmConstant.ARM_URL, ArmConstant.ARM_WORKSPACE, armTaskAssignmentParam); ReturnT<String> result = new PostMesDataUtils().postMesData("机械臂抓取任务下发:通知工作空间已就绪",ArmConstant.ARM_URL, ArmConstant.ARM_WORKSPACE, armTaskAssignmentParam); if (result.getCode()==200){ basArmMast.setStatus(1); basArmMastService.updateById(basArmMast); src/main/java/com/zy/asrs/utils/PostMesDataUtils.java
@@ -84,7 +84,7 @@ success = true; } else { log.error("请求接口失败!!!url:{};request:{};response:{}", URL+"/"+mesPath, JSON.toJSONString(combParam), response); throw new CoolException("上报"+name); throw new CoolException(name); } } catch (Exception e) { log.error("请求接口失败!!!url:{};request:{};response:{}", URL+"/"+mesPath, JSON.toJSONString(combParam), response); @@ -95,7 +95,7 @@ // 保存接口日志 ApiLogService apiLogService = SpringUtils.getBean(ApiLogService.class); apiLogService.save( "上报"+name, name, URL +"/"+ mesPath, null, "127.0.0.1", @@ -135,7 +135,7 @@ success = true; } else { log.error("请求接口失败!!!url:{};request:{};response:{}", URL+"/"+mesPath, JSON.toJSONString(combParam), response); throw new CoolException("上报"+name); throw new CoolException(name); } } catch (Exception e) { log.error("请求接口失败!!!url:{};request:{};response:{}", URL+"/"+mesPath, JSON.toJSONString(combParam), response); @@ -146,7 +146,7 @@ // 保存接口日志 ApiLogService apiLogService = SpringUtils.getBean(ApiLogService.class); apiLogService.save( "上报"+name, name, URL +"/"+ mesPath, null, "127.0.0.1", src/main/java/com/zy/core/MainProcess.java
@@ -157,6 +157,10 @@ continue; } //arm任务完成 mainService.armMissionAccomplished(); mainService.armMissionAccomplishedScanToCheckIn(); //arm任务下发 mainService.armTaskAssignment(); src/main/java/com/zy/core/model/DevpSlave.java
@@ -27,11 +27,16 @@ private List<Sta> pickSta = new ArrayList<>(); private List<Sta> armSta = new ArrayList<>(); @Data public static class Sta { private Integer staNo; private Integer armNo; private Integer sortingLine; private Integer staNoEnd; private Integer barcode; private Integer barcodeMat; src/main/resources/application.yml
@@ -38,6 +38,7 @@ wms: url: 127.0.0.1:8080/jshdasrs comb: mobile/combAuto/wcs/auth inventory: number: 7 @@ -294,6 +295,70 @@ port: 102 rack: 0 slot: 0 # 码垛位 armSta[0]: staNo: 1044 armNo: 1 sortingLine: 1044 staNoEnd: 1044 barcode: ${wcs-slave.barcode[0].id} led: ${wcs-slave.led[1].id} # 码垛位 armSta[1]: staNo: 1044 armNo: 1 sortingLine: 1044 staNoEnd: 1044 barcode: ${wcs-slave.barcode[0].id} led: ${wcs-slave.led[1].id} # 码垛位 armSta[2]: staNo: 1044 armNo: 2 sortingLine: 1044 staNoEnd: 1044 barcode: ${wcs-slave.barcode[0].id} led: ${wcs-slave.led[1].id} # 码垛位 armSta[3]: staNo: 1044 armNo: 2 sortingLine: 1044 staNoEnd: 1044 barcode: ${wcs-slave.barcode[0].id} led: ${wcs-slave.led[1].id} # 码垛位 armSta[4]: staNo: 1044 armNo: 3 sortingLine: 1044 staNoEnd: 1044 barcode: ${wcs-slave.barcode[0].id} led: ${wcs-slave.led[1].id} # 码垛位 armSta[5]: staNo: 1044 armNo: 3 sortingLine: 1044 staNoEnd: 1044 barcode: ${wcs-slave.barcode[0].id} led: ${wcs-slave.led[1].id} # 码垛位 armSta[6]: staNo: 1044 armNo: 4 sortingLine: 1044 staNoEnd: 1044 barcode: ${wcs-slave.barcode[0].id} led: ${wcs-slave.led[1].id} # 码垛位 armSta[7]: staNo: 1044 armNo: 4 sortingLine: 1044 staNoEnd: 1044 barcode: ${wcs-slave.barcode[0].id} led: ${wcs-slave.led[1].id} # 入库口1 inSta[0]: staNo: 1044 src/main/resources/mapper/BasArmMastMapper.xml
@@ -25,4 +25,13 @@ </resultMap> <update id="updateArmMastStatus"> update asr_bas_arm_mast set status = #{endStatus} where 1=1 and arm_no = #{armNo} and sorting_line = #{sortingLine} and status = #{status} </update> </mapper>