duxin 4 hónapja
szülő
commit
0937d35e84

+ 1 - 0
internal/cmd/cmd.go

@@ -35,6 +35,7 @@ var (
 					group.GET("/getSalesList", controller.GetSalesListHandler)                //获取销售人员列表
 					group.POST("/getAccountVipStatus", controller.GetAccountVipStatusHandler) //获取账户会员状态
 					group.POST("/userService", controller.GetUserService)                     //获取账户大会员服务
+					group.POST("/userChangePhone", controller.UserChangePhone)                //用户编辑手机号个人权益
 					group.GET("/getSalesChannelItem", controller.GetSalesChannelItem)         //销售区点&0原订单类型
 				})
 

+ 31 - 0
internal/controller/userPersonService.go

@@ -0,0 +1,31 @@
+package controller
+
+import (
+	. "app.yhyue.com/moapp/jybase/api"
+	"github.com/gogf/gf/v2/frame/g"
+	"github.com/gogf/gf/v2/net/ghttp"
+	"github.com/gogf/gf/v2/util/gconv"
+	"github.com/pkg/errors"
+	"jyOrderManager/internal/logic/user"
+	"jyOrderManager/internal/model"
+)
+
+// UserChangePhone 用户校验服务
+func UserChangePhone(r *ghttp.Request) {
+	rData, err := func() (interface{}, error) {
+		var param model.UserServiceParams
+		err := gconv.Struct(r.GetBody(), &param)
+		if err != nil {
+			return nil, errors.Wrap(err, "数据校验异常")
+		}
+		list, err := user.OrderUserChangePhone(r.Context(), param)
+		if err != nil {
+			return nil, errors.Wrap(err, "订单创建异常")
+		}
+		return list, nil
+	}()
+	if err != nil {
+		g.Log().Errorf(r.Context(), "创建订单异常 %v", err)
+	}
+	r.Response.WriteJson(NewResult(rData, err))
+}

+ 1 - 1
internal/logic/product/bigmember/BigMemberRenew.go

@@ -128,7 +128,7 @@ func (p jyBigProduct) BigMemberRenew(ctx context.Context, orderData, userData ma
 		data, _ := g.DB().Ctx(ctx).GetOne(ctx, fmt.Sprintf(`SELECT c.id as waitEmpowerId,c.start_time as sTime,c.end_time as eTime from jy_datareport_order a 
 INNER JOIN entniche_order b on a.id = b.order_detail_id
 INNER JOIN entniche_wait_empower c on b.wait_empower_id=c.id
-where a.id = %d  `, p.param.LinkedOrderId))
+where a.id = %s  `, p.param.LinkedOrderId))
 		if !data.IsEmpty() {
 			eTime := jyutil.StrToTime(gconv.String(data.Map()["eTime"]), "2006-01-02 15:04:05")
 			if eTime.Unix() > time.Now().Unix() {

+ 2 - 2
internal/logic/product/bigmember/BigMemberUpgrades.go

@@ -36,7 +36,7 @@ func (p jyBigProduct) BigMemberUpgrades(ctx context.Context, orderData, userData
 			data, _ := g.DB().Ctx(ctx).GetOne(ctx, fmt.Sprintf(`SELECT c.id as waitEmpowerId,c.start_time as sTime,c.end_time as eTime,c.ent_id from jy_datareport_order a 
 INNER JOIN entniche_order b on a.id = b.order_detail_id
 INNER JOIN entniche_wait_empower c on b.wait_empower_id=c.id
-where a.id = %d  `, p.param.LinkedOrderId))
+where a.id = %s  `, p.param.LinkedOrderId))
 			if data.IsEmpty() {
 				return errors.New("套餐id获取失败")
 			}
@@ -110,7 +110,7 @@ func (p jyBigProduct) BigMemberSub(ctx context.Context, orderData, userData map[
 		}
 	case "2":
 		var areaCount int
-		res, _ := g.DB().GetOne(ctx, fmt.Sprintf("SELECT c.end_time,c.start_time,c.province_count FROM jy_order_detail a LEFT JOIN entniche_order b on a.id = b.order_detail_id LEFT JOIN entniche_wait_empower c ON b.wait_empower_id = c.id WHERE a.id = %d", p.param.LinkedOrderId))
+		res, _ := g.DB().GetOne(ctx, fmt.Sprintf("SELECT c.end_time,c.start_time,c.province_count FROM jy_order_detail a LEFT JOIN entniche_order b on a.id = b.order_detail_id LEFT JOIN entniche_wait_empower c ON b.wait_empower_id = c.id WHERE a.id = %s", p.param.LinkedOrderId))
 		if !res.IsEmpty() {
 			bs, _ := time.ParseInLocation(date.Date_Full_Layout, common.ObjToString(res.Map()["start_time"]), time.Local)
 			be, _ := time.ParseInLocation(date.Date_Full_Layout, common.ObjToString(res.Map()["end_time"]), time.Local)

+ 7 - 3
internal/logic/product/bigmember/bigcommon.go

@@ -29,10 +29,14 @@ const (
 )
 
 // ExistProcessOrder 是否存在处理的订单
-func ExistProcessOrder(phone string) bool {
-	count, err := g.DB().Ctx(context.Background()).GetCount(context.Background(), fmt.Sprintf(`SELECT count(1) FROM dataexport_order a
+func ExistProcessOrder(phone, orderCode string) bool {
+	sql := fmt.Sprintf(`SELECT count(1) FROM dataexport_order a
 INNER JOIN jy_order_detail b on a.order_code = b.order_code 
-WHERE  a.phone = '%s' and b.is_service_open = 0 and b.product_type = '大会员'`, phone))
+WHERE  a.phone = '%s' and b.is_service_open = 0 and b.product_type = '大会员' `, phone)
+	if orderCode != "" {
+		sql += fmt.Sprintf(" and b.order_code != '%s'", orderCode)
+	}
+	count, err := g.DB().Ctx(context.Background()).GetCount(context.Background(), sql)
 	if err == nil {
 		log.Println("ExistProcessOrder err:", err.Error())
 	}

+ 44 - 7
internal/logic/product/bigmember/bigmember.go

@@ -2,6 +2,7 @@ package bigmember
 
 import (
 	"app.yhyue.com/moapp/jybase/common"
+	"app.yhyue.com/moapp/jybase/date"
 	"context"
 	"errors"
 	"fmt"
@@ -49,8 +50,9 @@ func NewBigProduct(reqParam map[string]interface{}, detailId ...int64) (product.
 }
 
 func (p jyBigProduct) Check(ctx context.Context, t int) error {
-	if p.param.ReqSubject == 1 {
-		if !ExistProcessOrder(p.param.Phone) { //校验是否存在未开通的权益
+	switch p.param.ReqSubject {
+	case 1:
+		if !ExistProcessOrder(p.param.Phone, p.param.OrderCode) { //校验是否存在未开通的权益
 			return errors.New("个人身份存在未生效的产品订单")
 		}
 		//个人身份购买情况是否已有权益
@@ -62,12 +64,47 @@ func (p jyBigProduct) Check(ctx context.Context, t int) error {
 				},
 			})
 			if ok && len(*userData) > 0 {
-				if gconv.Int((*userData)["i_member_status"]) > 0 {
-					return errors.New("用户已存在大会员权益")
-				}
-				if gconv.Int64((*userData)["i_member_status"]) > time.Now().Unix() {
+				nowTime := time.Now().Unix()
+				bigStart := common.Int64All((*userData)["i_member_starttime"])
+				bigEnd := common.Int64All((*userData)["i_member_endtime"])
+				subStatus := common.IntAll((*userData)["i_member_sub_status"])
+				memberStatus := common.IntAll((*userData)["i_member_status"])
+				mainId := common.ObjToString((*userData)["s_member_mainid"])
+				var status int
+				if nowTime < bigStart && nowTime < bigEnd {
 					return errors.New("用户存在待生效大会员权益")
 				}
+				if bigStart >= nowTime {
+					status = 1
+				} else if (nowTime < bigEnd && memberStatus > 0) || bigStart >= nowTime {
+					status = 1
+				}
+				if (subStatus == 0 && memberStatus < 0 && mainId != "") || (subStatus == 1 && memberStatus > 0 && mainId != "") {
+					return errors.New("该用户为子账号会员服务")
+				}
+				if memberStatus == 4 {
+					status = 2
+				}
+
+				if status > 0 {
+					return errors.New("用户已存在大会员权益")
+				}
+
+			}
+		}
+	case 2:
+		vipRes, _ := g.DB().Ctx(ctx).GetOne(ctx, fmt.Sprintf("SELECT ewe.* ,bc.id AS comoboId FROM entniche_info ei INNER JOIN entniche_wait_empower ewe ON ei.id = ewe.ent_id  LEFT JOIN bigmember_combo bc ON REPLACE(ewe.product_type,\"大会员\",\"\") = bc.s_name WHERE ei.NAME = '%s'  AND phone = '%s' ORDER BY ewe.create_time DESC LIMIT 1", p.param.ReqCompanyName, p.param.Phone))
+		if !vipRes.IsEmpty() {
+			start := common.ObjToString(vipRes.Map()["start_time"])
+			end := common.ObjToString(vipRes.Map()["end_time"])
+			starts, _ := time.ParseInLocation(date.Date_Full_Layout, start, time.Local)
+			ends, _ := time.ParseInLocation(date.Date_Full_Layout, end, time.Local)
+			bigStart := starts.Unix()
+			bigEnd := ends.Unix()
+			nowTime := time.Now().Unix()
+
+			if nowTime < bigEnd && nowTime < bigStart {
+				return errors.New("用户存在待生效大会员权益")
 			}
 		}
 	}
@@ -84,7 +121,7 @@ func (p jyBigProduct) Check(ctx context.Context, t int) error {
 		return errors.New("未知商品支付操作")
 	}
 
-	if (p.param.ServiceType == Renew || p.param.ServiceType == Upgrades) && p.param.LinkedOrderId <= 0 {
+	if (p.param.ServiceType == Renew || p.param.ServiceType == Upgrades) && p.param.LinkedOrderId != "" {
 		return errors.New("缺少关联订单")
 	}
 

+ 2 - 2
internal/logic/product/bigmember/price.go

@@ -82,7 +82,7 @@ func (p jyBigProduct) GetPrice() (price int64, err error) {
 		}
 
 	case 2: //续费
-		count, err := common2.GetLinkBigUserNumber(context.Background(), p.param.LinkedOrderId, gconv.Int64(p.param.ReqSubject), p.param.UserId)
+		count, err := common2.GetLinkBigUserNumber(context.Background(), gconv.Int64(p.param.LinkedOrderId), gconv.Int64(p.param.ReqSubject), p.param.UserId)
 		if err != nil {
 			return 0, fmt.Errorf("查询关联订单异常")
 		}
@@ -167,7 +167,7 @@ func (p jyBigProduct) GetPrice() (price int64, err error) {
 		}
 
 	case 3: //升级
-		count, err := common2.GetLinkBigUserNumber(context.Background(), p.param.LinkedOrderId, gconv.Int64(p.param.ReqSubject), p.param.UserId)
+		count, err := common2.GetLinkBigUserNumber(context.Background(), gconv.Int64(p.param.LinkedOrderId), gconv.Int64(p.param.ReqSubject), p.param.UserId)
 		if err != nil {
 			return 0, fmt.Errorf("查询关联订单异常")
 		}

+ 2 - 2
internal/logic/product/common.go

@@ -44,11 +44,11 @@ func GetLinkVipCycleFilter(ctx context.Context, linkOrderDetailId int64) (filter
 }
 
 // GetLinkBigCycleFilter 获取关联订单
-func GetLinkBigCycleFilter(ctx context.Context, linkOrderDetailId int64) (filter *model.JyBigProductFilter, st, et time.Time, err error) {
+func GetLinkBigCycleFilter(ctx context.Context, linkOrderDetailId string) (filter *model.JyBigProductFilter, st, et time.Time, err error) {
 	var (
 		re gdb.Record
 	)
-	re, err = g.DB().GetOne(ctx, "SELECT filter,service_starttime,service_endtime FROM jy_order_detail WHERE id =?", linkOrderDetailId)
+	re, err = g.DB().GetOne(ctx, fmt.Sprintf(`"SELECT filter,service_starttime,service_endtime FROM jy_order_detail WHERE id =%s"`, linkOrderDetailId))
 	if err != nil {
 		return
 	}

+ 36 - 15
internal/logic/user/getService.go

@@ -37,24 +37,24 @@ func GetUserService(ctx context.Context, param model.UserServiceParams) (interfa
 			}
 			if userData != nil && len(*userData) > 0 {
 				userId := mongodb.BsonIdToSId((*userData)["_id"])
-				sqlStr := fmt.Sprintf(`SELECT  b.* FROM jy_order_detail 
-WHERE status = 1 and is_service_open = 0 and user_id = '%s' and product_type like '%s'  AND service_endtime < '%s'`, userId, common.If(param.ProductType == "VIP订阅", "%VIP订阅%", "%大会员%"), time.Now().Format(date.Date_Full_Layout))
-				if param.OrderCode != "" {
-					sqlStr += fmt.Sprintf(" AND order_code != '%s'", param.OrderCode)
-				}
-				//检验订单是否可以进行传创建
-				order, _ := g.DB().Query(ctx, sqlStr)
-				if !order.IsEmpty() && order.Len() > 0 {
-					return map[string]interface{}{
-						"willEffect":    true,
-						"userData":      userData,
-						"serviceArrMap": nil,
-					}, nil
-				}
-
 				if param.ProductType != "大会员" && param.ProductType != "VIP订阅" {
 					serviceArrMap = SpecialService(ctx, userId, param.ProductType)
 				} else {
+					sqlStr := fmt.Sprintf(`SELECT  b.* FROM jy_order_detail 
+WHERE status = 1 and is_service_open = 0 and user_id = '%s' and product_type like '%s'  AND service_endtime < '%s'`, userId, common.If(param.ProductType == "VIP订阅", "%VIP订阅%", "%大会员%"), time.Now().Format(date.Date_Full_Layout))
+					if param.OrderCode != "" {
+						sqlStr += fmt.Sprintf(" AND order_code != '%s'", param.OrderCode)
+					}
+					//检验订单是否可以进行传创建
+					order, _ := g.DB().Query(ctx, sqlStr)
+					if !order.IsEmpty() && order.Len() > 0 {
+						return map[string]interface{}{
+							"willEffect":    true,
+							"userData":      userData,
+							"serviceArrMap": nil,
+						}, nil
+					}
+
 					var (
 						serviceList                    []int
 						endTime, startTime             string
@@ -183,6 +183,26 @@ WHERE a.status = 1 %s and a.user_id = '%s' and a.product_type like '%s' ORDER BY
 				return nil, errors.New("企业名称获取异常")
 			}
 			//获取企业信息
+			if param.ProductType == "大会员" {
+				vipRes1, _ := g.DB().Ctx(ctx).GetOne(ctx, fmt.Sprintf("SELECT ewe.* ,bc.id AS comoboId FROM entniche_info ei INNER JOIN entniche_wait_empower ewe ON ei.id = ewe.ent_id  LEFT JOIN bigmember_combo bc ON REPLACE(ewe.product_type,\"大会员\",\"\") = bc.s_name WHERE ei.NAME = '%s'  AND phone = '%s' ORDER BY ewe.create_time DESC LIMIT 1", param.EntName, param.Phone))
+				if !vipRes1.IsEmpty() {
+					start := common.ObjToString(vipRes1.Map()["start_time"])
+					end := common.ObjToString(vipRes1.Map()["end_time"])
+					starts, _ := time.ParseInLocation(date.Date_Full_Layout, start, time.Local)
+					ends, _ := time.ParseInLocation(date.Date_Full_Layout, end, time.Local)
+					bigStart := starts.Unix()
+					bigEnd := ends.Unix()
+					nowTime := time.Now().Unix()
+					if nowTime < bigEnd && nowTime < bigStart {
+						return map[string]interface{}{
+							"willEffect":    true,
+							"userData":      userData,
+							"serviceArrMap": nil,
+						}, nil
+					}
+				}
+			}
+
 			vipRes, _ := g.DB().GetOne(ctx, fmt.Sprintf(`SELECT a.id,b.id as entUserId FROM entniche_info a
 inner JOIN entniche_user b on a.id = b.ent_id
 WHERE b.phone = '%s' and a.name = '%s'`, param.Phone, param.EntName))
@@ -190,6 +210,7 @@ WHERE b.phone = '%s' and a.name = '%s'`, param.Phone, param.EntName))
 				if param.ProductType != "大会员" && param.ProductType != "VIP订阅" {
 					serviceArrMap = SpecialService(ctx, gconv.String(vipRes.Map()["entUserId"]), param.ProductType)
 				} else {
+
 					entID := gconv.String(vipRes.Map()["id"])
 					var whereEntTime string
 					if param.ServiceType != 1 && param.ServiceType != 4 {

+ 59 - 0
internal/logic/user/personService.go

@@ -0,0 +1,59 @@
+package user
+
+import (
+	"app.yhyue.com/moapp/jybase/common"
+	"context"
+	"fmt"
+	"github.com/gogf/gf/v2/frame/g"
+	"github.com/gogf/gf/v2/util/gconv"
+	"jyOrderManager/internal/jyutil"
+	"jyOrderManager/internal/logic/product"
+	"jyOrderManager/internal/model"
+)
+
+func OrderUserChangePhone(ctx context.Context, param model.UserServiceParams) (interface{}, error) {
+	buySubject, _ := g.DB().GetCount(ctx, fmt.Sprintf(`SELECT count(1) FROM dataexport_order WHERE order_code = '%s' and buy_subject =1`, param.OrderCode))
+	if buySubject == 0 {
+		return nil, nil
+	}
+
+	userData, _ := jyutil.MG.DB().FindOne("user", map[string]interface{}{
+		"$or": []map[string]interface{}{
+			{"s_phone": param.Phone},
+			{"s_m_phone": param.Phone},
+		},
+	})
+	if userData == nil || len(*userData) == 0 {
+		return nil, nil
+	}
+
+	order, _ := g.DB().Query(ctx, fmt.Sprintf(`SELECT  * FROM jy_order_detail WHERE  order_code = '%s'  `, param.OrderCode))
+	if order.IsEmpty() {
+		return nil, nil
+	}
+	for _, tParam := range order.List() {
+		//参数注入
+		tParam["phone"] = param.Phone          //开通手机号
+		tParam["order_code"] = param.OrderCode //订单号
+		tParam["reqSubject"] = 1               //购买主体
+		productCode := gconv.String(tParam["product_code"])
+		pFunc, pErr := product.JyProFunc.GetProductInitFuncByCode(productCode)
+		if pErr != nil {
+			return nil, pErr
+		}
+		pObj, pErr := pFunc(tParam)
+		if pErr != nil {
+			return nil, pErr
+		}
+
+		var (
+			actCode   = gconv.String(tParam["activityCode"]) //活动code
+			checkCode = common.If(actCode != "", 2, 1).(int) //1:普通商品 2:活动商品
+		)
+
+		if err := pObj.Check(ctx, checkCode); err != nil {
+			return nil, err
+		}
+	}
+	return nil, nil
+}

+ 1 - 1
internal/model/jyProductDetail.go

@@ -9,7 +9,7 @@ type (
 		//IsServiceOpen     string    `json:"is_service_open"`                                   //是否开通
 		UserId            string    `json:"userId,omitempty"`                                  //userid
 		ServiceType       int       `form:"serviceType" json:"serviceType,omitempty"`          //付费类型 1:购买 2:续费 3:升级 4:试用
-		LinkedOrderId     int64     `json:"linkedOrderId,omitempty"`                           //关联订单明细id
+		LinkedOrderId     string    `json:"linkedOrderId,omitempty"`                           //关联订单明细id
 		PaybackOpenServer bool      `json:"paybackOpenServer,omitempty"`                       //是否全额回款开通
 		ServiceOpenTime   time.Time `json:"service_open_time" gorm:"column:service_open_time"` // 服务开通时间
 

+ 1 - 1
internal/model/orderParams.go

@@ -220,7 +220,7 @@ type (
 	OrderGetWorkDayParams struct {
 		InputTime  string    `json:"inputTime"`  //开始时间
 		WorkDayNum int       `json:"workDayNum"` //工作日
-		Start      time.Time `json:"start"`      //实付金额
+		Start      time.Time `json:"start"`
 		End        time.Time `json:"end"`
 	}
 )