From 9b8ba51387d0a8db467bafaf7ecd09d93bded873 Mon Sep 17 00:00:00 2001 From: skyouc Date: 星期一, 28 四月 2025 13:23:37 +0800 Subject: [PATCH] 添加简略出库策略 --- rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java | 60 +++++++++++++++++++++++++++++++++++------------------------- 1 files changed, 35 insertions(+), 25 deletions(-) diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java index 111ac2f..96355b3 100644 --- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java +++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java @@ -17,15 +17,14 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.vincent.rsf.server.manager.utils.OptimalAlgorithmUtil; import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; +import java.util.stream.IntStream; @Service("waveService") public class WaveServiceImpl extends ServiceImpl<WaveMapper, Wave> implements WaveService { @@ -53,10 +52,11 @@ @Override @Transactional(rollbackFor = Exception.class) public R publicTask(Map<String, Object> map) { - List<Long> ids = (List<Long>) map.get("ids"); - if (Objects.isNull(ids) || ids.isEmpty()) { + List<WaveItem> itemParams = (List<WaveItem>) map.get("wave"); + if (Objects.isNull(itemParams) || itemParams.isEmpty()) { throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒"); } + List<Long> ids = itemParams.stream().map(WaveItem::getWaveId).collect(Collectors.toList()); List<Wave> waves = this.list(new LambdaQueryWrapper<Wave>().in(Wave::getId, ids)); if (Objects.isNull(waves) || waves.isEmpty()) { throw new CoolException("娉㈡鏁版嵁涓嶅瓨鍦紒锛�"); @@ -67,10 +67,9 @@ throw new CoolException("娉㈡鏄庣粏涓嶅瓨鍦紒锛�"); } List<Long> orderIds = waveItems.stream().map(WaveItem::getOrderId).collect(Collectors.toList()); - /**鏌ヨ姣忔潯鏄庣粏鍖归厤鐨勫簱浣�*/ try { - List<WaveItem> items = getLocs(waveItems); +// List<WaveItem> items = getLocs(waveItems); } catch (Exception e) { throw new CoolException("搴撲綅鑾峰彇澶辫触锛侊紒锛�"); } @@ -78,16 +77,16 @@ // 2. 鏍规嵁鐗╂枡SKU瀵绘壘绗﹀悎鐗╂枡搴撲綅 {1. 鏍规嵁鐗╂枡缂栫爜锛屾壒娆★紝鍔ㄦ�佸瓧娈� 鏌ヨ绗﹀悎鐨勫簱浣嶏紝鍐嶆牴鎹簱浣嶄腑鐗╂枡鐨勬暟閲忛�夋嫨鏈�閫傚悎鐨勫簱浣� 2. 鍒ゆ柇褰撳墠璁㈠崟鏄叏鎷栧嚭搴撹繕鏄嫞鏂欏叆搴搣 // 3. 淇敼涓诲崟銆佹尝娆℃墽琛屾暟閲� // 4. 鍒ゆ柇鍏ㄤ粨鍑哄簱鎴栨嫞鏂欏嚭搴� - List<AsnOrder> orders = asnOrderService.list(new LambdaQueryWrapper<AsnOrder>().in(AsnOrder::getId, orderIds)); - /**淇敼鍘熷嚭搴撳崟鐘舵��*/ - if (!asnOrderService.update(new LambdaQueryWrapper<AsnOrder>() - .eq(AsnOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_WORKING.val) - .in(AsnOrder::getId, orders))) { - throw new CoolException("鍑哄簱鍗曟嵁鐘舵�佷慨鏀瑰け璐ワ紒锛�"); - } - if (!this.update(new LambdaUpdateWrapper<Wave>().set(Wave::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_TASK).in(Wave::getId, ids))) { - throw new CoolException("娉㈡鐘舵�佷慨鏀瑰け璐ワ紒锛�"); - } +// List<AsnOrder> orders = asnOrderService.list(new LambdaQueryWrapper<AsnOrder>().in(AsnOrder::getId, orderIds)); +// /**淇敼鍘熷嚭搴撳崟鐘舵��*/ +// if (!asnOrderService.update(new LambdaQueryWrapper<AsnOrder>() +// .eq(AsnOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_WORKING.val) +// .in(AsnOrder::getId, orders))) { +// throw new CoolException("鍑哄簱鍗曟嵁鐘舵�佷慨鏀瑰け璐ワ紒锛�"); +// } +// if (!this.update(new LambdaUpdateWrapper<Wave>().set(Wave::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_TASK).in(Wave::getId, ids))) { +// throw new CoolException("娉㈡鐘舵�佷慨鏀瑰け璐ワ紒锛�"); +// } return R.ok(); } @@ -136,15 +135,26 @@ .eq(LocItem::getSplrBatch, waveItem.getSplrBatch()) .eq(StringUtils.isNotBlank(waveItem.getFieldsIndex()), LocItem::getFieldsIndex, waveItem.getFieldsIndex()) .groupBy(LocItem::getMatnrCode, LocItem::getSplrBatch, LocItem::getFieldsIndex, LocItem::getId)); + List<Double> doubles1 = locItems.stream().map(LocItem::getAnfme).collect(Collectors.toList()); + double[] doubles = doubles1.stream().mapToDouble(Double::doubleValue).toArray(); - Double[] doubles = locItems.stream().map(LocItem::getAnfme).toArray(Double[]::new); - List<Double> result = OptimalAlgorithmUtil.findBestCombination(doubles, waveItem.getAnfme()); - String locs = JSONArray.toJSONString(new ArrayList<>()); - if (!locItems.isEmpty()) { - List<String> codes = locItems.stream().map(LocItem::getLocCode).collect(Collectors.toList()); - locs = JSONArray.toJSONString(codes); + /**浣跨敤鍥炴函绠楁硶璁$畻锛岃幏鍙栫鍚堝嚭搴撻噺鐨勬渶绠�缁勫悎*/ + List<Integer> result = OptimalAlgorithmUtil.findCombination(doubles, waveItem.getAnfme()); + String locs = "[]"; + if (Objects.isNull(result)) { + waveItem.setStockLocs(locs).setStockQty(0.0); + } else { + /**杩囨护闆嗗悎涓渶绠�鐭殑缁勫悎*/ + List<LocItem> locsInfo = result.stream() + .filter(i -> i >= 0 && i < locItems.size()) + .map(locItems::get).collect(Collectors.toList()); + locs = JSONArray.toJSONString(locsInfo); + double sumQty = locItems.stream().mapToDouble(LocItem::getAnfme).sum(); + double surQty = locItems.stream().mapToDouble(LocItem::getWorkQty).sum(); + double qty = locItems.stream().mapToDouble(LocItem::getQty).sum(); + double v = sumQty - surQty - qty; + waveItem.setStockLocs(locs).setStockQty(v); } - waveItem.setStockLocs(locs); }); return waveItems; } -- Gitblit v1.9.1