diff --git a/controllers/client/order_entry.go b/controllers/client/order_entry.go index 7afca58..5f939a1 100644 --- a/controllers/client/order_entry.go +++ b/controllers/client/order_entry.go @@ -507,7 +507,7 @@ func (t *OrderEntryCtl) EntryOrders() { list[i].Extra = data list[i].EntryName = entry.Name } - } else { + } else if customer.IsSpecial == 2 { err = core.GetXormAuto().Table(&models.CustomerOrder{}).Alias("o").Select("o.id as order_id, "+ " o.receiver as receiver, o.phone as phone, o.address as address, o.buyer_id as user_id, o.order_entry_person_name as entry_name, "+ " o.total_amount as order_money, DATE_FORMAT(o.created_at, '%Y-%m-%d %H:%i:%S') AS order_time"). diff --git a/controllers/pc/order_draw.go b/controllers/pc/order_draw.go index bc0e541..679278b 100644 --- a/controllers/pc/order_draw.go +++ b/controllers/pc/order_draw.go @@ -203,14 +203,9 @@ func (t *OrderDrawCtl) List() { func (t *OrderDrawCtl) Prize() { ruleId := t.MustGetInt("order_draw_rule_id") - //list := make([]*models.OrderDrawRuleLadder, 0) - //err := core.GetXormAuto().Where("is_delete=0 and order_draw_rule_id=?", ruleId).Find(&list) list, err := models.GetOrderDrawRuleLaddersByRuleId(ruleId) t.CheckErr(err) - for index := range list { - list[index].Des = "在该活动的所有订单用户中随机抽奖品数量的用户" - } t.JSON(map[string]interface{}{ "total": len(list), "lise": list, @@ -305,48 +300,113 @@ func (t *OrderDrawCtl) Draw() { module, exist, err := activity_service.GetModuleService(define.MODULE_ORDERLY, activity.Id) t.CheckErr(err) t.Assert(exist, code.MSG_MODULE_NOT_EXIST, "模块服务不存在") - userIds, err := lottery_service.GetOrderLotteryUserIds(module.BesideRepeat, activity.Id, rule.Id, ladder.Id, activity.RehearsalId, area.Id, activity.ArchId) - if len(userIds) < number { - t.ERROR("订单抽奖人数不足", code.MSG_LOTTERY_PEOPLE_NOT_ENOUGH) - } + if customer.IsSpecial == 0 { + userIds, err := lottery_service.GetOrderLotteryUserIds(module.BesideRepeat, activity.Id, rule.Id, ladder.Id, activity.RehearsalId, area.Id, activity.ArchId) + if len(userIds) < number { + t.ERROR("订单抽奖人数不足", code.MSG_LOTTERY_PEOPLE_NOT_ENOUGH) + } + + lottery_service.RandLotteryUserIds(userIds) + winnerIds := userIds[:number] + + winners, err := lottery_service.GetLotteryUsers(winnerIds) + t.CheckErr(err) + for i := range winners { + winners[i].LadderId = ladder.Id + winners[i].PrizeImg = ladder.PrizeImg + winners[i].PrizeName = ladder.PrizeName + prize := models.UserPrize{} + prize.ActivityId = activityId + prize.RehearsalId = activity.RehearsalId + prize.ActivityName = activity.Name + prize.UserId = winners[i].UserId + prize.PrizeImg = ladder.PrizeImg + prize.PrizeName = ladder.PrizeName + prize.ArchId = activity.ArchId + prize.PrizeType = 2 + _, err = models.Add(&prize) + t.CheckErr(err) + + record := models.OrderDrawRecord{} + record.UserPrizeId = prize.Id + record.ActivityId = activityId + record.RehearsalId = activity.RehearsalId + record.ArchId = activity.ArchId + record.OrderDrawActivityId = rule.OrderDrawActivityId + record.OrderDrawRuleId = rule.Id + record.UserId = winners[i].UserId + record.OrderDrawRuleLadderId = ladder.Id + record.PrizeName = ladder.PrizeName + record.AreaId = area.Id + record.AreaName = area.Name + _, err = models.Add(&record) + t.CheckErr(err) + } + t.JSON(winners) + } else if customer.IsSpecial == 2 { + orders, err := lottery_service.GetSpecialOrderLottery(module.BesideRepeat, activity.Id, rule.Id, ladder.Id, activity.RehearsalId, area.Id, activity.ArchId) + if len(orders) < number { + t.ERROR("抽奖订单数量不足", code.MSG_LOTTERY_PEOPLE_NOT_ENOUGH) + } - lottery_service.RandLotteryUserIds(userIds) - winnerIds := userIds[:number] - - winners, err := lottery_service.GetLotteryUsers(winnerIds) - t.CheckErr(err) - for i := range winners { - winners[i].LadderId = ladder.Id - winners[i].PrizeImg = ladder.PrizeImg - winners[i].PrizeName = ladder.PrizeName - prize := models.UserPrize{} - prize.ActivityId = activityId - prize.RehearsalId = activity.RehearsalId - prize.ActivityName = activity.Name - prize.UserId = winners[i].UserId - prize.PrizeImg = ladder.PrizeImg - prize.PrizeName = ladder.PrizeName - prize.ArchId = activity.ArchId - prize.PrizeType = 2 - _, err = models.Add(&prize) + lottery_service.RandSpecialOrderLottery(orders) + winnerOrders := orders[:number] + userIds := make([]int, 0) + for _, v := range winnerOrders { + userIds = append(userIds, v.BuyerId) + } + users, err := models.GetUsersByIds(userIds) t.CheckErr(err) - record := models.OrderDrawRecord{} - record.UserPrizeId = prize.Id - record.ActivityId = activityId - record.RehearsalId = activity.RehearsalId - record.ArchId = activity.ArchId - record.OrderDrawActivityId = rule.OrderDrawActivityId - record.OrderDrawRuleId = rule.Id - record.UserId = winners[i].UserId - record.OrderDrawRuleLadderId = ladder.Id - record.PrizeName = ladder.PrizeName - record.AreaId = area.Id - record.AreaName = area.Name - _, err = models.Add(&record) + winners := make([]*lottery_service.SpecialOrderLotteryUser, 0) t.CheckErr(err) + for _, o := range winnerOrders { + for _, u := range users { + if u.Id == o.BuyerId { + winners = append(winners, &lottery_service.SpecialOrderLotteryUser{ + UserId: u.Id, + Username: o.Receiver, + UserPhone: o.Phone, + Avatar: u.Avatar, + PrizeName: ladder.PrizeName, + LadderId: ladder.Id, + PrizeImg: ladder.PrizeImg, + EntryPersonName: o.OrderEntryPersonName, + }) + } + } + prize := models.UserPrize{} + prize.ActivityId = activityId + prize.RehearsalId = activity.RehearsalId + prize.ActivityName = activity.Name + prize.UserId = o.BuyerId + prize.CustomerOrderId = o.Id + prize.PrizeImg = ladder.PrizeImg + prize.PrizeName = ladder.PrizeName + prize.ArchId = activity.ArchId + prize.PrizeType = 2 + _, err = models.Add(&prize) + t.CheckErr(err) + + record := models.OrderDrawRecord{} + record.UserPrizeId = prize.Id + record.ActivityId = activityId + record.RehearsalId = activity.RehearsalId + record.ArchId = activity.ArchId + record.OrderDrawActivityId = rule.OrderDrawActivityId + record.OrderDrawRuleId = rule.Id + record.UserId = o.BuyerId + record.CustomerOrderId = o.BuyerId + record.OrderDrawRuleLadderId = ladder.Id + record.PrizeName = ladder.PrizeName + record.AreaId = area.Id + record.AreaName = area.Name + _, err = models.Add(&record) + t.CheckErr(err) + } + t.JSON(winners) } - t.JSON(winners) + t.ERROR("客户信息异常", code.MSG_CUSTOMER_NOT_EXIST) } type WinnerResult struct { @@ -402,34 +462,70 @@ func (t *OrderDrawCtl) Orders() { t.CheckErr(err) t.Assert(exist, code.MSG_ACTIVITY_NOT_EXIST, "互动不存在") - orders := make([]*OrdersResult, 0) - err = core.GetXormAuto().Table(&models.CustomerOrder{}).Alias("o"). - Select("o.area_name, o.goods_name, o.buyer_id as user_id, u.nickname, l.extra_data as extra_data, o.created_at"). - Distinct("o.id").Join("LEFT", (&models.InvitationLetter{}).Alias("l"), - "o.buyer_id=l.user_id and o.activity_id=l.activity_id and l.arch_id=o.arch_id"). - Join("LEFT", (&models.User{}).Alias("u"), "u.id=o.buyer_id"). - Where("o.is_delete=0 and o.activity_id=? and o.rehearsal_id=? and o.arch_id=?", - activityId, activity.RehearsalId, activity.ArchId). - Asc("o.created_at").Find(&orders) - t.CheckErr(err) - - items, err := invitation_service.GetOptionItem(activityId) + customer := models.Customer{} + exist, err = models.Get(&customer, activity.CustomerId) t.CheckErr(err) - for i := range orders { - data, err := invitation_service.GetOptionValue(items, orders[i].ExtraData) - t.CheckErr(err) - orders[i].Extra = data - } + t.Assert(exist, code.MSG_CUSTOMER_NOT_EXIST, "客户不存在") // 下订单人数 buyerCount, err := (&models.CustomerOrder{}).CountCustomerOrder(activity.Id, activity.RehearsalId, activity.ArchId) t.CheckErr(err) - t.JSON(map[string]interface{}{ - "orders": orders, - "total": len(orders), - "buyer_count": buyerCount, - }) + if customer.IsSpecial == 0 { + orders := make([]*OrdersResult, 0) + err = core.GetXormAuto().Table(&models.CustomerOrder{}).Alias("o"). + Select("o.area_name, o.goods_name, o.buyer_id as user_id, u.nickname, l.extra_data as extra_data, o.created_at"). + Distinct("o.id").Join("LEFT", (&models.InvitationLetter{}).Alias("l"), + "o.buyer_id=l.user_id and o.activity_id=l.activity_id and l.arch_id=o.arch_id"). + Join("LEFT", (&models.User{}).Alias("u"), "u.id=o.buyer_id"). + Where("o.is_delete=0 and o.activity_id=? and o.rehearsal_id=? and o.arch_id=?", + activityId, activity.RehearsalId, activity.ArchId). + Asc("o.created_at").Find(&orders) + t.CheckErr(err) + + items, err := invitation_service.GetOptionItem(activityId) + t.CheckErr(err) + for i := range orders { + data, err := invitation_service.GetOptionValue(items, orders[i].ExtraData) + t.CheckErr(err) + orders[i].Extra = data + } + t.JSON(map[string]interface{}{ + "orders": orders, + "total": len(orders), + "buyer_count": buyerCount, + }) + return + } else if customer.IsSpecial == 2 { + orders := make([]*SpecialOrdersResult, 0) + err = core.GetXormAuto().Table(&models.CustomerOrder{}).Alias("o").Select("o.id as id, "+ + " o.area_name as area_name, o.order_entry_person_name as entry_person_name, o.buyer_id as user_id, "+ + " o.receiver as username, o.phone as phone, o.address as address, o.created_at"). + Where("o.is_delete=0 and o.activity_id=? and o.rehearsal_id=? and o.arch_id=?", + activityId, activity.RehearsalId, activity.ArchId).Asc("o.created_at").Find(&orders) + t.CheckErr(err) + + orderIds := make([]int, 0) + for _, o := range orders { + orderIds = append(orderIds, o.Id) + } + subs, err := models.GetCustomerOrderSubsByOrderIds(orderIds) + t.CheckErr(err) + for i := range orders { + for j := range subs { + if fmt.Sprint(orders[i].Id) == subs[j]["order_id"] { + orders[i].Goods = append(orders[i].Goods, subs[j]) + } + } + } + t.JSON(map[string]interface{}{ + "orders": orders, + "total": len(orders), + "buyer_count": buyerCount, + }) + return + } + t.ERROR("客户信息异常", code.MSG_CUSTOMER_NOT_EXIST) } // 录入人员排行榜 diff --git a/controllers/pc/order_draw_special.go b/controllers/pc/order_draw_special.go index 4656125..52c6d77 100644 --- a/controllers/pc/order_draw_special.go +++ b/controllers/pc/order_draw_special.go @@ -202,8 +202,6 @@ func (t *OrderDrawSpecialCtl) List() { func (t *OrderDrawSpecialCtl) Prize() { ruleId := t.MustGetInt("order_draw_rule_id") - //list := make([]*models.OrderDrawRuleLadder, 0) - //err := core.GetXormAuto().Where("is_delete=0 and order_draw_rule_id=?", ruleId).Find(&list) list, err := models.GetOrderDrawRuleLaddersByRuleId(ruleId) t.CheckErr(err) diff --git a/models/customer_order.go b/models/customer_order.go index 61739a8..364ec52 100644 --- a/models/customer_order.go +++ b/models/customer_order.go @@ -98,8 +98,8 @@ func (t *CustomerOrder) CountCustomerOrder(activityId, rehearsalId, archId inter return buyerCount, err } -func (t *CustomerOrder) SumCustomerOrder(activityId, rehearsalId, archId interface{}, limit int) ([]map[string]string, error) { - res := make([]map[string]string, 0) +func (t *CustomerOrder) SumCustomerOrder(activityId, rehearsalId, archId interface{}, limit int) ([]map[string]interface{}, error) { + res := make([]map[string]interface{}, 0) err := core.GetXormAuto().Table(t).Select("order_entry_person_id, order_entry_person_name, SUM(goods_num) as num"). NoAutoCondition().Where("is_delete=0 and activity_id=? and rehearsal_id=? and arch_id=?", activityId, rehearsalId, archId).Limit(limit).Desc("num").Find(&res) diff --git a/services/lottery/order.go b/services/lottery/order.go index d8d23ef..ee5441f 100644 --- a/services/lottery/order.go +++ b/services/lottery/order.go @@ -39,17 +39,19 @@ func GetOrderLotteryUserIds(repeat string, activityId, ruleId, ladderId, rehears } type OrderWinnersResult struct { - UserId int `json:"user_id"` - UserName string `json:"user_name"` - UserPhone string `json:"user_phone"` - Avatar string `json:"avatar"` - PrizeName string `json:"prize_name"` + UserId int `json:"user_id"` + UserName string `json:"user_name"` + UserPhone string `json:"user_phone"` + Avatar string `json:"avatar"` + PrizeName string `json:"prize_name"` + EntryPersonName string `json:"entry_person_name"` } func GetOrderWinnersResult(ruleId, rehearsalId, archId interface{}) (result []*OrderWinnersResult, err error) { err = core.GetXormAuto().Table(&models.OrderDrawRecord{}).Alias("r"). - Select("r.user_id, u.nickname as username, u.phone as user_phone, u.avatar, r.prize_name"). - Join("LEFT", (&models.User{}).Alias("u"), "u.id=r.user_id and u.is_delete=0"). + Select("r.order_entry_person_name as entry_person_name, r.user_id, u.nickname as username, "+ + " u.phone as user_phone, u.avatar, r.prize_name").Join("LEFT", + (&models.User{}).Alias("u"), "u.id=r.user_id and u.is_delete=0"). Where("r.is_delete=0 and r.order_draw_rule_id=? and r.rehearsal_id=? and r.arch_id=?", ruleId, rehearsalId, archId).Find(&result) return