diff --git a/controllers/pc/order_draw.go b/controllers/pc/order_draw.go
index 660f1e2..bc0e541 100644
--- a/controllers/pc/order_draw.go
+++ b/controllers/pc/order_draw.go
@@ -295,9 +295,6 @@ func (t *OrderDrawCtl) Draw() {
 	t.CheckErr(err)
 	t.Assert(exist, code.MSG_ORDER_RULE_NOT_EXIST, "订单抽奖规则不存在")
 
-	//count, err := core.GetXormAuto().Where("order_draw_rule_id=? and order_draw_rule_ladder_id=? "+
-	//	"and rehearsal_id=? and arch_id=? and is_delete=0", ruleId, ladderId, activity.RehearsalId, activity.ArchId).
-	//	Count(&models.OrderDrawRecord{})
 	count, err := (&models.OrderDrawRecord{}).Count(ladder.Id, activity.RehearsalId, activity.ArchId)
 	t.CheckErr(err)
 	prizeNum := ladder.PrizeNumber - int(count)
diff --git a/controllers/pc/order_draw_special.go b/controllers/pc/order_draw_special.go
new file mode 100644
index 0000000..4656125
--- /dev/null
+++ b/controllers/pc/order_draw_special.go
@@ -0,0 +1,468 @@
+package pc
+
+import (
+	"fmt"
+	"hudongzhuanjia/controllers"
+	"hudongzhuanjia/models"
+	activity_service "hudongzhuanjia/services/activity"
+	lottery_service "hudongzhuanjia/services/lottery"
+	"hudongzhuanjia/utils/code"
+	"hudongzhuanjia/utils/define"
+	"time"
+
+	"github.com/ouxuanserver/osmanthuswine/src/core"
+)
+
+// 订单
+type OrderDrawSpecialCtl struct {
+	controllers.AuthorCtl
+}
+
+// 屏蔽
+func (t *OrderDrawSpecialCtl) Block() {
+	activityId := t.MustGetInt("activity_id")
+	status := t.MustGet("status")
+
+	module, exist, err := activity_service.GetModuleService(define.MODULE_ORDERLY, activityId)
+	t.CheckErr(err)
+	t.Assert(exist, code.MSG_MODULE_NOT_EXIST, "模块不存在")
+	module.BesideRepeat = status
+	_, err = models.Update(module.Id, module, "beside_repeat")
+	t.CheckErr(err)
+	t.SUCCESS("操作成功")
+}
+
+// 开启订单活动
+func (t *OrderDrawSpecialCtl) Switch() {
+	activityId := t.MustGetInt("activity_id")
+	status := t.MustGetInt("status")
+
+	activity := models.Activity{}
+	exist, err := models.Get(&activity, activityId)
+	t.CheckErr(err)
+	t.Assert(exist, code.MSG_ACTIVITY_NOT_EXIST, "互动不存在")
+
+	option := &models.CustomerOrderOption{}
+	exist, err = option.GetByActivityId(activityId)
+	t.CheckErr(err)
+	t.Assert(exist, code.MSG_MODULE_NOT_EXIST, "订单活动不存在")
+
+	if option.Status == status {
+		t.SUCCESS("操作成功")
+		return
+	}
+
+	option.Status = status
+	_, err = models.Update(option.Id, option, "status")
+	t.CheckErr(err)
+	t.SUCCESS("操作成功")
+}
+
+// ===================== 订单抽奖
+
+// 开始抽奖
+func (t *OrderDrawSpecialCtl) Start() {
+	ladderId := t.MustGetInt("order_draw_ladder_id")
+
+	ladder := new(models.OrderDrawRuleLadder)
+	exist, err := models.Get(ladder, ladderId)
+	t.CheckErr(err)
+	t.Assert(exist, code.MSG_ORDER_RULE_NOT_EXIST, "订单抽奖规则不存在")
+
+	if ladder.Status != define.StatusNotBegin {
+		t.ERROR(fmt.Sprintf("该活动%s", ladder.Status), code.MSG_ERR)
+	}
+	ladder.Status = define.StatusRunning
+	ladder.UpdatedAt = time.Now()
+	err = models.Save(map[string]interface{}{
+		"id=":        ladder.Id,
+		"is_delete=": 0,
+	}, ladder, "status", "updated_at")
+	t.CheckErr(err)
+	t.SUCCESS("操作成功")
+}
+
+// 开始抽奖
+func (t *OrderDrawSpecialCtl) Stop() {
+	ladderId := t.MustGetInt("order_draw_ladder_id")
+
+	ladder := new(models.OrderDrawRuleLadder)
+	exist, err := models.Get(ladder, ladderId)
+	t.CheckErr(err)
+	t.Assert(exist, code.MSG_ORDER_RULE_NOT_EXIST, "订单抽奖规则不存在")
+
+	if ladder.Status != define.StatusRunning {
+		t.ERROR(fmt.Sprintf("该活动%s", ladder.Status), code.MSG_ERR)
+	}
+
+	ladder.Status = define.StatusEnding
+	ladder.UpdatedAt = time.Now()
+	err = models.Save(map[string]interface{}{
+		"id=":        ladder.Id,
+		"is_delete=": 0,
+	}, ladder, "status", "updated_at")
+	t.CheckErr(err)
+	t.SUCCESS("操作成功")
+}
+
+type SpecialOrderLadderResult struct {
+	OrderDrawRuleId   int    `json:"order_draw_rule_id"`
+	OrderDrawLadderId int    `json:"order_draw_ladder_id"`
+	PrizeName         string `json:"prize_name"`
+	Status            string `json:"status"`
+	PrizeImg          string `json:"prize_img"`
+	PrizeNumber       int    `json:"prize_number"`
+}
+
+type SpecialOrderListResult struct {
+	OrderDrawActivityId   int                  `json:"order_draw_activity_id"`
+	OrderDrawRuleId       int                  `json:"order_draw_rule_id"`
+	OrderDrawActivityName string               `json:"order_draw_activity_name"`
+	OrderDrawLadders      []*OrderLadderResult `json:"order_draw_ladders"`
+	PrizeNumber           int                  `json:"prize_number"`
+}
+
+//获取所有订单奖品
+func (t *OrderDrawSpecialCtl) List() {
+	activityId := t.MustGetInt("activity_id")
+	customerId := t.GetAccountId()
+	//
+	area := &models.AreaStore{}
+	exist, err := area.GetByCustomerId(customerId, activityId)
+	t.CheckErr(err)
+	t.Assert(exist, code.MSG_AREASTORE_NOT_EXIST, "地区信息异常")
+
+	activity := models.Activity{}
+	exist, err = models.Get(&activity, activityId)
+	t.CheckErr(err)
+	t.Assert(exist, code.MSG_ACTIVITY_NOT_EXIST, "互动信息异常")
+
+	// 订单的开启或关闭
+	option := &models.CustomerOrderOption{}
+	exist, err = option.GetByActivityId(activityId)
+	t.CheckErr(err)
+	t.Assert(exist, code.MSG_DATA_NOT_EXIST, "订单信息异常")
+
+	result := make([]*OrderListResult, 0)
+	core.GetXormAuto().Table(&models.OrderDrawActivity{}).Alias("a").
+		Select("a.id as order_draw_activity_id, r.id as order_draw_rule_id, a.order_draw_activity_name").
+		Join("LEFT", (&models.OrderDrawRule{}).Alias("r"),
+			"a.id=r.order_draw_activity_id and r.is_delete=0").
+		Where("a.is_delete=0 and a.activity_id=?", activityId).Find(&result)
+
+	ruleIds := make([]int, 0)
+	for _, v := range result {
+		ruleIds = append(ruleIds, v.OrderDrawRuleId)
+	}
+
+	ladders := make([]*OrderLadderResult, 0)
+	err = core.GetXormAuto().Table(&models.OrderDrawRuleLadder{}).Alias("l").
+		Select("id as order_draw_ladder_id, status, prize_name, prize_img, prize_number, order_draw_rule_id").
+		Where("is_delete=0").In("order_draw_rule_id", ruleIds).Find(&ladders)
+	t.CheckErr(err)
+
+	ladderIds := make([]int, 0)
+	for _, ladder := range ladders {
+		ladderIds = append(ladderIds, ladder.OrderDrawLadderId)
+	}
+
+	records := make([]map[string]int, 0)
+	err = core.GetXormAuto().Table(&models.OrderDrawRecord{}).Alias("r").
+		Select("r.order_draw_rule_ladder_id as ladder_id, count(id) as num").
+		Where("is_delete=0 and rehearsal_id=? and arch_id=? and area_id=?",
+			activity.RehearsalId, activity.ArchId, area.Id).
+		In("r.order_draw_rule_ladder_id", ladderIds).GroupBy("ladder_id").Find(&records)
+	t.CheckErr(err)
+
+	for i := range ladders {
+		for j := range records {
+			if ladders[i].OrderDrawLadderId == records[j]["ladder_id"] {
+				ladders[i].PrizeNumber = ladders[i].PrizeNumber - records[j]["num"]
+			}
+		}
+	}
+
+	for i := range result {
+		for j := range ladders {
+			if result[i].OrderDrawRuleId == ladders[j].OrderDrawRuleId {
+				result[i].PrizeNumber += ladders[j].PrizeNumber
+				result[i].OrderDrawLadders = append(result[i].OrderDrawLadders, ladders[j])
+			}
+		}
+	}
+
+	t.JSON(map[string]interface{}{
+		"total":  len(result),
+		"list":   result,
+		"status": option.Status,
+	})
+}
+
+//抽奖奖品
+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)
+
+	for index := range list {
+		list[index].Des = "在该活动的所有订单用户中随机抽奖品数量的用户"
+	}
+	t.JSON(map[string]interface{}{
+		"total": len(list),
+		"lise":  list,
+	})
+}
+
+type SpecialOrderUsersResult struct {
+	UserId   int    `json:"user_id"`
+	Username string `json:"username"`
+	Avatar   string `json:"avatar"`
+}
+
+//统计人数和订单数量
+func (t *OrderDrawSpecialCtl) Users() {
+	activityId := t.MustGetInt("activity_id")
+	ruleId := t.MustGetInt("order_draw_rule_id")
+
+	activity := models.Activity{}
+	exist, err := models.Get(&activity, activityId)
+	t.CheckErr(err)
+	t.Assert(exist, code.MSG_ACTIVITY_NOT_EXIST, "互动不存在")
+
+	result := make([]*SpecialOrderUsersResult, 0)
+	session := core.GetXormAuto().Table(&models.CustomerOrder{}).Alias("o").
+		Select("o.buyer_id as user_id, u.nickname as username, u.avatar").Distinct("o.buyer_id").
+		Join("LEFT", (&models.User{}).Alias("u"), "o.buyer_id=u.id and u.is_delete=0").
+		Where("o.activity_id=? and o.is_delete=0  and o.rehearsal_id=? and o.arch_id=?", activityId,
+			activity.RehearsalId, activity.ArchId)
+
+	moduleService, exist, err := activity_service.GetModuleService(define.MODULE_ORDERLY, activity.Id)
+	t.CheckErr(err)
+	t.Assert(exist, code.MSG_MODULE_NOT_EXIST, "模块服务不存在")
+	if moduleService.BesideRepeat == define.MODULE_BESIDE_REPEAT {
+		recordIds := make([]int, 0)
+		err = core.GetXormAuto().Table(&models.OrderDrawRecord{}).Select("user_id").
+			Where("order_draw_rule_id=? and rehearsal_id=? and arch_id=? and is_delete=0",
+				ruleId, activity.RehearsalId, activity.ArchId).Find(&recordIds)
+		t.CheckErr(err)
+		session = session.NotIn("o.buyer_id", recordIds)
+	}
+	err = session.Find(&result)
+	t.CheckErr(err)
+
+	t.JSON(map[string]interface{}{
+		"total": len(result),
+		"list":  result,
+	})
+}
+
+// 订单抽奖动作
+func (t *OrderDrawSpecialCtl) Draw() {
+	activityId := t.MustGetInt("activity_id")
+	ladderId := t.MustGetInt("order_draw_rule_ladder_id")
+	number := t.MustGetInt("number")
+	customerId := t.GetAccountId()
+
+	customer := models.Customer{}
+	exist, err := models.Get(&customer, customerId)
+	t.CheckErr(err)
+	t.Assert(exist, code.MSG_CUSTOMER_NOT_EXIST, "客户不存在")
+
+	activity := models.Activity{}
+	exist, err = models.Get(&activity, activityId)
+	t.CheckErr(err)
+	t.Assert(exist, code.MSG_ACTIVITY_NOT_EXIST, "互动不存在")
+	t.CheckRunning(activity.Status)
+
+	area := &models.AreaStore{}
+	exist, err = area.GetByCustomerId(customerId, activityId)
+	t.CheckErr(err)
+	t.Assert(exist, code.MSG_DATA_NOT_EXIST, "地区不存在")
+
+	// 查询奖品
+	ladder := models.OrderDrawRuleLadder{}
+	exist, err = models.Get(&ladder, ladderId)
+	t.CheckErr(err)
+	t.Assert(exist, code.MSG_ORDER_LADDER_NOT_EXIST, "订单抽奖等级不存在")
+	t.CheckRunning(ladder.Status)
+
+	rule := models.OrderDrawRule{}
+	exist, err = models.Get(&rule, ladder.OrderDrawRuleId)
+	t.CheckErr(err)
+	t.Assert(exist, code.MSG_ORDER_RULE_NOT_EXIST, "订单抽奖规则不存在")
+
+	count, err := (&models.OrderDrawRecord{}).Count(ladder.Id, activity.RehearsalId, activity.ArchId)
+	t.CheckErr(err)
+	prizeNum := ladder.PrizeNumber - int(count)
+	if prizeNum <= 0 || prizeNum < number {
+		t.ERROR("奖品数量不足", code.MSG_LOTTERY_PRIZE_NOT_ENOUGH)
+	}
+
+	module, exist, err := activity_service.GetModuleService(define.MODULE_ORDERLY, activity.Id)
+	t.CheckErr(err)
+	t.Assert(exist, code.MSG_MODULE_NOT_EXIST, "模块服务不存在")
+	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.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)
+
+	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)
+}
+
+func (t *OrderDrawSpecialCtl) ListOfWinners() {
+	ruleId := t.MustGetInt("order_draw_rule_id")
+
+	rule := &models.OrderDrawRule{}
+	exist, err := models.Get(rule, ruleId)
+	t.CheckErr(err)
+	t.Assert(exist, code.MSG_ORDER_RULE_NOT_EXIST, "订单抽奖规则不存在")
+
+	lottery := &models.OrderDrawActivity{}
+	exist, err = models.Get(lottery, rule.OrderDrawActivityId)
+	t.CheckErr(err)
+	t.Assert(exist, code.MSG_ORDER_RULE_NOT_EXIST, "订单抽奖规则不存在")
+
+	activity := &models.Activity{}
+	exist, err = models.Get(activity, lottery.ActivityId)
+	t.CheckErr(err)
+	t.Assert(exist, code.MSG_ACTIVITY_NOT_EXIST, "互动不存在")
+
+	result, err := lottery_service.GetSpecialOrderWinnersResult(rule.Id, activity.RehearsalId, activity.ArchId)
+	t.CheckErr(err)
+	t.JSON(map[string]interface{}{
+		"total": len(result),
+		"list":  result,
+	})
+}
+
+// 获取所有订单
+type SpecialOrdersResult struct {
+	Id              int                 `json:"id"`
+	UserId          int                 `json:"user_id"`
+	AreaName        string              `json:"area_name"`
+	EntryPersonName string              `json:"entry_person_name"`
+	Username        string              `json:"username"`
+	Phone           string              `json:"phone"`
+	Address         string              `json:"address"`
+	Goods           []map[string]string `json:"goods"`
+}
+
+func (t *OrderDrawSpecialCtl) Orders() {
+	activityId := t.MustGetInt("activity_id")
+
+	activity := models.Activity{}
+	exist, err := models.Get(&activity, activityId)
+	t.CheckErr(err)
+	t.Assert(exist, code.MSG_ACTIVITY_NOT_EXIST, "互动不存在")
+
+	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])
+			}
+		}
+	}
+
+	// 下订单人数
+	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,
+	})
+}
+
+// 录入人员排行榜
+func (t *OrderDrawSpecialCtl) OrderRank() {
+	activityId := t.MustGetInt("activity_id")
+	limit := t.MustGetInt("limit")
+
+	activity := models.Activity{}
+	exist, err := models.Get(&activity, activityId)
+	t.CheckErr(err)
+	t.Assert(exist, code.MSG_ACTIVITY_NOT_EXIST, "互动不存在")
+
+	order := &models.CustomerOrder{}
+	res, err := order.SumCustomerOrder(activity.Id, activity.RehearsalId, activity.ArchId, limit)
+	t.CheckErr(err)
+	total, err := order.TotalCustomerOrderGoodsNum(activity.Id, activity.RehearsalId, activity.ArchId)
+	t.CheckErr(err)
+	t.JSON(map[string]interface{}{
+		"list":  res,
+		"total": total,
+	})
+}
diff --git a/main.go b/main.go
index c4ebc05..911a3fa 100644
--- a/main.go
+++ b/main.go
@@ -30,6 +30,7 @@ func main() {
 	core.GetInstanceRouterManage().Registered(new(pc.TugOfWarCtl))         // 拔河
 	core.GetInstanceRouterManage().Registered(new(pc.OrderDrawCtl))        // 订单抽奖
 	core.GetInstanceRouterManage().Registered(new(pc.CalorieCtl))          // 卡路里
+	core.GetInstanceRouterManage().Registered(new(pc.OrderDrawSpecialCtl)) //
 
 	// client
 	core.GetInstanceRouterManage().Registered(new(client.ActivityCtl))         // 互动
diff --git a/models/order_draw_record.go b/models/order_draw_record.go
index cd6f968..5b098e7 100644
--- a/models/order_draw_record.go
+++ b/models/order_draw_record.go
@@ -16,6 +16,7 @@ type OrderDrawRecord struct {
 	OrderDrawRuleId       int                  `json:"order_draw_rule_id" xorm:"not null comment('订单抽奖规则id')"`
 	OrderDrawRuleLadderId int                  `json:"order_draw_rule_ladder_id" xorm:"not null comment('订单规则阶梯id')"`
 	OrderDrawRuleLadder   *OrderDrawRuleLadder `json:"order_draw_rule_ladder" xorm:"-"`
+	CustomerOrderId       int                  `json:"customer_order_id" xorm:"not null default 0 comment('订单号') INT(11)"`
 	UserId                int                  `json:"user_id" xorm:"not null comment('用户id')"`
 	ArchId                int                  `json:"arch_id" xorm:"not null default 0 comment('归档id') INT(11)"`
 	User                  *User                `json:"user" xorm:"-"`
diff --git a/services/lottery/lottery.go b/services/lottery/lottery.go
index a25e2ba..30f9794 100644
--- a/services/lottery/lottery.go
+++ b/services/lottery/lottery.go
@@ -176,12 +176,11 @@ func GetLotteryUsersResult(areaId, activityId, rehearsalId, archId interface{},
 }
 
 type WinnersResult 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"`
-	EntryPersonName string `json:"entry_person_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"`
 }
 
 func GetWinnersResult(ruleId, rehearsalId, archId interface{}) ([]*WinnersResult, error) {
diff --git a/services/lottery/order.go b/services/lottery/order.go
index a35dd07..d8d23ef 100644
--- a/services/lottery/order.go
+++ b/services/lottery/order.go
@@ -38,15 +38,19 @@ func GetOrderLotteryUserIds(repeat string, activityId, ruleId, ladderId, rehears
 
 }
 
-func GetOrderWinnersResult(ruleId, rehearsalId, archId interface{}) ([]*WinnersResult, error) {
-	result := make([]*WinnersResult, 0)
-	err := core.GetXormAuto().Table(&models.OrderDrawRecord{}).Alias("r").
+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"`
+}
+
+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").
 		Where("r.is_delete=0 and r.order_draw_rule_id=? and r.rehearsal_id=? and r.arch_id=?",
 			ruleId, rehearsalId, archId).Find(&result)
-	if err != nil {
-		return nil, err
-	}
-	return result, nil
+	return
 }
diff --git a/services/lottery/order_special.go b/services/lottery/order_special.go
new file mode 100644
index 0000000..f342b2e
--- /dev/null
+++ b/services/lottery/order_special.go
@@ -0,0 +1,82 @@
+package lottery_service
+
+import (
+	"hudongzhuanjia/models"
+	"hudongzhuanjia/utils/define"
+	"math/rand"
+	"time"
+
+	"github.com/ouxuanserver/osmanthuswine/src/core"
+)
+
+type SpecialOrderLotteryUser struct {
+	UserId          int
+	Username        string
+	UserPhone       string
+	Avatar          string
+	PrizeName       string
+	LadderId        int
+	PrizeImg        string
+	EntryPersonName string
+}
+
+func RandSpecialOrderLottery(orders []*models.CustomerOrder) {
+	if len(orders) <= 0 {
+		return
+	}
+	r := rand.New(rand.NewSource(time.Now().Unix()))
+	for i := len(orders) - 1; i > 0; i-- {
+		num := r.Intn(i + 1)
+		orders[i], orders[num] = orders[num], orders[i]
+	}
+}
+
+// 排除order_id
+func GetSpecialOrderLottery(repeat string, activityId, ruleId, ladderId, rehearsalId, areaId, archId interface{}) ([]*models.CustomerOrder, error) {
+	var err error
+	//var userIds = make([]int, 0)
+	var orders = make([]*models.CustomerOrder, 0)
+	var recordIds = make([]int, 0)
+	if repeat == define.MODULE_BESIDE_REPEAT {
+		//查询已经中奖的用户,剔除已经中奖的用户
+		err = core.GetXormAuto().Table(&models.OrderDrawRecord{}).Select("customer_order_id").
+			Where("order_draw_rule_id=? and rehearsal_id=? and arch_id=? and is_delete=0",
+				ruleId, rehearsalId, archId).Find(&recordIds)
+	} else {
+		// 不去除
+		err = core.GetXormAuto().Table(&models.OrderDrawRecord{}).Select("customer_order_id").
+			Where("order_draw_rule_ladder_id=? and rehearsal_id=? and arch_id=? and is_delete=0",
+				ladderId, rehearsalId, archId).Find(&recordIds)
+	}
+	if err != nil {
+		return nil, err
+	}
+
+	err = core.GetXormAuto().NoAutoCondition().Where("activity_id=? and rehearsal_id=? and area_id=? "+
+		" and arch_id=? and is_delete=0", activityId, rehearsalId, areaId, archId).
+		NotIn("id", recordIds).Find(&orders)
+	if err != nil {
+		return nil, err
+	}
+	return orders, nil
+
+}
+
+type SpecialOrderWinnersResult 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"`
+	EntryPersonName string `json:"entry_person_name"`
+}
+
+func GetSpecialOrderWinnersResult(ruleId, rehearsalId, archId interface{}) (result []*SpecialOrderWinnersResult, err error) {
+	err = core.GetXormAuto().Table(&models.OrderDrawRecord{}).Alias("r").
+		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
+}