Dockerfile
This commit is contained in:
103
service/stock/unit_conversion_service.go
Normal file
103
service/stock/unit_conversion_service.go
Normal file
@@ -0,0 +1,103 @@
|
||||
package service
|
||||
|
||||
// unit_conversion_service.go
|
||||
// 单位换算服务层
|
||||
//
|
||||
// 职责:
|
||||
// 1. GetConversionFactor - 获取单位换算系数
|
||||
// 查询UnitConversion表,返回fromUnit→toUnit的换算系数
|
||||
//
|
||||
// 2. ConvertWithCeil - 向上取整换算(用于容量计算)
|
||||
// 公式:ceil(fromQty / factor)
|
||||
// 示例:50瓶 ÷ 20(瓶/箱)= 2.5 → ceil = 3箱
|
||||
//
|
||||
// 3. ConvertExact - 精确换算(用于出入库数量计算)
|
||||
// 公式:fromQty / factor
|
||||
// 示例:50瓶 ÷ 20(瓶/箱)= 2.5箱
|
||||
//
|
||||
// 核心逻辑:
|
||||
// - 从UnitConversion表查询换算系数
|
||||
// - 向上取整确保不满一个单位也占用空间
|
||||
// - 只能在同一CapacityUnitType(枚举类型)内换算
|
||||
|
||||
import (
|
||||
dao "assets/dao/stock"
|
||||
dto "assets/model/dto/stock"
|
||||
entity "assets/model/entity/stock"
|
||||
"context"
|
||||
|
||||
"gitea.com/red-future/common/utils"
|
||||
"go.mongodb.org/mongo-driver/v2/bson"
|
||||
)
|
||||
|
||||
var UnitConversion = new(unitConversion)
|
||||
|
||||
type unitConversion struct{}
|
||||
|
||||
// Create 创建单位换算规则
|
||||
func (s *unitConversion) Create(ctx context.Context, req *dto.CreateUnitConversionReq) (res *dto.CreateUnitConversionRes, err error) {
|
||||
var conversion *entity.UnitConversion
|
||||
if err = utils.Struct(req, &conversion); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
ids, err := dao.UnitConversion.Insert(ctx, conversion)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
id := ids[0].(bson.ObjectID)
|
||||
res = &dto.CreateUnitConversionRes{
|
||||
Id: &id,
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Update 更新单位换算规则
|
||||
func (s *unitConversion) Update(ctx context.Context, req *dto.UpdateUnitConversionReq) (err error) {
|
||||
update := bson.M{}
|
||||
|
||||
if req.ConversionCode != "" {
|
||||
update["conversionCode"] = req.ConversionCode
|
||||
}
|
||||
if req.ConversionName != "" {
|
||||
update["conversionName"] = req.ConversionName
|
||||
}
|
||||
if req.UnitType != "" {
|
||||
update["unitType"] = req.UnitType
|
||||
}
|
||||
if req.FromUnit != "" {
|
||||
update["fromUnit"] = req.FromUnit
|
||||
}
|
||||
if req.ToUnit != "" {
|
||||
update["toUnit"] = req.ToUnit
|
||||
}
|
||||
if req.ConversionFactor > 0 {
|
||||
update["conversionFactor"] = req.ConversionFactor
|
||||
}
|
||||
if req.Remark != "" {
|
||||
update["remark"] = req.Remark
|
||||
}
|
||||
|
||||
err = dao.UnitConversion.Update(ctx, req.Id, update)
|
||||
return
|
||||
}
|
||||
|
||||
// Delete 删除单位换算规则
|
||||
func (s *unitConversion) Delete(ctx context.Context, req *dto.DeleteUnitConversionReq) (err error) {
|
||||
err = dao.UnitConversion.DeleteFake(ctx, req.Id)
|
||||
return
|
||||
}
|
||||
|
||||
// List 查询单位换算列表
|
||||
func (s *unitConversion) List(ctx context.Context, req *dto.ListUnitConversionReq) (res *dto.ListUnitConversionRes, err error) {
|
||||
list, err := dao.UnitConversion.List(ctx, req.UnitType, req.FromUnit, req.ToUnit)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
res = &dto.ListUnitConversionRes{
|
||||
List: list,
|
||||
}
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user