瀏覽代碼

Merge remote-tracking branch 'origin/feature/v2.4.31' into feature/v2.4.31

# Conflicts:
#	src/order/suppleSalePerson.go
wangkaiyue 1 年之前
父節點
當前提交
9e5aed1e07
共有 3 個文件被更改,包括 325 次插入18 次删除
  1. 3 6
      src/order/orderSellingPrice.go
  2. 11 12
      src/order/otherOrderService.go
  3. 311 0
      src/order/serviceOpen.go

+ 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
+}