|
@@ -3,20 +3,29 @@ package pay.platform.api.system.servcie.impl;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
import com.mybatisflex.core.paginate.Page;
|
|
import com.mybatisflex.core.paginate.Page;
|
|
|
|
+import com.mybatisflex.core.query.QueryColumn;
|
|
|
|
+import com.mybatisflex.core.query.QueryMethods;
|
|
import com.mybatisflex.core.query.QueryWrapper;
|
|
import com.mybatisflex.core.query.QueryWrapper;
|
|
import com.mybatisflex.core.util.StringUtil;
|
|
import com.mybatisflex.core.util.StringUtil;
|
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
import pay.platform.api.system.model.query.PayOrderQuery;
|
|
import pay.platform.api.system.model.query.PayOrderQuery;
|
|
-import pay.platform.api.system.model.vo.PayOrderVO;
|
|
|
|
|
|
+import pay.platform.api.system.model.vo.*;
|
|
|
|
+import pay.platform.api.system.model.vo.HomeVO.TotalVO;
|
|
import pay.platform.api.system.servcie.PayOrderService;
|
|
import pay.platform.api.system.servcie.PayOrderService;
|
|
import pay.platform.core.common.domain.BasePage;
|
|
import pay.platform.core.common.domain.BasePage;
|
|
import pay.platform.core.common.domain.BaseService;
|
|
import pay.platform.core.common.domain.BaseService;
|
|
import pay.platform.core.security.util.SecurityUtil;
|
|
import pay.platform.core.security.util.SecurityUtil;
|
|
import pay.platform.domain.PayOrder;
|
|
import pay.platform.domain.PayOrder;
|
|
|
|
+import pay.platform.domain.table.PayMerchantTableDef;
|
|
import pay.platform.domain.table.PayOrderTableDef;
|
|
import pay.platform.domain.table.PayOrderTableDef;
|
|
import pay.platform.mapper.PayOrderMapper;
|
|
import pay.platform.mapper.PayOrderMapper;
|
|
|
|
|
|
|
|
+import java.text.DecimalFormat;
|
|
|
|
+import java.util.Calendar;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
/**
|
|
* 通道管理 服务层实现。
|
|
* 通道管理 服务层实现。
|
|
@@ -39,4 +48,104 @@ public class PayOrderServiceImpl extends BaseService<PayOrderMapper, PayOrder> i
|
|
List<PayOrderVO> vos = BeanUtil.copyToList(page.getRecords(), PayOrderVO.class);
|
|
List<PayOrderVO> vos = BeanUtil.copyToList(page.getRecords(), PayOrderVO.class);
|
|
return new BasePage<>(page.getPageNumber(), page.getPageSize(), page.getTotalRow(), vos);
|
|
return new BasePage<>(page.getPageNumber(), page.getPageSize(), page.getTotalRow(), vos);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ public QueryWrapper getQueryWrapper(PayOrderQuery payOrderRequest, Calendar calendar, int period, QueryColumn queryColumn) {
|
|
|
|
+ //当天支付
|
|
|
|
+ QueryWrapper queryWrapper = QueryWrapper.create().from(PayOrderTableDef.PAY_ORDER).where("1 = 1")
|
|
|
|
+ .select(PayOrderTableDef.PAY_ORDER.STATUS, PayMerchantTableDef.PAY_MERCHANT.USER_NAME.as("merchantName"), PayOrderTableDef.PAY_ORDER.MERCHANT_ID, QueryMethods.sum(PayOrderTableDef.PAY_ORDER.AMOUNT).as("amount"),
|
|
|
|
+ QueryMethods.sum(PayOrderTableDef.PAY_ORDER.PLATFORM_RATE_AMOUNT).as("platformRateAmount"),
|
|
|
|
+ QueryMethods.count(PayOrderTableDef.PAY_ORDER.STATUS).as("day")
|
|
|
|
+ ).leftJoin(PayMerchantTableDef.PAY_MERCHANT).on(queryWrapper1 -> queryWrapper1.and(PayMerchantTableDef.PAY_MERCHANT.ID.eq(PayOrderTableDef.PAY_ORDER.MERCHANT_ID)))
|
|
|
|
+ .and(PayOrderTableDef.PAY_ORDER.YEAR.eq(calendar.get(Calendar.YEAR)))
|
|
|
|
+ .and(PayOrderTableDef.PAY_ORDER.MERCHANT_ID.eq(payOrderRequest.getMerchantId(), StringUtils.isNotBlank(payOrderRequest.getMerchantId())))
|
|
|
|
+ .and(queryColumn.eq(calendar.get(period)))
|
|
|
|
+ .groupBy(PayOrderTableDef.PAY_ORDER.STATUS, PayOrderTableDef.PAY_ORDER.MERCHANT_ID, PayMerchantTableDef.PAY_MERCHANT.USER_NAME);
|
|
|
|
+ return queryWrapper;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Override
|
|
|
|
+ public List<HomeVO> orderTotal(PayOrderQuery payOrderRequest) {
|
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
|
+ //当天支付
|
|
|
|
+ var today = getResult(getQueryWrapper(payOrderRequest, calendar, Calendar.DAY_OF_YEAR, PayOrderTableDef.PAY_ORDER.DAY));
|
|
|
|
+ var todayMap = today.stream().collect(Collectors.groupingBy(Result::merchantId));
|
|
|
|
+
|
|
|
|
+ //前一天支付
|
|
|
|
+ calendar = Calendar.getInstance();
|
|
|
|
+ calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - 1);
|
|
|
|
+ var yesterday = getResult(getQueryWrapper(payOrderRequest, calendar, Calendar.DAY_OF_YEAR, PayOrderTableDef.PAY_ORDER.DAY));
|
|
|
|
+ var yesterdayMap = yesterday.stream().collect(Collectors.groupingBy(Result::merchantId));
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //周支付
|
|
|
|
+ calendar = Calendar.getInstance();
|
|
|
|
+ var lastWeek = getResult(getQueryWrapper(payOrderRequest, calendar, Calendar.WEEK_OF_YEAR, PayOrderTableDef.PAY_ORDER.WEEK));
|
|
|
|
+ var lastWeekMap = lastWeek.stream().collect(Collectors.groupingBy(Result::merchantId));
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //月支付
|
|
|
|
+ calendar = Calendar.getInstance();
|
|
|
|
+ calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + 1);
|
|
|
|
+ var lastMonth = getResult(getQueryWrapper(payOrderRequest, calendar, Calendar.MONTH, PayOrderTableDef.PAY_ORDER.MONTH));
|
|
|
|
+ var lastMonthMap = lastMonth.stream().collect(Collectors.groupingBy(Result::merchantId));
|
|
|
|
+
|
|
|
|
+ return lastMonthMap.entrySet().stream().map(item -> {
|
|
|
|
+ HomeVO homeVO = new HomeVO();
|
|
|
|
+ var merchantToday = todayMap.get(item.getKey());
|
|
|
|
+ if (!CollectionUtils.isEmpty(merchantToday)) {
|
|
|
|
+ var result = merchantToday.get(0);
|
|
|
|
+ homeVO.setToday(new TotalVO(new QuantityVO(result.payCount(), result.paySuccessCount()), new AmountVO(result.payAmount(), result.paySuccessAmount()), new EarningsVO(result.dayFee(), result.dayFee())));
|
|
|
|
+ }
|
|
|
|
+ var merchantYesterday = yesterdayMap.get(item.getKey());
|
|
|
|
+ if (!CollectionUtils.isEmpty(merchantYesterday)) {
|
|
|
|
+ var result = merchantYesterday.get(0);
|
|
|
|
+ homeVO.setYesterday(new TotalVO(new QuantityVO(result.payCount(), result.paySuccessCount()), new AmountVO(result.payAmount(), result.paySuccessAmount()), new EarningsVO(result.dayFee(), result.dayFee())));
|
|
|
|
+ }
|
|
|
|
+ var merchantLastWeek = lastWeekMap.get(item.getKey());
|
|
|
|
+ if (!CollectionUtils.isEmpty(merchantLastWeek)) {
|
|
|
|
+ var result = merchantLastWeek.get(0);
|
|
|
|
+ homeVO.setLastWeek(new TotalVO(new QuantityVO(result.payCount(), result.paySuccessCount()), new AmountVO(result.payAmount(), result.paySuccessAmount()), new EarningsVO(result.dayFee(), result.dayFee())));
|
|
|
|
+ }
|
|
|
|
+ var merchantLastMonth = lastMonthMap.get(item.getKey());
|
|
|
|
+ if (!CollectionUtils.isEmpty(merchantLastMonth)) {
|
|
|
|
+ var result = merchantLastMonth.get(0);
|
|
|
|
+ homeVO.setMerchantName(result.merchantName());
|
|
|
|
+ homeVO.setLastMonth(new TotalVO(new QuantityVO(result.payCount(), result.paySuccessCount()), new AmountVO(result.payAmount(), result.paySuccessAmount()), new EarningsVO(result.dayFee(), result.dayFee())));
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ return homeVO;
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private List<Result> getResult(QueryWrapper queryWrapper) {
|
|
|
|
+ var payOrderList = mapper.selectListByQuery(queryWrapper);
|
|
|
|
+
|
|
|
|
+ var merchantOrders = payOrderList.stream().collect(Collectors.groupingBy(PayOrder::getMerchantId));
|
|
|
|
+ return merchantOrders.entrySet().stream().map(merchantOrder -> {
|
|
|
|
+ var payOrders = merchantOrder.getValue();
|
|
|
|
+ //统计当天支付订单总数
|
|
|
|
+ var payCount = payOrders.stream().collect(Collectors.summarizingDouble(PayOrder::getDay)).getSum();
|
|
|
|
+ //统计当天成功支付订单总数
|
|
|
|
+ var paySuccessCount = payOrders.stream().filter(item -> item.getStatus() == 1).collect(Collectors.summarizingDouble(PayOrder::getDay)).getSum();
|
|
|
|
+ //统计支付金额
|
|
|
|
+ var payAmount = payOrders.stream().collect(Collectors.summarizingDouble(payOrder -> payOrder.getAmount().doubleValue())).getSum();
|
|
|
|
+ var paySuccessAmount = payOrders.stream().filter(item -> item.getStatus() == 1).collect(Collectors.summarizingDouble(payOrder -> payOrder.getAmount().doubleValue())).getSum();
|
|
|
|
+ DecimalFormat decimalFormat = new DecimalFormat("0.00");
|
|
|
|
+ payAmount = Double.parseDouble(decimalFormat.format(payAmount));
|
|
|
|
+ paySuccessAmount = Double.parseDouble(decimalFormat.format(paySuccessAmount));
|
|
|
|
+ //统计当天成功支付订单平台费率金额
|
|
|
|
+ var dayFee = payOrders.stream().filter(item -> item.getStatus() == 1).collect(Collectors.summarizingDouble(payOrder -> payOrder.getPlatformRateAmount().doubleValue())).getSum();
|
|
|
|
+ dayFee = Double.parseDouble(decimalFormat.format(dayFee));
|
|
|
|
+ return new Result(merchantOrder.getKey(), payOrders.getFirst().getMerchantName(), payCount, paySuccessCount, payAmount, paySuccessAmount, dayFee);
|
|
|
|
+
|
|
|
|
+ }).collect(Collectors.toList());
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private record Result(String merchantId, String merchantName, double payCount, double paySuccessCount,
|
|
|
|
+ double payAmount,
|
|
|
|
+ double paySuccessAmount,
|
|
|
|
+ double dayFee) {
|
|
|
|
+ }
|
|
}
|
|
}
|