Browse Source

打赏 和 霸屏

master
黄梓健 5 years ago
parent
commit
1dc70f66b3
  1. 3
      controllers/client/bully_screen.go
  2. 69
      controllers/pc/bully_screen.go
  3. 37
      controllers/pc/reward.go
  4. 14
      models/bully_screen_history.go
  5. 3
      models/bully_screen_wallet.go
  6. 6
      models/reward_history.go
  7. 11
      models/user_order.go
  8. 37
      services/activity/module.go
  9. 59
      services/pay/order.go

3
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

69
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)
}

37
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)

14
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
}

3
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)
}

6
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
}

11
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)

37
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
}

59
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,16 +80,22 @@ 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 {
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
}
}
}
}
}
const CallbackOrderUrl = "https://api.ouxuanhudong.com/PcClient/common/WeChatOauthCtl/callbackOrder"
@ -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
}
Loading…
Cancel
Save