diff --git a/ruoyi-modules/ruoyi-chat/src/main/resources/mapper/pet/BizPetsMapper.xml b/ruoyi-modules/ruoyi-chat/src/main/resources/mapper/pet/BizPetsMapper.xml
new file mode 100644
index 0000000..e822527
--- /dev/null
+++ b/ruoyi-modules/ruoyi-chat/src/main/resources/mapper/pet/BizPetsMapper.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/controller/BizPetsController.java b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/controller/BizPetsController.java
new file mode 100644
index 0000000..73e663f
--- /dev/null
+++ b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/controller/BizPetsController.java
@@ -0,0 +1,105 @@
+package org.dromara.pet.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.pet.domain.vo.BizPetsVo;
+import org.dromara.pet.domain.bo.BizPetsBo;
+import org.dromara.pet.service.IBizPetsService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 宠物基础档案
+ *
+ * @author shuo
+ * @date 2026-02-26
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/pet/pets")
+public class BizPetsController extends BaseController {
+
+ private final IBizPetsService bizPetsService;
+
+/**
+ * 查询宠物基础档案列表
+ */
+@SaCheckPermission("pet:pets:list")
+@GetMapping("/list")
+ public TableDataInfo list(BizPetsBo bo, PageQuery pageQuery) {
+ return bizPetsService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出宠物基础档案列表
+ */
+ @SaCheckPermission("pet:pets:export")
+ @Log(title = "宠物基础档案", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(BizPetsBo bo, HttpServletResponse response) {
+ List list = bizPetsService.queryList(bo);
+ ExcelUtil.exportExcel(list, "宠物基础档案", BizPetsVo.class, response);
+ }
+
+ /**
+ * 获取宠物基础档案详细信息
+ *
+ * @param id 主键
+ */
+ @SaCheckPermission("pet:pets:query")
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable Long id) {
+ return R.ok(bizPetsService.queryById(id));
+ }
+
+ /**
+ * 新增宠物基础档案
+ */
+ @SaCheckPermission("pet:pets:add")
+ @Log(title = "宠物基础档案", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody BizPetsBo bo) {
+ return toAjax(bizPetsService.insertByBo(bo));
+ }
+
+ /**
+ * 修改宠物基础档案
+ */
+ @SaCheckPermission("pet:pets:edit")
+ @Log(title = "宠物基础档案", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody BizPetsBo bo) {
+ return toAjax(bizPetsService.updateByBo(bo));
+ }
+
+ /**
+ * 删除宠物基础档案
+ *
+ * @param ids 主键串
+ */
+ @SaCheckPermission("pet:pets:remove")
+ @Log(title = "宠物基础档案", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable Long[] ids) {
+ return toAjax(bizPetsService.deleteWithValidByIds(List.of(ids), true));
+ }
+}
diff --git a/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/controller/BizTriageMessagesController.java b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/controller/BizTriageMessagesController.java
new file mode 100644
index 0000000..6d63790
--- /dev/null
+++ b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/controller/BizTriageMessagesController.java
@@ -0,0 +1,105 @@
+package org.dromara.pet.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.pet.domain.vo.BizTriageMessagesVo;
+import org.dromara.pet.domain.bo.BizTriageMessagesBo;
+import org.dromara.pet.service.IBizTriageMessagesService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 多模态问诊对话明细
+ *
+ * @author shuo
+ * @date 2026-02-26
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/pet/triageMessages")
+public class BizTriageMessagesController extends BaseController {
+
+ private final IBizTriageMessagesService bizTriageMessagesService;
+
+/**
+ * 查询多模态问诊对话明细列表
+ */
+@SaCheckPermission("pet:triageMessages:list")
+@GetMapping("/list")
+ public TableDataInfo list(BizTriageMessagesBo bo, PageQuery pageQuery) {
+ return bizTriageMessagesService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出多模态问诊对话明细列表
+ */
+ @SaCheckPermission("pet:triageMessages:export")
+ @Log(title = "多模态问诊对话明细", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(BizTriageMessagesBo bo, HttpServletResponse response) {
+ List list = bizTriageMessagesService.queryList(bo);
+ ExcelUtil.exportExcel(list, "多模态问诊对话明细", BizTriageMessagesVo.class, response);
+ }
+
+ /**
+ * 获取多模态问诊对话明细详细信息
+ *
+ * @param id 主键
+ */
+ @SaCheckPermission("pet:triageMessages:query")
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable Long id) {
+ return R.ok(bizTriageMessagesService.queryById(id));
+ }
+
+ /**
+ * 新增多模态问诊对话明细
+ */
+ @SaCheckPermission("pet:triageMessages:add")
+ @Log(title = "多模态问诊对话明细", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody BizTriageMessagesBo bo) {
+ return toAjax(bizTriageMessagesService.insertByBo(bo));
+ }
+
+ /**
+ * 修改多模态问诊对话明细
+ */
+ @SaCheckPermission("pet:triageMessages:edit")
+ @Log(title = "多模态问诊对话明细", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody BizTriageMessagesBo bo) {
+ return toAjax(bizTriageMessagesService.updateByBo(bo));
+ }
+
+ /**
+ * 删除多模态问诊对话明细
+ *
+ * @param ids 主键串
+ */
+ @SaCheckPermission("pet:triageMessages:remove")
+ @Log(title = "多模态问诊对话明细", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable Long[] ids) {
+ return toAjax(bizTriageMessagesService.deleteWithValidByIds(List.of(ids), true));
+ }
+}
diff --git a/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/controller/BizTriageSessionsController.java b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/controller/BizTriageSessionsController.java
new file mode 100644
index 0000000..99c0c2a
--- /dev/null
+++ b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/controller/BizTriageSessionsController.java
@@ -0,0 +1,105 @@
+package org.dromara.pet.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.pet.domain.vo.BizTriageSessionsVo;
+import org.dromara.pet.domain.bo.BizTriageSessionsBo;
+import org.dromara.pet.service.IBizTriageSessionsService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * AI智能分诊会话
+ *
+ * @author shuo
+ * @date 2026-02-26
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/pet/triageSessions")
+public class BizTriageSessionsController extends BaseController {
+
+ private final IBizTriageSessionsService bizTriageSessionsService;
+
+/**
+ * 查询AI智能分诊会话列表
+ */
+@SaCheckPermission("pet:triageSessions:list")
+@GetMapping("/list")
+ public TableDataInfo list(BizTriageSessionsBo bo, PageQuery pageQuery) {
+ return bizTriageSessionsService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出AI智能分诊会话列表
+ */
+ @SaCheckPermission("pet:triageSessions:export")
+ @Log(title = "AI智能分诊会话", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(BizTriageSessionsBo bo, HttpServletResponse response) {
+ List list = bizTriageSessionsService.queryList(bo);
+ ExcelUtil.exportExcel(list, "AI智能分诊会话", BizTriageSessionsVo.class, response);
+ }
+
+ /**
+ * 获取AI智能分诊会话详细信息
+ *
+ * @param id 主键
+ */
+ @SaCheckPermission("pet:triageSessions:query")
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable Long id) {
+ return R.ok(bizTriageSessionsService.queryById(id));
+ }
+
+ /**
+ * 新增AI智能分诊会话
+ */
+ @SaCheckPermission("pet:triageSessions:add")
+ @Log(title = "AI智能分诊会话", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody BizTriageSessionsBo bo) {
+ return toAjax(bizTriageSessionsService.insertByBo(bo));
+ }
+
+ /**
+ * 修改AI智能分诊会话
+ */
+ @SaCheckPermission("pet:triageSessions:edit")
+ @Log(title = "AI智能分诊会话", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody BizTriageSessionsBo bo) {
+ return toAjax(bizTriageSessionsService.updateByBo(bo));
+ }
+
+ /**
+ * 删除AI智能分诊会话
+ *
+ * @param ids 主键串
+ */
+ @SaCheckPermission("pet:triageSessions:remove")
+ @Log(title = "AI智能分诊会话", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable Long[] ids) {
+ return toAjax(bizTriageSessionsService.deleteWithValidByIds(List.of(ids), true));
+ }
+}
diff --git a/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/BizPets.java b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/BizPets.java
new file mode 100644
index 0000000..aa05117
--- /dev/null
+++ b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/BizPets.java
@@ -0,0 +1,90 @@
+package org.dromara.pet.domain;
+
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+ import java.util.Date;
+ import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serial;
+
+/**
+ * 宠物基础档案对象 biz_pets
+ *
+ * @author shuo
+ * @date 2026-02-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("biz_pets")
+public class BizPets extends
+
+ BaseEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键ID
+ */
+ @TableId(value = "id")
+ private Long id;
+
+ /**
+ * 归属用户ID
+ */
+ private Long userId;
+
+ /**
+ * 宠物昵称
+ */
+ private String name;
+
+ /**
+ * 物种(DOG狗/CAT猫)
+ */
+ private String species;
+
+ /**
+ * 品种
+ */
+ private String breed;
+
+ /**
+ * 出生日期
+ */
+ private Date birthDate;
+
+ /**
+ * 体重(公斤)
+ */
+ private Long weightKg;
+
+ /**
+ * 性别(MALE公/FEMALE母)
+ */
+ private String gender;
+
+ /**
+ * 是否绝育(Y/N)
+ */
+ private String isNeutered;
+
+ /**
+ * 头像链接
+ */
+ private String avatarUrl;
+
+ /**
+ * 业务创建时间
+ */
+ private Date createdAt;
+
+ /**
+ * 业务更新时间
+ */
+ private Date updatedAt;
+
+
+ }
diff --git a/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/BizTriageMessages.java b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/BizTriageMessages.java
new file mode 100644
index 0000000..8c42956
--- /dev/null
+++ b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/BizTriageMessages.java
@@ -0,0 +1,65 @@
+package org.dromara.pet.domain;
+
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+ import java.util.Date;
+ import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serial;
+
+/**
+ * 多模态问诊对话明细对象 biz_triage_messages
+ *
+ * @author shuo
+ * @date 2026-02-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("biz_triage_messages")
+public class BizTriageMessages extends
+
+ BaseEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键ID
+ */
+ @TableId(value = "id")
+ private Long id;
+
+ /**
+ * 关联分诊会话ID
+ */
+ private Long sessionId;
+
+ /**
+ * 发送者角色(USER用户/AI模型)
+ */
+ private String senderRole;
+
+ /**
+ * 消息类型(TEXT/IMAGE/VIDEO)
+ */
+ private String messageType;
+
+ /**
+ * 文本内容
+ */
+ private String content;
+
+ /**
+ * 多媒体文件链接
+ */
+ private String mediaUrl;
+
+ /**
+ * 业务发送时间
+ */
+ private Date createdAt;
+
+
+ }
diff --git a/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/BizTriageSessions.java b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/BizTriageSessions.java
new file mode 100644
index 0000000..5774ea7
--- /dev/null
+++ b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/BizTriageSessions.java
@@ -0,0 +1,75 @@
+package org.dromara.pet.domain;
+
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+ import java.util.Date;
+ import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serial;
+
+/**
+ * AI智能分诊会话对象 biz_triage_sessions
+ *
+ * @author shuo
+ * @date 2026-02-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("biz_triage_sessions")
+public class BizTriageSessions extends
+
+ BaseEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键ID
+ */
+ @TableId(value = "id")
+ private Long id;
+
+ /**
+ * 关联用户ID
+ */
+ private Long userId;
+
+ /**
+ * 关联宠物ID
+ */
+ private Long petId;
+
+ /**
+ * 会话状态(ONGOING进行中/COMPLETED已完成)
+ */
+ private String status;
+
+ /**
+ * 风险等级(GREEN低/YELLOW中/RED高)
+ */
+ private String riskLevel;
+
+ /**
+ * AI病情摘要总结
+ */
+ private String aiSummary;
+
+ /**
+ * 行动建议指南
+ */
+ private String actionPlan;
+
+ /**
+ * 业务创建时间
+ */
+ private Date createdAt;
+
+ /**
+ * 业务更新时间
+ */
+ private Date updatedAt;
+
+
+ }
diff --git a/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/bo/BizPetsBo.java b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/bo/BizPetsBo.java
new file mode 100644
index 0000000..019fb36
--- /dev/null
+++ b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/bo/BizPetsBo.java
@@ -0,0 +1,95 @@
+package org.dromara.pet.domain.bo;
+
+import org.dromara.pet.domain.BizPets;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 宠物基础档案业务对象 biz_pets
+ *
+ * @author shuo
+ * @date 2026-02-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = BizPets.class,reverseConvertGenerate =false)
+
+public class BizPetsBo extends BaseEntity {
+
+ /**
+ * 主键ID
+ */
+ private Long id;
+
+ /**
+ * 归属用户ID
+ */
+ private Long userId;
+
+ /**
+ * 宠物昵称
+ */
+ private String name;
+
+ /**
+ * 物种(DOG狗/CAT猫)
+ */
+ private String species;
+
+ /**
+ * 品种
+ */
+ @NotBlank(message = "品种不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String breed;
+
+ /**
+ * 出生日期
+ */
+ @NotNull(message = "出生日期不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Date birthDate;
+
+ /**
+ * 体重(公斤)
+ */
+ @NotNull(message = "体重(公斤)不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Long weightKg;
+
+ /**
+ * 性别(MALE公/FEMALE母)
+ */
+ @NotBlank(message = "性别(MALE公/FEMALE母)不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String gender;
+
+ /**
+ * 是否绝育(Y/N)
+ */
+ @NotBlank(message = "是否绝育(Y/N)不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String isNeutered;
+
+ /**
+ * 头像链接
+ */
+ @NotBlank(message = "头像链接不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String avatarUrl;
+
+ /**
+ * 业务创建时间
+ */
+ @NotNull(message = "业务创建时间不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Date createdAt;
+
+ /**
+ * 业务更新时间
+ */
+ @NotNull(message = "业务更新时间不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Date updatedAt;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/bo/BizTriageMessagesBo.java b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/bo/BizTriageMessagesBo.java
new file mode 100644
index 0000000..38b28a7
--- /dev/null
+++ b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/bo/BizTriageMessagesBo.java
@@ -0,0 +1,66 @@
+package org.dromara.pet.domain.bo;
+
+import org.dromara.pet.domain.BizTriageMessages;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 多模态问诊对话明细业务对象 biz_triage_messages
+ *
+ * @author shuo
+ * @date 2026-02-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = BizTriageMessages.class,reverseConvertGenerate =false)
+
+public class BizTriageMessagesBo extends BaseEntity {
+
+ /**
+ * 主键ID
+ */
+ private Long id;
+
+ /**
+ * 关联分诊会话ID
+ */
+ private Long sessionId;
+
+ /**
+ * 发送者角色(USER用户/AI模型)
+ */
+ private String senderRole;
+
+ /**
+ * 消息类型(TEXT/IMAGE/VIDEO)
+ */
+ @NotBlank(message = "消息类型(TEXT/IMAGE/VIDEO)不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String messageType;
+
+ /**
+ * 文本内容
+ */
+ @NotBlank(message = "文本内容不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String content;
+
+ /**
+ * 多媒体文件链接
+ */
+ @NotBlank(message = "多媒体文件链接不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String mediaUrl;
+
+ /**
+ * 业务发送时间
+ */
+ @NotNull(message = "业务发送时间不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Date createdAt;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/bo/BizTriageSessionsBo.java b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/bo/BizTriageSessionsBo.java
new file mode 100644
index 0000000..43066b5
--- /dev/null
+++ b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/bo/BizTriageSessionsBo.java
@@ -0,0 +1,78 @@
+package org.dromara.pet.domain.bo;
+
+import org.dromara.pet.domain.BizTriageSessions;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * AI智能分诊会话业务对象 biz_triage_sessions
+ *
+ * @author shuo
+ * @date 2026-02-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = BizTriageSessions.class,reverseConvertGenerate =false)
+
+public class BizTriageSessionsBo extends BaseEntity {
+
+ /**
+ * 主键ID
+ */
+ private Long id;
+
+ /**
+ * 关联用户ID
+ */
+ private Long userId;
+
+ /**
+ * 关联宠物ID
+ */
+ private Long petId;
+
+ /**
+ * 会话状态(ONGOING进行中/COMPLETED已完成)
+ */
+ @NotBlank(message = "会话状态(ONGOING进行中/COMPLETED已完成)不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String status;
+
+ /**
+ * 风险等级(GREEN低/YELLOW中/RED高)
+ */
+ @NotBlank(message = "风险等级(GREEN低/YELLOW中/RED高)不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String riskLevel;
+
+ /**
+ * AI病情摘要总结
+ */
+ @NotBlank(message = "AI病情摘要总结不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String aiSummary;
+
+ /**
+ * 行动建议指南
+ */
+ @NotBlank(message = "行动建议指南不能为空", groups = { AddGroup.class, EditGroup.class })
+ private String actionPlan;
+
+ /**
+ * 业务创建时间
+ */
+ @NotNull(message = "业务创建时间不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Date createdAt;
+
+ /**
+ * 业务更新时间
+ */
+ @NotNull(message = "业务更新时间不能为空", groups = { AddGroup.class, EditGroup.class })
+ private Date updatedAt;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/vo/BizPetsVo.java b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/vo/BizPetsVo.java
new file mode 100644
index 0000000..a7289f7
--- /dev/null
+++ b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/vo/BizPetsVo.java
@@ -0,0 +1,106 @@
+package org.dromara.pet.domain.vo;
+
+ import java.util.Date;
+ import com.fasterxml.jackson.annotation.JsonFormat;
+import org.dromara.pet.domain.BizPets;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 宠物基础档案视图对象 biz_pets
+ *
+ * @author shuo
+ * @date 2026-02-26
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = BizPets.class)
+
+public class BizPetsVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键ID
+ */
+ @ExcelProperty(value = "主键ID")
+ private Long id;
+
+ /**
+ * 归属用户ID
+ */
+ @ExcelProperty(value = "归属用户ID")
+ private Long userId;
+
+ /**
+ * 宠物昵称
+ */
+ @ExcelProperty(value = "宠物昵称")
+ private String name;
+
+ /**
+ * 物种(DOG狗/CAT猫)
+ */
+ @ExcelProperty(value = "物种(DOG狗/CAT猫)")
+ private String species;
+
+ /**
+ * 品种
+ */
+ @ExcelProperty(value = "品种")
+ private String breed;
+
+ /**
+ * 出生日期
+ */
+ @ExcelProperty(value = "出生日期")
+ private Date birthDate;
+
+ /**
+ * 体重(公斤)
+ */
+ @ExcelProperty(value = "体重(公斤)")
+ private Long weightKg;
+
+ /**
+ * 性别(MALE公/FEMALE母)
+ */
+ @ExcelProperty(value = "性别(MALE公/FEMALE母)")
+ private String gender;
+
+ /**
+ * 是否绝育(Y/N)
+ */
+ @ExcelProperty(value = "是否绝育(Y/N)")
+ private String isNeutered;
+
+ /**
+ * 头像链接
+ */
+ @ExcelProperty(value = "头像链接")
+ private String avatarUrl;
+
+ /**
+ * 业务创建时间
+ */
+ @ExcelProperty(value = "业务创建时间")
+ private Date createdAt;
+
+ /**
+ * 业务更新时间
+ */
+ @ExcelProperty(value = "业务更新时间")
+ private Date updatedAt;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/vo/BizTriageMessagesVo.java b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/vo/BizTriageMessagesVo.java
new file mode 100644
index 0000000..4b55ac4
--- /dev/null
+++ b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/vo/BizTriageMessagesVo.java
@@ -0,0 +1,76 @@
+package org.dromara.pet.domain.vo;
+
+ import java.util.Date;
+ import com.fasterxml.jackson.annotation.JsonFormat;
+import org.dromara.pet.domain.BizTriageMessages;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * 多模态问诊对话明细视图对象 biz_triage_messages
+ *
+ * @author shuo
+ * @date 2026-02-26
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = BizTriageMessages.class)
+
+public class BizTriageMessagesVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键ID
+ */
+ @ExcelProperty(value = "主键ID")
+ private Long id;
+
+ /**
+ * 关联分诊会话ID
+ */
+ @ExcelProperty(value = "关联分诊会话ID")
+ private Long sessionId;
+
+ /**
+ * 发送者角色(USER用户/AI模型)
+ */
+ @ExcelProperty(value = "发送者角色(USER用户/AI模型)")
+ private String senderRole;
+
+ /**
+ * 消息类型(TEXT/IMAGE/VIDEO)
+ */
+ @ExcelProperty(value = "消息类型(TEXT/IMAGE/VIDEO)")
+ private String messageType;
+
+ /**
+ * 文本内容
+ */
+ @ExcelProperty(value = "文本内容")
+ private String content;
+
+ /**
+ * 多媒体文件链接
+ */
+ @ExcelProperty(value = "多媒体文件链接")
+ private String mediaUrl;
+
+ /**
+ * 业务发送时间
+ */
+ @ExcelProperty(value = "业务发送时间")
+ private Date createdAt;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/vo/BizTriageSessionsVo.java b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/vo/BizTriageSessionsVo.java
new file mode 100644
index 0000000..3b39769
--- /dev/null
+++ b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/domain/vo/BizTriageSessionsVo.java
@@ -0,0 +1,88 @@
+package org.dromara.pet.domain.vo;
+
+ import java.util.Date;
+ import com.fasterxml.jackson.annotation.JsonFormat;
+import org.dromara.pet.domain.BizTriageSessions;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+/**
+ * AI智能分诊会话视图对象 biz_triage_sessions
+ *
+ * @author shuo
+ * @date 2026-02-26
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = BizTriageSessions.class)
+
+public class BizTriageSessionsVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键ID
+ */
+ @ExcelProperty(value = "主键ID")
+ private Long id;
+
+ /**
+ * 关联用户ID
+ */
+ @ExcelProperty(value = "关联用户ID")
+ private Long userId;
+
+ /**
+ * 关联宠物ID
+ */
+ @ExcelProperty(value = "关联宠物ID")
+ private Long petId;
+
+ /**
+ * 会话状态(ONGOING进行中/COMPLETED已完成)
+ */
+ @ExcelProperty(value = "会话状态(ONGOING进行中/COMPLETED已完成)")
+ private String status;
+
+ /**
+ * 风险等级(GREEN低/YELLOW中/RED高)
+ */
+ @ExcelProperty(value = "风险等级(GREEN低/YELLOW中/RED高)")
+ private String riskLevel;
+
+ /**
+ * AI病情摘要总结
+ */
+ @ExcelProperty(value = "AI病情摘要总结")
+ private String aiSummary;
+
+ /**
+ * 行动建议指南
+ */
+ @ExcelProperty(value = "行动建议指南")
+ private String actionPlan;
+
+ /**
+ * 业务创建时间
+ */
+ @ExcelProperty(value = "业务创建时间")
+ private Date createdAt;
+
+ /**
+ * 业务更新时间
+ */
+ @ExcelProperty(value = "业务更新时间")
+ private Date updatedAt;
+
+
+}
diff --git a/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/mapper/BizPetsMapper.java b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/mapper/BizPetsMapper.java
new file mode 100644
index 0000000..06d96e2
--- /dev/null
+++ b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/mapper/BizPetsMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.pet.mapper;
+
+import org.dromara.pet.domain.BizPets;
+import org.dromara.pet.domain.vo.BizPetsVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 宠物基础档案Mapper接口
+ *
+ * @author shuo
+ * @date 2026-02-26
+ */
+public interface BizPetsMapper extends BaseMapperPlus {
+
+}
diff --git a/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/mapper/BizTriageMessagesMapper.java b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/mapper/BizTriageMessagesMapper.java
new file mode 100644
index 0000000..68ced89
--- /dev/null
+++ b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/mapper/BizTriageMessagesMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.pet.mapper;
+
+import org.dromara.pet.domain.BizTriageMessages;
+import org.dromara.pet.domain.vo.BizTriageMessagesVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 多模态问诊对话明细Mapper接口
+ *
+ * @author shuo
+ * @date 2026-02-26
+ */
+public interface BizTriageMessagesMapper extends BaseMapperPlus {
+
+}
diff --git a/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/mapper/BizTriageSessionsMapper.java b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/mapper/BizTriageSessionsMapper.java
new file mode 100644
index 0000000..5907b97
--- /dev/null
+++ b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/mapper/BizTriageSessionsMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.pet.mapper;
+
+import org.dromara.pet.domain.BizTriageSessions;
+import org.dromara.pet.domain.vo.BizTriageSessionsVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * AI智能分诊会话Mapper接口
+ *
+ * @author shuo
+ * @date 2026-02-26
+ */
+public interface BizTriageSessionsMapper extends BaseMapperPlus {
+
+}
diff --git a/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/service/IBizPetsService.java b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/service/IBizPetsService.java
new file mode 100644
index 0000000..a790d56
--- /dev/null
+++ b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/service/IBizPetsService.java
@@ -0,0 +1,68 @@
+package org.dromara.pet.service;
+
+import org.dromara.pet.domain.vo.BizPetsVo;
+import org.dromara.pet.domain.bo.BizPetsBo;
+ import org.dromara.common.mybatis.core.page.TableDataInfo;
+ import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 宠物基础档案Service接口
+ *
+ * @author shuo
+ * @date 2026-02-26
+ */
+public interface IBizPetsService {
+
+ /**
+ * 查询宠物基础档案
+ *
+ * @param id 主键
+ * @return 宠物基础档案
+ */
+ BizPetsVo queryById(Long id);
+
+ /**
+ * 分页查询宠物基础档案列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 宠物基础档案分页列表
+ */
+ TableDataInfo queryPageList(BizPetsBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询符合条件的宠物基础档案列表
+ *
+ * @param bo 查询条件
+ * @return 宠物基础档案列表
+ */
+ List queryList(BizPetsBo bo);
+
+ /**
+ * 新增宠物基础档案
+ *
+ * @param bo 宠物基础档案
+ * @return 是否新增成功
+ */
+ Boolean insertByBo(BizPetsBo bo);
+
+ /**
+ * 修改宠物基础档案
+ *
+ * @param bo 宠物基础档案
+ * @return 是否修改成功
+ */
+ Boolean updateByBo(BizPetsBo bo);
+
+ /**
+ * 校验并批量删除宠物基础档案信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/service/IBizTriageMessagesService.java b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/service/IBizTriageMessagesService.java
new file mode 100644
index 0000000..cd4b3a0
--- /dev/null
+++ b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/service/IBizTriageMessagesService.java
@@ -0,0 +1,68 @@
+package org.dromara.pet.service;
+
+import org.dromara.pet.domain.vo.BizTriageMessagesVo;
+import org.dromara.pet.domain.bo.BizTriageMessagesBo;
+ import org.dromara.common.mybatis.core.page.TableDataInfo;
+ import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 多模态问诊对话明细Service接口
+ *
+ * @author shuo
+ * @date 2026-02-26
+ */
+public interface IBizTriageMessagesService {
+
+ /**
+ * 查询多模态问诊对话明细
+ *
+ * @param id 主键
+ * @return 多模态问诊对话明细
+ */
+ BizTriageMessagesVo queryById(Long id);
+
+ /**
+ * 分页查询多模态问诊对话明细列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 多模态问诊对话明细分页列表
+ */
+ TableDataInfo queryPageList(BizTriageMessagesBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询符合条件的多模态问诊对话明细列表
+ *
+ * @param bo 查询条件
+ * @return 多模态问诊对话明细列表
+ */
+ List queryList(BizTriageMessagesBo bo);
+
+ /**
+ * 新增多模态问诊对话明细
+ *
+ * @param bo 多模态问诊对话明细
+ * @return 是否新增成功
+ */
+ Boolean insertByBo(BizTriageMessagesBo bo);
+
+ /**
+ * 修改多模态问诊对话明细
+ *
+ * @param bo 多模态问诊对话明细
+ * @return 是否修改成功
+ */
+ Boolean updateByBo(BizTriageMessagesBo bo);
+
+ /**
+ * 校验并批量删除多模态问诊对话明细信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/service/IBizTriageSessionsService.java b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/service/IBizTriageSessionsService.java
new file mode 100644
index 0000000..345422c
--- /dev/null
+++ b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/service/IBizTriageSessionsService.java
@@ -0,0 +1,68 @@
+package org.dromara.pet.service;
+
+import org.dromara.pet.domain.vo.BizTriageSessionsVo;
+import org.dromara.pet.domain.bo.BizTriageSessionsBo;
+ import org.dromara.common.mybatis.core.page.TableDataInfo;
+ import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * AI智能分诊会话Service接口
+ *
+ * @author shuo
+ * @date 2026-02-26
+ */
+public interface IBizTriageSessionsService {
+
+ /**
+ * 查询AI智能分诊会话
+ *
+ * @param id 主键
+ * @return AI智能分诊会话
+ */
+ BizTriageSessionsVo queryById(Long id);
+
+ /**
+ * 分页查询AI智能分诊会话列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return AI智能分诊会话分页列表
+ */
+ TableDataInfo queryPageList(BizTriageSessionsBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询符合条件的AI智能分诊会话列表
+ *
+ * @param bo 查询条件
+ * @return AI智能分诊会话列表
+ */
+ List queryList(BizTriageSessionsBo bo);
+
+ /**
+ * 新增AI智能分诊会话
+ *
+ * @param bo AI智能分诊会话
+ * @return 是否新增成功
+ */
+ Boolean insertByBo(BizTriageSessionsBo bo);
+
+ /**
+ * 修改AI智能分诊会话
+ *
+ * @param bo AI智能分诊会话
+ * @return 是否修改成功
+ */
+ Boolean updateByBo(BizTriageSessionsBo bo);
+
+ /**
+ * 校验并批量删除AI智能分诊会话信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/service/impl/BizPetsServiceImpl.java b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/service/impl/BizPetsServiceImpl.java
new file mode 100644
index 0000000..dfe27a3
--- /dev/null
+++ b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/service/impl/BizPetsServiceImpl.java
@@ -0,0 +1,142 @@
+package org.dromara.pet.service.impl;
+
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+ import org.dromara.common.mybatis.core.page.TableDataInfo;
+ import org.dromara.common.mybatis.core.page.PageQuery;
+ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.dromara.pet.domain.bo.BizPetsBo;
+import org.dromara.pet.domain.vo.BizPetsVo;
+import org.dromara.pet.domain.BizPets;
+import org.dromara.pet.mapper.BizPetsMapper;
+import org.dromara.pet.service.IBizPetsService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 宠物基础档案Service业务层处理
+ *
+ * @author shuo
+ * @date 2026-02-26
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class BizPetsServiceImpl implements IBizPetsService {
+
+ private final BizPetsMapper baseMapper;
+
+ /**
+ * 查询宠物基础档案
+ *
+ * @param id 主键
+ * @return 宠物基础档案
+ */
+ @Override
+ public BizPetsVo queryById(Long id) {
+ return baseMapper.selectVoById(id);
+ }
+
+ /**
+ * 分页查询宠物基础档案列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 宠物基础档案分页列表
+ */
+ @Override
+ public TableDataInfo queryPageList(BizPetsBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询符合条件的宠物基础档案列表
+ *
+ * @param bo 查询条件
+ * @return 宠物基础档案列表
+ */
+ @Override
+ public List queryList(BizPetsBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(BizPetsBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.orderByAsc(BizPets::getId);
+ lqw.eq(bo.getUserId() != null, BizPets::getUserId, bo.getUserId());
+ lqw.like(StringUtils.isNotBlank(bo.getName()), BizPets::getName, bo.getName());
+ lqw.eq(StringUtils.isNotBlank(bo.getSpecies()), BizPets::getSpecies, bo.getSpecies());
+ lqw.eq(StringUtils.isNotBlank(bo.getBreed()), BizPets::getBreed, bo.getBreed());
+ lqw.eq(bo.getBirthDate() != null, BizPets::getBirthDate, bo.getBirthDate());
+ lqw.eq(bo.getWeightKg() != null, BizPets::getWeightKg, bo.getWeightKg());
+ lqw.eq(StringUtils.isNotBlank(bo.getGender()), BizPets::getGender, bo.getGender());
+ lqw.eq(StringUtils.isNotBlank(bo.getIsNeutered()), BizPets::getIsNeutered, bo.getIsNeutered());
+ lqw.eq(StringUtils.isNotBlank(bo.getAvatarUrl()), BizPets::getAvatarUrl, bo.getAvatarUrl());
+ lqw.eq(bo.getCreatedAt() != null, BizPets::getCreatedAt, bo.getCreatedAt());
+ lqw.eq(bo.getUpdatedAt() != null, BizPets::getUpdatedAt, bo.getUpdatedAt());
+ return lqw;
+ }
+
+ /**
+ * 新增宠物基础档案
+ *
+ * @param bo 宠物基础档案
+ * @return 是否新增成功
+ */
+ @Override
+ public Boolean insertByBo(BizPetsBo bo) {
+ BizPets add = MapstructUtils.convert(bo, BizPets. class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改宠物基础档案
+ *
+ * @param bo 宠物基础档案
+ * @return 是否修改成功
+ */
+ @Override
+ public Boolean updateByBo(BizPetsBo bo) {
+ BizPets update = MapstructUtils.convert(bo, BizPets. class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(BizPets entity) {
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 校验并批量删除宠物基础档案信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if (isValid) {
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteByIds(ids) > 0;
+ }
+}
diff --git a/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/service/impl/BizTriageMessagesServiceImpl.java b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/service/impl/BizTriageMessagesServiceImpl.java
new file mode 100644
index 0000000..1617482
--- /dev/null
+++ b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/service/impl/BizTriageMessagesServiceImpl.java
@@ -0,0 +1,137 @@
+package org.dromara.pet.service.impl;
+
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+ import org.dromara.common.mybatis.core.page.TableDataInfo;
+ import org.dromara.common.mybatis.core.page.PageQuery;
+ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.dromara.pet.domain.bo.BizTriageMessagesBo;
+import org.dromara.pet.domain.vo.BizTriageMessagesVo;
+import org.dromara.pet.domain.BizTriageMessages;
+import org.dromara.pet.mapper.BizTriageMessagesMapper;
+import org.dromara.pet.service.IBizTriageMessagesService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 多模态问诊对话明细Service业务层处理
+ *
+ * @author shuo
+ * @date 2026-02-26
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class BizTriageMessagesServiceImpl implements IBizTriageMessagesService {
+
+ private final BizTriageMessagesMapper baseMapper;
+
+ /**
+ * 查询多模态问诊对话明细
+ *
+ * @param id 主键
+ * @return 多模态问诊对话明细
+ */
+ @Override
+ public BizTriageMessagesVo queryById(Long id) {
+ return baseMapper.selectVoById(id);
+ }
+
+ /**
+ * 分页查询多模态问诊对话明细列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return 多模态问诊对话明细分页列表
+ */
+ @Override
+ public TableDataInfo queryPageList(BizTriageMessagesBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询符合条件的多模态问诊对话明细列表
+ *
+ * @param bo 查询条件
+ * @return 多模态问诊对话明细列表
+ */
+ @Override
+ public List queryList(BizTriageMessagesBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(BizTriageMessagesBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.orderByAsc(BizTriageMessages::getId);
+ lqw.eq(bo.getSessionId() != null, BizTriageMessages::getSessionId, bo.getSessionId());
+ lqw.eq(StringUtils.isNotBlank(bo.getSenderRole()), BizTriageMessages::getSenderRole, bo.getSenderRole());
+ lqw.eq(StringUtils.isNotBlank(bo.getMessageType()), BizTriageMessages::getMessageType, bo.getMessageType());
+ lqw.eq(StringUtils.isNotBlank(bo.getContent()), BizTriageMessages::getContent, bo.getContent());
+ lqw.eq(StringUtils.isNotBlank(bo.getMediaUrl()), BizTriageMessages::getMediaUrl, bo.getMediaUrl());
+ lqw.eq(bo.getCreatedAt() != null, BizTriageMessages::getCreatedAt, bo.getCreatedAt());
+ return lqw;
+ }
+
+ /**
+ * 新增多模态问诊对话明细
+ *
+ * @param bo 多模态问诊对话明细
+ * @return 是否新增成功
+ */
+ @Override
+ public Boolean insertByBo(BizTriageMessagesBo bo) {
+ BizTriageMessages add = MapstructUtils.convert(bo, BizTriageMessages. class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改多模态问诊对话明细
+ *
+ * @param bo 多模态问诊对话明细
+ * @return 是否修改成功
+ */
+ @Override
+ public Boolean updateByBo(BizTriageMessagesBo bo) {
+ BizTriageMessages update = MapstructUtils.convert(bo, BizTriageMessages. class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(BizTriageMessages entity) {
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 校验并批量删除多模态问诊对话明细信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if (isValid) {
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteByIds(ids) > 0;
+ }
+}
diff --git a/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/service/impl/BizTriageSessionsServiceImpl.java b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/service/impl/BizTriageSessionsServiceImpl.java
new file mode 100644
index 0000000..d9a08c8
--- /dev/null
+++ b/ruoyi-modules/ruoyi-pet/src/main/java/org/dromara/pet/service/impl/BizTriageSessionsServiceImpl.java
@@ -0,0 +1,139 @@
+package org.dromara.pet.service.impl;
+
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+ import org.dromara.common.mybatis.core.page.TableDataInfo;
+ import org.dromara.common.mybatis.core.page.PageQuery;
+ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.dromara.pet.domain.bo.BizTriageSessionsBo;
+import org.dromara.pet.domain.vo.BizTriageSessionsVo;
+import org.dromara.pet.domain.BizTriageSessions;
+import org.dromara.pet.mapper.BizTriageSessionsMapper;
+import org.dromara.pet.service.IBizTriageSessionsService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * AI智能分诊会话Service业务层处理
+ *
+ * @author shuo
+ * @date 2026-02-26
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class BizTriageSessionsServiceImpl implements IBizTriageSessionsService {
+
+ private final BizTriageSessionsMapper baseMapper;
+
+ /**
+ * 查询AI智能分诊会话
+ *
+ * @param id 主键
+ * @return AI智能分诊会话
+ */
+ @Override
+ public BizTriageSessionsVo queryById(Long id) {
+ return baseMapper.selectVoById(id);
+ }
+
+ /**
+ * 分页查询AI智能分诊会话列表
+ *
+ * @param bo 查询条件
+ * @param pageQuery 分页参数
+ * @return AI智能分诊会话分页列表
+ */
+ @Override
+ public TableDataInfo queryPageList(BizTriageSessionsBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询符合条件的AI智能分诊会话列表
+ *
+ * @param bo 查询条件
+ * @return AI智能分诊会话列表
+ */
+ @Override
+ public List queryList(BizTriageSessionsBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(BizTriageSessionsBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.orderByAsc(BizTriageSessions::getId);
+ lqw.eq(bo.getUserId() != null, BizTriageSessions::getUserId, bo.getUserId());
+ lqw.eq(bo.getPetId() != null, BizTriageSessions::getPetId, bo.getPetId());
+ lqw.eq(StringUtils.isNotBlank(bo.getStatus()), BizTriageSessions::getStatus, bo.getStatus());
+ lqw.eq(StringUtils.isNotBlank(bo.getRiskLevel()), BizTriageSessions::getRiskLevel, bo.getRiskLevel());
+ lqw.eq(StringUtils.isNotBlank(bo.getAiSummary()), BizTriageSessions::getAiSummary, bo.getAiSummary());
+ lqw.eq(StringUtils.isNotBlank(bo.getActionPlan()), BizTriageSessions::getActionPlan, bo.getActionPlan());
+ lqw.eq(bo.getCreatedAt() != null, BizTriageSessions::getCreatedAt, bo.getCreatedAt());
+ lqw.eq(bo.getUpdatedAt() != null, BizTriageSessions::getUpdatedAt, bo.getUpdatedAt());
+ return lqw;
+ }
+
+ /**
+ * 新增AI智能分诊会话
+ *
+ * @param bo AI智能分诊会话
+ * @return 是否新增成功
+ */
+ @Override
+ public Boolean insertByBo(BizTriageSessionsBo bo) {
+ BizTriageSessions add = MapstructUtils.convert(bo, BizTriageSessions. class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改AI智能分诊会话
+ *
+ * @param bo AI智能分诊会话
+ * @return 是否修改成功
+ */
+ @Override
+ public Boolean updateByBo(BizTriageSessionsBo bo) {
+ BizTriageSessions update = MapstructUtils.convert(bo, BizTriageSessions. class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(BizTriageSessions entity) {
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 校验并批量删除AI智能分诊会话信息
+ *
+ * @param ids 待删除的主键集合
+ * @param isValid 是否进行有效性校验
+ * @return 是否删除成功
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if (isValid) {
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteByIds(ids) > 0;
+ }
+}
diff --git a/ruoyi-modules/ruoyi-pet/src/main/resources/mapper/pet/BizPetsMapper.xml b/ruoyi-modules/ruoyi-pet/src/main/resources/mapper/pet/BizPetsMapper.xml
new file mode 100644
index 0000000..e822527
--- /dev/null
+++ b/ruoyi-modules/ruoyi-pet/src/main/resources/mapper/pet/BizPetsMapper.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/ruoyi-modules/ruoyi-pet/src/main/resources/mapper/pet/BizTriageMessagesMapper.xml b/ruoyi-modules/ruoyi-pet/src/main/resources/mapper/pet/BizTriageMessagesMapper.xml
new file mode 100644
index 0000000..57e740d
--- /dev/null
+++ b/ruoyi-modules/ruoyi-pet/src/main/resources/mapper/pet/BizTriageMessagesMapper.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/ruoyi-modules/ruoyi-pet/src/main/resources/mapper/pet/BizTriageSessionsMapper.xml b/ruoyi-modules/ruoyi-pet/src/main/resources/mapper/pet/BizTriageSessionsMapper.xml
new file mode 100644
index 0000000..28e8a00
--- /dev/null
+++ b/ruoyi-modules/ruoyi-pet/src/main/resources/mapper/pet/BizTriageSessionsMapper.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/ruoyi-server/src/main/resources/application.yml b/ruoyi-server/src/main/resources/application.yml
index 64369cd..49a011b 100644
--- a/ruoyi-server/src/main/resources/application.yml
+++ b/ruoyi-server/src/main/resources/application.yml
@@ -204,6 +204,10 @@ springdoc:
packages-to-scan: org.dromara.workflow
- group: 6.App端模块
packages-to-scan: org.dromara.app
+ - group: 7.ai端模块
+ packages-to-scan: org.dromara.ai
+ - group: 8.pet端模块
+ packages-to-scan: org.dromara.pet
# 防止XSS攻击
xss: