Kaynağa Gözat

订单分组统计

liu_lake 4 ay önce
ebeveyn
işleme
fec6eb09fc

+ 11 - 0
web/admin-api/src/main/java/pay/platform/api/system/controller/PayOrderController.java

@@ -119,6 +119,17 @@ public class PayOrderController {
         return Result.OK(PayOrderService.home());
     }
 
+    /**
+     * 订单分组统计
+     *
+     * @return Result.OK(所有数据
+     */
+    @GetMapping("/group/total")
+    @Operation(summary = "订单分组统计")
+    public Result<List<PayOrderVO>> orderTotalGroup(PayOrderQuery payOrderQuery) {
+        return Result.OK(PayOrderService.orderTotalGroup(payOrderQuery));
+    }
+
 
     /**
      * 查询所有订单

+ 5 - 1
web/admin-api/src/main/java/pay/platform/api/system/model/query/PayOrderQuery.java

@@ -102,6 +102,10 @@ public class PayOrderQuery extends BasePageQuery {
      */
     @Schema(description = "修改时间")
     private LocalDateTime updateTime;
-    
+
     private List<String> times;
+    /**
+     * 1,通道,2代理 ,3商户
+     */
+    private Integer groupType;
 }

+ 3 - 2
web/admin-api/src/main/java/pay/platform/api/system/model/vo/PayOrderVO.java

@@ -49,13 +49,14 @@ public class PayOrderVO implements Serializable {
      * 代理用户ID
      */
     @Schema(description = "代理用户ID")
-    private Long agentId;
+    private String agentId;
+    private String agentName;
 
     /**
      * 商户用户ID
      */
     @Schema(description = "商户用户ID")
-    private Long merchantId;
+    private String merchantId;
     /**
      * 平台费率
      */

+ 5 - 0
web/admin-api/src/main/java/pay/platform/api/system/servcie/PayOrderService.java

@@ -8,6 +8,8 @@ import pay.platform.api.system.model.vo.PayOrderVO;
 import pay.platform.core.common.domain.BasePage;
 import pay.platform.domain.PayOrder;
 
+import java.util.List;
+
 /**
  * 通道管理 服务层。
  *
@@ -24,4 +26,7 @@ public interface PayOrderService extends IService<PayOrder> {
      * @return
      */
     HomeVO home();
+
+
+    List<PayOrderVO> orderTotalGroup(PayOrderQuery query);
 }

+ 44 - 4
web/admin-api/src/main/java/pay/platform/api/system/servcie/impl/PayOrderServiceImpl.java

@@ -19,6 +19,7 @@ import pay.platform.domain.PayOrder;
 import pay.platform.domain.table.PayOrderTableDef;
 import pay.platform.mapper.PayOrderMapper;
 
+import java.math.BigDecimal;
 import java.text.DecimalFormat;
 import java.util.Calendar;
 import java.util.List;
@@ -39,10 +40,10 @@ public class PayOrderServiceImpl extends BaseService<PayOrderMapper, PayOrder> i
         QueryWrapper queryWrapper = QueryWrapper.create().from(PayOrderTableDef.PAY_ORDER).where("1 = 1")
                 .and(PayOrderTableDef.PAY_ORDER.ORDER_NO.like(query.getOrderNo(), StringUtil.isNotBlank(query.getOrderNo())))
                 .and(PayOrderTableDef.PAY_ORDER.PLATFORM_ORDER_NO.like(query.getPlatformOrderNo(), StringUtil.isNotBlank(query.getPlatformOrderNo())))
-                .and(PayOrderTableDef.PAY_ORDER.MERCHANT_ID.like(query.getMerchantId(), query.getMerchantId() != null)
-                        .and(PayOrderTableDef.PAY_ORDER.AGENT_ID.like(query.getAgentId(), query.getAgentId() != null)
-
-                                .and(PayOrderTableDef.PAY_ORDER.STATUS.eq(query.getStatus(), query.getStatus() != null)))).orderBy(PayOrderTableDef.PAY_ORDER.CREATE_TIME.desc());
+                .and(PayOrderTableDef.PAY_ORDER.MERCHANT_ID.eq(query.getMerchantId(), StringUtil.isNotBlank(query.getMerchantId()))
+                        .and(PayOrderTableDef.PAY_ORDER.AGENT_ID.like(query.getAgentId(), StringUtil.isNotBlank(query.getAgentId()))
+                                .and(PayOrderTableDef.PAY_ORDER.STATUS.eq(query.getStatus(), query.getStatus() != null))))
+                .orderBy(PayOrderTableDef.PAY_ORDER.CREATE_TIME.desc());
         if (CollectionUtil.isNotEmpty(query.getTimes())) {
             queryWrapper.and(PayOrderTableDef.PAY_ORDER.CREATE_TIME.ge(query.getTimes().get(0) + " 00:00:00", CollectionUtil.isNotEmpty(query.getTimes())))
                     .and(PayOrderTableDef.PAY_ORDER.CREATE_TIME.le(query.getTimes().get(1) + " 23:59:59", CollectionUtil.isNotEmpty(query.getTimes())));
@@ -52,6 +53,45 @@ public class PayOrderServiceImpl extends BaseService<PayOrderMapper, PayOrder> i
         return new BasePage<>(page.getPageNumber(), page.getPageSize(), page.getTotalRow(), vos);
     }
 
+    @Override
+    public List<PayOrderVO> orderTotalGroup(PayOrderQuery query) {
+        QueryWrapper queryWrapper = QueryWrapper.create().from(PayOrderTableDef.PAY_ORDER).where("1 = 1")
+                .and(PayOrderTableDef.PAY_ORDER.MERCHANT_ID.eq(query.getMerchantId(), StringUtil.isNotBlank(query.getMerchantId()))
+                        .and(PayOrderTableDef.PAY_ORDER.AGENT_ID.like(query.getAgentId(), StringUtil.isNotBlank(query.getAgentId()))
+                                .and(PayOrderTableDef.PAY_ORDER.STATUS.eq(1, true))));
+        if (CollectionUtil.isNotEmpty(query.getTimes())) {
+            queryWrapper.and(PayOrderTableDef.PAY_ORDER.CREATE_TIME.ge(query.getTimes().get(0) + " 00:00:00", CollectionUtil.isNotEmpty(query.getTimes())))
+                    .and(PayOrderTableDef.PAY_ORDER.CREATE_TIME.le(query.getTimes().get(1) + " 23:59:59", CollectionUtil.isNotEmpty(query.getTimes())));
+        }
+
+        if (query.getGroupType() != null) {
+            switch (query.getGroupType()) {
+                case 1:
+                    queryWrapper.select(PayOrderTableDef.PAY_ORDER.CHANNEL_ID, PayOrderTableDef.PAY_ORDER.CHANNEL_NAME.as("channel_name"), QueryMethods.sum(PayOrderTableDef.PAY_ORDER.AMOUNT).as("amount")
+                            , QueryMethods.sum(PayOrderTableDef.PAY_ORDER.PLATFORM_RATE_AMOUNT).as("platform_rate_amount"));
+                    queryWrapper.groupBy(PayOrderTableDef.PAY_ORDER.CHANNEL_ID, PayOrderTableDef.PAY_ORDER.CHANNEL_NAME);
+                    break;
+                case 2:
+                    queryWrapper.select(PayOrderTableDef.PAY_ORDER.AGENT_ID, PayOrderTableDef.PAY_ORDER.AGENT_NAME.as("agent_name"), QueryMethods.sum(PayOrderTableDef.PAY_ORDER.AMOUNT).as("amount")
+                            , QueryMethods.sum(PayOrderTableDef.PAY_ORDER.PLATFORM_RATE_AMOUNT).as("platform_rate_amount"));
+                    queryWrapper.groupBy(PayOrderTableDef.PAY_ORDER.AGENT_ID, PayOrderTableDef.PAY_ORDER.AGENT_NAME);
+                    break;
+                case 3:
+                    queryWrapper.select(PayOrderTableDef.PAY_ORDER.MERCHANT_ID, PayOrderTableDef.PAY_ORDER.MERCHANT_NAME.as("merchant_name"), QueryMethods.sum(PayOrderTableDef.PAY_ORDER.AMOUNT).as("amount")
+                            , QueryMethods.sum(PayOrderTableDef.PAY_ORDER.PLATFORM_RATE_AMOUNT).as("platform_rate_amount"));
+                    queryWrapper.groupBy(PayOrderTableDef.PAY_ORDER.MERCHANT_ID, PayOrderTableDef.PAY_ORDER.MERCHANT_NAME);
+            }
+        }
+        var payOrders = mapper.selectListByQuery(queryWrapper);
+        List<PayOrderVO> vos = BeanUtil.copyToList(payOrders, PayOrderVO.class);
+        vos.forEach(item -> {
+            DecimalFormat decimalFormat = new DecimalFormat("0.00");
+            var payAmount = Double.parseDouble(decimalFormat.format(item.getPlatformRateAmount()));
+            item.setPlatformRateAmount(BigDecimal.valueOf(payAmount));
+        });
+        return vos;
+    }
+
     public QueryWrapper getQueryWrapper(Calendar calendar, int period, QueryColumn queryColumn) {
         //当天支付
         QueryWrapper queryWrapper = QueryWrapper.create().from(PayOrderTableDef.PAY_ORDER).where("1 = 1")

+ 3 - 3
web/admin-api/src/main/java/pay/platform/api/system/servcie/impl/PayOrderTotalServiceImpl.java

@@ -4,7 +4,6 @@ package pay.platform.api.system.servcie.impl;
 import com.mybatisflex.core.query.QueryColumn;
 import com.mybatisflex.core.query.QueryMethods;
 import com.mybatisflex.core.query.QueryWrapper;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import pay.platform.api.system.model.query.PayOrderQuery;
@@ -41,9 +40,10 @@ public class PayOrderTotalServiceImpl extends BaseService<PayOrderMapper, PayOrd
                 .select(PayOrderTableDef.PAY_ORDER.STATUS, PayAgentTableDef.PAY_AGENT.USER_NAME.as("merchantName"), PayOrderTableDef.PAY_ORDER.AGENT_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(PayAgentTableDef.PAY_AGENT).on(queryWrapper1 -> queryWrapper1.and(PayAgentTableDef.PAY_AGENT.ID.eq(PayOrderTableDef.PAY_ORDER.AGENT_ID)))
+                ).
+                leftJoin(PayAgentTableDef.PAY_AGENT).on(queryWrapper1 -> queryWrapper1.and(PayAgentTableDef.PAY_AGENT.ID.eq(PayOrderTableDef.PAY_ORDER.AGENT_ID)))
                 .and(PayOrderTableDef.PAY_ORDER.YEAR.eq(calendar.get(Calendar.YEAR)))
-                .and(PayOrderTableDef.PAY_ORDER.AGENT_ID.eq(payOrderRequest.getAgentId(), StringUtils.isNotBlank(payOrderRequest.getAgentId())))
+                .and(PayOrderTableDef.PAY_ORDER.AGENT_ID.eq(payOrderRequest.getAgentId(), payOrderRequest.getAgentId() != null))
                 .and(queryColumn.eq(calendar.get(period)))
                 .groupBy(PayOrderTableDef.PAY_ORDER.STATUS, PayOrderTableDef.PAY_ORDER.AGENT_ID, PayAgentTableDef.PAY_AGENT.USER_NAME);
         return queryWrapper;

+ 11 - 0
web/agent-api/src/main/java/pay/platform/api/system/controller/PayOrderController.java

@@ -43,6 +43,17 @@ public class PayOrderController {
         return Result.OK(payOrder);
     }
 
+    /**
+     * 订单分组统计
+     *
+     * @return Result.OK(所有数据
+     */
+    @GetMapping("/group/total")
+    @Operation(summary = "订单分组统计")
+    public Result<List<PayOrderVO>> orderTotalGroup(PayOrderQuery payOrderQuery) {
+        return Result.OK(PayOrderService.orderTotalGroup(payOrderQuery));
+    }
+
 
     /**
      * 分页查询订单

+ 1 - 0
web/agent-api/src/main/java/pay/platform/api/system/model/query/PayOrderQuery.java

@@ -106,4 +106,5 @@ public class PayOrderQuery extends BasePageQuery {
     private LocalDateTime updateTime;
 
     private List<String> times;
+    private Integer groupType;
 }

+ 1 - 0
web/agent-api/src/main/java/pay/platform/api/system/model/vo/PayOrderVO.java

@@ -55,6 +55,7 @@ public class PayOrderVO {
      */
     @Schema(description = "商户用户ID")
     private Long merchantId;
+    private String merchantName;
 
     /**
      * 金额

+ 1 - 1
web/agent-api/src/main/java/pay/platform/api/system/servcie/PayOrderService.java

@@ -19,7 +19,7 @@ import java.util.List;
 public interface PayOrderService extends IService<PayOrder> {
     BasePage<PayOrderVO> queryPage(PayOrderQuery query);
 
-
+    List<PayOrderVO> orderTotalGroup(PayOrderQuery query);
     /**
      * 订单统计
      *

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

@@ -23,6 +23,7 @@ import pay.platform.domain.table.PayMerchantTableDef;
 import pay.platform.domain.table.PayOrderTableDef;
 import pay.platform.mapper.PayOrderMapper;
 
+import java.math.BigDecimal;
 import java.text.DecimalFormat;
 import java.util.Calendar;
 import java.util.List;
@@ -55,6 +56,45 @@ public class PayOrderServiceImpl extends BaseService<PayOrderMapper, PayOrder> i
     }
 
 
+    @Override
+    public List<PayOrderVO> orderTotalGroup(PayOrderQuery query) {
+        QueryWrapper queryWrapper = QueryWrapper.create().from(PayOrderTableDef.PAY_ORDER).where("1 = 1")
+                .and(PayOrderTableDef.PAY_ORDER.MERCHANT_ID.eq(query.getMerchantId(), query.getMerchantId() != null)
+                        .and(PayOrderTableDef.PAY_ORDER.AGENT_ID.like(query.getAgentId(), query.getAgentId() != null)
+                                .and(PayOrderTableDef.PAY_ORDER.STATUS.eq(1, true))));
+        if (CollectionUtil.isNotEmpty(query.getTimes())) {
+            queryWrapper.and(PayOrderTableDef.PAY_ORDER.CREATE_TIME.ge(query.getTimes().get(0) + " 00:00:00", CollectionUtil.isNotEmpty(query.getTimes())))
+                    .and(PayOrderTableDef.PAY_ORDER.CREATE_TIME.le(query.getTimes().get(1) + " 23:59:59", CollectionUtil.isNotEmpty(query.getTimes())));
+        }
+
+        if (query.getGroupType() != null) {
+            switch (query.getGroupType()) {
+                case 1:
+                    queryWrapper.select(PayOrderTableDef.PAY_ORDER.CHANNEL_ID, PayOrderTableDef.PAY_ORDER.CHANNEL_NAME.as("channel_name"), QueryMethods.sum(PayOrderTableDef.PAY_ORDER.AMOUNT).as("amount")
+                            , QueryMethods.sum(PayOrderTableDef.PAY_ORDER.AGENT_RATE_AMOUNT).as("agent_rate_amount"));
+                    queryWrapper.groupBy(PayOrderTableDef.PAY_ORDER.CHANNEL_ID, PayOrderTableDef.PAY_ORDER.CHANNEL_NAME);
+                    break;
+                case 2:
+                    queryWrapper.select(PayOrderTableDef.PAY_ORDER.AGENT_ID, PayOrderTableDef.PAY_ORDER.AGENT_NAME.as("agent_name"), QueryMethods.sum(PayOrderTableDef.PAY_ORDER.AMOUNT).as("amount")
+                            , QueryMethods.sum(PayOrderTableDef.PAY_ORDER.AGENT_RATE_AMOUNT).as("agent_rate_amount"));
+                    queryWrapper.groupBy(PayOrderTableDef.PAY_ORDER.AGENT_ID, PayOrderTableDef.PAY_ORDER.AGENT_NAME);
+                    break;
+                case 3:
+                    queryWrapper.select(PayOrderTableDef.PAY_ORDER.MERCHANT_ID, PayOrderTableDef.PAY_ORDER.MERCHANT_NAME.as("merchant_name"), QueryMethods.sum(PayOrderTableDef.PAY_ORDER.AMOUNT).as("amount")
+                            , QueryMethods.sum(PayOrderTableDef.PAY_ORDER.AGENT_RATE_AMOUNT).as("agent_rate_amount"));
+                    queryWrapper.groupBy(PayOrderTableDef.PAY_ORDER.MERCHANT_ID, PayOrderTableDef.PAY_ORDER.MERCHANT_NAME);
+            }
+        }
+        var payOrders = mapper.selectListByQuery(queryWrapper);
+        List<PayOrderVO> vos = BeanUtil.copyToList(payOrders, PayOrderVO.class);
+        vos.forEach(item -> {
+            DecimalFormat decimalFormat = new DecimalFormat("0.00");
+            var payAmount = Double.parseDouble(decimalFormat.format(item.getAgentRateAmount()));
+            item.setAgentRateAmount(BigDecimal.valueOf(payAmount));
+        });
+        return vos;
+    }
+
     public QueryWrapper getQueryWrapper(PayOrderQuery payOrderRequest, Calendar calendar, int period, QueryColumn queryColumn) {
         //当天支付
         QueryWrapper queryWrapper = QueryWrapper.create().from(PayOrderTableDef.PAY_ORDER).where("1 = 1")

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

@@ -242,6 +242,8 @@ public class PayServiceImpl implements PayService {
                 .rate(payChannel.getRate())
                 .orderNo(payRequest.getOrderNo())
                 .merchantId(payMerchantAppKey.getMerchantId())
+                .merchantName(payMerchant.getUserName())
+                .agentName(payAgent.getUserName())
                 .build();
 
             //商户费率