소스 검색

立即咨询接口迁移

zhangchen 3 주 전
부모
커밋
17c4204ef4
1개의 변경된 파일117개의 추가작업 그리고 33개의 파일을 삭제
  1. 117 33
      alien-lawyer/src/main/java/shop/alien/lawyer/service/impl/LawyerConsultationOrderServiceImpl.java

+ 117 - 33
alien-lawyer/src/main/java/shop/alien/lawyer/service/impl/LawyerConsultationOrderServiceImpl.java

@@ -15,6 +15,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 import shop.alien.entity.result.R;
+import shop.alien.entity.store.LawFirm;
 import shop.alien.entity.store.LawyerConsultationOrder;
 import shop.alien.entity.store.LawyerServiceArea;
 import shop.alien.entity.store.LawyerUser;
@@ -25,10 +26,7 @@ import shop.alien.entity.store.vo.OrderRevenueVO;
 import shop.alien.lawyer.service.LawyerConsultationOrderService;
 import shop.alien.lawyer.service.LawyerUserService;
 import shop.alien.lawyer.service.OrderExpirationService;
-import shop.alien.mapper.LawyerConsultationOrderMapper;
-import shop.alien.mapper.LawyerExpertiseAreaMapper;
-import shop.alien.mapper.LawyerServiceAreaMapper;
-import shop.alien.mapper.LawyerUserMapper;
+import shop.alien.mapper.*;
 import shop.alien.util.common.constant.LawyerStatusEnum;
 
 import java.math.BigDecimal;
@@ -59,6 +57,8 @@ public class LawyerConsultationOrderServiceImpl extends ServiceImpl<LawyerConsul
     private final LawyerExpertiseAreaMapper lawyerExpertiseAreaMapper;
     private final OrderExpirationService orderExpirationService;
 //    private final AliApi aliApi;
+    private final LawFirmMapper lawFirmMapper;
+
 
     @Override
     public R<IPage<LawyerConsultationOrderVO>> getConsultationOrderList(int pageNum, int pageSize, String orderNumber,
@@ -397,45 +397,129 @@ public class LawyerConsultationOrderServiceImpl extends ServiceImpl<LawyerConsul
 
     @Override
     public R<LawyerConsultationOrderDto> consultNow(LawyerConsultationOrder lawyerConsultationOrder) {
-        log.info("LawyerConsultationOrderController.consultNow?lawyerConsultationOrder={}", lawyerConsultationOrder);
-//        Integer clientUserId= lawyerConsultationOrder.getClientUserId();
-//        Integer lawyerUserId= lawyerConsultationOrder.getLawyerUserId();
-//        List<LawyerConsultationOrder>  orderDto  =consultationOrderMapper.selectOrder(clientUserId, lawyerUserId);
-//        if (CollectionUtils.isNotEmpty(orderDto)){
-//            return R.fail("您已存在咨询该律师的订单");
-//        }
+        log.info("LawyerConsultationOrderServiceImpl.consultNow?lawyerConsultationOrder={}", lawyerConsultationOrder);
+
+        // 参数校验
+        if (lawyerConsultationOrder == null) {
+            log.warn("创建咨询订单失败:订单信息为空");
+            return R.fail("订单信息不能为空");
+        }
+
+        Integer clientUserId = lawyerConsultationOrder.getClientUserId();
+        Integer lawyerUserId = lawyerConsultationOrder.getLawyerUserId();
+        Integer orderAmount = lawyerConsultationOrder.getOrderAmount();
+
+        if (clientUserId == null || clientUserId <= 0) {
+            log.warn("创建咨询订单失败:客户端用户ID无效,clientUserId={}", clientUserId);
+            return R.fail("客户端用户ID不能为空");
+        }
+
+        if (lawyerUserId == null || lawyerUserId <= 0) {
+            log.warn("创建咨询订单失败:律师用户ID无效,lawyerUserId={}", lawyerUserId);
+            return R.fail("律师用户ID不能为空");
+        }
+
+        if (orderAmount == null || orderAmount <= 0) {
+            log.warn("创建咨询订单失败:订单金额无效,orderAmount={}", orderAmount);
+            return R.fail("订单金额不能为空且必须大于0");
+        }
+
+        // 创建订单DTO对象
         LawyerConsultationOrderDto order = new LawyerConsultationOrderDto();
-        order.setClientUserId(lawyerConsultationOrder.getClientUserId());
-        order.setLawyerUserId(lawyerConsultationOrder.getLawyerUserId());
+        Date now = new Date();
+
+        // 设置订单基本信息
+        order.setClientUserId(clientUserId);
+        order.setLawyerUserId(lawyerUserId);
         order.setProblemScenarioId(lawyerConsultationOrder.getProblemScenarioId());
         order.setProblemDescription(lawyerConsultationOrder.getProblemDescription());
-        order.setOrderAmount(lawyerConsultationOrder.getOrderAmount());
-        order.setOrderStatus(0);
-        order.setPaymentStatus(0);
-        order.setOrderTime(new Date());
-//        order.setValidityPeriod(DateUtils.addDays(new Date(), 7));
-        order.setCreatedTime(new Date());
-        order.setUpdatedTime(new Date());
-        order.setDeleteFlag(0);
+        order.setOrderAmount(orderAmount);
         order.setAlipayNo(lawyerConsultationOrder.getAlipayNo());
         order.setOrderStr(lawyerConsultationOrder.getOrderStr());
-        //订单编号想要LAW+年月日(8位数字)+随机5位数字这种格式的
-        String orderNumber = "LAW" + new SimpleDateFormat("yyyyMMdd").format(new Date()) + String.format("%05d", RandomUtils.nextInt(100000));
-        order.setOrderNumber(orderNumber);
-        int num = consultationOrderMapper.insertOrder(order);
-
+        order.setPlaceId(lawyerConsultationOrder.getPlaceId());
+
+        // 设置订单状态
+        order.setOrderStatus(0); // 待支付
+        order.setPaymentStatus(0); // 未支付
+        order.setOrderTime(now);
+        order.setCreatedTime(now);
+        order.setUpdatedTime(now);
+        order.setDeleteFlag(0);
 
-//        boolean result = this.save(order);
-//        if (result) {
-//            return R.data(order);
-//        }
-//        return R.fail("新增失败");
-        if (num > 0) {
+        // 生成订单编号:LAW + 年月日(8位数字)+ 随机5位数字
+        String orderNumber = generateOrderNumber();
+        order.setOrderNumber(orderNumber);
+        log.info("生成订单编号:orderNumber={}", orderNumber);
+
+        // 计算本单收益(平台收益)
+        Integer consultationFee = calculateConsultationFee(lawyerUserId, orderAmount);
+        order.setConsultationFee(consultationFee);
+        log.info("计算咨询费用:lawyerUserId={}, orderAmount={}, consultationFee={}",
+                lawyerUserId, orderAmount, consultationFee);
+
+        // 计算律师收益(订单金额-平台收益)
+        Integer lawyerEarnings =  orderAmount - consultationFee;
+        order.setLawyerEarnings(lawyerEarnings);
+        // 插入订单
+        int insertCount = consultationOrderMapper.insertOrder(order);
+        if (insertCount > 0) {
+            log.info("创建咨询订单成功:orderNumber={}, orderId={}", orderNumber, order.getId());
             return R.data(order);
+        } else {
+            log.error("创建咨询订单失败:数据库插入失败,orderNumber={}", orderNumber);
+            return R.fail("创建订单失败");
         }
-        return R.fail("新增失败");
     }
 
+    /**
+     * 生成订单编号
+     * <p>
+     * 格式:LAW + 年月日(8位数字)+ 随机5位数字
+     * 示例:LAW2025011512345
+     * </p>
+     *
+     * @return 订单编号
+     */
+    private String generateOrderNumber() {
+        String dateStr = new SimpleDateFormat("yyyyMMdd").format(new Date());
+        String randomStr = String.format("%05d", RandomUtils.nextInt(100000));
+        return "LAW" + dateStr + randomStr;
+    }
+
+    /**
+     * 计算咨询费用(本单收益)
+     * <p>
+     * 根据律所的平台佣金比例计算咨询费用
+     * 如果律师没有关联律所或律所没有设置佣金比例,则使用默认佣金比例3%
+     * </p>
+     *
+     * @param lawyerUserId 律师用户ID
+     * @param orderAmount  订单金额(单位:分)
+     * @return 咨询费用(单位:分)
+     */
+    private Integer calculateConsultationFee(Integer lawyerUserId, Integer orderAmount) {
+        // 默认佣金比例:3%
+        float defaultCommissionRate = 3.0F;
+        float commissionRate = defaultCommissionRate;
+
+        // 查询律师信息
+        LawyerUser lawyerUser = lawyerUserMapper.selectById(lawyerUserId);
+        if (lawyerUser != null) {
+            // 获取律所信息
+            Integer firmId = lawyerUser.getFirmId();
+            if (firmId != null && firmId > 0) {
+                LawFirm lawyerFirm = lawFirmMapper.selectById(firmId);
+                if (lawyerFirm != null && lawyerFirm.getPlatformCommissionRatio() != null
+                        && lawyerFirm.getPlatformCommissionRatio().floatValue() > 0) {
+                    commissionRate = lawyerFirm.getPlatformCommissionRatio().floatValue();
+                }
+            }
+        }
+
+        // 计算咨询费用:订单金额 * 佣金比例 / 100,四舍五入
+        int consultationFee = Math.round(orderAmount * commissionRate / 100);
+        return consultationFee;
+    }
 
     @Override
     public R<LawyerConsultationOrderDto> payStatus(PayStatusRequest request) {