From 9fb55091a85176341c83cd6018ce43a52f92dcae Mon Sep 17 00:00:00 2001 From: 15066119699 Date: Sun, 2 Mar 2025 16:13:00 +0800 Subject: [PATCH] =?UTF-8?q?wms=E5=92=8CEBS=E5=BA=93=E5=AD=98=E6=95=B0?= =?UTF-8?q?=E9=87=8F=E5=AF=B9=E6=AF=94=EF=BC=8C=E6=A0=B9=E6=8D=AE=E7=89=A9?= =?UTF-8?q?=E6=96=99ID=E6=88=96=E8=80=85=E7=89=A9=E6=96=99ID=E5=92=8C?= =?UTF-8?q?=E6=89=B9=E6=AC=A1=E5=88=86=E7=BB=84=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../business/EbsConfirmController.java | 263 +++++++++++++++--- .../main/resources/mapper/TMiStockMapper.xml | 16 +- 2 files changed, 231 insertions(+), 48 deletions(-) diff --git a/wms-admin/src/main/java/com/ruoyi/web/controller/business/EbsConfirmController.java b/wms-admin/src/main/java/com/ruoyi/web/controller/business/EbsConfirmController.java index d591f1e..cd7510e 100644 --- a/wms-admin/src/main/java/com/ruoyi/web/controller/business/EbsConfirmController.java +++ b/wms-admin/src/main/java/com/ruoyi/web/controller/business/EbsConfirmController.java @@ -93,41 +93,65 @@ public class EbsConfirmController extends BaseController { @PostMapping("/ebsConfirm/main") @ResponseBody public TableDataInfo ebsConfirmMain(EbsStock ebsStock) throws Exception { + logger.info("查询EBS现有量并对比本地开始===》》》》》》》》"); TMiStock stockForQuery = new TMiStock(); stockForQuery.setGoodsId(ebsStock.getGoodsId()); stockForQuery.setWhseloc(ebsStock.getSubInventory()); // 库存信息 List stockList = tMiStockService.selectTMiStockOutList(stockForQuery); + logger.info("根据请求参数查询到的库存条数: {}", stockList.size()); // EBS现有量查询结果 List ebsStockList = new LinkedList<>(); - if (stockList.size() < 1) { - return getDataTable(ebsStockList); - } +// if (stockList.size() < 1) { +// return getDataTable(ebsStockList); +// } // 获取token JSONObject token = JSON.parseObject(HttpUtils.httpPostJson(configService.selectConfigByKey("token_ip"), "", "")); // 一起查询 - String params = JSON.toJSONString(createJsonList(stockList, ebsStock.getSubInventory(), EbsUtils.LOCATOR_AREA_MAP.get(ebsStock.getSubInventory()))); + List queryList = new ArrayList<>(); + queryList.add(stockForQuery); + String params = JSON.toJSONString(createJsonList(queryList, ebsStock.getSubInventory(), EbsUtils.LOCATOR_AREA_MAP.get(ebsStock.getSubInventory()))); String result = HttpUtils.httpPostJson(configService.selectConfigByKey("ebs_ip"), params, token.get("access_token").toString()); logger.info("现有量查询参数:{},结果:{}", params, result); JSONObject resultJson = (JSONObject) JSON.parseObject(result).get("obj"); List datas = JSON.parseArray(resultJson.getString("rows"), ExistingStock.class); - // 生成现有量数据 + + logger.info("返回的条数:{}", datas.size()); + // 首先,处理EBS响应中的所有商品 + Map ebsItemMap = new HashMap<>(); + for (ExistingStock existingStock : datas) { + String itemCode = existingStock.getItemCode(); + if (ebsItemMap.containsKey(itemCode)) { + // 对同一商品的数量进行累加 + ExistingStock existing = ebsItemMap.get(itemCode); + existing.setTransactionQuantity(existing.getTransactionQuantity() + existingStock.getTransactionQuantity()); + } else { + ebsItemMap.put(itemCode, existingStock); + } + } + + // 处理本地库存列表中的商品 + Set processedItems = new HashSet<>(); for (TMiStock stock : stockList) { // 插入的EBS现有量数据 EbsStock temp = new EbsStock(); // 查询结果返回的总量 - int sum = 0; - for (ExistingStock existingStock : datas) { - if (stock.getGoodsId().equals(existingStock.getItemCode())) { - sum += existingStock.getTransactionQuantity(); - } + double sum = 0; + + String goodsId = stock.getGoodsId(); + processedItems.add(goodsId); + + if (ebsItemMap.containsKey(goodsId)) { + sum = ebsItemMap.get(goodsId).getTransactionQuantity(); } + // 设定EBS现有量的数据 - temp.setGoodsId(stock.getGoodsId()); + temp.setGoodsId(goodsId); temp.setGoodsName(stock.getGoodsName()); temp.setSubInventory(ebsStock.getSubInventory()); temp.setEbsNum(BigDecimal.valueOf(sum)); temp.setWmsNum(stock.getShelvesNum()); + if (BigDecimal.valueOf(sum).compareTo(stock.getShelvesNum()) != 0) { temp.setDiffNum(BigDecimal.valueOf(sum).subtract(stock.getShelvesNum())); temp.setSts("0"); @@ -138,6 +162,34 @@ public class EbsConfirmController extends BaseController { ebsStockList.add(temp); } + + // 生成现有量数据 +// for (TMiStock stock : stockList) { +// // 插入的EBS现有量数据 +// EbsStock temp = new EbsStock(); +// // 查询结果返回的总量 +// int sum = 0; +// for (ExistingStock existingStock : datas) { +// if (stock.getGoodsId().equals(existingStock.getItemCode())) { +// sum += existingStock.getTransactionQuantity(); +// } +// } +// // 设定EBS现有量的数据 +// temp.setGoodsId(stock.getGoodsId()); +// temp.setGoodsName(stock.getGoodsName()); +// temp.setSubInventory(ebsStock.getSubInventory()); +// temp.setEbsNum(BigDecimal.valueOf(sum)); +// temp.setWmsNum(stock.getShelvesNum()); +// if (BigDecimal.valueOf(sum).compareTo(stock.getShelvesNum()) != 0) { +// temp.setDiffNum(BigDecimal.valueOf(sum).subtract(stock.getShelvesNum())); +// temp.setSts("0"); +// } else { +// temp.setDiffNum(BigDecimal.valueOf(sum).subtract(stock.getShelvesNum())); +// temp.setSts("1"); +// } +// ebsStockList.add(temp); +// } + // 更新逻辑 // 1. 传参变化:只传子库 // String params = JSON.toJSONString(createJsonGetAll(ebsStock.getSubInventory())); @@ -226,57 +278,96 @@ public class EbsConfirmController extends BaseController { @PostMapping("/ebsConfirmLot/main") @ResponseBody public TableDataInfo ebsConfirmLotMain(EbsStock ebsStock) throws Exception { + logger.info("查询EBS现有量并对比本地开始===》》》》》》》》"); TMiStock stockForQuery = new TMiStock(); stockForQuery.setGoodsId(ebsStock.getGoodsId()); stockForQuery.setProduclotid(ebsStock.getLotNumber()); stockForQuery.setWhseloc(ebsStock.getSubInventory()); // 库存信息 List stockList = tMiStockService.selectTMiStockOutListByLot(stockForQuery); - // EBS现有量查询结果 - List ebsStockList = new LinkedList<>(); - if (stockList.size() < 1) { - return getDataTable(ebsStockList); - } + logger.info("根据请求参数查询到的库存条数: {}", stockList.size()); + +// if (stockList.size() < 1) { +// return getDataTable(ebsStockList); +// } // 获取token JSONObject token = JSON.parseObject(HttpUtils.httpPostJson(configService.selectConfigByKey("token_ip"), "", "")); - // TODO 分批查询 List datas = new ArrayList<>(); - int batchNum = stockList.size()/200; - for (int i=0; i<=batchNum; i++) { - List tempStockList; - if (i == batchNum) { - tempStockList = stockList.subList(i*200, stockList.size()); - } else { - tempStockList = stockList.subList(i*200, (i+1)*200); - } +// int batchNum = stockList.size()/200; +// for (int i=0; i<=batchNum; i++) { +// List tempStockList; +// if (i == batchNum) { +// tempStockList = stockList.subList(i*200, stockList.size()); +// } else { +// tempStockList = stockList.subList(i*200, (i+1)*200); +// } // 一起查询 - String params = JSON.toJSONString(createJsonList(tempStockList, ebsStock.getSubInventory(), EbsUtils.LOCATOR_AREA_MAP.get(ebsStock.getSubInventory()))); + List queryList = new ArrayList<>(); + queryList.add(stockForQuery); + String params = JSON.toJSONString(createJsonList(queryList, ebsStock.getSubInventory(), EbsUtils.LOCATOR_AREA_MAP.get(ebsStock.getSubInventory()))); String result = HttpUtils.httpPostJson(configService.selectConfigByKey("ebs_ip"), params, token.get("access_token").toString()); logger.info("现有量(按批次)查询参数:{},结果:{}", params, result); JSONObject resultJson = (JSONObject) JSON.parseObject(result).get("obj"); + // 添加数据 - datas.addAll(JSON.parseArray(resultJson.getString("rows"), ExistingStock.class)); +// datas.addAll(JSON.parseArray(resultJson.getString("rows"), ExistingStock.class)); + datas = JSON.parseArray(resultJson.getString("rows"), ExistingStock.class); + logger.info("返回的条数:{}", datas.size()); +// } + + // 创建一个Map来存储EBS系统中的商品和批次信息 + Map> ebsItemLotMap = new HashMap<>(); + for (ExistingStock existingStock : datas) { + String itemCode = existingStock.getItemCode(); + String lotNumber = existingStock.getLotNumber(); + String key = itemCode + "_" + lotNumber; + + if (ebsItemLotMap.containsKey(itemCode)) { + Map lotMap = ebsItemLotMap.get(itemCode); + if (lotMap.containsKey(lotNumber)) { + // 对同一商品同一批次的数量进行累加 + lotMap.put(lotNumber, lotMap.get(lotNumber) + existingStock.getTransactionQuantity()); + } else { + lotMap.put(lotNumber, existingStock.getTransactionQuantity()); + } + } else { + Map lotMap = new HashMap<>(); + lotMap.put(lotNumber, existingStock.getTransactionQuantity()); + ebsItemLotMap.put(itemCode, lotMap); + } } - // 生成现有量数据 + // 统计返回结果 + List ebsStockList = new LinkedList<>(); + + // 用于跟踪已处理的商品和批次组合 + Set processedItemLots = new HashSet<>(); + + // 处理本地库存列表中的商品 for (TMiStock stock : stockList) { // 插入的EBS现有量数据 EbsStock temp = new EbsStock(); // 查询结果返回的总量 - int sum = 0; - for (ExistingStock existingStock : datas) { - if (stock.getGoodsId().equals(existingStock.getItemCode()) && stock.getProduclotid().equals(existingStock.getLotNumber())) { - sum += existingStock.getTransactionQuantity(); - } + double sum = 0; + + String goodsId = stock.getGoodsId(); + String lotNumber = stock.getProduclotid(); + String key = goodsId + "_" + lotNumber; + processedItemLots.add(key); + + if (ebsItemLotMap.containsKey(goodsId) && ebsItemLotMap.get(goodsId).containsKey(lotNumber)) { + sum = ebsItemLotMap.get(goodsId).get(lotNumber); } + // 设定EBS现有量的数据 - temp.setGoodsId(stock.getGoodsId()); + temp.setGoodsId(goodsId); temp.setGoodsName(stock.getGoodsName()); - temp.setLotNumber(stock.getProduclotid()); + temp.setLotNumber(lotNumber); temp.setSubInventory(ebsStock.getSubInventory()); temp.setEbsNum(BigDecimal.valueOf(sum)); temp.setWmsNum(stock.getShelvesNum()); + if (BigDecimal.valueOf(sum).compareTo(stock.getShelvesNum()) != 0) { temp.setDiffNum(BigDecimal.valueOf(sum).subtract(stock.getShelvesNum())); temp.setSts("0"); @@ -287,6 +378,88 @@ public class EbsConfirmController extends BaseController { ebsStockList.add(temp); } + // 处理仅存在于EBS系统但不在本地系统中的商品和批次 + for (Map.Entry> itemEntry : ebsItemLotMap.entrySet()) { + String goodsId = itemEntry.getKey(); + Map lotMap = itemEntry.getValue(); + + for (Map.Entry lotEntry : lotMap.entrySet()) { + String lotNumber = lotEntry.getKey(); + String key = goodsId + "_" + lotNumber; + + if (!processedItemLots.contains(key)) { + EbsStock temp = new EbsStock(); + + temp.setGoodsId(goodsId); + // 需要从某处获取商品名称 - 可能需要查询商品信息 + temp.setGoodsName(getGoodsNameById(goodsId)); // 您需要实现这个方法 + temp.setLotNumber(lotNumber); + temp.setSubInventory(ebsStock.getSubInventory()); + temp.setEbsNum(BigDecimal.valueOf(lotEntry.getValue())); + temp.setWmsNum(BigDecimal.ZERO); // 本地数量为0 + temp.setDiffNum(temp.getEbsNum()); // 差异就是EBS数量 + temp.setSts("0"); // 状态为不同 + + ebsStockList.add(temp); + } + } + } + + + + + + + + + + // TODO 分批查询 +// List datas = new ArrayList<>(); +// int batchNum = stockList.size()/200; +// for (int i=0; i<=batchNum; i++) { +// List tempStockList; +// if (i == batchNum) { +// tempStockList = stockList.subList(i*200, stockList.size()); +// } else { +// tempStockList = stockList.subList(i*200, (i+1)*200); +// } +// // 一起查询 +// String params = JSON.toJSONString(createJsonList(tempStockList, ebsStock.getSubInventory(), EbsUtils.LOCATOR_AREA_MAP.get(ebsStock.getSubInventory()))); +// String result = HttpUtils.httpPostJson(configService.selectConfigByKey("ebs_ip"), params, token.get("access_token").toString()); +// logger.info("现有量(按批次)查询参数:{},结果:{}", params, result); +// JSONObject resultJson = (JSONObject) JSON.parseObject(result).get("obj"); +// // 添加数据 +// datas.addAll(JSON.parseArray(resultJson.getString("rows"), ExistingStock.class)); +// } +// +// // 生成现有量数据 +// for (TMiStock stock : stockList) { +// // 插入的EBS现有量数据 +// EbsStock temp = new EbsStock(); +// // 查询结果返回的总量 +// int sum = 0; +// for (ExistingStock existingStock : datas) { +// if (stock.getGoodsId().equals(existingStock.getItemCode()) && stock.getProduclotid().equals(existingStock.getLotNumber())) { +// sum += existingStock.getTransactionQuantity(); +// } +// } +// // 设定EBS现有量的数据 +// temp.setGoodsId(stock.getGoodsId()); +// temp.setGoodsName(stock.getGoodsName()); +// temp.setLotNumber(stock.getProduclotid()); +// temp.setSubInventory(ebsStock.getSubInventory()); +// temp.setEbsNum(BigDecimal.valueOf(sum)); +// temp.setWmsNum(stock.getShelvesNum()); +// if (BigDecimal.valueOf(sum).compareTo(stock.getShelvesNum()) != 0) { +// temp.setDiffNum(BigDecimal.valueOf(sum).subtract(stock.getShelvesNum())); +// temp.setSts("0"); +// } else { +// temp.setDiffNum(BigDecimal.valueOf(sum).subtract(stock.getShelvesNum())); +// temp.setSts("1"); +// } +// ebsStockList.add(temp); +// } + // 更新逻辑 // 1. 传参变化:只传子库 // String params = JSON.toJSONString(createJsonGetAll(ebsStock.getSubInventory())); @@ -382,6 +555,12 @@ public class EbsConfirmController extends BaseController { return rspData; } + private String getGoodsNameById(String goodsId) { + TBaseGoods tBaseGoods = goodsService.selectTBaseGoodsByGoodsId(goodsId); + if(tBaseGoods == null) return null; + return tBaseGoods.getGoodsName(); + } + /** * 导出EBS现有量记录 */ @@ -480,12 +659,16 @@ public class EbsConfirmController extends BaseController { String lotNumber = ""; for (int i = 0; i < stocks.size(); i++) { if (i == 0) { - itemCode = stocks.get(i).getGoodsId(); + if(StringUtils.isNotBlank(stocks.get(i).getGoodsId())){ + itemCode = stocks.get(i).getGoodsId(); + } if (StringUtils.isNotEmpty(stocks.get(i).getProduclotid())) { lotNumber = stocks.get(i).getProduclotid(); } } else { - itemCode += "," + stocks.get(i).getGoodsId(); + if(StringUtils.isNotBlank(stocks.get(i).getGoodsId())){ + itemCode += "," + stocks.get(i).getGoodsId(); + } if (StringUtils.isNotEmpty(stocks.get(i).getProduclotid())) { lotNumber += "," + stocks.get(i).getProduclotid(); } @@ -555,11 +738,11 @@ public class EbsConfirmController extends BaseController { this.originationDate = originationDate; } - public int getTransactionQuantity() { + public Double getTransactionQuantity() { return transactionQuantity; } - public void setTransactionQuantity(int transactionQuantity) { + public void setTransactionQuantity(Double transactionQuantity) { this.transactionQuantity = transactionQuantity; } @@ -585,7 +768,7 @@ public class EbsConfirmController extends BaseController { private String subinventoryCode; private String expirationDate; private String originationDate; - private int transactionQuantity; + private Double transactionQuantity; private int pnalQty; private int organizationId; } diff --git a/wms-business/src/main/resources/mapper/TMiStockMapper.xml b/wms-business/src/main/resources/mapper/TMiStockMapper.xml index 70d7e23..530ce85 100644 --- a/wms-business/src/main/resources/mapper/TMiStockMapper.xml +++ b/wms-business/src/main/resources/mapper/TMiStockMapper.xml @@ -3,7 +3,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + @@ -129,11 +129,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" @@ -141,15 +141,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + - + insert into t_mi_stock @@ -359,10 +359,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - delete from t_mi_stock where STOCK_ID in + delete from t_mi_stock where STOCK_ID in #{stockId} - \ No newline at end of file +