|
@@ -21,6 +21,7 @@ import shop.alien.entity.store.LawyerUser;
|
|
|
import shop.alien.entity.store.dto.LawyerConsultationOrderDto;
|
|
import shop.alien.entity.store.dto.LawyerConsultationOrderDto;
|
|
|
import shop.alien.entity.store.dto.PayStatusRequest;
|
|
import shop.alien.entity.store.dto.PayStatusRequest;
|
|
|
import shop.alien.entity.store.vo.LawyerConsultationOrderVO;
|
|
import shop.alien.entity.store.vo.LawyerConsultationOrderVO;
|
|
|
|
|
+import shop.alien.entity.store.vo.OrderRevenueVO;
|
|
|
import shop.alien.lawyer.service.LawyerConsultationOrderService;
|
|
import shop.alien.lawyer.service.LawyerConsultationOrderService;
|
|
|
import shop.alien.lawyer.service.LawyerUserService;
|
|
import shop.alien.lawyer.service.LawyerUserService;
|
|
|
import shop.alien.lawyer.service.OrderExpirationService;
|
|
import shop.alien.lawyer.service.OrderExpirationService;
|
|
@@ -30,6 +31,9 @@ import shop.alien.mapper.LawyerServiceAreaMapper;
|
|
|
import shop.alien.mapper.LawyerUserMapper;
|
|
import shop.alien.mapper.LawyerUserMapper;
|
|
|
import shop.alien.util.common.constant.LawyerStatusEnum;
|
|
import shop.alien.util.common.constant.LawyerStatusEnum;
|
|
|
|
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
|
|
+import java.math.RoundingMode;
|
|
|
|
|
+
|
|
|
import java.text.SimpleDateFormat;
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.ZoneId;
|
|
import java.time.ZoneId;
|
|
@@ -910,6 +914,144 @@ public class LawyerConsultationOrderServiceImpl extends ServiceImpl<LawyerConsul
|
|
|
return R.success("可以咨询该律师");
|
|
return R.success("可以咨询该律师");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 获取律师订单收益统计
|
|
|
|
|
+ * <p>
|
|
|
|
|
+ * 统计三个维度的收益数据:
|
|
|
|
|
+ * 1. 全部收益:所有已支付订单的订单总数和收益合计
|
|
|
|
|
+ * 2. 进行中:订单状态=2(进行中)且已支付的订单总数和收益合计
|
|
|
|
|
+ * 3. 已完成:订单状态=3(已完成)且已支付的订单总数和收益合计
|
|
|
|
|
+ * </p>
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param lawyerUserId 律师用户ID
|
|
|
|
|
+ * @return 订单收益统计信息
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public R<Map<String, Object>> getOrderIncome(Integer lawyerUserId) {
|
|
|
|
|
+ log.info("LawyerConsultationOrderServiceImpl.getOrderIncome?lawyerUserId={}", lawyerUserId);
|
|
|
|
|
+
|
|
|
|
|
+ // 参数校验
|
|
|
|
|
+ if (lawyerUserId == null) {
|
|
|
|
|
+ log.warn("查询订单收益失败:律师用户ID为空");
|
|
|
|
|
+ return R.fail("律师用户ID不能为空");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ Map<String, Object> resultMap = new HashMap<>();
|
|
|
|
|
+ OrderRevenueVO revenueVO = new OrderRevenueVO();
|
|
|
|
|
+
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 构建查询条件:查询已支付的订单(paymentStatus = 1)
|
|
|
|
|
+ LambdaQueryWrapper<LawyerConsultationOrder> allRevenueWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ allRevenueWrapper.eq(LawyerConsultationOrder::getLawyerUserId, lawyerUserId)
|
|
|
|
|
+ .eq(LawyerConsultationOrder::getPaymentStatus, 1) // 已支付
|
|
|
|
|
+ .eq(LawyerConsultationOrder::getDeleteFlag, 0);
|
|
|
|
|
+
|
|
|
|
|
+ // 查询全部已支付订单的统计
|
|
|
|
|
+ List<LawyerConsultationOrder> allPaidOrders = consultationOrderMapper.selectList(allRevenueWrapper);
|
|
|
|
|
+ long allOrderCount = allPaidOrders.size();
|
|
|
|
|
+ long allRevenue = allPaidOrders.stream()
|
|
|
|
|
+ .filter(order -> order.getOrderAmount() != null)
|
|
|
|
|
+ .mapToLong(LawyerConsultationOrder::getOrderAmount)
|
|
|
|
|
+ .sum();
|
|
|
|
|
+
|
|
|
|
|
+ long consultationFee = allPaidOrders.stream()
|
|
|
|
|
+ .filter(order -> order.getConsultationFee() != null)
|
|
|
|
|
+ .mapToLong(LawyerConsultationOrder::getConsultationFee)
|
|
|
|
|
+ .sum();
|
|
|
|
|
+
|
|
|
|
|
+ revenueVO.setAllOrderCount(allOrderCount);
|
|
|
|
|
+ revenueVO.setAllRevenue(allRevenue-consultationFee);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ // 查询进行中订单的统计(orderStatus = 2 且已支付)
|
|
|
|
|
+ LambdaQueryWrapper<LawyerConsultationOrder> inProgressWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ inProgressWrapper.eq(LawyerConsultationOrder::getLawyerUserId, lawyerUserId)
|
|
|
|
|
+ .eq(LawyerConsultationOrder::getOrderStatus, LawyerStatusEnum.INPROGRESS.getStatus()) // 2:进行中
|
|
|
|
|
+ .eq(LawyerConsultationOrder::getPaymentStatus, 1) // 已支付
|
|
|
|
|
+ .eq(LawyerConsultationOrder::getDeleteFlag, 0);
|
|
|
|
|
+
|
|
|
|
|
+ List<LawyerConsultationOrder> inProgressOrders = consultationOrderMapper.selectList(inProgressWrapper);
|
|
|
|
|
+ long inProgressOrderCount = inProgressOrders.size();
|
|
|
|
|
+
|
|
|
|
|
+ long inProgressRevenue = inProgressOrders.stream()
|
|
|
|
|
+ .filter(order -> order.getOrderAmount() != null)
|
|
|
|
|
+ .mapToLong(LawyerConsultationOrder::getOrderAmount)
|
|
|
|
|
+ .sum();
|
|
|
|
|
+
|
|
|
|
|
+ long inProgressFee = inProgressOrders.stream()
|
|
|
|
|
+ .filter(order -> order.getConsultationFee() != null)
|
|
|
|
|
+ .mapToLong(LawyerConsultationOrder::getConsultationFee)
|
|
|
|
|
+ .sum();
|
|
|
|
|
+
|
|
|
|
|
+ revenueVO.setInProgressOrderCount(inProgressOrderCount);
|
|
|
|
|
+ revenueVO.setInProgressRevenue(inProgressRevenue-inProgressFee);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ // 查询已完成订单的统计(orderStatus = 3 且已支付)
|
|
|
|
|
+ LambdaQueryWrapper<LawyerConsultationOrder> completedWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ completedWrapper.eq(LawyerConsultationOrder::getLawyerUserId, lawyerUserId)
|
|
|
|
|
+ .eq(LawyerConsultationOrder::getOrderStatus, LawyerStatusEnum.COMPLETE.getStatus()) // 3:已完成
|
|
|
|
|
+ .eq(LawyerConsultationOrder::getPaymentStatus, 1) // 已支付
|
|
|
|
|
+ .eq(LawyerConsultationOrder::getDeleteFlag, 0);
|
|
|
|
|
+
|
|
|
|
|
+ List<LawyerConsultationOrder> completedOrders = consultationOrderMapper.selectList(completedWrapper);
|
|
|
|
|
+ long completedOrderCount = completedOrders.size();
|
|
|
|
|
+ long completedRevenue = completedOrders.stream()
|
|
|
|
|
+ .filter(order -> order.getOrderAmount() != null)
|
|
|
|
|
+ .mapToLong(LawyerConsultationOrder::getOrderAmount)
|
|
|
|
|
+ .sum();
|
|
|
|
|
+
|
|
|
|
|
+ long completedFee = completedOrders.stream()
|
|
|
|
|
+ .filter(order -> order.getConsultationFee() != null)
|
|
|
|
|
+ .mapToLong(LawyerConsultationOrder::getConsultationFee)
|
|
|
|
|
+ .sum();
|
|
|
|
|
+
|
|
|
|
|
+ revenueVO.setCompletedOrderCount(completedOrderCount);
|
|
|
|
|
+ revenueVO.setCompletedRevenue(completedRevenue-completedFee);
|
|
|
|
|
+
|
|
|
|
|
+ // 构建返回结果
|
|
|
|
|
+ Map<String, Object> allRevenueMap = new HashMap<>();
|
|
|
|
|
+ allRevenueMap.put("orderCount", revenueVO.getAllOrderCount());
|
|
|
|
|
+ allRevenueMap.put("totalRevenue", revenueVO.getAllRevenue());
|
|
|
|
|
+ resultMap.put("allRevenue", allRevenueMap);
|
|
|
|
|
+
|
|
|
|
|
+ Map<String, Object> inProgressMap = new HashMap<>();
|
|
|
|
|
+ inProgressMap.put("orderCount", revenueVO.getInProgressOrderCount());
|
|
|
|
|
+ inProgressMap.put("totalRevenue", revenueVO.getInProgressRevenue());
|
|
|
|
|
+ resultMap.put("inProgress", inProgressMap);
|
|
|
|
|
+
|
|
|
|
|
+ Map<String, Object> completedMap = new HashMap<>();
|
|
|
|
|
+ completedMap.put("orderCount", revenueVO.getCompletedOrderCount());
|
|
|
|
|
+ completedMap.put("totalRevenue", revenueVO.getCompletedRevenue());
|
|
|
|
|
+ resultMap.put("completed", completedMap);
|
|
|
|
|
+
|
|
|
|
|
+ log.info("查询订单收益成功,律师ID={}, 全部订单数={}, 全部收益={}, 进行中订单数={}, 进行中收益={}, 已完成订单数={}, 已完成收益={}",
|
|
|
|
|
+ lawyerUserId, allOrderCount, allRevenue, inProgressOrderCount, inProgressRevenue,
|
|
|
|
|
+ completedOrderCount, completedRevenue);
|
|
|
|
|
+
|
|
|
|
|
+ return R.data(resultMap);
|
|
|
|
|
+
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("查询订单收益失败,律师ID={}", lawyerUserId, e);
|
|
|
|
|
+ return R.fail("查询订单收益失败:" + e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 格式化收益金额(分转元)
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param revenueInCents 收益金额(单位:分)
|
|
|
|
|
+ * @return 格式化后的金额字符串(单位:元)
|
|
|
|
|
+ */
|
|
|
|
|
+ private String formatRevenue(long revenueInCents) {
|
|
|
|
|
+ if (revenueInCents == 0) {
|
|
|
|
|
+ return "0";
|
|
|
|
|
+ }
|
|
|
|
|
+ BigDecimal revenue = new BigDecimal(revenueInCents);
|
|
|
|
|
+ BigDecimal revenueInYuan = revenue.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
|
|
|
|
|
+ return revenueInYuan.toString();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|