新增摸大红业务并修复后台链接按钮白字
支持分类筛选、搜索、下单支付建群与固定二维码;合并迁移种子数据;后台表格编辑/详情链接恢复主题色可见。
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
package mohong
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"hfb_sys/backend/internal/model"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
)
|
||||
|
||||
const (
|
||||
configKeyDefaultQrcodeURL = "mohong.default_qrcode_url"
|
||||
configKeyGroupWelcomeText = "mohong.group_welcome_text"
|
||||
configKeyOrderCopyTemplate = "mohong.order_copy_template"
|
||||
|
||||
defaultGroupWelcomeText = "订单已支付,请扫码联系客服,并将下方订单信息复制发送给客服。"
|
||||
defaultOrderCopyTemplate = "【摸大红订单】\n订单号:{{order_no}}\n下单时间:{{created_at}}\n商品:{{product_title}}\n数量:{{quantity}}\n金额:{{amount}}\n下单人:{{buyer_name}}({{buyer_phone}})"
|
||||
)
|
||||
|
||||
func (r *Repository) GetConfig(ctx context.Context) (*ConfigDTO, error) {
|
||||
if r.db == nil {
|
||||
return nil, ErrDependencyUnavailable
|
||||
}
|
||||
keys := []string{configKeyDefaultQrcodeURL, configKeyGroupWelcomeText, configKeyOrderCopyTemplate}
|
||||
var rows []model.SystemConfig
|
||||
if err := r.db.WithContext(ctx).Where("`key` IN ?", keys).Find(&rows).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
values := map[string]string{}
|
||||
for _, row := range rows {
|
||||
values[row.Key] = row.Value
|
||||
}
|
||||
return &ConfigDTO{
|
||||
DefaultQrcodeURL: strings.TrimSpace(values[configKeyDefaultQrcodeURL]),
|
||||
GroupWelcomeText: firstNonEmpty(values[configKeyGroupWelcomeText], defaultGroupWelcomeText),
|
||||
OrderCopyTemplate: firstNonEmpty(values[configKeyOrderCopyTemplate], defaultOrderCopyTemplate),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (r *Repository) UpdateConfig(ctx context.Context, req UpdateConfigRequest) (*ConfigDTO, error) {
|
||||
if r.db == nil {
|
||||
return nil, ErrDependencyUnavailable
|
||||
}
|
||||
err := r.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error {
|
||||
if req.DefaultQrcodeURL != nil {
|
||||
if err := upsertConfig(tx, configKeyDefaultQrcodeURL, strings.TrimSpace(*req.DefaultQrcodeURL), "摸大红全局默认固定二维码图片URL"); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if req.GroupWelcomeText != nil {
|
||||
if err := upsertConfig(tx, configKeyGroupWelcomeText, strings.TrimSpace(*req.GroupWelcomeText), "摸大红订单群欢迎语"); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if req.OrderCopyTemplate != nil {
|
||||
if err := upsertConfig(tx, configKeyOrderCopyTemplate, strings.TrimSpace(*req.OrderCopyTemplate), "摸大红订单一键复制文案模板"); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return r.GetConfig(ctx)
|
||||
}
|
||||
|
||||
func upsertConfig(tx *gorm.DB, key, value, description string) error {
|
||||
row := model.SystemConfig{
|
||||
Key: key,
|
||||
Value: value,
|
||||
Description: description,
|
||||
}
|
||||
return tx.Clauses(clause.OnConflict{
|
||||
Columns: []clause.Column{{Name: "key"}},
|
||||
DoUpdates: clause.AssignmentColumns([]string{"value", "description"}),
|
||||
}).Create(&row).Error
|
||||
}
|
||||
|
||||
func firstNonEmpty(values ...string) string {
|
||||
for _, v := range values {
|
||||
if strings.TrimSpace(v) != "" {
|
||||
return strings.TrimSpace(v)
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (r *Repository) resolveQrcodeURL(tx *gorm.DB, productQrcode string) string {
|
||||
productQrcode = strings.TrimSpace(productQrcode)
|
||||
if productQrcode != "" {
|
||||
return productQrcode
|
||||
}
|
||||
var cfg model.SystemConfig
|
||||
if err := tx.Where("`key` = ?", configKeyDefaultQrcodeURL).First(&cfg).Error; err == nil {
|
||||
return strings.TrimSpace(cfg.Value)
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (r *Repository) loadWelcomeText(tx *gorm.DB) string {
|
||||
var cfg model.SystemConfig
|
||||
if err := tx.Where("`key` = ?", configKeyGroupWelcomeText).First(&cfg).Error; err == nil && strings.TrimSpace(cfg.Value) != "" {
|
||||
return strings.TrimSpace(cfg.Value)
|
||||
}
|
||||
return defaultGroupWelcomeText
|
||||
}
|
||||
|
||||
func (r *Repository) loadCopyTemplate(tx *gorm.DB) string {
|
||||
var cfg model.SystemConfig
|
||||
if err := tx.Where("`key` = ?", configKeyOrderCopyTemplate).First(&cfg).Error; err == nil && strings.TrimSpace(cfg.Value) != "" {
|
||||
return strings.TrimSpace(cfg.Value)
|
||||
}
|
||||
return defaultOrderCopyTemplate
|
||||
}
|
||||
Reference in New Issue
Block a user