2637309949 4 лет назад
Родитель
Сommit
2caddcb03f

+ 2 - 2
i2bill.api

@@ -103,6 +103,7 @@ type punchClockRequest {
 }
 
 type enrollRequest {
+	Scene       string `json:"scene"`
 	Name        string `json:"name"`
 	Sex         int64  `json:"sex"`
 	IponeNumber string `json:"ipone_number"`
@@ -144,7 +145,7 @@ service i2bill-api {
 	
 	@handler PunchClock
 	post /api/user/punchClock(punchClockRequest) returns(Response)
-
+	
 }
 
 // 兼职模块
@@ -160,7 +161,6 @@ service i2bill-api {
 	post /api/v1/part_time_user/update (partTimeUserAddRequest) returns(Response)
 }
 
-
 // 收单模块
 @server(
 	jwt: JwtAuth

+ 8 - 0
internal/handler/acquirer/enrollhandler.go

@@ -6,12 +6,18 @@ import (
 	"git.i2edu.net/i2/i2-bill-api/internal/logic/acquirer"
 	"git.i2edu.net/i2/i2-bill-api/internal/svc"
 	"git.i2edu.net/i2/i2-bill-api/internal/types"
+	"git.i2edu.net/i2/i2-bill-api/internal/utils"
 
 	"git.i2edu.net/i2/go-zero/rest/httpx"
 )
 
 func EnrollHandler(ctx *svc.ServiceContext) http.HandlerFunc {
 	return func(w http.ResponseWriter, r *http.Request) {
+		uid, skey, err := ctx.GetClaims(r)
+		if err != nil {
+			httpx.OkJson(w, utils.ReturnHTTPFail(err))
+			return
+		}
 		var req types.EnrollRequest
 		if err := httpx.Parse(r, &req); err != nil {
 			httpx.Error(w, err)
@@ -19,6 +25,8 @@ func EnrollHandler(ctx *svc.ServiceContext) http.HandlerFunc {
 		}
 
 		l := acquirer.NewEnrollLogic(r.Context(), ctx)
+		l.UserId = uid
+		l.SessionKey = skey
 		resp, err := l.Enroll(req)
 		if err != nil {
 			httpx.Error(w, err)

+ 6 - 0
internal/handler/routes.go

@@ -51,6 +51,12 @@ func RegisterHandlers(engine *rest.Server, serverCtx *svc.ServiceContext) {
 				Path:    "/api/user/punchClock",
 				Handler: user.PunchClockHandler(serverCtx),
 			},
+		},
+		rest.WithJwt(serverCtx.Config.JwtAuth.AccessSecret),
+	)
+
+	engine.AddRoutes(
+		[]rest.Route{
 			{
 				Method:  http.MethodPost,
 				Path:    "/api/v1/part_time_user/add",

+ 28 - 4
internal/logic/acquirer/enrolllogic.go

@@ -2,17 +2,24 @@ package acquirer
 
 import (
 	"context"
+	"database/sql"
+	"fmt"
+	"time"
 
 	"git.i2edu.net/i2/i2-bill-api/internal/svc"
 	"git.i2edu.net/i2/i2-bill-api/internal/types"
+	"git.i2edu.net/i2/i2-bill-api/model"
 
 	"git.i2edu.net/i2/go-zero/core/logx"
+	"git.i2edu.net/i2/go-zero/core/stores/sqlc"
 )
 
 type EnrollLogic struct {
 	logx.Logger
-	ctx    context.Context
-	svcCtx *svc.ServiceContext
+	ctx        context.Context
+	svcCtx     *svc.ServiceContext
+	UserId     int64
+	SessionKey string
 }
 
 func NewEnrollLogic(ctx context.Context, svcCtx *svc.ServiceContext) EnrollLogic {
@@ -24,7 +31,24 @@ func NewEnrollLogic(ctx context.Context, svcCtx *svc.ServiceContext) EnrollLogic
 }
 
 func (l *EnrollLogic) Enroll(req types.EnrollRequest) (*types.Response, error) {
-	// todo: add your logic here and delete this line
-
+	var stu model.I2billAcquirerStudent
+	var qrScence struct {
+		UserId    int64     `json:"userId"`
+		Timestamp time.Time `json:"timestamp"`
+		Type      string    `json:"type"`
+	}
+	err := l.svcCtx.Wechat.GetQrParams(svc.QrcodeJzPrefix, req.Scene, &qrScence)
+	if err != nil {
+		return &types.Response{Code: 500, Msg: err.Error(), Data: nil}, nil
+	}
+	err = l.svcCtx.SqlConn.QueryRowPartial(&stu, fmt.Sprintf("select %s from i2bill_acquirer_student where `user_id`=? and `stu_phone`=? limit 1", model.I2billAcquirerStudentRows), qrScence.UserId, req.IponeNumber)
+	if err != sqlc.ErrNotFound && err != nil {
+		return &types.Response{Code: 500, Msg: err.Error(), Data: nil}, nil
+	} else if stu.Id > 0 {
+		return &types.Response{Code: 500, Msg: "已录入成功, 请勿重复操作", Data: nil}, nil
+	} else {
+		stu.UserId = sql.NullInt64{Int64: qrScence.UserId, Valid: true}
+		stu.StuPhone = sql.NullString{String: req.IponeNumber, Valid: true}
+	}
 	return &types.Response{}, nil
 }

+ 1 - 3
internal/logic/user/jzqrcodelogic.go

@@ -18,8 +18,6 @@ type JzQrCodeLogic struct {
 	SessionKey string
 }
 
-var qrcodeJzPrefix = "qrcode:jz:%v"
-
 func NewJzQrCodeLogic(ctx context.Context, svcCtx *svc.ServiceContext) JzQrCodeLogic {
 	return JzQrCodeLogic{
 		Logger: logx.WithContext(ctx),
@@ -29,7 +27,7 @@ func NewJzQrCodeLogic(ctx context.Context, svcCtx *svc.ServiceContext) JzQrCodeL
 }
 
 func (l *JzQrCodeLogic) JzQrCode() (*types.JzQrcodeResponse, error) {
-	uid, err := l.svcCtx.Wechat.GenUserQrId(qrcodeJzPrefix, l.UserId, map[string]interface{}{
+	uid, err := l.svcCtx.Wechat.GenUserQrId(svc.QrcodeJzPrefix, l.UserId, map[string]interface{}{
 		"userId":    l.UserId,
 		"timestamp": time.Now().Unix(),
 		"type":      "JzQrCode",

+ 3 - 0
internal/svc/vars.go

@@ -0,0 +1,3 @@
+package svc
+
+var QrcodeJzPrefix = "qrcode:jz:%v"

+ 1 - 0
internal/types/types.go

@@ -96,6 +96,7 @@ type PunchClockRequest struct {
 }
 
 type EnrollRequest struct {
+	Scene       string `json:"scene"`
 	Name        string `json:"name"`
 	Sex         int64  `json:"sex"`
 	IponeNumber string `json:"ipone_number"`

+ 114 - 0
model/i2billacquirerstudentmodel.go

@@ -0,0 +1,114 @@
+package model
+
+import (
+	"database/sql"
+	"fmt"
+	"strings"
+
+	"git.i2edu.net/i2/go-zero/core/stores/cache"
+	"git.i2edu.net/i2/go-zero/core/stores/sqlc"
+	"git.i2edu.net/i2/go-zero/core/stores/sqlx"
+	"git.i2edu.net/i2/go-zero/core/stringx"
+	"git.i2edu.net/i2/go-zero/tools/goctl/model/sql/builderx"
+)
+
+var (
+	I2billAcquirerStudentFieldNames          = builderx.RawFieldNames(&I2billAcquirerStudent{})
+	I2billAcquirerStudentRows                = strings.Join(I2billAcquirerStudentFieldNames, ",")
+	I2billAcquirerStudentRowsExpectAutoSet   = strings.Join(stringx.Remove(I2billAcquirerStudentFieldNames, "`create_time`", "`update_time`"), ",")
+	I2billAcquirerStudentRowsWithPlaceHolder = strings.Join(stringx.Remove(I2billAcquirerStudentFieldNames, "`id`", "`create_time`", "`update_time`"), "=?,") + "=?"
+
+	cacheI2billAcquirerStudentIdPrefix = "cache:i2billAcquirerStudent:id:"
+)
+
+type (
+	I2billAcquirerStudentModel interface {
+		Insert(data I2billAcquirerStudent) (sql.Result, error)
+		FindOne(id int64) (*I2billAcquirerStudent, error)
+		Update(data I2billAcquirerStudent) error
+		Delete(id int64) error
+	}
+
+	defaultI2billAcquirerStudentModel struct {
+		sqlc.CachedConn
+		table string
+	}
+
+	I2billAcquirerStudent struct {
+		StuPhone        sql.NullString `db:"stu_phone"` // 联系方式
+		SchId           sql.NullInt64  `db:"sch_id"`    // 意向校区
+		DelFlag         sql.NullString `db:"del_flag"`
+		CheckState      sql.NullInt64  `db:"check_state"`     // 收单宝状态
+		UserId          sql.NullInt64  `db:"user_id"`         // 收单宝用户id
+		StuLinkPerson   sql.NullString `db:"stu_link_person"` // 联系人
+		CheckTime       sql.NullTime   `db:"check_time"`      // 审核日期
+		CheckBy         sql.NullString `db:"check_by"`        // 审核人
+		AgeGroup        string         `db:"age_group"`       // 学员年龄
+		Address         sql.NullString `db:"address"`         // 当前位置
+		CreateTime      sql.NullTime   `db:"create_time"`
+		Id              int64          `db:"id"` // 主键
+		PartTimeUserId  sql.NullInt64  `db:"part_time_user_id"`
+		NetworkDetailId sql.NullString `db:"network_detail_id"` // 渠道
+		MkId            sql.NullString `db:"mk_id"`             // 所属mk erp id
+		StuName         sql.NullString `db:"stu_name"`          // 学员名称
+	}
+)
+
+func NewI2billAcquirerStudentModel(conn sqlx.SqlConn, c cache.CacheConf) I2billAcquirerStudentModel {
+	return &defaultI2billAcquirerStudentModel{
+		CachedConn: sqlc.NewConn(conn, c),
+		table:      "`i2bill_acquirer_student`",
+	}
+}
+
+func (m *defaultI2billAcquirerStudentModel) Insert(data I2billAcquirerStudent) (sql.Result, error) {
+	query := fmt.Sprintf("insert into %s (%s) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", m.table, I2billAcquirerStudentRowsExpectAutoSet)
+	ret, err := m.ExecNoCache(query, data.StuPhone, data.SchId, data.DelFlag, data.CheckState, data.UserId, data.StuLinkPerson, data.CheckTime, data.CheckBy, data.AgeGroup, data.Address, data.Id, data.PartTimeUserId, data.NetworkDetailId, data.MkId, data.StuName)
+
+	return ret, err
+}
+
+func (m *defaultI2billAcquirerStudentModel) FindOne(id int64) (*I2billAcquirerStudent, error) {
+	i2billAcquirerStudentIdKey := fmt.Sprintf("%s%v", cacheI2billAcquirerStudentIdPrefix, id)
+	var resp I2billAcquirerStudent
+	err := m.QueryRow(&resp, i2billAcquirerStudentIdKey, func(conn sqlx.SqlConn, v interface{}) error {
+		query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", I2billAcquirerStudentRows, m.table)
+		return conn.QueryRow(v, query, id)
+	})
+	switch err {
+	case nil:
+		return &resp, nil
+	case sqlc.ErrNotFound:
+		return nil, ErrNotFound
+	default:
+		return nil, err
+	}
+}
+
+func (m *defaultI2billAcquirerStudentModel) Update(data I2billAcquirerStudent) error {
+	i2billAcquirerStudentIdKey := fmt.Sprintf("%s%v", cacheI2billAcquirerStudentIdPrefix, data.Id)
+	_, err := m.Exec(func(conn sqlx.SqlConn) (result sql.Result, err error) {
+		query := fmt.Sprintf("update %s set %s where `id` = ?", m.table, I2billAcquirerStudentRowsWithPlaceHolder)
+		return conn.Exec(query, data.StuPhone, data.SchId, data.DelFlag, data.CheckState, data.UserId, data.StuLinkPerson, data.CheckTime, data.CheckBy, data.AgeGroup, data.Address, data.PartTimeUserId, data.NetworkDetailId, data.MkId, data.StuName, data.Id)
+	}, i2billAcquirerStudentIdKey)
+	return err
+}
+
+func (m *defaultI2billAcquirerStudentModel) Delete(id int64) error {
+
+	i2billAcquirerStudentIdKey := fmt.Sprintf("%s%v", cacheI2billAcquirerStudentIdPrefix, id)
+	_, err := m.Exec(func(conn sqlx.SqlConn) (result sql.Result, err error) {
+		query := fmt.Sprintf("delete from %s where `id` = ?", m.table)
+		return conn.Exec(query, id)
+	}, i2billAcquirerStudentIdKey)
+	return err
+}
+
+func (m *defaultI2billAcquirerStudentModel) formatPrimary(primary interface{}) string {
+	return fmt.Sprintf("%s%v", cacheI2billAcquirerStudentIdPrefix, primary)
+}
+
+func (m *defaultI2billAcquirerStudentModel) queryPrimary(conn sqlx.SqlConn, v, primary interface{}) error {
+	query := fmt.Sprintf("select %s from %s where `id` = ? limit 1", I2billAcquirerStudentRows, m.table)
+	return conn.QueryRow(v, query, primary)
+}