feat: 集成Eino文档解析与嵌入功能

新增Eino相关依赖,支持docx、pdf、xlsx等格式的文档加载与解析,并集成了Dashscope嵌入模型。同时修复了部分DAO查询中的OmitEmpty配置。
This commit is contained in:
2026-03-28 18:24:16 +08:00
parent a23db30957
commit 21ec536c57
7 changed files with 12 additions and 10 deletions

View File

@@ -63,7 +63,7 @@ database:
name: "tenant" name: "tenant"
role: "master" role: "master"
prefix: "assets_" # (可选)表名前缀 prefix: "assets_" # (可选)表名前缀
debug: false # (可选)开启调试模式 debug: true # (可选)开启调试模式
dryRun: false # (可选)ORM空跑(只读不写) dryRun: false # (可选)ORM空跑(只读不写)
charset: "utf8" # (可选)数据库编码(如: utf8mb4/utf8/gbk/gb2312)一般设置为utf8mb4。默认为utf8。 charset: "utf8" # (可选)数据库编码(如: utf8mb4/utf8/gbk/gb2312)一般设置为utf8mb4。默认为utf8。
timezone: "Asia/Shanghai" # (可选)时区配置,例如:Local timezone: "Asia/Shanghai" # (可选)时区配置,例如:Local

View File

@@ -79,7 +79,7 @@ func (d *assetDao) List(ctx context.Context, req *dto.ListAssetReq, fields ...st
// buildListFilter 构建列表查询的过滤条件 // buildListFilter 构建列表查询的过滤条件
func (d *assetDao) buildListFilter(ctx context.Context, req *dto.ListAssetReq) *gdb.Model { func (d *assetDao) buildListFilter(ctx context.Context, req *dto.ListAssetReq) *gdb.Model {
model := gfdb.DB(ctx).Model(ctx, public.TableNameAsset).Cache(ctx) model := gfdb.DB(ctx).Model(ctx, public.TableNameAsset).Cache(ctx).OmitEmpty()
if !g.IsEmpty(req.Keyword) { if !g.IsEmpty(req.Keyword) {
model.WhereLike(entity.AssetCol.Name, "%"+req.Keyword+"%") model.WhereLike(entity.AssetCol.Name, "%"+req.Keyword+"%")
} }

View File

@@ -60,7 +60,7 @@ func (d *assetSku) GetOne(ctx context.Context, req *dto.GetAssetSkuReq, fields .
// GetListByAssetIdExcludeCurrentSku 根据资产ID获取SKU列表并且排除当前SKU // GetListByAssetIdExcludeCurrentSku 根据资产ID获取SKU列表并且排除当前SKU
func (d *assetSku) GetListByAssetIdExcludeCurrentSku(ctx context.Context, assetId int64, req *dto.ListAssetSkuReq, fields ...string) (res []entity.AssetSku, total int, err error) { func (d *assetSku) GetListByAssetIdExcludeCurrentSku(ctx context.Context, assetId int64, req *dto.ListAssetSkuReq, fields ...string) (res []entity.AssetSku, total int, err error) {
model := gfdb.DB(ctx).Model(ctx, public.TableNameAssetSku).Fields(fields) model := gfdb.DB(ctx).Model(ctx, public.TableNameAssetSku).Fields(fields).OmitEmpty()
model.Where(entity.AssetSkuCol.AssetId, assetId) model.Where(entity.AssetSkuCol.AssetId, assetId)
model.WhereNot(entity.AssetSkuCol.Id, req.Id) model.WhereNot(entity.AssetSkuCol.Id, req.Id)
if req.Page != nil { if req.Page != nil {
@@ -92,7 +92,7 @@ func (d *assetSku) List(ctx context.Context, req *dto.ListAssetSkuReq, fields ..
// buildListFilter 构建列表查询的过滤条件 // buildListFilter 构建列表查询的过滤条件
func (d *assetSku) buildListFilter(ctx context.Context, req *dto.ListAssetSkuReq) *gdb.Model { func (d *assetSku) buildListFilter(ctx context.Context, req *dto.ListAssetSkuReq) *gdb.Model {
model := gfdb.DB(ctx).Model(ctx, public.TableNameAssetSku).Cache(ctx) model := gfdb.DB(ctx).Model(ctx, public.TableNameAssetSku).Cache(ctx).OmitEmpty()
if !g.IsEmpty(req.Keyword) { if !g.IsEmpty(req.Keyword) {
model.WhereLike(entity.AssetCol.Name, "%"+req.Keyword+"%") model.WhereLike(entity.AssetCol.Name, "%"+req.Keyword+"%")
model.WhereOrLike(entity.AssetSkuCol.SkuName, "%"+req.Keyword+"%") model.WhereOrLike(entity.AssetSkuCol.SkuName, "%"+req.Keyword+"%")

View File

@@ -81,7 +81,7 @@ func (d *category) List(ctx context.Context, req *dto.ListCategoryReq, fields ..
// buildListFilter 构建列表查询的过滤条件 // buildListFilter 构建列表查询的过滤条件
func (d *category) buildListFilter(ctx context.Context, req *dto.ListCategoryReq) *gdb.Model { func (d *category) buildListFilter(ctx context.Context, req *dto.ListCategoryReq) *gdb.Model {
model := gfdb.DB(ctx).Model(ctx, public.TableNameCategory).Cache(ctx) model := gfdb.DB(ctx).Model(ctx, public.TableNameCategory).Cache(ctx).OmitEmpty()
if !g.IsEmpty(req.Keyword) { if !g.IsEmpty(req.Keyword) {
model.WhereLike(entity.CategoryCol.Name, "%"+req.Keyword+"%") model.WhereLike(entity.CategoryCol.Name, "%"+req.Keyword+"%")
} }

View File

@@ -61,7 +61,7 @@ func (d *stockDetails) List(ctx context.Context, req *dto.GetSockDetailsReq, fie
// buildListFilter 构建列表查询的过滤条件 // buildListFilter 构建列表查询的过滤条件
func (d *stockDetails) buildListFilter(ctx context.Context, req *dto.GetSockDetailsReq) *gdb.Model { func (d *stockDetails) buildListFilter(ctx context.Context, req *dto.GetSockDetailsReq) *gdb.Model {
model := gfdb.DB(ctx).Model(ctx, public.TableNameStockDetails).Model model := gfdb.DB(ctx).Model(ctx, public.TableNameStockDetails).Model.OmitEmpty()
model.Where(entity.StockDetailsCol.Id, req.Id) model.Where(entity.StockDetailsCol.Id, req.Id)
model.Where(entity.StockDetailsCol.AssetId, req.AssetId) model.Where(entity.StockDetailsCol.AssetId, req.AssetId)
model.Where(entity.StockDetailsCol.AssetSkuId, req.AssetSkuId) model.Where(entity.StockDetailsCol.AssetSkuId, req.AssetSkuId)

View File

@@ -24,8 +24,8 @@ type StockOperationReq struct {
type StockPublishMessage struct { type StockPublishMessage struct {
AssetId int64 `json:"assetId"` AssetId int64 `json:"assetId"`
AssetSkuId int64 `json:"assetSkuId"` AssetSkuId int64 `json:"assetSkuId"`
TenantId interface{} `json:"tenantId"` TenantId uint64 `json:"tenantId"`
UserName interface{} `json:"userName"` UserName string `json:"userName"`
StockCount int `json:"stockCount"` StockCount int `json:"stockCount"`
OperationType string `json:"operationType"` OperationType string `json:"operationType"`
Metadata []map[string]interface{} `json:"metadata"` Metadata []map[string]interface{} `json:"metadata"`

View File

@@ -185,8 +185,10 @@ func (s *stockManage) AddStock(ctx context.Context, msg any) error {
return err return err
} }
// 设置 userId 和 tenantId 到 ctx // 设置 userId 和 tenantId 到 ctx
ctx = context.WithValue(ctx, "userName", req.UserName) ctx = context.WithValue(ctx, "user", &beans.User{
ctx = context.WithValue(ctx, "tenantId", req.TenantId) UserName: req.UserName,
TenantId: req.TenantId,
})
// 获取redis-租户存储-锁key // 获取redis-租户存储-锁key
fileLockKey := fmt.Sprintf(public.StockDetailLockKey, req.AssetSkuId) fileLockKey := fmt.Sprintf(public.StockDetailLockKey, req.AssetSkuId)
success, err := utils.Lock(ctx, fileLockKey, int64(60), func(ctx context.Context) error { success, err := utils.Lock(ctx, fileLockKey, int64(60), func(ctx context.Context) error {