package svc import ( "applet/app/db" "applet/app/e" "applet/app/svc" "applet/app/utils" "applet/app/utils/cache" "fmt" "github.com/gin-gonic/gin" "time" ) func StoreOrderConfirm(c *gin.Context) { var arg map[string]string if err := c.ShouldBindJSON(&arg); err != nil { e.OutErr(c, e.ERR_INVALID_ARGS, err) return } // 加锁 防止并发提取 mutexKey := fmt.Sprintf("%s:team.StoreOrderConfirm:%s", c.GetString("mid"), arg["oid"]) withdrawAvailable, err := cache.Do("SET", mutexKey, 1, "EX", 5, "NX") if err != nil { e.OutErr(c, e.ERR, err) return } if withdrawAvailable != "OK" { e.OutErr(c, e.ERR, e.NewErr(400000, "请求过于频繁,请稍后再试")) return } sess := svc.MasterDb(c).NewSession() defer sess.Close() sess.Begin() order := db.GetOrder(sess, arg["oid"]) if order == nil { sess.Rollback() e.OutErr(c, 400, e.NewErr(400, "订单不存在")) return } if order.State != 1 { sess.Rollback() e.OutErr(c, 400, e.NewErr(400, "订单不能确认")) return } order.State = 2 order.UpdateAt = time.Now() order.ConfirmAt = time.Now() update, err := sess.Where("id=?", order.Id).Cols("state,confirm_at,update_at").Update(order) if update == 0 || err != nil { sess.Rollback() e.OutErr(c, 400, e.NewErr(400, "订单确认失败")) return } //给商家余额 money := utils.StrToFloat64(order.Commission) if order.ParentUid > 0 { money = utils.StrToFloat64(order.Amount) - utils.StrToFloat64(order.AgentCommission) } if order.StoreType == 1 { money = utils.StrToFloat64(order.Amount) - utils.StrToFloat64(order.PlatformCommission) } bools := svc.MoneyCheck(c, sess, order.StoreUid, order.ParentUid, order.StoreType, 0, 1, money, "订单核销", order.Oid) if bools == false { sess.Rollback() e.OutErr(c, 400, e.NewErr(400, "订单确认失败")) return } sess.Commit() e.OutSuc(c, "success", nil) return }