diff --git a/controllers/client/bully_screen.go b/controllers/client/bully_screen.go index 27a30a7..3e92310 100644 --- a/controllers/client/bully_screen.go +++ b/controllers/client/bully_screen.go @@ -69,9 +69,6 @@ func (t *BullyScreenCtl) PaScreen() { ReviewTime: 0, Status: -1, Content: content, - IsDelete: false, - CreatedAt: time.Now(), - UpdatedAt: time.Now(), } if activity.RehearsalId != 0 { history.Status = 0 diff --git a/controllers/pc/bully_screen.go b/controllers/pc/bully_screen.go index 5a3eee7..324bb20 100644 --- a/controllers/pc/bully_screen.go +++ b/controllers/pc/bully_screen.go @@ -7,11 +7,8 @@ import ( "hudongzhuanjia/services/pay" "hudongzhuanjia/utils" "hudongzhuanjia/utils/code" - "hudongzhuanjia/utils/define" "strings" "time" - - "github.com/ouxuanserver/osmanthuswine/src/core" ) type BullyScreenCtl struct { @@ -53,47 +50,36 @@ func (t *BullyScreenCtl) Review() { rehearsalId := t.MustGetInt64("rehearsal_id") //将金额退回给用户 - result := make([]*models.BullyScreenHistory, 0) - err := core.GetXormAuto().Where("is_delete=0").In("id", ids).Find(&result) + result, err := models.GetBullyScreenHistoryByIds(ids) t.CheckErr(err) for _, v := range result { - if v.Status != 0 { - t.ERROR("该霸屏已处理", code.MSG_USER_DATA_ERROR) - } if status { // true 失败 、、 false 成功 - _, err = v.UpdateStatus(v.Id, 1) + v.Status = 1 + _, err = models.Update(v.Id, v, "status") t.CheckErr(err) if rehearsalId != 0 { // 彩排 continue } - //todo: 回退金额给用户 ==> 直接微信退款 - // 1. 提请微信退款 - // 2. 查询退款是否成功 - // 3. 退款成功设置状态 - // 4. 写入金额流水记录 - _, err = pay_service.Refund("欧轩互动-霸屏拉黑", v.OutTradeNo) t.CheckErr(err) - } else { - _, err = v.UpdateStatus(v.Id, 2) + v.Status = 2 + _, err = models.Update(v.Id, v, "status") t.CheckErr(err) - // todo: 审核成功 - // 1. 金额打入主账号的打赏钱包里面 - // 2. 记录金额流水 - if rehearsalId != 0 { continue } + // 订单宣告完成 + _, err = new(models.UserOrder).UpdateStatusByOutTradeNo(v.OutTradeNo, 2) + t.CheckErr(err) wallet := new(models.BullyScreenWallet) _, err = wallet.IncrBalance(customerId, v.Amount) t.CheckErr(err) - - _, err = core.GetXormAuto().InsertOne(&models.BullyScreenWalletHistory{ + history := models.BullyScreenWalletHistory{ CustomerId: customerId, UserId: v.UserId, Money: v.Amount, @@ -102,7 +88,8 @@ func (t *BullyScreenCtl) Review() { Mark: "霸屏金额", CreatedAt: time.Now(), UpdatedAt: time.Now(), - }) + } + _, err = models.Add(history) t.CheckErr(err) } } @@ -137,17 +124,19 @@ func (t *BullyScreenCtl) Blacklist() { //获取目前霸屏得总金额 func (t *BullyScreenCtl) Amount() { activityId := t.MustGetInt64("activity_id") - rehearsalId := t.MustGetInt64("rehearsal_id") + + activity := new(models.Activity) + exist, err := models.Get(activity, activityId) + t.CheckErr(err) + t.Assert(exist, code.MSG_ACTIVITY_NOT_EXIST, "互动不存在") //获取霸屏服务得id bullyScreenServer := new(models.BullyScreenServer) - exist, err := bullyScreenServer.GetByActivityId(activityId) + exist, err = bullyScreenServer.GetByActivityId(activityId) t.CheckErr(err) t.Assert(exist, code.MSG_BULLY_SCREEN_SERVER_NOT_EXIST, "霸屏不存在") - totalSecond, err := core.GetXormAuto().Where("bully_screen_server_id=? and status=3 and "+ - " is_delete=false and rehearsal_id=?", bullyScreenServer.Id, rehearsalId). - Sum(new(models.BullyScreenHistory), "second") + totalSecond, err := new(models.BullyScreenHistory).SumSecond(bullyScreenServer.Id, activity.RehearsalId) t.CheckErr(err) t.JSON(map[string]interface{}{ @@ -155,11 +144,6 @@ func (t *BullyScreenCtl) Amount() { }) } -type ModuleService struct { - models.ActivityModuleService `xorm:"extends"` - History models.ModuleServiceHistory `xorm:"extends"` -} - //获取最新得霸屏记录 func (t *BullyScreenCtl) Latest() { activityId := t.MustGetInt64("activity_id") @@ -181,24 +165,11 @@ func (t *BullyScreenCtl) Latest() { t.JSON(result) } - //根据主活动得id获取所有得模块列表 - module := new(ModuleService) - exist, err = core.GetXormAuto().Table(new(models.ActivityModuleService)).Alias("s"). - Join("LEFT", new(models.ModuleServiceHistory).Alias("h"), - "s.service_module_history_id=h.id and h.is_delete=0 and h.name=?", define.MODULE_BULLYS). - Where("s.activity_id=? and s.is_delete=0", bullyScreenServer.ActivityId). - Get(module) - t.CheckErr(err) - if !exist { - t.ERROR("该服务模块尚未开通", code.MSG_ERR_Param) - } - //更改推送状态 result.BullyScreenHistory.Status = 3 result.BullyScreenHistory.UpdatedAt = time.Now() - t.CheckErr(models.Save(map[string]interface{}{ - "id =": result.BullyScreenHistory.Id, - }, &result.BullyScreenHistory, "status", "updated_at")) + _, err = models.Update(result.BullyScreenHistory.Id, &result.BullyScreenHistory, "status") + t.CheckErr(err) t.JSON(result) } diff --git a/controllers/pc/reward.go b/controllers/pc/reward.go index a15da01..caa03ca 100644 --- a/controllers/pc/reward.go +++ b/controllers/pc/reward.go @@ -2,6 +2,7 @@ package pc import ( "fmt" + "github.com/ouxuanserver/osmanthuswine/src/core" "hudongzhuanjia/controllers" "hudongzhuanjia/models" bully_reward_service "hudongzhuanjia/services/bully_reward" @@ -11,8 +12,6 @@ import ( "hudongzhuanjia/utils/code" "strings" "time" - - "github.com/ouxuanserver/osmanthuswine/src/core" ) type RewardCtl struct { @@ -74,26 +73,19 @@ func (t *RewardCtl) WaitReview() { //审核 func (t *RewardCtl) Review() { - // todo: false 代表通过, true 代表不通过 - idList := t.MustGet("ids") status := t.MustGetBool("status") - ids := strings.Split(idList, "|") + ids := strings.Split(t.MustGet("ids"), "|") rehearsalId := t.MustGetInt64("rehearsal_id") + uid := t.MustGetUID() - result := make([]*models.RewardHistory, 0) - err := core.GetXormAuto().Where("is_delete=0").In("id", ids).Find(&result) + result, err := models.GetRewardHistoryByIds(ids) t.CheckErr(err) // 审核 for _, v := range result { - if v.Status != 0 { - t.ERROR("该打赏已处理", code.MSG_USER_DATA_ERROR) - } if status { // false 通过 , true 不通过 - // 回退金额给用户 - // 应该微信退款 - - _, err = v.UpdateStatus(v.Id, 1) + v.Status = 1 + _, err = models.Update(v.Id, v, "status") t.CheckErr(err) if rehearsalId != 0 { // 彩排不需要金额 @@ -104,17 +96,12 @@ func (t *RewardCtl) Review() { t.CheckErr(err) } else { - var exist bool //增加客户的金额 - _, err = v.UpdateStatus(v.Id, 2) + v.Status = 2 + _, err = models.Update(v.Id, v, "status") t.CheckErr(err) - user := new(models.User) - exist, err = models.Get(user, v.UserId) - t.CheckErr(err) - t.Assert(exist, code.MSG_USER_NOT_EXIST, "用户不存在") - - go im_service.SendGroupCustomMessage(user.Id, v.ActivityId, im_service.NoticeReward, + go im_service.SendGroupCustomMessage(v.UserId, v.ActivityId, im_service.NoticeReward, map[string]interface{}{ "amount": v.Amount, "content": v.Content, @@ -123,12 +110,6 @@ func (t *RewardCtl) Review() { continue } - uid := t.MustGetUID() - customer := new(models.Customer) - exist, err = models.Get(customer, uid) - t.CheckErr(err) - t.Assert(exist, code.MSG_CUSTOMER_NOT_EXIST, "客户不存在") - wallet := new(models.RewardWallet) _, err = wallet.IncrBalance(uid, v.Amount) t.CheckErr(err) diff --git a/models/bully_screen_history.go b/models/bully_screen_history.go index 05b662c..516b047 100644 --- a/models/bully_screen_history.go +++ b/models/bully_screen_history.go @@ -52,7 +52,6 @@ func (t *BullyScreenHistory) UpdateStatusByOutTradeNo(outTradeNo string, status func (t *BullyScreenHistory) UpdateStatusByIds(ids []int64, status int) error { if len(ids) > 0 { - t.Status = status _, err := core.GetXormAuto().In("id", ids).Cols("status"). Update(&BullyScreenHistory{Status: status}) @@ -60,3 +59,16 @@ func (t *BullyScreenHistory) UpdateStatusByIds(ids []int64, status int) error { } return nil } + +func GetBullyScreenHistoryByIds(ids interface{}) ([]*BullyScreenHistory, error) { + result := make([]*BullyScreenHistory, 0) + err := core.GetXormAuto().Where("is_delete=0 and status=0").In("id", ids).Find(&result) + return result, err +} + +func (t *BullyScreenHistory) SumSecond(serverId, rehearsalId interface{}) (float64, error) { + totalSecond, err := core.GetXormAuto().Where("bully_screen_server_id=? and status=3 and "+ + " is_delete=false and rehearsal_id=?", serverId, rehearsalId). + Sum(new(BullyScreenHistory), "second") + return totalSecond, err +} diff --git a/models/bully_screen_wallet.go b/models/bully_screen_wallet.go index 519ae44..7d18a13 100644 --- a/models/bully_screen_wallet.go +++ b/models/bully_screen_wallet.go @@ -20,5 +20,6 @@ func (t *BullyScreenWallet) TableName() string { } func (t *BullyScreenWallet) IncrBalance(cid int64, money float64) (int64, error) { - return core.GetXormAuto().Where("customer_id=?", cid).Incr("balance", money).Update(t) + return core.GetXormAuto().Where("customer_id=?", cid). + Incr("balance", money).Cols("balance").Update(t) } diff --git a/models/reward_history.go b/models/reward_history.go index 237ca58..ae80eb8 100644 --- a/models/reward_history.go +++ b/models/reward_history.go @@ -53,3 +53,9 @@ func (t *RewardHistory) UpdateStatusByIds(ids []int64, status int) error { } return nil } + +func GetRewardHistoryByIds(ids interface{}) ([]*RewardHistory, error) { + result := make([]*RewardHistory, 0) + err := core.GetXormAuto().Where("is_delete=0 and status=0").In("id", ids).Find(&result) + return result, err +} diff --git a/models/user_order.go b/models/user_order.go index 2550714..138fa53 100644 --- a/models/user_order.go +++ b/models/user_order.go @@ -27,7 +27,7 @@ type UserOrder struct { TransactionId string `json:"transaction_id" xorm:"not null default('') comment('微信支付订单号') VARCHAR(32)"` ExpireAt int64 `json:"time_expire" xorm:"not null default('0') comment('交易过期') INT(20)"` PrepayId string `json:"prepay_id" xorm:"not null default('') comment('预支付交易会话标识') VARCHAR(64)"` - Status int `json:"status" xorm:"not null default(0) comment('0尚未支付/支付中1支付成功2已核销3转入退款4退款成功5支付失败6订单关闭7订单超时') TINYINT(1)"` + Status int `json:"status" xorm:"not null default(0) comment('0尚未支付/支付中1支付成功2已完成3转入退款4退款成功5订单关闭') TINYINT(1)"` // 退款 RefundRecvAccount string `json:"refund_recv_account" xorm:"not null default '' comment('入账账号') VARCHAR(64)"` @@ -56,10 +56,11 @@ func (t *UserOrder) UpdateStatusByOutTradeNo(outTradeNo interface{}, status int) Cols("status").Update(t) } -func (t *UserOrder) UpdateRefundByOutTradeNo(outTradeNo interface{}) (int64, error) { - return core.GetXormAuto().Where("out_trade_no=?", outTradeNo). - Cols("status", "refund_recv_account", "refund_account").Update(t) -} +// +//func (t *UserOrder) UpdateRefundByOutTradeNo(outTradeNo interface{}) (int64, error) { +// return core.GetXormAuto().Where("out_trade_no=?", outTradeNo). +// Cols("status", "refund_recv_account", "refund_account").Update(t) +//} func GetUserOrdersByStatus(status ...int) ([]*UserOrder, error) { orders := make([]*UserOrder, 0) diff --git a/services/activity/module.go b/services/activity/module.go index f9236e9..4df58be 100644 --- a/services/activity/module.go +++ b/services/activity/module.go @@ -5,15 +5,30 @@ import ( "hudongzhuanjia/models" ) -func GetModuleService(moduleName string, activityId int64) (*models.ActivityModuleService, bool, error) { - hids := make([]int64, 0) - err := core.GetXormAuto().Table(new(models.ModuleServiceHistory)).Select("id"). - Where("is_delete=0 and name=?", moduleName).Find(&hids) - if err != nil { - return nil, false, err - } - moduleService := new(models.ActivityModuleService) - exist, err := core.GetXormAuto().Where("is_delete=0 and activity_id=?", activityId). - In("service_module_history_id", hids).Get(moduleService) - return moduleService, exist, err +//func GetModuleService(moduleName string, activityId int64) (*models.ActivityModuleService, bool, error) { +// hids := make([]int64, 0) +// err := core.GetXormAuto().Table(new(models.ModuleServiceHistory)).Select("id"). +// Where("is_delete=0 and name=?", moduleName).Find(&hids) +// if err != nil { +// return nil, false, err +// } +// moduleService := new(models.ActivityModuleService) +// exist, err := core.GetXormAuto().Where("is_delete=0 and activity_id=?", activityId). +// In("service_module_history_id", hids).Get(moduleService) +// return moduleService, exist, err +//} + +//type ModuleService struct { +// models.ActivityModuleService `xorm:"extends"` +// History models.ModuleServiceHistory `xorm:"extends"` +//} + +func GetModuleService(moduleName, activityId interface{}) (*models.ActivityModuleService, bool, error) { + module := new(models.ActivityModuleService) + exist, err := core.GetXormAuto().Table(module).Alias("s"). + Join("LEFT", new(models.ModuleServiceHistory).Alias("h"), + "s.service_module_history_id=h.id and h.name=?"). + Where("s.activity_id=? and s.is_delete=0 and h.name=?", activityId, moduleName). + Get(module) + return module, exist, err } diff --git a/services/pay/order.go b/services/pay/order.go index d89efc9..bf2d782 100644 --- a/services/pay/order.go +++ b/services/pay/order.go @@ -49,11 +49,13 @@ func loopUnifiedOrder() { if !ok { panic("通道异常关闭") } - if order.ExpireAt <= time.Now().Unix() { + if order.ExpireAt <= time.Now().Unix() { // 订单超时 if order.Status == 0 { err = Close(order.OutTradeNo) // 超时关闭订单 - order.Status = 7 - _, err = models.Update(order.Id, order, "status") + if err != nil { + logger.Error("订单关闭出现错误: 错误原因->", err) + } + order.Status = 5 go HandleFailed(order) } continue @@ -61,7 +63,6 @@ func loopUnifiedOrder() { if order.Status == 0 { res, err := OrderQuery(order.OutTradeNo) - // 出现错误 if err != nil { logger.Error("查询订单出现错误: 错误原因-->", err.Error(), "交易订单号-->", order.OutTradeNo) orderDelayQueue <- order // 重新进入队列 @@ -79,13 +80,19 @@ func loopUnifiedOrder() { continue } } else if order.Status == 3 { - _, err = QueryRefund(order.OutTradeNo) + res, err := QueryRefund(order.OutTradeNo) if err != nil { logger.Error("退款订单查询错误: 错误原因-->", err.Error(), "交易订单号-->", order.OutTradeNo) continue } - } else { - continue + order.RefundAccount = res.RefundList[0].RefundAccount + order.RefundRecvAccount = res.RefundList[0].RefundRecvAccout + order.Status = 4 + _, err = models.Update(order.Id, order, "refund_account", "refund_recv_account", "status") + if err != nil { + logger.Error("退款状态改变错误: 错误原因-->", err, "交易订单号-->", order.OutTradeNo) + continue + } } } } @@ -111,6 +118,7 @@ func UnifiedOrder(content, openId string, fee, goodType, userId, activityId, exp body["nonce_str"] = nonceStr body["sign_type"] = pay_core.SignType_MD5 body["open_id"] = openId + body["time_expire"] = pay_core.FormatTime(time.Unix(expireAt, 0)) resp, err := pay.UnifiedOrder(client, body) if err != nil { @@ -292,11 +300,12 @@ func Close(outTradeNo string) error { if err != nil { return err } - err = pay.CloseOrder2(client, &pay.CloseOrderRequest{ - OutTradeNo: outTradeNo, - NonceStr: utils.RandomStr(32), - SignType: pay_core.SignType_MD5, - }) + body := make(map[string]string) + body["out_trade_no"] = outTradeNo + body["nonce_str"] = utils.RandomStr(32) + body["sign_type"] = pay_core.SignType_MD5 + + _, err = pay.CloseOrder(client, body) // 请求关闭订单,成功后得到结果 if err != nil { return err @@ -344,22 +353,12 @@ func Refund(reason, outTradeNo string) (*pay.RefundResponse, error) { return res, nil } -type QueryRefundResult struct { - Order *models.UserOrder - Query *pay.RefundQueryResponse -} - -func QueryRefund(outTradeNo string) (*QueryRefundResult, error) { - userOrder := new(models.UserOrder) - exist, err := userOrder.GetByOutTradeNo(outTradeNo) +func QueryRefund(outTradeNo string) (*pay.RefundQueryResponse, error) { + client, err := Client() if err != nil { return nil, err } - if !exist { - return nil, fmt.Errorf("不存在改笔退款") - } - client, err := Client() res, err := pay.RefundQuery2(client, &pay.RefundQueryRequest{ OutTradeNo: outTradeNo, NonceStr: utils.RandomStr(32), @@ -369,17 +368,5 @@ func QueryRefund(outTradeNo string) (*QueryRefundResult, error) { if err != nil { return nil, err } - - userOrder.RefundAccount = res.RefundList[0].RefundAccount - userOrder.RefundRecvAccount = res.RefundList[0].RefundRecvAccout - userOrder.Status = 4 - _, err = userOrder.UpdateRefundByOutTradeNo(outTradeNo) - if err != nil { - return nil, err - } - - return &QueryRefundResult{ - Order: userOrder, - Query: res, - }, nil + return res, nil }