change layout
This commit is contained in:
@@ -0,0 +1,197 @@
|
||||
package logic
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"lone-services/pkg/log"
|
||||
"lone-services/pkg/modelbase"
|
||||
"lone-services/pkg/utils"
|
||||
"lone-services/pkg/validate"
|
||||
product "lone-services/rpc/product/pb"
|
||||
"lone-services/services/product/internal/dao"
|
||||
"lone-services/services/product/internal/model"
|
||||
"lone-services/services/product/internal/svc"
|
||||
"lone-services/services/product/internal/wecom"
|
||||
"lone-services/services/product/validator"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
jsoniter "github.com/json-iterator/go"
|
||||
|
||||
"github.com/zeromicro/go-zero/core/logx"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type VerifyStatusLogic struct {
|
||||
ctx context.Context
|
||||
svcCtx *svc.ServiceContext
|
||||
logx.Logger
|
||||
}
|
||||
|
||||
func NewVerifyStatusLogic(ctx context.Context, svcCtx *svc.ServiceContext) *VerifyStatusLogic {
|
||||
return &VerifyStatusLogic{
|
||||
ctx: ctx,
|
||||
svcCtx: svcCtx,
|
||||
Logger: logx.WithContext(ctx),
|
||||
}
|
||||
}
|
||||
|
||||
func (l *VerifyStatusLogic) VerifyFirst(in *product.VerifyStatusReq) (*product.Response, error) {
|
||||
return l.verifyStatus(dao.VerifyStatusChecking, in)
|
||||
}
|
||||
|
||||
func (l *VerifyStatusLogic) VerifySecond(in *product.VerifyStatusReq) (*product.Response, error) {
|
||||
return l.verifyStatus(dao.VerifyStatusSecond, in)
|
||||
}
|
||||
|
||||
func (l *VerifyStatusLogic) verifyStatus(expectStatus uint8, in *product.VerifyStatusReq) (*product.Response, error) {
|
||||
var req validator.ProductVerifyStatusValidator
|
||||
if msg := validate.ValidateFromProto(in, &req); msg != utils.StringEmpty {
|
||||
return outResponse(utils.ErrorParams, msg), nil
|
||||
}
|
||||
|
||||
if req.Status == uint32(dao.VerifyActionReject) && len(req.Reason) < 1 {
|
||||
return failResponse(utils.ErrorReasonParams), nil
|
||||
}
|
||||
|
||||
var info dao.VerifyStatusRow
|
||||
w := modelbase.Params{
|
||||
Eq: map[string]string{
|
||||
"id": strconv.FormatInt(req.Id, 10),
|
||||
"verify_status": strconv.Itoa(int(expectStatus)),
|
||||
},
|
||||
}
|
||||
err := model.VerifyModel{}.Init().GetOne(w, &info)
|
||||
if err != nil {
|
||||
log.Errorf("verify status get: %v", err)
|
||||
return failResponse(utils.Fail), nil
|
||||
}
|
||||
if info.Id < 1 {
|
||||
return failResponse(utils.ErrorNotFund), nil
|
||||
}
|
||||
|
||||
adminInfo := utils.GetUserFromCtx(l.ctx)
|
||||
if adminInfo.ID < utils.NumberOne {
|
||||
return failResponse(utils.ErrorNoLoginInfo), nil
|
||||
}
|
||||
adminId := int(adminInfo.ID)
|
||||
adminName := adminInfo.Name
|
||||
|
||||
nextStatus := dao.VerifyStatusPass
|
||||
reason := req.Reason
|
||||
if req.Status == uint32(dao.VerifyActionReject) {
|
||||
nextStatus = dao.VerifyStatusRefuse
|
||||
} else if expectStatus == dao.VerifyStatusChecking {
|
||||
nextStatus = dao.VerifyStatusSecond
|
||||
}
|
||||
|
||||
productWhere := modelbase.Params{Eq: map[string]string{"id": info.VerifyId}}
|
||||
var productExist dao.ProductCheckExist
|
||||
err = model.ProductModel{}.Init().GetOne(productWhere, &productExist)
|
||||
if err != nil {
|
||||
log.Errorf("verify product get: %v", err)
|
||||
return failResponse(utils.Fail), nil
|
||||
}
|
||||
if productExist.Id < 1 {
|
||||
return outResponse(utils.ErrorNotFund, "没有找到产品信息"), nil
|
||||
}
|
||||
|
||||
err = l.svcCtx.DB.WithContext(l.ctx).Transaction(func(tx *gorm.DB) error {
|
||||
vm := model.VerifyModel{}.Init().WithTX(tx)
|
||||
pm := model.ProductModel{}.Init().WithTX(tx)
|
||||
now := time.Now().Format(time.DateTime)
|
||||
|
||||
if expectStatus == dao.VerifyStatusChecking {
|
||||
if _, err := vm.Edit(w, &dao.VerifyFirstUpdate{
|
||||
AdminId: adminId,
|
||||
AdminName: adminName,
|
||||
VerifyStatus: nextStatus,
|
||||
VerifyReason: reason,
|
||||
VerifyTime: now,
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
_, err := pm.Edit(productWhere, &dao.ProductVerifyFirstStatus{
|
||||
VerifyStatus: nextStatus,
|
||||
VerifyId: adminId,
|
||||
VerifyName: adminName,
|
||||
Reason: reason,
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
if _, err := vm.Edit(w, &dao.VerifySecondUpdate{
|
||||
AdminSecondId: adminId,
|
||||
AdminSecondName: adminName,
|
||||
VerifyStatus: nextStatus,
|
||||
VerifyReason: reason,
|
||||
VerifyTime: now,
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if nextStatus == dao.VerifyStatusPass {
|
||||
var content dao.ProductVerify
|
||||
if err := jsoniter.Unmarshal([]byte(info.Content), &content); err != nil {
|
||||
log.Errorf("product verify content json: %v content=%s", err, info.Content)
|
||||
return err
|
||||
}
|
||||
_, err := pm.Edit(productWhere, &dao.ProductVerifySecondOkStatus{
|
||||
ModelCode: content.ModelCode,
|
||||
Price: content.Price,
|
||||
StorePrice: content.StorePrice,
|
||||
SalePrice: content.SalePrice,
|
||||
SharePrice: content.SharePrice,
|
||||
AgentPrice: content.AgentPrice,
|
||||
SaleReward: content.SaleReward,
|
||||
Type: content.Type,
|
||||
NormsNumber: content.NormsNumber,
|
||||
BoxNumber: content.BoxNumber,
|
||||
VerifyStatus: nextStatus,
|
||||
VerifySecondId: adminId,
|
||||
VerifySecondName: adminName,
|
||||
Reason: reason,
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
_, err := pm.Edit(productWhere, &dao.ProductVerifySecondStatus{
|
||||
VerifyStatus: nextStatus,
|
||||
VerifySecondId: adminId,
|
||||
VerifySecondName: adminName,
|
||||
Reason: reason,
|
||||
})
|
||||
return err
|
||||
})
|
||||
if err != nil {
|
||||
log.Errorf("verify status tx: %v", err)
|
||||
if isJSONError(err) {
|
||||
return failResponse(utils.ErrorFormatDataError), nil
|
||||
}
|
||||
return failResponse(utils.Fail), nil
|
||||
}
|
||||
|
||||
notifyType := wecom.ProductFirstReview
|
||||
if expectStatus == dao.VerifyStatusSecond {
|
||||
notifyType = wecom.ProductSecondReview
|
||||
}
|
||||
objID, _ := strconv.Atoi(info.VerifyId)
|
||||
wecom.NotifyProduct(wecom.NotifyJob{
|
||||
ObjId: objID,
|
||||
ObjType: dao.VerifyTypeProduct,
|
||||
Type: notifyType,
|
||||
Action: uint8(req.Status),
|
||||
Reason: reason,
|
||||
})
|
||||
|
||||
return okResponse(utils.StringEmpty), nil
|
||||
}
|
||||
|
||||
func isJSONError(err error) bool {
|
||||
switch err.(type) {
|
||||
case *json.SyntaxError, *json.UnmarshalTypeError:
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user