package api import ( "encoding/json" "fmt" "github.com/gin-gonic/gin" "github.com/shopspring/decimal" "go_zh/model" "go_zh/pkg/validator" "go_zh/request/api" "go_zh/server" ) type ShopOrderController struct { BaseController } func (shopOrder ShopOrderController) GetOrderSn(c *gin.Context) { mId := c.GetInt("mId") //数据验证 var data api.CreateOrderRequest msg, ok := validator.ValidatorData(c, &data) if !ok { shopOrder.responseError(c, 400, msg) return } if data.PayType == 1 { if mId == 0 { shopOrder.responseError(c, 401, "缺少登陆信息") return } } //对金额进行精度处理 money, err := decimal.NewFromString(data.PayMoney) if err != nil { shopOrder.responseError(c, 400, "金额错误") return } //对最小金额做判断 minMoney, _ := decimal.NewFromString("0.01") if money.LessThan(minMoney) { //当 money小于minMoney时 shopOrder.responseError(c, 400, "金额不合法") return } redisServer := server.GetRedisServerInstance() //获取商户银联信息 shopMchidModel := model.XShopMchid{} var shopMchidInfo = model.XShopMchid{} shopMchidKey := fmt.Sprintf("%s%s", "shopMachidInfo", data.ShopId) shopMchidJson := redisServer.GetStr(shopMchidKey) if len(shopMchidJson) == 0 { //没缓存信息 shopMchidInfo, err = shopMchidModel.GetShopBankMchid(data.ShopId) if err != nil { shopOrder.responseError(c, 400, "商户号信息错误"+err.Error()) return } //存入缓存 jsonData, _ := json.Marshal(shopMchidInfo) redisServer.SetStr(shopMchidKey, string(jsonData), 120) } else { _ = json.Unmarshal([]byte(shopMchidJson), &shopMchidInfo) } isBank := 0 if shopMchidInfo.ID > 0 { //如果有银联信息就是银联支付 isBank = 1 } //获取商户配置 shopSetModel := model.XShopSet{} var shopSetInfo = model.XShopSet{} shopSetKey := fmt.Sprintf("%s%s", "shopSetInfo", data.ShopId) shopSetJson := redisServer.GetStr(shopSetKey) if len(shopSetJson) == 0 { //没缓存信息 shopSetInfo, err = shopSetModel.GetShopSetInfo(data.ShopId) if err != nil { shopOrder.responseError(c, 400, "商户配置信息错误") return } //存入缓存 shopSetJsonData, _ := json.Marshal(shopSetInfo) redisServer.SetStr(shopSetKey, string(shopSetJsonData), 120) } else { _ = json.Unmarshal([]byte(shopSetJson), &shopSetInfo) } var discount decimal.Decimal if shopSetInfo.ID <= 0 { //如果没有 discount, _ = decimal.NewFromString("0") } else { discount = shopSetInfo.Discount } orderSnServer := server.GetOrderSnServerInstance(1) orderSn := orderSnServer.GenerateString("382FS") //创建订单信息 shopOrderModel := model.XShopOrder{} shopOrderModel.ShopID = data.ShopId shopOrderModel.PayType = data.PayType shopOrderModel.MID = mId shopOrderModel.RsSn = orderSn shopOrderModel.PayMoney = money shopOrderModel.Status = 1 shopOrderModel.Discount = discount shopOrderModel.IsClearing = 0 shopOrderModel.IsReport = 0 shopOrderModel.PayCodeSource = data.PayCodeSource shopOrderModel.IsBank = isBank err = shopOrderModel.CreateShopOrder() if err != nil { shopOrder.responseError(c, 400, "订单创建失败") return } shopOrder.responseSuccess(c, shopOrderModel.ID) }