src/main/java/com/zy/asrs/entity/BasLift.java
@@ -1,11 +1,13 @@ package com.zy.asrs.entity; import com.alibaba.fastjson.JSON; import com.core.common.Cools;import com.baomidou.mybatisplus.annotations.TableId; import com.baomidou.mybatisplus.enums.IdType; import com.baomidou.mybatisplus.annotations.TableField; import java.text.SimpleDateFormat; import java.util.Date; import com.zy.core.model.protocol.NyShuttleProtocol; import org.springframework.format.annotation.DateTimeFormat; import com.core.common.SpringUtils; import com.zy.system.service.UserService; @@ -79,6 +81,13 @@ @TableField("device_status") private String deviceStatus; /** * 提升机坐标 */ @ApiModelProperty(value= "提升机坐标") @TableField("point") private String point; public BasLift() {} public BasLift(Integer liftNo, Integer status, Integer wrkNo, Date updateTime, Long updateBy, String memo, Boolean pakMk, String deviceStatus) { @@ -108,4 +117,11 @@ return null; } public NyShuttleProtocol.NyShuttlePointClass getPoint$() { if (Cools.isEmpty(this.point)){ return null; } return JSON.parseObject(this.point, NyShuttleProtocol.NyShuttlePointClass.class); } } src/main/java/com/zy/asrs/entity/LocDetl.java
File was deleted src/main/java/com/zy/asrs/entity/Mat.java
File was deleted src/main/java/com/zy/asrs/entity/Order.java
File was deleted src/main/java/com/zy/asrs/entity/OrderDetl.java
File was deleted src/main/java/com/zy/asrs/entity/WaitPakin.java
File was deleted src/main/java/com/zy/asrs/entity/WrkDetl.java
File was deleted src/main/java/com/zy/asrs/entity/WrkDetlLog.java
File was deleted src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
File was deleted src/main/java/com/zy/asrs/mapper/MatMapper.java
File was deleted src/main/java/com/zy/asrs/mapper/OrderDetlMapper.java
File was deleted src/main/java/com/zy/asrs/mapper/OrderMapper.java
File was deleted src/main/java/com/zy/asrs/mapper/WaitPakinMapper.java
File was deleted src/main/java/com/zy/asrs/mapper/WrkDetlLogMapper.java
File was deleted src/main/java/com/zy/asrs/mapper/WrkDetlMapper.java
File was deleted src/main/java/com/zy/asrs/service/LocDetlService.java
File was deleted src/main/java/com/zy/asrs/service/LocMastService.java
@@ -7,63 +7,6 @@ public interface LocMastService extends IService<LocMast> { /** * 堆垛机对应的排号集合 */ List<Integer> queryDistinctRow(Integer crnNo); /** * 检索可用库位 */ LocMast queryFreeLocMast(Integer row, Short locType1); /** * 获取同组货架的空库位 * @param sourceLocNo 源库位 * @return 同组空库位集合 */ List<String> queryGroupEmptyStock(String sourceLocNo); /** * 堆垛机演示获取源库位 * @param crn * @return */ LocMast queryDemoSourceLoc(Integer crn); /** * 堆垛机演示获取目标库位 * @param crn * @return */ LocMast queryDemoLoc(Integer crn); /** * 检查当前库位所属巷道的空库位数量 * @param locMast * @return */ Boolean checkEmptyCount(LocMast locMast); /** * 判断当前库位是否需要堆垛机搬移小车入/出 * @param locNo */ // void judgeCarInOut(String locNo); /** * 判断是否是最外层的库位 * @param locNo * @return */ Boolean isOutMost(String locNo, Boolean pakin); List<String> getDemoNextLoc(Integer crnNo); Boolean isShuttle(String locNo); Integer getOutCrnNo(LocMast locMast); LocMast queryByLoc(String locNo); LocMast queryByQrCode(String qrCodeValue); src/main/java/com/zy/asrs/service/MatService.java
File was deleted src/main/java/com/zy/asrs/service/WrkDetlLogService.java
File was deleted src/main/java/com/zy/asrs/service/WrkDetlService.java
File was deleted src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
File was deleted src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -15,70 +15,6 @@ public class LocMastServiceImpl extends ServiceImpl<LocMastMapper, LocMast> implements LocMastService { @Override public List<Integer> queryDistinctRow(Integer crnNo) { return this.baseMapper.queryDistinctRow(crnNo); } @Override public LocMast queryFreeLocMast(Integer row, Short locType1) { return this.baseMapper.queryFreeLocMast(row, locType1); } @Override public List<String> queryGroupEmptyStock(String sourceLocNo) { if (Cools.isEmpty(sourceLocNo)) { return null; } LocMast sourceStock = this.selectById(sourceLocNo); if (Cools.isEmpty(sourceStock)) { return null; } return this.baseMapper.queryGroupEmptyStock(sourceStock.getCrnNo()); } @Override public LocMast queryDemoSourceLoc(Integer crn) { return this.baseMapper.queryDemoSourceLoc(crn); } @Override public LocMast queryDemoLoc(Integer crn) { return this.baseMapper.queryDemoLoc(crn); } @Override public Boolean checkEmptyCount(LocMast locMast) { if (locMast == null) { return false; } return this.baseMapper.selectEmptyLocCount(locMast.getLocType1(), locMast.getCrnNo()) > 1; } @Override public Boolean isOutMost(String locNo, Boolean pakin) { return Integer.parseInt(locNo.substring(0, 2)) == Utils.getGroupRow(locNo, pakin); } @Override public List<String> getDemoNextLoc(Integer crnNo) { return this.baseMapper.getDemoNextLoc(crnNo); } @Override public Boolean isShuttle(String locNo) { // int row = Utils.getRow(locNo); // if (row >= 2 && row <= 30) { // return Boolean.TRUE; // } return Boolean.TRUE; } @Override public Integer getOutCrnNo(LocMast locMast) { return 1; } @Override public LocMast queryByLoc(String locNo) { return this.baseMapper.queryByLoc(locNo); } src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -3,10 +3,7 @@ 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.SpringUtils; import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.mapper.*; import com.zy.asrs.service.*; @@ -36,7 +33,6 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport; import java.util.*; import java.util.stream.Collectors; /** * 立体仓库WCS系统主流程业务 @@ -55,11 +51,7 @@ @Autowired private WrkMastService wrkMastService; @Autowired private WrkDetlService wrkDetlService; @Autowired private LocMastService locMastService; @Autowired private LocDetlService locDetlService; @Autowired private StaDescService staDescService; @Autowired @@ -93,10 +85,6 @@ @Autowired private ErpService erpService; @Autowired private OrderMapper orderMapper; @Autowired private OrderDetlMapper orderDetlMapper; @Autowired private BasLiftService basLiftService; @Autowired private ShuttleDispatchUtils shuttleDispatchUtils; @@ -110,10 +98,6 @@ private ConfigService configService; @Autowired private NavigateMapUtils navigateMapUtils; @Autowired private WrkDetlLogService wrkDetlLogService; @Autowired private MatService matService; @Autowired private NavigateMapData navigateMapData; @@ -2375,259 +2359,164 @@ * 出库 ===>> 工作档信息写入led显示器 */ public void ledExecute() { try { for (LedSlave led : slaveProperties.getLed()) { // 获取输送线plc线程 DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId()); // 命令集合 List<LedCommand> commands = new ArrayList<>(); // 工作档集合 List<WrkMast> wrkMasts = new ArrayList<>(); List<WrkMastLog> wrkMastLogs = new ArrayList<>(); for (Integer staNo : led.getStaArr()) { // 获取叉车站点 StaProtocol staProtocol = devpThread.getStation().get(staNo); if (null == staProtocol || null == staProtocol.getWorkNo() || 0 == staProtocol.getWorkNo() || !staProtocol.isLoading()) { continue; } else { staProtocol = staProtocol.clone(); } // 获取工作档数据 WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo()); Integer wrkNo = staProtocol.getWorkNo().intValue(); Integer ioType = null; String sourceLocNo = null; String locNo = null; Integer wrkStaNo = null; String barcode = null; if (wrkMast == null) { //查询历史档 WrkMastLog wrkMastLog = wrkMastLogMapper.selectLatestByWorkNo(staProtocol.getWorkNo().intValue()); if (wrkMastLog == null) { continue; } ioType = wrkMastLog.getIoType(); sourceLocNo = wrkMastLog.getSourceLocNo(); locNo = wrkMastLog.getLocNo(); wrkStaNo = wrkMastLog.getStaNo(); barcode = wrkMastLog.getBarcode(); wrkMastLogs.add(wrkMastLog); }else { if (wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { continue; } ioType = wrkMast.getIoType(); sourceLocNo = wrkMast.getSourceLocNo(); locNo = wrkMast.getLocNo(); wrkStaNo = wrkMast.getStaNo(); barcode = wrkMast.getBarcode(); wrkMasts.add(wrkMast); } // 组装命令 LedCommand ledCommand = new LedCommand(); ledCommand.setWorkNo(wrkNo); ledCommand.setIoType(ioType); // 出库模式 switch (ioType) { case 101: ledCommand.setTitle("全板出库"); break; case 103: ledCommand.setTitle("拣料出库"); break; case 104: ledCommand.setTitle("并板出库"); break; case 107: ledCommand.setTitle("盘点出库"); break; case 110: ledCommand.setTitle("空板出库"); ledCommand.setEmptyMk(true); break; default: News.error("任务入出库类型错误!!![工作号:{}] [入出库类型:{}]", wrkNo, ioType); break; } ledCommand.setSourceLocNo(sourceLocNo); ledCommand.setLocNo(locNo); ledCommand.setStaNo(wrkStaNo); ledCommand.setBarcode(barcode); if (ioType != 110 && ioType != 10) { List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkNo)); if (!wrkDetls.isEmpty()) { wrkDetls.forEach(wrkDetl -> { double remainNum = wrkDetl.getStock() - wrkDetl.getAnfme();//剩余数量 if (remainNum < 0) { remainNum = 0; } String matnr = wrkDetl.getMatnr(); Mat mat = matService.selectByMatnr(wrkDetl.getMatnr()); if (mat != null) { if (!mat.getMatnr().equals(mat.getMatnr2())) { matnr += " - " + mat.getMatnr2(); } } ledCommand.getMatDtos().add(new MatDto(matnr, wrkDetl.getMaktx(), wrkDetl.getAnfme(), remainNum, wrkDetl.getSpecs(), wrkDetl.getSuppCode(), wrkDetl.getOrderNo())); }); }else { List<WrkDetlLog> wrkDetlLogs = wrkDetlLogService.selectLatestByWorkNo(wrkNo, barcode); for (WrkDetlLog wrkDetlLog : wrkDetlLogs) { double remainNum = wrkDetlLog.getStock() - wrkDetlLog.getAnfme();//剩余数量 if (remainNum < 0) { remainNum = 0; } String matnr = wrkDetlLog.getMatnr(); Mat mat = matService.selectByMatnr(wrkDetlLog.getMatnr()); if (mat != null) { if (!mat.getMatnr().equals(mat.getMatnr2())) { matnr += " - " + mat.getMatnr2(); } } ledCommand.getMatDtos().add(new MatDto(matnr, wrkDetlLog.getMaktx(), wrkDetlLog.getAnfme(), remainNum, wrkDetlLog.getSpecs(), wrkDetlLog.getSuppCode())); } } // List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", sourceLocNo)); // if (ioType == 101) { // List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkNo)); // wrkDetls.forEach(wrkDetl -> { // ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme(), 0D, wrkDetl.getSpecs(), wrkDetl.getSuppCode())); // }); //// locDetls.forEach(locDetl -> { //// Wrapper<WrkDetl> wrapper = new EntityWrapper<WrkDetl>().eq("matnr", locDetl.getMatnr()).eq("wrk_no", wrkNo); //// Utils.wapperSetCondition(wrapper, "batch", locDetl.getBatch()); //// Utils.wapperSetCondition(wrapper, "three_code", locDetl.getThreeCode()); //// Utils.wapperSetCondition(wrapper, "dead_time", locDetl.getDeadTime()); //// Utils.wapperSetCondition(wrapper, "supp_code", locDetl.getSuppCode());//料箱码 //// List<WrkDetl> detl = wrkDetlService.selectList(wrapper); //// if (Cools.isEmpty(detl)) { //// String suppCode = ""; //// if (locDetl.getSuppCode() != null) { //// suppCode = locDetl.getSuppCode(); //// } //// ledCommand.getMatDtos().add(new MatDto(locDetl.getMatnr(), locDetl.getMaktx(), 0D, locDetl.getAnfme(), locDetl.getSpecs(), suppCode)); //// } else { //// //出库数量累计 //// Double conut = 0.0; //// for (WrkDetl wrkDetl : detl) { //// conut = conut + wrkDetl.getAnfme(); //// } //// //// for (WrkDetl wrkDetl : detl) { //// String suppCode = ""; //// if (wrkDetl.getSuppCode() != null) { //// suppCode = wrkDetl.getSuppCode(); //// } //// ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme(), (locDetl.getAnfme() - conut), wrkDetl.getSpecs(), suppCode, wrkDetl.getOrderNo())); //// } //// } //// //// }); // } else { // locDetls.forEach(locDetl -> { // Wrapper<WrkDetl> wrapper = new EntityWrapper<WrkDetl>().eq("matnr", locDetl.getMatnr()).eq("wrk_no", wrkNo); // Utils.wapperSetCondition(wrapper, "batch", locDetl.getBatch()); // Utils.wapperSetCondition(wrapper, "three_code", locDetl.getThreeCode()); // Utils.wapperSetCondition(wrapper, "dead_time", locDetl.getDeadTime()); // Utils.wapperSetCondition(wrapper, "supp_code", locDetl.getSuppCode());//料箱码 // List<WrkDetl> detl = wrkDetlService.selectList(wrapper); // if (Cools.isEmpty(detl)) { // String suppCode = ""; // if (locDetl.getSuppCode() != null) { // suppCode = locDetl.getSuppCode(); // } // ledCommand.getMatDtos().add(new MatDto(locDetl.getMatnr(), locDetl.getMaktx(), 0D, locDetl.getAnfme(), locDetl.getSpecs(), suppCode)); // } else { // //出库数量累计 // Double conut = 0.0; // for (WrkDetl wrkDetl : detl) { // conut = conut + wrkDetl.getAnfme(); // } // // for (WrkDetl wrkDetl : detl) { // String suppCode = ""; // if (wrkDetl.getSuppCode() != null) { // suppCode = wrkDetl.getSuppCode(); // } // ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme(), (wrkDetl.getStock() - conut), wrkDetl.getSpecs(), suppCode, wrkDetl.getOrderNo())); // } // } // // }); // try { // for (LedSlave led : slaveProperties.getLed()) { // // 获取输送线plc线程 // DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId()); // // 命令集合 // List<LedCommand> commands = new ArrayList<>(); // // 工作档集合 // List<WrkMast> wrkMasts = new ArrayList<>(); // List<WrkMastLog> wrkMastLogs = new ArrayList<>(); // for (Integer staNo : led.getStaArr()) { // // 获取叉车站点 // StaProtocol staProtocol = devpThread.getStation().get(staNo); // if (null == staProtocol || null == staProtocol.getWorkNo() || 0 == staProtocol.getWorkNo() || !staProtocol.isLoading()) { // continue; // } else { // staProtocol = staProtocol.clone(); // } // // 获取工作档数据 // WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo()); // Integer wrkNo = staProtocol.getWorkNo().intValue(); // Integer ioType = null; // String sourceLocNo = null; // String locNo = null; // Integer wrkStaNo = null; // String barcode = null; // if (wrkMast == null) { // //查询历史档 // WrkMastLog wrkMastLog = wrkMastLogMapper.selectLatestByWorkNo(staProtocol.getWorkNo().intValue()); // if (wrkMastLog == null) { // continue; // } // // // if (ioType == 107) { // locDetls = new ArrayList<>(); // ledCommand.setMatDtos(new ArrayList<>()); // ioType = wrkMastLog.getIoType(); // sourceLocNo = wrkMastLog.getSourceLocNo(); // locNo = wrkMastLog.getLocNo(); // wrkStaNo = wrkMastLog.getStaNo(); // barcode = wrkMastLog.getBarcode(); // wrkMastLogs.add(wrkMastLog); // }else { // if (wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { // continue; // } // // if (locDetls.isEmpty() && ioType != 101) { // List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkNo)); // ioType = wrkMast.getIoType(); // sourceLocNo = wrkMast.getSourceLocNo(); // locNo = wrkMast.getLocNo(); // wrkStaNo = wrkMast.getStaNo(); // barcode = wrkMast.getBarcode(); // wrkMasts.add(wrkMast); // } // // 组装命令 // LedCommand ledCommand = new LedCommand(); // ledCommand.setWorkNo(wrkNo); // ledCommand.setIoType(ioType); // // 出库模式 // switch (ioType) { // case 101: // ledCommand.setTitle("全板出库"); // break; // case 103: // ledCommand.setTitle("拣料出库"); // break; // case 104: // ledCommand.setTitle("并板出库"); // break; // case 107: // ledCommand.setTitle("盘点出库"); // break; // case 110: // ledCommand.setTitle("空板出库"); // ledCommand.setEmptyMk(true); // break; // default: // News.error("任务入出库类型错误!!![工作号:{}] [入出库类型:{}]", wrkNo, ioType); // break; // } // ledCommand.setSourceLocNo(sourceLocNo); // ledCommand.setLocNo(locNo); // ledCommand.setStaNo(wrkStaNo); // ledCommand.setBarcode(barcode); // if (ioType != 110 && ioType != 10) { // List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkNo)); // if (!wrkDetls.isEmpty()) { // wrkDetls.forEach(wrkDetl -> { // if (wrkDetl.getAnfme() > 0D) { // ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getAnfme(), wrkDetl.getAnfme(), wrkDetl.getSpecs(), wrkDetl.getSuppCode())); // double remainNum = wrkDetl.getStock() - wrkDetl.getAnfme();//剩余数量 // if (remainNum < 0) { // remainNum = 0; // } // }); // // if (wrkDetls.isEmpty()) {//从历史档查询 // List<WrkDetlLog> wrkDetlLogs = wrkDetlLogService.selectLatestByWorkNo(wrkNo, barcode); // for (WrkDetlLog wrkDetlLog : wrkDetlLogs) { // if (wrkDetlLog.getAnfme() > 0D) { // ledCommand.getMatDtos().add(new MatDto(wrkDetlLog.getMatnr(), wrkDetlLog.getMaktx(), wrkDetlLog.getAnfme(), wrkDetlLog.getAnfme(), wrkDetlLog.getSpecs(), wrkDetlLog.getSuppCode())); // String matnr = wrkDetl.getMatnr(); // Mat mat = matService.selectByMatnr(wrkDetl.getMatnr()); // if (mat != null) { // if (!mat.getMatnr().equals(mat.getMatnr2())) { // matnr += " - " + mat.getMatnr2(); // } // } // ledCommand.getMatDtos().add(new MatDto(matnr, wrkDetl.getMaktx(), wrkDetl.getAnfme(), remainNum, wrkDetl.getSpecs(), wrkDetl.getSuppCode(), wrkDetl.getOrderNo())); // }); // }else { // List<WrkDetlLog> wrkDetlLogs = wrkDetlLogService.selectLatestByWorkNo(wrkNo, barcode); // for (WrkDetlLog wrkDetlLog : wrkDetlLogs) { // double remainNum = wrkDetlLog.getStock() - wrkDetlLog.getAnfme();//剩余数量 // if (remainNum < 0) { // remainNum = 0; // } // String matnr = wrkDetlLog.getMatnr(); // Mat mat = matService.selectByMatnr(wrkDetlLog.getMatnr()); // if (mat != null) { // if (!mat.getMatnr().equals(mat.getMatnr2())) { // matnr += " - " + mat.getMatnr2(); // } // } // ledCommand.getMatDtos().add(new MatDto(matnr, wrkDetlLog.getMaktx(), wrkDetlLog.getAnfme(), remainNum, wrkDetlLog.getSpecs(), wrkDetlLog.getSuppCode())); // } // } } commands.add(ledCommand); } Set<Integer> workNos = null; if (!wrkMasts.isEmpty()) { workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet()); }else { workNos = wrkMastLogs.stream().map(WrkMastLog::getWrkNo).collect(Collectors.toSet()); } // 获取LED线程 LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId()); // 相同工作号集合则过滤 if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) { continue; } // 命令下发 ------------------------------------------------------------------------------- if (!commands.isEmpty()) { if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) { log.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); continue; } else { ledThread.setLedMk(false); } } try { // 修改主档led标记 for (WrkMast wrkMast : wrkMasts) { wrkMast.setOveMk("Y"); wrkMast.setModiTime(new Date()); if (wrkMastMapper.updateById(wrkMast) == 0) { throw new CoolException("更新工作档失败"); } } // 更新线程当前工作号集合 ledThread.setWorkNos(workNos); } catch (Exception e) { e.printStackTrace(); TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } } } catch (Exception e) { e.printStackTrace(); } // commands.add(ledCommand); // } // Set<Integer> workNos = null; // if (!wrkMasts.isEmpty()) { // workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet()); // }else { // workNos = wrkMastLogs.stream().map(WrkMastLog::getWrkNo).collect(Collectors.toSet()); // } // // 获取LED线程 // LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId()); // // 相同工作号集合则过滤 // if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) { // continue; // } // // 命令下发 ------------------------------------------------------------------------------- // if (!commands.isEmpty()) { // if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) { // log.error("{}号LED命令下发失败!!![ip:{}] [port:{}]", led.getId(), led.getIp(), led.getPort()); // continue; // } else { // ledThread.setLedMk(false); // } // } // // try { // // 修改主档led标记 // for (WrkMast wrkMast : wrkMasts) { // wrkMast.setOveMk("Y"); // wrkMast.setModiTime(new Date()); // if (wrkMastMapper.updateById(wrkMast) == 0) { // throw new CoolException("更新工作档失败"); // } // } // // // 更新线程当前工作号集合 // ledThread.setWorkNos(workNos); // // } catch (Exception e) { // e.printStackTrace(); // TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); // } // // } // } catch (Exception e) { // e.printStackTrace(); // } } /** src/main/java/com/zy/asrs/service/impl/MatServiceImpl.java
File was deleted src/main/java/com/zy/asrs/service/impl/WrkDetlLogServiceImpl.java
File was deleted src/main/java/com/zy/asrs/service/impl/WrkDetlServiceImpl.java
File was deleted src/main/java/com/zy/asrs/utils/Utils.java
@@ -116,121 +116,6 @@ } /** * 判断库位是否为穿梭库位 * @param locNo * @return */ public static Boolean isShuttle(String locNo) { int row = Utils.getRow(locNo); if (row >= 2 && row <= 12) { return Boolean.TRUE; } return Boolean.FALSE; } // ------------------------------------------------------------------------------------------------------------------- /** * 判断是否为深库位 */ public static boolean isDeepLoc(SlaveProperties slaveProperties, String locNo){ if (slaveProperties.isDoubleDeep()) { int row = getRow(locNo); return slaveProperties.getDoubleLocs().contains(row); } else { return false; } } /** * 判断是否为深库位 */ public static boolean isDeepLoc(SlaveProperties slaveProperties, Integer row){ if (slaveProperties.isDoubleDeep()) { return slaveProperties.getDoubleLocs().contains(row); } else { return false; } } /** * 判断是否为浅库位 */ public static boolean isShallowLoc(SlaveProperties slaveProperties, String locNo){ if (slaveProperties.isDoubleDeep()) { int row = getRow(locNo); return !slaveProperties.getDoubleLocs().contains(row); } else { return false; } } /** * 判断是否为浅库位 */ public static boolean isShallowLoc(SlaveProperties slaveProperties, Integer row){ if (slaveProperties.isDoubleDeep()) { return !slaveProperties.getDoubleLocs().contains(row); } else { return false; } } /** * 获取 深库位对应的浅库位号 */ public static String getShallowLoc(SlaveProperties slaveProperties, String deepLoc) { int row = getRow(deepLoc); int remainder = (int) Arith.remainder(row, slaveProperties.getGroupCount()); int shallowRow = remainder == 1 ? (row + 1) : (row - 1); return zerofill(String.valueOf(shallowRow), 2) + deepLoc.substring(2); } /** * 获取 深库位排对应的浅库位排 */ public static Integer getShallowRow(SlaveProperties slaveProperties, Integer deepRow) { int remainder = (int) Arith.remainder(deepRow, slaveProperties.getGroupCount()); return remainder == 1 ? (deepRow + 1) : (deepRow - 1); } /** * 获取 浅库位对应的深库位号 */ public static String getDeepLoc(SlaveProperties slaveProperties, String shallowLoc) { int row = getRow(shallowLoc); int remainder = (int) Arith.remainder(row, slaveProperties.getGroupCount()); int targetRow; if (remainder == 2) { targetRow = row - 1; } else if (remainder == 1) { targetRow = row + 1; } else { throw new RuntimeException(shallowLoc + "不是浅库位,系统繁忙"); } return zerofill(String.valueOf(targetRow), 2) + shallowLoc.substring(2); } /** * 获取 浅库位排对应的深库位排 */ public static Integer getDeepRow(SlaveProperties slaveProperties, Integer shallowRow) { int remainder = (int) Arith.remainder(shallowRow, slaveProperties.getGroupCount()); int targetRow; if (remainder == 2) { targetRow = shallowRow - 1; } else if (remainder == 1) { targetRow = shallowRow + 1; } else { throw new RuntimeException(shallowRow + "不是浅库位排,系统繁忙"); } return targetRow; } /** * 通过库位号获取 排 */ public static int getRow(String locNo) { @@ -416,10 +301,10 @@ if (currentLocNo == null) { //小车没有库位号数据,从数据库中取 BasShuttle basShuttle = basShuttleService.selectById(slave.getId()); if (basShuttle == null || basShuttle.getPoint() == null) { if (basShuttle == null) { continue; } NyShuttleProtocol.NyShuttlePointClass shuttlePoint = JSON.parseObject(basShuttle.getPoint(), NyShuttleProtocol.NyShuttlePointClass.class); NyShuttleProtocol.NyShuttlePointClass shuttlePoint = shuttleProtocol.getPoint(); currentLocNo = NavigatePositionConvert.nyXyzToLocNo(shuttlePoint.getX(), shuttlePoint.getY(), shuttlePoint.getZ()); } src/main/java/com/zy/common/model/MatDto.java
@@ -1,6 +1,5 @@ package com.zy.common.model; import com.zy.asrs.entity.OrderDetl; import lombok.Data; /** @@ -39,14 +38,6 @@ public MatDto() { } public MatDto(OrderDetl orderDetl) { this.matNo = orderDetl.getMatnr(); this.model = orderDetl.getModel(); this.batch = orderDetl.getBatch(); this.orderNo = orderDetl.getOrderNo(); this.count = orderDetl.getQty(); this.total = orderDetl.getAnfme(); } public MatDto(String matNo, String maknx, Double count) { this.matNo = matNo; this.maknx = maknx; src/main/java/com/zy/common/service/CommonService.java
@@ -1,26 +1,12 @@ package com.zy.common.service; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; import com.core.common.Arith; import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.*; 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.Shelves; import com.zy.common.model.StartupDto; import com.zy.core.News; import com.zy.core.properties.SlaveProperties; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; /** * 货架核心功能 @@ -34,20 +20,6 @@ private WrkMastService wrkMastService; @Autowired private WrkLastnoService wrkLastnoService; @Autowired private RowLastnoService rowLastnoService; @Autowired private BasCrnpService basCrnpService; @Autowired private StaDescService staDescService; @Autowired private BasDevpService basDevpService; @Autowired private LocMastService locMastService; @Autowired private SlaveProperties slaveProperties; @Autowired private LocDetlService locDetlService; @Autowired private WrkChargeService wrkChargeService; @@ -122,255 +94,6 @@ } } return workNo; } /** * 检索库位号 * @param whsType 类型 1:双深式货架 * @param staDescId 路径工作类型 * @param sourceStaNo 源站 * @param matNos 物料号集合 * @return locNo 检索到的库位号 */ @Transactional public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, List<String> matNos, LocTypeDto locTypeDto, int times) { StartupDto startupDto = new StartupDto(); // 生成工作号 int workNo = getWorkNo(0); switch (sourceStaNo) { case 202: whsType = 2; break; case 205: whsType = 1; break; case 126: whsType = 3; break; case 110: whsType = 4; break; case 301: whsType = 5; break; default: throw new CoolException("库位排号分配错误, 源站号:" + sourceStaNo); } RowLastno rowLastno = rowLastnoService.selectById(whsType); if (Cools.isEmpty(rowLastno)) { throw new CoolException("数据异常,请联系管理员"); } // ===============>>>> 开始执行 int curRow = rowLastno.getCurrentRow(); int sRow = rowLastno.getsRow(); int eRow = rowLastno.geteRow(); int crn_qty = rowLastno.getCrnQty(); int rowCount = eRow - sRow + 1; // 目标堆垛机号 int crnNo = 0; // 目标库位 LocMast locMast = null; // 靠近摆放规则 --- 同天同规格物料 if (!Cools.isEmpty(matNos)) { List<String> locNos = locDetlService.getSameDetlToday(matNos.get(0), sRow, eRow); for (String locNo : locNos) { if (Utils.isShallowLoc(slaveProperties, locNo)) { continue; } String shallowLocNo = Utils.getShallowLoc(slaveProperties, locNo); // 检测目标库位是否为空库位 LocMast shallowLoc = locMastService.selectById(shallowLocNo); if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) { if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) { if (VersionUtils.locMoveCheckLocType(shallowLoc, locTypeDto)) { locMast = shallowLoc; crnNo = locMast.getCrnNo(); break; } } } } } // 靠近摆放规则 --- 空托 if (staDescId == 10) { List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>().eq("loc_sts", "D").ge("row1", sRow).le("row1", eRow)); if (locMasts.size() > 0) { for (LocMast loc : locMasts) { if (Utils.isShallowLoc(slaveProperties, loc.getLocNo())) { continue; } String shallowLocNo = Utils.getShallowLoc(slaveProperties, loc.getLocNo()); // 检测目标库位是否为空库位 LocMast shallowLoc = locMastService.selectById(shallowLocNo); if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) { if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) { locMast = shallowLoc; crnNo = locMast.getCrnNo(); break; } } } } } // 如果没有相近物料,则按规则轮询货架 if (null == locMast) { Shelves shelves = new Shelves(rowCount, crn_qty); // 1-4排 if (whsType == 1) { for (int i = 0; i < shelves.group; i ++) { curRow = shelves.start(curRow); if (curRow < 0) { throw new CoolException("检索库位失败,请联系管理员"); } Integer crnNo1 = shelves.get(curRow); if (basCrnpService.checkSiteError(crnNo1, true)) { crnNo = crnNo1; break; } } // 5-8排 } else if (whsType == 2) { curRow = curRow - 4; for (int i = 0; i < shelves.group; i ++) { curRow = shelves.start(curRow); if (curRow < 0) { throw new CoolException("检索库位失败,请联系管理员"); } Integer crnNo1 = shelves.get(curRow); if (basCrnpService.checkSiteError(crnNo1 + 1, true)) { // 偏移量补偿 curRow = curRow + 4; crnNo = crnNo1 + 1; break; } } // 126空板入 1-8排 } else { for (int i = 0; i < shelves.group; i ++) { curRow = shelves.start(curRow); if (curRow < 0) { throw new CoolException("检索库位失败,请联系管理员"); } Integer crnNo1 = shelves.get(curRow); if (basCrnpService.checkSiteError(crnNo1, true)) { crnNo = crnNo1; break; } } } } if (crnNo == 0) { throw new CoolException("没有可用的堆垛机"); } // 获取目标站 Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() .eq("type_no", staDescId) .eq("stn_no", sourceStaNo) .eq("crn_no", crnNo); StaDesc staDesc = staDescService.selectOne(wrapper); if (Cools.isEmpty(staDesc)) { News.error("type_no={},stn_no={},crn_no={}", staDescId, sourceStaNo, crnNo); throw new CoolException("入库路径不存在"); } BasDevp staNo = basDevpService.selectById(staDesc.getCrnStn()); if (!staNo.getAutoing().equals("Y")) { throw new CoolException("目标站"+staDesc.getCrnStn()+"不可用"); } // 更新库位排号 rowLastno.setCurrentRow(curRow); rowLastnoService.updateById(rowLastno); // 开始查找库位 ==============================>> // 1.当检索库排为浅库位排时,优先寻找当前库排的深库位排 if (locMast == null) { if (Utils.isShallowLoc(slaveProperties, curRow)) { Integer deepRow = Utils.getDeepRow(slaveProperties, curRow); locMast = locMastService.queryFreeLocMast(deepRow, locTypeDto.getLocType1()); // 因库位移转、需预留空库位 if (!locMastService.checkEmptyCount(locMast)) { locMast = null; } } if (Cools.isEmpty(locMast)) { locMast = locMastService.queryFreeLocMast(curRow, locTypeDto.getLocType1()); // 因库位移转、需预留空库位 if (!locMastService.checkEmptyCount(locMast)) { locMast = null; } // 目标库位 ===>> 浅库位, 则校验其深库位是否为 F D X if (null != locMast && Utils.isShallowLoc(slaveProperties, locMast.getLocNo())) { LocMast deepLoc = locMastService.selectById(Utils.getDeepLoc(slaveProperties, locMast.getLocNo())); if (!deepLoc.getLocSts().equals("F") && !deepLoc.getLocSts().equals("D") && !deepLoc.getLocSts().equals("X")) { locMast = null; } } // 目标库位 ===>> 深库位, 则校验其浅库位是否为 O if (null != locMast && Utils.isDeepLoc(slaveProperties, locMast.getLocNo())) { LocMast shallowLoc = locMastService.selectById(Utils.getShallowLoc(slaveProperties, locMast.getLocNo())); if (!shallowLoc.getLocSts().equals("O")) { locMast = null; } } } } // 2.库位当前所属尺寸无空库位时,调整尺寸参数,向上兼容检索库位 if (Cools.isEmpty(locMast)) { // 当前巷道无空库位时,递归调整至下一巷道,检索全部巷道无果后,跳出递归 if (times < rowCount) { times = times + 1; return getLocNo(1, staDescId, sourceStaNo, matNos, locTypeDto, times); } else { times = 0; } // 轻货物找轻库位为空时,可以去找重库位仓 if (locTypeDto.getLocType1() == 1) { locTypeDto.setLocType1((short) 2); return getLocNo(null, staDescId, sourceStaNo, matNos, locTypeDto, times); } News.error("系统没有空库位!!! 尺寸规格: {}, 轮询次数:{}", JSON.toJSONString(locTypeDto), times); throw new CoolException("没有空库位"); } String locNo = locMast.getLocNo(); // 返回dto startupDto.setWorkNo(workNo); startupDto.setCrnNo(crnNo); startupDto.setSourceStaNo(sourceStaNo); startupDto.setStaNo(staNo.getDevNo()); startupDto.setLocNo(locNo); return startupDto; } public static void main(String[] args) { System.out.println(Arith.remainder(1, 4)); System.out.println("0200201".substring(0, 2)); String locNo = "0800201"; int row = Integer.parseInt(locNo.substring(0, 2)); double remainder = Arith.remainder(row, 4); int targetRow; if (remainder == 1) { // 得到当前库位的外围库位 targetRow = row + 1; } else if (remainder == 0) { // 得到当前库位的内围库位 targetRow = row - 1; } else { return; } String zerofill = zerofill(String.valueOf(targetRow), 2)+locNo.substring(2); System.out.println(zerofill); } public static String zerofill(String msg, Integer count) { src/main/java/com/zy/common/service/WmsService.java
File was deleted src/main/java/com/zy/common/utils/ShuttleDispatchUtils.java
@@ -321,11 +321,7 @@ NyShuttleProtocol.NyShuttlePointClass point = null; if (shuttleProtocol.getPoint() == null) { BasShuttle basShuttle = basShuttleService.selectById(shuttle.getId());//小车如果没有数据,从数据库取数据 if (basShuttle == null || basShuttle.getPoint() == null) { continue; } point = JSON.parseObject(basShuttle.getPoint(), NyShuttleProtocol.NyShuttlePointClass.class); continue; }else { point = shuttleProtocol.getPoint(); } src/main/java/com/zy/core/thread/LiftThread.java
@@ -207,20 +207,7 @@ basLift.setWrkNo(liftProtocol.getTaskNo().intValue()); basLift.setUpdateTime(new Date()); basLift.setPakMk(liftProtocol.getPakMk()); basLift.setModel(liftProtocol.getModel()); basLift.setBusy(liftProtocol.getBusy()); basLift.setFrontOverrun(liftProtocol.getFrontOverrun()); basLift.setBackOverrun(liftProtocol.getBackOverrun()); basLift.setLeftOverrun(liftProtocol.getLeftOverrun()); basLift.setRightOverrun(liftProtocol.getRightOverrun()); basLift.setOverHeight(liftProtocol.getOverHeight()); basLift.setOverWeight(liftProtocol.getOverWeight()); basLift.setHasTray(liftProtocol.getHasTray()); basLift.setHasCar(liftProtocol.getHasCar()); basLift.setDeviceError(liftProtocol.getDeviceError()); basLift.setDistAddress(liftProtocol.getDistAddress().intValue()); basLift.setCompleteTaskNo(liftProtocol.getCompleteTaskNo().intValue()); basLift.setLev(liftProtocol.getLev().intValue()); basLift.setDeviceStatus(JSON.toJSONString(liftProtocol)); if (liftService.updateById(basLift)) { OutputQueue.LIFT.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId())); // log.info(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId())); src/main/java/com/zy/core/thread/NyShuttleThread.java
@@ -189,56 +189,13 @@ basShuttle.setShuttleNo(slave.getId()); shuttleService.insert(basShuttle); } //工作模式 basShuttle.setWorkingMode(shuttleProtocol.getWorkingMode()); //运行状态 basShuttle.setFree(shuttleProtocol.getFree()); //当前速度 basShuttle.setSpeed(shuttleProtocol.getSpeed()); //负载状态 basShuttle.setLoadState(shuttleProtocol.getLoadState()); //管制状态 basShuttle.setSuspendState(shuttleProtocol.getSuspendState()); //顶升位置 basShuttle.setLiftPosition(shuttleProtocol.getLiftPosition()); //运行方向 basShuttle.setRunDir(shuttleProtocol.getRunDir()); //运行方向 basShuttle.setRunDir2(shuttleProtocol.getRunDir2()); //充电状态 basShuttle.setChargState(shuttleProtocol.getChargState()); //电池电量 basShuttle.setPowerPercent(shuttleProtocol.getPowerPercent()); //最高电芯电压 basShuttle.setMaxCellVoltage(shuttleProtocol.getMaxCellVoltage()); //电池电压 basShuttle.setVoltage(shuttleProtocol.getVoltage()); //充放电循环次数 basShuttle.setChargeCycleTimes(shuttleProtocol.getChargeCycleTimes()); //剩余电量 basShuttle.setSurplusQuantity(shuttleProtocol.getSurplusQuantity()); //总电量 basShuttle.setCountQuantity(shuttleProtocol.getCountQuantity()); //实际库位 basShuttle.setPoint(JSONObject.toJSONString(shuttleProtocol.getPoint())); //实际坐标 basShuttle.setCoord(JSONObject.toJSONString(shuttleProtocol.getCoord())); //任务目的库位 basShuttle.setTask(JSONObject.toJSONString(shuttleProtocol.getTask())); //任务状态 basShuttle.setTaskState(shuttleProtocol.getTaskState()); //故障状态 basShuttle.setErrState(shuttleProtocol.getErrState()); //总里程数 basShuttle.setStatusSum(JSONObject.toJSONString(shuttleProtocol.getStatusSum())); //非自动状态时间计时 basShuttle.setErrTime(shuttleProtocol.getErrTime()); //任务号 basShuttle.setWrkNo(shuttleProtocol.getTaskNo().intValue()); //修改时间 basShuttle.setUpdateTime(new Date()); //作业标记 basShuttle.setPakMk(shuttleProtocol.getPakMk()); basShuttle.setDeviceStatus(JSON.toJSONString(basShuttle)); if (shuttleService.updateById(basShuttle)) { OutputQueue.SHUTTLE.offer(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId())); // log.info(MessageFormat.format("【{0}】[id:{1}] <<<<< 实时数据更新成功",DateUtils.convert(new Date()), slave.getId())); src/main/resources/mapper/LocDetlMapper.xml
File was deleted src/main/resources/mapper/MatMapper.xml
File was deleted src/main/resources/mapper/OrderDetlMapper.xml
File was deleted src/main/resources/mapper/OrderMapper.xml
File was deleted src/main/resources/mapper/WaitPakinMapper.xml
File was deleted src/main/resources/mapper/WrkDetlLogMapper.xml
File was deleted src/main/resources/mapper/WrkDetlMapper.xml
File was deleted