270 lines
11 KiB
Go
Executable File
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 }
|