ソースを参照

Merge branch 'dev/v2.4.31_rjj' of jianyu/qmx_admin into feature/v2.4.31

renjiaojiao 1 年間 前
コミット
aeffa28ff1

+ 3 - 6
src/order/orderSellingPrice.go

@@ -107,17 +107,14 @@ func orderPriceCount(context *admin.Context) (interface{}, error) {
 			}
 		}
 	} else { //大会员
-		if param.CreateType == 0 {
-			return nil, errors.New("缺少创建类型参数")
-		}
 		primaryAccountPrice := 0 //大会员价格
 		subAccountPrice := 0     //子账号价格
 		//fmt.Println("++++", param.Products)
 		switch param.Products {
 		case 1: //大会员订单
-			/*if param.CreateType == 2 { //补充服务
-				monthCount = GetUserBigTime(param.Phone, false)
-			}*/
+			if param.CreateType == 0 {
+				return nil, errors.New("缺少创建类型参数")
+			}
 			if param.Level == 0 {
 				return nil, errors.New("请选择大会员套餐")
 			}

+ 11 - 12
src/order/otherOrderService.go

@@ -711,17 +711,17 @@ func createVipOrder(param *CreateOtherOrderParams, code string) (bool, string) {
 		BuyerclassCount: -1,
 	}
 	vms := VipSimpleMsg{
-		Area:           &buyArea,
-		Industry:       []string{},
-		Cyclecount:     param.CycleCount,
-		Cycleunit:      param.CycleUnit,
-		NewBuyset:      &newBuySet,
-		OrderType:      1,
-		DisWord:        "",
-		ContractStatus: contractStatus,
-		Source:         "qmx",
-		Remark:         param.Remark,
-		NewArea:        param.NewArea,
+		Area:              &buyArea,
+		Industry:          []string{},
+		Cyclecount:        param.CycleCount,
+		Cycleunit:         param.CycleUnit,
+		NewBuyset:         &newBuySet,
+		OrderType:         1,
+		DisWord:           "",
+		ContractStatus:    contractStatus,
+		Source:            "qmx",
+		Remark:            param.Remark,
+		NewArea:           param.NewArea,
 		PaybackWorkDayNum: param.PaybackWorkDayNum,
 		PaybackExpectDate: param.PaybackExpectDate,
 		PaybackOpenServer: param.PaybackOpenServer,
@@ -1414,7 +1414,6 @@ func updateVipOrder(oldFilter string, param *CreateOtherOrderParams, code string
 			} else {
 				return true, ""
 			}
-
 		}
 		return true, ""
 	}

+ 311 - 0
src/order/serviceOpen.go

@@ -0,0 +1,311 @@
+package order
+
+import (
+	"encoding/json"
+	"errors"
+	"fmt"
+	"github.com/baiy/Cadmin-server-go/admin"
+	"go.mongodb.org/mongo-driver/bson"
+	"log"
+	"mongodb"
+	cm "qfw/util"
+	"strconv"
+	"strings"
+	"time"
+	"util"
+)
+
+func ServiceOpen(context *admin.Context) (interface{}, error) {
+	param := new(struct {
+		OrderCode string `form:"orderCode"`
+		StartTime int64  `form:"startTime"`
+		Phone     string `form:"phone"`
+	})
+	err := context.Form(param)
+	if err != nil {
+		return nil, err
+	}
+	//查询订单
+	order := util.JysqlDB.FindOne("dataexport_order", map[string]interface{}{"order_code": param.OrderCode}, "id,order_status,user_phone,product_type,vip_type,vip_endtime,vip_starttime,filter", "")
+	if order == nil {
+		return nil, errors.New("为查询到订单信息")
+	}
+	var productType string
+	var (
+		userId         string
+		userData       map[string]interface{}
+		entId          int
+		userPositionId string
+	)
+	productType = cm.ObjToString((*order)["product_type"])
+	if (*order)["user_phone"] != param.Phone { //开通权益手机号和创建订单手机号不一致
+		userId, userData = FindUserDataByPhone(param.Phone)
+		if userId == "" {
+			//没有用户需要新建用户
+			userId = SaveUserInfo(param.Phone)
+		}
+		if cm.IntAll((*order)["buy_subject"]) == 2 { //购买主体是企业,手机号改变,需要重新创建企业
+			entId, err, userPositionId = AutomaticallyCreatingEnt(cm.ObjToString((*order)["company_name"]), param.Phone, param.OrderCode, cm.IntAll((*order)["order_status"]), userId)
+			if err != nil {
+				log.Printf("AutomaticallyCreatingEnt 自动创建企业信息失败:code:%s,err:%s", cm.IntAll((*order)["order_status"]), err.Error())
+				return nil, err
+			}
+			userId = userPositionId
+		}
+		filterMap := map[string]interface{}{}
+		if err := json.Unmarshal([]byte(cm.ObjToString((*order)["filter"])), &filterMap); err != nil {
+			return nil, err
+		}
+		var set map[string]interface{}
+		if productType == "VIP订阅" { //手机号不一致,需要把新建订单填写的手机号的权益去掉
+			//手机号不一致,需要修改老用户上的订阅信息
+			set = map[string]interface{}{
+				"o_vipjy.i_trial":      -1,                //已激活试用
+				"o_vipjy.o_area":       "",                //设置地区
+				"o_vipjy.o_buyset":     "",                //购买内容 城市、省份、行业数量
+				"l_vip_starttime":      time.Now().Unix(), //开始时间
+				"l_vip_endtime":        time.Now().Unix(), //结束时间
+				"i_vip_status":         0,                 //1试用 2正式
+				"i_vip_expire_tip":     0,                 //消息提示初始化
+				"o_vipjy.a_buyerclass": []interface{}{},   //设置行业
+			}
+		} else if productType == "大会员" {
+			if strings.HasPrefix(cm.ObjToString((*order)["user_phone"]), "9") {
+				util.MQFW.Del("user", map[string]interface{}{"s_phone": cm.ObjToString((*order)["user_phone"])})
+				util.JysqlDB.Delete("user", map[string]interface{}{"user_id": cm.ObjToString((*order)["user_id"])})
+			} else if cm.IntAll((*order)["buy_subject"]) == 1 {
+				sets := map[string]interface{}{
+					"i_member_status":    -cm.IntAll(filterMap["level"]),
+					"i_member_starttime": time.Now().Unix(),
+					"i_member_endtime":   time.Now().Unix(),
+					"i_mainaccount":      1,
+					"i_pay_sub_num":      0,
+					"i_free_sub_num":     0,
+				}
+				set = map[string]interface{}{
+					"$set": sets,
+					"$unset": map[string]interface{}{ // 修改手机号时,被取消的原手机号也移除省份数量字段
+						"o_member_jy.i_areacount": "",
+					},
+				}
+				sql := "update bigmember_service_user set i_status = -1 where  s_userid = ?"
+				util.JysqlDB.UpdateOrDeleteBySql(sql, (*order)["user_id"])
+				ClearBigVipUserPower(cm.ObjToString((*order)["user_id"]))
+			}
+		}
+		util.MQFW.UpdateById("user", cm.ObjToString((*order)["user_id"]), bson.M{
+			"$set": set,
+		})
+		util.JysqlDB.Update("dataexport_order", map[string]interface{}{"order_code": cm.ObjToString(param.OrderCode)}, map[string]interface{}{"user_phone": param.Phone, "user_id": userId})
+	}
+
+	if productType == "VIP订阅" {
+		if cm.IntAll(userData["i_vip_status"]) > 0 {
+			return nil, errors.New(fmt.Sprintf("手机号:%s已有vip订阅权限,无法开通权益!", param.Phone))
+		}
+		if cm.IntAll((*order)["vip_type"]) != 0 { //超级订阅购买
+			return nil, errors.New("此订单不是超级订阅新购订单")
+		}
+		filter := (*order)["filter"]
+		filterData := VipSimpleMsg{}
+		var vipStartTime, vipEndTime time.Time
+		if err := json.Unmarshal([]byte(filter.(string)), &filterData); err != nil {
+			return nil, err
+		}
+		vipStartTime, vipEndTime = GetStartAndEndTime(time.Unix(param.StartTime, 0).Format(cm.Date_Full_Layout), filterData.Cyclecount, filterData.Cycleunit)
+		//log.Println("截止时间:", vipStartTime, endTime)
+		//为用户开通超级订阅权限
+		//处理购买省份
+		areaCount := -1
+		buyArea := map[string]interface{}{}
+		if filterData.Area != nil || len(*filterData.Area) > 0 {
+			for k, _ := range *filterData.Area {
+				buyArea[k] = []interface{}{}
+			}
+			areaCount = len(buyArea)
+		}
+		//新购买简单详情
+		newBuySet := SubvipBuySet{
+			Upgrade:         1,
+			AreaCount:       areaCount,
+			NewCitys:        []int{},
+			BuyerclassCount: -1,
+		}
+		set := map[string]interface{}{
+			"o_vipjy.i_trial":      -1,                  //已激活试用
+			"o_vipjy.o_area":       buyArea,             //设置地区
+			"o_vipjy.o_buyset":     newBuySet,           //购买内容 城市、省份、行业数量
+			"l_vip_starttime":      vipStartTime.Unix(), //开始时间
+			"l_vip_endtime":        vipEndTime.Unix(),   //结束时间
+			"i_vip_status":         2,                   //1试用 2正式 -2 试用到期
+			"i_vip_expire_tip":     0,                   //消息提示初始化
+			"o_vipjy.a_buyerclass": []interface{}{},     //设置行业
+		}
+		if cm.IntAll((*order)["buy_subject"]) == 1 {
+			util.MQFW.UpdateById("user", userId, bson.M{
+				"$set": set,
+			})
+			ClearBigVipUserPower(userId)
+		} else {
+			UpdateRule(entId, map[string]interface{}{
+				"$set": set,
+			}, param.Phone)
+			ClearBigVipUserPower(userId)
+		}
+
+	} else if productType == "大会员" {
+		filterMap := map[string]interface{}{}
+		if err := json.Unmarshal([]byte(cm.ObjToString((*order)["filter"])), &filterMap); err != nil {
+			return nil, err
+		}
+		createType := cm.IntAll(filterMap["createType"])
+		if createType == 1 { //1-新建 2-补充 3-延期
+			bigStartTime := time.Unix(param.StartTime, 0)
+			bigEndTime := GetDATE(cm.IntAll(filterMap["cycle"]), cm.IntAll(filterMap["cycleType"]), param.StartTime)
+			if bigEndTime.Unix() > time.Now().Unix() {
+				return nil, errors.New("订单已失效")
+			}
+			status := cm.If(bigStartTime.Unix() > time.Now().Unix(), 0, 1)
+			err := NewBigOpenService(filterMap, userId, bigStartTime, bigEndTime, cm.IntAll(status), cm.IntAll((*order)["buy_count"]))
+			if err != nil {
+				return nil, errors.New(fmt.Sprintf("订单编号:%s,手机号:%s开通大会员权益失败", param.OrderCode, param.Phone))
+			}
+		}
+	}
+	return map[string]interface{}{
+		"status": 1,
+	}, nil
+}
+
+func FindUserDataByPhone(phone string) (userId string, userData map[string]interface{}) {
+	userInfo, ok := util.MQFW.FindOne("user", map[string]interface{}{"s_phone": phone})
+	if ok && userInfo != nil && len(*userInfo) > 0 {
+		userId = mongodb.BsonIdToSId((*userInfo)["_id"])
+		userData = *userInfo
+	} else {
+		userInfo, ok = util.MQFW.FindOne("user", map[string]interface{}{"s_m_phone": phone})
+		if ok && userInfo != nil && len(*userInfo) > 0 {
+			userId = mongodb.BsonIdToSId((*userInfo)["_id"])
+			userData = *userInfo
+		}
+	}
+	return userId, userData
+}
+
+func NewBigOpenService(filterMap map[string]interface{}, userId string, startDate, endDate time.Time, i_status, buyCount int) error {
+	serverMap := GetServerPid()
+	if buyCount-1 > 0 { //子账号开通权益
+		sets := map[string]interface{}{
+			"i_pay_sub_num": buyCount - 1,
+			"i_mainaccount": 1,
+		}
+		set := map[string]interface{}{
+			"$set": sets,
+		}
+		ok := util.MQFW.UpdateById("user", userId, set)
+		if !ok {
+			return errors.New("大会员子账号创建订单user表大会员状态更新失败")
+			//return errors.New("大会员子账号创建订单user表大会员状态更新失败")
+		} else {
+			sqls := "select * from bigmember_service_user where s_serviceid = ? and s_userid = ? and  i_status != -1"
+			serverData := util.JysqlDB.SelectBySql(sqls, 2, userId)
+			if serverData != nil && len(*serverData) > 0 {
+				sql := "update bigmember_service_user set l_updatetime = ?,l_starttime = ?,l_endtime = ? where s_serviceid = ? and s_userid = ?"
+				status1 := util.JysqlDB.UpdateOrDeleteBySql(sql, cm.NowFormat(cm.Date_Full_Layout), cm.FormatDate(&startDate, cm.Date_Full_Layout), cm.FormatDate(&endDate, cm.Date_Full_Layout), 2, userId)
+				if status1 < 0 {
+					return errors.New("新建服务-更新服务表出错")
+				}
+			} else {
+				insert := map[string]interface{}{
+					"s_userid":     userId,
+					"s_serviceid":  2,
+					"i_frequency":  nil,
+					"l_starttime":  cm.FormatDate(&startDate, cm.Date_Full_Layout),
+					"l_endtime":    cm.FormatDate(&endDate, cm.Date_Full_Layout),
+					"i_status":     i_status,
+					"l_createtime": cm.NowFormat(cm.Date_Full_Layout),
+					"l_updatetime": cm.NowFormat(cm.Date_Full_Layout),
+				}
+				order_id := util.JysqlDB.Insert("bigmember_service_user", insert)
+				if order_id > 0 {
+					log.Println("用户服务表插入成功", userId)
+				} else {
+					//return errors.New("用户服务表插入失败")
+				}
+			}
+		}
+	}
+	for _, s := range strings.Split(cm.ObjToString(filterMap["serversId"]), ",") {
+		serverId, _ := strconv.Atoi(s)
+		mainId := serverId
+		if serverMap[serverId] != 0 {
+			serverId = serverMap[serverId]
+		}
+		serverData := util.JysqlDB.FindOne("bigmember_service", map[string]interface{}{"id": mainId}, "", "")
+		frequency := 0
+		if serverData != nil && len(*serverData) > 0 {
+			if serverId == 11 || serverId == 15 {
+				if serverId == 15 {
+					if cm.IntAll(filterMap["cycle"]) >= 12 {
+						frequency = (cm.IntAll(filterMap["cycle"]) / 12 * cm.IntAll((*serverData)["s_count_year"])) + (cm.IntAll(filterMap["cycle"]) % 12 * cm.IntAll((*serverData)["s_count_month"]))
+					} else {
+						frequency = cm.IntAll(filterMap["cycle"]) * cm.IntAll((*serverData)["s_count_month"])
+					}
+				} else {
+					frequency = cm.IntAll(filterMap["cycle"]) * cm.IntAll((*serverData)["s_count_month"])
+				}
+			} else {
+				frequency = cm.IntAll((*serverData)["s_count_month"])
+			}
+		}
+		sqls := "select * from bigmember_service_user where s_serviceid = ? and s_userid = ? and  i_status != -1"
+		serverDatas := util.JysqlDB.SelectBySql(sqls, serverId, userId)
+		if serverDatas != nil && len(*serverDatas) > 0 {
+			//i_status := cm.If(dateType == 1, 0, 1)
+			sql := "update bigmember_service_user set i_frequency = i_frequency + ?,l_updatetime = ?,l_starttime = ?,l_endtime = ?,i_status = ? where s_serviceid = ? and s_userid = ?"
+			status1 := util.JysqlDB.UpdateOrDeleteBySql(sql, fmt.Sprint(frequency), cm.NowFormat(cm.Date_Full_Layout), cm.FormatDate(&startDate, cm.Date_Full_Layout), cm.FormatDate(&endDate, cm.Date_Full_Layout), fmt.Sprint(i_status), serverId, userId)
+			if status1 < 0 {
+				return errors.New("新建服务-更新服务表出错")
+			}
+		} else {
+			insert := map[string]interface{}{
+				"s_userid":     userId,
+				"s_smainid":    mainId,
+				"s_serviceid":  serverId,
+				"i_frequency":  frequency,
+				"l_starttime":  cm.FormatDate(&startDate, cm.Date_Full_Layout),
+				"l_endtime":    cm.FormatDate(&endDate, cm.Date_Full_Layout),
+				"i_status":     i_status,
+				"l_createtime": cm.NowFormat(cm.Date_Full_Layout),
+				"l_updatetime": cm.NowFormat(cm.Date_Full_Layout),
+			}
+			order_id := util.JysqlDB.Insert("bigmember_service_user", insert)
+			if order_id <= 0 {
+				return errors.New("用户服务表插入失败")
+			}
+		}
+	}
+	ClearBigVipUserPower(userId)
+	return nil
+}
+
+func GetStartAndEndTime(startTime string, cycleCount, cycleUnit int) (vipStartTime, endTime time.Time) {
+	//根据开始时间计算结束时间
+	month := 0
+	if cycleUnit == 1 {
+		month = cycleCount * 12
+	} else if cycleUnit == 2 {
+		month = cycleCount
+	} else if cycleUnit == 4 {
+		month = cycleCount * 3
+	}
+	vipStartTime, _ = time.ParseInLocation(cm.Date_Short_Layout, startTime, time.Local)
+	if cycleUnit == 3 {
+		_endTime := vipStartTime.AddDate(0, 0, cycleCount)
+		t := _endTime.Format(cm.Date_Short_Layout) + " 23:59:59"
+		endTime, _ = time.ParseInLocation(cm.Date_Full_Layout, t, time.Local)
+	} else {
+		endTime = GetDATE1(month, vipStartTime.Unix())
+	}
+	return vipStartTime, endTime
+}

+ 248 - 252
src/order/suppleSalePerson.go

@@ -366,288 +366,284 @@ func OrdersExamine(context *admin.Context) (interface{}, error) {
 	}
 	//查询订单
 	order := util.JysqlDB.FindOne("dataexport_order", map[string]interface{}{"order_code": param.OrderCode}, "id,audit_status,order_status,buy_subject,sale_time,user_phone,company_name,product_type,vip_type,vip_endtime,vip_starttime,filter", "")
-	if order != nil && len(*order) > 0 {
-		oldState := cm.IntAll((*order)["audit_status"])
-		newState := 1
-		operatorType := 2
-		if oldState == 3 {
-			return nil, errors.New("订单审核已完成,无需审批")
+	if order == nil {
+		return nil, errors.New("为查询到订单信息")
+	}
+	oldState := cm.IntAll((*order)["audit_status"])
+	newState := 1
+	operatorType := 2
+	if oldState == 3 {
+		return nil, errors.New("订单审核已完成,无需审批")
+	}
+	if param.State == 1 { //审核通过
+		if oldState == 1 { //记录为待审核状态
+			newState = 2
+		} else if oldState == 2 { //记录为一审通过状态
+			newState = 4
+			operatorType = 3
+		} else if oldState == 4 {
+			newState = 3
+			operatorType = 5 //三审
 		}
-		if param.State == 1 { //审核通过
-			if oldState == 1 { //记录为待审核状态
-				newState = 2
-			} else if oldState == 2 { //记录为一审通过状态
-				newState = 4
-				operatorType = 3
-			} else if oldState == 4 {
-				newState = 3
-				operatorType = 5 //三审
-			}
-		} else {
-			if oldState == 1 {
-				newState = -2
-			} else if oldState == 2 {
-				newState = -3
-				operatorType = 3
-			} else if oldState == 4 {
-				newState = -4
-				operatorType = 5
-			}
+	} else {
+		if oldState == 1 {
+			newState = -2
+		} else if oldState == 2 {
+			newState = -3
+			operatorType = 3
+		} else if oldState == 4 {
+			newState = -4
+			operatorType = 5
 		}
-		var productType string
-		var (
-			userId   string
-			userData *map[string]interface{}
-			ok1      bool
-		)
-		userData, ok1 = util.MQFW.FindOne("user", map[string]interface{}{"s_phone": (*order)["user_phone"]})
+	}
+	var productType string
+	var (
+		userId   string
+		userData *map[string]interface{}
+		ok1      bool
+	)
+	userData, ok1 = util.MQFW.FindOne("user", map[string]interface{}{"s_phone": (*order)["user_phone"]})
+	if ok1 && userData != nil && len(*userData) > 0 {
+		userId = mongodb.BsonIdToSId((*userData)["_id"])
+	} else {
+		userData, ok1 = util.MQFW.FindOne("user", map[string]interface{}{"s_m_phone": (*order)["user_phone"]})
 		if ok1 && userData != nil && len(*userData) > 0 {
 			userId = mongodb.BsonIdToSId((*userData)["_id"])
-		} else {
-			userData, ok1 = util.MQFW.FindOne("user", map[string]interface{}{"s_m_phone": (*order)["user_phone"]})
-			if ok1 && userData != nil && len(*userData) > 0 {
-				userId = mongodb.BsonIdToSId((*userData)["_id"])
-			}
 		}
-		if newState == 3 { //审核通过,开通权益
-			productType = cm.ObjToString((*order)["product_type"])
-			if productType == "VIP订阅" {
-				vipType := cm.IntAll((*order)["vip_type"])
-				if vipType != 0 {
-					filterMap := map[string]interface{}{}
-					if err := json.Unmarshal([]byte(cm.ObjToString((*order)["filter"])), &filterMap); err != nil {
-						return nil, err
-					}
-					vipEndTime, _ := time.ParseInLocation(cm.Date_Full_Layout, cm.ObjToString((*order)["vip_endtime"]), time.Local)
-					if vipType == 1 { //超级订阅续费
-						//需要判断续费开始日期小于审核日期,开始日期改为审核日期,结束日期根据开始日期往后延
-						vipStartTime, _ := time.ParseInLocation(cm.Date_Full_Layout, cm.ObjToString((*order)["vip_starttime"]), time.Local)
-						set := map[string]interface{}{
-							//"l_vip_endtime":    vipEndTime.Unix(),
-							"i_vip_expire_tip": 0,
-							"i_vip_status":     2,
-						}
-						if vipStartTime.Unix() < time.Now().Unix() {
-							vipStartTime = time.Now().Local()
-							//结束日期计算
-							month := 0
-							cycleUnit := cm.IntAll(filterMap["cycleunit"])
-							cycleCount := cm.IntAll(filterMap["cyclecount"])
-							if cm.ObjToString((*order)["vip_endtime"]) != "" {
-								if cycleUnit == 1 {
-									month = cycleCount * 12
-								} else if cycleUnit == 2 {
-									month = cycleCount
-								} else if cycleUnit == 4 {
-									month = cycleCount * 3
-								}
-							}
-							if cycleUnit == 3 {
-								_endTime := vipStartTime.AddDate(0, 0, cycleCount)
-								t := _endTime.Format(cm.Date_Short_Layout) + " 23:59:59"
-								vipEndTime, _ = time.ParseInLocation(cm.Date_Full_Layout, t, time.Local)
-							} else {
-								vipEndTime = GetDATE1(month, vipStartTime.Unix())
-							}
-							set["l_vip_starttime"] = vipStartTime.Unix()
-							//更新订单信息
-							ok := util.JysqlDB.Update(DataExportOrder, map[string]interface{}{"order_code": param.OrderCode}, map[string]interface{}{"vip_starttime": vipStartTime.Format(cm.Date_Full_Layout), "vip_endtime": vipEndTime.Format(cm.Date_Full_Layout)})
-							if !ok {
-								return false, errors.New("更新订单信息出错")
-							}
-						}
-						set["l_vip_endtime"] = vipEndTime.Unix()
-						if !util.MQFW.UpdateById("user", userId,
-							bson.M{"$set": set}) {
-							log.Printf("%s更新结束%d日期出错\n", userId, vipEndTime.Unix())
-						}
-					} else if vipType == 2 { //升级
-						//先判断审核通过日期是否再超级订阅有效期内
-						vipStatus := cm.IntAll((*userData)["i_vip_status"])
-						if vipStatus != 2 {
-							return nil, errors.New("服务已到期,权益开通失败")
-						}
-						if !util.MQFW.Update("vip_upgrade",
-							&map[string]interface{}{"s_userid": userId, "i_isvalid": 0},
-							&map[string]interface{}{
-								"$set": map[string]interface{}{
-									"i_isvalid": 1,
-								},
-							}, false, true) {
-							log.Printf("%s vip_upgrade 更新失败  时间:%d\n", userId, vipEndTime.Unix())
-						}
-						updata := map[string]interface{}{
-							"o_vipjy.o_buyset": filterMap["newBuyset"],
-							"i_vip_expire_tip": 0,
-							"i_vip_status":     2,
-						}
-						if filterMap["area"] != nil {
-							updata["o_vipjy.o_area"] = filterMap["area"] //设置地区
-						}
-						if filterMap["industry"] != nil {
-							updata["o_vipjy.a_buyerclass"] = filterMap["industry"] //设置行业
-						}
-						if ok := util.MQFW.UpdateById("user", userId, map[string]interface{}{
-							"$set": updata,
-						}); !ok {
-							log.Printf("%s更新用户出错 %+v\n", userId, updata)
-							return false, errors.New("更新user用户信息出错")
-						} else {
-							//清理缓存
-							go ClearBigVipUserPower(userId)
-						}
-
-					}
-				}
-
-			} else if productType == "大会员" {
+	}
+	if newState == 3 { //审核通过,开通权益
+		productType = cm.ObjToString((*order)["product_type"])
+		if productType == "VIP订阅" {
+			vipType := cm.IntAll((*order)["vip_type"])
+			if vipType != 0 {
 				filterMap := map[string]interface{}{}
 				if err := json.Unmarshal([]byte(cm.ObjToString((*order)["filter"])), &filterMap); err != nil {
 					return nil, err
 				}
-				createType := cm.IntAll(filterMap["createType"])
-				serverArr := make([]map[string]interface{}, 0)
-				//补充包
-				if supplys, ok := filterMap["supplys"].([]interface{}); ok {
-					serverArr = cm.ObjArrToMapArr(supplys)
-				}
-				if createType != 1 { //1-新建 2-补充 3-延期
-					memberStatus := cm.IntAll((*userData)["i_member_status"])
-					bigEndTime := cm.Int64All((*userData)["i_member_endtime"])
-					//memberStatus := cm.IntAll((*userData)["i_member_status"])
-					freeSubNum := cm.IntAll((*userData)["i_free_sub_num"])
-					paySubNum := cm.IntAll((*userData)["i_pay_sub_num"])
-					startTime := time.Now()
-					endTime := time.Unix(bigEndTime, 0)
-					var ok1 bool
-					if createType == 2 { //大会员补充服务
-						if memberStatus < 0 {
-							return nil, errors.New("服务已到期,权益开通失败")
+				vipEndTime, _ := time.ParseInLocation(cm.Date_Full_Layout, cm.ObjToString((*order)["vip_endtime"]), time.Local)
+				if vipType == 1 { //超级订阅续费
+					//需要判断续费开始日期小于审核日期,开始日期改为审核日期,结束日期根据开始日期往后延
+					vipStartTime, _ := time.ParseInLocation(cm.Date_Full_Layout, cm.ObjToString((*order)["vip_starttime"]), time.Local)
+					set := map[string]interface{}{
+						//"l_vip_endtime":    vipEndTime.Unix(),
+						"i_vip_expire_tip": 0,
+						"i_vip_status":     2,
+					}
+					if vipStartTime.Unix() < time.Now().Unix() {
+						vipStartTime = time.Now().Local()
+						//结束日期计算
+						month := 0
+						cycleUnit := cm.IntAll(filterMap["cycleunit"])
+						cycleCount := cm.IntAll(filterMap["cyclecount"])
+						if cm.ObjToString((*order)["vip_endtime"]) != "" {
+							if cycleUnit == 1 {
+								month = cycleCount * 12
+							} else if cycleUnit == 2 {
+								month = cycleCount
+							} else if cycleUnit == 4 {
+								month = cycleCount * 3
+							}
 						}
-						//大会员补充服务
-						ok1, err = BigMemberSupple(freeSubNum, paySubNum, startTime, endTime, userId, filterMap, serverArr)
-
-					} else if createType == 3 { //大会员延长服务
-						//判断开始时间小于审核时间,开始时间改为审核时间
-						lastEndTime := cm.Int64All((*userData)["i_member_endtime"])
-						//newBigStartTime := time.Now().Unix()
-						startTime := time.Date(time.Now().Year(), time.Now().Month(), time.Now().Day(), 0, 0, 0, 0, time.Now().Location())
-						effectState := true
-						var endTime time.Time
-						if lastEndTime < time.Now().Unix() {
-							//计算大会员结束时间
-							effectState = false
-							cycleCount := cm.IntAll(filterMap["cycle"])
-							cycleType := cm.IntAll(filterMap["cycleType"])
-							nowTime := time.Date(time.Now().Year(), time.Now().Month(), time.Now().Day(), 0, 0, 0, 0, time.Local)
-							endTime = GetDATE(cycleCount, cycleType, nowTime.Unix())
+						if cycleUnit == 3 {
+							_endTime := vipStartTime.AddDate(0, 0, cycleCount)
+							t := _endTime.Format(cm.Date_Short_Layout) + " 23:59:59"
+							vipEndTime, _ = time.ParseInLocation(cm.Date_Full_Layout, t, time.Local)
+						} else {
+							vipEndTime = GetDATE1(month, vipStartTime.Unix())
 						}
-						ok1, err = BigMemberExtend(filterMap, userId, param.OrderCode, effectState, startTime, endTime, cm.IntAll((*userData)["i_member_status"]))
+						set["l_vip_starttime"] = vipStartTime.Unix()
+						//更新订单信息
+						ok := util.JysqlDB.Update(DataExportOrder, map[string]interface{}{"order_code": param.OrderCode}, map[string]interface{}{"vip_starttime": vipStartTime.Format(cm.Date_Full_Layout), "vip_endtime": vipEndTime.Format(cm.Date_Full_Layout)})
+						if !ok {
+							return false, errors.New("更新订单信息出错")
+						}
+					}
+					set["l_vip_endtime"] = vipEndTime.Unix()
+					if !util.MQFW.UpdateById("user", userId,
+						bson.M{"$set": set}) {
+						log.Printf("%s更新结束%d日期出错\n", userId, vipEndTime.Unix())
+					}
+				} else if vipType == 2 { //升级
+					//先判断审核通过日期是否再超级订阅有效期内
+					vipStatus := cm.IntAll((*userData)["i_vip_status"])
+					if vipStatus != 2 {
+						return nil, errors.New("服务已到期,权益开通失败")
+					}
+					if !util.MQFW.Update("vip_upgrade",
+						&map[string]interface{}{"s_userid": userId, "i_isvalid": 0},
+						&map[string]interface{}{
+							"$set": map[string]interface{}{
+								"i_isvalid": 1,
+							},
+						}, false, true) {
+						log.Printf("%s vip_upgrade 更新失败  时间:%d\n", userId, vipEndTime.Unix())
+					}
+					updata := map[string]interface{}{
+						"o_vipjy.o_buyset": filterMap["newBuyset"],
+						"i_vip_expire_tip": 0,
+						"i_vip_status":     2,
+					}
+					if filterMap["area"] != nil {
+						updata["o_vipjy.o_area"] = filterMap["area"] //设置地区
 					}
-					if !ok1 && err != nil {
-						return nil, err
+					if filterMap["industry"] != nil {
+						updata["o_vipjy.a_buyerclass"] = filterMap["industry"] //设置行业
 					}
+					if ok := util.MQFW.UpdateById("user", userId, map[string]interface{}{
+						"$set": updata,
+					}); !ok {
+						log.Printf("%s更新用户出错 %+v\n", userId, updata)
+						return false, errors.New("更新user用户信息出错")
+					}
+					//清理缓存
+					go ClearBigVipUserPower(userId)
 				}
-			} else if productType == "大会员-子账号" {
+			}
+
+		} else if productType == "大会员" {
+			filterMap := map[string]interface{}{}
+			if err := json.Unmarshal([]byte(cm.ObjToString((*order)["filter"])), &filterMap); err != nil {
+				return nil, err
+			}
+			createType := cm.IntAll(filterMap["createType"])
+			serverArr := make([]map[string]interface{}, 0)
+			//补充包
+			if supplys, ok := filterMap["supplys"].([]interface{}); ok {
+				serverArr = cm.ObjArrToMapArr(supplys)
+			}
+			if createType != 1 { //1-新建 2-补充 3-延期
 				memberStatus := cm.IntAll((*userData)["i_member_status"])
-				if memberStatus < 0 {
-					return nil, errors.New("服务已到期,权益开通失败")
-				}
-				filterMap := map[string]interface{}{}
-				if err := json.Unmarshal([]byte(cm.ObjToString((*order)["filter"])), &filterMap); err != nil {
-					return nil, err
-				}
+				bigEndTime := cm.Int64All((*userData)["i_member_endtime"])
+				//memberStatus := cm.IntAll((*userData)["i_member_status"])
 				freeSubNum := cm.IntAll((*userData)["i_free_sub_num"])
 				paySubNum := cm.IntAll((*userData)["i_pay_sub_num"])
-				bigStart := cm.Int64All((*userData)["i_member_starttime"])
-				bigEnd := cm.Int64All((*userData)["i_member_endtime"])
-				startTime := time.Unix(bigStart, 0)
-				endTime := time.Unix(bigEnd, 0)
-				ok, err := SubAccount(userId, filterMap, paySubNum, freeSubNum, startTime, endTime)
-				if !ok && err != nil {
-					return nil, err
-				}
+				startTime := time.Now()
+				endTime := time.Unix(bigEndTime, 0)
+				var ok1 bool
+				if createType == 2 { //大会员补充服务
+					if memberStatus < 0 {
+						return nil, errors.New("服务已到期,权益开通失败")
+					}
+					//大会员补充服务
+					ok1, err = BigMemberSupple(freeSubNum, paySubNum, startTime, endTime, userId, filterMap, serverArr)
 
-			} else if productType == "大会员-补充包" {
-				memberStatus := cm.IntAll((*userData)["i_member_status"])
-				if memberStatus < 0 {
-					return nil, errors.New("服务已到期,权益开通失败")
-				}
-				filterMap := map[string]interface{}{}
-				if err := json.Unmarshal([]byte(cm.ObjToString((*order)["filter"])), &filterMap); err != nil {
-					return nil, err
-				}
-				serverArr := make([]map[string]interface{}, 0)
-				//补充包
-				if supplys, ok := filterMap["supplys"].([]interface{}); ok {
-					serverArr = cm.ObjArrToMapArr(supplys)
+				} else if createType == 3 { //大会员延长服务
+					//判断开始时间小于审核时间,开始时间改为审核时间
+					lastEndTime := cm.Int64All((*userData)["i_member_endtime"])
+					//newBigStartTime := time.Now().Unix()
+					startTime := time.Date(time.Now().Year(), time.Now().Month(), time.Now().Day(), 0, 0, 0, 0, time.Now().Location())
+					effectState := true
+					var endTime time.Time
+					if lastEndTime < time.Now().Unix() {
+						//计算大会员结束时间
+						effectState = false
+						cycleCount := cm.IntAll(filterMap["cycle"])
+						cycleType := cm.IntAll(filterMap["cycleType"])
+						nowTime := time.Date(time.Now().Year(), time.Now().Month(), time.Now().Day(), 0, 0, 0, 0, time.Local)
+						endTime = GetDATE(cycleCount, cycleType, nowTime.Unix())
+					}
+					ok1, err = BigMemberExtend(filterMap, userId, param.OrderCode, effectState, startTime, endTime, cm.IntAll((*userData)["i_member_status"]))
 				}
-				ok, err := SupplePackage(userId, serverArr)
-				if !ok && err != nil {
+				if !ok1 && err != nil {
 					return nil, err
 				}
 			}
-		}
+		} else if productType == "大会员-子账号" {
+			memberStatus := cm.IntAll((*userData)["i_member_status"])
+			if memberStatus < 0 {
+				return nil, errors.New("服务已到期,权益开通失败")
+			}
+			filterMap := map[string]interface{}{}
+			if err := json.Unmarshal([]byte(cm.ObjToString((*order)["filter"])), &filterMap); err != nil {
+				return nil, err
+			}
+			freeSubNum := cm.IntAll((*userData)["i_free_sub_num"])
+			paySubNum := cm.IntAll((*userData)["i_pay_sub_num"])
+			bigStart := cm.Int64All((*userData)["i_member_starttime"])
+			bigEnd := cm.Int64All((*userData)["i_member_endtime"])
+			startTime := time.Unix(bigStart, 0)
+			endTime := time.Unix(bigEnd, 0)
+			ok, err := SubAccount(userId, filterMap, paySubNum, freeSubNum, startTime, endTime)
+			if !ok && err != nil {
+				return nil, err
+			}
 
-		ok := util.JysqlDB.ExecTx("审核订单", func(tx *sql.Tx) bool {
-			upData := map[string]interface{}{
-				"audit_status": newState,
+		} else if productType == "大会员-补充包" {
+			memberStatus := cm.IntAll((*userData)["i_member_status"])
+			if memberStatus < 0 {
+				return nil, errors.New("服务已到期,权益开通失败")
 			}
-			if newState == 3 {
-				now := time.Now()
-				saleTime, _ := time.Parse(cm.Date_Full_Layout, cm.ObjToString((*order)["sale_time"]))
-				if now.Unix() > saleTime.Unix() {
-					saleTime = now
-				}
-				upData["sale_time"] = saleTime.Format(cm.Date_Full_Layout)
-				//“协议归档状态”如若为“已归档”,则“订单状态”更新为“已完成”,如若为“未归档”,则订单状态仍为“未完成”
-				contractData := util.JysqlDB.FindOne("contract", map[string]interface{}{"order_code": param.OrderCode}, "contract_archive_status", "")
-				if contractData != nil && len(*contractData) > 0 {
-					if cm.IntAll((*contractData)["contract_archive_status"]) == 1 {
-						upData["order_status"] = 1
-					}
-				}
-				if cm.IntAll((*order)["buy_subject"]) == 2 {
-					orderStatus := cm.IntAll(cm.If(cm.IntAll((*order)["order_status"]) == 1, 1, upData["order_status"]))
-					entId, err, userPositionId := AutomaticallyCreatingEnt(cm.InterfaceToStr((*order)["company_name"]), cm.InterfaceToStr((*order)["user_phone"]), param.OrderCode, orderStatus, userId)
-					if err != nil {
-						log.Printf("AutomaticallyCreatingEnt 自动创建企业信息失败:code:%s,err:%s", param.OrderCode, err.Error())
-						return false
-					} else {
-						if entId != 0 {
-							upData["ent_id"] = entId
-							upData["user_id"] = userPositionId
-						}
-					}
+			filterMap := map[string]interface{}{}
+			if err := json.Unmarshal([]byte(cm.ObjToString((*order)["filter"])), &filterMap); err != nil {
+				return nil, err
+			}
+			serverArr := make([]map[string]interface{}, 0)
+			//补充包
+			if supplys, ok := filterMap["supplys"].([]interface{}); ok {
+				serverArr = cm.ObjArrToMapArr(supplys)
+			}
+			ok, err := SupplePackage(userId, serverArr)
+			if !ok && err != nil {
+				return nil, err
+			}
+		}
+	}
+	ok := util.JysqlDB.ExecTx("审核订单", func(tx *sql.Tx) bool {
+		upData := map[string]interface{}{
+			"audit_status": newState,
+		}
+		if newState == 3 {
+			now := time.Now()
+			saleTime, _ := time.Parse(cm.Date_Full_Layout, cm.ObjToString((*order)["sale_time"]))
+			if now.Unix() > saleTime.Unix() {
+				saleTime = now
+			}
+			upData["sale_time"] = saleTime.Format(cm.Date_Full_Layout)
+			//“协议归档状态”如若为“已归档”,则“订单状态”更新为“已完成”,如若为“未归档”,则订单状态仍为“未完成”
+			contractData := util.JysqlDB.FindOne("contract", map[string]interface{}{"order_code": param.OrderCode}, "contract_archive_status", "")
+			if contractData != nil && len(*contractData) > 0 {
+				if cm.IntAll((*contractData)["contract_archive_status"]) == 1 {
+					upData["order_status"] = 1
 				}
-				filterMap := map[string]interface{}{}
-				if err := json.Unmarshal([]byte(cm.ObjToString((*order)["filter"])), &filterMap); err != nil {
+			}
+			if cm.IntAll((*order)["buy_subject"]) == 2 {
+				orderStatus := cm.IntAll(cm.If(cm.IntAll((*order)["order_status"]) == 1, 1, upData["order_status"]))
+				entId, err, userPositionId := AutomaticallyCreatingEnt(cm.InterfaceToStr((*order)["company_name"]), cm.InterfaceToStr((*order)["user_phone"]), param.OrderCode, orderStatus, userId)
+				if err != nil {
+					log.Printf("AutomaticallyCreatingEnt 自动创建企业信息失败:code:%s,err:%s", param.OrderCode, err.Error())
 					return false
+				} else {
+					if entId != 0 {
+						upData["ent_id"] = entId
+						upData["user_id"] = userPositionId
+					}
 				}
-				filterMap["audit_type"] = "人工审核"
-				filterByte, _ := json.Marshal(filterMap)
-				upData["filter"] = string(filterByte)
 			}
-			//更新订单
-			up := util.JysqlDB.UpdateByTx(tx, "dataexport_order", map[string]interface{}{"order_code": param.OrderCode}, upData)
-			//插入审核记录表
-			insertData := map[string]interface{}{
-				"operator":      context.User.Username,
-				"create_time":   time.Now().Format(cm.Date_Full_Layout),
-				"operator_type": operatorType,
-				"audit_status":  newState,
-				"back_reason":   param.Reason,
-				"order_code":    param.OrderCode,
-				"audit_type":    2,
+			filterMap := map[string]interface{}{}
+			if err := json.Unmarshal([]byte(cm.ObjToString((*order)["filter"])), &filterMap); err != nil {
+				return false
 			}
-			in := util.JysqlDB.InsertByTx(tx, "audit_records", insertData)
-			return up && in > 0
-		})
-		if !ok {
-			return nil, errors.New("更新订单信息出错")
+			filterMap["audit_type"] = "人工审核"
+			filterByte, _ := json.Marshal(filterMap)
+			upData["filter"] = string(filterByte)
 		}
-	} else {
-		return nil, errors.New("为查询到订单信息")
+		//更新订单
+		up := util.JysqlDB.UpdateByTx(tx, "dataexport_order", map[string]interface{}{"order_code": param.OrderCode}, upData)
+		//插入审核记录表
+		insertData := map[string]interface{}{
+			"operator":      context.User.Username,
+			"create_time":   time.Now().Format(cm.Date_Full_Layout),
+			"operator_type": operatorType,
+			"audit_status":  newState,
+			"back_reason":   param.Reason,
+			"order_code":    param.OrderCode,
+			"audit_type":    2,
+		}
+		in := util.JysqlDB.InsertByTx(tx, "audit_records", insertData)
+		return up && in > 0
+	})
+	if !ok {
+		return nil, errors.New("更新订单信息出错")
 	}
 	return map[string]interface{}{
 		"status": 1,