ソースを参照

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

wangkaiyue 1 年間 前
コミット
69a384a9d4
2 ファイル変更443 行追加368 行削除
  1. 97 89
      src/order/orderManageController.go
  2. 346 279
      src/order/suppleSalePerson.go

+ 97 - 89
src/order/orderManageController.go

@@ -1978,17 +1978,18 @@ func CreateSubOrder(context *admin.Context) (interface{}, error) {
 	//param.BuySubject = "1" //大会员补充包/子账号 均为购买个体
 	param.CreatePerson = context.User.Username
 	param.SaleTime = strings.Split(param.SaleTime, " ")[0] + " " + strings.Split(qutil.NowFormat(qutil.Date_Full_Layout), " ")[1]
-	if param.Phone != "" {
+	if param.Phone == "" {
 		userId, memberStatus := "", 0
-		bigStart, bigEnd, pay_sub_num, free_sub_num := int64(0), int64(0), 0, 0
+		bigStart, bigEnd := int64(0), int64(0)
+		//pay_sub_num, free_sub_num:=0, 0
 		o_member_jy := map[string]interface{}{}
 		userData, ok := util.MQFW.FindOne("user", map[string]interface{}{"s_phone": param.Phone})
 		if ok && userData != nil && len(*userData) > 0 {
 			userId = mongodb.BsonIdToSId((*userData)["_id"])
 			bigStart = qutil.Int64All((*userData)["i_member_starttime"])
 			bigEnd = qutil.Int64All((*userData)["i_member_endtime"])
-			pay_sub_num = qutil.IntAll((*userData)["i_pay_sub_num"])
-			free_sub_num = qutil.IntAll((*userData)["i_free_sub_num"])
+			//pay_sub_num = qutil.IntAll((*userData)["i_pay_sub_num"])
+			//free_sub_num = qutil.IntAll((*userData)["i_free_sub_num"])
 			memberStatus = qutil.IntAll((*userData)["i_member_status"])
 			if qutil.ObjToMap((*userData)["o_member_jy"]) != nil { // p238 获取用户身上的订阅信息  用于后边判断是否是单省版大会员
 				o_member_jy = *(qutil.ObjToMap((*userData)["o_member_jy"]))
@@ -1999,8 +2000,8 @@ func CreateSubOrder(context *admin.Context) (interface{}, error) {
 				userId = mongodb.BsonIdToSId((*userDatas)["_id"])
 				bigStart = qutil.Int64All((*userDatas)["i_member_starttime"])
 				bigEnd = qutil.Int64All((*userDatas)["i_member_endtime"])
-				pay_sub_num = qutil.IntAll((*userDatas)["i_pay_sub_num"])
-				free_sub_num = qutil.IntAll((*userDatas)["i_free_sub_num"])
+				//pay_sub_num = qutil.IntAll((*userDatas)["i_pay_sub_num"])
+				//free_sub_num = qutil.IntAll((*userDatas)["i_free_sub_num"])
 				memberStatus = qutil.IntAll((*userDatas)["i_member_status"])
 				if qutil.ObjToMap((*userDatas)["o_member_jy"]) != nil { // p238 获取用户身上的订阅信息  用于后边判断是否是单省版大会员
 					o_member_jy = *(qutil.ObjToMap((*userDatas)["o_member_jy"]))
@@ -2116,41 +2117,44 @@ func CreateSubOrder(context *admin.Context) (interface{}, error) {
 			if !param.Open {
 				return nil, nil
 			}
-			set := map[string]interface{}{
-				"$set": map[string]interface{}{
-					"i_pay_sub_num":  param.BuyCount,
-					"i_free_sub_num": 0,
-					"i_mainaccount":  1,
-				},
-			}
-			ok := util.MQFW.UpdateById("user", userId, set)
-			if !ok {
-				log.Println("user表大会员状态更新失败")
-				return nil, errors.New("user表大会员状态更新失败")
-			} else {
-				if pay_sub_num == 0 && free_sub_num == 0 {
-					insert := map[string]interface{}{
-						"s_userid":     userId,
-						"s_serviceid":  2,
-						"l_starttime":  qutil.FormatDate(&startdate, qutil.Date_Full_Layout),
-						"l_endtime":    qutil.FormatDate(&enddate, qutil.Date_Full_Layout),
-						"i_status":     0,
-						"l_createtime": qutil.NowFormat(qutil.Date_Full_Layout),
-						"l_updatetime": qutil.NowFormat(qutil.Date_Full_Layout),
-					}
-					order_id := util.JysqlDB.Insert("bigmember_service_user", insert)
-					if order_id > 0 {
-						log.Println("插入用户服务表成功", userId)
-					} else {
-						log.Println("插入用户服务表失败", userId)
-						return nil, errors.New("插入用户服务表失败")
-					}
-				}
-			}
+			//
+			//p504大会员权限修改为回款后开通
+			//
+			//set := map[string]interface{}{
+			//	"$set": map[string]interface{}{
+			//		"i_pay_sub_num":  param.BuyCount,
+			//		"i_free_sub_num": 0,
+			//		"i_mainaccount":  1,
+			//	},
+			//}
+			//ok := util.MQFW.UpdateById("user", userId, set)
+			//if !ok {
+			//	log.Println("user表大会员状态更新失败")
+			//	return nil, errors.New("user表大会员状态更新失败")
+			//} else {
+			//	if pay_sub_num == 0 && free_sub_num == 0 {
+			//		insert := map[string]interface{}{
+			//			"s_userid":     userId,
+			//			"s_serviceid":  2,
+			//			"l_starttime":  qutil.FormatDate(&startdate, qutil.Date_Full_Layout),
+			//			"l_endtime":    qutil.FormatDate(&enddate, qutil.Date_Full_Layout),
+			//			"i_status":     0,
+			//			"l_createtime": qutil.NowFormat(qutil.Date_Full_Layout),
+			//			"l_updatetime": qutil.NowFormat(qutil.Date_Full_Layout),
+			//		}
+			//		order_id := util.JysqlDB.Insert("bigmember_service_user", insert)
+			//		if order_id > 0 {
+			//			log.Println("插入用户服务表成功", userId)
+			//		} else {
+			//			log.Println("插入用户服务表失败", userId)
+			//			return nil, errors.New("插入用户服务表失败")
+			//		}
+			//	}
+			//}
 		} else {
 			return nil, errors.New("创建子账号订单失败")
 		}
-		ClearBigVipUserPower(userId)
+		//ClearBigVipUserPower(userId)
 	}
 
 	return nil, nil
@@ -4035,62 +4039,66 @@ func AutomaticallyCreatingEnt(name, phone, orderCode string, orderStatus int, us
 
 // EntLicense 订单企业授权信息记录
 func EntLicense(entId, empowerCount, provinceCount, orderId, userCount int, productType, st, et, phone string) error {
-	if util.JysqlDB.Count("entniche_order", map[string]interface{}{"order_id": orderId}) > 0 {
-		return nil
-	}
-	user := util.JysqlDB.FindOne("entniche_user", map[string]interface{}{"phone": phone, "ent_id": entId}, "id", "")
-	data := util.JysqlDB.FindOne("entniche_wait_empower", map[string]interface{}{"ent_id": entId, "product_type": productType, "province_count": provinceCount, "end_time": et}, "id,empower_count", "")
-	t := qutil.NowFormat(qutil.Date_Full_Layout)
-	if data != nil && len(*data) > 0 {
-		empower_count := qutil.IntAll((*data)["empower_count"])
-		count := empower_count + empowerCount
-		id := qutil.IntAll((*data)["id"])
-		if util.JysqlDB.Update("entniche_wait_empower", map[string]interface{}{"id": id}, map[string]interface{}{
-			"empower_count": count,
-			"update_time":   t,
-		}) {
-			upData := map[string]interface{}{
-				"order_id":        orderId,
-				"wait_empower_id": id,
-				"create_time":     t,
+	e := func() error {
+		if util.JysqlDB.Count("entniche_order", map[string]interface{}{"order_id": orderId}) > 0 {
+			return nil
+		}
+		user := util.JysqlDB.FindOne("entniche_user", map[string]interface{}{"phone": phone, "ent_id": entId}, "id", "")
+		data := util.JysqlDB.FindOne("entniche_wait_empower", map[string]interface{}{"ent_id": entId, "product_type": productType, "province_count": provinceCount, "end_time": et}, "id,empower_count", "")
+		t := qutil.NowFormat(qutil.Date_Full_Layout)
+		if data != nil && len(*data) > 0 {
+			empower_count := qutil.IntAll((*data)["empower_count"])
+			count := empower_count + empowerCount
+			id := qutil.IntAll((*data)["id"])
+			if util.JysqlDB.Update("entniche_wait_empower", map[string]interface{}{"id": id}, map[string]interface{}{
+				"empower_count": count,
+				"update_time":   t,
+			}) {
+				upData := map[string]interface{}{
+					"order_id":        orderId,
+					"wait_empower_id": id,
+					"create_time":     t,
+				}
+				util.JysqlDB.Insert("entniche_order", upData)
+			} else {
+				return errors.New("企业待授权表更新失败")
 			}
-			util.JysqlDB.Insert("entniche_order", upData)
 		} else {
-			return errors.New("企业待授权表更新失败")
-		}
-	} else {
-		inDatas := map[string]interface{}{
-			"ent_id":         entId,
-			"product_type":   productType,
-			"use_count":      userCount,
-			"empower_count":  empowerCount,
-			"province_count": provinceCount,
-			"start_time":     st,
-			"end_time":       et,
-			"update_time":    t,
-			"create_time":    t,
-		}
-		id := util.JysqlDB.Insert("entniche_wait_empower", inDatas)
-		if id > 0 {
-			inData := map[string]interface{}{
-				"order_id":        orderId,
-				"wait_empower_id": id,
-				"create_time":     time.Now(),
+			inDatas := map[string]interface{}{
+				"ent_id":         entId,
+				"product_type":   productType,
+				"use_count":      userCount, //userCount此参数已舍弃不用
+				"empower_count":  empowerCount,
+				"province_count": provinceCount,
+				"start_time":     st,
+				"end_time":       et,
+				"update_time":    t,
+				"create_time":    t,
 			}
-			util.JysqlDB.Insert("entniche_order", inData)
-			if userCount > 0 {
-				if user != nil && len(*user) > 0 {
-					sql := "SELECT  COUNT(1)  FROM  entniche_power a  INNER JOIN entniche_wait_empower b ON a.wait_empower_id = b.id  and  b.end_time > now()   where  a.ent_id=" + fmt.Sprint(entId) + " and a.ent_user_id=" + qutil.InterfaceToStr((*user)["id"]) + " and  a.`status`=1"
-					number := util.JysqlDB.CountBySql(sql)
-					if number == 0 {
-						util.JysqlDB.Insert("entniche_power", map[string]interface{}{"wait_empower_id": id,
-							"ent_id": entId, "ent_user_id": (*user)["id"], "status": 1, "update_time": time.Now().Local(), "create_time": time.Now().Local()})
+			id := util.JysqlDB.Insert("entniche_wait_empower", inDatas)
+			if id > 0 {
+				inData := map[string]interface{}{
+					"order_id":        orderId,
+					"wait_empower_id": id,
+					"create_time":     time.Now(),
+				}
+				util.JysqlDB.Insert("entniche_order", inData)
+				if userCount > 0 {
+					if user != nil && len(*user) > 0 {
+						sql := "SELECT  COUNT(1)  FROM  entniche_power a  INNER JOIN entniche_wait_empower b ON a.wait_empower_id = b.id  and  b.end_time > now()   where  a.ent_id=" + fmt.Sprint(entId) + " and a.ent_user_id=" + qutil.InterfaceToStr((*user)["id"]) + " and  a.`status`=1"
+						number := util.JysqlDB.CountBySql(sql)
+						if number == 0 {
+							util.JysqlDB.Insert("entniche_power", map[string]interface{}{"wait_empower_id": id,
+								"ent_id": entId, "ent_user_id": (*user)["id"], "status": 1, "update_time": time.Now().Local(), "create_time": time.Now().Local()})
+						}
 					}
 				}
+			} else {
+				return errors.New("企业待授权表创建失败")
 			}
-		} else {
-			return errors.New("企业待授权表创建失败")
 		}
-	}
-	return nil
+		return nil
+	}()
+	log.Printf("企业%d开通大会员子账号 %s 数量%d  error %v\n", entId, productType, empowerCount, e)
+	return e
 }

+ 346 - 279
src/order/suppleSalePerson.go

@@ -366,284 +366,299 @@ 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 {
-		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 order != nil && len(*order) > 0 {
+		oldState := cm.IntAll((*order)["audit_status"])
+		newState := 1
+		operatorType := 2
+		if oldState == 3 {
+			return nil, errors.New("订单审核已完成,无需审批")
 		}
-	} else {
-		if oldState == 1 {
-			newState = -2
-		} else if oldState == 2 {
-			newState = -3
-			operatorType = 3
-		} else if oldState == 4 {
-			newState = -4
-			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
+			}
 		}
-	}
-	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"]})
+		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"])
+			}
 		}
-	}
-	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 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
 					}
-					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
+					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("更新订单信息出错")
 							}
 						}
-						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_endtime"] = vipEndTime.Unix()
+						if !util.MQFW.UpdateById("user", userId,
+							bson.M{"$set": set}) {
+							log.Printf("%s更新结束%d日期出错\n", userId, vipEndTime.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("更新订单信息出错")
+					} 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)
+						}
+
 					}
-					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"] //设置行业
+				}
+
+			} 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"])
+					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("服务已到期,权益开通失败")
+						}
+						//大会员补充服务
+						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())
+						}
+						ok1, err = BigMemberExtend(filterMap, userId, param.OrderCode, effectState, startTime, endTime, cm.IntAll((*userData)["i_member_status"]))
 					}
-					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用户信息出错")
+					if !ok1 && err != nil {
+						return nil, err
 					}
-					//清理缓存
-					go 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"])
-			serverArr := make([]map[string]interface{}, 0)
-			//补充包
-			if supplys, ok := filterMap["supplys"].([]interface{}); ok {
-				serverArr = cm.ObjArrToMapArr(supplys)
-			}
-			if createType != 1 { //1-新建 2-补充 3-延期
+			} else if productType == "大会员-子账号" {
 				memberStatus := cm.IntAll((*userData)["i_member_status"])
-				bigEndTime := cm.Int64All((*userData)["i_member_endtime"])
-				//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"])
-				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)
+				bigStart := cm.Int64All((*userData)["i_member_starttime"])
+				bigEnd := cm.Int64All((*userData)["i_member_endtime"])
+				areaCount := cm.IntAll(filterMap["areaCount"])
+				ok, err := SubAccount(SubAccountParam{
+					BuyCount:         cm.IntAll((*order)["buy_count"]),
+					BuySubject:       cm.IntAll((*order)["buy_subject"]),
+					StartTime:        time.Unix(bigStart, 0),
+					EndTime:          time.Unix(bigEnd, 0),
+					UserId:           userId,
+					InsertBigService: freeSubNum == 0 && paySubNum == 0,
+					EntId:            cm.IntAll((*order)["ent_id"]),
+					OrderId:          cm.IntAll((*order)["id"]),
+					ProvinceCount:    cm.IntAll(cm.If(areaCount == 0, -1, areaCount)),
+					ProductType:      getBigMemberProductTypeByOrderCode(cm.ObjToString(filterMap["contactOrderCode"])),
+					Phone:            cm.ObjToString((*order)["user_phone"]),
+				})
+				if !ok && err != nil {
+					return nil, err
+				}
 
-				} 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"]))
+			} else if productType == "大会员-补充包" {
+				memberStatus := cm.IntAll((*userData)["i_member_status"])
+				if memberStatus < 0 {
+					return nil, errors.New("服务已到期,权益开通失败")
 				}
-				if !ok1 && err != nil {
+				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
 				}
-			}
-		} 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
-			}
-
-		} 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)
-			}
-			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
+
+		ok := util.JysqlDB.ExecTx("审核订单", func(tx *sql.Tx) bool {
+			upData := map[string]interface{}{
+				"audit_status": newState,
 			}
-			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 newState == 3 {
+				now := time.Now()
+				saleTime, _ := time.Parse(cm.Date_Full_Layout, cm.ObjToString((*order)["sale_time"]))
+				if now.Unix() > saleTime.Unix() {
+					saleTime = now
 				}
-			}
-			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
+				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 false
+				}
+				filterMap["audit_type"] = "人工审核"
+				filterByte, _ := json.Marshal(filterMap)
+				upData["filter"] = string(filterByte)
 			}
-			filterMap := map[string]interface{}{}
-			if err := json.Unmarshal([]byte(cm.ObjToString((*order)["filter"])), &filterMap); err != nil {
-				return false
+			//更新订单
+			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["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,
+			in := util.JysqlDB.InsertByTx(tx, "audit_records", insertData)
+			return up && in > 0
+		})
+		if !ok {
+			return nil, errors.New("更新订单信息出错")
 		}
-		in := util.JysqlDB.InsertByTx(tx, "audit_records", insertData)
-		return up && in > 0
-	})
-	if !ok {
-		return nil, errors.New("更新订单信息出错")
+	} else {
+		return nil, errors.New("为查询到订单信息")
 	}
 	return map[string]interface{}{
 		"status": 1,
@@ -1035,41 +1050,93 @@ func SupplePackage(userId string, serverArr []map[string]interface{}) (bool, err
 	ClearBigVipUserPower(userId)
 	return true, nil
 }
+func getBigMemberProductTypeByOrderCode(orderCode string) string {
+	if orderCode == "" {
+		return ""
+	}
+	res := util.JysqlDB.FindOne("dataexport_order", map[string]interface{}{"order_code": orderCode, "product_type": "大会员"}, "filter", "id desc")
+	if res == nil || len(*res) == 0 {
+		return ""
+	}
+	filterMap := *cm.ObjToMap((*res)["filter"])
+	var product_type string = "大会员"
+	//1:专业版;2:智慧版;3:商机版;4:试用版 5:试用版 6:商机版2.0 7:专家版2.0
+	switch cm.IntAll(filterMap["level"]) {
+	case 1:
+		product_type += "专家版"
+	case 2:
+		product_type += "智慧版"
+	case 3:
+		product_type += "商机版"
+	case 4:
+		product_type += "试用版"
+	case 6:
+		product_type += "商机版2.0"
+	case 7:
+		product_type += "专家版2.0"
+	default:
+		product_type += "自定义"
+	}
+	return product_type
+}
+
+// SubAccountParam开通子账号参数
+type SubAccountParam struct {
+	BuyCount           int       //子账号数量
+	BuySubject         int       //购买主体 1:个人 2:企业
+	StartTime, EndTime time.Time //开始结束时间
+	//个人开通参数
+	UserId           string
+	InsertBigService bool //个人身份下需要更新大会员bigmember_service_user
+
+	//企业开通参数
+	EntId         int
+	OrderId       int
+	ProvinceCount int
+	ProductType   string //
+	Phone         string
+}
 
 // SubAccount 子账号订单审核开通权限
-func SubAccount(userId string, filterMap map[string]interface{}, paySubNum, freeSubNum int, startTime, endTime time.Time) (bool, error) {
-	paySub := cm.IntAll(filterMap["pay_sub_num"])
-	freeSub := cm.IntAll(filterMap["free_sub_num"])
-	set := map[string]interface{}{
-		"$set": map[string]interface{}{
-			"i_pay_sub_num":  paySub + paySubNum + freeSub + freeSubNum,
-			"i_free_sub_num": 0,
-			"i_mainaccount":  1,
-		},
-	}
-	ok := util.MQFW.UpdateById("user", userId, set)
-	if !ok {
-		return false, errors.New("user表大会员状态更新失败")
-	} else {
-		if paySubNum == 0 {
-			insert := map[string]interface{}{
-				"s_userid":     userId,
-				"s_serviceid":  2,
-				"l_starttime":  cm.FormatDate(&startTime, cm.Date_Full_Layout),
-				"l_endtime":    cm.FormatDate(&endTime, cm.Date_Full_Layout),
-				"i_status":     0,
-				"l_createtime": cm.NowFormat(cm.Date_Full_Layout),
-				"l_updatetime": cm.NowFormat(cm.Date_Full_Layout),
-			}
-			orderId := util.JysqlDB.Insert("bigmember_service_user", insert)
-			if orderId > 0 {
-				log.Println("插入用户服务表成功", userId)
-			} else {
-				log.Println("插入用户服务表失败", userId)
-				return false, errors.New("插入用户服务表失败")
+func SubAccount(param SubAccountParam) (bool, error) {
+	switch param.BuySubject {
+	//个人
+	case 1:
+		if !util.MQFW.UpdateById("user", param.UserId, map[string]interface{}{
+			"$set": map[string]interface{}{
+				"i_pay_sub_num":  param.BuyCount,
+				"i_free_sub_num": 0,
+				"i_mainaccount":  1,
+			},
+		}) {
+			return false, errors.New("user表大会员状态更新失败")
+		} else {
+			if param.InsertBigService {
+				orderId := util.JysqlDB.Insert("bigmember_service_user", map[string]interface{}{
+					"s_userid":     param.UserId,
+					"s_serviceid":  2,
+					"l_starttime":  cm.FormatDate(&param.StartTime, cm.Date_Full_Layout),
+					"l_endtime":    cm.FormatDate(&param.EndTime, cm.Date_Full_Layout),
+					"i_status":     0,
+					"l_createtime": cm.NowFormat(cm.Date_Full_Layout),
+					"l_updatetime": cm.NowFormat(cm.Date_Full_Layout),
+				})
+				if orderId > 0 {
+					log.Println("插入用户服务表成功", param.UserId)
+				} else {
+					log.Println("插入用户服务表失败", param.UserId)
+					return false, errors.New("插入用户服务表失败")
+				}
 			}
 		}
+		ClearBigVipUserPower(param.UserId)
+	case 2:
+		//企业版本开通
+		if err := EntLicense(param.EntId, param.BuyCount, param.ProvinceCount, param.OrderId, 0,
+			param.StartTime.Format(cm.Date_Full_Layout), param.EndTime.Format(cm.Date_Full_Layout), param.ProductType, param.Phone); err != nil {
+			return false, err
+		}
 	}
-	ClearBigVipUserPower(userId)
+
 	return true, nil
 }