实例:
/** * @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(); } }