Files
zsp-project/backend/internal/repository/delivery_repository.go
2026-06-03 20:59:39 +08:00

270 lines
11 KiB
Go
Executable File

package repository
import (
"github.com/rovina/zsp-backend/internal/model"
"gorm.io/gorm"
)
// ----- 我要提货 -----
func CreateDeliveryApply(db *gorm.DB, e *model.DeliveryApply) error { return db.Create(e).Error }
func ListDeliveryApply(db *gorm.DB, page, pageSize int, orderNumber, blNumber, status string) ([]model.DeliveryApply, int64, error) {
var list []model.DeliveryApply
q := db.Model(&model.DeliveryApply{})
if orderNumber != "" {
q = q.Where("order_number LIKE ?", "%"+orderNumber+"%")
}
if blNumber != "" {
q = q.Where("bl_number LIKE ?", "%"+blNumber+"%")
}
if status != "" {
q = q.Where("status = ?", status)
}
var total int64
if err := q.Count(&total).Error; err != nil {
return nil, 0, err
}
offset := (page - 1) * pageSize
if offset < 0 {
offset = 0
}
if pageSize <= 0 {
pageSize = 10
}
err := q.Order("create_time DESC").Offset(offset).Limit(pageSize).Find(&list).Error
return list, total, err
}
func GetDeliveryApplyByID(db *gorm.DB, id uint) (*model.DeliveryApply, error) {
var e model.DeliveryApply
if err := db.First(&e, id).Error; err != nil {
return nil, err
}
return &e, nil
}
func UpdateDeliveryApply(db *gorm.DB, e *model.DeliveryApply) error { return db.Save(e).Error }
func DeleteDeliveryApply(db *gorm.DB, id uint) error { return db.Delete(&model.DeliveryApply{}, id).Error }
// ----- 提货明细/出库单 -----
func CreateDeliveryOutbound(db *gorm.DB, e *model.DeliveryOutbound) error { return db.Create(e).Error }
func ListDeliveryOutbound(db *gorm.DB, page, pageSize int, outboundNumber, blNumber, status string) ([]model.DeliveryOutbound, int64, error) {
var list []model.DeliveryOutbound
q := db.Model(&model.DeliveryOutbound{})
if outboundNumber != "" {
q = q.Where("outbound_number LIKE ?", "%"+outboundNumber+"%")
}
if blNumber != "" {
q = q.Where("bl_number LIKE ?", "%"+blNumber+"%")
}
if status != "" {
q = q.Where("outbound_status = ?", status)
}
var total int64
if err := q.Count(&total).Error; err != nil {
return nil, 0, err
}
offset := (page - 1) * pageSize
if offset < 0 {
offset = 0
}
if pageSize <= 0 {
pageSize = 10
}
err := q.Order("create_time DESC").Offset(offset).Limit(pageSize).Find(&list).Error
return list, total, err
}
func GetDeliveryOutboundByID(db *gorm.DB, id uint) (*model.DeliveryOutbound, error) {
var e model.DeliveryOutbound
if err := db.First(&e, id).Error; err != nil {
return nil, err
}
return &e, nil
}
func UpdateDeliveryOutbound(db *gorm.DB, e *model.DeliveryOutbound) error { return db.Save(e).Error }
func DeleteDeliveryOutbound(db *gorm.DB, id uint) error { return db.Delete(&model.DeliveryOutbound{}, id).Error }
// ----- 仓库 -----
func CreateWarehouse(db *gorm.DB, e *model.Warehouse) error { return db.Create(e).Error }
func ListWarehouses(db *gorm.DB) ([]model.Warehouse, error) { var list []model.Warehouse; err := db.Order("create_time DESC").Find(&list).Error; return list, err }
func GetWarehouseByID(db *gorm.DB, id uint) (*model.Warehouse, error) {
var e model.Warehouse
if err := db.First(&e, id).Error; err != nil {
return nil, err
}
return &e, nil
}
func UpdateWarehouse(db *gorm.DB, e *model.Warehouse) error { return db.Save(e).Error }
func DeleteWarehouse(db *gorm.DB, id uint) error { return db.Delete(&model.Warehouse{}, id).Error }
// ----- 入库单 -----
func CreateInventoryInbound(db *gorm.DB, e *model.InventoryInbound) error { return db.Create(e).Error }
func ListInventoryInbound(db *gorm.DB, page, pageSize int, warehouse, commodity string) ([]model.InventoryInbound, int64, error) {
var list []model.InventoryInbound
q := db.Model(&model.InventoryInbound{})
if warehouse != "" {
q = q.Where("warehouse = ?", warehouse)
}
if commodity != "" {
q = q.Where("commodity LIKE ?", "%"+commodity+"%")
}
var total int64
if err := q.Count(&total).Error; err != nil {
return nil, 0, err
}
offset := (page - 1) * pageSize
if offset < 0 {
offset = 0
}
if pageSize <= 0 {
pageSize = 10
}
err := q.Order("create_time DESC").Offset(offset).Limit(pageSize).Find(&list).Error
return list, total, err
}
func GetInventoryInboundByID(db *gorm.DB, id uint) (*model.InventoryInbound, error) {
var e model.InventoryInbound
if err := db.First(&e, id).Error; err != nil {
return nil, err
}
return &e, nil
}
func UpdateInventoryInbound(db *gorm.DB, e *model.InventoryInbound) error { return db.Save(e).Error }
func DeleteInventoryInbound(db *gorm.DB, id uint) error { return db.Delete(&model.InventoryInbound{}, id).Error }
// ----- 货权转移 -----
func CreateOwnershipTransfer(db *gorm.DB, e *model.OwnershipTransfer) error {
return db.Transaction(func(tx *gorm.DB) error {
if err := tx.Create(e).Error; err != nil {
return err
}
// Set TransferID for BL items after main record is created
for i := range e.BLItems {
e.BLItems[i].TransferID = e.ID
}
if len(e.BLItems) > 0 {
return tx.Create(&e.BLItems).Error
}
return nil
})
}
func ListOwnershipTransfer(db *gorm.DB, page, pageSize int, transferNumber, blNumber, status string) ([]model.OwnershipTransfer, int64, error) {
var list []model.OwnershipTransfer
q := db.Model(&model.OwnershipTransfer{})
if transferNumber != "" {
q = q.Where("transfer_number LIKE ?", "%"+transferNumber+"%")
}
if blNumber != "" {
q = q.Where("id IN (SELECT transfer_id FROM ownership_transfer_bls WHERE bl_number LIKE ?)", "%"+blNumber+"%")
}
if status != "" {
q = q.Where("status = ?", status)
}
var total int64
if err := q.Count(&total).Error; err != nil {
return nil, 0, err
}
offset := (page - 1) * pageSize
if offset < 0 {
offset = 0
}
if pageSize <= 0 {
pageSize = 10
}
err := q.Preload("Files").Preload("BLItems").Order("create_time DESC").Offset(offset).Limit(pageSize).Find(&list).Error
return list, total, err
}
func GetOwnershipTransferByID(db *gorm.DB, id uint) (*model.OwnershipTransfer, error) {
var e model.OwnershipTransfer
if err := db.Preload("Files").Preload("BLItems").First(&e, id).Error; err != nil {
return nil, err
}
return &e, nil
}
func UpdateOwnershipTransfer(db *gorm.DB, e *model.OwnershipTransfer) error {
return db.Transaction(func(tx *gorm.DB) error {
if err := tx.Save(e).Error; err != nil {
return err
}
// Replace BL items: delete old, insert new
if err := tx.Where("transfer_id = ?", e.ID).Delete(&model.OwnershipTransferBL{}).Error; err != nil {
return err
}
for i := range e.BLItems {
e.BLItems[i].ID = 0
e.BLItems[i].TransferID = e.ID
}
if len(e.BLItems) > 0 {
return tx.Create(&e.BLItems).Error
}
return nil
})
}
func DeleteOwnershipTransfer(db *gorm.DB, id uint) error {
return db.Transaction(func(tx *gorm.DB) error {
if err := tx.Where("transfer_id = ?", id).Delete(&model.OwnershipTransferFile{}).Error; err != nil {
return err
}
if err := tx.Where("transfer_id = ?", id).Delete(&model.OwnershipTransferBL{}).Error; err != nil {
return err
}
return tx.Delete(&model.OwnershipTransfer{}, id).Error
})
}
func CreateOwnershipTransferFiles(db *gorm.DB, files []model.OwnershipTransferFile) error {
if len(files) == 0 {
return nil
}
return db.Create(&files).Error
}
// DeliveryRepository wraps *gorm.DB and exposes all delivery-related repository methods
type DeliveryRepository struct {
db *gorm.DB
}
func NewDeliveryRepository(db *gorm.DB) *DeliveryRepository {
return &DeliveryRepository{db: db}
}
func (r *DeliveryRepository) CreateDeliveryApply(e *model.DeliveryApply) error { return CreateDeliveryApply(r.db, e) }
func (r *DeliveryRepository) ListDeliveryApply(page, pageSize int, orderNumber, blNumber, status string) ([]model.DeliveryApply, int64, error) {
return ListDeliveryApply(r.db, page, pageSize, orderNumber, blNumber, status)
}
func (r *DeliveryRepository) GetDeliveryApplyByID(id uint) (*model.DeliveryApply, error) { return GetDeliveryApplyByID(r.db, id) }
func (r *DeliveryRepository) UpdateDeliveryApply(e *model.DeliveryApply) error { return UpdateDeliveryApply(r.db, e) }
func (r *DeliveryRepository) DeleteDeliveryApply(id uint) error { return DeleteDeliveryApply(r.db, id) }
func (r *DeliveryRepository) CreateDeliveryOutbound(e *model.DeliveryOutbound) error { return CreateDeliveryOutbound(r.db, e) }
func (r *DeliveryRepository) ListDeliveryOutbound(page, pageSize int, outboundNumber, blNumber, status string) ([]model.DeliveryOutbound, int64, error) {
return ListDeliveryOutbound(r.db, page, pageSize, outboundNumber, blNumber, status)
}
func (r *DeliveryRepository) GetDeliveryOutboundByID(id uint) (*model.DeliveryOutbound, error) { return GetDeliveryOutboundByID(r.db, id) }
func (r *DeliveryRepository) UpdateDeliveryOutbound(e *model.DeliveryOutbound) error { return UpdateDeliveryOutbound(r.db, e) }
func (r *DeliveryRepository) DeleteDeliveryOutbound(id uint) error { return DeleteDeliveryOutbound(r.db, id) }
func (r *DeliveryRepository) CreateWarehouse(e *model.Warehouse) error { return CreateWarehouse(r.db, e) }
func (r *DeliveryRepository) ListWarehouses() ([]model.Warehouse, error) { return ListWarehouses(r.db) }
func (r *DeliveryRepository) GetWarehouseByID(id uint) (*model.Warehouse, error) { return GetWarehouseByID(r.db, id) }
func (r *DeliveryRepository) UpdateWarehouse(e *model.Warehouse) error { return UpdateWarehouse(r.db, e) }
func (r *DeliveryRepository) DeleteWarehouse(id uint) error { return DeleteWarehouse(r.db, id) }
func (r *DeliveryRepository) CreateInventoryInbound(e *model.InventoryInbound) error { return CreateInventoryInbound(r.db, e) }
func (r *DeliveryRepository) ListInventoryInbound(page, pageSize int, warehouse, commodity string) ([]model.InventoryInbound, int64, error) {
return ListInventoryInbound(r.db, page, pageSize, warehouse, commodity)
}
func (r *DeliveryRepository) GetInventoryInboundByID(id uint) (*model.InventoryInbound, error) { return GetInventoryInboundByID(r.db, id) }
func (r *DeliveryRepository) UpdateInventoryInbound(e *model.InventoryInbound) error { return UpdateInventoryInbound(r.db, e) }
func (r *DeliveryRepository) DeleteInventoryInbound(id uint) error { return DeleteInventoryInbound(r.db, id) }
func (r *DeliveryRepository) CreateOwnershipTransfer(e *model.OwnershipTransfer) error { return CreateOwnershipTransfer(r.db, e) }
func (r *DeliveryRepository) ListOwnershipTransfer(page, pageSize int, transferNumber, blNumber, status string) ([]model.OwnershipTransfer, int64, error) {
return ListOwnershipTransfer(r.db, page, pageSize, transferNumber, blNumber, status)
}
func (r *DeliveryRepository) GetOwnershipTransferByID(id uint) (*model.OwnershipTransfer, error) { return GetOwnershipTransferByID(r.db, id) }
func (r *DeliveryRepository) UpdateOwnershipTransfer(e *model.OwnershipTransfer) error { return UpdateOwnershipTransfer(r.db, e) }
func (r *DeliveryRepository) DeleteOwnershipTransfer(id uint) error { return DeleteOwnershipTransfer(r.db, id) }
func (r *DeliveryRepository) CreateOwnershipTransferFiles(files []model.OwnershipTransferFile) error {
return CreateOwnershipTransferFiles(r.db, files)
}
// DB returns the underlying *gorm.DB for complex queries (e.g. InventorySummary)
func (r *DeliveryRepository) DB() *gorm.DB { return r.db }