作者 陈志颖

chore:数据库初始化

  1 +/**
  2 + @author: stevechan
  3 + @date: 2021/2/1
  4 + @note:
  5 +**/
  6 +
  7 +package main
  8 +
  9 +import (
  10 + "fmt"
  11 + "time"
  12 +
  13 + "github.com/go-pg/pg/v10"
  14 + "github.com/go-pg/pg/v10/orm"
  15 +)
  16 +
  17 +// 默认选中栏目
  18 +var DefaultColumns = []Column{
  19 + {
  20 + Id: "index",
  21 + ParamCn: "序号",
  22 + ParamFix: 1,
  23 + }, {
  24 + Id: "orderId",
  25 + ParamCn: "订单号",
  26 + ParamFix: 2,
  27 + }, {
  28 + Id: "shipmentsId",
  29 + ParamCn: "发货单号",
  30 + ParamFix: 2,
  31 + }, {
  32 + Id: "saleDate",
  33 + ParamCn: "销售日期",
  34 + ParamFix: 2,
  35 + }, {
  36 + Id: "orderNum",
  37 + ParamCn: "订单数量",
  38 + ParamFix: 2,
  39 + }, {
  40 + Id: "quantityControl",
  41 + ParamCn: "数量调整",
  42 + ParamFix: 2,
  43 + }, {
  44 + Id: "orderPrice",
  45 + ParamCn: "订单金额",
  46 + ParamFix: 2,
  47 + }, {
  48 + Id: "priceControl",
  49 + ParamCn: "金额调整",
  50 + ParamFix: 2,
  51 + }, {
  52 + Id: "orderDist",
  53 + ParamCn: "订单区域",
  54 + ParamFix: 2,
  55 + }, {
  56 + Id: "partnerCategory",
  57 + ParamCn: "合伙人类型",
  58 + ParamFix: 2,
  59 + }, {
  60 + Id: "buyer",
  61 + ParamCn: "客户",
  62 + ParamFix: 2,
  63 + }, {
  64 + Id: "partner",
  65 + ParamCn: "合伙人",
  66 + ParamFix: 2,
  67 + },
  68 +}
  69 +
  70 +// 默认未选中栏目
  71 +var DefaultInvalidColumns = []Column{
  72 + {
  73 + Id: "updateTime",
  74 + ParamCn: "更新时间",
  75 + ParamFix: 2,
  76 + }, {
  77 + Id: "createTime",
  78 + ParamCn: "创建时间",
  79 + ParamFix: 2,
  80 + },
  81 +}
  82 +
  83 +// 栏目项值对象
  84 +type Column struct {
  85 + // 列标记
  86 + Id string `json:"id"`
  87 + // 列标记中文
  88 + ParamCn string `json:"paramCn"`
  89 + // 列标记是否固定,1:固定,2:不固定
  90 + ParamFix int `json:"paramFix"`
  91 +}
  92 +
  93 +type ColumnSetting struct {
  94 + // 栏目设置id
  95 + Id int64
  96 + // 栏目设置关联用户公司id
  97 + CompanyId int
  98 + // 栏目设置创建时间
  99 + CreatedAt time.Time
  100 + // 栏目设置描述
  101 + Description string
  102 + // 栏目设置模块名称
  103 + Key string
  104 + // 栏目设置关联用户uid
  105 + Uid int64
  106 + // 栏目设置更新时间
  107 + UpdatedAt time.Time
  108 + // 栏目设置关联用户名称
  109 + UserName string
  110 + // 栏目数组
  111 + Value []Column `pg:",array"`
  112 + // 无效栏目数组
  113 + InvalidValue []Column `pg:",array"`
  114 +}
  115 +
  116 +func (c ColumnSetting) String() string {
  117 + return fmt.Sprintf("Story<%d %v %v>", c.Id, c.CompanyId, c.Uid)
  118 +}
  119 +
  120 +type AdminPermissionBase struct {
  121 + Id int64 `json:"id"`
  122 + Code string `json:"code"`
  123 +}
  124 +
  125 +type Partner struct {
  126 + // 合伙人ID
  127 + Id int64 `json:"id"`
  128 + // 合伙人姓名
  129 + PartnerName string `json:"partnerName"`
  130 + // 登录账号
  131 + Account string `json:"account"`
  132 +}
  133 +
  134 +type Users struct {
  135 + tableName struct{} `pg:"users"`
  136 + Id int64 `pg:",pk"` //用户id
  137 + CompanyId int64 //公司id
  138 + OpenId int64 //统一用户中心
  139 + Name string //用户名称
  140 + Sex int8 //性别:【0:未知】【1:男】【2:女】
  141 + JobNum string //工号
  142 + Phone string //手机号,同账号
  143 + PrivatePhone string //私人手机号
  144 + Email string //邮件
  145 + ExtensionNum string //分机号
  146 + EntryTime time.Time //入职时间
  147 + Workspace string //工作地
  148 + Status int8 //状态:【1:正常】【 2:禁用】
  149 + Avatar string ///头像
  150 + Remarks string //备注
  151 + AdminType int8 //是否为当前公司负责人 【1:是】【2:否】
  152 + ChargeStatus int8 //是否为当前公司主管 【1:是】【2:否】
  153 + Permission []AdminPermissionBase //权限
  154 + AccessPartners []Partner //可查看的合伙人
  155 + IsSenior int8 //是否是公司高管【1:是】【2:否】;用于确定是否可以拥有“可查看的合伙人”
  156 + CreateAt time.Time
  157 + UpdateAt time.Time
  158 + DeleteAt time.Time
  159 +}
  160 +
  161 +func (u Users) String() string {
  162 + return fmt.Sprintf("User<%d %s %v>", u.Id, u.Name, u.CompanyId)
  163 +}
  164 +
  165 +func main() {
  166 + db := pg.Connect(&pg.Options{
  167 + User: "postgres",
  168 + Addr: ":5432",
  169 + Password: "1993618jack",
  170 + Database: "partner_test",
  171 + })
  172 + defer db.Close()
  173 +
  174 + err := createSchema(db)
  175 + if err != nil {
  176 + panic(err)
  177 + }
  178 +
  179 + // Select all users.
  180 + var users []Users
  181 + err = db.Model(&users).Select()
  182 + if err != nil {
  183 + panic(err)
  184 + }
  185 +
  186 + var companyUidMap = map[int64]int64{}
  187 +
  188 + for _, user := range users {
  189 + companyUidMap[user.CompanyId] = user.Id
  190 + }
  191 +
  192 + for companyId, uid := range companyUidMap {
  193 + newColumnSetting := &ColumnSetting{
  194 + CompanyId: int(companyId),
  195 + CreatedAt: time.Now(),
  196 + Description: "订单栏目设置",
  197 + Key: "order_base",
  198 + Uid: uid,
  199 + UpdatedAt: time.Now(),
  200 + UserName: "",
  201 + Value: DefaultColumns,
  202 + InvalidValue: DefaultInvalidColumns,
  203 + }
  204 +
  205 + _, err = db.Model(newColumnSetting).Insert()
  206 + if err != nil {
  207 + panic(err)
  208 + }
  209 + }
  210 +}
  211 +
  212 +// createSchema creates database schema for User and Story models.
  213 +func createSchema(db *pg.DB) error {
  214 + models := []interface{}{
  215 + (*Users)(nil),
  216 + (*ColumnSetting)(nil),
  217 + }
  218 +
  219 + for _, model := range models {
  220 + err := db.Model(model).CreateTable(&orm.CreateTableOptions{
  221 + Temp: false,
  222 + IfNotExists: true,
  223 + FKConstraints: true,
  224 + })
  225 + if err != nil {
  226 + return err
  227 + }
  228 + }
  229 + return nil
  230 +}