278713765c
CI / changes (push) Successful in 1m31s
CI / ad (push) Successful in 0s
CI / admin (push) Successful in 1s
CI / bff (push) Successful in 27s
CI / chore (push) Successful in 31s
CI / equipment (push) Successful in 30s
CI / express (push) Successful in 0s
CI / factory (push) Successful in 0s
CI / message (push) Successful in 0s
CI / order (push) Successful in 1s
CI / payment (push) Successful in 0s
CI / percutaneous (push) Successful in 0s
CI / product (push) Successful in 0s
CI / record (push) Successful in 0s
CI / sale (push) Successful in 0s
CI / support (push) Successful in 0s
CI / task (push) Successful in 0s
CI / user (push) Successful in 1s
CI / water (push) Successful in 0s
CI / wecom (push) Successful in 0s
142 lines
4.0 KiB
Go
142 lines
4.0 KiB
Go
package logic
|
||
|
||
import (
|
||
"context"
|
||
"lone-services/pkg/modelbase"
|
||
"lone-services/pkg/utils"
|
||
"lone-services/services/equipment/internal/dao"
|
||
"lone-services/services/equipment/internal/model"
|
||
"lone-services/services/equipment/validator"
|
||
"strconv"
|
||
|
||
"lone-services/rpc/equipment/pb"
|
||
"lone-services/services/equipment/internal/svc"
|
||
|
||
"github.com/zeromicro/go-zero/core/logx"
|
||
)
|
||
|
||
type ApiMaskStoreUseLogic struct {
|
||
ctx context.Context
|
||
svcCtx *svc.ServiceContext
|
||
logx.Logger
|
||
BaseLogic
|
||
}
|
||
|
||
func NewApiMaskStoreUseLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ApiMaskStoreUseLogic {
|
||
return &ApiMaskStoreUseLogic{
|
||
ctx: ctx,
|
||
svcCtx: svcCtx,
|
||
Logger: logx.WithContext(ctx),
|
||
}
|
||
}
|
||
|
||
func (l *ApiMaskStoreUseLogic) ApiMaskStoreUse(in *equipment.ApiMaskUseRequest) (*equipment.Response, error) {
|
||
var v validator.MaskUseValidator
|
||
|
||
adminInfo := utils.GetUserFromCtx(l.ctx)
|
||
if adminInfo.ID < utils.NumberOne {
|
||
return l.fail(utils.ErrorNoLoginInfo)
|
||
}
|
||
|
||
maskInfo, storeInfo, cErr := l.checkStoreUse(in, adminInfo)
|
||
if cErr != utils.Ok {
|
||
return l.fail(cErr)
|
||
}
|
||
|
||
two := true
|
||
if len(maskInfo.UseTime) < utils.NumberEight {
|
||
maskInfo.IsUse = utils.StatusDone
|
||
maskInfo.UseTime = in.UseTime
|
||
maskInfo.HostCode = in.HostCode
|
||
maskInfo.UserId = in.UserId
|
||
maskInfo.StoreId = storeInfo.Id
|
||
maskInfo.GearPosition = in.GearPosition
|
||
maskInfo.Voltage = in.Voltage
|
||
maskInfo.ElectricCurrent = in.ElectricCurrent
|
||
maskInfo.Efficiency = in.Efficiency
|
||
maskInfo.Resistance = in.Resistance
|
||
maskInfo.Score = in.Score
|
||
two = false
|
||
} else {
|
||
maskInfo.SecondUseTime = v.UseTime
|
||
}
|
||
|
||
modelObj := model.MaskModel{}.Init()
|
||
modelObj.Begin()
|
||
if !two {
|
||
record := dao.MaskUsageRecordCreate{
|
||
StoreId: int(storeInfo.Id),
|
||
FacialMaskId: maskInfo.FacialMaskId,
|
||
}
|
||
err := model.MaskUsageRecordModel{}.Init().Create(&record)
|
||
if err != nil {
|
||
l.Logger.Error(err)
|
||
modelObj.Rollback()
|
||
return l.fail(utils.SetError(utils.Fail, "添加使用记录失败"))
|
||
}
|
||
}
|
||
|
||
w := modelbase.Params{Eq: map[string]string{"id": strconv.FormatInt(maskInfo.Id, 10)}}
|
||
_, err2 := modelObj.Edit(w, &maskInfo)
|
||
if err2 != nil {
|
||
l.Logger.Error(err2)
|
||
modelObj.Rollback()
|
||
return l.fail(utils.SetError(utils.Fail, "更新数据失败"))
|
||
}
|
||
|
||
modelObj.Commit()
|
||
|
||
return l.ok(utils.NumberOne)
|
||
}
|
||
|
||
func (l *ApiMaskStoreUseLogic) checkStoreUse(v *equipment.ApiMaskUseRequest, u utils.UserInfo) (dao.MaskUseInfo, dao.StoreInfo, utils.Status) {
|
||
var maskInfo dao.MaskUseInfo
|
||
var storeInfo dao.StoreInfo
|
||
|
||
maskInfo, err := l.checkMaskUse(v)
|
||
if err != utils.Ok {
|
||
return maskInfo, storeInfo, err
|
||
}
|
||
|
||
//校验门店信息(门店登录 token 中 ObjId 为门店ID)
|
||
storeInfo = svc.GetStore(v.StoreId, l.svcCtx.StoreSvcName)
|
||
if storeInfo.Id < utils.NumberOne {
|
||
return maskInfo, storeInfo, utils.SetError(utils.ErrorNotFund, "没有找到门店信息")
|
||
}
|
||
|
||
return maskInfo, storeInfo, utils.Ok
|
||
}
|
||
|
||
func (l *ApiMaskStoreUseLogic) checkMaskUse(v *equipment.ApiMaskUseRequest) (dao.MaskUseInfo, utils.Status) {
|
||
var maskInfo dao.MaskUseInfo
|
||
|
||
//面膜信息校验信息
|
||
maskW := modelbase.Params{Eq: map[string]string{"facial_mask_id": v.FacialMaskId}}
|
||
err := model.MaskModel{}.Init().GetOne(maskW, &maskInfo)
|
||
if err != nil || maskInfo.Id < utils.NumberOne {
|
||
l.Logger.Error(err)
|
||
return maskInfo, utils.SetError(utils.ErrorNotFund, "没有找到面膜信息")
|
||
}
|
||
|
||
//如果使用过
|
||
if maskInfo.IsUse == utils.StatusDone {
|
||
//试用与一次性直接返回
|
||
if maskInfo.IsOnTrial == dao.FacialTypeTry ||
|
||
maskInfo.IsOnTrial == dao.FacialTypeOnce {
|
||
return maskInfo, utils.SetError(utils.Fail, "产品已使用过")
|
||
}
|
||
//普通与通过做过两次返回
|
||
if len(maskInfo.SecondUseTime) > utils.NumberEight {
|
||
return maskInfo, utils.SetError(utils.Fail, "产品已使用过二次")
|
||
}
|
||
//两次间隔不能超过30分
|
||
userTime, err := utils.TimeToUnix(maskInfo.UseTime, "2006-1-2 15:4")
|
||
if err != nil && userTime+30*60 < utils.Now().Unix() {
|
||
utils.Logger.Error(err)
|
||
return maskInfo, utils.SetError(utils.Fail, "超过30分不能继续使用")
|
||
}
|
||
}
|
||
|
||
return maskInfo, utils.Ok
|
||
}
|