Browse Source

维护数据库 problem_scenario_id 字段
维护推荐律师接口
维护查询历史纪录 添加查重

LuTong 1 month ago
parent
commit
6cfa3fa2ae
25 changed files with 240 additions and 76 deletions
  1. 2 2
      alien-entity/src/main/java/shop/alien/entity/store/LawyerAiInteractionLog.java
  2. 2 2
      alien-entity/src/main/java/shop/alien/entity/store/LawyerCommonQuestion.java
  3. 2 2
      alien-entity/src/main/java/shop/alien/entity/store/LawyerServiceArea.java
  4. 4 0
      alien-entity/src/main/java/shop/alien/entity/store/LawyerUser.java
  5. 2 2
      alien-entity/src/main/java/shop/alien/entity/store/vo/LawyerAiInteractionLogVo.java
  6. 1 1
      alien-entity/src/main/java/shop/alien/entity/store/vo/LawyerConsultationOrderVO.java
  7. 2 2
      alien-entity/src/main/java/shop/alien/mapper/LawyerAiInteractionLogMapper.java
  8. 1 1
      alien-entity/src/main/java/shop/alien/mapper/LawyerServiceAreaMapper.java
  9. 2 2
      alien-entity/src/main/resources/mapper/LawyerAiInteractionLogMapper.xml
  10. 2 2
      alien-entity/src/main/resources/mapper/LawyerCommonQuestionMapper.xml
  11. 2 2
      alien-entity/src/main/resources/mapper/LawyerConsultationOrderMapper.xml
  12. 2 2
      alien-entity/src/main/resources/mapper/LawyerServiceAreaMapper.xml
  13. 2 2
      alien-store/src/main/java/shop/alien/store/controller/LawyerAiInteractionLogController.java
  14. 2 2
      alien-store/src/main/java/shop/alien/store/controller/LawyerCommonQuestionController.java
  15. 7 7
      alien-store/src/main/java/shop/alien/store/controller/LawyerConsultationOrderController.java
  16. 2 2
      alien-store/src/main/java/shop/alien/store/controller/LawyerServiceAreaController.java
  17. 19 0
      alien-store/src/main/java/shop/alien/store/controller/LawyerUserController.java
  18. 2 2
      alien-store/src/main/java/shop/alien/store/service/LawyerAiInteractionLogService.java
  19. 2 2
      alien-store/src/main/java/shop/alien/store/service/LawyerCommonQuestionService.java
  20. 2 2
      alien-store/src/main/java/shop/alien/store/service/LawyerConsultationOrderService.java
  21. 11 0
      alien-store/src/main/java/shop/alien/store/service/LawyerUserService.java
  22. 5 5
      alien-store/src/main/java/shop/alien/store/service/impl/LawyerAiInteractionLogServiceImpl.java
  23. 5 5
      alien-store/src/main/java/shop/alien/store/service/impl/LawyerCommonQuestionServiceImpl.java
  24. 4 4
      alien-store/src/main/java/shop/alien/store/service/impl/LawyerConsultationOrderServiceImpl.java
  25. 153 23
      alien-store/src/main/java/shop/alien/store/service/impl/LawyerUserServiceImpl.java

+ 2 - 2
alien-entity/src/main/java/shop/alien/entity/store/LawyerAiInteractionLog.java

@@ -43,8 +43,8 @@ public class LawyerAiInteractionLog extends Model<LawyerAiInteractionLog> {
     private String responseText;
     private String responseText;
 
 
     @ApiModelProperty(value = "关联的法律问题场景ID")
     @ApiModelProperty(value = "关联的法律问题场景ID")
-    @TableField("problem_scenar_id")
-    private Integer problemScenarId;
+    @TableField("problem_scenario_id")
+    private Integer problemScenarioId;
 
 
     @ApiModelProperty(value = "交互时间")
     @ApiModelProperty(value = "交互时间")
     @TableField("interaction_time")
     @TableField("interaction_time")

+ 2 - 2
alien-entity/src/main/java/shop/alien/entity/store/LawyerCommonQuestion.java

@@ -39,8 +39,8 @@ public class LawyerCommonQuestion extends Model<LawyerCommonQuestion> {
     private Integer categoryType;
     private Integer categoryType;
 
 
     @ApiModelProperty(value = "关联法律问题场景ID")
     @ApiModelProperty(value = "关联法律问题场景ID")
-    @TableField("problem_scenar_id")
-    private Integer problemScenarId;
+    @TableField("problem_scenario_id")
+    private Integer problemScenarioId;
 
 
     @ApiModelProperty(value = "排序")
     @ApiModelProperty(value = "排序")
     @TableField("sort_order")
     @TableField("sort_order")

+ 2 - 2
alien-entity/src/main/java/shop/alien/entity/store/LawyerServiceArea.java

@@ -31,8 +31,8 @@ public class LawyerServiceArea extends Model<LawyerServiceArea> {
     private Integer lawyerUserId;
     private Integer lawyerUserId;
 
 
     @ApiModelProperty(value = "法律问题场景ID")
     @ApiModelProperty(value = "法律问题场景ID")
-    @TableField("problem_scenar_id")
-    private Integer problemScenarId;
+    @TableField("problem_scenario_id")
+    private Integer problemScenarioId;
 
 
     @ApiModelProperty(value = "排序, 数值越小越靠前")
     @ApiModelProperty(value = "排序, 数值越小越靠前")
     @TableField("sort_order")
     @TableField("sort_order")

+ 4 - 0
alien-entity/src/main/java/shop/alien/entity/store/LawyerUser.java

@@ -9,6 +9,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.Data;
 
 
 import java.util.Date;
 import java.util.Date;
+import java.util.List;
 
 
 /**
 /**
  * 律师用户
  * 律师用户
@@ -272,6 +273,9 @@ public class LawyerUser extends Model<LawyerUser> {
     @TableField("lawyer_expertise_area_id")
     @TableField("lawyer_expertise_area_id")
     private Integer lawyerExpertiseAreaId;
     private Integer lawyerExpertiseAreaId;
 
 
+    @ApiModelProperty(value = "法律问题场景")
+    @TableField(exist = false)
+    private List<LawyerLegalProblemScenario> lawyerLegalProblemScenarioList;
 
 
     @TableField(exist = false)
     @TableField(exist = false)
     private String userName;
     private String userName;

+ 2 - 2
alien-entity/src/main/java/shop/alien/entity/store/vo/LawyerAiInteractionLogVo.java

@@ -42,8 +42,8 @@ public class LawyerAiInteractionLogVo extends Model<LawyerAiInteractionLogVo> {
     private String responseText;
     private String responseText;
 
 
     @ApiModelProperty(value = "关联的法律问题场景ID")
     @ApiModelProperty(value = "关联的法律问题场景ID")
-    @TableField("problem_scenar_id")
-    private Integer problemScenarId;
+    @TableField("problem_scenario_id")
+    private Integer problemScenarioId;
 
 
     @ApiModelProperty(value = "交互时间")
     @ApiModelProperty(value = "交互时间")
     @TableField("interaction_time")
     @TableField("interaction_time")

+ 1 - 1
alien-entity/src/main/java/shop/alien/entity/store/vo/LawyerConsultationOrderVO.java

@@ -35,7 +35,7 @@ public class LawyerConsultationOrderVO implements Serializable {
     private Integer lawyerUserId;
     private Integer lawyerUserId;
 
 
     @ApiModelProperty(value = "法律问题场景ID")
     @ApiModelProperty(value = "法律问题场景ID")
-    private String problemScenarId;
+    private String problemScenarioId;
 
 
     @ApiModelProperty(value = "问题描述")
     @ApiModelProperty(value = "问题描述")
     private String problemDescription;
     private String problemDescription;

+ 2 - 2
alien-entity/src/main/java/shop/alien/mapper/LawyerAiInteractionLogMapper.java

@@ -27,7 +27,7 @@ public interface LawyerAiInteractionLogMapper extends BaseMapper<LawyerAiInterac
             "conversation_id, " +
             "conversation_id, " +
             "query_text, " +
             "query_text, " +
             "response_text, " +
             "response_text, " +
-            "problem_scenar_id, " +
+            "problem_scenario_id, " +
             "interaction_time, " +
             "interaction_time, " +
             "delete_flag, " +
             "delete_flag, " +
             "created_time, " +
             "created_time, " +
@@ -39,7 +39,7 @@ public interface LawyerAiInteractionLogMapper extends BaseMapper<LawyerAiInterac
             "#{conversationId}, " +
             "#{conversationId}, " +
             "#{queryText}, " +
             "#{queryText}, " +
             "#{responseText}, " +
             "#{responseText}, " +
-            "#{problemScenarId}, " +
+            "#{problemScenarioId}, " +
             "#{interactionTime}, " +
             "#{interactionTime}, " +
             "#{deleteFlag}, " +
             "#{deleteFlag}, " +
             "#{createdTime}, " +
             "#{createdTime}, " +

+ 1 - 1
alien-entity/src/main/java/shop/alien/mapper/LawyerServiceAreaMapper.java

@@ -25,7 +25,7 @@ import java.util.Map;
 public interface LawyerServiceAreaMapper extends BaseMapper<LawyerServiceArea> {
 public interface LawyerServiceAreaMapper extends BaseMapper<LawyerServiceArea> {
 
 
     @Select("select lsa.lawyer_user_id, llps.name from lawyer_service_area lsa \n" +
     @Select("select lsa.lawyer_user_id, llps.name from lawyer_service_area lsa \n" +
-            "left join lawyer_legal_problem_scenario llps on llps.id = lsa.problem_scenar_id \n" +
+            "left join lawyer_legal_problem_scenario llps on llps.id = lsa.problem_scenario_id \n" +
             " ${ew.customSqlSegment}")
             " ${ew.customSqlSegment}")
     List<Map<String, Object>> getLawyerLegalProblemScenarioList(@Param(Constants.WRAPPER) QueryWrapper<LawyerServiceArea> queryWrapper);
     List<Map<String, Object>> getLawyerLegalProblemScenarioList(@Param(Constants.WRAPPER) QueryWrapper<LawyerServiceArea> queryWrapper);
 }
 }

+ 2 - 2
alien-entity/src/main/resources/mapper/LawyerAiInteractionLogMapper.xml

@@ -9,7 +9,7 @@
         <result column="conversation_id" property="conversationId" />
         <result column="conversation_id" property="conversationId" />
         <result column="query_text" property="queryText" />
         <result column="query_text" property="queryText" />
         <result column="response_text" property="responseText" />
         <result column="response_text" property="responseText" />
-        <result column="problem_scenar_id" property="problemScenarId" />
+        <result column="problem_scenario_id" property="problemScenarioId" />
         <result column="interaction_time" property="interactionTime" />
         <result column="interaction_time" property="interactionTime" />
         <result column="delete_flag" property="deleteFlag" />
         <result column="delete_flag" property="deleteFlag" />
         <result column="created_time" property="createdTime" />
         <result column="created_time" property="createdTime" />
@@ -20,7 +20,7 @@
 
 
     <!-- 通用查询结果列 -->
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
     <sql id="Base_Column_List">
-        id, client_user_id, conversation_id, query_text, response_text, problem_scenar_id,
+        id, client_user_id, conversation_id, query_text, response_text, problem_scenario_id,
         interaction_time, delete_flag, created_time, created_user_id, updated_time, updated_user_id
         interaction_time, delete_flag, created_time, created_user_id, updated_time, updated_user_id
     </sql>
     </sql>
 
 

+ 2 - 2
alien-entity/src/main/resources/mapper/LawyerCommonQuestionMapper.xml

@@ -8,7 +8,7 @@
         <result column="question_text" property="questionText" />
         <result column="question_text" property="questionText" />
         <result column="answer_text" property="answerText" />
         <result column="answer_text" property="answerText" />
         <result column="category_type" property="categoryType" />
         <result column="category_type" property="categoryType" />
-        <result column="problem_scenar_id" property="problemScenarId" />
+        <result column="problem_scenario_id" property="problemScenarioId" />
         <result column="sort_order" property="sortOrder" />
         <result column="sort_order" property="sortOrder" />
         <result column="view_count" property="viewCount" />
         <result column="view_count" property="viewCount" />
         <result column="status" property="status" />
         <result column="status" property="status" />
@@ -21,7 +21,7 @@
 
 
     <!-- 通用查询结果列 -->
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
     <sql id="Base_Column_List">
-        id, question_text, answer_text, category_type, problem_scenar_id, sort_order,
+        id, question_text, answer_text, category_type, problem_scenario_id, sort_order,
         view_count, status, delete_flag, created_time, created_user_id, updated_time, updated_user_id
         view_count, status, delete_flag, created_time, created_user_id, updated_time, updated_user_id
     </sql>
     </sql>
 
 

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

@@ -32,7 +32,7 @@
 
 
     <!-- 通用查询结果列 -->
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
     <sql id="Base_Column_List">
-        id, order_number, client_user_id, lawyer_user_id, problem_scenar_id, problem_description,
+        id, order_number, client_user_id, lawyer_user_id, problem_scenario_id, problem_description,
         order_amount, consultation_fee, start_time, end_time, order_status, payment_status,
         order_amount, consultation_fee, start_time, end_time, order_status, payment_status,
         order_time,payment_time, validity_period, rating, comment, delete_flag, created_time,
         order_time,payment_time, validity_period, rating, comment, delete_flag, created_time,
         created_user_id, updated_time, updated_user_id, alipay_no, order_str
         created_user_id, updated_time, updated_user_id, alipay_no, order_str
@@ -45,7 +45,7 @@
         <result column="order_number" property="orderNumber" />
         <result column="order_number" property="orderNumber" />
         <result column="client_user_id" property="clientUserId" />
         <result column="client_user_id" property="clientUserId" />
         <result column="lawyer_user_id" property="lawyerUserId" />
         <result column="lawyer_user_id" property="lawyerUserId" />
-        <result column="problem_scenario_id" property="problemScenarId" />
+        <result column="problem_scenario_id" property="problemScenarioId" />
         <result column="problem_description" property="problemDescription" />
         <result column="problem_description" property="problemDescription" />
         <result column="order_amount" property="orderAmount" />
         <result column="order_amount" property="orderAmount" />
         <result column="consultation_fee" property="consultationFee" />
         <result column="consultation_fee" property="consultationFee" />

+ 2 - 2
alien-entity/src/main/resources/mapper/LawyerServiceAreaMapper.xml

@@ -6,7 +6,7 @@
     <resultMap id="BaseResultMap" type="shop.alien.entity.store.LawyerServiceArea">
     <resultMap id="BaseResultMap" type="shop.alien.entity.store.LawyerServiceArea">
         <id column="id" property="id" />
         <id column="id" property="id" />
         <result column="lawyer_user_id" property="lawyerUserId" />
         <result column="lawyer_user_id" property="lawyerUserId" />
-        <result column="problem_scenar_id" property="problemScenarId" />
+        <result column="problem_scenario_id" property="problemScenarioId" />
         <result column="sort_order" property="sortOrder" />
         <result column="sort_order" property="sortOrder" />
         <result column="status" property="status" />
         <result column="status" property="status" />
         <result column="delete_flag" property="deleteFlag" />
         <result column="delete_flag" property="deleteFlag" />
@@ -18,7 +18,7 @@
 
 
     <!-- 通用查询结果列 -->
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
     <sql id="Base_Column_List">
-        id, lawyer_user_id, problem_scenar_id, sort_order, status, delete_flag,
+        id, lawyer_user_id, problem_scenario_id, sort_order, status, delete_flag,
         created_time, created_user_id, updated_time, updated_user_id
         created_time, created_user_id, updated_time, updated_user_id
     </sql>
     </sql>
 
 

+ 2 - 2
alien-store/src/main/java/shop/alien/store/controller/LawyerAiInteractionLogController.java

@@ -72,7 +72,7 @@ public class LawyerAiInteractionLogController {
             @ApiImplicitParam(name = "id", value = "主键", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "id", value = "主键", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "clientUserId", value = "客户端用户ID", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "clientUserId", value = "客户端用户ID", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "conversationId", value = "会话ID(支持模糊查询)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "conversationId", value = "会话ID(支持模糊查询)", dataType = "String", paramType = "query"),
-            @ApiImplicitParam(name = "problemScenarId", value = "法律问题场景ID", dataType = "Integer", paramType = "query"),
+            @ApiImplicitParam(name = "problemScenarioId", value = "法律问题场景ID", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "createdTime_Start", value = "创建时间开始(范围查询)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "createdTime_Start", value = "创建时间开始(范围查询)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "createdTime_End", value = "创建时间结束(范围查询)", dataType = "String", paramType = "query")
             @ApiImplicitParam(name = "createdTime_End", value = "创建时间结束(范围查询)", dataType = "String", paramType = "query")
     })
     })
@@ -94,7 +94,7 @@ public class LawyerAiInteractionLogController {
             @ApiImplicitParam(name = "id", value = "主键", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "id", value = "主键", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "clientUserId", value = "客户端用户ID", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "clientUserId", value = "客户端用户ID", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "conversationId", value = "会话ID(支持模糊查询)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "conversationId", value = "会话ID(支持模糊查询)", dataType = "String", paramType = "query"),
-            @ApiImplicitParam(name = "problemScenarId", value = "法律问题场景ID", dataType = "Integer", paramType = "query"),
+            @ApiImplicitParam(name = "problemScenarioId", value = "法律问题场景ID", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "createdTime_Start", value = "创建时间开始(范围查询)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "createdTime_Start", value = "创建时间开始(范围查询)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "createdTime_End", value = "创建时间结束(范围查询)", dataType = "String", paramType = "query")
             @ApiImplicitParam(name = "createdTime_End", value = "创建时间结束(范围查询)", dataType = "String", paramType = "query")
     })
     })

+ 2 - 2
alien-store/src/main/java/shop/alien/store/controller/LawyerCommonQuestionController.java

@@ -73,7 +73,7 @@ public class LawyerCommonQuestionController {
             @ApiImplicitParam(name = "id", value = "主键", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "id", value = "主键", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "questionText", value = "问题文本(支持模糊查询)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "questionText", value = "问题文本(支持模糊查询)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "categoryType", value = "分类类型, 0:推荐, 1:常见问题", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "categoryType", value = "分类类型, 0:推荐, 1:常见问题", dataType = "Integer", paramType = "query"),
-            @ApiImplicitParam(name = "problemScenarId", value = "法律问题场景ID", dataType = "Integer", paramType = "query"),
+            @ApiImplicitParam(name = "problemScenarioId", value = "法律问题场景ID", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "status", value = "状态, 0:禁用, 1:启用", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "status", value = "状态, 0:禁用, 1:启用", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "createdTime_Start", value = "创建时间开始(范围查询)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "createdTime_Start", value = "创建时间开始(范围查询)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "createdTime_End", value = "创建时间结束(范围查询)", dataType = "String", paramType = "query")
             @ApiImplicitParam(name = "createdTime_End", value = "创建时间结束(范围查询)", dataType = "String", paramType = "query")
@@ -96,7 +96,7 @@ public class LawyerCommonQuestionController {
             @ApiImplicitParam(name = "id", value = "主键", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "id", value = "主键", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "questionText", value = "问题文本(支持模糊查询)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "questionText", value = "问题文本(支持模糊查询)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "categoryType", value = "分类类型, 0:推荐, 1:常见问题", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "categoryType", value = "分类类型, 0:推荐, 1:常见问题", dataType = "Integer", paramType = "query"),
-            @ApiImplicitParam(name = "problemScenarId", value = "法律问题场景ID", dataType = "Integer", paramType = "query"),
+            @ApiImplicitParam(name = "problemScenarioId", value = "法律问题场景ID", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "status", value = "状态, 0:禁用, 1:启用", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "status", value = "状态, 0:禁用, 1:启用", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "createdTime_Start", value = "创建时间开始(范围查询)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "createdTime_Start", value = "创建时间开始(范围查询)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "createdTime_End", value = "创建时间结束(范围查询)", dataType = "String", paramType = "query")
             @ApiImplicitParam(name = "createdTime_End", value = "创建时间结束(范围查询)", dataType = "String", paramType = "query")

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

@@ -102,7 +102,7 @@ public class LawyerConsultationOrderController {
             @ApiImplicitParam(name = "orderNumber", value = "订单编号(支持模糊查询)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "orderNumber", value = "订单编号(支持模糊查询)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "clientUserId", value = "客户端用户ID", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "clientUserId", value = "客户端用户ID", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "lawyerUserId", value = "律师用户ID", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "lawyerUserId", value = "律师用户ID", dataType = "Integer", paramType = "query"),
-            @ApiImplicitParam(name = "problemScenarId", value = "法律问题场景ID", dataType = "Integer", paramType = "query"),
+            @ApiImplicitParam(name = "problemScenarioId", value = "法律问题场景ID", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "orderStatus", value = "订单状态, 0:待支付, 1:已支付, 2:进行中, 3:已完成, 4:已取消", dataType = "Integer", 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"),
             @ApiImplicitParam(name = "paymentStatus", value = "支付状态, 0:未支付, 1:已支付", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "createdTime_Start", value = "创建时间开始(范围查询)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "createdTime_Start", value = "创建时间开始(范围查询)", dataType = "String", paramType = "query"),
@@ -127,7 +127,7 @@ public class LawyerConsultationOrderController {
             @ApiImplicitParam(name = "orderNumber", value = "订单编号(支持模糊查询)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "orderNumber", value = "订单编号(支持模糊查询)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "clientUserId", value = "客户端用户ID", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "clientUserId", value = "客户端用户ID", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "lawyerUserId", value = "律师用户ID", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "lawyerUserId", value = "律师用户ID", dataType = "Integer", paramType = "query"),
-            @ApiImplicitParam(name = "problemScenarId", value = "法律问题场景ID", dataType = "Integer", paramType = "query"),
+            @ApiImplicitParam(name = "problemScenarioId", value = "法律问题场景ID", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "orderStatus", value = "订单状态, 0:待支付, 1:已支付, 2:进行中, 3:已完成, 4:已取消", dataType = "Integer", 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"),
             @ApiImplicitParam(name = "paymentStatus", value = "支付状态, 0:未支付, 1:已支付", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "createdTime_Start", value = "创建时间开始(范围查询)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "createdTime_Start", value = "创建时间开始(范围查询)", dataType = "String", paramType = "query"),
@@ -155,7 +155,7 @@ public class LawyerConsultationOrderController {
             @ApiImplicitParam(name = "question", value = "咨询问题(可选)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "question", value = "咨询问题(可选)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "sessionId", value = "关联的AI会话ID(可选)", 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 = "clientUserId", value = "客户端用户ID(可选)", dataType = "Integer", paramType = "query"),
-            @ApiImplicitParam(name = "problemScenarId", value = "法律问题场景ID(可选)", dataType = "Integer", paramType = "query")
+            @ApiImplicitParam(name = "problemScenarioId", value = "法律问题场景ID(可选)", dataType = "Integer", paramType = "query")
     })
     })
     @PostMapping("/start")
     @PostMapping("/start")
     public R<Map<String, Object>> startConsultation(
     public R<Map<String, Object>> startConsultation(
@@ -163,10 +163,10 @@ public class LawyerConsultationOrderController {
             @RequestParam(required = false) String question,
             @RequestParam(required = false) String question,
             @RequestParam(required = false) String sessionId,
             @RequestParam(required = false) String sessionId,
             @RequestParam(required = false) Integer clientUserId,
             @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);
+            @RequestParam(required = false) Integer problemScenarioId) {
+        log.info("LawyerConsultationOrderController.startConsultation?lawyerId={},question={},sessionId={},clientUserId={},problemScenarioId={}",
+                lawyerId, question, sessionId, clientUserId, problemScenarioId);
+        return consultationOrderService.startConsultation(lawyerId, question, sessionId, clientUserId, problemScenarioId);
     }*/
     }*/
 
 
 
 

+ 2 - 2
alien-store/src/main/java/shop/alien/store/controller/LawyerServiceAreaController.java

@@ -70,7 +70,7 @@ public class LawyerServiceAreaController {
     @ApiImplicitParams({
     @ApiImplicitParams({
             @ApiImplicitParam(name = "id", value = "主键", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "id", value = "主键", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "lawyerUserId", value = "律师用户ID", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "lawyerUserId", value = "律师用户ID", dataType = "Integer", paramType = "query"),
-            @ApiImplicitParam(name = "problemScenarId", value = "法律问题场景ID", dataType = "Integer", paramType = "query"),
+            @ApiImplicitParam(name = "problemScenarioId", value = "法律问题场景ID", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "status", value = "状态, 0:禁用, 1:启用", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "status", value = "状态, 0:禁用, 1:启用", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "createdTime_Start", value = "创建时间开始(范围查询)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "createdTime_Start", value = "创建时间开始(范围查询)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "createdTime_End", value = "创建时间结束(范围查询)", dataType = "String", paramType = "query")
             @ApiImplicitParam(name = "createdTime_End", value = "创建时间结束(范围查询)", dataType = "String", paramType = "query")
@@ -91,7 +91,7 @@ public class LawyerServiceAreaController {
             @ApiImplicitParam(name = "size", value = "页容(默认10)", dataType = "int", paramType = "query"),
             @ApiImplicitParam(name = "size", value = "页容(默认10)", dataType = "int", paramType = "query"),
             @ApiImplicitParam(name = "id", value = "主键", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "id", value = "主键", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "lawyerUserId", value = "律师用户ID", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "lawyerUserId", value = "律师用户ID", dataType = "Integer", paramType = "query"),
-            @ApiImplicitParam(name = "problemScenarId", value = "法律问题场景ID", dataType = "Integer", paramType = "query"),
+            @ApiImplicitParam(name = "problemScenarioId", value = "法律问题场景ID", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "status", value = "状态, 0:禁用, 1:启用", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "status", value = "状态, 0:禁用, 1:启用", dataType = "Integer", paramType = "query"),
             @ApiImplicitParam(name = "createdTime_Start", value = "创建时间开始(范围查询)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "createdTime_Start", value = "创建时间开始(范围查询)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "createdTime_End", value = "创建时间结束(范围查询)", dataType = "String", paramType = "query")
             @ApiImplicitParam(name = "createdTime_End", value = "创建时间结束(范围查询)", dataType = "String", paramType = "query")

+ 19 - 0
alien-store/src/main/java/shop/alien/store/controller/LawyerUserController.java

@@ -169,5 +169,24 @@ public class LawyerUserController {
         log.info("LawyerUserController.getRecommendedLawyersBySession?sessionId={},messageId={}", sessionId, messageId);
         log.info("LawyerUserController.getRecommendedLawyersBySession?sessionId={},messageId={}", sessionId, messageId);
         return lawyerUserService.getRecommendedLawyersBySession(sessionId, messageId);
         return lawyerUserService.getRecommendedLawyersBySession(sessionId, messageId);
     }
     }
+
+    @ApiOperation("通过姓名模糊查询律师(并保存搜索历史)")
+    @ApiOperationSupport(order = 11)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "name", value = "律师姓名(支持模糊查询)", dataType = "String", paramType = "query", required = true),
+            @ApiImplicitParam(name = "page", value = "页码(默认1)", dataType = "int", paramType = "query"),
+            @ApiImplicitParam(name = "pageSize", value = "每页数量(默认10)", dataType = "int", paramType = "query"),
+            @ApiImplicitParam(name = "clientUserId", value = "客户端用户ID(可选,用于保存搜索历史)", dataType = "Integer", paramType = "query")
+    })
+    @GetMapping("/searchByName")
+    public R<IPage<LawyerUser>> searchLawyerByName(
+            @RequestParam String name,
+            @RequestParam(defaultValue = "1") int page,
+            @RequestParam(defaultValue = "10") int pageSize,
+            @RequestParam(required = false) Integer clientUserId) {
+        log.info("LawyerUserController.searchLawyerByName?name={},page={},pageSize={},clientUserId={}", name, page, pageSize, clientUserId);
+        return lawyerUserService.searchLawyerByName(name, page, pageSize, clientUserId);
+    }
+
 }
 }
 
 

+ 2 - 2
alien-store/src/main/java/shop/alien/store/service/LawyerAiInteractionLogService.java

@@ -23,11 +23,11 @@ public interface LawyerAiInteractionLogService extends IService<LawyerAiInteract
      * @param pageSize        页容
      * @param pageSize        页容
      * @param clientUserId    客户端用户ID
      * @param clientUserId    客户端用户ID
      * @param conversationId  会话ID
      * @param conversationId  会话ID
-     * @param problemScenarId 法律问题场景ID
+     * @param problemScenarioId 法律问题场景ID
      * @return IPage<LawyerAiInteractionLog>
      * @return IPage<LawyerAiInteractionLog>
      */
      */
     R<IPage<LawyerAiInteractionLog>> getAiInteractionLogList(int pageNum, int pageSize, Integer clientUserId,
     R<IPage<LawyerAiInteractionLog>> getAiInteractionLogList(int pageNum, int pageSize, Integer clientUserId,
-                                                        String conversationId, Integer problemScenarId);
+                                                        String conversationId, Integer problemScenarioId);
 
 
     /**
     /**
      * 根据会话ID查询交互日志列表
      * 根据会话ID查询交互日志列表

+ 2 - 2
alien-store/src/main/java/shop/alien/store/service/LawyerCommonQuestionService.java

@@ -23,12 +23,12 @@ public interface LawyerCommonQuestionService extends IService<LawyerCommonQuesti
      * @param pageSize        页容
      * @param pageSize        页容
      * @param questionText    问题文本
      * @param questionText    问题文本
      * @param categoryType    分类类型
      * @param categoryType    分类类型
-     * @param problemScenarId 法律问题场景ID
+     * @param problemScenarioId 法律问题场景ID
      * @param status          状态
      * @param status          状态
      * @return IPage<LawyerCommonQuestion>
      * @return IPage<LawyerCommonQuestion>
      */
      */
     R<IPage<LawyerCommonQuestion>> getCommonQuestionList(int pageNum, int pageSize, String questionText,
     R<IPage<LawyerCommonQuestion>> getCommonQuestionList(int pageNum, int pageSize, String questionText,
-                                                    Integer categoryType, Integer problemScenarId, Integer status);
+                                                    Integer categoryType, Integer problemScenarioId, Integer status);
 
 
     /**
     /**
      * 根据分类类型查询常见问题列表
      * 根据分类类型查询常见问题列表

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

@@ -64,10 +64,10 @@ public interface LawyerConsultationOrderService extends IService<LawyerConsultat
      * @param question        咨询问题(可选)
      * @param question        咨询问题(可选)
      * @param sessionId       关联的AI会话ID(可选)
      * @param sessionId       关联的AI会话ID(可选)
      * @param clientUserId    客户端用户ID(可选)
      * @param clientUserId    客户端用户ID(可选)
-     * @param problemScenarId 法律问题场景ID(可选)
+     * @param problemScenarioId 法律问题场景ID(可选)
      * @return R<Map<String, Object>>
      * @return R<Map<String, Object>>
      */
      */
-    //R<Map<String, Object>> startConsultation(Integer lawyerId, String question, String sessionId, Integer clientUserId, Integer problemScenarId);
+    //R<Map<String, Object>> startConsultation(Integer lawyerId, String question, String sessionId, Integer clientUserId, Integer problemScenarioId);
 
 
 
 
     R<LawyerConsultationOrderDto> consultNow(Integer clientUserId,Integer lawyerUserId,String problemScenarioId ,String problemDescription , BigDecimal orderAmount ,String alipayNo ,String orderStr);
     R<LawyerConsultationOrderDto> consultNow(Integer clientUserId,Integer lawyerUserId,String problemScenarioId ,String problemDescription , BigDecimal orderAmount ,String alipayNo ,String orderStr);

+ 11 - 0
alien-store/src/main/java/shop/alien/store/service/LawyerUserService.java

@@ -86,5 +86,16 @@ public interface LawyerUserService extends IService<LawyerUser> {
      * @return R<IPage<LawyerUser>>
      * @return R<IPage<LawyerUser>>
      */
      */
     R<IPage<LawyerUser>> getRecommendedLawyersBySession(String sessionId, Integer messageId);
     R<IPage<LawyerUser>> getRecommendedLawyersBySession(String sessionId, Integer messageId);
+
+    /**
+     * 通过姓名模糊查询律师(并保存搜索历史)
+     *
+     * @param name        律师姓名(支持模糊查询)
+     * @param page        页码
+     * @param pageSize    每页数量
+     * @param clientUserId 客户端用户ID(可选,用于保存搜索历史)
+     * @return R<IPage<LawyerUser>>
+     */
+    R<IPage<LawyerUser>> searchLawyerByName(String name, int page, int pageSize, Integer clientUserId);
 }
 }
 
 

+ 5 - 5
alien-store/src/main/java/shop/alien/store/service/impl/LawyerAiInteractionLogServiceImpl.java

@@ -34,9 +34,9 @@ public class LawyerAiInteractionLogServiceImpl extends ServiceImpl<LawyerAiInter
 
 
     @Override
     @Override
     public R<IPage<LawyerAiInteractionLog>> getAiInteractionLogList(int pageNum, int pageSize, Integer clientUserId,
     public R<IPage<LawyerAiInteractionLog>> getAiInteractionLogList(int pageNum, int pageSize, Integer clientUserId,
-                                                               String conversationId, Integer problemScenarId) {
-        log.info("LawyerAiInteractionLogServiceImpl.getAiInteractionLogList?pageNum={},pageSize={},clientUserId={},conversationId={},problemScenarId={}",
-                pageNum, pageSize, clientUserId, conversationId, problemScenarId);
+                                                               String conversationId, Integer problemScenarioId) {
+        log.info("LawyerAiInteractionLogServiceImpl.getAiInteractionLogList?pageNum={},pageSize={},clientUserId={},conversationId={},problemScenarioId={}",
+                pageNum, pageSize, clientUserId, conversationId, problemScenarioId);
         Page<LawyerAiInteractionLog> page = new Page<>(pageNum, pageSize);
         Page<LawyerAiInteractionLog> page = new Page<>(pageNum, pageSize);
         LambdaQueryWrapper<LawyerAiInteractionLog> queryWrapper = new LambdaQueryWrapper<>();
         LambdaQueryWrapper<LawyerAiInteractionLog> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(LawyerAiInteractionLog::getDeleteFlag, 0);
         queryWrapper.eq(LawyerAiInteractionLog::getDeleteFlag, 0);
@@ -46,8 +46,8 @@ public class LawyerAiInteractionLogServiceImpl extends ServiceImpl<LawyerAiInter
         if (StringUtils.hasText(conversationId)) {
         if (StringUtils.hasText(conversationId)) {
             queryWrapper.eq(LawyerAiInteractionLog::getConversationId, conversationId);
             queryWrapper.eq(LawyerAiInteractionLog::getConversationId, conversationId);
         }
         }
-        if (problemScenarId != null) {
-            queryWrapper.eq(LawyerAiInteractionLog::getProblemScenarId, problemScenarId);
+        if (problemScenarioId != null) {
+            queryWrapper.eq(LawyerAiInteractionLog::getProblemScenarioId, problemScenarioId);
         }
         }
         queryWrapper.orderByDesc(LawyerAiInteractionLog::getInteractionTime);
         queryWrapper.orderByDesc(LawyerAiInteractionLog::getInteractionTime);
         IPage<LawyerAiInteractionLog> pageResult = this.page(page, queryWrapper);
         IPage<LawyerAiInteractionLog> pageResult = this.page(page, queryWrapper);

+ 5 - 5
alien-store/src/main/java/shop/alien/store/service/impl/LawyerCommonQuestionServiceImpl.java

@@ -32,9 +32,9 @@ public class LawyerCommonQuestionServiceImpl extends ServiceImpl<LawyerCommonQue
 
 
     @Override
     @Override
     public R<IPage<LawyerCommonQuestion>> getCommonQuestionList(int pageNum, int pageSize, String questionText,
     public R<IPage<LawyerCommonQuestion>> getCommonQuestionList(int pageNum, int pageSize, String questionText,
-                                                           Integer categoryType, Integer problemScenarId, Integer status) {
-        log.info("LawyerCommonQuestionServiceImpl.getCommonQuestionList?pageNum={},pageSize={},questionText={},categoryType={},problemScenarId={},status={}",
-                pageNum, pageSize, questionText, categoryType, problemScenarId, status);
+                                                           Integer categoryType, Integer problemScenarioId, Integer status) {
+        log.info("LawyerCommonQuestionServiceImpl.getCommonQuestionList?pageNum={},pageSize={},questionText={},categoryType={},problemScenarioId={},status={}",
+                pageNum, pageSize, questionText, categoryType, problemScenarioId, status);
         Page<LawyerCommonQuestion> page = new Page<>(pageNum, pageSize);
         Page<LawyerCommonQuestion> page = new Page<>(pageNum, pageSize);
         LambdaQueryWrapper<LawyerCommonQuestion> queryWrapper = new LambdaQueryWrapper<>();
         LambdaQueryWrapper<LawyerCommonQuestion> queryWrapper = new LambdaQueryWrapper<>();
         queryWrapper.eq(LawyerCommonQuestion::getDeleteFlag, 0);
         queryWrapper.eq(LawyerCommonQuestion::getDeleteFlag, 0);
@@ -44,8 +44,8 @@ public class LawyerCommonQuestionServiceImpl extends ServiceImpl<LawyerCommonQue
         if (categoryType != null) {
         if (categoryType != null) {
             queryWrapper.eq(LawyerCommonQuestion::getCategoryType, categoryType);
             queryWrapper.eq(LawyerCommonQuestion::getCategoryType, categoryType);
         }
         }
-        if (problemScenarId != null) {
-            queryWrapper.eq(LawyerCommonQuestion::getProblemScenarId, problemScenarId);
+        if (problemScenarioId != null) {
+            queryWrapper.eq(LawyerCommonQuestion::getProblemScenarioId, problemScenarioId);
         }
         }
         if (status != null) {
         if (status != null) {
             queryWrapper.eq(LawyerCommonQuestion::getStatus, status);
             queryWrapper.eq(LawyerCommonQuestion::getStatus, status);

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

@@ -213,15 +213,15 @@ public class LawyerConsultationOrderServiceImpl extends ServiceImpl<LawyerConsul
     }
     }
 
 
     /*@Override
     /*@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);
+    public R<Map<String, Object>> startConsultation(Integer lawyerId, String question, String sessionId, Integer clientUserId, Integer problemScenarioId) {
+        log.info("LawyerConsultationOrderServiceImpl.startConsultation?lawyerId={},question={},sessionId={},clientUserId={},problemScenarioId={}",
+                lawyerId, question, sessionId, clientUserId, problemScenarioId);
 
 
         // 创建咨询订单
         // 创建咨询订单
         LawyerConsultationOrder order = new LawyerConsultationOrder();
         LawyerConsultationOrder order = new LawyerConsultationOrder();
         order.setLawyerUserId(lawyerId);
         order.setLawyerUserId(lawyerId);
         order.setClientUserId(clientUserId);
         order.setClientUserId(clientUserId);
-        order.setProblemScenarioId(problemScenarId);
+        order.setProblemScenarioId(problemScenarioId);
         order.setProblemDescription(question);
         order.setProblemDescription(question);
         order.setOrderStatus(0);  // 待支付
         order.setOrderStatus(0);  // 待支付
         order.setPaymentStatus(0);  // 未支付
         order.setPaymentStatus(0);  // 未支付

+ 153 - 23
alien-store/src/main/java/shop/alien/store/service/impl/LawyerUserServiceImpl.java

@@ -11,11 +11,16 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
 import shop.alien.entity.result.R;
 import shop.alien.entity.result.R;
+import shop.alien.entity.store.LawyerLegalProblemScenario;
 import shop.alien.entity.store.LawyerServiceArea;
 import shop.alien.entity.store.LawyerServiceArea;
 import shop.alien.entity.store.LawyerUser;
 import shop.alien.entity.store.LawyerUser;
+import shop.alien.entity.store.LawyerUserSearchHistory;
 import shop.alien.mapper.LawyerUserMapper;
 import shop.alien.mapper.LawyerUserMapper;
+import shop.alien.store.service.LawyerLegalProblemScenarioService;
 import shop.alien.store.service.LawyerServiceAreaService;
 import shop.alien.store.service.LawyerServiceAreaService;
+import shop.alien.store.service.LawyerUserSearchHistoryService;
 import shop.alien.store.service.LawyerUserService;
 import shop.alien.store.service.LawyerUserService;
+import shop.alien.util.myBaticsPlus.QueryBuilder;
 
 
 import java.util.*;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
@@ -34,6 +39,8 @@ public class LawyerUserServiceImpl extends ServiceImpl<LawyerUserMapper, LawyerU
 
 
     private final LawyerUserMapper lawyerUserMapper;
     private final LawyerUserMapper lawyerUserMapper;
     private final LawyerServiceAreaService lawyerServiceAreaService;
     private final LawyerServiceAreaService lawyerServiceAreaService;
+    private final LawyerUserSearchHistoryService userSearchHistoryService;
+    private final LawyerLegalProblemScenarioService lawyerLegalProblemScenarioService;
 
 
     @Override
     @Override
     public R<IPage<LawyerUser>> getLawyerUserList(int pageNum, int pageSize, String name, String phone, Integer status) {
     public R<IPage<LawyerUser>> getLawyerUserList(int pageNum, int pageSize, String name, String phone, Integer status) {
@@ -163,44 +170,114 @@ public class LawyerUserServiceImpl extends ServiceImpl<LawyerUserMapper, LawyerU
         // 构建查询条件
         // 构建查询条件
         QueryWrapper<LawyerUser> queryWrapper = new QueryWrapper<>();
         QueryWrapper<LawyerUser> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("delete_flag", 0)
         queryWrapper.eq("delete_flag", 0)
-                .eq("status", 1)  // 已启用
-                .eq("order_receiving_status", 1);  // 接单中
+                .eq("status", 1)
+                .eq("order_receiving_status", 1);
 
 
         // 分类筛选:通过律师服务领域关联表查询
         // 分类筛选:通过律师服务领域关联表查询
         if (categoryId != null) {
         if (categoryId != null) {
-            QueryWrapper<LawyerServiceArea> areaQuery = new QueryWrapper<>();
-            areaQuery.eq("problem_scenar_id", categoryId)
-                    .eq("delete_flag", 0)
-                    .eq("status", 1);
-            List<LawyerServiceArea> serviceAreas = lawyerServiceAreaService.list(areaQuery);
-            if (!serviceAreas.isEmpty()) {
-                List<Integer> lawyerIds = serviceAreas.stream()
-                        .map(LawyerServiceArea::getLawyerUserId)
-                        .distinct()
-                        .collect(Collectors.toList());
-                if (!lawyerIds.isEmpty()) {
-                    queryWrapper.in("id", lawyerIds);
-                } else {
-                    // 如果没有匹配的律师,返回空结果
-                    queryWrapper.eq("id", -1);
-                }
-            } else {
-                queryWrapper.eq("id", -1);
+            List<Integer> lawyerIds = getLawyerIdsByCategoryId(categoryId);
+            if (lawyerIds.isEmpty()) {
+                // 如果没有匹配的律师,返回空结果
+                return R.data(new Page<>(pageNum, pageSizeNum));
             }
             }
+            queryWrapper.in("id", lawyerIds);
         }
         }
 
 
         // 排序:优先推荐律师 -> 在线律师 -> 注册时间
         // 排序:优先推荐律师 -> 在线律师 -> 注册时间
-        queryWrapper.orderByDesc("is_recommended")  // 优先推荐律师(1在前,0在后)
-                .orderByDesc("is_online")  // 然后在线律师(1在前,0在后)
-                .orderByAsc("created_time");  // 最后按注册时间升序(最早注册的在前面)
+        queryWrapper.orderByDesc("is_recommended")
+                .orderByDesc("is_online")
+                .orderByAsc("created_time");
 
 
         // 分页查询
         // 分页查询
         Page<LawyerUser> pageObj = new Page<>(pageNum, pageSizeNum);
         Page<LawyerUser> pageObj = new Page<>(pageNum, pageSizeNum);
         IPage<LawyerUser> pageResult = this.page(pageObj, queryWrapper);
         IPage<LawyerUser> pageResult = this.page(pageObj, queryWrapper);
 
 
+        // 为每个律师设置关联的法律问题场景列表
+        if (pageResult.getRecords() != null && !pageResult.getRecords().isEmpty()) {
+            setLawyerScenarios(pageResult.getRecords());
+        }
+
         return R.data(pageResult);
         return R.data(pageResult);
     }
     }
 
 
+    /**
+     * 根据分类ID获取律师ID列表
+     */
+    private List<Integer> getLawyerIdsByCategoryId(Integer categoryId) {
+        QueryWrapper<LawyerServiceArea> areaQuery = new QueryWrapper<>();
+        areaQuery.eq("problem_scenario_id", categoryId)
+                .eq("delete_flag", 0)
+                .eq("status", 1)
+                .select("lawyer_user_id");
+        List<LawyerServiceArea> serviceAreas = lawyerServiceAreaService.list(areaQuery);
+        return serviceAreas.stream()
+                .map(LawyerServiceArea::getLawyerUserId)
+                .filter(Objects::nonNull)
+                .distinct()
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * 为律师列表设置关联的法律问题场景
+     */
+    private void setLawyerScenarios(List<LawyerUser> lawyers) {
+        List<Integer> lawyerIds = lawyers.stream()
+                .map(LawyerUser::getId)
+                .collect(Collectors.toList());
+
+        // 批量查询律师服务领域关联
+        QueryWrapper<LawyerServiceArea> areaQuery = new QueryWrapper<>();
+        areaQuery.in("lawyer_user_id", lawyerIds)
+                .eq("delete_flag", 0)
+                .eq("status", 1)
+                .orderByAsc("sort_order");
+        List<LawyerServiceArea> serviceAreas = lawyerServiceAreaService.list(areaQuery);
+
+        if (serviceAreas.isEmpty()) {
+            // 如果没有服务领域关联,设置空列表
+            lawyers.forEach(lawyer -> lawyer.setLawyerLegalProblemScenarioList(new ArrayList<>()));
+            return;
+        }
+
+        // 获取所有关联的法律问题场景ID
+        Set<Integer> scenarioIds = serviceAreas.stream()
+                .map(LawyerServiceArea::getProblemScenarioId)
+                .filter(Objects::nonNull)
+                .collect(Collectors.toSet());
+
+        // 批量查询法律问题场景
+        Map<Integer, LawyerLegalProblemScenario> scenarioMap = getScenarioMap(scenarioIds);
+
+        // 按律师ID分组服务领域(已按sort_order排序)
+        Map<Integer, List<LawyerServiceArea>> lawyerAreaMap = serviceAreas.stream()
+                .collect(Collectors.groupingBy(LawyerServiceArea::getLawyerUserId));
+
+        // 为每个律师设置关联的法律问题场景列表
+        lawyers.forEach(lawyer -> {
+            List<LawyerLegalProblemScenario> scenarioList = lawyerAreaMap.getOrDefault(lawyer.getId(), Collections.emptyList())
+                    .stream()
+                    .map(area -> scenarioMap.get(area.getProblemScenarioId()))
+                    .filter(Objects::nonNull)
+                    .collect(Collectors.toList());
+            lawyer.setLawyerLegalProblemScenarioList(scenarioList);
+        });
+    }
+
+    /**
+     * 批量查询法律问题场景并转换为Map
+     */
+    private Map<Integer, LawyerLegalProblemScenario> getScenarioMap(Set<Integer> scenarioIds) {
+        if (scenarioIds.isEmpty()) {
+            return Collections.emptyMap();
+        }
+        List<LawyerLegalProblemScenario> scenarios = new ArrayList<>(lawyerLegalProblemScenarioService.listByIds(scenarioIds));
+        return scenarios.stream()
+                .filter(s -> s.getDeleteFlag() != null && s.getDeleteFlag() == 0)
+                .collect(Collectors.toMap(LawyerLegalProblemScenario::getId, s -> s, (k1, k2) -> k1));
+    }
+
+
+
     @Override
     @Override
     public R<IPage<LawyerUser>> getRecommendedLawyersBySession(String sessionId, Integer messageId) {
     public R<IPage<LawyerUser>> getRecommendedLawyersBySession(String sessionId, Integer messageId) {
         log.info("LawyerUserServiceImpl.getRecommendedLawyersBySession?sessionId={},messageId={}", sessionId, messageId);
         log.info("LawyerUserServiceImpl.getRecommendedLawyersBySession?sessionId={},messageId={}", sessionId, messageId);
@@ -209,5 +286,58 @@ public class LawyerUserServiceImpl extends ServiceImpl<LawyerUserMapper, LawyerU
         // 这里暂时返回推荐列表(可以复用上面的逻辑)
         // 这里暂时返回推荐列表(可以复用上面的逻辑)
         return getRecommendedLawyerList(1, 10, null);
         return getRecommendedLawyerList(1, 10, null);
     }
     }
+
+    @Override
+    public R<IPage<LawyerUser>> searchLawyerByName(String name, int page, int pageSize, Integer clientUserId) {
+        log.info("LawyerUserServiceImpl.searchLawyerByName?name={},page={},pageSize={},clientUserId={}", name, page, pageSize, clientUserId);
+
+        // 参数校验
+        if (name == null || name.trim().isEmpty()) {
+            return R.fail("姓名不能为空");
+        }
+
+        int pageNum = page > 0 ? page : 1;
+        int pageSizeNum = pageSize > 0 ? pageSize : 10;
+
+        // 通过姓名模糊查询律师(分页)
+        LawyerUser query = new LawyerUser();
+        query.setName(name.trim());
+        IPage<LawyerUser> pageResult = QueryBuilder.of(query)
+                .likeFields("name")  // 姓名支持模糊查询
+                .page(pageNum, pageSizeNum)
+                .build()
+                .page(this);
+
+        // 如果提供了用户ID,保存搜索历史(如果不存在则添加)
+        if (clientUserId != null) {
+            try {
+                String keyword = name.trim();
+                // 检查是否已存在相同的搜索历史记录
+                LambdaQueryWrapper<LawyerUserSearchHistory> checkWrapper = new LambdaQueryWrapper<>();
+                checkWrapper.eq(LawyerUserSearchHistory::getClientUserId, clientUserId)
+                        .eq(LawyerUserSearchHistory::getSearchKeyword, keyword)
+                        .eq(LawyerUserSearchHistory::getSearchType, 0)  // 0:律师姓名
+                        .eq(LawyerUserSearchHistory::getDeleteFlag, 0);
+                long count = userSearchHistoryService.count(checkWrapper);
+                
+                // 如果不存在相同的记录,则添加
+                if (count == 0) {
+                    LawyerUserSearchHistory searchHistory = new LawyerUserSearchHistory();
+                    searchHistory.setClientUserId(clientUserId);
+                    searchHistory.setSearchKeyword(keyword);
+                    searchHistory.setSearchType(0);  // 0:律师姓名
+                    userSearchHistoryService.addUserSearchHistory(searchHistory);
+                    log.info("保存搜索历史成功:用户ID={}, 关键词={}", clientUserId, keyword);
+                } else {
+                    log.debug("搜索历史已存在,跳过添加:用户ID={}, 关键词={}", clientUserId, keyword);
+                }
+            } catch (Exception e) {
+                log.error("保存搜索历史失败:用户ID={}, 关键词={}, 错误={}", clientUserId, name, e.getMessage(), e);
+                // 保存历史失败不影响查询结果返回
+            }
+        }
+
+        return R.data(pageResult);
+    }
 }
 }