package service
|
|
import (
|
"github.com/spf13/cast"
|
"strconv"
|
"wms/models"
|
"wms/pkg/blevex"
|
"wms/pkg/logx"
|
)
|
|
type LocationReport struct {
|
LocationProductAmountID int
|
LocationName string `json:"name" gorm:"index;type:varchar(255);not null;comment:位置名称"` //位置名称
|
LocationJointName string `json:"jointName" gorm:"type:varchar(255);comment:拼接名称"` //拼接名称
|
MaterialName string `json:"materialName"` //物料名称
|
ProductCategoryName string `json:"productCategoryName"` //分类名称
|
}
|
|
const (
|
LocationReportIndexName = "locationReport.bleve"
|
)
|
|
func InitLocationReportData() {
|
docCount, err := blevex.DocCount(LocationReportIndexName)
|
if err != nil {
|
logx.Errorf("InitLocationReportData get doc count err:%v", err)
|
return
|
}
|
if docCount > 0 {
|
return
|
}
|
|
reports := make([]*LocationReport, 0)
|
search := models.NewLocationProductAmountSearch()
|
err = search.Orm.Model(&models.LocationProductAmount{}).
|
Raw("select wms_location_product_amount.id as LocationProductAmountID, wms_location.name as LocationName, wms_location.joint_name as LocationJointName, material.name as MaterialName, wms_product_category.Name as ProductCategoryName from wms_location_product_amount " +
|
"left join wms_location on wms_location.id=wms_location_product_amount.location_id " +
|
"left join material on material.id = wms_location_product_amount.product_id " +
|
"left join wms_product_category on wms_product_category.id=material.category_id").Scan(&reports).Error
|
if err != nil {
|
logx.Errorf("InitLocationReportData scan err:%v", err)
|
}
|
for _, result := range reports {
|
err = blevex.Add(LocationReportIndexName, strconv.Itoa(result.LocationProductAmountID), result)
|
if err != nil {
|
logx.Errorf("InitLocationReportData add failed, err:%v, index:%v, data:%v", err, LocationReportIndexName, result)
|
}
|
}
|
return
|
}
|
|
func SearchLocationReport(keyword string, page, pageSize int) (list []*models.LocationProductAmount, total uint64, err error) {
|
var ids []string
|
from := (page - 1) * pageSize
|
ids, total, err = blevex.Search(LocationReportIndexName, keyword, from, pageSize)
|
if err != nil {
|
return
|
}
|
if len(ids) == 0 {
|
return
|
}
|
recordIds := make([]int, 0, len(ids))
|
for _, id := range ids {
|
recordIds = append(recordIds, cast.ToInt(id))
|
}
|
list, err = models.NewLocationProductAmountSearch().SetPreload(true).SetIds(recordIds).Find()
|
return
|
}
|
|
func AddNewLocationReportRecord(id int) {
|
var report LocationReport
|
err := models.NewLocationProductAmountSearch().Orm.Model(&models.LocationProductAmount{}).
|
Raw("select wms_location_product_amount.id as LocationProductAmountID, wms_location.name as LocationName, wms_location.joint_name as LocationJointName, material.name as MaterialName, wms_product_category.Name as ProductCategoryName from wms_location_product_amount "+
|
"left join wms_location on wms_location.id=wms_location_product_amount.location_id "+
|
"left join material on material.id = wms_location_product_amount.product_id "+
|
"left join wms_product_category on wms_product_category.id=material.category_id where LocationProductAmountID = ?", id).Scan(&report).Error
|
if err != nil {
|
logx.Errorf("AddNewLocationReportRecord scan err:%v", err)
|
return
|
}
|
err = blevex.Add(LocationReportIndexName, strconv.Itoa(id), report)
|
if err != nil {
|
logx.Errorf("AddNewLocationReportRecord add err:%v", err)
|
return
|
}
|
}
|