实例:

    /**
     * @param invoiceType 发票类型
     * @param reimburseStatus 发票状态
     * @param keyword 关键字
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param selectLable 标签
     * @param wtUid 委托人账号
     * @return
     */
    private Stream<InvoiceModel> getInvoiceModelStream(String invoiceType, String reimburseStatus, String keyword, String startTime, String endTime, String selectLable, String wtUid) {
        Stream<InvoiceModel> stream = null;
        if (UtilString.isNotEmpty(wtUid)) {
            stream = InvoiceCache.getCache().stream().filter(model -> wtUid.equals(model.getCreateUser())).filter(model -> model.getResultStatus().startsWith(InvoiceConstant.RESULT_STATUS_VALUE_SUCCESS) || model.getResultStatus().startsWith(InvoiceConstant.RESULT_STATUS_VALUE_SUCCESS_WX));//success or success_wx
        } else {
            stream = InvoiceCache.getCache().stream().filter(model -> getContext().getUID().equals(model.getCreateUser())).filter(model -> model.getResultStatus().startsWith(InvoiceConstant.RESULT_STATUS_VALUE_SUCCESS) || model.getResultStatus().startsWith(InvoiceConstant.RESULT_STATUS_VALUE_SUCCESS_WX));
        }
        if (UtilString.isNotEmpty(invoiceType)) {
            stream = stream.filter(model -> invoiceType.equals(model.getTicketType()));
        }
        if (UtilString.isNotEmpty(reimburseStatus)) {
            stream = stream.filter(model -> reimburseStatus.equals(model.getReimburseStatus()));
        }
        if (UtilString.isNotEmpty(selectLable)) {
            stream = stream.filter(invoiceModel -> {
                if (InvoiceConstant.TICKET_TYPE_INVOICE.equals(invoiceModel.getTicketType())) {
                    InvoiceTicketModel model = (InvoiceTicketModel) invoiceModel.getTicketModel();
                    if (model != null) {
                        return model.getLableName() != null && model.getLableName().contains(selectLable);
                    }
                } else if (InvoiceConstant.TICKET_TYPE_TRAIN.equals(invoiceModel.getTicketType())) {
                    TrainTicketModel model = (TrainTicketModel) invoiceModel.getTicketModel();
                    if (model != null) {
                        return model.getLableName() != null && model.getLableName().contains(selectLable);
                    }
                } else if (InvoiceConstant.TICKET_TYPE_PLANE.equals(invoiceModel.getTicketType())) {
                    AirTicketModel model = (AirTicketModel) invoiceModel.getTicketModel();
                    if (model != null) {
                        return model.getLableName() != null && model.getLableName().contains(selectLable);
                    }
                } else if (InvoiceConstant.TICKET_TYPE_MANUAL.equals(invoiceModel.getTicketType())) {
                    OtherTicketModel model = (OtherTicketModel) invoiceModel.getTicketModel();
                    if (model != null) {
                        return model.getLableName() != null && model.getLableName().contains(selectLable);
                    }
                }
                return false;
            });
        }

        if (UtilString.isNotEmpty(keyword)) {
            stream = stream.filter(invoiceModel -> {
                if (InvoiceConstant.TICKET_TYPE_INVOICE.equals(invoiceModel.getTicketType())) {
                    InvoiceTicketModel model = (InvoiceTicketModel) invoiceModel.getTicketModel();
                    if (model != null) {
                        return model.getSellerTaxName().contains(keyword) || model.getBuyerTaxName().contains(keyword)||model.getAmount().contains(keyword);
                    }
                } else if (InvoiceConstant.TICKET_TYPE_TRAIN.equals(invoiceModel.getTicketType())) {
                    TrainTicketModel model = (TrainTicketModel) invoiceModel.getTicketModel();
                    if (model != null) {
                        return model.getName().contains(keyword) || model.getStartLocation().contains(keyword) || model.getEndLocation().contains(keyword) || model.getTrainNumber().contains(keyword)||model.getAmount().contains(keyword);
                    }
                } else if (InvoiceConstant.TICKET_TYPE_PLANE.equals(invoiceModel.getTicketType())) {
                    AirTicketModel model = (AirTicketModel) invoiceModel.getTicketModel();
                    if (model != null) {
                        return model.getName().contains(keyword) || model.getStartLocation().contains(keyword) || model.getEndLocation().contains(keyword) || model.getFlightNumber().contains(keyword)||model.getAmount().contains(keyword);
                    }
                } else if (InvoiceConstant.TICKET_TYPE_MANUAL.equals(invoiceModel.getTicketType())) {
                    OtherTicketModel model = (OtherTicketModel) invoiceModel.getTicketModel();
                    if (model != null) {
                        return model.getMemo() != null && model.getMemo().contains(keyword)||model.getAmount().contains(keyword);
                    }
                }
                return false;
            });
        }
        if (UtilString.isNotEmpty(startTime)) {
            Timestamp startTimeTS = UtilDate.parseTsFromDateTime(startTime);
            stream = stream.filter(invoiceModel -> {
                if (InvoiceConstant.TICKET_TYPE_INVOICE.equals(invoiceModel.getTicketType())) {
                    InvoiceTicketModel model = (InvoiceTicketModel) invoiceModel.getTicketModel();
                    if (model != null) {
                        return model.getBillingDate().compareTo(startTimeTS) >= 0;
                    }
                } else if (InvoiceConstant.TICKET_TYPE_TRAIN.equals(invoiceModel.getTicketType())) {
                    TrainTicketModel model = (TrainTicketModel) invoiceModel.getTicketModel();
                    if (model != null) {
                        return model.getStartTime().compareTo(startTimeTS) >= 0 || model.getEndTime().compareTo(startTimeTS) >= 0;
                    }
                } else if (InvoiceConstant.TICKET_TYPE_PLANE.equals(invoiceModel.getTicketType())) {
                    AirTicketModel model = (AirTicketModel) invoiceModel.getTicketModel();
                    if (model != null) {
                        return model.getStartTime().compareTo(startTimeTS) >= 0 || model.getEndTime().compareTo(startTimeTS) >= 0;
                    }
                } else if (InvoiceConstant.TICKET_TYPE_MANUAL.equals(invoiceModel.getTicketType())) {
                    OtherTicketModel model = (OtherTicketModel) invoiceModel.getTicketModel();
                    if (model != null && model.getBillingDate() != null) {
                        return model.getBillingDate().compareTo(startTimeTS) >= 0;
                    }
                }
                return false;
            });
        }
        if (UtilString.isNotEmpty(endTime)) {
            Timestamp endTimeTS = UtilDate.parseTsFromDateTime(endTime);
            stream = stream.filter(invoiceModel -> {
                if (InvoiceConstant.TICKET_TYPE_INVOICE.equals(invoiceModel.getTicketType())) {
                    InvoiceTicketModel model = (InvoiceTicketModel) invoiceModel.getTicketModel();
                    if (model != null) {
                        return model.getBillingDate().compareTo(endTimeTS) <= 0;
                    }
                } else if (InvoiceConstant.TICKET_TYPE_TRAIN.equals(invoiceModel.getTicketType())) {
                    TrainTicketModel model = (TrainTicketModel) invoiceModel.getTicketModel();
                    if (model != null) {
                        return model.getStartTime().compareTo(endTimeTS) <= 0 || model.getEndTime().compareTo(endTimeTS) <= 0;
                    }
                } else if (InvoiceConstant.TICKET_TYPE_PLANE.equals(invoiceModel.getTicketType())) {
                    AirTicketModel model = (AirTicketModel) invoiceModel.getTicketModel();
                    if (model != null) {
                        return model.getStartTime().compareTo(endTimeTS) <= 0 || model.getEndTime().compareTo(endTimeTS) <= 0;
                    }
                } else if (InvoiceConstant.TICKET_TYPE_MANUAL.equals(invoiceModel.getTicketType())) {
                    OtherTicketModel model = (OtherTicketModel) invoiceModel.getTicketModel();
                    if (model != null) {
                        return model.getBillingDate().compareTo(endTimeTS) <= 0;
                    }
                }
                return false;
            });
        }
        stream = stream.distinct().sorted(Comparator.comparing(InvoiceModel::getCreateTime).reversed());
        return stream;
    }

 

    /**
     * 查询发票列表
     *
     * @param skip 跳过的条数
     * @param rowCount 此页查询的条数
     * @param invoiceType 发票类型
     * @param keyword 模糊搜索时的关键词
     * @param startTime 发票时间的范围 - 开始
     * @param endTime 发票时间的范围 - 结束
     * @param selectLable 发票名称
     * @param wtUid 委托人账号
     * @return
     */
    public String querySuccessInvoiceList(int skip, int rowCount, String invoiceType, String reimburseStatus, String keyword, String startTime, String endTime, String selectLable, String wtUid) {
        ResponseObject ro = ResponseObject.newOkResponse();
        try {
            Stream<InvoiceModel> stream1 = getInvoiceModelStream(invoiceType, reimburseStatus, keyword, startTime, endTime, selectLable, wtUid);
            Stream<InvoiceModel> stream3 = getInvoiceModelStream(invoiceType, reimburseStatus, keyword, startTime, endTime, selectLable, wtUid);

            List<InvoiceModel> list = stream1.skip(skip).limit(rowCount).collect(Collectors.toList());
            if (skip == 0) {//第一页需要查询总金额和总张数
                final int[] count = { 0 };
                double sum = stream3.mapToDouble(invoiceModel -> {
                    if (InvoiceConstant.TICKET_TYPE_INVOICE.equals(invoiceModel.getTicketType())) {
                        InvoiceTicketModel model = (InvoiceTicketModel) invoiceModel.getTicketModel();
                        if (model != null) {
                            count[0]++;
                            return Double.parseDouble(model.getAmount());
                        }
                    } else if (InvoiceConstant.TICKET_TYPE_TRAIN.equals(invoiceModel.getTicketType())) {
                        TrainTicketModel model = (TrainTicketModel) invoiceModel.getTicketModel();
                        if (model != null) {
                            count[0]++;
                            return Double.parseDouble(model.getAmount());
                        }
                    } else if (InvoiceConstant.TICKET_TYPE_PLANE.equals(invoiceModel.getTicketType())) {
                        AirTicketModel model = (AirTicketModel) invoiceModel.getTicketModel();
                        if (model != null) {
                            count[0]++;
                            return Double.parseDouble(model.getAmount());
                        }
                    } else if (InvoiceConstant.TICKET_TYPE_MANUAL.equals(invoiceModel.getTicketType())) {
                        OtherTicketModel model = (OtherTicketModel) invoiceModel.getTicketModel();
                        if (model != null) {
                            count[0]++;
                            return Double.parseDouble(model.getAmount());
                        }
                    }
                    return 0;
                }).sum();
                ro.put("sum", String.format("%.2f", sum));
                ro.put("count", count[0]);
            }
            JSONArray ja = getInvoiceJA(list);
            ro.put("list", ja);
            return ro.toString();
        } catch (Exception e) {
            e.printStackTrace();
            return ResponseObject.newErrResponse("查询出错").toString();
        }
    }
View Code

相关文章: