Files
gjs 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
add apis
2026-10-20 20:02:25 +08:00

142 lines
4.0 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
}