From 550e82af391c67a4abdc787144dff4b4dd98ed24 Mon Sep 17 00:00:00 2001 From: "han\\hanst" Date: Mon, 6 Oct 2025 14:35:57 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=87=E8=B4=AD=E6=8E=A5=E6=94=B6=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E5=8F=96=E6=B6=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/QualifiedStorageServiceImpl.java | 12 -- .../impl/PurchaseManageServiceImpl.java | 148 ++++++++++-------- 2 files changed, 82 insertions(+), 78 deletions(-) diff --git a/src/main/java/com/gaotao/modules/inspection/service/impl/QualifiedStorageServiceImpl.java b/src/main/java/com/gaotao/modules/inspection/service/impl/QualifiedStorageServiceImpl.java index b3209f5..3c993e6 100644 --- a/src/main/java/com/gaotao/modules/inspection/service/impl/QualifiedStorageServiceImpl.java +++ b/src/main/java/com/gaotao/modules/inspection/service/impl/QualifiedStorageServiceImpl.java @@ -355,18 +355,6 @@ public class QualifiedStorageServiceImpl implements QualifiedStorageService { String result = ifsApiIssueAndReturnService.purchaseOrderMoveToStockOneLocation(moveDto); if ("IFSUpdated".equals(result) || "\"IFSUpdated\"".equals(result)) { - // 8. IFS接口调用成功后,更新接收记录状态 - LambdaUpdateWrapper receiptDetailQueryWrapper = Wrappers.lambdaUpdate(); - receiptDetailQueryWrapper.eq(PoReceiptDetail::getSite, site) - .eq(PoReceiptDetail::getOrderNo, sourceRef1) - .eq(PoReceiptDetail::getOrderItemNo, sourceRef2) - .eq(PoReceiptDetail::getOrderReleaseNo, sourceRef3) - .eq(PoReceiptDetail::getItemNo, receiptNo); - - PoReceiptDetail poReceiptDetail = new PoReceiptDetail(); - poReceiptDetail.setStatus("RECEIVED"); // 设置为已入库 - poReceiptDetailService.update(poReceiptDetail, receiptDetailQueryWrapper); - log.info("检验合格入库成功,事务号: {}, HandlingUnit数量: {}", inboundTransNo, handlingUnits.size()); return R.ok("检验合格入库成功"); } else { diff --git a/src/main/java/com/gaotao/modules/po/service/impl/PurchaseManageServiceImpl.java b/src/main/java/com/gaotao/modules/po/service/impl/PurchaseManageServiceImpl.java index 928fad4..1a147a5 100644 --- a/src/main/java/com/gaotao/modules/po/service/impl/PurchaseManageServiceImpl.java +++ b/src/main/java/com/gaotao/modules/po/service/impl/PurchaseManageServiceImpl.java @@ -32,6 +32,9 @@ import com.gaotao.modules.sys.entity.SysUserEntity; import java.math.BigDecimal; import java.util.*; +import java.util.stream.Collectors; +import com.gaotao.modules.api.entity.issueAndReturnVo.PurchaseOrderReceiptVo; +import com.gaotao.modules.api.service.IfsApiIssueAndReturnService; /** * 采购管理服务实现类 @@ -58,6 +61,9 @@ public class PurchaseManageServiceImpl implements PurchaseManageService { @Autowired private InventoryStockMapper inventoryStockMapper; + @Autowired + private IfsApiIssueAndReturnService ifsApiIssueAndReturnService; + @Value("${custom.ifs-url}") private String ifsUrl; @@ -129,28 +135,72 @@ public class PurchaseManageServiceImpl implements PurchaseManageService { @Override public PageUtils getCancelableReceiptList(PoReceiptQueryDto queryDto) { - // 只查询状态为已接收且未取消的记录 - queryDto.setStatus("ARRIVED"); - IPage> page = poReceiptMapper.getCancelableReceiptList( - new Page<>(queryDto.getPage(), queryDto.getSize()), queryDto); - return new PageUtils(page); + try { + // 验证必要参数 + if (StringUtils.isBlank(queryDto.getOrderNo())) { + log.warn("订单号为空,返回空结果"); + return new PageUtils(new ArrayList<>(), 0, queryDto.getSize(), queryDto.getPage()); + } + + // 调用IFS接口获取采购订单接收记录 + List allReceipts = ifsApiIssueAndReturnService.getPurchaseOrderReceipt( + queryDto.getOrderNo(), queryDto.getSite()); + + // 过滤可取消的记录(状态为已接收的记录) + List cancelableReceipts = allReceipts.stream() + .filter(receipt -> "To be Received".equals(receipt.getState())) + .collect(Collectors.toList()); + + // 应用查询条件过滤 + if (StringUtils.isNotBlank(queryDto.getReceiptNo())) { + cancelableReceipts = cancelableReceipts.stream() + .filter(receipt -> String.valueOf(receipt.getReceiptNo()).contains(queryDto.getReceiptNo())) + .collect(Collectors.toList()); + } + + if (StringUtils.isNotBlank(queryDto.getPartNo())) { + cancelableReceipts = cancelableReceipts.stream() + .filter(receipt -> receipt.getSourcePartNo() != null && + receipt.getSourcePartNo().contains(queryDto.getPartNo())) + .collect(Collectors.toList()); + } + + if (StringUtils.isNotBlank(queryDto.getSupplierId())) { + cancelableReceipts = cancelableReceipts.stream() + .filter(receipt -> receipt.getSender() != null && + receipt.getSender().contains(queryDto.getSupplierId())) + .collect(Collectors.toList()); + } + + // 手动分页 + int page = queryDto.getPage(); + int size = queryDto.getSize(); + int total = cancelableReceipts.size(); + int start = (page - 1) * size; + int end = Math.min(start + size, total); + + List pagedReceipts = cancelableReceipts.subList(start, end); + + // 构造分页结果 + PageUtils pageUtils = new PageUtils(pagedReceipts, total, size, page); + return pageUtils; + + } catch (Exception e) { + log.error("获取可取消接收记录失败: {}", e.getMessage(), e); + // 如果IFS接口调用失败,返回空结果 + return new PageUtils(new ArrayList<>(), 0, queryDto.getSize(), queryDto.getPage()); + } } @Override @Transactional public R cancelReceipt(Map params) { try { - String receiptNo = (String) params.get("receiptNo"); + String receiptSequence = String.valueOf(params.get("receiptSequence")); String site = (String) params.get("site"); String cancelReason = (String) params.get("cancelReason"); - Double itemNo = params.get("itemNo") != null ? Double.valueOf(params.get("itemNo").toString()) : null; - // 2. 调用IFS接口同步取消操作 - syncCancelToIfs(receiptNo, site, itemNo, cancelReason); - - // 3. 更新本地记录状态 - updateLocalRecordStatus(receiptNo, site, itemNo, "CANCEL", cancelReason); - + syncCancelToIfs(receiptSequence, site, cancelReason); return R.ok("取消接收成功"); } catch (Exception e) { @@ -204,65 +254,31 @@ public class PurchaseManageServiceImpl implements PurchaseManageService { /** * 同步取消操作到IFS */ - private void syncCancelToIfs(String receiptNo, String site, Double itemNo, String cancelReason) { + private void syncCancelToIfs(String receiptSequence, String site, String cancelReason) { try { - // 根据receiptNo、site、itemNo查询PoReceiptDetail记录,获取订单相关信息 - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(PoReceiptDetail::getReceiptNo, receiptNo) - .eq(PoReceiptDetail::getSite, site); - if (itemNo != null) { - wrapper.eq(PoReceiptDetail::getItemNo, itemNo); - } - - List details = poReceiptDetailMapper.selectList(wrapper); - if (details.isEmpty()) { - throw new XJException("未找到对应的接收记录"); - } - - // 对每个接收记录调用IFS取消方法 - for (PoReceiptDetail detail : details) { - Map params = Map.of( - "ifsDBName", ifsDBName, - "domainUserID", getCurrentDomainUserID(), - "ifsSiteID", site, - "ifsReceiptSequence", "2690471" - ); - - ObjectMapper objectMapper = new ObjectMapper(); - String jsonBody = objectMapper.writeValueAsString(params); - String ifsResponse = HttpUtils.doPost(ifsUrl + "CancelPurchaseOrderArrival", jsonBody, null); - - if ("IFSUpdated".equals(ifsResponse) || "\"IFSUpdated\"".equals(ifsResponse)) { - log.info("IFS取消接收成功,PO号: {}", detail.getOrderNo()); - } else { - log.error("IFS取消接收失败,PO号: {}, 响应: {}", detail.getOrderNo(), ifsResponse); - // 同步失败需要回滚前面所有的数据库操作 - String errorMessage = IfsErrorMessageUtils.extractOracleErrorMessage(ifsResponse); - throw new XJException(errorMessage); - } + Map params = Map.of( + "ifsDBName", ifsDBName, + "domainUserID", getCurrentDomainUserID(), + "ifsSiteID", site, + "ifsReceiptSequence", receiptSequence + ); + + ObjectMapper objectMapper = new ObjectMapper(); + String jsonBody = objectMapper.writeValueAsString(params); + String ifsResponse = HttpUtils.doPost(ifsUrl + "CancelPurchaseOrderArrival", jsonBody, null); + + if ("IFSUpdated".equals(ifsResponse) || "\"IFSUpdated\"".equals(ifsResponse)) { + log.info("IFS取消接收成功,PO号: {}", receiptSequence); + } else { + log.error("IFS取消接收失败,PO号: {}, 响应: {}", receiptSequence, ifsResponse); + // 同步失败需要回滚前面所有的数据库操作 + String errorMessage = IfsErrorMessageUtils.extractOracleErrorMessage(ifsResponse); + throw new XJException(errorMessage); } - } catch (Exception e) { log.error("同步IFS取消操作异常: {}", e.getMessage(), e); throw new XJException("IFS同步异常: " + e.getMessage()); } } - /** - * 更新本地记录状态 - */ - private void updateLocalRecordStatus(String receiptNo, String site, Double itemNo, String status, String cancelReason) { - // 更新接收明细状态 - LambdaQueryWrapper detailWrapper = new LambdaQueryWrapper<>(); - detailWrapper.eq(PoReceiptDetail::getReceiptNo, receiptNo) - .eq(PoReceiptDetail::getSite, site); - if (itemNo != null) { - detailWrapper.eq(PoReceiptDetail::getItemNo, itemNo); - } - PoReceiptDetail detail = new PoReceiptDetail(); - detail.setStatus(status); - detail.setCanceIremark(cancelReason); - poReceiptDetailMapper.update(detail, detailWrapper); - } - }