|
|
@ -7,10 +7,10 @@ import ( |
|
|
|
activity_service "hudongzhuanjia/services/activity" |
|
|
|
pay_service "hudongzhuanjia/services/pay" |
|
|
|
ws_send_service "hudongzhuanjia/services/ws_send" |
|
|
|
"hudongzhuanjia/utils" |
|
|
|
"hudongzhuanjia/utils/code" |
|
|
|
"hudongzhuanjia/utils/define" |
|
|
|
"math/rand" |
|
|
|
"strings" |
|
|
|
"time" |
|
|
|
) |
|
|
|
|
|
|
@ -29,7 +29,6 @@ func (t *ShakeRedEnvelopeCtl) Status() { |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
// todo:调用支付接口
|
|
|
|
func (t *ShakeRedEnvelopeCtl) Shake() { |
|
|
|
customerId := t.MustGetInt64("customer_id") |
|
|
|
ruleId := t.MustGetInt64("shake_red_envelope_rule_id") |
|
|
@ -43,11 +42,6 @@ func (t *ShakeRedEnvelopeCtl) Shake() { |
|
|
|
t.Assert(exist, code.MSG_SHAKERB_RULE_NOT_EXIST, "摇红包规则不存在") |
|
|
|
t.CheckRunning(rule.ShakeRedEnvelopeStatus) |
|
|
|
|
|
|
|
area := new(models.AreaStore) |
|
|
|
exist, err = models.GetById(area, areaId) |
|
|
|
t.CheckErr(err) |
|
|
|
t.Assert(exist, code.MSG_SHAKERB_NOT_EXIST, "地区不存在") |
|
|
|
|
|
|
|
// 查询摇红包活动主id, is_pay=1给钱了,给摇
|
|
|
|
envelope := new(models.ShakeRedEnvelopeActivity) |
|
|
|
exist, err = envelope.GetPayedById(rule.ShakeRedEnvelopeActivityId) |
|
|
@ -66,7 +60,7 @@ func (t *ShakeRedEnvelopeCtl) Shake() { |
|
|
|
|
|
|
|
record := new(models.ShakeRedEnvelopeRecord) /// 之后使用, 存入乐观锁
|
|
|
|
if moduleService.BesideRepeat == define.MODULE_BESIDE_REPEAT { // 剔除摇过红包的用户
|
|
|
|
exist, err = record.ExistRecord(activity.RehearsalId, activity.Id, rule.Id, envelope.Id, userId) |
|
|
|
exist, err = record.ExistRecord(activity.RehearsalId, rule.Id, userId) |
|
|
|
t.CheckErr(err) |
|
|
|
t.Assert(!exist, code.MSG_SHAKERB_RECORD_NOT_HIT, "您已经摇过红包了,请等待下一轮.") // 不存在继续往下走
|
|
|
|
} |
|
|
@ -76,7 +70,7 @@ func (t *ShakeRedEnvelopeCtl) Shake() { |
|
|
|
t.Assert(r.Float64()*100 <= rule.Probability, code.MSG_SHAKERB_RECORD_NOT_HIT, "您与红包擦肩而过") // 必须在红包概率以内才能获取
|
|
|
|
|
|
|
|
// 增加session 或者乐观锁
|
|
|
|
exist, err = record.GetByRuleId(ruleId, activity.RehearsalId) |
|
|
|
exist, err = record.GetByRuleId(ruleId, activity.RehearsalId, 0) |
|
|
|
t.CheckErr(err) |
|
|
|
t.Assert(exist, code.MSG_SHAKERB_RECORD_NOT_HIT, "红包已经派发完毕") |
|
|
|
|
|
|
@ -86,22 +80,26 @@ func (t *ShakeRedEnvelopeCtl) Shake() { |
|
|
|
t.CheckErr(err) |
|
|
|
t.Assert(exist, code.MSG_USER_NOT_EXIST, "用户不存在") |
|
|
|
|
|
|
|
// 记录红包 ---> 非彩排才能
|
|
|
|
if activity.RehearsalId == 0 { |
|
|
|
record.TransferType = 1 // 微信转账
|
|
|
|
record.PartnerTradeNo = utils.RandomStr(32) |
|
|
|
// 加入延迟队列
|
|
|
|
pay_service.PutTransferDelayQueue("欧轩互动-红包活动", record.PartnerTradeNo, user.Openid, int(record.Amount*100), 5, 5*60) |
|
|
|
} |
|
|
|
|
|
|
|
record.IsDraw = 1 |
|
|
|
record.UserId = user.Id |
|
|
|
record.AreaName = area.Name |
|
|
|
record.Name = activity.Name |
|
|
|
row, err := record.UpdateAllColsById(record.Id) |
|
|
|
record.UserId = userId |
|
|
|
record.AreaId = areaId |
|
|
|
row, err := record.UpdateById(record.Id, "version,is_draw, user_id, area_id") |
|
|
|
t.CheckErr(err) |
|
|
|
t.Assert(row == 1, code.MSG_SHAKERB_RECORD_NOT_HIT, "您与红包擦肩而过") // 那么 row == 1 为已经成功抢到
|
|
|
|
|
|
|
|
// 记录红包 ---> 非彩排才能
|
|
|
|
if activity.RehearsalId == 0 { |
|
|
|
addr := strings.Split(t.Request.OriginRequest.RemoteAddr, ":") |
|
|
|
result, err := pay_service.SendRedPack("欧轩互动", user.Openid, "红包只会越抢越多", addr[0], |
|
|
|
"直播抢红包活动", "抢的多,赚得多", int(record.Amount*100), 1, 2) |
|
|
|
if err != nil { |
|
|
|
t.ERROR("红包被领完了", code.MSG_SHAKERB_RECORD_NOT_HIT) |
|
|
|
} |
|
|
|
record.MchBillno = result.MchBillno |
|
|
|
record.Version += 1 |
|
|
|
record.UpdateById(record.Id, "version, mch_billno") |
|
|
|
} |
|
|
|
|
|
|
|
// 通知大屏
|
|
|
|
total, err := new(models.ShakeRedEnvelopeRecord).Total(activity.Id, activity.RehearsalId, envelope.Id, rule.Id) |
|
|
|
remaining, err := new(models.ShakeRedEnvelopeRecord).Count(activity.Id, activity.RehearsalId, envelope.Id, rule.Id, -1) |
|
|
|