Explorar o código

订单管理:消费、充值订单查询

wujiefeng hai 1 ano
pai
achega
bdf9c0106a
Modificáronse 17 ficheiros con 565 adicións e 52 borrados
  1. 2 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/openApi/AppModel.java
  2. 14 3
      FullCardClient/src/main/java/com/zhongshu/card/client/model/pay/RechargeOrderModel.java
  3. 37 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/pay/RechargeSearchParam.java
  4. 122 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/payment/ExpenseFlowPageModel.java
  5. 74 0
      FullCardClient/src/main/java/com/zhongshu/card/client/model/payment/ExpenseFlowSearchParam.java
  6. 30 14
      FullCardClient/src/main/java/com/zhongshu/card/client/model/payment/OrderUnionWithModel.java
  7. 2 0
      FullCardClient/src/main/java/com/zhongshu/card/client/service/payment/ExpenseFlowService.java
  8. 10 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/pay/balance/RechargeController.java
  9. 8 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/payment/ExpenseFlowController.java
  10. 4 1
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/pay/extend/BalanceRechargeOrderDaoExtend.java
  11. 53 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/pay/impl/BalanceRechargeOrderDaoImpl.java
  12. 5 4
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/payment/extend/ExpenseFlowDaoExtend.java
  13. 129 13
      FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/payment/impl/ExpenseFlowDaoImpl.java
  14. 12 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/pay/BalanceRechargeOrder.java
  15. 1 0
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/openAPI/OpenAppManagerService.java
  16. 32 4
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/pay/BalancePayService.java
  17. 30 13
      FullCardServer/src/main/java/com/zhongshu/card/server/core/service/payment/ExpenseFlowServiceImpl.java

+ 2 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/openApi/AppModel.java

@@ -37,6 +37,8 @@ public class AppModel {
 
     private String projectName;
 
+    private String businessName;
+
     private String description;
 
 

+ 14 - 3
FullCardClient/src/main/java/com/zhongshu/card/client/model/pay/RechargeOrderModel.java

@@ -1,5 +1,7 @@
 package com.zhongshu.card.client.model.pay;
 
+import com.github.microservice.types.payment.PaymentType;
+import com.zhongshu.card.client.model.org.UserCountModel;
 import com.zhongshu.card.client.type.payAccount.RechargeOrderStatus;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
@@ -15,21 +17,30 @@ public class RechargeOrderModel {
 
     private Long updateTime;
 
+    private String projectOid;
+
     @Schema(description = "支付账户")
     private String payAccount;
 
-    @Schema(description = "预支付单号(用于前端调起支付的参数)")
-    private Object prepay;
+    @Schema(description = "支付方式")
+    private PaymentType paymentType;
 
     @Schema(description = "订单状态")
     private RechargeOrderStatus status;
 
+    @Schema(description = "状态说明")
+    private String statusDesc;
+
     @Schema(description = "金额")
-    private BigDecimal total = BigDecimal.ZERO;
+    private BigDecimal total;
 
     @Schema(description = "订单号")
     private String orderNo;
 
     @Schema(description = "描述")
     private String description;
+
+    private UserCountModel userCountModel;
+
+    private String userName;
 }

+ 37 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/pay/RechargeSearchParam.java

@@ -0,0 +1,37 @@
+package com.zhongshu.card.client.model.pay;
+
+import com.github.microservice.types.payment.PaymentType;
+import com.zhongshu.card.client.type.payAccount.RechargeOrderStatus;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class RechargeSearchParam {
+
+    @Schema(description = "项目oid")
+    private String projectOid;
+
+    @Schema(description = "用户名")
+    private String userName;
+
+    @Schema(description = "支付方式")
+    private PaymentType paymentType;
+
+    @Schema(description = "订单状态")
+    private RechargeOrderStatus status;
+
+    @Schema(description = "金额")
+    private BigDecimal total;
+
+    @Schema(description = "订单号")
+    private String orderNo;
+
+    @Schema(description = "开始时间")
+    private Long startTime;
+
+    @Schema(description = "结束时间")
+    private Long endTime;
+
+}

+ 122 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/payment/ExpenseFlowPageModel.java

@@ -0,0 +1,122 @@
+package com.zhongshu.card.client.model.payment;
+
+import com.github.microservice.types.OrderState;
+import com.github.microservice.types.deviceUse.DeviceType;
+import com.github.microservice.types.payment.PaymentDeviceType;
+import com.github.microservice.types.payment.PaymentType;
+import com.zhongshu.card.client.model.base.SuperModel;
+import com.zhongshu.card.client.model.school.AreaSimpleModel;
+import com.zhongshu.card.client.model.school.CardInfoModel;
+import com.zhongshu.card.client.model.school.CardInfoSimpleModel;
+import com.zhongshu.card.client.type.RefundState;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+/**
+ * @author TRX
+ * @date 2024/6/17
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ExpenseFlowPageModel extends SuperModel {
+    //-----------------------------订单信息 start---------------------
+
+    @Schema(description = "消费订单号")
+    private String orderNo;
+
+    @Schema(description = "支付订单号")
+    private String paymentNo;
+
+    @Schema(description = "订单的总体状态")
+    private OrderState orderState;
+
+    @Schema(description = "支付方式")
+    private PaymentType paymentType;
+
+    @Schema(description = "消费类型,如:餐饮消费")
+    private String payType;
+
+    @Schema(description = "支付时间")
+    private Long payEndTime;
+
+    @Schema(description = "消费金额(单位:分)")
+    private BigDecimal payAmount;
+
+    @Schema(description = "支付订单状态")
+    private String paymentStatus;
+
+    @Schema(description = "用户userId")
+    private String userId;
+
+    @Schema(description = "用户名称")
+    private String userName;
+
+    @Schema(description = "消费机设备ID")
+    private String deviceId;
+
+    @Schema(description = "设备类型")
+    private DeviceType deviceType;
+
+    @Schema(description = "消费地点")
+    private AreaSimpleModel area;
+
+    //-----------------------退款 start--------------------------
+    @Schema(description = "是否退款")
+    private Boolean isRefund;
+
+    @Schema(description = "退款状态")
+    private RefundState refundState;
+
+    private String refundStateStr;
+
+    public String getRefundStateStr() {
+        if (refundState != null) {
+            return refundState.getRemark();
+        }
+        return "";
+    }
+
+    @Schema(description = "退款金额")
+    private BigDecimal refundAMount;
+
+    @Schema(description = "操作退款用户userId")
+    private String refundUserId;
+
+    private String refundUserName;
+
+    @Schema(description = "退款申请人")
+    private String applicant;
+
+    @Schema(description = "申请退款时间")
+    private Long refundTime;
+
+    @Schema(description = "申请退款备注")
+    private String refundRemark;
+
+    @Schema(description = "退款处理备注")
+    private String refuseRemark;
+
+
+    private String orderTypeStr;
+
+    public String getOrderTypeStr() {
+        if (orderState != null) {
+            return orderState.getRemark();
+        }
+        return "";
+    }
+
+    private String paymentTypeStr;
+
+    public String getPaymentTypeStr() {
+        if (paymentType != null) {
+            return paymentType.getRemark();
+        }
+        return "";
+    }
+}

+ 74 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/model/payment/ExpenseFlowSearchParam.java

@@ -0,0 +1,74 @@
+package com.zhongshu.card.client.model.payment;
+
+import com.github.microservice.types.OrderState;
+import com.github.microservice.types.deviceUse.DeviceType;
+import com.github.microservice.types.payment.PaymentType;
+import com.zhongshu.card.client.model.devices.DeviceInfoModel;
+import com.zhongshu.card.client.type.RefundState;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class ExpenseFlowSearchParam {
+
+    private String projectOid;
+
+    @Schema(description = "开始时间")
+    private Long startTime;
+
+    @Schema(description = "结束时间")
+    private Long endTime;
+
+    @Schema(description = "订单编号")
+    private String orderNo;
+
+    @Schema(description = "支付编号")
+    private String paymentNo;
+
+    @Schema(description = "支付方式")
+    private PaymentType paymentType;
+
+    @Schema(description = "支付开始时间")
+    private Long payStartTime;
+
+    @Schema(description = "支付结束时间")
+    private Long payEndTime;
+
+    @Schema(description = "支付金额")
+    private BigDecimal payAmount;
+
+    @Schema(description = "订单的总体状态,待付款、支付中、已支付、已退款")
+    private OrderState orderState;
+
+    @Schema(description = "姓名")
+    private String userName;
+
+    @Schema(description = "设备编号")
+    private String deviceId;
+
+    @Schema(description = "设备类型")
+    private DeviceType deviceType;
+
+    @Schema(description = "区域id")
+    private String areaId;
+
+    @Schema(description = "是否退款")
+    private Boolean isRefund;
+
+    @Schema(description = "退款订单号")
+    private String refundNo;
+
+    @Schema(description = "退款金额")
+    private BigDecimal refundAmount;
+
+    @Schema(description = "退款状态")
+    private RefundState refundState;
+
+    @Schema(description = "申请开始时间")
+    private Long refundStartTime;
+
+    @Schema(description = "退款结束时间")
+    private Long refundEndTime;
+}

+ 30 - 14
FullCardClient/src/main/java/com/zhongshu/card/client/model/payment/OrderUnionWithModel.java

@@ -3,6 +3,7 @@ package com.zhongshu.card.client.model.payment;
 
 import com.github.microservice.types.OrderState;
 import com.github.microservice.types.payment.PaymentType;
+import com.zhongshu.card.client.model.devices.DeviceInfoModel;
 import com.zhongshu.card.client.model.org.UserCountModel;
 import com.zhongshu.card.client.model.school.AreaSimpleModel;
 import com.zhongshu.card.client.type.RefundState;
@@ -16,37 +17,40 @@ public class OrderUnionWithModel {
 
     private String id;
 
+    @Schema(description = "交易时间")
     private Long createTime;
 
     private Long updateTime;
 
-    @Schema(description = "所属机构ID")
-    private String oid;
+    @Schema(description = "消费订单号")
+    private String orderNo;
 
-    @Schema(description = "所属项目oid")
-    private String projectOid;
-
-    @Schema(description = "数据主题的oid")
-    private String aboutOid;
-
-    @Schema(description = "订单的总体状态")
-    private OrderState orderState;
+    @Schema(description = "订单类型")
+    private String type;
 
     @Schema(description = "支付方式")
     private PaymentType paymentType;
 
-    @Schema(description = "消费金额(单位:分)")
+    @Schema(description = "金额")
     private BigDecimal payAmount;
 
+//    private BigDecimal total;
+
+    @Schema(description = "支付时间")
+    private Long payEndTime;
+
+    @Schema(description = "订单的总体状态")
+    private String orderState;
+
+    @Schema(description = "用户名")
+    private String userName;
+
     @Schema(description = "用户信息")
     private UserCountModel userAccount;
 
     @Schema(description = "消费机设备ID")
     private String deviceId;
 
-//    @Schema(description = "设备类型")
-//    private DeviceType deviceType;
-
     @Schema(description = "设备所属区域信息")
     private AreaSimpleModel area;
 
@@ -64,4 +68,16 @@ public class OrderUnionWithModel {
 
     @Schema(description = "申请退款时间")
     private Long refundTime;
+
+    @Schema(description = "所属机构ID")
+    private String oid;
+
+    @Schema(description = "所属项目oid")
+    private String projectOid;
+
+    @Schema(description = "数据主题的oid")
+    private String aboutOid;
+
+    @Schema(description = "设备信息")
+    private DeviceInfoModel deviceInfo;
 }

+ 2 - 0
FullCardClient/src/main/java/com/zhongshu/card/client/service/payment/ExpenseFlowService.java

@@ -38,4 +38,6 @@ public interface ExpenseFlowService {
     // 商户小程序首页统计
     ResultContent<BusinessMainStatisticModel> businessMainPageStatistic(StatisticSearch statisticSearch);
 
+    //支付订单:分页查询项目消费订单
+    ResultContent<ExpenseFlowModel> pageOrder(Pageable pageable, ExpenseFlowSearchParam param);
 }

+ 10 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/pay/balance/RechargeController.java

@@ -3,11 +3,14 @@ package com.zhongshu.card.server.core.controller.pay.balance;
 import com.github.microservice.pay.client.ret.ResultContent;
 import com.zhongshu.card.client.model.pay.QueryRechargeParam;
 import com.zhongshu.card.client.model.pay.RechargeParam;
+import com.zhongshu.card.client.model.pay.RechargeSearchParam;
 import com.zhongshu.card.server.core.service.pay.BalancePayService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.web.PageableDefault;
 import org.springframework.web.bind.annotation.*;
 
 @RestController
@@ -53,4 +56,11 @@ public class RechargeController {
     public Object getOpenid(@Parameter(name = "jscode") @RequestParam(name = "jscode") String jscode) {
         return balancePayService.getOpenid(jscode);
     }
+
+    @Operation(summary = "分页查询充值订单", description = "分页查询充值订单")
+    @RequestMapping(value = "page", method = RequestMethod.POST)
+    public Object page(@Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
+                       @Parameter(required = false) RechargeSearchParam param){
+        return balancePayService.page(pageable, param);
+    }
 }

+ 8 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/controller/payment/ExpenseFlowController.java

@@ -132,4 +132,12 @@ public class ExpenseFlowController {
 
     //------------------------商户订单相关功能 end----------------------------
 
+    //查询消费订单
+//    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "查询消费订单", description = "查询项目订单")
+    @RequestMapping(value = {"pageOrder"}, method = {RequestMethod.POST})
+    public ResultContent pageOrder(@Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
+                                   @Parameter(required = false) ExpenseFlowSearchParam param){
+        return expenseFlowService.pageOrder(pageable, param);
+    }
 }

+ 4 - 1
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/pay/extend/BalanceRechargeOrderDaoExtend.java

@@ -1,8 +1,10 @@
 package com.zhongshu.card.server.core.dao.pay.extend;
 
-
+import com.zhongshu.card.client.model.pay.RechargeSearchParam;
 import com.zhongshu.card.client.type.payAccount.RechargeOrderStatus;
 import com.zhongshu.card.server.core.domain.pay.BalanceRechargeOrder;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -13,4 +15,5 @@ public interface BalanceRechargeOrderDaoExtend {
 
     Long sumTotal(String projectOid, String userId, RechargeOrderStatus status, Long startTime, Long endTime);
 
+    Page<BalanceRechargeOrder> page(Pageable pageable, RechargeSearchParam param);
 }

+ 53 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/pay/impl/BalanceRechargeOrderDaoImpl.java

@@ -1,8 +1,10 @@
 package com.zhongshu.card.server.core.dao.pay.impl;
 
 import ch.qos.logback.core.util.StringUtil;
+import com.github.microservice.components.data.mongo.mongo.helper.DBHelper;
 import com.github.microservice.types.OrderState;
 import com.zhongshu.card.client.model.pay.QueryRechargeParam;
+import com.zhongshu.card.client.model.pay.RechargeSearchParam;
 import com.zhongshu.card.client.model.pay.TotalStatisticsModel;
 import com.zhongshu.card.client.type.payAccount.RechargeOrderStatus;
 import com.zhongshu.card.client.utils.DateUtils;
@@ -11,6 +13,8 @@ import com.zhongshu.card.server.core.domain.pay.BalanceRechargeOrder;
 import com.zhongshu.card.server.core.util.CommonUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.aggregation.Aggregation;
@@ -20,12 +24,16 @@ import org.springframework.data.mongodb.core.query.Query;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.regex.Pattern;
 
 public class BalanceRechargeOrderDaoImpl implements BalanceRechargeOrderDaoExtend {
 
     @Autowired
     MongoTemplate mongoTemplate;
 
+    @Autowired
+    DBHelper dbHelper;
+
     @Override
     public List<BalanceRechargeOrder> listByMonth(String projectOid, String userId, Long startTime, Long endTime) {
         Criteria criteria = new Criteria();
@@ -94,5 +102,50 @@ public class BalanceRechargeOrderDaoImpl implements BalanceRechargeOrderDaoExten
         return groupList.getMappedResults().get(0).getTotalAmount().longValue();
     }
 
+    @Override
+    public Page<BalanceRechargeOrder> page(Pageable pageable, RechargeSearchParam param) {
+        Criteria criteria = new Criteria();
+
+        if (StringUtils.isNotEmpty(param.getProjectOid())){
+            criteria.and("projectOid").is(param.getProjectOid());
+        }
+
+        if (StringUtils.isNotEmpty(param.getUserName())){
+            java.util.regex.Pattern namePattern = Pattern.compile("^.*" + param.getUserName() + ".*$");
+            criteria.and("userName").regex(namePattern);
+        }
+
+        if (param.getPaymentType()!=null){
+            criteria.and("paymentType").is(param.getPaymentType());
+        }
+
+        if (param.getStatus() != null){
+            criteria.and("status").is(param.getStatus());
+        }
+
+        if (param.getTotal() != null){
+            criteria.and("total").gte(param.getTotal());
+        }
+
+        if (StringUtils.isNotEmpty(param.getOrderNo())){
+            criteria.and("orderNo").regex(param.getOrderNo());
+        }
+
+        if (param.getStartTime() != null && param.getEndTime() == null){
+            criteria.and("createTime").gte(param.getStartTime());
+        }
+
+        if (param.getEndTime() == null && param.getStartTime() != null){
+            criteria.and("createTime").lte(param.getEndTime());
+        }
+
+        if (param.getStartTime() != null && param.getEndTime() != null){
+            criteria.and("createTime").gte(param.getStartTime()).lte(param.getEndTime());
+        }
+        Query query = Query.query(criteria);
+        query.with(Sort.by(Sort.Order.desc("createTime")));
+        return dbHelper.pages(query, pageable, BalanceRechargeOrder.class);
+    }
+
 
 }

+ 5 - 4
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/payment/extend/ExpenseFlowDaoExtend.java

@@ -1,8 +1,6 @@
 package com.zhongshu.card.server.core.dao.payment.extend;
 
-import com.zhongshu.card.client.model.payment.ExpenseFlowCount;
-import com.zhongshu.card.client.model.payment.ExpenseFlowSearch;
-import com.zhongshu.card.client.model.payment.ExpenseFlowUnionParam;
+import com.zhongshu.card.client.model.payment.*;
 import com.zhongshu.card.client.model.payment.statistic.StatisticItem;
 import com.zhongshu.card.client.model.school.BookInfoSearch;
 import com.zhongshu.card.server.core.domain.payment.ExpenseFlow;
@@ -56,5 +54,8 @@ public interface ExpenseFlowDaoExtend {
     Map<String, BigDecimal> statisticItems(ExpenseFlowSearch param);
 
     //聚合查询消费订单及充值订单
-    Page<ExpenseFlowUnionWithModel> unionWithRecharge(Pageable pageable, ExpenseFlowUnionParam param);
+    Page<OrderUnionWithModel> unionWithRecharge(Pageable pageable, ExpenseFlowUnionParam param);
+
+    //订单管理
+    Page<ExpenseFlow> pageOrder(Pageable pageable, ExpenseFlowSearchParam param);
 }

+ 129 - 13
FullCardServer/src/main/java/com/zhongshu/card/server/core/dao/payment/impl/ExpenseFlowDaoImpl.java

@@ -2,9 +2,7 @@ package com.zhongshu.card.server.core.dao.payment.impl;
 
 import com.github.microservice.components.data.mongo.mongo.helper.DBHelper;
 import com.mongodb.client.MongoCollection;
-import com.zhongshu.card.client.model.payment.ExpenseFlowCount;
-import com.zhongshu.card.client.model.payment.ExpenseFlowSearch;
-import com.zhongshu.card.client.model.payment.ExpenseFlowUnionParam;
+import com.zhongshu.card.client.model.payment.*;
 import com.zhongshu.card.client.type.payment.OrderType;
 import com.zhongshu.card.server.core.dao.BaseImpl;
 import com.zhongshu.card.server.core.dao.payment.extend.ExpenseFlowDaoExtend;
@@ -272,8 +270,121 @@ public class ExpenseFlowDaoImpl extends BaseImpl implements ExpenseFlowDaoExtend
         return map;
     }
 
+    public Page<ExpenseFlow> pageOrder(Pageable pageable, ExpenseFlowSearchParam param) {
+        Criteria criteria = new Criteria();
+        //交易时间
+        if (param.getStartTime() != null && param.getEndTime() == null) {
+            criteria.and("createTime").gte(param.getStartTime());
+        }
+
+        if (param.getStartTime() == null && param.getEndTime() != null) {
+            criteria.and("createTime").lte(param.getEndTime());
+        }
+
+        if (param.getStartTime() != null && param.getEndTime() != null) {
+            criteria.and("createTime").gte(param.getStartTime()).lte(param.getEndTime());
+        }
+
+        //订单编号
+        if (StringUtils.isNotEmpty(param.getOrderNo())){
+            criteria.and("orderNo").is(param.getOrderNo());
+        }
+
+        if (StringUtils.isNotEmpty(param.getProjectOid())){
+            criteria.and("projectOid").is(param.getProjectOid());
+        }
+
+        //支付编号
+        if (StringUtils.isNotEmpty(param.getPaymentNo())){
+            criteria.and("paymentNo").is(param.getPaymentNo());
+        }
+
+        if (param.getPaymentType() != null){
+            criteria.and("paymentType").is(param.getPaymentType());
+        }
+
+        //支付时间
+        if (param.getPayStartTime() != null && param.getPayEndTime() == null) {
+            criteria.and("payEndTime").gte(param.getPayStartTime());
+        }
+
+        if (param.getPayStartTime() == null && param.getPayEndTime() != null) {
+            criteria.and("payEndTime").lte(param.getPayEndTime());
+        }
+
+        if (param.getPayStartTime() != null && param.getPayEndTime() != null) {
+            criteria.and("payEndTime").gte(param.getPayStartTime()).lte(param.getPayEndTime());
+        }
+
+        //支付金额
+        if (param.getPayAmount() != null){
+            criteria.and("payAmount").is(param.getPayAmount());
+        }
+
+        //订单状态
+        if (param.getOrderState() != null){
+            criteria.and("orderState").is(param.getOrderState());
+        }
+
+        //姓名
+        if (StringUtils.isNotEmpty(param.getUserName())){
+            Pattern userNamePattern = Pattern.compile("^.*" + param.getUserName() + ".*$");
+            criteria.and("paymentNo").is(userNamePattern);
+        }
+
+        //设备编号
+        if (StringUtils.isNotEmpty(param.getDeviceId())){
+            criteria.and("deviceId").is(param.getDeviceId());
+        }
+
+        //设备类型
+        if (param.getDeviceType() != null){
+            criteria.and("deviceType").is(param.getDeviceType());
+        }
+
+        //区域
+        if (StringUtils.isNotEmpty(param.getAreaId())){
+            criteria.and("area.id").is(param.getAreaId());
+        }
+
+        //是否退款
+        if (param.getIsRefund() != null){
+            criteria.and("isRefund").is(param.getIsRefund());
+        }
+
+        //退款编号
+        if (StringUtils.isNotEmpty(param.getRefundNo())){
+            criteria.and("refundNo").is(param.getRefundNo());
+        }
+
+        //退款金额
+        if (param.getRefundAmount() != null){
+            criteria.and("refundAMount").is(param.getRefundAmount());
+        }
+
+        if (param.getRefundState() != null){
+            criteria.and("refundState").is(param.getRefundState());
+        }
+
+        if (param.getRefundStartTime() != null && param.getRefundEndTime() == null) {
+            criteria.and("refundTime").gte(param.getRefundStartTime());
+        }
+
+        if (param.getRefundStartTime() == null && param.getRefundEndTime() != null) {
+            criteria.and("refundTime").lte(param.getRefundEndTime());
+        }
+
+        if (param.getRefundStartTime() != null && param.getRefundEndTime() != null) {
+            criteria.and("refundTime").gte(param.getRefundStartTime()).lte(param.getRefundEndTime());
+        }
+        Query query = new Query(criteria);
+        query.with(Sort.by(Sort.Direction.DESC, "createTime"));
+
+        return dbHelper.pages(query, pageable, ExpenseFlow.class);
+    }
+
     @Override
-    public Page<ExpenseFlowUnionWithModel> unionWithRecharge(Pageable pageable, ExpenseFlowUnionParam param) {
+    public Page<OrderUnionWithModel> unionWithRecharge(Pageable pageable, ExpenseFlowUnionParam param) {
         List<Document> createTimePipeline = new ArrayList<>();
 
         // 开始时间过滤
@@ -298,16 +409,21 @@ public class ExpenseFlowDaoImpl extends BaseImpl implements ExpenseFlowDaoExtend
 
         List<Document> unionWithPipeline = new ArrayList<>();
 
+        List<Document> unionWithMatch = new ArrayList<>();
+        if (!createTimePipeline.isEmpty()) {
+            unionWithMatch.addAll(createTimePipeline);
+        }
+        unionWithMatch.add(new Document()
+                .append("$addFields", new Document()
+                        .append("type", OrderType.Recharge.name())
+                        .append("payAmount", "$total")
+                ));
+
+
         unionWithPipeline.add( new Document()
                 .append("$unionWith", new Document()
                         .append("coll", "balanceRechargeOrder")
-                        .append("pipeline", Arrays.asList(
-                                        createTimePipeline,
-                                        new Document()
-                                                .append("$addFields", new Document()
-                                                        .append("type", OrderType.Recharge.name())
-                                                )
-                                )
+                        .append("pipeline", unionWithMatch
                         )
                 ));
 
@@ -351,7 +467,7 @@ public class ExpenseFlowDaoImpl extends BaseImpl implements ExpenseFlowDaoExtend
                     count.set(Long.valueOf(String.valueOf(it.get("count"))));
                 });
 
-        List<ExpenseFlowUnionWithModel> ret = new ArrayList<>();
+        List<OrderUnionWithModel> ret = new ArrayList<>();
         collection.aggregate(new ArrayList<>() {{
                     addAll(pipeline);
                     add(new Document().append("$skip", pageable.getOffset()));
@@ -359,7 +475,7 @@ public class ExpenseFlowDaoImpl extends BaseImpl implements ExpenseFlowDaoExtend
                 }})  // 如果内存不够在启用磁盘
                 .allowDiskUse(false).forEach((document) -> {
                     Optional.ofNullable(document).ifPresent((it) -> {
-                        ret.add(this.mongoTemplate.getConverter().read(ExpenseFlowUnionWithModel.class, it));
+                        ret.add(this.mongoTemplate.getConverter().read(OrderUnionWithModel.class, it));
                     });
                 });
         return new PageImpl<>(ret, pageable, count.get());

+ 12 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/domain/pay/BalanceRechargeOrder.java

@@ -5,8 +5,10 @@ import com.github.microservice.types.payment.PaymentChannelType;
 import com.github.microservice.types.payment.PaymentType;
 import com.zhongshu.card.client.type.RechargeType;
 import com.zhongshu.card.client.type.payAccount.RechargeOrderStatus;
+import com.zhongshu.card.server.core.domain.org.UserAccount;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
+import org.springframework.data.mongodb.core.mapping.DBRef;
 import org.springframework.data.mongodb.core.mapping.Document;
 
 import java.math.BigDecimal;
@@ -24,6 +26,16 @@ public class BalanceRechargeOrder extends SuperEntity {
     @Schema(description = "用户id")
     private String userId;
 
+    @Schema(description = "用户名")
+    private String userName;
+
+    @Schema(description = "用户信息")
+    @DBRef(lazy = true)
+    private UserAccount userAccount;
+
+    @Schema(description = "支付时间")
+    private Long payEndTime;
+
     @Schema(description = "支付方式")
     private PaymentType paymentType;
 

+ 1 - 0
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/openAPI/OpenAppManagerService.java

@@ -85,6 +85,7 @@ public class OpenAppManagerService {
             Organization organization = organizationDao.findTopByOid(signModel.getBusinessId());
             if (organization!=null && StringUtils.isNotEmpty(organization.getName())){
                 appModel.setProjectName(organization.getName());
+                appModel.setBusinessName(organization.getName());
             }
             appModel.setAppType(signModel.getAppType().getRemark());
             appModel.setAppState(signModel.getAppState().getRemark());

+ 32 - 4
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/pay/BalancePayService.java

@@ -1,5 +1,6 @@
 package com.zhongshu.card.server.core.service.pay;
 
+import com.github.microservice.components.data.base.util.PageEntityUtil;
 import com.github.microservice.core.util.JsonUtil;
 import com.github.microservice.core.util.bean.BeanUtil;
 import com.github.microservice.pay.client.model.PayProductParameter;
@@ -17,14 +18,14 @@ import com.github.microservice.pay.client.type.ledger.TransactionType;
 import com.github.microservice.types.payment.PaymentChannelType;
 import com.github.microservice.types.payment.PaymentType;
 import com.zhongshu.card.client.model.mqtt.SendMessageModel;
-import com.zhongshu.card.client.model.pay.QueryRechargeOrderModel;
-import com.zhongshu.card.client.model.pay.QueryRechargeParam;
-import com.zhongshu.card.client.model.pay.RechargeOrderModel;
-import com.zhongshu.card.client.model.pay.RechargeParam;
+import com.zhongshu.card.client.model.org.UserCountModel;
+import com.zhongshu.card.client.model.pay.*;
 import com.zhongshu.card.client.model.wechat.MiniAppUserInfoVo;
 import com.zhongshu.card.client.type.payAccount.RechargeOrderStatus;
 import com.zhongshu.card.client.utils.DateUtils;
+import com.zhongshu.card.server.core.dao.org.UserCountDao;
 import com.zhongshu.card.server.core.dao.pay.BalanceRechargeOrderDao;
+import com.zhongshu.card.server.core.domain.org.UserAccount;
 import com.zhongshu.card.server.core.domain.pay.BalanceRechargeOrder;
 import com.zhongshu.card.server.core.domain.pay.PayAccount;
 import com.zhongshu.card.server.core.service.base.SuperService;
@@ -39,6 +40,8 @@ import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -77,6 +80,9 @@ public class BalancePayService extends SuperService {
     @Autowired
     WechatCUtil wechatCUtil;
 
+    @Autowired
+    UserCountDao userCountDao;
+
 
     /**
      * 下单并生成调用支付参数
@@ -111,6 +117,8 @@ public class BalancePayService extends SuperService {
             return prepay;
         }
         PayAccount payAccount = payAccountService.getUserChildren(param.getProjectOid(), param.getUserId(), param.getPaymentType().getChannelType());
+        UserAccount userAccount = userCountDao.findTopByUserId(param.getUserId());
+
         //创建订单
         BalanceRechargeOrder balanceRechargeOrder = new BalanceRechargeOrder();
         balanceRechargeOrder.setProjectOid(param.getProjectOid());
@@ -123,6 +131,8 @@ public class BalancePayService extends SuperService {
         balanceRechargeOrder.setPrepay(prepay.getContent());
         balanceRechargeOrder.setDescription(param.getDescription());
 //        balanceRechargeOrder.setOid(param.getOid());
+        balanceRechargeOrder.setUserName(userAccount.getName());
+        balanceRechargeOrder.setUserAccount(userAccount);
         rechargeOrderDao.save(balanceRechargeOrder);
         return ResultContent.buildContent(toModel(balanceRechargeOrder));
     }
@@ -169,6 +179,7 @@ public class BalancePayService extends SuperService {
                 if (transfer.getState().equals(ResultState.Success)) {
                     //处理订单状态
                     rechargeOrder.setStatus(RechargeOrderStatus.Success);
+                    rechargeOrder.setPayEndTime(System.currentTimeMillis());
                     // 发送成功通知消息
                     SendMessageModel sendMessageModel = new SendMessageModel();
                     sendMessageModel.setMessage(JsonUtil.toJson(Map.of("status", RechargeOrderStatus.Success.name(), "orderNo", rechargeOrder.getOrderNo())));
@@ -341,6 +352,23 @@ public class BalancePayService extends SuperService {
         return null;
     }
 
+    public Object page(Pageable pageable, RechargeSearchParam param){
+        Page<BalanceRechargeOrder> page = rechargeOrderDao.page(pageable, param);
+        return ResultContent.buildContent(PageEntityUtil.concurrent2PageModel(page, this::toPageModel));
+    }
+
+    private RechargeOrderModel toPageModel(BalanceRechargeOrder rechargeOrder){
+        RechargeOrderModel rechargeOrderModel = new RechargeOrderModel();
+        if (rechargeOrder != null) {
+            BeanUtils.copyProperties(rechargeOrder, rechargeOrderModel);
+            if (StringUtils.isNotEmpty(rechargeOrder.getUserId())){
+                UserAccount userAccount = userCountDao.findTopByUserId(rechargeOrder.getUserId());
+                rechargeOrderModel.setUserName(userAccount.getName());
+            }
+        }
+        return rechargeOrderModel;
+    }
+
     @SneakyThrows
     public Object getOpenid(String jscode) {
         MiniAppUserInfoVo miniAppUserInfo = wechatCUtil.getMiniAppUserInfo(jscode);

+ 30 - 13
FullCardServer/src/main/java/com/zhongshu/card/server/core/service/payment/ExpenseFlowServiceImpl.java

@@ -37,6 +37,7 @@ import com.zhongshu.card.client.type.RefundState;
 import com.zhongshu.card.client.type.StatisticType;
 import com.zhongshu.card.client.type.UserState;
 import com.zhongshu.card.client.type.payAccount.RechargeOrderStatus;
+import com.zhongshu.card.client.type.payment.OrderType;
 import com.zhongshu.card.client.type.payment.SettlementState;
 import com.zhongshu.card.client.type.school.CardState;
 import com.zhongshu.card.client.utils.DateUtils;
@@ -1004,22 +1005,38 @@ public class ExpenseFlowServiceImpl extends SuperService implements ExpenseFlowS
         return ResultContent.buildSuccess();
     }
 
-    //TODO toModel
+    public ResultContent pageOrder(Pageable pageable, ExpenseFlowSearchParam param) {
+        if (StringUtils.isNotEmpty(param.getProjectOid())){
+            param.setProjectOid(getCurrentProjectOid());
+        }
+        Page<ExpenseFlow> expenseFlows = expenseFlowDao.pageOrder(pageable, param);
+        return ResultContent.buildContent(PageEntityUtil.concurrent2PageModel(expenseFlows, this::toOrderModel));
+    }
+
+    private ExpenseFlowPageModel toOrderModel(ExpenseFlow expenseFlow) {
+        ExpenseFlowPageModel model = new ExpenseFlowPageModel();
+        if (expenseFlow != null) {
+            BeanUtils.copyProperties(expenseFlow, model);
+            if (StringUtils.isNotEmpty(expenseFlow.getRefundUserId())){
+                UserAccount refundUser = userCountDao.findTopByUserId(expenseFlow.getRefundUserId());
+                model.setRefundUserName(refundUser.getName());
+            }
+        }
+        return model;
+    }
+
+    //聚合查询 充值订单和消费订单
     public ResultContent pageUnionWith(Pageable pageable, ExpenseFlowUnionParam param) {
-        Page<ExpenseFlowUnionWithModel> page = expenseFlowDao.unionWithRecharge(pageable, param);
-        return null;
+        Page<OrderUnionWithModel> page = expenseFlowDao.unionWithRecharge(pageable, param);
+        return ResultContent.buildContent(PageEntityUtil.concurrent2PageModel(page, this::toOrderUnionModel));
     }
 
-//    private OrderUnionWithModel toOrderUnionModel(ExpenseFlowUnionWithModel expenseFlowUnionWith){
-//        OrderUnionWithModel model = new OrderUnionWithModel();
-//        if (expenseFlowUnionWith != null) {
-//            if (expenseFlowUnionWith.getType().equals(OrderType.Consume)){
-//                BeanUtils.copyProperties(expenseFlowUnionWith, model, "userAccount");
-//            }else if (expenseFlowUnionWith.getType().equals(OrderType.Recharge)){
-//
-//            }
-//        }
-//    }
+    private OrderUnionWithModel toOrderUnionModel(OrderUnionWithModel orderUnionWithModel){
+        if (StringUtils.isNotEmpty(orderUnionWithModel.getDeviceId())) {
+            orderUnionWithModel.setDeviceInfo(deviceInfoService.getDeviceInfoModel(orderUnionWithModel.getDeviceId()));
+        }
+        return orderUnionWithModel;
+    }
 
     /**
      * 得到订单支付显示信息