Dockerfile
This commit is contained in:
93
service/stock/zone_service.go
Normal file
93
service/stock/zone_service.go
Normal file
@@ -0,0 +1,93 @@
|
||||
// 库区服务
|
||||
// 职责:库区CRUD、状态更新(联动库位状态)
|
||||
// 调用链:UpdateStatus → BatchUpdateLocationStatus(状态联动)
|
||||
// 紧密耦合:dao.Zone、dao.Location(级联状态更新、删除前检查)
|
||||
// 注意:删除前检查是否存在库位,启用/禁用联动库位状态
|
||||
package service
|
||||
|
||||
import (
|
||||
"assets/consts/stock"
|
||||
dao "assets/dao/stock"
|
||||
dto "assets/model/dto/stock"
|
||||
"context"
|
||||
|
||||
"gitea.com/red-future/common/utils"
|
||||
"github.com/gogf/gf/v2/errors/gerror"
|
||||
"go.mongodb.org/mongo-driver/v2/bson"
|
||||
)
|
||||
|
||||
type zone struct{}
|
||||
|
||||
var Zone = new(zone)
|
||||
|
||||
func (s *zone) Create(ctx context.Context, req *dto.CreateZoneReq) (res *dto.CreateZoneRes, err error) {
|
||||
ids, err := dao.Zone.Insert(ctx, req)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
id := ids[0].(bson.ObjectID)
|
||||
res = &dto.CreateZoneRes{
|
||||
Id: &id,
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (s *zone) Update(ctx context.Context, req *dto.UpdateZoneReq) error {
|
||||
return dao.Zone.Update(ctx, req)
|
||||
}
|
||||
|
||||
func (s *zone) Delete(ctx context.Context, req *dto.DeleteZoneReq) error {
|
||||
zoneId := req.Id.Hex()
|
||||
// 删除前检查:是否存在关联的库位
|
||||
count, err := dao.Zone.CountLocationsByZoneId(ctx, zoneId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if count > 0 {
|
||||
return gerror.Newf("库区下存在%d个库位,无法删除", count)
|
||||
}
|
||||
return dao.Zone.DeleteFake(ctx, req)
|
||||
}
|
||||
|
||||
// UpdateStatus 更新库区状态(单独的状态修改接口,联动子表)
|
||||
func (s *zone) UpdateStatus(ctx context.Context, req *dto.UpdateZoneStatusReq) (err error) {
|
||||
zoneId := req.Id.Hex()
|
||||
// 1. 更新库区状态
|
||||
if err = dao.Zone.UpdateStatus(ctx, req); err != nil {
|
||||
return
|
||||
}
|
||||
// 2. 联动更新库位状态
|
||||
if req.Status == stock.ZoneStatusEnabled {
|
||||
// 启用:只恢复Disabled状态的库位,保留InUse等其他状态
|
||||
if _, err = dao.Zone.BatchUpdateLocationStatus(ctx, zoneId, stock.LocationStatusIdle, stock.LocationStatusDisabled); err != nil {
|
||||
return
|
||||
}
|
||||
} else {
|
||||
// 禁用:所有库位统一设为Disabled
|
||||
if _, err = dao.Zone.BatchUpdateLocationStatus(ctx, zoneId, stock.LocationStatusDisabled); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (s *zone) GetOne(ctx context.Context, req *dto.GetZoneReq) (res *dto.GetZoneRes, err error) {
|
||||
one, err := dao.Zone.GetOne(ctx, req)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
err = utils.Struct(one, &res)
|
||||
return
|
||||
}
|
||||
|
||||
func (s *zone) List(ctx context.Context, req *dto.ListZoneReq) (res *dto.ListZoneRes, err error) {
|
||||
list, total, err := dao.Zone.List(ctx, req)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
res = &dto.ListZoneRes{
|
||||
Total: total,
|
||||
}
|
||||
err = utils.Struct(list, &res.List)
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user