增加backend的erp若干功能
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
package models
|
||||
|
||||
import "time"
|
||||
|
||||
// BackendUserNotifyConfig 租户用户通知配置表: yz_backend_user_notify_config
|
||||
// 每个用户一条记录,保存自己的接收渠道配置(邮箱/手机号/Bark)
|
||||
type BackendUserNotifyConfig struct {
|
||||
ID uint64 `orm:"column(id);pk;auto" json:"id"`
|
||||
Tid uint64 `orm:"column(tid)" json:"tid"`
|
||||
UserID uint64 `orm:"column(user_id)" json:"user_id"`
|
||||
Email *string `orm:"column(email);size(128);null" json:"email"`
|
||||
Phone *string `orm:"column(phone);size(20);null" json:"phone"`
|
||||
BarkDeviceKey *string `orm:"column(bark_device_key);size(128);null" json:"bark_device_key"`
|
||||
BarkServerURL *string `orm:"column(bark_server_url);size(255);null" json:"bark_server_url"` // 为空用默认 https://api.day.app
|
||||
CreateTime time.Time `orm:"column(create_time);auto_now_add;type(datetime)" json:"create_time"`
|
||||
UpdateTime time.Time `orm:"column(update_time);auto_now;type(datetime)" json:"update_time"`
|
||||
}
|
||||
|
||||
func (m *BackendUserNotifyConfig) TableName() string {
|
||||
return "yz_backend_user_notify_config"
|
||||
}
|
||||
|
||||
// GetBackendUserNotifyConfig 按 tid+user_id 查询配置,不存在返回 nil
|
||||
func GetBackendUserNotifyConfig(tid, userID uint64) *BackendUserNotifyConfig {
|
||||
var cfg BackendUserNotifyConfig
|
||||
err := Orm.QueryTable(new(BackendUserNotifyConfig)).
|
||||
Filter("tid", tid).Filter("user_id", userID).One(&cfg)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return &cfg
|
||||
}
|
||||
@@ -32,5 +32,5 @@ type BackendErpContact struct {
|
||||
}
|
||||
|
||||
func (m *BackendErpContact) TableName() string {
|
||||
return "yz_backend_contact"
|
||||
return "yz_backend_erp_contact"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
package models
|
||||
|
||||
import "time"
|
||||
|
||||
// ErpAccountSet ERP账套管理表: yz_erp_account_set
|
||||
type ErpAccountSet struct {
|
||||
ID uint64 `orm:"column(id);pk;auto" json:"id"`
|
||||
TenantID string `orm:"column(tenant_id);size(64)" json:"tenant_id"`
|
||||
SetCode string `orm:"column(set_code);size(50)" json:"set_code"`
|
||||
SetName string `orm:"column(set_name);size(100)" json:"set_name"`
|
||||
CompanyName string `orm:"column(company_name);size(100)" json:"company_name"`
|
||||
CompanyTaxNo string `orm:"column(company_tax_no);size(50)" json:"company_tax_no"`
|
||||
StartYear int `orm:"column(start_year);default(2024)" json:"start_year"`
|
||||
StartMonth int `orm:"column(start_month);default(1)" json:"start_month"`
|
||||
AccountingStandard string `orm:"column(accounting_standard);size(20);default(1)" json:"accounting_standard"`
|
||||
Currency string `orm:"column(currency);size(10);default(CNY)" json:"currency"`
|
||||
TaxRate float64 `orm:"column(tax_rate);digits(5);decimals(2);default(13.00)" json:"tax_rate"`
|
||||
Status string `orm:"column(status);size(20);default(1)" json:"status"`
|
||||
Remark string `orm:"column(remark);type(text);null" json:"remark"`
|
||||
CreateTime time.Time `orm:"column(create_time);auto_now_add;type(datetime)" json:"create_time"`
|
||||
UpdateTime time.Time `orm:"column(update_time);auto_now;type(datetime)" json:"update_time"`
|
||||
DeleteTime *time.Time `orm:"column(delete_time);type(datetime);null" json:"delete_time"`
|
||||
}
|
||||
|
||||
func (m *ErpAccountSet) TableName() string {
|
||||
return "yz_backend_erp_account_set"
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package models
|
||||
|
||||
import "time"
|
||||
|
||||
// ErpCompanyContact 客户/供应商联系人表
|
||||
type ErpCompanyContact struct {
|
||||
ID uint64 `orm:"column(id);pk;auto" json:"id"`
|
||||
TenantID string `orm:"column(tenant_id);size(64)" json:"tenant_id"`
|
||||
CompanyType string `orm:"column(company_type);size(20)" json:"company_type"` // customer / supplier
|
||||
CompanyID uint64 `orm:"column(company_id)" json:"company_id"`
|
||||
Name string `orm:"column(name);size(50)" json:"name"`
|
||||
Gender int8 `orm:"column(gender);default(0)" json:"gender"` // 0-未知 1-男 2-女
|
||||
Phone string `orm:"column(phone);size(20)" json:"phone"`
|
||||
Mobiles string `orm:"column(mobiles);type(text);null" json:"mobiles"` // JSON数组,最多5个
|
||||
Wechat string `orm:"column(wechat);size(50)" json:"wechat"`
|
||||
QQ string `orm:"column(qq);size(50)" json:"qq"`
|
||||
Dingtalk string `orm:"column(dingtalk);size(50)" json:"dingtalk"`
|
||||
Email string `orm:"column(email);size(100)" json:"email"`
|
||||
Department string `orm:"column(department);size(50)" json:"department"`
|
||||
Position string `orm:"column(position);size(50)" json:"position"`
|
||||
HomeAddress string `orm:"column(home_address);size(255)" json:"home_address"`
|
||||
IsPrimary int8 `orm:"column(is_primary);default(0)" json:"is_primary"` // 0-否 1-是
|
||||
Status int8 `orm:"column(status);default(1)" json:"status"` // 0-离职 1-在职
|
||||
Remark string `orm:"column(remark);type(text);null" json:"remark"`
|
||||
CreateTime time.Time `orm:"column(create_time);auto_now_add;type(datetime)" json:"create_time"`
|
||||
UpdateTime time.Time `orm:"column(update_time);auto_now;type(datetime)" json:"update_time"`
|
||||
DeleteTime *time.Time `orm:"column(delete_time);type(datetime);null" json:"delete_time"`
|
||||
}
|
||||
|
||||
func (m *ErpCompanyContact) TableName() string {
|
||||
return "yz_backend_erp_company_contact"
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
package models
|
||||
|
||||
import "time"
|
||||
|
||||
// ErpNormalSetting ERP基础设置表(键值对方式): yz_erp_normalsettings
|
||||
// 每个租户可配置多条基础参数,按 config_group 分组展示
|
||||
type ErpNormalSetting struct {
|
||||
ID uint64 `orm:"column(id);pk;auto" json:"id"`
|
||||
TenantID string `orm:"column(tenant_id);size(64)" json:"tenant_id"`
|
||||
ConfigKey string `orm:"column(config_key);size(100)" json:"config_key"`
|
||||
ConfigValue string `orm:"column(config_value);type(text);null" json:"config_value"`
|
||||
ConfigName string `orm:"column(config_name);size(100)" json:"config_name"`
|
||||
ConfigGroup string `orm:"column(config_group);size(50)" json:"config_group"`
|
||||
ConfigType string `orm:"column(config_type);size(20);default(input)" json:"config_type"` // input/select/number/textarea/switch
|
||||
ConfigOptions string `orm:"column(config_options);type(text);null" json:"config_options"` // select 类型的选项,JSON格式
|
||||
SortOrder int `orm:"column(sort_order);default(0)" json:"sort_order"`
|
||||
Status int8 `orm:"column(status);default(1)" json:"status"`
|
||||
CreateTime time.Time `orm:"column(create_time);auto_now_add;type(datetime)" json:"create_time"`
|
||||
UpdateTime time.Time `orm:"column(update_time);auto_now;type(datetime)" json:"update_time"`
|
||||
}
|
||||
|
||||
func (m *ErpNormalSetting) TableName() string {
|
||||
return "yz_backend_erp_normalsettings"
|
||||
}
|
||||
|
||||
// GetErpNormalSettingsByTenant 获取租户所有启用的基础设置
|
||||
func GetErpNormalSettingsByTenant(tenantID string) ([]ErpNormalSetting, error) {
|
||||
var list []ErpNormalSetting
|
||||
_, err := Orm.QueryTable(new(ErpNormalSetting)).
|
||||
Filter("tenant_id", tenantID).
|
||||
Filter("status", 1).
|
||||
OrderBy("config_group", "sort_order", "id").
|
||||
All(&list)
|
||||
return list, err
|
||||
}
|
||||
|
||||
// GetErpNormalSettingByKey 按租户+key获取配置
|
||||
func GetErpNormalSettingByKey(tenantID, key string) *ErpNormalSetting {
|
||||
var setting ErpNormalSetting
|
||||
err := Orm.QueryTable(new(ErpNormalSetting)).
|
||||
Filter("tenant_id", tenantID).
|
||||
Filter("config_key", key).
|
||||
One(&setting)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
return &setting
|
||||
}
|
||||
@@ -71,6 +71,12 @@ func Init(_ string) {
|
||||
new(PlatformAgentApi),
|
||||
new(PlatformPasswordStore),
|
||||
new(BackendPasswordStore),
|
||||
new(BackendUserNotifyConfig),
|
||||
new(TenantCrmCustomer),
|
||||
new(TenantCrmSupplier),
|
||||
new(ErpAccountSet),
|
||||
new(ErpNormalSetting),
|
||||
new(ErpCompanyContact),
|
||||
|
||||
new(CmsArticleCategory),
|
||||
new(CmsArticle),
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
package models
|
||||
|
||||
import "time"
|
||||
|
||||
// TenantCrmCustomer 客户管理表: yz_tenant_crm_customer
|
||||
type TenantCrmCustomer struct {
|
||||
ID uint64 `orm:"column(id);pk;auto" json:"id"`
|
||||
TenantID string `orm:"column(tenant_id);size(64)" json:"tenant_id"`
|
||||
CustomerName string `orm:"column(customer_name);size(100)" json:"customer_name"`
|
||||
CustomerType string `orm:"column(customer_type);size(20)" json:"customer_type"`
|
||||
ContactPerson string `orm:"column(contact_person);size(50)" json:"contact_person"`
|
||||
ContactPhone string `orm:"column(contact_phone);size(20)" json:"contact_phone"`
|
||||
ContactEmail string `orm:"column(contact_email);size(100)" json:"contact_email"`
|
||||
CustomerLevel string `orm:"column(customer_level);size(20);default(3)" json:"customer_level"`
|
||||
Industry string `orm:"column(industry);size(50)" json:"industry"`
|
||||
RegisteredCapital string `orm:"column(registered_capital);size(50)" json:"registered_capital"`
|
||||
PaidCapital string `orm:"column(paid_capital);size(50)" json:"paid_capital"`
|
||||
EstablishDate *time.Time `orm:"column(establish_date);type(date);null" json:"establish_date"`
|
||||
AdministrativeDivision string `orm:"column(administrative_division);size(100)" json:"administrative_division"`
|
||||
EnterpriseType string `orm:"column(enterprise_type);size(50)" json:"enterprise_type"`
|
||||
TaxpayerQualification string `orm:"column(taxpayer_qualification);size(50)" json:"taxpayer_qualification"`
|
||||
BusinessScope string `orm:"column(business_scope);type(text);null" json:"business_scope"`
|
||||
Address string `orm:"column(address);size(255)" json:"address"`
|
||||
RegisterTime *time.Time `orm:"column(register_time);type(date);null" json:"register_time"`
|
||||
ExpireTime *time.Time `orm:"column(expire_time);type(date);null" json:"expire_time"`
|
||||
Status string `orm:"column(status);size(20);default(1)" json:"status"`
|
||||
IsDraft int8 `orm:"column(is_draft);default(0)" json:"is_draft"` // 0-正式 1-草稿
|
||||
Remark string `orm:"column(remark);type(text);null" json:"remark"`
|
||||
InvoiceTitle string `orm:"column(invoice_title);size(100)" json:"invoice_title"`
|
||||
TaxNumber string `orm:"column(tax_number);size(50)" json:"tax_number"`
|
||||
BankName string `orm:"column(bank_name);size(100)" json:"bank_name"`
|
||||
BankAccount string `orm:"column(bank_account);size(50)" json:"bank_account"`
|
||||
RegisteredAddress string `orm:"column(registered_address);size(255)" json:"registered_address"`
|
||||
RegisteredPhone string `orm:"column(registered_phone);size(50)" json:"registered_phone"`
|
||||
CreateTime time.Time `orm:"column(create_time);auto_now_add;type(datetime)" json:"create_time"`
|
||||
UpdateTime time.Time `orm:"column(update_time);auto_now;type(datetime)" json:"update_time"`
|
||||
DeleteTime *time.Time `orm:"column(delete_time);type(datetime);null" json:"delete_time"`
|
||||
}
|
||||
|
||||
func (m *TenantCrmCustomer) TableName() string {
|
||||
return "yz_backend_erp_customer"
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package models
|
||||
|
||||
import "time"
|
||||
|
||||
// TenantCrmSupplier 供应商管理表: yz_tenant_crm_supplier
|
||||
type TenantCrmSupplier struct {
|
||||
ID uint64 `orm:"column(id);pk;auto" json:"id"`
|
||||
TenantID string `orm:"column(tenant_id);size(64)" json:"tenant_id"`
|
||||
SupplierName string `orm:"column(supplier_name);size(100)" json:"supplier_name"`
|
||||
SupplierType string `orm:"column(supplier_type);size(20)" json:"supplier_type"`
|
||||
ContactPerson string `orm:"column(contact_person);size(50)" json:"contact_person"`
|
||||
ContactPhone string `orm:"column(contact_phone);size(20)" json:"contact_phone"`
|
||||
ContactEmail string `orm:"column(contact_email);size(100)" json:"contact_email"`
|
||||
SupplierLevel string `orm:"column(supplier_level);size(20);default(3)" json:"supplier_level"`
|
||||
Industry string `orm:"column(industry);size(50)" json:"industry"`
|
||||
RegisteredCapital string `orm:"column(registered_capital);size(50)" json:"registered_capital"`
|
||||
PaidCapital string `orm:"column(paid_capital);size(50)" json:"paid_capital"`
|
||||
EstablishDate *time.Time `orm:"column(establish_date);type(date);null" json:"establish_date"`
|
||||
AdministrativeDivision string `orm:"column(administrative_division);size(100)" json:"administrative_division"`
|
||||
EnterpriseType string `orm:"column(enterprise_type);size(50)" json:"enterprise_type"`
|
||||
TaxpayerQualification string `orm:"column(taxpayer_qualification);size(50)" json:"taxpayer_qualification"`
|
||||
BusinessScope string `orm:"column(business_scope);type(text);null" json:"business_scope"`
|
||||
Address string `orm:"column(address);size(255)" json:"address"`
|
||||
RegisterTime *time.Time `orm:"column(register_time);type(date);null" json:"register_time"`
|
||||
ExpireTime *time.Time `orm:"column(expire_time);type(date);null" json:"expire_time"`
|
||||
Status string `orm:"column(status);size(20);default(1)" json:"status"`
|
||||
IsDraft int8 `orm:"column(is_draft);default(0)" json:"is_draft"` // 0-正式 1-草稿
|
||||
Remark string `orm:"column(remark);type(text);null" json:"remark"`
|
||||
InvoiceTitle string `orm:"column(invoice_title);size(100)" json:"invoice_title"`
|
||||
TaxNumber string `orm:"column(tax_number);size(50)" json:"tax_number"`
|
||||
BankName string `orm:"column(bank_name);size(100)" json:"bank_name"`
|
||||
BankAccount string `orm:"column(bank_account);size(50)" json:"bank_account"`
|
||||
RegisteredAddress string `orm:"column(registered_address);size(255)" json:"registered_address"`
|
||||
RegisteredPhone string `orm:"column(registered_phone);size(50)" json:"registered_phone"`
|
||||
CreateTime time.Time `orm:"column(create_time);auto_now_add;type(datetime)" json:"create_time"`
|
||||
UpdateTime time.Time `orm:"column(update_time);auto_now;type(datetime)" json:"update_time"`
|
||||
DeleteTime *time.Time `orm:"column(delete_time);type(datetime);null" json:"delete_time"`
|
||||
}
|
||||
|
||||
func (m *TenantCrmSupplier) TableName() string {
|
||||
return "yz_backend_erp_supplier"
|
||||
}
|
||||
Reference in New Issue
Block a user