Explorar el Código

通道当天支付金额统计

liu_lake hace 4 meses
padre
commit
b7d7964896

+ 5 - 0
db/db-merchant/src/main/java/pay/platform/domain/PayChannel.java

@@ -69,6 +69,11 @@ public class PayChannel {
      */
     @Schema(description = "day_pay_amount")
     private BigDecimal dayPayAmount;
+    /**
+     * 当天已支付金额
+     */
+    @Schema(description = "day_pay_limit")
+    private Integer dayPayLimit;
     /**
      * 总已支付金额
      */

+ 32 - 0
web/agent-api/src/main/java/pay/platform/api/system/servcie/impl/PayChannelServiceImpl.java

@@ -3,21 +3,31 @@ package pay.platform.api.system.servcie.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import com.mybatisflex.core.paginate.Page;
+import com.mybatisflex.core.query.QueryMethods;
 import com.mybatisflex.core.query.QueryWrapper;
+import com.mybatisflex.core.util.CollectionUtil;
 import com.mybatisflex.core.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import pay.platform.api.system.model.query.PayChannelQuery;
 import pay.platform.api.system.model.vo.PayChannelVO;
 import pay.platform.api.system.servcie.PayChannelService;
+import pay.platform.api.system.servcie.PayOrderService;
 import pay.platform.core.common.domain.BasePage;
 import pay.platform.core.common.domain.BaseService;
 import pay.platform.core.security.util.SecurityUtil;
 import pay.platform.domain.PayChannel;
+import pay.platform.domain.PayOrder;
 import pay.platform.domain.table.PayChannelTableDef;
+import pay.platform.domain.table.PayOrderTableDef;
 import pay.platform.mapper.PayChannelMapper;
 
+import java.math.BigDecimal;
+import java.util.Calendar;
 import java.util.List;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 /**
  * 通道管理 服务层实现。
@@ -28,6 +38,8 @@ import java.util.List;
 @Service
 public class PayChannelServiceImpl extends BaseService<PayChannelMapper, PayChannel> implements PayChannelService {
 
+    @Autowired
+    private PayOrderService payOrderService;
 
     @Override
     @Transactional
@@ -39,12 +51,32 @@ public class PayChannelServiceImpl extends BaseService<PayChannelMapper, PayChan
 
     @Override
     public BasePage<PayChannelVO> queryPage(PayChannelQuery query) {
+        Calendar calendar = Calendar.getInstance();
+        var totalQueryWrapper = QueryWrapper.create().from(PayOrderTableDef.PAY_ORDER)
+                .select(QueryMethods.sum(PayOrderTableDef.PAY_ORDER.AMOUNT).as("amount"), PayOrderTableDef.PAY_ORDER.CHANNEL_ID)
+                .where(PayOrderTableDef.PAY_ORDER.YEAR.eq(Calendar.YEAR)
+                        .and(PayOrderTableDef.PAY_ORDER.DAY.eq(calendar.get(Calendar.DAY_OF_YEAR)))).groupBy(PayOrderTableDef.PAY_ORDER.CHANNEL_ID);
+        var totalDayOrder = payOrderService.list(totalQueryWrapper);
+
+
         QueryWrapper queryWrapper = QueryWrapper.create().from(PayChannelTableDef.PAY_CHANNEL).where("1 = 1")
                 .and(PayChannelTableDef.PAY_CHANNEL.NAME.like(query.getName(), StringUtil.isNotBlank(query.getName())))
                 .and(PayChannelTableDef.PAY_CHANNEL.STATUS.eq(query.getStatus(), query.getStatus() != null))
                 .and(PayChannelTableDef.PAY_CHANNEL.AGENT_ID.eq(SecurityUtil.getCurrentUser().getUserid(), StringUtil.isNotBlank(SecurityUtil.getCurrentUser().getUserid())));
         Page<PayChannel> page = mapper.paginate(new Page<>(query.getCurrent(), query.getSize()), queryWrapper);
         List<PayChannelVO> vos = BeanUtil.copyToList(page.getRecords(), PayChannelVO.class);
+        vos.forEach(vo -> vo.setDayPayAmount(BigDecimal.ZERO));
+
+        if (CollectionUtil.isNotEmpty(totalDayOrder)) {
+            var channelTotalOrder = totalDayOrder.stream().collect(Collectors.toMap(PayOrder::getChannelId, Function.identity()));
+            vos.forEach(vo -> {
+                PayOrder totalOrder = channelTotalOrder.get(vo.getId());
+                if (totalOrder != null) {
+                    vo.setDayPayAmount(totalOrder.getAmount());
+                }
+            });
+
+        }
         return new BasePage<>(page.getPageNumber(), page.getPageSize(), page.getTotalRow(), vos);
     }
 }

+ 1 - 1
web/open-api/src/main/java/pay/platform/api/servcie/impl/PayServiceImpl.java

@@ -103,7 +103,7 @@ public class PayServiceImpl implements PayService {
         }
         var payDailyTotal = payDailyTotalService.totalDailyPayAmount(payChannel.getId());
         if (payDailyTotal != null) {
-            if (payDailyTotal.getAmount().compareTo(payChannel.getDayMaxPayAmount()) > 0) {
+            if (payDailyTotal.getAmount().add(payRequest.getAmount()).compareTo(payChannel.getDayMaxPayAmount()) > 0) {
                 throw new BusinessException("当天支付金额已上限");
             }
         }