Răsfoiți Sursa

用户律师需求开发

ldz 1 lună în urmă
părinte
comite
10af43b40e

+ 5 - 0
alien-entity/src/main/java/shop/alien/entity/store/LawyerConsultationOrder.java

@@ -122,5 +122,10 @@ public class LawyerConsultationOrder extends Model<LawyerConsultationOrder> {
     @ApiModelProperty(value = "支付宝订单编号")
     @TableField("alipay_no")
     private String alipayNo;
+
+    @ApiModelProperty(value = "支付宝订单字符串")
+    @TableField("order_str")
+    private String orderStr;
+
 }
 

+ 7 - 1
alien-entity/src/main/java/shop/alien/entity/store/dto/LawyerConsultationOrderDto.java

@@ -36,7 +36,7 @@ public class LawyerConsultationOrderDto extends Model<LawyerConsultationOrderDto
     private Integer lawyerUserId;
 
     @ApiModelProperty(value = "法律问题场景ID")
-    private Integer problemScenarioId;
+    private String problemScenarioId;
 
     @ApiModelProperty(value = "问题描述")
     private String problemDescription;
@@ -100,5 +100,11 @@ public class LawyerConsultationOrderDto extends Model<LawyerConsultationOrderDto
     @ApiModelProperty(value = "支付宝订单编号")
     @TableField("alipay_no")
     private String alipayNo;
+
+    @ApiModelProperty(value = "支付宝订单字符串")
+    @TableField("order_str")
+    private String orderStr;
+
+
 }
 

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

@@ -0,0 +1,76 @@
+package shop.alien.entity.store.vo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * AI交互日志
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@JsonInclude
+@ApiModel(value = "LawyerAiInteractionLog对象", description = "AI交互日志")
+public class LawyerAiInteractionLogVo extends Model<LawyerAiInteractionLogVo> {
+
+    @ApiModelProperty(value = "主键")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty(value = "客户端用户ID")
+    @TableField("client_user_id")
+    private Integer clientUserId;
+
+    @ApiModelProperty(value = "会话ID")
+    @TableField("conversation_id")
+    private String conversationId;
+
+    @ApiModelProperty(value = "用户输入内容")
+    @TableField("query_text")
+    private String queryText;
+
+    @ApiModelProperty(value = "AI回复内容")
+    @TableField("response_text")
+    private String responseText;
+
+    @ApiModelProperty(value = "关联的法律问题场景ID")
+    @TableField("problem_scenar_id")
+    private Integer problemScenarId;
+
+    @ApiModelProperty(value = "交互时间")
+    @TableField("interaction_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date interactionTime;
+
+    @ApiModelProperty(value = "删除标记, 0:未删除, 1:已删除")
+    @TableField("delete_flag")
+    @TableLogic
+    private Integer deleteFlag;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(value = "created_time", fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createdTime;
+
+    @ApiModelProperty(value = "创建人ID")
+    @TableField("created_user_id")
+    private Integer createdUserId;
+
+    @ApiModelProperty(value = "修改时间")
+    @TableField(value = "updated_time", fill = FieldFill.UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updatedTime;
+
+    @ApiModelProperty(value = "修改人ID")
+    @TableField("updated_user_id")
+    private Integer updatedUserId;
+}
+

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

@@ -1,8 +1,10 @@
 package shop.alien.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Insert;
 import org.apache.ibatis.annotations.Mapper;
 import shop.alien.entity.store.LawyerAiInteractionLog;
+import shop.alien.entity.store.vo.LawyerAiInteractionLogVo;
 
 /**
  * <p>
@@ -15,5 +17,38 @@ import shop.alien.entity.store.LawyerAiInteractionLog;
 @Mapper
 public interface LawyerAiInteractionLogMapper extends BaseMapper<LawyerAiInteractionLog> {
 
+
+    @Insert(
+            "INSERT " +
+            "INTO " +
+            "lawyer_ai_interaction_log " +
+            "(" +
+            "client_user_id, " +
+            "conversation_id, " +
+            "query_text, " +
+            "response_text, " +
+            "problem_scenar_id, " +
+            "interaction_time, " +
+            "delete_flag, " +
+            "created_time, " +
+            "updated_time" +
+            ")" +
+            " VALUES " +
+            "(" +
+            "#{clientUserId}, " +
+            "#{conversationId}, " +
+            "#{queryText}, " +
+            "#{responseText}, " +
+            "#{problemScenarId}, " +
+            "#{interactionTime}, " +
+            "#{deleteFlag}, " +
+            "#{createdTime}, " +
+            "#{updatedTime}" +
+            ")"
+    )
+    int insertLog(LawyerAiInteractionLogVo log);
+
+
+
 }
 

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

@@ -27,6 +27,7 @@
         <result column="updated_time" property="updatedTime" />
         <result column="updated_user_id" property="updatedUserId" />
         <result column="alipay_no" property="alipayNo" />
+        <result column="order_str" property="orderStr" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
@@ -34,7 +35,7 @@
         id, order_number, client_user_id, lawyer_user_id, problem_scenar_id, problem_description,
         order_amount, consultation_fee, start_time, end_time, order_status, payment_status,
         order_time,payment_time, validity_period, rating, comment, delete_flag, created_time,
-        created_user_id, updated_time, updated_user_id, alipay_no
+        created_user_id, updated_time, updated_user_id, alipay_no, order_str
     </sql>
 
     <!-- 訂單VO結果映射,包含律師信息 -->

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

@@ -117,7 +117,7 @@ public class LawyerAiInteractionLogController {
     @ApiOperationSupport(order = 7)
     @ApiImplicitParams({
             @ApiImplicitParam(name = "message", value = "用户发送的消息内容", dataType = "String", paramType = "query", required = true),
-            @ApiImplicitParam(name = "sessionId", value = "会话ID(可选)", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "id", value = "会话ID(AI)", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "clientUserId", value = "客户端用户ID(可选)", dataType = "Integer", paramType = "query")
     })
     @PostMapping("/chat")
@@ -128,5 +128,23 @@ public class LawyerAiInteractionLogController {
         log.info("LawyerAiInteractionLogController.sendAIMessage?message={},sessionId={},clientUserId={}", message, sessionId, clientUserId);
         return aiInteractionLogService.sendAIMessage(message, sessionId, clientUserId);
     }
+
+
+    @ApiOperation("AI聊天记录保存")
+    @ApiOperationSupport(order = 8)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "queryText", value = "用户发送的消息内容", dataType = "String", paramType = "query", required = true),
+            @ApiImplicitParam(name = "responseText", value = "AI回复内容", dataType = "String", paramType = "query", required = true),
+            @ApiImplicitParam(name = "clientUserId", value = "客户端用户ID", dataType = "Integer", paramType = "query", required = true)
+    })
+    @PostMapping("/saveChatLog")
+    public R<Map<String, Object>> saveChatLog(
+            @RequestParam String queryText,
+            @RequestParam String responseText,
+            @RequestParam Integer clientUserId) {
+        log.info("LawyerAiInteractionLogController.sendAIMessage?message={},responseText={},clientUserId={}", queryText, responseText, clientUserId);
+        return aiInteractionLogService.saveChatLog(queryText, responseText, clientUserId);
+    }
+
 }
 

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

@@ -176,9 +176,10 @@ public class LawyerConsultationOrderController {
     @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 = "problemScenarioId", value = "法律问题场景ID", dataType = "String", paramType = "query"),
             @ApiImplicitParam(name = "problemDescription", value = "问题描述", dataType = "String", paramType = "query"),
-            @ApiImplicitParam(name = "orderAmount", value = "订单金额,单位分", dataType = "Decimal", paramType = "query"),
+            @ApiImplicitParam(name = "alipayNo", value = "支付宝订单编号", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "orderStr", value = "支付宝订单字符串", dataType = "String", 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"),
@@ -188,10 +189,10 @@ public class LawyerConsultationOrderController {
 //            @ApiImplicitParam(name = "paymentStatus", value = "支付状态, 0:未支付, 1:已支付", dataType = "Integer", paramType = "query"),
     })
     @PostMapping("/consultNow")
-    public R<LawyerConsultationOrderDto> 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);
+    public R<LawyerConsultationOrderDto> startConsultation(Integer clientUserId,Integer lawyerUserId,String problemScenarioId ,String problemDescription , BigDecimal orderAmount ,String alipayNo ,String orderStr) {
+        log.info("LawyerConsultationOrderController.consultNow?clientUserId={},lawyerUserId={},problemScenarioId={},problemScenarioId={},orderAmount{},alipayNo{},orderStr{}",
+                clientUserId, lawyerUserId, problemScenarioId, problemDescription, orderAmount, alipayNo, orderStr);
+        return consultationOrderService.consultNow(clientUserId, lawyerUserId, problemScenarioId, problemDescription, orderAmount, alipayNo, orderStr);
     }
 
 

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

@@ -70,5 +70,15 @@ public interface LawyerAiInteractionLogService extends IService<LawyerAiInteract
      * @return R<Map<String, Object>>
      */
     R<Map<String, Object>> sendAIMessage(String message, String sessionId, Integer clientUserId);
+
+    /**
+     * AI聊天接口
+     *
+     * @param queryText     用户发送的消息内容
+     * @param responseText   AI回复内容
+     * @param clientUserId 客户端用户ID
+     * @return R<Map<String, Object>>
+     */
+    R<Map<String, Object>> saveChatLog(String queryText, String responseText, Integer clientUserId);
 }
 

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

@@ -70,7 +70,7 @@ public interface LawyerConsultationOrderService extends IService<LawyerConsultat
     //R<Map<String, Object>> startConsultation(Integer lawyerId, String question, String sessionId, Integer clientUserId, Integer problemScenarId);
 
 
-    R<LawyerConsultationOrderDto> consultNow(Integer clientUserId, Integer lawyerUserId, Integer problemScenarioId , String problemDescription , BigDecimal orderAmount);
+    R<LawyerConsultationOrderDto> consultNow(Integer clientUserId,Integer lawyerUserId,String problemScenarioId ,String problemDescription , BigDecimal orderAmount ,String alipayNo ,String orderStr);
 
     R<LawyerConsultationOrderDto> payStatus(String orderNumber,Integer paymentStatus,Integer orderStatus);
 

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

@@ -11,6 +11,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.LawyerAiInteractionLog;
+import shop.alien.entity.store.vo.LawyerAiInteractionLogVo;
 import shop.alien.mapper.LawyerAiInteractionLogMapper;
 import shop.alien.store.service.LawyerAiInteractionLogService;
 
@@ -122,5 +123,26 @@ public class LawyerAiInteractionLogServiceImpl extends ServiceImpl<LawyerAiInter
 
         return R.data(result);
     }
+
+    @Override
+    public R<Map<String, Object>> saveChatLog(String queryText, String responseText, Integer clientUserId) {
+        log.info("LawyerAiInteractionLogServiceImpl.sendAIMessage?message={},responseText={},clientUserId={}", queryText, responseText, clientUserId);
+        Map<String, Object> result = new HashMap<>();
+        LawyerAiInteractionLogVo log = new LawyerAiInteractionLogVo();
+        log.setClientUserId(clientUserId);
+        log.setQueryText(queryText);
+        log.setResponseText(responseText);
+        log.setInteractionTime(new Date());
+        log.setDeleteFlag(0);
+        log.setCreatedTime(new Date());
+        log.setUpdatedTime(new Date());
+        int num =aiInteractionLogMapper.insertLog(log);
+        if (num > 0) {
+            result.put("result","聊天记录保存成功");
+            return R.data(result);
+        }
+        result.put("result","聊天记录保存失败");
+        return R.data(result);
+    }
 }
 

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

@@ -243,7 +243,7 @@ public class LawyerConsultationOrderServiceImpl extends ServiceImpl<LawyerConsul
 
 
     @Override
-    public R<LawyerConsultationOrderDto> consultNow(Integer clientUserId, Integer lawyerUserId, Integer problemScenarioId, String problemDescription, BigDecimal orderAmount) {
+    public R<LawyerConsultationOrderDto> consultNow(Integer clientUserId,Integer lawyerUserId,String problemScenarioId ,String problemDescription , BigDecimal orderAmount ,String alipayNo ,String orderStr) {
         log.info("LawyerConsultationOrderServiceImpl.consultNow?clientUserId={},lawyerUserId={},problemScenarioId={},problemDescription={},orderAmount={}",
                 clientUserId, lawyerUserId, problemScenarioId, problemDescription, orderAmount);
 
@@ -260,6 +260,8 @@ public class LawyerConsultationOrderServiceImpl extends ServiceImpl<LawyerConsul
         order.setCreatedTime(new Date());
         order.setUpdatedTime(new Date());
         order.setDeleteFlag(0);
+        order.setAlipayNo(alipayNo);
+        order.setOrderStr(orderStr);
         //订单编号想要LAW+年月日(8位数字)+随机5位数字这种格式的
         String orderNumber = "LAW" + new SimpleDateFormat("yyyyMMdd").format(new Date()) + String.format("%05d", RandomUtils.nextInt(100000));
         order.setOrderNumber(orderNumber);