Browse Source

用户律师需求开发

ldz 1 month ago
parent
commit
077161d39d

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

@@ -1,11 +1,12 @@
 package shop.alien.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import org.apache.ibatis.annotations.Insert;
-import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.*;
 import shop.alien.entity.store.LawyerAiInteractionLog;
 import shop.alien.entity.store.vo.LawyerAiInteractionLogVo;
 
+import java.util.List;
+
 /**
  * <p>
  * AI交互日志 Mapper 接口
@@ -49,6 +50,53 @@ public interface LawyerAiInteractionLogMapper extends BaseMapper<LawyerAiInterac
     int insertLog(LawyerAiInteractionLogVo log);
 
 
+    @Update("<script>" +
+            "UPDATE " +
+            "lawyer_ai_interaction_log " +
+            "<set>" +
+            "<if test='clientUserId != null'>client_user_id = #{clientUserId},</if>" +
+            "<if test='conversationId != null'>conversation_id = #{conversationId},</if>" +
+            "<if test='queryText != null'>query_text = #{queryText},</if>" +
+            "<if test='responseText != null'>response_text = #{responseText},</if>" +
+            "<if test='problemScenarId != null'>problem_scenar_id = #{problemScenarId},</if>" +
+            "<if test='interactionTime != null'>interaction_time = #{interactionTime},</if>" +
+            "<if test='deleteFlag != null'>delete_flag = #{deleteFlag},</if>" +
+            "<if test='createdTime != null'>created_time = #{createdTime},</if>" +
+            "<if test='updatedTime != null'>updated_time = #{updatedTime},</if>" +
+            "</set>" +
+            "WHERE id = #{id}" +
+            "</script>")
+
+    int updateLog(LawyerAiInteractionLogVo log);
+
+
+
+
+    @Select("<script>" +
+            "SELECT " +
+            "id, " +
+            "client_user_id," +
+            "conversation_id," +
+            "query_text," +
+            "response_text," +
+            "problem_scenario_id," +
+            "interaction_time," +
+            "delete_flag, " +
+            "created_time," +
+            "updated_time " +
+            "FROM " +
+            "lawyer_ai_interaction_log " +
+            "WHERE " +
+            "client_user_id = #{clientUserId} " +
+            "ORDER BY created_time DESC " +
+            "LIMIT #{size} , #{page}" +
+            "</script>")
+    List<LawyerAiInteractionLog> getLogList(
+            @Param("clientUserId") Integer clientUserId,
+            @Param("page") Integer page,
+            @Param("size") Integer size);
+
+
 
 }
 

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

@@ -146,5 +146,40 @@ public class LawyerAiInteractionLogController {
         return aiInteractionLogService.saveChatLog(queryText, responseText, clientUserId);
     }
 
+    @ApiOperation("删除聊天记录")
+    @ApiOperationSupport(order = 9)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id", value = "AI交互日志表id", dataType = "Integer", paramType = "query", required = true),
+    })
+    @PostMapping("/updatedLog")
+    public R<Map<String, Object>> updatedLog(
+            @RequestParam Integer id) {
+        log.info("LawyerAiInteractionLogController.updatedLog?id={}", id);
+        return aiInteractionLogService.updatedLog(id);
+    }
+
+    @ApiOperation("分页查询对话历史")
+    @ApiOperationSupport(order = 10)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "page", value = "页数(默认1)", dataType = "int", paramType = "query"),
+            @ApiImplicitParam(name = "size", value = "页容(默认10)", dataType = "int", paramType = "query"),
+//            @ApiImplicitParam(name = "id", value = "主键", dataType = "Integer", paramType = "query"),
+            @ApiImplicitParam(name = "clientUserId", value = "客户端用户ID", dataType = "Integer", paramType = "query", required = true)
+//            @ApiImplicitParam(name = "conversationId", value = "会话ID(支持模糊查询)", dataType = "String", paramType = "query"),
+//            @ApiImplicitParam(name = "problemScenarId", value = "法律问题场景ID", dataType = "Integer", paramType = "query"),
+//            @ApiImplicitParam(name = "createdTime_Start", value = "创建时间开始(范围查询)", dataType = "String", paramType = "query"),
+//            @ApiImplicitParam(name = "createdTime_End", value = "创建时间结束(范围查询)", dataType = "String", paramType = "query")
+    })
+    @GetMapping("/getLogList")
+    public IPage<LawyerAiInteractionLog> getLogList(
+                                                    @RequestParam(defaultValue = "1") int page,
+                                                    @RequestParam(defaultValue = "10") int size,
+                                                    @RequestParam Integer clientUserId) {
+        log.info("LawyerAiInteractionLogController.getLogList?,page={},size={},clientUserId{}",  page, size, clientUserId);
+
+        return aiInteractionLogService.getLogList( page, size, clientUserId);
+    }
+
+
 }
 

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

@@ -10,6 +10,7 @@ import shop.alien.entity.store.LawyerConsultationOrder;
 import shop.alien.entity.store.dto.LawyerConsultationOrderDto;
 import shop.alien.entity.store.vo.LawyerConsultationOrderVO;
 import shop.alien.store.service.LawyerConsultationOrderService;
+import shop.alien.store.service.OrderExpirationService;
 import shop.alien.util.myBaticsPlus.QueryBuilder;
 
 import java.math.BigDecimal;
@@ -32,6 +33,7 @@ import java.util.Map;
 public class LawyerConsultationOrderController {
 
     private final LawyerConsultationOrderService consultationOrderService;
+    private final OrderExpirationService orderExpirationService;
 
     @ApiOperation("分页查询咨询订单列表(支持按律师姓名关联查询,返回结果包含律师信息)")
     @ApiOperationSupport(order = 1)
@@ -189,10 +191,12 @@ public class LawyerConsultationOrderController {
 //            @ApiImplicitParam(name = "paymentStatus", value = "支付状态, 0:未支付, 1:已支付", dataType = "Integer", paramType = "query"),
     })
     @PostMapping("/consultNow")
-    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);
+    public R<LawyerConsultationOrderDto> startConsultation(@RequestBody LawyerConsultationOrder lawyerConsultationOrder) {
+        log.info("LawyerConsultationOrderController.consultNow?lawyerConsultationOrder={}", lawyerConsultationOrder);
+        //创建订单时,存储redis中,设置过期时间
+        R<LawyerConsultationOrderDto> layerConsultationOrderDto = consultationOrderService.consultNow(lawyerConsultationOrder);
+        orderExpirationService.setOrderPaymentTimeout(layerConsultationOrderDto.getData().getOrderNumber(), 1800);
+        return layerConsultationOrderDto;
     }
 
 
@@ -207,6 +211,10 @@ public class LawyerConsultationOrderController {
     public R<LawyerConsultationOrderDto> payStatus(String orderNumber , Integer paymentStatus, Integer orderStatus) {
         log.info("LawyerConsultationOrderController.consultNow?id{},paymentStatus{},orderStatus{}",
                 orderNumber, paymentStatus, orderStatus);
+        //如果订单已支付,关闭redis中的记时
+        if (paymentStatus == 1){
+            orderExpirationService.cancelOrderPaymentTimeout(orderNumber);
+        }
         return consultationOrderService.payStatus(orderNumber, paymentStatus, orderStatus);
     }
 

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

@@ -80,5 +80,9 @@ public interface LawyerAiInteractionLogService extends IService<LawyerAiInteract
      * @return R<Map<String, Object>>
      */
     R<Map<String, Object>> saveChatLog(String queryText, String responseText, Integer clientUserId);
+
+    R<Map<String, Object>> updatedLog(Integer id);
+
+    IPage<LawyerAiInteractionLog> getLogList(Integer page, Integer size , 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 problemScenarioId);
 
 
-    R<LawyerConsultationOrderDto> consultNow(Integer clientUserId,Integer lawyerUserId,String problemScenarioId ,String problemDescription , BigDecimal orderAmount ,String alipayNo ,String orderStr);
+    R<LawyerConsultationOrderDto> consultNow(LawyerConsultationOrder lawyerConsultationOrder);
 
     R<LawyerConsultationOrderDto> payStatus(String orderNumber,Integer paymentStatus,Integer orderStatus);
 

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

@@ -20,16 +20,16 @@ public interface OrderExpirationService {
     /**
      * 設置訂單支付超時監聽
      * 
-     * @param orderId 訂單ID
+     * @param orderNumber 訂單NO
      * @param timeoutSeconds 超時時間(秒),默認30分鐘
      */
-    void setOrderPaymentTimeout(Integer orderId, long timeoutSeconds);
+    void setOrderPaymentTimeout(String orderNumber, long timeoutSeconds);
 
     /**
      * 取消訂單支付超時監聽(當訂單已支付時調用)
      * 
-     * @param orderId 訂單ID
+     * @param orderNumber 訂單NO
      */
-    void cancelOrderPaymentTimeout(Integer orderId);
+    void cancelOrderPaymentTimeout(String orderNumber);
 }
 

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

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.sun.org.apache.bcel.internal.generic.NEW;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -128,7 +129,16 @@ public class LawyerAiInteractionLogServiceImpl extends ServiceImpl<LawyerAiInter
     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();
+//        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);
+        LawyerAiInteractionLog log = new LawyerAiInteractionLog();
         log.setClientUserId(clientUserId);
         log.setQueryText(queryText);
         log.setResponseText(responseText);
@@ -136,13 +146,42 @@ public class LawyerAiInteractionLogServiceImpl extends ServiceImpl<LawyerAiInter
         log.setDeleteFlag(0);
         log.setCreatedTime(new Date());
         log.setUpdatedTime(new Date());
-        int num =aiInteractionLogMapper.insertLog(log);
-        if (num > 0) {
+        //向表中插入一条新的数据,插入成功后获取插入该条数据的id
+        boolean A=this.save(log);
+        if (A) {
             result.put("result","聊天记录保存成功");
+            result.put("log",log);
             return R.data(result);
         }
         result.put("result","聊天记录保存失败");
         return R.data(result);
     }
+
+    @Override
+    public R<Map<String, Object>> updatedLog(Integer id) {
+        log.info("LawyerAiInteractionLogController.updatedLog?id={}", id);
+        Map<String, Object> result = new HashMap<>();
+        LawyerAiInteractionLogVo log = new LawyerAiInteractionLogVo();
+        log.setId(id);
+        log.setDeleteFlag(1);
+        log.setUpdatedTime(new Date());
+        int num=aiInteractionLogMapper.updateLog(log);
+        if (num>0) {
+            result.put("result","删除成功");
+            result.put("log",log);
+            return R.data(result);
+        }
+        result.put("result","删除失败");
+        return null;
+    }
+
+    @Override
+    public IPage<LawyerAiInteractionLog> getLogList(Integer page, Integer size , Integer clientUserId) {
+        List<LawyerAiInteractionLog> list = aiInteractionLogMapper.getLogList(page,size,clientUserId);
+        IPage<LawyerAiInteractionLog> pageResult = new Page<>(page, size);
+        pageResult.setRecords(list);
+        pageResult.setTotal(list.size());
+        return pageResult;
+    }
 }
 

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

@@ -26,6 +26,7 @@ import shop.alien.mapper.LawyerServiceAreaMapper;
 import shop.alien.mapper.LawyerUserMapper;
 import shop.alien.store.service.LawyerConsultationOrderService;
 import shop.alien.store.service.LawyerUserService;
+import shop.alien.store.service.OrderExpirationService;
 import shop.alien.util.common.constant.LawyerStatusEnum;
 
 import java.math.BigDecimal;
@@ -245,16 +246,14 @@ public class LawyerConsultationOrderServiceImpl extends ServiceImpl<LawyerConsul
 
 
     @Override
-    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);
-
-        LawyerConsultationOrderDto order = new LawyerConsultationOrderDto();
-        order.setClientUserId(clientUserId);
-        order.setLawyerUserId(lawyerUserId);
-        order.setProblemScenarioId(problemScenarioId);
-        order.setProblemDescription(problemDescription);
-        order.setOrderAmount(orderAmount);
+    public R<LawyerConsultationOrderDto> consultNow(LawyerConsultationOrder lawyerConsultationOrder) {
+        log.info("LawyerConsultationOrderController.consultNow?lawyerConsultationOrder={}", lawyerConsultationOrder);
+         LawyerConsultationOrderDto order = new LawyerConsultationOrderDto();
+        order.setClientUserId(lawyerConsultationOrder.getClientUserId());
+        order.setLawyerUserId(lawyerConsultationOrder.getLawyerUserId());
+        order.setProblemScenarioId(lawyerConsultationOrder.getProblemScenarioId());
+        order.setProblemDescription(lawyerConsultationOrder.getProblemDescription());
+        order.setOrderAmount(lawyerConsultationOrder.getOrderAmount());
         order.setOrderStatus(0);
         order.setPaymentStatus(0);
         order.setOrderTime(new Date());
@@ -262,12 +261,14 @@ public class LawyerConsultationOrderServiceImpl extends ServiceImpl<LawyerConsul
         order.setCreatedTime(new Date());
         order.setUpdatedTime(new Date());
         order.setDeleteFlag(0);
-        order.setAlipayNo(alipayNo);
-        order.setOrderStr(orderStr);
+        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);
+
+
 //        boolean result = this.save(order);
 //        if (result) {
 //            return R.data(order);
@@ -291,9 +292,6 @@ public class LawyerConsultationOrderServiceImpl extends ServiceImpl<LawyerConsul
 
 
 
-
-
-
         LawyerConsultationOrderDto order = new LawyerConsultationOrderDto();
         order.setOrderNumber(orderNumber);
         order.setPaymentStatus(paymentStatus);

+ 10 - 10
alien-store/src/main/java/shop/alien/store/service/impl/OrderExpirationServiceImpl.java

@@ -114,36 +114,36 @@ public class OrderExpirationServiceImpl implements OrderExpirationService, Comma
     }
 
     @Override
-    public void setOrderPaymentTimeout(Integer orderId, long timeoutSeconds) {
-        if (orderId == null) {
+    public void setOrderPaymentTimeout(String orderNumber, long timeoutSeconds) {
+        if (orderNumber == null) {
             log.warn("訂單ID為null,無法設置支付超時監聽");
             return;
         }
         
-        String key = ORDER_PAYMENT_TIMEOUT_PREFIX + orderId;
+        String key = ORDER_PAYMENT_TIMEOUT_PREFIX + orderNumber;
         long timeout = timeoutSeconds > 0 ? timeoutSeconds : DEFAULT_TIMEOUT_SECONDS;
         
         // 設置Redis key,帶過期時間
         // 當key過期時,會觸發RedisKeyExpirationListener
-        redisService.setString(key, String.valueOf(orderId), timeout);
+        redisService.setString(key, String.valueOf(orderNumber), timeout);
         
-        log.info("設置訂單支付超時監聽,訂單ID: {}, 超時時間: {}秒, key: {}", orderId, timeout, key);
+        log.info("設置訂單支付超時監聽,訂單NO: {}, 超時時間: {}秒, key: {}", orderNumber, timeout, key);
     }
 
     /**
      * 取消訂單支付超時監聽(當訂單已支付時調用)
      * 
-     * @param orderId 訂單ID
+     * @param orderNumber 訂單NO
      */
-    public void cancelOrderPaymentTimeout(Integer orderId) {
-        if (orderId == null) {
+    public void cancelOrderPaymentTimeout(String orderNumber) {
+        if (orderNumber == null) {
             return;
         }
         
-        String key = ORDER_PAYMENT_TIMEOUT_PREFIX + orderId;
+        String key = ORDER_PAYMENT_TIMEOUT_PREFIX + orderNumber;
         redisService.delete(key);
         
-        log.info("取消訂單支付超時監聽,訂單ID: {}, key: {}", orderId, key);
+        log.info("取消訂單支付超時監聽,訂單ID: {}, key: {}", orderNumber, key);
     }
 }