| | |
| | | } |
| | | // 可来票登记(剩余可开票金额 > 0):金额已开完的订单不展示 |
| | | if (Boolean.TRUE.equals(reqVO.getRemainPriceEnable())) { |
| | | query.apply("t.total_price > (SELECT IFNULL(SUM(i.price), 0) FROM erp_purchase_invoice i " |
| | | + "WHERE i.purchase_order_id = t.id AND i.deleted = 0)"); |
| | | // 编辑来票时(invoiceId 非空)剔除本张来票自身的分摊,相当于把它已分摊的金额退回订单 |
| | | String sql = "t.total_price > (SELECT IFNULL(SUM(a.price), 0) FROM erp_purchase_invoice_order a " |
| | | + "INNER JOIN erp_purchase_invoice i ON i.id = a.invoice_id AND i.deleted = 0 " |
| | | + "WHERE a.purchase_order_id = t.id AND a.deleted = 0"; |
| | | if (reqVO.getInvoiceId() != null) { |
| | | query.apply(sql + " AND a.invoice_id <> {0})", reqVO.getInvoiceId()); |
| | | } else { |
| | | query.apply(sql + ")"); |
| | | } |
| | | } |
| | | if (reqVO.getProductId() != null) { |
| | | query.leftJoin(ErpPurchaseOrderItemDO.class, ErpPurchaseOrderItemDO::getOrderId, ErpPurchaseOrderDO::getId) |
| | |
| | | return selectOne(ErpPurchaseOrderDO::getNo, no); |
| | | } |
| | | |
| | | /** |
| | | * 按编号查询并加行锁,用于采购申请审批通过时复用已有订单,避免并发重复占用 |
| | | */ |
| | | default ErpPurchaseOrderDO selectByIdForUpdate(Long id) { |
| | | return selectOne(new LambdaQueryWrapperX<ErpPurchaseOrderDO>() |
| | | .eq(ErpPurchaseOrderDO::getId, id) |
| | | .last("FOR UPDATE")); |
| | | } |
| | | |
| | | default ErpPurchaseOrderDO selectByProcessInstanceId(String processInstanceId) { |
| | | return selectOne(ErpPurchaseOrderDO::getProcessInstanceId, processInstanceId); |
| | | } |