diff --git a/models/customer_order.go b/models/customer_order.go
index 79d5b5a..0af8038 100644
--- a/models/customer_order.go
+++ b/models/customer_order.go
@@ -85,7 +85,8 @@ func (t *CustomerOrder) UpdateStatusBy(outTradeNo string, originStatus, status i
 
 func GetExpiredAtLiveCustomerOrder() ([]*CustomerOrder, error) {
 	orders := make([]*CustomerOrder, 0)
-	err := core.GetXormAuto().Where("type=1 and is_delete=0 and status=0 and expire_time <= ? and out_trade_no<>''", time.Now().Unix()).Find(&orders)
+	err := core.GetXormAuto().Where("type=1 and is_delete=0 and "+
+		"status=0 and expire_time <= ? and out_trade_no<>''", time.Now().Unix()).Find(&orders)
 	if err != nil {
 		return nil, err
 	}
diff --git a/models/customer_order_sub.go b/models/customer_order_sub.go
index 1be46fd..6520749 100644
--- a/models/customer_order_sub.go
+++ b/models/customer_order_sub.go
@@ -36,8 +36,7 @@ func GetCustomerOrderSubsByOrderNos(orderNos ...string) (subs []map[string]strin
 	err = core.GetXormAuto().Table(new(CustomerOrderSub)).Alias("s").
 		Select("s.order_no, s.goods_id, s.goods_num, s.good_name, s.good_price, g.goods_pic_url").
 		Join("left", new(CustomerGoods).Alias("g"), "g.id=s.goods_id").
-		Where("s.is_delete=0").In("s.order_no", orderNos).
-		Desc("s.created_at").Find(&subs)
+		Where("s.is_delete=0").In("s.order_no", orderNos).Desc("s.created_at").Find(&subs)
 	return
 }
 
diff --git a/models/user_prize.go b/models/user_prize.go
index 4b23bde..cb9c1fe 100644
--- a/models/user_prize.go
+++ b/models/user_prize.go
@@ -8,19 +8,20 @@ import (
 const UserPrizeTableName = TableNamePrefix + "user_prize"
 
 type UserPrize struct {
-	Id           int64     `json:"id" xorm:"not null pk autoincr INT(11)"`
-	UserId       int64     `json:"user_id" xorm:"not null comment('用户表id') INT(11)"`
-	ActivityId   int64     `json:"activity_id" xorm:"not null comment('互动表id') INT(11)"`
-	RehearsalId  int64     `json:"rehearsal_id" xorm:"not null default(0) comment('彩排id') INT(11)"`
-	ArchId       int       `json:"arch_id" xorm:"not null default 0 comment('归档id') INT(11)"`
-	ActivityName string    `json:"activity_name" xorm:"not null default('') comment('互动名字') VARCHAR(128)"`
-	PrizeName    string    `json:"prize_name" xorm:"not null default('') comment('奖品名字') VARCHAR(128)"`
-	PrizeImg     string    `json:"prize_img" xorm:"not null default('') comment('奖品图片') VARCHAR(255)"`
-	PrizeType    int       `json:"prize_type" xorm:"not null default(0) comment('订单来源1普通抽奖2订单抽奖3订单送礼4直播下单') INT(11)"`
-	Status       int       `json:"status" xorm:"not null default 0 comment('是否已经兑奖0否1是') TINYINT(1)"`
-	IsDelete     bool      `json:"is_delete" xorm:"not null default(0) comment('软删除') TINYINT(1)"`
-	CreatedAt    time.Time `json:"created_at" xorm:"not null created comment('创建时间') DATETIME"`
-	UpdatedAt    time.Time `json:"updated_at" xorm:"not null updated comment('更新时间') DATETIME"`
+	Id              int64     `json:"id" xorm:"not null pk autoincr INT(11)"`
+	UserId          int64     `json:"user_id" xorm:"not null comment('用户表id') INT(11)"`
+	ActivityId      int64     `json:"activity_id" xorm:"not null comment('互动表id') INT(11)"`
+	RehearsalId     int64     `json:"rehearsal_id" xorm:"not null default(0) comment('彩排id') INT(11)"`
+	CustomerOrderId int64     `json:"customer_order_id" xorm:"not null default 0 comment('客户订单id') INT(11)"`
+	ArchId          int       `json:"arch_id" xorm:"not null default 0 comment('归档id') INT(11)"`
+	ActivityName    string    `json:"activity_name" xorm:"not null default('') comment('互动名字') VARCHAR(128)"`
+	PrizeName       string    `json:"prize_name" xorm:"not null default('') comment('奖品名字') VARCHAR(128)"`
+	PrizeImg        string    `json:"prize_img" xorm:"not null default('') comment('奖品图片') VARCHAR(255)"`
+	PrizeType       int       `json:"prize_type" xorm:"not null default(0) comment('订单来源1普通抽奖2订单抽奖3订单送礼4直播下单') INT(11)"`
+	Status          int       `json:"status" xorm:"not null default 0 comment('是否已经兑奖0否1是') TINYINT(1)"`
+	IsDelete        bool      `json:"is_delete" xorm:"not null default(0) comment('软删除') TINYINT(1)"`
+	CreatedAt       time.Time `json:"created_at" xorm:"not null created comment('创建时间') DATETIME"`
+	UpdatedAt       time.Time `json:"updated_at" xorm:"not null updated comment('更新时间') DATETIME"`
 }
 
 func (t *UserPrize) TableName() string {
diff --git a/services/pay/handle.go b/services/pay/handle.go
index bc4c659..ba92301 100644
--- a/services/pay/handle.go
+++ b/services/pay/handle.go
@@ -3,8 +3,8 @@ package pay_service
 import (
 	"errors"
 	"fmt"
+	"github.com/ouxuanserver/osmanthuswine/src/core"
 	"github.com/xormplus/xorm"
-	"hudongzhuanjia/logger"
 	"hudongzhuanjia/models"
 	"hudongzhuanjia/services/im"
 	"hudongzhuanjia/utils"
@@ -21,102 +21,121 @@ func init() {
 //处理支付成功之后的回调问题
 func HandleSuccess(order *models.UserOrder) error {
 	if order.GoodType == 4 { // 直播商品
-		customerOrder := new(models.CustomerOrder)
-		_, err := customerOrder.UpdateStatusBy(order.OutTradeNo, 0, 1)
-		if err != nil {
-			return errors.New("更新状态发送错误")
-		}
-		customerOrder.GetByOutTradeNO(order.OutTradeNo)
-		if customerOrder.Status != 1 {
-			return errors.New("商品订单状态信息出现异常")
+		// 可以使用事务进行控制
+		activity := new(models.Activity)
+		exist, err := models.Get(activity, order.ActivityId)
+		if err != nil || !exist {
+			return errors.New("互动信息异常")
 		}
-		subs, err := models.GetCustomerOrderSubsByOrderNos(customerOrder.OrderNo)
+		s := core.GetXormAuto().NewSession()
+		defer s.Close()
+		err = s.Begin()
 		if err != nil {
-			logger.Error("商品子订单查询异常", err)
+			s.Rollback()
 			return err
 		}
-		for _, sub := range subs {
-			go im_service.SendGroupCustomMessage(customerOrder.BuyerId, order.ActivityId, im_service.NoticeLiveGoodBuy,
-				map[string]interface{}{
-					"goods_pic_url": sub["goods_pic_url"],
-					"goods_num":     sub["goods_num"],
-					"good_name":     sub["good_name"],
-					"good_price":    sub["good_price"],
-					"goods_id":      sub["goods_id"],
-					"timestamp":     time.Now().Unix(),
-				})
+		cOrder := models.CustomerOrder{}
+		exist, err = s.Where("is_delete=0 and out_trade_no=?", order.OutTradeNo).Get(cOrder)
+		if err != nil || !exist || cOrder.Status != 0 {
+			s.Rollback()
+			return errors.New("客户订单异常")
 		}
-
-		activity := new(models.Activity)
-		exist, err := models.Get(activity, order.ActivityId)
-		if err != nil || !exist {
-			return errors.New("互动信息异常")
+		cOrder.Status = 1
+		_, err = s.Where("out_trade_no=?", order.OutTradeNo).Cols("").Update(&cOrder)
+		if err != nil {
+			s.Rollback()
+			return errors.New("订单状态异常")
 		}
 
-		gift := new(models.OrderGift)
-		exist, err = gift.GetByActivityId(order.ActivityId)
+		subs := make([]map[string]string, 0)
+		err = core.GetXormAuto().Table(new(models.CustomerOrderSub)).Alias("s").
+			Select("s.order_no, s.goods_id, s.goods_num, s.good_name, s.good_price, g.goods_pic_url").
+			Join("left", new(models.CustomerGoods).Alias("g"), "g.id=s.goods_id").
+			Where("s.is_delete=0 and order_no=?", cOrder.OrderNo).Find(&subs)
 		if err != nil {
-			err = fmt.Errorf("获取订单送礼错误: err-> %v, activity_id-> %v", err, activity.Id)
-			logger.Error(err)
+			s.Rollback()
 			return err
 		}
 
-		if !exist {
-			return nil
+		gift := models.OrderGift{}
+		exist, err = s.Where("is_delete=0 and order_gift_switch=? "+"and activity_id=?",
+			define.StatusOpen, activity.Id).Get(&gift)
+		if err != nil {
+			s.Rollback()
+			return err
 		}
-
-		prize := new(models.UserPrize)
-		prize.UserId = order.UserId
-		prize.ActivityId = order.ActivityId
-		prize.RehearsalId = activity.RehearsalId
-		prize.ActivityName = activity.Name
-		prize.ArchId = activity.ArchId
-		prize.PrizeName = gift.GiftName
-		prize.PrizeImg = gift.GiftPicUrl
-		prize.PrizeType = 4
-		prize.IsDelete = false
-		prize.Status = 1
-		if gift.Num > 0 {
-			count, err := new(models.CustomerOrder).
-				Count(activity.Id, activity.RehearsalId, customerOrder.CreatedAt, activity.ArchId)
-			if err != nil {
-				err = fmt.Errorf("订单人数统计失败: err->%v, out_trade_no->%v", err, order.OutTradeNo)
-				logger.Error(err)
-				return err
-			}
-
-			if gift.Num <= int(count) { // 人数足够
-				return nil
+		if exist {
+			prize := new(models.UserPrize)
+			prize.UserId = order.UserId
+			prize.ActivityId = order.ActivityId
+			prize.RehearsalId = activity.RehearsalId
+			prize.CustomerOrderId = cOrder.Id
+			prize.ActivityName = activity.Name
+			prize.ArchId = activity.ArchId
+			prize.PrizeName = gift.GiftName
+			prize.PrizeImg = gift.GiftPicUrl
+			prize.PrizeType = 4
+			prize.IsDelete = false
+			prize.Status = 1
+			if gift.Num <= 0 { // 不限制
+				_, err = s.InsertOne(prize)
+				if err != nil {
+					s.Rollback()
+					return err
+				}
+				cOrder.UserPrizeId = prize.Id
+				_, err := s.ID(cOrder.Id).NoAutoCondition().Cols("user_prize_id").Update(&cOrder)
+				if err != nil {
+					s.Rollback()
+					return err
+				}
+			} else if gift.Num > 0 {
+				count, err := s.Where("activity_id=? and rehearsal_id=? and arch_id=? and is_delete=0",
+					activity.Id, activity.RehearsalId, activity.ArchId).NoAutoCondition().Count(&gift)
+				if err != nil {
+					s.Rollback()
+					return err
+				}
+				if gift.Num > int(count) { // 足够
+					_, err = s.InsertOne(prize)
+					if err != nil {
+						s.Rollback()
+						return err
+					}
+					cOrder.UserPrizeId = prize.Id
+					_, err := s.ID(cOrder.Id).NoAutoCondition().Cols("user_prize_id").Update(&cOrder)
+					if err != nil {
+						s.Rollback()
+						return err
+					}
+				}
 			}
 		}
-		_, err = prize.Add()
+		err = s.Commit()
 		if err != nil {
-			err = fmt.Errorf("奖品添加失败: err->%v, out_trade_no->%v", err, order.OutTradeNo)
-			logger.Error(err)
+			s.Rollback()
 			return err
 		}
-
-		customerOrder.UserPrizeId = prize.Id
-		_, err = models.Update(customerOrder.Id, customerOrder, "user_prize_id")
-		if err != nil {
-			err = fmt.Errorf("奖品记录添加失败: err-> %v, out_trade_no-> %v, prize_id->%v", err, order.OutTradeNo, prize.Id)
-			logger.Error(err)
-			return err
+		for _, sub := range subs {
+			go im_service.SendGroupCustomMessage(cOrder.BuyerId, order.ActivityId, im_service.NoticeLiveGoodBuy,
+				map[string]interface{}{
+					"goods_pic_url": sub["goods_pic_url"],
+					"goods_num":     sub["goods_num"],
+					"good_name":     sub["good_name"],
+					"good_price":    sub["good_price"],
+					"goods_id":      sub["goods_id"],
+					"timestamp":     time.Now().Unix(),
+				})
 		}
 	} else if order.GoodType == 3 { // 直播红包
 		info := new(models.LiveRedEnvelopeRule)
 		_, err := info.UpdateStatusByOutTradeNo(order.OutTradeNo, 1)
 		if err != nil {
-			err = fmt.Errorf("状态改变出现错误: err->%v, out_trade_no->%v", err, order.OutTradeNo)
-			logger.Error(err.Error())
 			return err
 		}
 		exist, err := info.GetByOutTradeNo(order.OutTradeNo)
 		if err != nil || !exist || info.Status != 1 {
-			err = fmt.Errorf("直播红包信息异常: err-> %v, exist->%v, status->%v, out_trade_no->%v",
-				err, exist, info.Status, order.OutTradeNo)
-			logger.Error(err.Error())
-			return err
+			return errors.New("订单状态异常")
 		}
 
 		go im_service.SendGroupCustomMessage(info.UserId, order.ActivityId, im_service.NoticeLiveRedPackStart,
@@ -129,29 +148,22 @@ func HandleSuccess(order *models.UserOrder) error {
 		history := new(models.RewardHistory)
 		exist, err := history.GetByOutTradeNo(order.OutTradeNo)
 		if err != nil || !exist || history.Status != -1 {
-			err = fmt.Errorf("打赏历史异常: err->%v, out_trade_no %v", err, order.OutTradeNo)
-			logger.Error(err.Error())
-			return err
+			return errors.New("订单状态异常")
 		}
 		_, err = history.UpdateStatus(history.Id, 0)
 		if err != nil {
-			err = fmt.Errorf("打赏状态发送变化: err->%v, out_trade_no %v", err, order.OutTradeNo)
-			logger.Error(err.Error())
 			return err
 		}
 	} else if order.GoodType == 1 { // 霸屏
 		history := new(models.BullyScreenHistory)
 		exist, err := history.GetByOutTradeNo(order.OutTradeNo)
 		if err != nil || !exist || history.Status != -1 {
-			err = fmt.Errorf("打赏历史异常: err->%v, out_trade_no %v", err, order.OutTradeNo)
-			logger.Error(err.Error())
-			return err
+			return errors.New("订单状态异常")
 		}
 
 		_, err = history.UpdateStatus(history.Id, 0)
 		if err != nil {
-			err = fmt.Errorf("霸屏状态发送变化: err->%v, out_trade_no %v", err, order.OutTradeNo)
-			logger.Error(err.Error())
+			return err
 		}
 	}
 	return nil
@@ -162,6 +174,7 @@ func HandleGoodOrder() error {
 	orders, err := models.GetExpiredAtLiveCustomerOrder()
 	if err != nil {
 		err = fmt.Errorf("获取过期订单信息错误原因: %v", err)
+		return err
 	}
 	for _, v := range orders {
 		if v.Type != 1 || v.Status != 0 {
@@ -172,20 +185,23 @@ func HandleGoodOrder() error {
 			err = fmt.Errorf("订单查询出现错误: %v, out_trade_no: %v", err, v.OutTradeNo)
 			return err
 		}
-		if res["trade_state"] != define.CODE_TRADE_NOTPAY {
-			err = fmt.Errorf("订单非未支付订单: %v, out_trade_no: %v", res["trade_state"], v.OutTradeNo)
-			return err
-		}
-
-		err = Close(v.OutTradeNo)
-		if err != nil {
-			return err
-		}
-		v.Status = 9
-		v.CancelTime = time.Now()
-		_, err = models.Update(v.Id, v, "status", "cancel_time")
-		if err != nil {
-			return err
+		if res["trade_state"] == define.CODE_TRADE_SUCCESS {
+			v.Status = 1
+			_, err = models.Update(v.Id, v, "status")
+			if err != nil {
+				return err
+			}
+		} else if res["trade_state"] == define.CODE_TRADE_NOTPAY {
+			err = Close(v.OutTradeNo)
+			if err != nil {
+				return err
+			}
+			v.Status = 9
+			v.CancelTime = time.Now()
+			_, err = models.Update(v.Id, v, "status", "cancel_time")
+			if err != nil {
+				return err
+			}
 		}
 
 		subs, err := models.GetSubOrdersByOrderNo(v.OrderNo)
diff --git a/services/pay/order.go b/services/pay/order.go
index a3f20d9..e00adab 100644
--- a/services/pay/order.go
+++ b/services/pay/order.go
@@ -30,7 +30,6 @@ func UnifiedOrder(content, openId string, fee, goodType, userId, activityId, exp
 	body["nonce_str"] = nonceStr
 	body["sign_type"] = pay_core.SignType_MD5
 	body["openid"] = openId
-	//body["time_expire"] = pay_core.FormatTime(time.Unix(expireAt, 0))
 
 	resp, err := pay.UnifiedOrder(client, body)
 	if err != nil {
@@ -60,7 +59,6 @@ func UnifiedOrder(content, openId string, fee, goodType, userId, activityId, exp
 	pac := "prepay_id=" + resp["prepay_id"]
 	paySign := pay_core.JsapiSign(client.AppId(), timestamp, nonceStr, pac, pay_core.SignType_MD5, define.ApiKey)
 
-	//go PutOrderDelayQueue(userOrder)
 	return map[string]interface{}{
 		"appid":         client.AppId(),
 		"timestamp":     timestamp,
@@ -99,7 +97,6 @@ func ReOrder(outTradeNo string) (map[string]interface{}, error) {
 		"out_trade_no":  outTradeNo,
 		"user_order_id": userOrder.Id,
 	}, nil
-
 }
 
 // Notify