| | |
| | | import com.ruoyi.basic.mapper.SupplierManageMapper; |
| | | import com.ruoyi.basic.pojo.SupplierManage; |
| | | import com.ruoyi.basic.service.ISupplierService; |
| | | import com.ruoyi.common.utils.AmountUtils; |
| | | import com.ruoyi.common.utils.SecurityUtils; |
| | | import com.ruoyi.common.utils.poi.ExcelUtil; |
| | | import com.ruoyi.purchase.mapper.PurchaseLedgerMapper; |
| | |
| | | vo.setShippedAmount(BigDecimal.ZERO); |
| | | BigDecimal contractAmount = vo.getContractAmounts() == null ? BigDecimal.ZERO : vo.getContractAmounts(); |
| | | vo.setUnshippedAmount(contractAmount); |
| | | AmountUtils.normalizeSupplierTransaction(vo); |
| | | } |
| | | return plPage; |
| | | } |
| | |
| | | |
| | | List<StockInRecord> currentDirectRecords = directInboundRecords.stream().filter(s -> s.getRecordId().equals(ledgerId)).toList(); |
| | | for (StockInRecord sir : currentDirectRecords) { |
| | | List<SalesLedgerProduct> currentProducts = salesLedgerProducts.stream().filter(s -> s.getSalesLedgerId().equals(ledgerId)).toList(); |
| | | for (SalesLedgerProduct slp : currentProducts) { |
| | | if (sir.getStockInNum() != null && slp.getTaxInclusiveUnitPrice() != null) { |
| | | shippedAmount = shippedAmount.add(sir.getStockInNum().multiply(slp.getTaxInclusiveUnitPrice())); |
| | | } |
| | | BigDecimal unitPrice = getPurchaseInboundUnitPrice(salesLedgerProducts, ledgerId, sir); |
| | | if (sir.getStockInNum() != null && unitPrice != null) { |
| | | shippedAmount = shippedAmount.add(sir.getStockInNum().multiply(unitPrice)); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | vo.setShippedAmount(shippedAmount); |
| | | vo.setUnshippedAmount(contractAmount.subtract(shippedAmount)); |
| | | AmountUtils.normalizeSupplierTransaction(vo); |
| | | } |
| | | |
| | | return plPage; |
| | |
| | | |
| | | List<StockInRecord> currentDirectRecords = directInboundRecords.stream().filter(s -> s.getRecordId().equals(vo.getPurchaseLedgerId())).toList(); |
| | | for (StockInRecord sir : currentDirectRecords) { |
| | | List<SalesLedgerProduct> currentProducts = salesLedgerProducts.stream().filter(s -> s.getSalesLedgerId().equals(vo.getPurchaseLedgerId())).toList(); |
| | | for (SalesLedgerProduct slp : currentProducts) { |
| | | if (sir.getStockInNum() != null && slp.getTaxInclusiveUnitPrice() != null) { |
| | | shippedAmount = shippedAmount.add(sir.getStockInNum().multiply(slp.getTaxInclusiveUnitPrice())); |
| | | } |
| | | BigDecimal unitPrice = getPurchaseInboundUnitPrice(salesLedgerProducts, vo.getPurchaseLedgerId(), sir); |
| | | if (sir.getStockInNum() != null && unitPrice != null) { |
| | | shippedAmount = shippedAmount.add(sir.getStockInNum().multiply(unitPrice)); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | vo.setShippedAmount(shippedAmount); |
| | | vo.setUnshippedAmount(contractAmount.subtract(shippedAmount)); |
| | | AmountUtils.normalizeSupplierTransactionDetail(vo); |
| | | } |
| | | |
| | | return plPage; |
| | |
| | | .min(BigDecimal::compareTo) |
| | | .orElse(null); |
| | | } |
| | | |
| | | /** |
| | | * 直接入库记录(7)的含税单价:批次号格式为“采购合同号-采购产品行ID”,按对应产品行取价 |
| | | */ |
| | | private BigDecimal getPurchaseInboundUnitPrice(List<SalesLedgerProduct> allSlp, Long salesLedgerId, StockInRecord record) { |
| | | String batchNo = record.getBatchNo(); |
| | | int separatorIndex = batchNo == null ? -1 : batchNo.lastIndexOf('-'); |
| | | if (separatorIndex > -1) { |
| | | try { |
| | | Long productId = Long.valueOf(batchNo.substring(separatorIndex + 1)); |
| | | BigDecimal unitPrice = allSlp.stream() |
| | | .filter(s -> s.getId().equals(productId)) |
| | | .map(SalesLedgerProduct::getTaxInclusiveUnitPrice) |
| | | .filter(java.util.Objects::nonNull) |
| | | .findFirst() |
| | | .orElse(null); |
| | | if (unitPrice != null) { |
| | | return unitPrice; |
| | | } |
| | | } catch (NumberFormatException ignored) { |
| | | // 批次号不符合约定格式,回退按产品规格匹配 |
| | | } |
| | | } |
| | | return getMinTaxInclusiveUnitPrice(allSlp, salesLedgerId, record.getProductModelId()); |
| | | } |
| | | } |