|
@ -3,8 +3,8 @@ package pay_service |
|
|
import ( |
|
|
import ( |
|
|
"errors" |
|
|
"errors" |
|
|
"fmt" |
|
|
"fmt" |
|
|
|
|
|
"github.com/ouxuanserver/osmanthuswine/src/core" |
|
|
"github.com/xormplus/xorm" |
|
|
"github.com/xormplus/xorm" |
|
|
"hudongzhuanjia/logger" |
|
|
|
|
|
"hudongzhuanjia/models" |
|
|
"hudongzhuanjia/models" |
|
|
"hudongzhuanjia/services/im" |
|
|
"hudongzhuanjia/services/im" |
|
|
"hudongzhuanjia/utils" |
|
|
"hudongzhuanjia/utils" |
|
@ -21,102 +21,121 @@ func init() { |
|
|
//处理支付成功之后的回调问题
|
|
|
//处理支付成功之后的回调问题
|
|
|
func HandleSuccess(order *models.UserOrder) error { |
|
|
func HandleSuccess(order *models.UserOrder) error { |
|
|
if order.GoodType == 4 { // 直播商品
|
|
|
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 { |
|
|
if err != nil { |
|
|
logger.Error("商品子订单查询异常", err) |
|
|
|
|
|
|
|
|
s.Rollback() |
|
|
return err |
|
|
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 { |
|
|
if err != nil { |
|
|
err = fmt.Errorf("获取订单送礼错误: err-> %v, activity_id-> %v", err, activity.Id) |
|
|
|
|
|
logger.Error(err) |
|
|
|
|
|
|
|
|
s.Rollback() |
|
|
return err |
|
|
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 { |
|
|
if err != nil { |
|
|
err = fmt.Errorf("奖品添加失败: err->%v, out_trade_no->%v", err, order.OutTradeNo) |
|
|
|
|
|
logger.Error(err) |
|
|
|
|
|
|
|
|
s.Rollback() |
|
|
return err |
|
|
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 { // 直播红包
|
|
|
} else if order.GoodType == 3 { // 直播红包
|
|
|
info := new(models.LiveRedEnvelopeRule) |
|
|
info := new(models.LiveRedEnvelopeRule) |
|
|
_, err := info.UpdateStatusByOutTradeNo(order.OutTradeNo, 1) |
|
|
_, err := info.UpdateStatusByOutTradeNo(order.OutTradeNo, 1) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
err = fmt.Errorf("状态改变出现错误: err->%v, out_trade_no->%v", err, order.OutTradeNo) |
|
|
|
|
|
logger.Error(err.Error()) |
|
|
|
|
|
return err |
|
|
return err |
|
|
} |
|
|
} |
|
|
exist, err := info.GetByOutTradeNo(order.OutTradeNo) |
|
|
exist, err := info.GetByOutTradeNo(order.OutTradeNo) |
|
|
if err != nil || !exist || info.Status != 1 { |
|
|
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, |
|
|
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) |
|
|
history := new(models.RewardHistory) |
|
|
exist, err := history.GetByOutTradeNo(order.OutTradeNo) |
|
|
exist, err := history.GetByOutTradeNo(order.OutTradeNo) |
|
|
if err != nil || !exist || history.Status != -1 { |
|
|
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) |
|
|
_, err = history.UpdateStatus(history.Id, 0) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
err = fmt.Errorf("打赏状态发送变化: err->%v, out_trade_no %v", err, order.OutTradeNo) |
|
|
|
|
|
logger.Error(err.Error()) |
|
|
|
|
|
return err |
|
|
return err |
|
|
} |
|
|
} |
|
|
} else if order.GoodType == 1 { // 霸屏
|
|
|
} else if order.GoodType == 1 { // 霸屏
|
|
|
history := new(models.BullyScreenHistory) |
|
|
history := new(models.BullyScreenHistory) |
|
|
exist, err := history.GetByOutTradeNo(order.OutTradeNo) |
|
|
exist, err := history.GetByOutTradeNo(order.OutTradeNo) |
|
|
if err != nil || !exist || history.Status != -1 { |
|
|
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) |
|
|
_, err = history.UpdateStatus(history.Id, 0) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
err = fmt.Errorf("霸屏状态发送变化: err->%v, out_trade_no %v", err, order.OutTradeNo) |
|
|
|
|
|
logger.Error(err.Error()) |
|
|
|
|
|
|
|
|
return err |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
return nil |
|
|
return nil |
|
@ -162,6 +174,7 @@ func HandleGoodOrder() error { |
|
|
orders, err := models.GetExpiredAtLiveCustomerOrder() |
|
|
orders, err := models.GetExpiredAtLiveCustomerOrder() |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
err = fmt.Errorf("获取过期订单信息错误原因: %v", err) |
|
|
err = fmt.Errorf("获取过期订单信息错误原因: %v", err) |
|
|
|
|
|
return err |
|
|
} |
|
|
} |
|
|
for _, v := range orders { |
|
|
for _, v := range orders { |
|
|
if v.Type != 1 || v.Status != 0 { |
|
|
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) |
|
|
err = fmt.Errorf("订单查询出现错误: %v, out_trade_no: %v", err, v.OutTradeNo) |
|
|
return err |
|
|
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) |
|
|
subs, err := models.GetSubOrdersByOrderNo(v.OrderNo) |
|
|