1、零售订单新建和列表接口增加对浮点型数据的四舍五入;
This commit is contained in:
parent
16e12f85cb
commit
d95814ad95
|
@ -35,6 +35,8 @@ func ErpOrderCreate(c *gin.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
tools.RoundFloatFields(req)
|
||||
|
||||
// 如果用户是会员,手机号不能为空
|
||||
if req.MemberType == model.ErpOrderMemberTypeMember && req.Tel == "" {
|
||||
app.Error(c, http.StatusBadRequest, errors.New("参数错误:缺少会员手机号"), "参数错误:缺少会员手机号")
|
||||
|
|
|
@ -1416,9 +1416,25 @@ func mergeOrderCommodities(orderCommodities []ErpOrderCommodity) []ErpOrderCommo
|
|||
// 将map转换回orderCommodities列表
|
||||
var mergedCommodities []ErpOrderCommodity
|
||||
for _, commodity := range commodityMap {
|
||||
// 对float64类型的字段进行四舍五入处理
|
||||
commodity.SalesProfit = tools.RoundFloat(commodity.SalesProfit)
|
||||
commodity.StaffProfit = tools.RoundFloat(commodity.StaffProfit)
|
||||
commodity.SaleDiscount = tools.RoundFloat(commodity.SaleDiscount)
|
||||
commodity.MemberDiscount = tools.RoundFloat(commodity.MemberDiscount)
|
||||
commodity.ReceivedAmount = tools.RoundFloat(commodity.ReceivedAmount)
|
||||
commodity.RejectedPrice = tools.RoundFloat(commodity.RejectedPrice)
|
||||
commodity.RejectedAmount = tools.RoundFloat(commodity.RejectedAmount)
|
||||
commodity.StaffCostPrice = tools.RoundFloat(commodity.StaffCostPrice)
|
||||
commodity.WholesalePrice = tools.RoundFloat(commodity.WholesalePrice)
|
||||
|
||||
mergedCommodities = append(mergedCommodities, *commodity)
|
||||
}
|
||||
|
||||
// 对mergedCommodities按ErpCommodityId进行排序
|
||||
sort.Slice(mergedCommodities, func(i, j int) bool {
|
||||
return mergedCommodities[i].ID < mergedCommodities[j].ID
|
||||
})
|
||||
|
||||
return mergedCommodities
|
||||
}
|
||||
|
||||
|
@ -4970,6 +4986,8 @@ func CreateErpOrder(req *ErpOrderCreateReq, c *gin.Context) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// 四舍五入
|
||||
tools.RoundFloatFields(req)
|
||||
|
||||
begin := orm.Eloquent.Begin()
|
||||
if req.Tel != "" {
|
||||
|
@ -5470,6 +5488,7 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
|
|||
}
|
||||
|
||||
req.ErpOrderCommodities = respErpOrderCommodities
|
||||
tools.RoundFloatFields(erpOrder)
|
||||
|
||||
// 判断线上支付金额是否>0
|
||||
if req.RetailType == RetailTypeSale {
|
||||
|
@ -5515,7 +5534,7 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
|
|||
|
||||
// 订单总优惠
|
||||
if req.RetailType == RetailTypeSale {
|
||||
erpOrder.TotalDiscount = erpOrder.TotalRetailPrice - erpOrder.TotalAmount
|
||||
erpOrder.TotalDiscount = math.Round((erpOrder.TotalRetailPrice-erpOrder.TotalAmount)*100) / 100
|
||||
}
|
||||
|
||||
return erpOrder, nil
|
||||
|
|
|
@ -6,6 +6,7 @@ import (
|
|||
"gorm.io/gorm"
|
||||
"log"
|
||||
"math"
|
||||
"reflect"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"time"
|
||||
|
@ -134,3 +135,32 @@ func StringSliceContains(slice []string, val string) bool {
|
|||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// RoundFloat 保留 float64 两位小数
|
||||
func RoundFloat(f float64) float64 {
|
||||
return math.Round(f*100) / 100
|
||||
}
|
||||
|
||||
// RoundFloatFields 递归处理结构体中的 float64 字段,四舍五入保留两位小数
|
||||
func RoundFloatFields(v interface{}) {
|
||||
val := reflect.ValueOf(v).Elem()
|
||||
|
||||
for i := 0; i < val.NumField(); i++ {
|
||||
field := val.Field(i)
|
||||
switch field.Kind() {
|
||||
case reflect.Float64:
|
||||
// 对 float64 类型进行四舍五入
|
||||
field.SetFloat(RoundFloat(field.Float()))
|
||||
case reflect.Struct:
|
||||
// 递归处理子结构体
|
||||
RoundFloatFields(field.Addr().Interface())
|
||||
case reflect.Slice:
|
||||
// 对于 slice 中的结构体,逐个处理
|
||||
for j := 0; j < field.Len(); j++ {
|
||||
if field.Index(j).Kind() == reflect.Struct {
|
||||
RoundFloatFields(field.Index(j).Addr().Interface())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user