| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- package initialize
- import (
- "errors"
- "fmt"
- "gorm.io/gorm"
- "wails-app/internal/dao"
- "wails-app/internal/global"
- utils "wails-app/internal/pkg"
- )
- const (
- pofSimulatorDeviceID = "POF-SIM-01"
- pofSimulatorUsername = "admin"
- pofSimulatorPassword = "admin"
- legacyPOFSimulatorUsername = "pof-sim"
- )
- // EnsureCentralPaymentConfiguration creates the POF payment entry and a local
- // simulator credential. Real equipment must use a separately created device.
- func EnsureCentralPaymentConfiguration() error {
- db := global.GVA_DB
- if db == nil {
- return nil
- }
- if err := db.AutoMigrate(&dao.CentralPaymentDevice{}, &dao.CentralPaymentToken{}, &dao.CentralPaymentRequestLog{}); err != nil {
- return fmt.Errorf("初始化中央缴费机表失败: %w", err)
- }
- var entry dao.PaymentEntryConfig
- err := db.Where("code = ?", "central_payment_machine").First(&entry).Error
- if errors.Is(err, gorm.ErrRecordNotFound) {
- entry = dao.PaymentEntryConfig{
- Code: "central_payment_machine", Name: "中央缴费机", Enabled: true, Sort: 30,
- IsSystem: true, Description: "POF 标准协议中央缴费机发起的支付",
- }
- if err := db.Create(&entry).Error; err != nil {
- return fmt.Errorf("初始化中央缴费机支付入口失败: %w", err)
- }
- } else if err != nil {
- return err
- }
- for index, methodCode := range []string{"cash", "pos"} {
- var relationCount int64
- if err := db.Model(&dao.PaymentEntryMethod{}).Where("entry_code = ? AND method_code = ?", entry.Code, methodCode).Count(&relationCount).Error; err != nil {
- return err
- }
- if relationCount == 0 {
- if err := db.Create(&dao.PaymentEntryMethod{EntryCode: entry.Code, MethodCode: methodCode, Sort: index * 10}).Error; err != nil {
- return fmt.Errorf("初始化中央缴费机支付方式失败: %w", err)
- }
- }
- }
- var device dao.CentralPaymentDevice
- err = db.Where("device_id = ?", pofSimulatorDeviceID).First(&device).Error
- if errors.Is(err, gorm.ErrRecordNotFound) {
- device = dao.CentralPaymentDevice{
- DeviceID: pofSimulatorDeviceID, Username: pofSimulatorUsername,
- PasswordHash: utils.BcryptHash(pofSimulatorPassword), Enabled: true,
- PaymentEntry: "central_payment_machine", Description: "仅用于本地 POF 模拟桩联调,真机启用前应禁用或删除",
- }
- if err := db.Create(&device).Error; err != nil {
- return fmt.Errorf("初始化 POF 模拟设备失败: %w", err)
- }
- } else if err != nil {
- return err
- } else if device.Username == legacyPOFSimulatorUsername {
- if err := db.Model(&device).Updates(map[string]interface{}{
- "username": pofSimulatorUsername,
- "password_hash": utils.BcryptHash(pofSimulatorPassword),
- }).Error; err != nil {
- return fmt.Errorf("升级 POF 模拟设备登录凭据失败: %w", err)
- }
- }
- return nil
- }
|