Ver código fonte

用户律师需求开发

ldz 1 mês atrás
pai
commit
d5eec3ba7c

+ 4 - 3
alien-entity/src/main/java/shop/alien/entity/store/LawyerConsultationOrder.java

@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.Date;
 
 /**
@@ -39,8 +40,8 @@ public class LawyerConsultationOrder extends Model<LawyerConsultationOrder> {
     private Integer lawyerUserId;
 
     @ApiModelProperty(value = "法律问题场景ID")
-    @TableField("problem_scenar_id")
-    private Integer problemScenarId;
+    @TableField("problem_scenario_id")
+    private Integer problemScenarioId;
 
     @ApiModelProperty(value = "问题描述")
     @TableField("problem_description")
@@ -48,7 +49,7 @@ public class LawyerConsultationOrder extends Model<LawyerConsultationOrder> {
 
     @ApiModelProperty(value = "订单金额,单位分")
     @TableField("order_amount")
-    private Integer orderAmount;
+    private BigDecimal orderAmount;
 
     @ApiModelProperty(value = "咨询费用,单位分")
     @TableField("consultation_fee")

+ 1 - 1
alien-entity/src/main/resources/mapper/LawyerConsultationOrderMapper.xml

@@ -8,7 +8,7 @@
         <result column="order_number" property="orderNumber" />
         <result column="client_user_id" property="clientUserId" />
         <result column="lawyer_user_id" property="lawyerUserId" />
-        <result column="problem_scenar_id" property="problemScenarId" />
+        <result column="problem_scenario_id" property="problemScenarioId" />
         <result column="problem_description" property="problemDescription" />
         <result column="order_amount" property="orderAmount" />
         <result column="consultation_fee" property="consultationFee" />

+ 63 - 0
alien-store/src/main/java/shop/alien/store/controller/LawyerConsultationOrderController.java

@@ -11,6 +11,7 @@ import shop.alien.entity.store.vo.LawyerConsultationOrderVO;
 import shop.alien.store.service.LawyerConsultationOrderService;
 import shop.alien.util.myBaticsPlus.QueryBuilder;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -144,5 +145,67 @@ public class LawyerConsultationOrderController {
                 .page(consultationOrderService);
         return R.data(pageResult);
     }
+
+    @ApiOperation("开始咨询律师")
+    @ApiOperationSupport(order = 8)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "lawyerId", value = "律师ID", dataType = "Integer", paramType = "query", required = true),
+            @ApiImplicitParam(name = "question", value = "咨询问题(可选)", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "sessionId", value = "关联的AI会话ID(可选)", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "clientUserId", value = "客户端用户ID(可选)", dataType = "Integer", paramType = "query"),
+            @ApiImplicitParam(name = "problemScenarId", value = "法律问题场景ID(可选)", dataType = "Integer", paramType = "query")
+    })
+    @PostMapping("/start")
+    public R<Map<String, Object>> startConsultation(
+            @RequestParam Integer lawyerId,
+            @RequestParam(required = false) String question,
+            @RequestParam(required = false) String sessionId,
+            @RequestParam(required = false) Integer clientUserId,
+            @RequestParam(required = false) Integer problemScenarId) {
+        log.info("LawyerConsultationOrderController.startConsultation?lawyerId={},question={},sessionId={},clientUserId={},problemScenarId={}",
+                lawyerId, question, sessionId, clientUserId, problemScenarId);
+        return consultationOrderService.startConsultation(lawyerId, question, sessionId, clientUserId, problemScenarId);
+    }
+
+
+
+    @ApiOperation("立即咨询")
+    @ApiOperationSupport(order = 9)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "clientUserId", value = "客户端用户ID", dataType = "Integer", paramType = "query"),
+            @ApiImplicitParam(name = "lawyerUserId", value = "律师用户ID", dataType = "Integer", paramType = "query"),
+            @ApiImplicitParam(name = "problemScenarioId", value = "法律问题场景ID", dataType = "Integer", paramType = "query"),
+            @ApiImplicitParam(name = "problemDescription", value = "问题描述", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "orderAmount", value = "订单金额,单位分", dataType = "Decimal", paramType = "query"),
+//            @ApiImplicitParam(name = "lawyerName", value = "律师姓名(支持模糊查询,关联查询)", dataType = "String", paramType = "query"),
+//            @ApiImplicitParam(name = "consultationFee", value = "咨询费用,单位分", dataType = "Integer", paramType = "query"),
+//            @ApiImplicitParam(name = "startTime", value = "咨询开始时间", dataType = "Date", paramType = "query"),
+//            @ApiImplicitParam(name = "endTime", value = "咨询结束时间", dataType = "Date", paramType = "query"),
+//            @ApiImplicitParam(name = "validityPeriod", value = "订单有效期", dataType = "Date", paramType = "query"),
+//            @ApiImplicitParam(name = "orderStatus", value = "订单状态, 0:待支付, 1:已支付, 2:进行中, 3:已完成, 4:已取消", dataType = "Integer", paramType = "query"),
+//            @ApiImplicitParam(name = "paymentStatus", value = "支付状态, 0:未支付, 1:已支付", dataType = "Integer", paramType = "query"),
+    })
+    @PostMapping("/consultNow")
+    public R<LawyerConsultationOrder> startConsultation(Integer clientUserId,Integer lawyerUserId,Integer problemScenarioId ,String problemDescription , BigDecimal orderAmount) {
+        log.info("LawyerConsultationOrderController.consultNow?clientUserId={},lawyerUserId={},problemScenarioId={},problemScenarioId={},orderAmount{}",
+                clientUserId, lawyerUserId, problemScenarioId, problemDescription, orderAmount);
+        return consultationOrderService.consultNow(clientUserId, lawyerUserId, problemScenarioId, problemDescription, orderAmount);
+    }
+
+
+    @ApiOperation("是否支付成功更改订单表状态")
+    @ApiOperationSupport(order = 10)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "律师订单表id", dataType = "Integer", paramType = "query", required = true),
+            @ApiImplicitParam(name = "paymentStatus", value = "支付状态, 0:未支付, 1:已支付", dataType = "Integer", paramType = "query", required = true),
+            @ApiImplicitParam(name = "orderStatus", value = "订单状态, 0:待支付, 1:已支付, 2:进行中, 3:已完成, 4:已取消", dataType = "Integer", paramType = "query"),
+    })
+    @PostMapping("/payStatus")
+    public R<LawyerConsultationOrder> payStatus(Integer id,Integer paymentStatus,Integer orderStatus) {
+        log.info("LawyerConsultationOrderController.consultNow?id{},paymentStatus{},orderStatus{}",
+               id, paymentStatus, orderStatus);
+        return consultationOrderService.payStatus(id, paymentStatus, orderStatus);
+    }
+
 }
 

+ 20 - 0
alien-store/src/main/java/shop/alien/store/service/LawyerConsultationOrderService.java

@@ -6,6 +6,9 @@ import shop.alien.entity.result.R;
 import shop.alien.entity.store.LawyerConsultationOrder;
 import shop.alien.entity.store.vo.LawyerConsultationOrderVO;
 
+import java.math.BigDecimal;
+import java.util.Map;
+
 /**
  * 咨询订单 服务类
  *
@@ -52,5 +55,22 @@ public interface LawyerConsultationOrderService extends IService<LawyerConsultat
      * @return R<Boolean>
      */
     R<Boolean> deleteConsultationOrder(Integer id);
+
+    /**
+     * 开始咨询律师
+     *
+     * @param lawyerId        律师ID
+     * @param question        咨询问题(可选)
+     * @param sessionId       关联的AI会话ID(可选)
+     * @param clientUserId    客户端用户ID(可选)
+     * @param problemScenarId 法律问题场景ID(可选)
+     * @return R<Map<String, Object>>
+     */
+    R<Map<String, Object>> startConsultation(Integer lawyerId, String question, String sessionId, Integer clientUserId, Integer problemScenarId);
+
+
+    R<LawyerConsultationOrder> consultNow(Integer clientUserId,Integer lawyerUserId,Integer problemScenarioId ,String problemDescription , BigDecimal orderAmount);
+
+    R<LawyerConsultationOrder> payStatus(Integer id,Integer paymentStatus,Integer orderStatus);
 }
 

+ 91 - 9
alien-store/src/main/java/shop/alien/store/service/impl/LawyerConsultationOrderServiceImpl.java

@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.math.RandomUtils;
+import org.apache.commons.lang.time.DateUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.beans.BeanUtils;
@@ -18,6 +20,8 @@ import shop.alien.mapper.LawyerConsultationOrderMapper;
 import shop.alien.store.service.LawyerConsultationOrderService;
 import shop.alien.store.service.LawyerUserService;
 
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -74,10 +78,10 @@ public class LawyerConsultationOrderServiceImpl extends ServiceImpl<LawyerConsul
         }
         queryWrapper.orderByDesc(LawyerConsultationOrder::getCreatedTime);
         IPage<LawyerConsultationOrder> pageResult = this.page(page, queryWrapper);
-        
+
         // 轉換為VO並填充律師信息
         IPage<LawyerConsultationOrderVO> voPage = convertToVO(pageResult);
-        
+
         return R.data(voPage);
     }
 
@@ -87,19 +91,19 @@ public class LawyerConsultationOrderServiceImpl extends ServiceImpl<LawyerConsul
     private IPage<LawyerConsultationOrderVO> convertToVO(IPage<LawyerConsultationOrder> pageResult) {
         // 創建VO分頁對象
         Page<LawyerConsultationOrderVO> voPage = new Page<>(pageResult.getCurrent(), pageResult.getSize(), pageResult.getTotal());
-        
+
         List<LawyerConsultationOrder> records = pageResult.getRecords();
         if (records == null || records.isEmpty()) {
             voPage.setRecords(Collections.emptyList());
             return voPage;
         }
-        
+
         // 收集所有律師ID
         Set<Integer> lawyerUserIds = records.stream()
                 .map(LawyerConsultationOrder::getLawyerUserId)
                 .filter(id -> id != null)
                 .collect(Collectors.toSet());
-        
+
         // 批量查詢律師信息
         Map<Integer, LawyerUser> lawyerMap = new HashMap<>();
         if (!lawyerUserIds.isEmpty()) {
@@ -112,7 +116,7 @@ public class LawyerConsultationOrderServiceImpl extends ServiceImpl<LawyerConsul
                         .collect(Collectors.toMap(LawyerUser::getId, lawyer -> lawyer, (k1, k2) -> k1));
             }
         }
-        
+
         // 轉換為VO並填充律師信息
         final Map<Integer, LawyerUser> finalLawyerMap = lawyerMap;
         List<LawyerConsultationOrderVO> voList = records.stream()
@@ -120,7 +124,7 @@ public class LawyerConsultationOrderServiceImpl extends ServiceImpl<LawyerConsul
                     LawyerConsultationOrderVO vo = new LawyerConsultationOrderVO();
                     // 複製訂單基本信息
                     BeanUtils.copyProperties(order, vo);
-                    
+
                     // 填充律師信息
                     LawyerUser lawyer = finalLawyerMap.get(order.getLawyerUserId());
                     if (lawyer != null) {
@@ -143,11 +147,11 @@ public class LawyerConsultationOrderServiceImpl extends ServiceImpl<LawyerConsul
                         vo.setNickName(lawyer.getNickName());
                         vo.setPersonalIntroduction(lawyer.getPersonalIntroduction());
                     }
-                    
+
                     return vo;
                 })
                 .collect(Collectors.toList());
-        
+
         voPage.setRecords(voList);
         return voPage;
     }
@@ -181,5 +185,83 @@ public class LawyerConsultationOrderServiceImpl extends ServiceImpl<LawyerConsul
         }
         return R.fail("删除失败");
     }
+
+    @Override
+    public R<Map<String, Object>> startConsultation(Integer lawyerId, String question, String sessionId, Integer clientUserId, Integer problemScenarId) {
+        log.info("LawyerConsultationOrderServiceImpl.startConsultation?lawyerId={},question={},sessionId={},clientUserId={},problemScenarId={}",
+                lawyerId, question, sessionId, clientUserId, problemScenarId);
+
+        // 创建咨询订单
+        LawyerConsultationOrder order = new LawyerConsultationOrder();
+        order.setLawyerUserId(lawyerId);
+        order.setClientUserId(clientUserId);
+        order.setProblemScenarioId(problemScenarId);
+        order.setProblemDescription(question);
+        order.setOrderStatus(0);  // 待支付
+        order.setPaymentStatus(0);  // 未支付
+
+        boolean saved = this.save(order);
+        if (!saved) {
+            return R.fail("创建咨询订单失败");
+        }
+
+        Map<String, Object> result = new HashMap<>();
+        result.put("consultationId", order.getId());
+        result.put("lawyerId", lawyerId);
+        result.put("status", "pending");  // pending(待响应), active(进行中), closed(已结束)
+        result.put("createTime", order.getCreatedTime() != null ?
+                new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(order.getCreatedTime()) : "");
+
+        return R.data(result);
+    }
+
+
+    @Override
+    public R<LawyerConsultationOrder> consultNow(Integer clientUserId, Integer lawyerUserId, Integer problemScenarioId, String problemDescription, BigDecimal orderAmount) {
+        log.info("LawyerConsultationOrderServiceImpl.consultNow?clientUserId={},lawyerUserId={},problemScenarioId={},problemDescription={},orderAmount={}",
+                clientUserId, lawyerUserId, problemScenarioId, problemDescription, orderAmount);
+
+        LawyerConsultationOrder order = new LawyerConsultationOrder();
+        order.setClientUserId(clientUserId);
+        order.setLawyerUserId(lawyerUserId);
+        order.setProblemScenarioId(problemScenarioId);
+        order.setProblemDescription(problemDescription);
+        order.setOrderAmount(orderAmount);
+        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);
+        //订单编号想要LAW+年月日(8位数字)+随机5位数字这种格式的
+        String orderNumber = "LAW" + new SimpleDateFormat("yyyyMMdd").format(new Date()) + String.format("%05d", RandomUtils.nextInt(100000));
+        order.setOrderNumber(orderNumber);
+        boolean result = this.save(order);
+        if (result) {
+            return R.data(order);
+        }
+        return R.fail("新增失败");
+    }
+
+
+    @Override
+    public R<LawyerConsultationOrder> payStatus(Integer id, Integer paymentStatus, Integer orderStatus) {
+        log.info("LawyerConsultationOrderServiceImpl.payStatus?id={},paymentStatus={},orderStatus={}",
+                id, paymentStatus, orderStatus);
+                LawyerConsultationOrder order = new LawyerConsultationOrder();
+                order.setId(id);
+                order.setPaymentStatus(paymentStatus);
+                order.setOrderStatus(orderStatus);
+                order.setUpdatedTime(new Date());
+                order.setDeleteFlag(0);
+                order.setPaymentTime(new Date());
+                boolean result = this.updateById(order);
+                if (result) {
+                    return R.data(order);
+                }
+                return R.fail("失败");
+    }
+
 }