feat: sale info

This commit is contained in:
zzw
2026-08-28 15:05:44 +08:00
parent 8bdd25dcb5
commit eb887198e9
14 changed files with 762 additions and 92 deletions
+28
View File
@@ -66,6 +66,34 @@ func maskSaleMobile(info *dao.SaleInfo) {
info.Mobile = utils.DecryptPhoneReplace(mobile)
}
// querySaleInfo 查询销售详情并附带分组;mobile 脱敏,origin_mobile 为加密串。
// 未找到时返回 (nil, nil)。
func querySaleInfo(id int64) (*dao.SaleInfo, error) {
var info dao.SaleInfo
if err := (model.SaleModel{}.Init().GetOne(modelbase.Params{
Eq: map[string]string{"id": strconv.FormatInt(id, 10)},
}, &info)); err != nil {
return nil, err
}
if info.Id < utils.NumberOne {
return nil, nil
}
maskSaleMobile(&info)
if info.GroupId > utils.NumberZero {
var group dao.SaleGroupNameItem
if err := (model.SaleGroupModel{}.Init().GetOne(modelbase.Params{
Eq: map[string]string{"id": strconv.FormatInt(info.GroupId, 10)},
}, &group)); err != nil {
return nil, err
}
if group.Id > utils.NumberZero {
info.Group = &group
}
}
return &info, nil
}
func maskSaleNameItems(items []dao.SaleNameItem) {
for i := range items {
mobile, err := utils.DecryptPhone(items[i].Mobile)
@@ -0,0 +1,91 @@
package logic
import (
"context"
"lone-services/pkg/utils"
"lone-services/pkg/validate"
sale "lone-services/rpc/sale/pb"
"lone-services/services/sale/internal/dao"
"lone-services/services/sale/internal/svc"
"lone-services/services/sale/validator"
"github.com/zeromicro/go-zero/core/logx"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
type InfoInternalLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewInfoInternalLogic(ctx context.Context, svcCtx *svc.ServiceContext) *InfoInternalLogic {
return &InfoInternalLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *InfoInternalLogic) InfoInternal(in *sale.InfoReq) (*sale.InfoData, error) {
var req validator.InfoValidator
if msg := validate.ValidateFromProto(in, &req); msg != utils.StringEmpty {
return nil, status.Error(codes.InvalidArgument, msg)
}
info, err := querySaleInfo(req.Id)
if err != nil {
l.Errorf("sale InfoInternal: %v", err)
return nil, status.Error(codes.Internal, utils.Fail.Msg)
}
if info == nil {
return nil, status.Error(codes.NotFound, utils.ErrorNotFund.Msg)
}
return toSaleInfoData(info), nil
}
func toSaleInfoData(info *dao.SaleInfo) *sale.InfoData {
data := &sale.InfoData{
Id: info.Id,
SaleId: info.SaleId,
Mobile: info.Mobile,
OriginMobile: info.OriginMobile,
Name: info.Name,
IdCardFront: info.IdCardFront,
IdCardBack: info.IdCardBack,
BusinessLicense: info.BusinessLicense,
Region: &sale.Region{
Province: info.Region.Province,
City: info.Region.City,
District: info.Region.District,
},
ProvinceId: info.ProvinceId,
CityId: info.CityId,
DistrictId: info.DistrictId,
TerritoryId: info.TerritoryId,
TerritoryName: info.TerritoryName,
GroupId: info.GroupId,
Address: info.Address,
Status: uint32(info.Status),
Avatar: info.Avatar,
Account: info.Account,
Type: uint32(info.Type),
Sex: uint32(info.Sex),
BirthDate: info.BirthDate,
Reason: info.Reason,
AdminId: info.AdminId,
AdminName: info.AdminName,
CreateTime: info.CreateTime.String(),
UpdateTime: info.UpdateTime.String(),
}
if info.Group != nil {
data.Group = &sale.GroupItem{
Id: info.Group.Id,
Name: info.Group.Name,
}
}
return data
}
+3 -10
View File
@@ -2,14 +2,10 @@ package logic
import (
"context"
"strconv"
"lone-services/pkg/modelbase"
"lone-services/pkg/utils"
"lone-services/pkg/validate"
sale "lone-services/rpc/sale/pb"
"lone-services/services/sale/internal/dao"
"lone-services/services/sale/internal/model"
"lone-services/services/sale/internal/svc"
"lone-services/services/sale/validator"
@@ -36,16 +32,13 @@ func (l *InfoLogic) Info(in *sale.InfoReq) (*sale.Response, error) {
return outResponse(utils.ErrorParams, msg), nil
}
var info dao.SaleInfo
if err := (model.SaleModel{}.Init().GetOne(modelbase.Params{
Eq: map[string]string{"id": strconv.FormatInt(req.Id, 10)},
}, &info)); err != nil {
info, err := querySaleInfo(req.Id)
if err != nil {
l.Errorf("sale info: %v", err)
return failResponse(utils.Fail), nil
}
if info.Id < utils.NumberOne {
if info == nil {
return failResponse(utils.ErrorNotFund), nil
}
maskSaleMobile(&info)
return okResponse(info), nil
}