fix: internal user
CI / changes (push) Successful in 40s
CI / ad (push) Successful in 0s
CI / admin (push) Successful in 0s
CI / bff (push) Successful in 24s
CI / chore (push) Successful in 23s
CI / equipment (push) Successful in 1s
CI / express (push) Successful in 0s
CI / factory (push) Successful in 0s
CI / payment (push) Successful in 1s
CI / product (push) Successful in 0s
CI / record (push) Successful in 0s
CI / sale (push) Successful in 23s
CI / task (push) Successful in 0s
CI / user (push) Successful in 24s
CI / wecom (push) Successful in 0s

This commit is contained in:
zzw
2026-09-16 15:19:54 +08:00
parent e334bf0f66
commit 052425970a
15 changed files with 259 additions and 97 deletions
+49 -10
View File
@@ -14,6 +14,8 @@ import (
"lone-services/services/sale/validator"
"github.com/zeromicro/go-zero/core/logx"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
type CreateLogic struct {
@@ -44,24 +46,29 @@ func (l *CreateLogic) Create(in *sale.CreateReq) (*sale.Response, error) {
return failResponse(utils.ErrorNoLoginInfo), nil
}
identity, idErr := ensureSaleIdentity(l.ctx, l.svcCtx.UserSvcName, req.Mobile, req.Password)
if idErr != nil {
l.Errorf("sale ensure identity: %v", idErr)
if msg, ok := userRPCError(idErr); ok {
if err := checkSaleIdentityCreatable(l.ctx, l.svcCtx.UserSvcName, req.Mobile); err != nil {
l.Errorf("sale check identity: %v", err)
if st, ok := status.FromError(err); ok && st.Code() == codes.AlreadyExists {
return failResponse(utils.ErrorDataIsExist), nil
}
if msg, ok := userRPCError(err); ok {
return outResponse(utils.Fail, msg), nil
}
return failResponse(utils.Fail), nil
}
if identity.GetUserId() < utils.NumberOne || identity.GetMobile() == utils.StringEmpty {
return failResponse(utils.Fail), nil
encryptMobile, encErr := utils.EncryptPhone(req.Mobile)
if encErr != nil {
l.Errorf("sale create encrypt mobile: %v", encErr)
return failResponse(utils.ErrorEncryptAesError), nil
}
m := model.SaleModel{}.Init()
var existing dao.SaleStatusUpdate
if err := m.GetOne(modelbase.Params{
Eq: map[string]string{"user_id": strconv.FormatInt(identity.GetUserId(), utils.NumberTen)},
Eq: map[string]string{"mobile": encryptMobile},
}, &existing); err != nil {
l.Errorf("sale create check user_id: %v", err)
l.Errorf("sale create check mobile: %v", err)
return failResponse(utils.Fail), nil
}
if existing.Id > utils.NumberZero {
@@ -96,9 +103,9 @@ func (l *CreateLogic) Create(in *sale.CreateReq) (*sale.Response, error) {
}
data := dao.SaleCreate{
UserId: identity.GetUserId(),
UserId: utils.NumberZero,
SaleId: req.SaleId,
Mobile: identity.GetMobile(),
Mobile: encryptMobile,
Name: req.Name,
IdCardFront: req.IdCardFront,
IdCardBack: req.IdCardBack,
@@ -124,5 +131,37 @@ func (l *CreateLogic) Create(in *sale.CreateReq) (*sale.Response, error) {
return failResponse(utils.Fail), nil
}
identity, idErr := ensureSaleIdentity(l.ctx, l.svcCtx.UserSvcName, req.Mobile, req.Password, data.Id)
if idErr != nil {
l.Errorf("sale ensure identity: %v", idErr)
if _, delErr := m.Del(modelbase.Params{
Eq: map[string]string{"id": strconv.FormatInt(data.Id, utils.NumberTen)},
}, &dao.SaleCreate{}); delErr != nil {
l.Errorf("sale rollback after identity fail: %v", delErr)
}
if msg, ok := userRPCError(idErr); ok {
return outResponse(utils.Fail, msg), nil
}
return failResponse(utils.Fail), nil
}
if identity.GetUserId() < utils.NumberOne || identity.GetMobile() == utils.StringEmpty {
if _, delErr := m.Del(modelbase.Params{
Eq: map[string]string{"id": strconv.FormatInt(data.Id, utils.NumberTen)},
}, &dao.SaleCreate{}); delErr != nil {
l.Errorf("sale rollback after empty identity: %v", delErr)
}
return failResponse(utils.Fail), nil
}
if _, err := m.Edit(modelbase.Params{
Eq: map[string]string{"id": strconv.FormatInt(data.Id, utils.NumberTen)},
}, map[string]interface{}{
"user_id": identity.GetUserId(),
"mobile": identity.GetMobile(),
}); err != nil {
l.Errorf("sale bind user_id: %v", err)
return failResponse(utils.Fail), nil
}
return okResponse(nil), nil
}
+21 -2
View File
@@ -7,12 +7,30 @@ import (
"lone-services/pkg/utils"
userpb "lone-services/rpc/user/pb"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
const saleClientCode = "sale_beauty"
func ensureSaleIdentity(ctx context.Context, userSvcName, mobile, password string) (*userpb.InternalCreateData, error) {
func checkSaleIdentityCreatable(ctx context.Context, userSvcName, mobile string) error {
cli, err := rpcclient.Get(userSvcName)
if err != nil {
return err
}
res, err := userpb.NewUserClient(cli.Conn()).InternalCheckCreate(ctx, &userpb.InternalCheckCreateReq{
Mobile: mobile,
})
if err != nil {
return err
}
if res == nil || !res.GetResult() {
return status.Error(codes.AlreadyExists, utils.ErrorDataIsExist.Msg)
}
return nil
}
func ensureSaleIdentity(ctx context.Context, userSvcName, mobile, password string, bizId int64) (*userpb.InternalCreateData, error) {
cli, err := rpcclient.Get(userSvcName)
if err != nil {
return nil, err
@@ -22,6 +40,7 @@ func ensureSaleIdentity(ctx context.Context, userSvcName, mobile, password strin
ClientCode: []string{saleClientCode},
CredentialType: []string{"password"},
Secret: password,
BizId: bizId,
})
}
@@ -48,7 +67,7 @@ func revokeSaleUserClient(ctx context.Context, userSvcName string, userId int64)
}
func reopenSaleUserClient(ctx context.Context, userSvcName, mobile string) (*userpb.InternalCreateData, error) {
return ensureSaleIdentity(ctx, userSvcName, mobile, utils.StringEmpty)
return ensureSaleIdentity(ctx, userSvcName, mobile, utils.StringEmpty, utils.NumberZero)
}
func userRPCError(err error) (string, bool) {