作者 陈志颖

chore:数据库初始化

/**
@author: stevechan
@date: 2021/2/1
@note:
**/
package main
import (
"fmt"
"time"
"github.com/go-pg/pg/v10"
"github.com/go-pg/pg/v10/orm"
)
// 默认选中栏目
var DefaultColumns = []Column{
{
Id: "index",
ParamCn: "序号",
ParamFix: 1,
}, {
Id: "orderId",
ParamCn: "订单号",
ParamFix: 2,
}, {
Id: "shipmentsId",
ParamCn: "发货单号",
ParamFix: 2,
}, {
Id: "saleDate",
ParamCn: "销售日期",
ParamFix: 2,
}, {
Id: "orderNum",
ParamCn: "订单数量",
ParamFix: 2,
}, {
Id: "quantityControl",
ParamCn: "数量调整",
ParamFix: 2,
}, {
Id: "orderPrice",
ParamCn: "订单金额",
ParamFix: 2,
}, {
Id: "priceControl",
ParamCn: "金额调整",
ParamFix: 2,
}, {
Id: "orderDist",
ParamCn: "订单区域",
ParamFix: 2,
}, {
Id: "partnerCategory",
ParamCn: "合伙人类型",
ParamFix: 2,
}, {
Id: "buyer",
ParamCn: "客户",
ParamFix: 2,
}, {
Id: "partner",
ParamCn: "合伙人",
ParamFix: 2,
},
}
// 默认未选中栏目
var DefaultInvalidColumns = []Column{
{
Id: "updateTime",
ParamCn: "更新时间",
ParamFix: 2,
}, {
Id: "createTime",
ParamCn: "创建时间",
ParamFix: 2,
},
}
// 栏目项值对象
type Column struct {
// 列标记
Id string `json:"id"`
// 列标记中文
ParamCn string `json:"paramCn"`
// 列标记是否固定,1:固定,2:不固定
ParamFix int `json:"paramFix"`
}
type ColumnSetting struct {
// 栏目设置id
Id int64
// 栏目设置关联用户公司id
CompanyId int
// 栏目设置创建时间
CreatedAt time.Time
// 栏目设置描述
Description string
// 栏目设置模块名称
Key string
// 栏目设置关联用户uid
Uid int64
// 栏目设置更新时间
UpdatedAt time.Time
// 栏目设置关联用户名称
UserName string
// 栏目数组
Value []Column `pg:",array"`
// 无效栏目数组
InvalidValue []Column `pg:",array"`
}
func (c ColumnSetting) String() string {
return fmt.Sprintf("Story<%d %v %v>", c.Id, c.CompanyId, c.Uid)
}
type AdminPermissionBase struct {
Id int64 `json:"id"`
Code string `json:"code"`
}
type Partner struct {
// 合伙人ID
Id int64 `json:"id"`
// 合伙人姓名
PartnerName string `json:"partnerName"`
// 登录账号
Account string `json:"account"`
}
type Users struct {
tableName struct{} `pg:"users"`
Id int64 `pg:",pk"` //用户id
CompanyId int64 //公司id
OpenId int64 //统一用户中心
Name string //用户名称
Sex int8 //性别:【0:未知】【1:男】【2:女】
JobNum string //工号
Phone string //手机号,同账号
PrivatePhone string //私人手机号
Email string //邮件
ExtensionNum string //分机号
EntryTime time.Time //入职时间
Workspace string //工作地
Status int8 //状态:【1:正常】【 2:禁用】
Avatar string ///头像
Remarks string //备注
AdminType int8 //是否为当前公司负责人 【1:是】【2:否】
ChargeStatus int8 //是否为当前公司主管 【1:是】【2:否】
Permission []AdminPermissionBase //权限
AccessPartners []Partner //可查看的合伙人
IsSenior int8 //是否是公司高管【1:是】【2:否】;用于确定是否可以拥有“可查看的合伙人”
CreateAt time.Time
UpdateAt time.Time
DeleteAt time.Time
}
func (u Users) String() string {
return fmt.Sprintf("User<%d %s %v>", u.Id, u.Name, u.CompanyId)
}
func main() {
db := pg.Connect(&pg.Options{
User: "postgres",
Addr: ":5432",
Password: "1993618jack",
Database: "partner_test",
})
defer db.Close()
err := createSchema(db)
if err != nil {
panic(err)
}
// Select all users.
var users []Users
err = db.Model(&users).Select()
if err != nil {
panic(err)
}
var companyUidMap = map[int64]int64{}
for _, user := range users {
companyUidMap[user.CompanyId] = user.Id
}
for companyId, uid := range companyUidMap {
newColumnSetting := &ColumnSetting{
CompanyId: int(companyId),
CreatedAt: time.Now(),
Description: "订单栏目设置",
Key: "order_base",
Uid: uid,
UpdatedAt: time.Now(),
UserName: "",
Value: DefaultColumns,
InvalidValue: DefaultInvalidColumns,
}
_, err = db.Model(newColumnSetting).Insert()
if err != nil {
panic(err)
}
}
}
// createSchema creates database schema for User and Story models.
func createSchema(db *pg.DB) error {
models := []interface{}{
(*Users)(nil),
(*ColumnSetting)(nil),
}
for _, model := range models {
err := db.Model(model).CreateTable(&orm.CreateTableOptions{
Temp: false,
IfNotExists: true,
FKConstraints: true,
})
if err != nil {
return err
}
}
return nil
}
... ...