Merge branch 'develop' of gitee.com:fusenpack/fusenapi into develop

This commit is contained in:
momo 2023-11-23 14:07:10 +08:00
commit 9e9d161137
9 changed files with 95 additions and 107 deletions

View File

@ -61,7 +61,6 @@ func (l *SaveCanteenTypeProductLogic) SaveCanteenTypeProduct(req *types.SaveCant
now := time.Now().UTC().Unix() now := time.Now().UTC().Unix()
//开启事务 //开启事务
err = l.svcCtx.MysqlConn.Transaction(func(tx *gorm.DB) error { err = l.svcCtx.MysqlConn.Transaction(func(tx *gorm.DB) error {
canteenProductModel = gmodel.NewFsCanteenProductModel(tx)
sort := int64(0) sort := int64(0)
//新的变更记录 //新的变更记录
mapUpdateCanteenPid := make(map[int64]struct{}) mapUpdateCanteenPid := make(map[int64]struct{})
@ -73,12 +72,12 @@ func (l *SaveCanteenTypeProductLogic) SaveCanteenTypeProduct(req *types.SaveCant
} }
if v.Id > 0 { //更新 if v.Id > 0 { //更新
mapUpdateCanteenPid[v.Id] = struct{}{} mapUpdateCanteenPid[v.Id] = struct{}{}
err = canteenProductModel.UpdateById(l.ctx, v.Id, &gmodel.FsCanteenProduct{ err = tx.WithContext(l.ctx).Model(&gmodel.FsCanteenProduct{}).Where("id = ?", v.Id).Updates(&gmodel.FsCanteenProduct{
SizeId: &v.SizeId, SizeId: &v.SizeId,
Sid: &v.SId, Sid: &v.SId,
Sort: &sort, Sort: &sort,
ProductId: sizeInfo.ProductId, ProductId: sizeInfo.ProductId,
}) }).Error
if err != nil { if err != nil {
return err return err
} }
@ -86,7 +85,7 @@ func (l *SaveCanteenTypeProductLogic) SaveCanteenTypeProduct(req *types.SaveCant
} }
//新增 //新增
addStatus := int64(1) addStatus := int64(1)
err = canteenProductModel.Create(l.ctx, &gmodel.FsCanteenProduct{ err = tx.WithContext(l.ctx).Model(&gmodel.FsCanteenProduct{}).Create(&gmodel.FsCanteenProduct{
SizeId: &v.SizeId, SizeId: &v.SizeId,
Sid: &v.SId, Sid: &v.SId,
Sort: &sort, Sort: &sort,
@ -94,7 +93,7 @@ func (l *SaveCanteenTypeProductLogic) SaveCanteenTypeProduct(req *types.SaveCant
Ctime: &now, Ctime: &now,
CanteenType: &req.Id, CanteenType: &req.Id,
ProductId: sizeInfo.ProductId, ProductId: sizeInfo.ProductId,
}) }).Error
if err != nil { if err != nil {
return err return err
} }
@ -110,9 +109,9 @@ func (l *SaveCanteenTypeProductLogic) SaveCanteenTypeProduct(req *types.SaveCant
return nil return nil
} }
delStatus := int64(0) delStatus := int64(0)
if err = canteenProductModel.UpdateByIdArr(l.ctx, diffCanteenProductId, &gmodel.FsCanteenProduct{ if err = tx.WithContext(l.ctx).Model(&gmodel.FsCanteenProduct{}).Where("id in (?)", diffCanteenProductId).Updates(&gmodel.FsCanteenProduct{
Status: &delStatus, Status: &delStatus,
}); err != nil { }).Error; err != nil {
return err return err
} }
return nil return nil

View File

@ -6,7 +6,6 @@ import (
"fusenapi/utils/basic" "fusenapi/utils/basic"
"fusenapi/utils/chinese_to_pinyin" "fusenapi/utils/chinese_to_pinyin"
"fusenapi/utils/email" "fusenapi/utils/email"
"gorm.io/gorm"
"net/http" "net/http"
"strings" "strings"
"time" "time"
@ -63,16 +62,16 @@ func (l *CreateLdapUserLogic) CreateLdapUser(req *types.CreateLdapUserReq, r *ht
userDN := fmt.Sprintf("cn=%s,%s", req.Email, l.svcCtx.Config.Ldap.PeopleGroupDN) userDN := fmt.Sprintf("cn=%s,%s", req.Email, l.svcCtx.Config.Ldap.PeopleGroupDN)
//新增一条记录获取递增用户id //新增一条记录获取递增用户id
now := time.Now().UTC() now := time.Now().UTC()
err := l.svcCtx.MysqlConn.Transaction(func(tx *gorm.DB) error {
userData := &gmodel.LdapUser{ userData := &gmodel.LdapUser{
UserDn: &userDN, UserDn: &userDN,
Ctime: &now, Ctime: &now,
Utime: &now, Utime: &now,
} }
if err := tx.WithContext(l.ctx).Model(&gmodel.LdapUser{}).Create(userData).Error; err != nil { if err := l.svcCtx.AllModels.LdapUser.Create(l.ctx, userData); err != nil {
return err logx.Error(err)
return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "新增用户失败!")
} }
return l.svcCtx.Ldap.Create(userDN, map[string][]string{ err := l.svcCtx.Ldap.Create(userDN, map[string][]string{
"objectClass": {"person", "organizationalPerson", "inetOrgPerson", "posixAccount", "top", "shadowAccount"}, //固有属性 "objectClass": {"person", "organizationalPerson", "inetOrgPerson", "posixAccount", "top", "shadowAccount"}, //固有属性
"shadowLastChange": {"19676"}, //固有属性 "shadowLastChange": {"19676"}, //固有属性
"shadowMin": {"0"}, //固有属性 "shadowMin": {"0"}, //固有属性
@ -93,8 +92,8 @@ func (l *CreateLdapUserLogic) CreateLdapUser(req *types.CreateLdapUserReq, r *ht
"mobile": {req.Mobile}, //手机号 "mobile": {req.Mobile}, //手机号
"userPassword": {req.Password}, //密码 "userPassword": {req.Password}, //密码
}) })
})
if err != nil { if err != nil {
logx.Error(err)
return resp.SetStatusWithMessage(basic.CodeServiceErr, "添加用户失败,"+err.Error()) return resp.SetStatusWithMessage(basic.CodeServiceErr, "添加用户失败,"+err.Error())
} }
return resp.SetStatusWithMessage(basic.CodeOK, "添加用户成功") return resp.SetStatusWithMessage(basic.CodeOK, "添加用户成功")

View File

@ -6,8 +6,6 @@ import (
"fusenapi/utils/basic" "fusenapi/utils/basic"
"time" "time"
"gorm.io/gorm"
"context" "context"
"fusenapi/server/ldap-admin/internal/svc" "fusenapi/server/ldap-admin/internal/svc"
@ -38,19 +36,12 @@ func (l *DeleteMenuLogic) DeleteMenu(req *types.DeleteMenuReq, userinfo *auth.Us
if req.Id <= 0 { if req.Id <= 0 {
return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "参数id无效") return resp.SetStatusWithMessage(basic.CodeRequestParamsErr, "参数id无效")
} }
err := l.svcCtx.MysqlConn.Transaction(func(tx *gorm.DB) error {
menusModel := gmodel.NewLdapMenusModel(tx)
status := int64(0) status := int64(0)
now := time.Now().UTC() now := time.Now().UTC()
err := menusModel.Update(l.ctx, req.Id, &gmodel.LdapMenus{ err := l.svcCtx.AllModels.LdapMenus.Update(l.ctx, req.Id, &gmodel.LdapMenus{
Status: &status, Status: &status,
Utime: &now, Utime: &now,
}) })
if err != nil {
return err
}
return nil
})
if err != nil { if err != nil {
logx.Error(err) logx.Error(err)
return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "删除菜单失败") return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "删除菜单失败")

View File

@ -57,7 +57,7 @@ func (l *UpdateLdapUserLogic) UpdateLdapUser(req *types.UpdateLdapUserReq, r *ht
} }
//把用户名转pinyin //把用户名转pinyin
userNamePinyin := chinese_to_pinyin.ChineseToPinyin(req.UserName) userNamePinyin := chinese_to_pinyin.ChineseToPinyin(req.UserName)
now := time.Now() now := time.Now().UTC()
//更新的属性 //更新的属性
attr := map[string][]string{ attr := map[string][]string{
"homeDirectory": {"/home/users/" + userNamePinyin}, "homeDirectory": {"/home/users/" + userNamePinyin},

View File

@ -1,10 +1,12 @@
package logic package logic
import ( import (
"fusenapi/model/gmodel"
"fusenapi/utils/basic" "fusenapi/utils/basic"
"fusenapi/utils/email" "fusenapi/utils/email"
"net/http" "net/http"
"strings" "strings"
"time"
"context" "context"
@ -66,6 +68,13 @@ func (l *UpdateLdapUserPwdLogic) UpdateLdapUserPwd(req *types.UpdateLdapUserPwdR
logx.Error(err) logx.Error(err)
return resp.SetStatusWithMessage(basic.CodeServiceErr, "修改密码失败") return resp.SetStatusWithMessage(basic.CodeServiceErr, "修改密码失败")
} }
now := time.Now().UTC()
err = l.svcCtx.AllModels.LdapUser.Update(l.ctx, req.UserDN, &gmodel.LdapUser{
Utime: &now,
})
if err != nil {
logx.Error(err)
}
return resp.SetStatusWithMessage(basic.CodeOK, "修改密码成功") return resp.SetStatusWithMessage(basic.CodeOK, "修改密码成功")
} }

View File

@ -91,7 +91,6 @@ func (l *CalculateCartPriceLogic) CalculateCartPrice(req *types.CalculateCartPri
subTotalPrice := int64(0) subTotalPrice := int64(0)
//开启事物 //开启事物
err = l.svcCtx.MysqlConn.Transaction(func(tx *gorm.DB) error { err = l.svcCtx.MysqlConn.Transaction(func(tx *gorm.DB) error {
shoppingCartModel := gmodel.NewFsShoppingCartModel(tx)
for _, cart := range carts { for _, cart := range carts {
modelInfo, ok := mapModel[*cart.ModelId] modelInfo, ok := mapModel[*cart.ModelId]
if !ok { if !ok {
@ -138,7 +137,7 @@ func (l *CalculateCartPriceLogic) CalculateCartPrice(req *types.CalculateCartPri
subTotalPrice += totalPrice subTotalPrice += totalPrice
} }
//更新购物车购买数量 //更新购物车购买数量
if err = shoppingCartModel.Update(l.ctx, cart.Id, userinfo.UserId, updData); err != nil { if err = tx.WithContext(l.ctx).Model(&gmodel.FsShoppingCart{}).Where("id = ? and user_id = ?", cart.Id, userinfo.UserId).Updates(updData).Error; err != nil {
logx.Error(err) logx.Error(err)
return errors.New(fmt.Sprintf("failed to update cart`s purchase quantity:%d", cart.Id)) return errors.New(fmt.Sprintf("failed to update cart`s purchase quantity:%d", cart.Id))
} }

View File

@ -140,9 +140,6 @@ func (w *wsConnectItem) consumeRenderImageData() {
// 执行渲染任务 // 执行渲染任务
func (w *wsConnectItem) renderImage(renderImageData websocket_data.RenderImageReqMsg) { func (w *wsConnectItem) renderImage(renderImageData websocket_data.RenderImageReqMsg) {
//用户id赋值
renderImageData.RenderData.UserId = w.userId
renderImageData.RenderData.GuestId = w.guestId
if renderImageData.RenderData.Logo == "" { if renderImageData.RenderData.Logo == "" {
w.renderErrResponse(renderImageData.RequestId, renderImageData.RenderData.TemplateTag, "", "请传入logo", renderImageData.RenderData.ProductId, w.userId, w.guestId, 0, 0, 0, 0) w.renderErrResponse(renderImageData.RequestId, renderImageData.RenderData.TemplateTag, "", "请传入logo", renderImageData.RenderData.ProductId, w.userId, w.guestId, 0, 0, 0, 0)
return return
@ -211,8 +208,8 @@ func (w *wsConnectItem) renderImage(renderImageData websocket_data.RenderImageRe
defer decreaseCombineRequestCount(w.userId, w.guestId) defer decreaseCombineRequestCount(w.userId, w.guestId)
//获取刀版图 //获取刀版图
combineReq := repositories.LogoCombineReq{ combineReq := repositories.LogoCombineReq{
UserId: renderImageData.RenderData.UserId, UserId: w.userId,
GuestId: renderImageData.RenderData.GuestId, GuestId: w.guestId,
ProductTemplateV2Info: productTemplate, ProductTemplateV2Info: productTemplate,
ProductTemplateTagGroups: renderImageData.RenderData.TemplateTagGroups, ProductTemplateTagGroups: renderImageData.RenderData.TemplateTagGroups,
TemplateTag: renderImageData.RenderData.TemplateTag, TemplateTag: renderImageData.RenderData.TemplateTag,
@ -225,13 +222,13 @@ func (w *wsConnectItem) renderImage(renderImageData websocket_data.RenderImageRe
Debug: w.debug, Debug: w.debug,
} }
//qrcode不需要依赖合图组开关 //qrcode不需要依赖合图组开关
if switchInfo.SwitchInfo.QRcode.IfShow { if switchInfo.SwitchInfo.QRcode.IfShow && switchInfo.SwitchInfo.QRcode.UserDisabled {
combineReq.Qrcode = &switchInfo.SwitchInfo.QRcode.DefaultValue combineReq.Qrcode = &switchInfo.SwitchInfo.QRcode.DefaultValue
} }
//合图组开关开启 //合图组开关开启
if switchInfo.CombineIsVisible { if switchInfo.CombineIsVisible {
//开启slogan //开启slogan
if switchInfo.SwitchInfo.Slogan.IfShow { if switchInfo.SwitchInfo.Slogan.IfShow && switchInfo.SwitchInfo.Slogan.UserDisabled {
if renderImageData.RenderData.Slogan == "" { if renderImageData.RenderData.Slogan == "" {
combineReq.Slogan = &switchInfo.SwitchInfo.Slogan.DefaultValue combineReq.Slogan = &switchInfo.SwitchInfo.Slogan.DefaultValue
} else { } else {
@ -239,7 +236,7 @@ func (w *wsConnectItem) renderImage(renderImageData websocket_data.RenderImageRe
} }
} }
//开启website //开启website
if switchInfo.SwitchInfo.Website.IfShow { if switchInfo.SwitchInfo.Website.IfShow && switchInfo.SwitchInfo.Website.UserDisabled {
if renderImageData.RenderData.Website == "" { if renderImageData.RenderData.Website == "" {
combineReq.Website = &switchInfo.SwitchInfo.Website.DefaultValue combineReq.Website = &switchInfo.SwitchInfo.Website.DefaultValue
} else { } else {
@ -247,7 +244,7 @@ func (w *wsConnectItem) renderImage(renderImageData websocket_data.RenderImageRe
} }
} }
//开启address //开启address
if switchInfo.SwitchInfo.Address.IfShow { if switchInfo.SwitchInfo.Address.IfShow && switchInfo.SwitchInfo.Address.UserDisabled {
if renderImageData.RenderData.Address == "" { if renderImageData.RenderData.Address == "" {
combineReq.Address = &switchInfo.SwitchInfo.Address.DefaultValue combineReq.Address = &switchInfo.SwitchInfo.Address.DefaultValue
} else { } else {
@ -255,7 +252,7 @@ func (w *wsConnectItem) renderImage(renderImageData websocket_data.RenderImageRe
} }
} }
//开启Phone //开启Phone
if switchInfo.SwitchInfo.Phone.IfShow { if switchInfo.SwitchInfo.Phone.IfShow && switchInfo.SwitchInfo.Phone.UserDisabled {
if renderImageData.RenderData.Phone == "" { if renderImageData.RenderData.Phone == "" {
combineReq.Phone = &switchInfo.SwitchInfo.Phone.DefaultValue combineReq.Phone = &switchInfo.SwitchInfo.Phone.DefaultValue
} else { } else {
@ -384,7 +381,7 @@ func (w *wsConnectItem) assembleRenderDataToUnity(taskId string, resolution int,
return err return err
} }
} }
//组装data数据(参照以前PHP,不要随便动) //组装data数据
var mode map[string]interface{} var mode map[string]interface{}
if element.Mode != nil && *element.Mode != "" { if element.Mode != nil && *element.Mode != "" {
if err = json.Unmarshal([]byte(*element.Mode), &mode); err != nil { if err = json.Unmarshal([]byte(*element.Mode), &mode); err != nil {
@ -451,8 +448,8 @@ func (w *wsConnectItem) assembleRenderDataToUnity(taskId string, resolution int,
sendData := map[string]interface{}{ sendData := map[string]interface{}{
"id": string(temIdBytes), "id": string(temIdBytes),
"order_id": 0, "order_id": 0,
"user_id": info.RenderData.UserId, "user_id": w.userId,
"guest_id": info.RenderData.GuestId, "guest_id": w.guestId,
"sku_ids": []int64{info.RenderData.ProductId}, "sku_ids": []int64{info.RenderData.ProductId},
"tids": []string{*element.Title}, "tids": []string{*element.Title},
"data": result, "data": result,
@ -488,11 +485,7 @@ func (w *wsConnectItem) assembleRenderDataToUnity(taskId string, resolution int,
// 组装渲染任务id // 组装渲染任务id
func (w *wsConnectItem) genRenderTaskId(combineImage string, renderImageData websocket_data.RenderImageReqMsg, model3dInfo *gmodel.FsProductModel3d, productTemplate *gmodel.FsProductTemplateV2, element *gmodel.FsProductTemplateElement) string { func (w *wsConnectItem) genRenderTaskId(combineImage string, renderImageData websocket_data.RenderImageReqMsg, model3dInfo *gmodel.FsProductModel3d, productTemplate *gmodel.FsProductTemplateV2, element *gmodel.FsProductTemplateElement) string {
//生成任务id(需要把user_id,guest_id设为0) incomeHashBytes, _ := json.Marshal(renderImageData.RenderData)
incomeHashParam := renderImageData.RenderData
incomeHashParam.UserId = 0 //设为0(渲染跟用户id无关)
incomeHashParam.GuestId = 0 //设为0(渲染跟用户id无关)
incomeHashBytes, _ := json.Marshal(incomeHashParam)
modelHashStr := "" modelHashStr := ""
templateHashStr := "" templateHashStr := ""
if model3dInfo.ModelInfo != nil { if model3dInfo.ModelInfo != nil {

View File

@ -70,19 +70,32 @@ func GetTemplateSwitchInfo(templateId int64, templateJsonStr *string, templateMa
Id: templateId, Id: templateId,
Material: templateMaterialImg, Material: templateMaterialImg,
SwitchInfo: SwitchInfo{ SwitchInfo: SwitchInfo{
QRcode: QRcode{
UserDisabled: true,
DefaultValue: "your qrcode",
},
Website: Website{
UserDisabled: true,
DefaultValue: "your website",
},
Address: Address{
UserDisabled: true,
DefaultValue: "your address",
},
Phone: Phone{
UserDisabled: true,
DefaultValue: "your phone",
},
Slogan: Slogan{
UserDisabled: true,
DefaultValue: "your slogan",
},
Logo: Logo{ Logo: Logo{
Material: "/image/logo/aHnT1_rzubdwax_scale.png", Material: "/image/logo/aHnT1_rzubdwax_scale.png",
}, },
}, },
CombineIsVisible: false, CombineIsVisible: false,
} }
defer func() {
returnData.SwitchInfo.QRcode.UserDisabled = true
returnData.SwitchInfo.Website.UserDisabled = true
returnData.SwitchInfo.Address.UserDisabled = true
returnData.SwitchInfo.Phone.UserDisabled = true
returnData.SwitchInfo.Slogan.UserDisabled = true
}()
if templateJsonStr == nil || *templateJsonStr == "" { if templateJsonStr == nil || *templateJsonStr == "" {
return returnData return returnData
} }
@ -98,35 +111,20 @@ func GetTemplateSwitchInfo(templateId int64, templateJsonStr *string, templateMa
} }
switch v.Tag { switch v.Tag {
case "Phone": //电话 case "Phone": //电话
returnData.SwitchInfo.Phone = Phone{ returnData.SwitchInfo.Phone.IfShow = v.Visible
IfShow: v.Visible, returnData.SwitchInfo.Phone.Text = v.Text
Text: v.Text,
DefaultValue: "your phone",
}
case "Address": //地址 case "Address": //地址
returnData.SwitchInfo.Address = Address{ returnData.SwitchInfo.Address.IfShow = v.Visible
IfShow: v.Visible, returnData.SwitchInfo.Address.Text = v.Text
Text: v.Text,
DefaultValue: "your address",
}
case "Website": case "Website":
returnData.SwitchInfo.Website = Website{ returnData.SwitchInfo.Website.IfShow = v.Visible
IfShow: v.Visible, returnData.SwitchInfo.Website.Text = v.Text
Text: v.Text,
DefaultValue: "your website",
}
case "QRcode": case "QRcode":
returnData.SwitchInfo.QRcode = QRcode{ returnData.SwitchInfo.QRcode.IfShow = v.Visible
IfShow: v.Visible, returnData.SwitchInfo.QRcode.Text = v.Text
Text: v.Text,
DefaultValue: "your qrcode content",
}
case "Slogan": case "Slogan":
returnData.SwitchInfo.Slogan = Slogan{ returnData.SwitchInfo.Slogan.IfShow = v.Visible
IfShow: v.Visible, returnData.SwitchInfo.Slogan.Text = v.Text
Text: v.Text,
DefaultValue: "your slogan",
}
} }
} }
return returnData return returnData

View File

@ -18,8 +18,8 @@ type RenderData struct {
Address string `json:"address"` //地址(可选) Address string `json:"address"` //地址(可选)
Phone string `json:"phone"` //电话(可选) Phone string `json:"phone"` //电话(可选)
Qrcode string `json:"qrcode"` //二维码(可选) Qrcode string `json:"qrcode"` //二维码(可选)
UserId int64 `json:"user_id"` //用户id(websocket连接建立再赋值) //UserId int64 `json:"user_id"` //用户id(websocket连接建立再赋值)
GuestId int64 `json:"guest_id"` //游客id(websocket连接建立再赋值) //GuestId int64 `json:"guest_id"` //游客id(websocket连接建立再赋值)
} }
type TemplateTagColor struct { type TemplateTagColor struct {
Colors [][]string `json:"colors"` //颜色组合 Colors [][]string `json:"colors"` //颜色组合