1、零售订单新建和列表接口增加对浮点型数据的四舍五入;
This commit is contained in:
parent
16e12f85cb
commit
d95814ad95
|
@ -35,6 +35,8 @@ func ErpOrderCreate(c *gin.Context) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tools.RoundFloatFields(req)
|
||||||
|
|
||||||
// 如果用户是会员,手机号不能为空
|
// 如果用户是会员,手机号不能为空
|
||||||
if req.MemberType == model.ErpOrderMemberTypeMember && req.Tel == "" {
|
if req.MemberType == model.ErpOrderMemberTypeMember && req.Tel == "" {
|
||||||
app.Error(c, http.StatusBadRequest, errors.New("参数错误:缺少会员手机号"), "参数错误:缺少会员手机号")
|
app.Error(c, http.StatusBadRequest, errors.New("参数错误:缺少会员手机号"), "参数错误:缺少会员手机号")
|
||||||
|
|
|
@ -1416,9 +1416,25 @@ func mergeOrderCommodities(orderCommodities []ErpOrderCommodity) []ErpOrderCommo
|
||||||
// 将map转换回orderCommodities列表
|
// 将map转换回orderCommodities列表
|
||||||
var mergedCommodities []ErpOrderCommodity
|
var mergedCommodities []ErpOrderCommodity
|
||||||
for _, commodity := range commodityMap {
|
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 = append(mergedCommodities, *commodity)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 对mergedCommodities按ErpCommodityId进行排序
|
||||||
|
sort.Slice(mergedCommodities, func(i, j int) bool {
|
||||||
|
return mergedCommodities[i].ID < mergedCommodities[j].ID
|
||||||
|
})
|
||||||
|
|
||||||
return mergedCommodities
|
return mergedCommodities
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4970,6 +4986,8 @@ func CreateErpOrder(req *ErpOrderCreateReq, c *gin.Context) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
// 四舍五入
|
||||||
|
tools.RoundFloatFields(req)
|
||||||
|
|
||||||
begin := orm.Eloquent.Begin()
|
begin := orm.Eloquent.Begin()
|
||||||
if req.Tel != "" {
|
if req.Tel != "" {
|
||||||
|
@ -5470,6 +5488,7 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
req.ErpOrderCommodities = respErpOrderCommodities
|
req.ErpOrderCommodities = respErpOrderCommodities
|
||||||
|
tools.RoundFloatFields(erpOrder)
|
||||||
|
|
||||||
// 判断线上支付金额是否>0
|
// 判断线上支付金额是否>0
|
||||||
if req.RetailType == RetailTypeSale {
|
if req.RetailType == RetailTypeSale {
|
||||||
|
@ -5515,7 +5534,7 @@ func checkOrderData(req *ErpOrderCreateReq, c *gin.Context) (*ErpOrder, error) {
|
||||||
|
|
||||||
// 订单总优惠
|
// 订单总优惠
|
||||||
if req.RetailType == RetailTypeSale {
|
if req.RetailType == RetailTypeSale {
|
||||||
erpOrder.TotalDiscount = erpOrder.TotalRetailPrice - erpOrder.TotalAmount
|
erpOrder.TotalDiscount = math.Round((erpOrder.TotalRetailPrice-erpOrder.TotalAmount)*100) / 100
|
||||||
}
|
}
|
||||||
|
|
||||||
return erpOrder, nil
|
return erpOrder, nil
|
||||||
|
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"log"
|
"log"
|
||||||
"math"
|
"math"
|
||||||
|
"reflect"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
@ -134,3 +135,32 @@ func StringSliceContains(slice []string, val string) bool {
|
||||||
}
|
}
|
||||||
return false
|
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