Forráskód Böngészése

小程序订单统计

zouxuan 1 éve
szülő
commit
d3c9a2cfd2

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/UserOrderDao.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yonge.cooleshow.biz.dal.entity.UserOrder;
 import com.yonge.cooleshow.biz.dal.enums.OrderStatusEnum;
+import com.yonge.cooleshow.biz.dal.wrapper.PaymentDivMemberRecordWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
 import org.apache.ibatis.annotations.Param;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
@@ -93,4 +94,11 @@ public interface UserOrderDao extends BaseMapper<UserOrder>{
 
     List<UserOrder> selectPaymentOrderPage(@Param("page") IPage<UserPaymentOrderWrapper.UserPaymentOrder> page,
                                            @Param("query") UserPaymentOrderWrapper.UserPaymentOrderQuery query);
+
+	//首页支出明细列表
+    List<PaymentDivMemberRecordWrapper.IndexIncomeQueryDto> queryExpend(@Param("page") IPage<PaymentDivMemberRecordWrapper.IndexIncomeQueryDto> page,
+																		@Param("param") PaymentDivMemberRecordWrapper.IndexIncomeQuery param);
+
+	//小程序首页订单详情
+	PaymentDivMemberRecordWrapper.OrderDetailDto getExpendOrderDetail(@Param("orderNo") String orderNo);
 }

+ 14 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/UserOrder.java

@@ -39,7 +39,6 @@ public class UserOrder implements Serializable {
     @TableField(value = "order_no_")
     private String orderNo;
 
-
     @ApiModelProperty("支付版本 ")
     @TableField(value = "payment_version_")
     private EPaymentVersion paymentVersion;
@@ -75,50 +74,64 @@ public class UserOrder implements Serializable {
     @ApiModelProperty("订单名称 ")
     @TableField(value = "order_name_")
     private String orderName;
+
     @ApiModelProperty("下单应用:STUDENT 学生端 TEACHER 老师端")
     @TableField(value = "order_client_")
     private ClientEnum orderClient;
+
     @ApiModelProperty("订单类型: 学生端( VIP、开通会员  PRACTICE、陪练课购买  LIVE、直播课购买 VIDEO、视频课购买 MUSIC、单曲点播 ACTI_REGIST、活动报名 TENANT_ALBUM 平台专辑) " +
             "老师端(VIP、开通会员 PIANO_ROOM、琴房时长)")
     @TableField(value = "order_type_")
     private OrderTypeEnum orderType;
+
     @ApiModelProperty("订单描述信息 ")
     @TableField(value = "order_desc_")
     private String orderDesc;
+
     @ApiModelProperty("订单状态 WAIT_PAY 待支付 PAYING 支付中  PAID 已付款 CLOSE 已关闭 FAIL 支付失败")
     @TableField(value = "status_")
     private OrderStatusEnum status;
+
     @ApiModelProperty("原价 ")
     @TableField(value = "original_price_")
     private BigDecimal originalPrice;
+
     @ApiModelProperty("预计价格 ")
     @TableField(value = "expect_price_")
     private BigDecimal expectPrice;
+
     @ApiModelProperty("实际价格 ")
     @TableField(value = "actual_price_")
     private BigDecimal actualPrice;
+
     @ApiModelProperty("优惠金额 ")
     @TableField(value = "coupon_amount_")
     private BigDecimal couponAmount;
+
     @ApiModelProperty("平台服务费 ")
     @TableField(value = "plantform_fee_")
     private BigDecimal plantformFee;
+
     @ApiModelProperty("用户备注 ")
     @TableField(value = "user_note_")
     private String userNote;
+
     @ApiModelProperty("下单时间 ")
     @TableField(value = "create_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date createTime;
+
     @ApiModelProperty("支付时间 ")
     @TableField(value = "pay_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date payTime;
+
     @ApiModelProperty("原因 ")
     @TableField(value = "reason_")
     private String reason;
+
     @TableField(value = "update_time_")
     @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")

+ 7 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/mapper/PaymentDivMemberRecordMapper.java

@@ -29,5 +29,11 @@ public interface PaymentDivMemberRecordMapper extends BaseMapper<PaymentDivMembe
 																		@Param("param") PaymentDivMemberRecordWrapper.IndexIncomeQuery param);
 
 	//小程序首页订单详情
-    PaymentDivMemberRecordWrapper.OrderDetailDto getOrderDetail(@Param("orderNo") String orderNo, @Param("tenantId") Long tenantId);
+    PaymentDivMemberRecordWrapper.OrderDetailDto getIncomeOrderDetail(@Param("orderNo") String orderNo, @Param("tenantId") Long tenantId);
+
+	//首页收入汇总
+	List<PaymentDivMemberRecordWrapper.IndexIncomeSummaryDetailDto> incomeSummary(@Param("query") PaymentDivMemberRecordWrapper.IndexIncomeQuery query);
+
+	//首页支出汇总
+    List<PaymentDivMemberRecordWrapper.IndexIncomeSummaryDetailDto> expendSummary(@Param("query") PaymentDivMemberRecordWrapper.IndexIncomeQuery query);
 }

+ 4 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/PaymentDivMemberRecordService.java

@@ -48,5 +48,8 @@ public interface PaymentDivMemberRecordService extends IService<PaymentDivMember
                                                                          PaymentDivMemberRecordWrapper.IndexIncomeQuery query);
 
     //小程序首页订单详情
-    PaymentDivMemberRecordWrapper.OrderDetailDto getOrderDetail(String orderNo,Long tenantId);
+    PaymentDivMemberRecordWrapper.OrderDetailDto getIncomeOrderDetail(String orderNo,Long tenantId);
+
+    //首页收入汇总
+    PaymentDivMemberRecordWrapper.IndexIncomeSummaryDto incomeSummary(PaymentDivMemberRecordWrapper.IndexIncomeQuery query);
 }

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/UserOrderService.java

@@ -11,6 +11,7 @@ import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.dto.search.OrderSearch;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderPayRes;
+import com.yonge.cooleshow.biz.dal.wrapper.PaymentDivMemberRecordWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.UserPaymentOrderWrapper;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.toolset.payment.base.model.callback.PaymentCallBack;
@@ -215,4 +216,11 @@ public interface UserOrderService extends IService<UserOrder> {
      * @param orderNo 订单号
      */
     UserOrder getByOrderNo(String orderNo);
+
+    //首页支出明细列表
+    IPage<PaymentDivMemberRecordWrapper.IndexIncomeQueryDto> queryExpend(IPage<PaymentDivMemberRecordWrapper.IndexIncomeQueryDto> page,
+                                                                         PaymentDivMemberRecordWrapper.IndexIncomeQuery query);
+
+    //首页支出订单详情
+    PaymentDivMemberRecordWrapper.OrderDetailDto getExpendOrderDetail(String orderNo);
 }

+ 22 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PaymentDivMemberRecordServiceImpl.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantPersonStatWrapper;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.beans.BeanUtils;
 import lombok.extern.slf4j.Slf4j;
@@ -12,6 +13,7 @@ import com.yonge.cooleshow.biz.dal.wrapper.PaymentDivMemberRecordWrapper;
 import com.yonge.cooleshow.biz.dal.mapper.PaymentDivMemberRecordMapper;
 import com.yonge.cooleshow.biz.dal.service.PaymentDivMemberRecordService;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -73,7 +75,25 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
     }
 
     @Override
-    public PaymentDivMemberRecordWrapper.OrderDetailDto getOrderDetail(String orderNo,Long tenantId) {
-        return baseMapper.getOrderDetail(orderNo,tenantId);
+    public PaymentDivMemberRecordWrapper.OrderDetailDto getIncomeOrderDetail(String orderNo,Long tenantId) {
+        return baseMapper.getIncomeOrderDetail(orderNo,tenantId);
+    }
+
+    @Override
+    public PaymentDivMemberRecordWrapper.IndexIncomeSummaryDto incomeSummary(PaymentDivMemberRecordWrapper.IndexIncomeQuery query) {
+        List<PaymentDivMemberRecordWrapper.IndexIncomeSummaryDetailDto> incomeSummary = baseMapper.incomeSummary(query);
+        PaymentDivMemberRecordWrapper.IndexIncomeSummaryDto result = new PaymentDivMemberRecordWrapper.IndexIncomeSummaryDto();
+        if(CollectionUtils.isNotEmpty(incomeSummary)){
+            BigDecimal reduce = incomeSummary.stream().map(e -> e.getAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);
+            result.setIncomeDtos(incomeSummary);
+            result.setTotalIncome(reduce);
+        }
+        List<PaymentDivMemberRecordWrapper.IndexIncomeSummaryDetailDto> expendSummary = baseMapper.expendSummary(query);
+        if(CollectionUtils.isNotEmpty(expendSummary)){
+            BigDecimal reduce = expendSummary.stream().map(e -> e.getAmount()).reduce(BigDecimal.ZERO, BigDecimal::add);
+            result.setExpendDtos(expendSummary);
+            result.setTotalExpend(reduce);
+        }
+        return result;
     }
 }

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserOrderServiceImpl.java

@@ -29,6 +29,7 @@ import com.yonge.cooleshow.biz.dal.vo.UserOrderDetailVo;
 import com.yonge.cooleshow.biz.dal.vo.UserOrderVo;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderCreateRes;
 import com.yonge.cooleshow.biz.dal.vo.res.OrderPayRes;
+import com.yonge.cooleshow.biz.dal.wrapper.PaymentDivMemberRecordWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.coupon.CouponOrderWrapper;
 import com.yonge.cooleshow.common.constant.SysConfigConstant;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
@@ -1102,6 +1103,16 @@ public class UserOrderServiceImpl extends ServiceImpl<UserOrderDao, UserOrder> i
         return this.lambdaQuery().eq(UserOrder::getOrderNo, orderNo).last("limit 1").one();
     }
 
+    @Override
+    public IPage<PaymentDivMemberRecordWrapper.IndexIncomeQueryDto> queryExpend(IPage<PaymentDivMemberRecordWrapper.IndexIncomeQueryDto> page, PaymentDivMemberRecordWrapper.IndexIncomeQuery query) {
+        return page.setRecords(baseMapper.queryExpend(page, query));
+    }
+
+    @Override
+    public PaymentDivMemberRecordWrapper.OrderDetailDto getExpendOrderDetail(String orderNo) {
+        return baseMapper.getExpendOrderDetail(orderNo);
+    }
+
     /**
      * 获取平台服务费率
      *

+ 28 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/wrapper/PaymentDivMemberRecordWrapper.java

@@ -9,6 +9,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.math.BigDecimal;
+import java.util.List;
 import java.util.Optional;
 
 import lombok.AllArgsConstructor;
@@ -123,6 +124,33 @@ public class PaymentDivMemberRecordWrapper {
     }
 
     @Data
+    @ApiModel("首页收入、支出汇总")
+    public static class IndexIncomeSummaryDto{
+
+        @ApiModelProperty("累计收入")
+        private BigDecimal totalIncome = BigDecimal.ZERO;
+
+        @ApiModelProperty("累计支出")
+        private BigDecimal totalExpend = BigDecimal.ZERO;
+
+        @ApiModelProperty("收入汇总详情")
+        private List<IndexIncomeSummaryDetailDto> incomeDtos;
+
+        @ApiModelProperty("支出汇总详情")
+        private List<IndexIncomeSummaryDetailDto> expendDtos;
+    }
+
+    @Data
+    @ApiModel("首页收入、支出汇总")
+    public static class IndexIncomeSummaryDetailDto{
+        @ApiModelProperty("金额")
+        private BigDecimal amount = BigDecimal.ZERO;
+
+        @ApiModelProperty("订单类型")
+        private EOrderType orderType;
+    }
+
+    @Data
     @ApiModel("首页订单详情")
     public static class OrderDetailDto extends IndexIncomeQueryDto{
 

+ 24 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/PaymentDivMemberRecordMapper.xml

@@ -55,7 +55,7 @@
           </if>
            ORDER BY ${param.sortField} ${param.sortType}
     </select>
-    <select id="getOrderDetail"
+    <select id="getIncomeOrderDetail"
             resultType="com.yonge.cooleshow.biz.dal.wrapper.PaymentDivMemberRecordWrapper$OrderDetailDto">
         select
             pdmr.order_no_ as orderNo,
@@ -78,8 +78,30 @@
                 left join
             sys_user su ON su.id_ = sut.user_id_
                 left join
-            user_order_detail uod ON uod.order_id_ = uo.id_
+            user_order_detail uod ON uod.order_no_ = uo.order_no_
             WHERE pdmr.order_no_ = #{orderNo} AND pdmr.tenant_id_ = #{tenantId} LIMIT 1
     </select>
+    <select id="incomeSummary"
+            resultType="com.yonge.cooleshow.biz.dal.wrapper.PaymentDivMemberRecordWrapper$IndexIncomeSummaryDetailDto">
+        select uo.order_type_ as orderType,SUM(pdmr.amount_) amount
+        from payment_div_member_record pdmr
+        left join user_order uo ON uo.order_no_ = pdmr.order_no_
+        where pdmr.status_ = 'SUCCESS' AND pdmr.tenant_id_ = #{query.tenantId}
+        <if test="param.startTime != null and param.startTime != ''">
+            AND uo.pay_time_ BETWEEN #{param.startTime} AND #{param.endTime}
+        </if>
+        group by uo.order_type_
+    </select>
+    <select id="expendSummary"
+            resultType="com.yonge.cooleshow.biz.dal.wrapper.PaymentDivMemberRecordWrapper$IndexIncomeSummaryDetailDto">
+        select uo.order_type_ as orderType,SUM(uo.actual_price_) amount
+        from user_order uo
+        where uo.status_ = 'SUCCESS' AND uo.order_type_ = 'TENANT_ALBUM'
+        AND uo.tenant_id_ = #{query.tenantId}
+        <if test="param.startTime != null and param.startTime != ''">
+            AND uo.pay_time_ BETWEEN #{param.startTime} AND #{param.endTime}
+        </if>
+        group by uo.order_type_
+    </select>
 
 </mapper>

+ 50 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/UserOrderMapper.xml

@@ -314,4 +314,54 @@
                 </if>
             </where>
     </select>
+    <select id="queryExpend"
+            resultType="com.yonge.cooleshow.biz.dal.wrapper.PaymentDivMemberRecordWrapper$IndexIncomeQueryDto">
+        select
+        uo.order_no_ as orderNo,
+        sut.name_ as name,
+        su.avatar_ as avatar,
+        su.phone_ as phone,
+        uo.actual_price_ as amount,
+        uo.pay_time_ as payTime,
+        uo.order_type_ as orderType
+        from user_order uo
+        left join
+        sys_user_tsign sut ON sut.user_id_ = uo.user_id_
+        left join
+        sys_user su ON su.id_ = sut.user_id_
+        where uo.status_ = 'SUCCESS' AND uo.tenant_id_ = #{param.tenantId} AND uo.order_type_ = 'TENANT_ALBUM'
+        <if test="param.startTime != null and param.startTime != ''">
+            AND uo.pay_time_ BETWEEN #{param.startTime} AND #{param.endTime}
+        </if>
+        <if test="param.orderType != null">
+            AND uo.order_type_ = #{param.orderType}
+        </if>
+        <if test="param.keyword != null and param.keyword != ''">
+            and sut.name_ LIKE CONCAT('%',#{param.keyword},'%')
+        </if>
+        ORDER BY ${param.sortField} ${param.sortType}
+    </select>
+    <select id="getExpendOrderDetail"
+            resultType="com.yonge.cooleshow.biz.dal.wrapper.PaymentDivMemberRecordWrapper$OrderDetailDto">
+        select
+            uo.order_no_ as orderNo,
+            sut.name_ as name,
+            su.avatar_ as avatar,
+            su.phone_ as phone,
+            uo.actual_price_ as amount,
+            uo.pay_time_ as payTime,
+            uo.order_type_ as orderType,
+            uod.good_name_ as goodsName,
+            uod.good_num_ as goodsNum,
+            uod.good_type_ as goodsType,
+            uod.good_url_ as goodsUrl
+        from user_order uo
+         left join
+        sys_user_tsign sut ON sut.user_id_ = uo.user_id_
+         left join
+        sys_user su ON su.id_ = sut.user_id_
+         left join
+        user_order_detail uod ON uod.order_no_ = uo.order_no_
+        WHERE pdmr.order_no_ = #{orderNo} LIMIT 1
+    </select>
 </mapper>

+ 37 - 4
cooleshow-user/user-tenant/src/main/java/com/yonge/cooleshow/tenant/controller/IndexController.java

@@ -7,6 +7,7 @@ import com.yonge.cooleshow.biz.dal.queryInfo.SysMusicCompareRecordQueryInfo;
 import com.yonge.cooleshow.biz.dal.service.PaymentDivMemberRecordService;
 import com.yonge.cooleshow.biz.dal.service.SysMusicCompareRecordService;
 import com.yonge.cooleshow.biz.dal.service.TenantPersonStatService;
+import com.yonge.cooleshow.biz.dal.service.UserOrderService;
 import com.yonge.cooleshow.biz.dal.wrapper.PaymentDivMemberRecordWrapper;
 import com.yonge.cooleshow.biz.dal.wrapper.TenantPersonStatWrapper;
 import com.yonge.cooleshow.common.controller.BaseController;
@@ -34,6 +35,8 @@ public class IndexController extends BaseController {
     private TenantPersonStatService tenantPersonStatService;
     @Autowired
     private PaymentDivMemberRecordService paymentDivMemberRecordService;
+    @Autowired
+    private UserOrderService userOrderService;
 
 
     @ApiOperation("学员训练数据统计列表")
@@ -77,6 +80,18 @@ public class IndexController extends BaseController {
         return succeed(tenantPersonStatService.indexSum(query));
     }
 
+    @ApiOperation("收入、支出汇总")
+    @PostMapping("incomeSummary")
+    public HttpResponseResult<PaymentDivMemberRecordWrapper.IndexIncomeSummaryDto>
+    incomeSummary(@RequestBody PaymentDivMemberRecordWrapper.IndexIncomeQuery query){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("获取用户信息失败");
+        }
+        query.setTenantId(sysUser.getTenantId());
+        return succeed(paymentDivMemberRecordService.incomeSummary(query));
+    }
+
     @ApiOperation("收入明细列表")
     @PostMapping("queryIncome")
     public HttpResponseResult<PageInfo<PaymentDivMemberRecordWrapper.IndexIncomeQueryDto>>
@@ -89,13 +104,31 @@ public class IndexController extends BaseController {
         return succeed(PageUtil.pageInfo(paymentDivMemberRecordService.queryIncome(QueryInfo.getPage(query), query)));
     }
 
-    @ApiOperation("订单详情")
-    @PostMapping("getOrderDetail")
-    public HttpResponseResult<PaymentDivMemberRecordWrapper.OrderDetailDto>getOrderDetail(String orderNo){
+    @ApiOperation("收入订单详情")
+    @PostMapping("getIncomeOrderDetail")
+    public HttpResponseResult<PaymentDivMemberRecordWrapper.OrderDetailDto> getIncomeOrderDetail(String orderNo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("获取用户信息失败");
+        }
+        return succeed(paymentDivMemberRecordService.getIncomeOrderDetail(orderNo,sysUser.getTenantId()));
+    }
+
+    @ApiOperation("支出明细列表")
+    @PostMapping("queryExpend")
+    public HttpResponseResult<PageInfo<PaymentDivMemberRecordWrapper.IndexIncomeQueryDto>>
+    queryExpend(@RequestBody PaymentDivMemberRecordWrapper.IndexIncomeQuery query){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             return failed("获取用户信息失败");
         }
-        return succeed(paymentDivMemberRecordService.getOrderDetail(orderNo,sysUser.getTenantId()));
+        query.setTenantId(sysUser.getTenantId());
+        return succeed(PageUtil.pageInfo(userOrderService.queryExpend(QueryInfo.getPage(query), query)));
+    }
+
+    @ApiOperation("支出订单详情")
+    @PostMapping("getExpendOrderDetail")
+    public HttpResponseResult<PaymentDivMemberRecordWrapper.OrderDetailDto> getExpendOrderDetail(String orderNo){
+        return succeed(userOrderService.getExpendOrderDetail(orderNo));
     }
 }