| | |
| | | } |
| | | |
| | | // 可能属于多个主表 |
| | | Set<Long> mainIds = deletedProducts.stream() |
| | | .map(SalesLedgerProduct::getSalesLedgerId) |
| | | .filter(Objects::nonNull) |
| | | .collect(Collectors.toSet()); |
| | | Map<Long, Integer> mainIdTypeMap = deletedProducts.stream() |
| | | .filter(p -> p.getSalesLedgerId() != null) |
| | | .collect(Collectors.toMap(SalesLedgerProduct::getSalesLedgerId, SalesLedgerProduct::getType, (existing, replacement) -> existing)); |
| | | |
| | | // 2. 执行删除操作 |
| | | int result = salesLedgerProductMapper.deleteBatchIds(Arrays.asList(ids)); |
| | |
| | | deleteProductionData(Arrays.asList(ids)); |
| | | |
| | | // 3. 对每个主表ID进行金额更新 |
| | | for (Long salesLedgerId : mainIds) { |
| | | for (Map.Entry<Long, Integer> entry : mainIdTypeMap.entrySet()) { |
| | | Long salesLedgerId = entry.getKey(); |
| | | Integer type = entry.getValue(); |
| | | |
| | | LambdaQueryWrapper<SalesLedgerProduct> wrapper = new LambdaQueryWrapper<>(); |
| | | wrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerId); |
| | | wrapper.eq(SalesLedgerProduct::getType, type); |
| | | List<SalesLedgerProduct> remainingProducts = salesLedgerProductMapper.selectList(wrapper); |
| | | |
| | | // 调用通用方法更新主表金额 |
| | | updateMainContractAmount( |
| | | salesLedgerId, |
| | | remainingProducts, |
| | | SalesLedgerProduct::getTaxInclusiveTotalPrice, |
| | | salesLedgerMapper, |
| | | SalesLedger.class |
| | | ); |
| | | if (type == 1) { |
| | | SalesLedger salesLedger = salesLedgerMapper.selectById(salesLedgerId); |
| | | if (salesLedger != null) { |
| | | Function<SalesLedgerProduct, BigDecimal> amountGetter = Integer.valueOf(2).equals(salesLedger.getSalesType()) ? |
| | | p -> p.getTotalPrice() != null ? p.getTotalPrice() : BigDecimal.ZERO |
| | | : p -> p.getTaxInclusiveTotalPrice() != null ? p.getTaxInclusiveTotalPrice() : BigDecimal.ZERO; |
| | | updateMainContractAmount( |
| | | salesLedgerId, |
| | | remainingProducts, |
| | | amountGetter, |
| | | salesLedgerMapper, |
| | | SalesLedger.class |
| | | ); |
| | | } |
| | | } else { |
| | | PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(salesLedgerId); |
| | | if (purchaseLedger != null) { |
| | | Function<SalesLedgerProduct, BigDecimal> amountGetter = Integer.valueOf(2).equals(purchaseLedger.getPurchaseType()) ? |
| | | p -> p.getTotalPrice() != null ? p.getTotalPrice() : BigDecimal.ZERO |
| | | : p -> p.getTaxInclusiveTotalPrice() != null ? p.getTaxInclusiveTotalPrice() : BigDecimal.ZERO; |
| | | updateMainContractAmount( |
| | | salesLedgerId, |
| | | remainingProducts, |
| | | amountGetter, |
| | | purchaseLedgerMapper, |
| | | PurchaseLedger.class |
| | | ); |
| | | } |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public int addOrUpdateSalesLedgerProduct(SalesLedgerProduct salesLedgerProduct) { |
| | | if (salesLedgerProduct.getId() != null) { |
| | | SalesLedgerProduct dbProduct = salesLedgerProductMapper.selectById(salesLedgerProduct.getId()); |
| | | if (dbProduct != null) { |
| | | if (salesLedgerProduct.getSalesLedgerId() == null) { |
| | | salesLedgerProduct.setSalesLedgerId(dbProduct.getSalesLedgerId()); |
| | | } |
| | | if (salesLedgerProduct.getType() == null) { |
| | | salesLedgerProduct.setType(dbProduct.getType()); |
| | | } |
| | | if (salesLedgerProduct.getInvoiceTotal() == null) { |
| | | salesLedgerProduct.setInvoiceTotal(dbProduct.getInvoiceTotal()); |
| | | } |
| | | if (salesLedgerProduct.getTicketsTotal() == null) { |
| | | salesLedgerProduct.setTicketsTotal(dbProduct.getTicketsTotal()); |
| | | } |
| | | if (salesLedgerProduct.getQuantity() == null) { |
| | | salesLedgerProduct.setQuantity(dbProduct.getQuantity()); |
| | | } |
| | | if (salesLedgerProduct.getTotalPrice() == null) { |
| | | salesLedgerProduct.setTotalPrice(dbProduct.getTotalPrice()); |
| | | } |
| | | if (salesLedgerProduct.getTaxInclusiveTotalPrice() == null) { |
| | | salesLedgerProduct.setTaxInclusiveTotalPrice(dbProduct.getTaxInclusiveTotalPrice()); |
| | | } |
| | | if (salesLedgerProduct.getTaxExclusiveTotalPrice() == null) { |
| | | salesLedgerProduct.setTaxExclusiveTotalPrice(dbProduct.getTaxExclusiveTotalPrice()); |
| | | } |
| | | if (salesLedgerProduct.getTaxRate() == null) { |
| | | salesLedgerProduct.setTaxRate(dbProduct.getTaxRate()); |
| | | } |
| | | if (salesLedgerProduct.getUnitPrice() == null) { |
| | | salesLedgerProduct.setUnitPrice(dbProduct.getUnitPrice()); |
| | | } |
| | | if (salesLedgerProduct.getFreight() == null) { |
| | | salesLedgerProduct.setFreight(dbProduct.getFreight()); |
| | | } |
| | | if (salesLedgerProduct.getPriceWithFreight() == null) { |
| | | salesLedgerProduct.setPriceWithFreight(dbProduct.getPriceWithFreight()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | Long salesLedgerId = salesLedgerProduct.getSalesLedgerId(); |
| | | SalesLedger salesLedger = null; |
| | | PurchaseLedger purchaseLedger = null; |
| | | boolean isPrivate = false; |
| | | |
| | | if (salesLedgerProduct.getType() != null && salesLedgerProduct.getType().equals(1)) { |
| | | salesLedger = salesLedgerMapper.selectById(salesLedgerId); |
| | | if (salesLedger != null && Integer.valueOf(2).equals(salesLedger.getSalesType())) { |
| | | isPrivate = true; |
| | | } |
| | | } else { |
| | | purchaseLedger = purchaseLedgerMapper.selectById(salesLedgerId); |
| | | if (purchaseLedger != null && Integer.valueOf(2).equals(purchaseLedger.getPurchaseType())) { |
| | | isPrivate = true; |
| | | } |
| | | } |
| | | |
| | | BigDecimal totalPrice = isPrivate ? |
| | | (salesLedgerProduct.getTotalPrice() != null ? salesLedgerProduct.getTotalPrice() : BigDecimal.ZERO) : |
| | | (salesLedgerProduct.getTaxInclusiveTotalPrice() != null ? salesLedgerProduct.getTaxInclusiveTotalPrice() : BigDecimal.ZERO); |
| | | |
| | | BigDecimal invoiceTotal = salesLedgerProduct.getInvoiceTotal() != null ? salesLedgerProduct.getInvoiceTotal() : BigDecimal.ZERO; |
| | | BigDecimal ticketsTotal = salesLedgerProduct.getTicketsTotal() != null ? salesLedgerProduct.getTicketsTotal() : BigDecimal.ZERO; |
| | | |
| | | // 待回款,付款 |
| | | if(salesLedgerProduct.getType().equals(1)){ |
| | | salesLedgerProduct.setPendingInvoiceTotal(salesLedgerProduct.getTaxInclusiveTotalPrice().subtract(salesLedgerProduct.getInvoiceTotal())); |
| | | salesLedgerProduct.setPendingInvoiceTotal(totalPrice.subtract(invoiceTotal)); |
| | | //未开票数量+金额 |
| | | salesLedgerProduct.setNoInvoiceNum(salesLedgerProduct.getQuantity()); |
| | | salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getTaxInclusiveTotalPrice()); |
| | | salesLedgerProduct.setNoInvoiceAmount(totalPrice); |
| | | }else{ |
| | | salesLedgerProduct.setPendingTicketsTotal(salesLedgerProduct.getTaxInclusiveTotalPrice().subtract(salesLedgerProduct.getTicketsTotal())); |
| | | salesLedgerProduct.setPendingTicketsTotal(totalPrice.subtract(ticketsTotal)); |
| | | // 未来票数量+金额 |
| | | salesLedgerProduct.setFutureTickets(salesLedgerProduct.getQuantity()); |
| | | salesLedgerProduct.setFutureTicketsAmount(salesLedgerProduct.getTaxInclusiveTotalPrice()); |
| | | salesLedgerProduct.setFutureTicketsAmount(totalPrice); |
| | | } |
| | | |
| | | int result; |
| | | Long salesLedgerId = salesLedgerProduct.getSalesLedgerId(); |
| | | if (salesLedgerProduct.getId() == null) { |
| | | salesLedgerProduct.setRegisterDate(LocalDateTime.now()); |
| | | result = salesLedgerProductMapper.insert(salesLedgerProduct); |
| | |
| | | wrapper.eq(SalesLedgerProduct::getSalesLedgerId, salesLedgerId) |
| | | .eq(SalesLedgerProduct::getType, salesLedgerProduct.getType()); |
| | | List<SalesLedgerProduct> productList = salesLedgerProductMapper.selectList(wrapper); |
| | | |
| | | Function<SalesLedgerProduct, BigDecimal> amountGetter = isPrivate ? |
| | | p -> p.getTotalPrice() != null ? p.getTotalPrice() : BigDecimal.ZERO |
| | | : p -> p.getTaxInclusiveTotalPrice() != null ? p.getTaxInclusiveTotalPrice() : BigDecimal.ZERO; |
| | | |
| | | if (salesLedgerProduct.getType() == 1) { |
| | | // 调用通用方法更新主表金额 |
| | | updateMainContractAmount( |
| | | salesLedgerId, |
| | | productList, |
| | | SalesLedgerProduct::getTaxInclusiveTotalPrice, |
| | | amountGetter, |
| | | salesLedgerMapper, |
| | | SalesLedger.class |
| | | ); |
| | |
| | | updateMainContractAmount( |
| | | salesLedgerId, |
| | | productList, |
| | | SalesLedgerProduct::getTaxInclusiveTotalPrice, |
| | | amountGetter, |
| | | purchaseLedgerMapper, |
| | | PurchaseLedger.class |
| | | ); |
| | |
| | | * 删除生产数据 |
| | | */ |
| | | public void deleteProductionData(List<Long> productIds) { |
| | | if (productIds == null || productIds.isEmpty()){ |
| | | return; |
| | | } |
| | | //批量查询productOrder |
| | | List<ProductOrder> productOrders = productOrderMapper.selectList( |
| | | new LambdaQueryWrapper<ProductOrder>() |