| src/main/java/com/zy/asrs/mapper/LocMastMapper.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/service/LocMastService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/mapper/LocMastMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/mapper/LocMastMapper.java
@@ -62,4 +62,6 @@ * @return 库位号 */ String findFirstFrozenLocNo(@Param("locNoList") List<String> locNoList); LocMast selectNotFull(@Param("locType")Long locType, @Param("id")Long id); } src/main/java/com/zy/asrs/service/LocMastService.java
@@ -62,4 +62,14 @@ //查询指定楼层的库位数据 List<LocMast> selectLocByLev(Integer lev); /** * 获取未满板托盘 * @author Ryan * @date 2026/4/3 13:01 * @param locType * @param id * @return com.zy.asrs.entity.LocMast */ LocMast selectNotFull(Long locType, Long id); } src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -119,6 +119,11 @@ } @Override public LocMast selectNotFull(Long locType, Long id) { return this.baseMapper.selectNotFull(locType, id); } @Override public Boolean checkWhole(List<LocDetl> locDetls) { return null; } src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -1740,7 +1740,7 @@ double val = Math.round((combMat.getAnfme() + wrkDetl.getAnfme()) * 10000) / 10000.0; WrkDetl detl = new WrkDetl(); detl.setOrderNo(stationDetl.getOrderNo()); detl.setBoxType1(wrkDetl.getBoxType1()); detl.setBoxType1(param.getBoxType1()); detl.setZpallet(param.getBarcode()); detl.setBarcode(param.getBarcode()); detl.setThreeCode(combMat.getThreeCode()); @@ -2250,7 +2250,16 @@ AtomicReference<Double> totalOut = new AtomicReference<>(0.0); listMap.forEach((matnr, detls) -> { Map<String, List<LocDetl>> supIds = detls.stream().collect(Collectors.groupingBy(LocDetl::getStandby1)); supIds.forEach((supId, sups) -> { for (String supId : supIds.keySet()) { List<LocDetl> sups = supIds.get(supId); // } // supIds.forEach((supId, sups) -> { Mat mats = matService.selectOne(new EntityWrapper<Mat>() .eq("supp_code", supId) .eq("matnr", matnr)); if (Objects.isNull(mats)) { throw new CoolException("物料不存在!!"); } // 根据supId(供应商)分类,得到需要存放的总空库存数量 Double sum = sups.stream().mapToDouble(LocDetl::getAnfme).sum(); AtomicReference<Double> itemed = new AtomicReference<>(0.0); @@ -2278,12 +2287,6 @@ if (container.getMixMax() > sets.size()) { //余下可混放种类 long suplus = Math.round((container.getMixMax() - sets.size()) * 10000) / 10000; Mat mats = matService.selectOne(new EntityWrapper<Mat>() .eq("supp_code", supId) .eq("matnr", matnr)); if (Objects.isNull(mats)) { throw new CoolException("物料不存在!!"); } //余下最大可放数量 Double v = Math.round((mats.getUpQty() * suplus) * 10000) / 10000.0; // 入库数量小于零且入库数量减去已计划出数量大于零() @@ -2296,8 +2299,46 @@ } } }); } else { // 获取当前供应商+ 物料在库 LocMast notFullList = locMastService.selectNotFull(mats.getLocType(), one.getId()); if (Objects.isNull(notFullList)) { continue; } BasContainer container = basContainerService .selectOne(new EntityWrapper<BasContainer>().eq("barcode", notFullList.getBarcode())); if (Objects.isNull(container)) { throw new CoolException("数据错误,容器不存在!!"); } List<LocDetl> adetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", notFullList.getLocNo())); Set<String> sets = adetls.stream().map(LocDetl::getMatnr).collect(Collectors.toSet()); List<LocDetl> locDtls = new ArrayList<>(); // 判断容器是否还可混放,及当前物料可放多少 if (container.getMixMax() > sets.size()) { //余下可混放种类 long suplus = Math.round((container.getMixMax() - sets.size()) * 10000) / 10000; //余下最大可放数量 Double v = Math.round((mats.getUpQty() * suplus) * 10000) / 10000.0; // 入库数量小于零且入库数量减去已计划出数量大于零() if (sum.compareTo(v) <= 0 && sum.compareTo(itemed.get()) > 0) { itemed.set(Math.round((itemed.get() + v) * 10000) / 10000.0); // 可放下 LocDetl locDetl = new LocDetl(); BeanUtils.copyProperties(mats, locDetl); locDetl.setLocNo(notFullList.getLocNo()); locDetl.setAnfme(0.0); locDetl.setMatnr(mats.getMatnr()); locDetl.setZpallet(notFullList.getBarcode()); locDetl.setSuppCode(mats.getSuppCode()); locDetl.setMaktx(mats.getMaktx()); locDtls.add(locDetl); CrnTaskDetlDTO crnTaskDetlDTO = new CrnTaskDetlDTO().setLocNo(notFullList.getLocNo()).setLocDetlList(locDtls); locMasts.add(crnTaskDetlDTO); totalOut.set(Math.round((totalOut.get() + itemed.get()) * 10000) / 10000.0); } } } }); } }); /**是否优先空板出库*/ @@ -2314,7 +2355,6 @@ } CrnTaskDetlDTO crnTaskDetlDTO = new CrnTaskDetlDTO().setLocNo(locMast.getLocNo()).setLocDetlList(new ArrayList<>()); locMasts.add(crnTaskDetlDTO); // 空板出库 generateTask(locMasts, TaskIOType.MERGE_OUT.type, basDevp, userId, station); } else { @@ -2626,14 +2666,14 @@ if (Objects.isNull(station)) { throw new CoolException("站点不存在!!"); } station.setLocSts("O"); // S.入库预约 station.setLocSts("O"); station.setBarcode(barcode); station.setModiTime(new Date()); station.setModiUser(userId); if (!basStationService.updateById(station)) { throw new CoolException("更新目标库位状态失败"); } basStationDetlService.delete(new EntityWrapper<BasStationDetl>().eq("dev_no", station.getDevNo())); } } @@ -2718,13 +2758,12 @@ if (Objects.isNull(station)) { throw new CoolException("站点不存在!!"); } try { //空台车回库 generateAgvTask("agv_back", locCache, callAgvBackParam.getOrgSite(), station.getBarcode(), userId, "M2"); } catch (Exception e) { e.printStackTrace(); return R.error(e.getMessage()); log.error(e.getMessage()); throw new CoolException(e.getMessage()); } return R.ok(locCache); src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -370,35 +370,35 @@ .eq("supp_code", wrkDetl.getSuppCode()) .eq("matnr", wrkDetl.getMatnr()) .eq("loc_no", locMast.getLocNo())); // 更新订单完成数量 OrderDetlPakin detlPakin = orderDetlPakinService.selectOne(new EntityWrapper<OrderDetlPakin>() // .eq("three_code", wrkDetl.getThreeCode()) //TODO 并板时需要修改BSCODE为订单bscode .eq("supp_code", wrkDetl.getSuppCode()) .eq("matnr", wrkDetl.getMatnr()) .eq("order_no", wrkDetl.getOrderNo())); if (!Cools.isEmpty(detlPakin)) { //任务明细数量=新入库数量 + 原库存数量 double locQty = 0.0; if (!Objects.isNull(locDetl)) { locQty = locDetl.getAnfme(); } double v = Math.round((wrkDetl.getAnfme() - locQty) * 10000) / 10000.0; double v1 = Math.round((detlPakin.getQty() + v) * 10000) / 10000.0; detlPakin.setQty(v1); detlPakin.setWorkQty(v1); detlPakin.setAdjustQty(wrkDetl.getAdjustQty()); detlPakin.setSplusQty(wrkDetl.getSplusQty()); if (!orderDetlPakinService.update(detlPakin, new EntityWrapper<OrderDetlPakin>() .eq("matnr", detlPakin.getMatnr()) .eq("supp_code", detlPakin.getSuppCode()) .eq("order_no", detlPakin.getOrderNo()))) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("并板入库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } if (null != locDetl) { // 更新订单完成数量 OrderDetlPakin detlPakin = orderDetlPakinService.selectOne(new EntityWrapper<OrderDetlPakin>() // .eq("three_code", wrkDetl.getThreeCode()) //TODO 并板时需要修改BSCODE为订单bscode .eq("supp_code", wrkDetl.getSuppCode()) .eq("matnr", wrkDetl.getMatnr()) .eq("order_no", wrkDetl.getOrderNo())); try { if (!Cools.isEmpty(detlPakin)) { double v = Math.round((wrkDetl.getAnfme() - locDetl.getAnfme()) * 10000) / 10000.0; double v1 = Math.round((detlPakin.getQty() + v) * 10000) / 10000.0; detlPakin.setQty(v1); detlPakin.setWorkQty(v1); detlPakin.setAdjustQty(wrkDetl.getAdjustQty()); detlPakin.setSplusQty(wrkDetl.getSplusQty()); if (!orderDetlPakinService.update(detlPakin, new EntityWrapper<OrderDetlPakin>() .eq("matnr", detlPakin.getMatnr()) .eq("supp_code", detlPakin.getSuppCode()) .eq("order_no", detlPakin.getOrderNo()))) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); return FAIL.setMsg("并板入库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo() + "],[locNo=" + wrkMast.getLocNo() + "]"); } } } catch (Exception e) { log.error(e.getMessage()); } LocDetl detl = new LocDetl(); detl.setAnfme(wrkDetl.getAnfme()); detl.setStandby1(wrkDetl.getSuppCode()); src/main/resources/mapper/LocMastMapper.xml
@@ -215,5 +215,13 @@ #{item} </foreach> </select> <select id="selectNotFull" resultType="com.zy.asrs.entity.LocMast"> SELECT TOP 1 * FROM asr_loc_mast WHERE barcode IN (SELECT zpallet FROM asr_loc_detl ald INNER JOIN man_mat mt ON ald.matnr = mt.matnr AND ald.supp_code = mt.supp_code WHERE mt.loc_type =#{locType} AND area_id = #{id} GROUP BY zpallet HAVING COUNT ( * ) < 2) ORDER BY loc_no, modi_time ASC </select> </mapper>