houyaf 3 éve
szülő
commit
facdc0e214

+ 34 - 0
datamodels/msg.go

@@ -0,0 +1,34 @@
+package datamodels
+
+import "time"
+
+type Msg struct {
+    OcId          int64     `json:"ocId"            xorm:"'oc_id'         bigint     pk comment('OC ID')          "`
+    
+    MsgId         int64     `json:"msgId"           xorm:"'msg_id'        bigint     pk comment('主键ID')          "`
+    MsgTitle      string    `json:"msgTitle"        xorm:"'msg_title'     varchar(50)   comment('模型名称')         "`
+    MsgFrId       int64     `json:"msgFrId"         xorm:"'msg_fr_id'     bigint        comment('主键ID')          "`
+    MsgToGroup    string    `json:"msgToGroup"      xorm:"'msg_to_group'  varchar(255)  comment('描述')            "`
+    MsgTo         string    `json:"msgTo"           xorm:"'msg_to'        varchar(255)  comment('描述')            "`
+    MsgCc         string    `json:"msgCc"           xorm:"'msg_cc'        varchar(255)  comment('描述')            "`
+    
+    MsgCatId      int64     `json:"msgCatId"        xorm:"'msg_cat_id'    bigint        comment('主键ID')          "`
+    MsgContent    string    `json:"msgContent"      xorm:"'msg_content'   varchar(50)   comment('描述')            "`
+    MsgDetail     string    `json:"msgDetail"       xorm:"'msg_detail'    varchar(50)   comment('描述')            "`
+    MsgTime       time.Time `json:"msgTime"         xorm:"'msg_time'"`
+    
+    Status        int64     `json:"status"          xorm:"'status'        bigint        comment('Status')         "`
+    MsgParams     string    `json:"msgParams"       xorm:"'msg_params'    varchar(50)   comment('Msg Params')     "`
+    
+    CreatedBy     int64     `json:"createdBy"       xorm:"'created_by'"`
+    CreatedAt     time.Time `json:"createdAt"       xorm:"'created_at'"`
+    UpdatedBy     int64     `json:"updatedBy"       xorm:"'updated_by'"`
+    UpdatedAt     time.Time `json:"updatedAt"       xorm:"'updated_at'"`
+    DeletedFlag   int64     `json:"deletedFlag"     xorm:"'deleted_flag'"`
+    DeletedBy     int64     `json:"deletedBy"       xorm:"'deleted_by'"`
+    DeletedAt     time.Time `json:"deletedAt"       xorm:"'deleted_at'"`
+}
+
+func (t *Msg) TableName() string {
+    return "msg"
+}

+ 28 - 0
datamodels/msg_cat.go

@@ -0,0 +1,28 @@
+package datamodels
+
+import "time"
+
+type MsgCat struct {
+    OcId          int64     `json:"-"               xorm:"'oc_id'             bigint     pk comment('组织ID:公司或机构或单位ID')"`
+    MsgCatId      int64     `json:"msgCatId"        xorm:"'msg_cat_id'        bigint     pk comment('主键ID')                 "`
+    MsgCatTitle   string    `json:"msgCatTitle"     xorm:"'msg_cat_title'     varchar(50)   comment('群组类型名称')            "`
+    MsgCatDesc    string    `json:"msgCatDesc"      xorm:"'msg_cat_desc'      varchar(50)   comment('描述')                   "`
+    IsLink        int64     `json:"isLink"          xorm:"'is_link'           bigint        comment('是否可修改')              "`
+    IsFixed       int64     `json:"isFixed"         xorm:"'is_fixed'          bigint        comment('是否可修改')              "`
+    IsDetailed    int64     `json:"isDetailed"      xorm:"'is_detailed'       bigint        comment('是否可修改')              "`
+    
+    MsgCatLink          string    `json:"msgCatLink"        xorm:"'msg_cat_link'        varchar(50)   comment('描述')         "`
+    MsgCatLinkParams    string    `json:"msgCatLinkParams"  xorm:"'msg_cat_link_params' varchar(50)   comment('描述')         "`
+    
+    CreatedBy     int64     `json:"createdBy"       xorm:"'created_by'"`
+    CreatedAt     time.Time `json:"createdAt"       xorm:"'created_at'"`
+    UpdatedBy     int64     `json:"updatedBy"       xorm:"'updated_by'"`
+    UpdatedAt     time.Time `json:"updatedAt"       xorm:"'updated_at'"`
+    DeletedFlag   int64     `json:"deletedFlag"     xorm:"'deleted_flag'"`
+    DeletedBy     int64     `json:"deletedBy"       xorm:"'deleted_by'"`
+    DeletedAt     time.Time `json:"deletedAt"       xorm:"'deleted_at'"`
+}
+
+func (t *MsgCat) TableName() string {
+    return "msg_cat"
+}

+ 22 - 0
datamodels/msg_cc.go

@@ -0,0 +1,22 @@
+package datamodels
+
+import "time"
+
+type MsgCc struct {
+    OcId          int64     `json:"-"               xorm:"'oc_id'             bigint     pk comment('组织ID:公司或机构或单位ID')"`
+    MsgId         int64     `json:"msgId"           xorm:"'msg_id'            bigint     pk comment('主键ID')                 "`
+    MsgCcId       int64     `json:"msgCcId"         xorm:"'msg_cc_id'         bigint     pk comment('主键ID')                 "`
+    Status        int64     `json:"status"          xorm:"'status'            bigint     pk comment('主键ID')                 "`
+    
+    CreatedBy     int64     `json:"createdBy"       xorm:"'created_by'"`
+    CreatedAt     time.Time `json:"createdAt"       xorm:"'created_at'"`
+    UpdatedBy     int64     `json:"updatedBy"       xorm:"'updated_by'"`
+    UpdatedAt     time.Time `json:"updatedAt"       xorm:"'updated_at'"`
+    DeletedFlag   int64     `json:"deletedFlag"     xorm:"'deleted_flag'"`
+    DeletedBy     int64     `json:"deletedBy"       xorm:"'deleted_by'"`
+    DeletedAt     time.Time `json:"deletedAt"       xorm:"'deleted_at'"`
+}
+
+func (t *MsgCc) TableName() string {
+    return "msg_cc"
+}

+ 22 - 0
datamodels/msg_to.go

@@ -0,0 +1,22 @@
+package datamodels
+
+import "time"
+
+type MsgTo struct {
+    OcId          int64     `json:"-"               xorm:"'oc_id'             bigint     pk comment('组织ID:公司或机构或单位ID')"`
+    MsgId         int64     `json:"msgId"           xorm:"'msg_id'            bigint     pk comment('主键ID')                 "`
+    MsgToId       int64     `json:"msgToId"         xorm:"'msg_to_id'         bigint     pk comment('主键ID')                 "`
+    Status        int64     `json:"status"          xorm:"'status'            bigint     pk comment('主键ID')                 "`
+    
+    CreatedBy     int64     `json:"createdBy"       xorm:"'created_by'"`
+    CreatedAt     time.Time `json:"createdAt"       xorm:"'created_at'"`
+    UpdatedBy     int64     `json:"updatedBy"       xorm:"'updated_by'"`
+    UpdatedAt     time.Time `json:"updatedAt"       xorm:"'updated_at'"`
+    DeletedFlag   int64     `json:"deletedFlag"     xorm:"'deleted_flag'"`
+    DeletedBy     int64     `json:"deletedBy"       xorm:"'deleted_by'"`
+    DeletedAt     time.Time `json:"deletedAt"       xorm:"'deleted_at'"`
+}
+
+func (t *MsgTo) TableName() string {
+    return "msg_to"
+}

+ 5 - 1
repositories/doc_cat_repo.go

@@ -119,10 +119,14 @@ func (d *DocCatRepo) Create(data *datamodels.DocCat) error {
 }
 
 func (d *DocCatRepo) Update(data *datamodels.DocCat) error {
+    ocId     := data.OcId
     docCatId := data.DocCatId
     
     data.UpdatedAt = time.Now()
-    _, err := d.engine.Where("doc_cat_id = ?", docCatId).Update(data)
+    _, err := d.engine.
+        Where("oc_id = ?", ocId).
+        Where("doc_cat_id = ?", docCatId).
+        Update(data)
     return err
 }
 

+ 142 - 0
repositories/msg_cat_repo.go

@@ -0,0 +1,142 @@
+package repositories
+
+
+import (
+    "fmt"
+    "time"
+    "xorm.io/xorm"
+    "xps/datamodels"
+    "xps/viewmodels"
+)
+
+type MsgCatRepo struct {
+    engine *xorm.Engine
+}
+
+func NewMsgCatRepo(engine *xorm.Engine) *MsgCatRepo {
+    return &MsgCatRepo{
+        engine: engine,
+    }
+}
+
+func (d *MsgCatRepo) GetPage(m map[string]interface{}) (*viewmodels.PageResult, error) {
+    limit     := m["limit"].(int)
+    page      := m["page"].(int)
+    
+    sqlSelect := ` SELECT A.*                `
+    sqlFrom   := ` FROM   msg_cat   AS A     `
+    sqlWhere  := ` WHERE  A.deleted_flag = 0 `
+    if msgCatId, ok := m["msgCatId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.msg_cat_id = %d ", msgCatId)
+    }
+    if keywords, ok := m["keywords"]; ok {
+        sqlWhere += " AND A.msg_cat_title like '%" + fmt.Sprintf("%s", keywords) + "%' "
+    }
+    
+    sqlCount := ` SELECT COUNT(*)            `
+    total, err1 := d.engine.SQL(sqlCount + sqlFrom + sqlWhere).Count(new(datamodels.MsgCat))
+    if err1 != nil {
+        return nil, err1
+    }
+    
+    sqlOrderBy := " ORDER BY A.oc_id, A.msg_cat_id "
+    pageStart  := (page - 1) * limit
+    sqlLimit   := fmt.Sprintf(" LIMIT %d OFFSET %d ", limit, pageStart)
+    
+    datalist := make([]datamodels.MsgCat, 0)
+    err2 := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy + sqlLimit).Find(&datalist)
+    if err2 != nil {
+        return nil, err2
+    }
+    
+    pageResult := &viewmodels.PageResult{}
+    pageResult.Data     = datalist
+    pageResult.Total    = total
+    pageResult.PageSize = limit
+    pageResult.Page     = page
+    return pageResult, nil
+}
+
+func (d *MsgCatRepo) GetList(m map[string]interface{}) ([]viewmodels.MsgCatInfo, error) {
+    sqlSelect  := ` SELECT A.*                `
+    sqlFrom    := ` FROM  msg_cat AS A        `
+    sqlWhere   := ` WHERE A.deleted_flag = 0  `
+    if ocId, ok := m["ocId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.oc_id = %d ", ocId)
+    }
+    if msgCatId, ok := m["msgCatId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.msg_cat_id = %d ", msgCatId)
+    }
+    if keywords, ok := m["keywords"]; ok {
+        sqlWhere += ` AND   A.msg_cat_title like ` + "'%" + fmt.Sprintf("%s", keywords) + "%'"
+    }
+    
+    sqlOrderBy := " ORDER BY A.oc_id, A.msg_cat_id "
+    datalist   := make([]viewmodels.MsgCatInfo, 0)
+    err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy).Find(&datalist)
+    if err != nil {
+        return nil, err
+    } else {
+        return datalist, nil
+    }
+}
+
+func (d *MsgCatRepo) GetById(ocId, msgCatId int64) (*viewmodels.MsgCatInfo, error) {
+    sqlSelect  := ` SELECT A.*                `
+    sqlFrom    := ` FROM  msg_cat AS A        `
+    sqlWhere   := ` WHERE A.deleted_flag = 0  `
+    sqlWhere   += fmt.Sprintf(" AND A.oc_id = %d ", ocId)
+    sqlWhere   += fmt.Sprintf(" AND A.msg_cat_id  = %d ", msgCatId)
+    data := &viewmodels.MsgCatInfo{}
+    has, err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere).Get(data)
+    if !has || err != nil {
+        return nil, err
+    } else {
+        return data, nil
+    }
+}
+
+func (d *MsgCatRepo) GetListById(ocId int64) ([]viewmodels.MsgCatInfo, error) {
+    sqlSelect  := ` SELECT A.*                `
+    sqlFrom    := ` FROM  msg_cat AS A        `
+    sqlWhere   := ` WHERE A.deleted_flag = 0  `
+    sqlWhere   += fmt.Sprintf(" AND A.oc_id = %d ", ocId)
+    sqlOrderBy := " ORDER BY A.oc_id, A.msg_cat_id "
+    datalist   := make([]viewmodels.MsgCatInfo, 0)
+    err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy).Find(&datalist)
+    if err != nil {
+        return nil, err
+    } else {
+        return datalist, nil
+    }
+}
+
+
+func (d *MsgCatRepo) Create(data *datamodels.MsgCat) error {
+    data.CreatedAt = time.Now()
+    _, err := d.engine.Insert(data)
+    return err
+}
+
+func (d *MsgCatRepo) Update(data *datamodels.MsgCat) error {
+    msgCatId := data.MsgCatId
+    data.UpdatedAt = time.Now()
+    _, err := d.engine.Where("msg_cat_id = ?", msgCatId).Update(data)
+    return err
+}
+
+func (d *MsgCatRepo) Delete(m map[string]interface{}) error {
+    ocId      := m["ocId"].(int64)
+    msgCatId  := m["msgCatId"].(int64)
+    deletedBy := m["deletedBy"].(int64)
+    
+    data := &datamodels.MsgCat{}
+    data.DeletedFlag = 1
+    data.DeletedBy = deletedBy
+    data.DeletedAt = time.Now()
+    _, err := d.engine.
+        Where("oc_id = ?", ocId).
+        Where("msg_cat_id = ?", msgCatId).
+        Update(data)
+    return err
+}

+ 49 - 0
repositories/msg_cc_repo.go

@@ -0,0 +1,49 @@
+package repositories
+
+import (
+    "time"
+    "xorm.io/xorm"
+    "xps/datamodels"
+)
+
+type MsgCcRepo struct {
+    engine *xorm.Engine
+}
+
+func NewMsgCcRepo(engine *xorm.Engine) *MsgCatRepo {
+    return &MsgCatRepo{
+        engine: engine,
+    }
+}
+
+
+func (d *MsgCcRepo) Create(data *datamodels.MsgCc) error {
+    data.CreatedAt = time.Now()
+    _, err := d.engine.Insert(data)
+    return err
+}
+
+func (d *MsgCcRepo) Update(data *datamodels.MsgCc) error {
+    msgCcId := data.MsgCcId
+    data.UpdatedAt = time.Now()
+    _, err := d.engine.
+        Where("msg_cc_id = ?", msgCcId).
+        Update(data)
+    return err
+}
+
+func (d *MsgCcRepo) Delete(m map[string]interface{}) error {
+    ocId      := m["ocId"].(int64)
+    msgCcId  := m["msgCcId"].(int64)
+    deletedBy := m["deletedBy"].(int64)
+    
+    data := &datamodels.MsgCat{}
+    data.DeletedFlag = 1
+    data.DeletedBy = deletedBy
+    data.DeletedAt = time.Now()
+    _, err := d.engine.
+        Where("oc_id = ?", ocId).
+        Where("msg_cc_id = ?", msgCcId).
+        Update(data)
+    return err
+}

+ 226 - 0
repositories/msg_repo.go

@@ -0,0 +1,226 @@
+package repositories
+
+
+import (
+    "fmt"
+    "time"
+    "xorm.io/xorm"
+    "xps/datamodels"
+    "xps/viewmodels"
+)
+
+type MsgRepo struct {
+    engine *xorm.Engine
+}
+
+func NewMsgRepo(engine *xorm.Engine) *MsgRepo {
+    return &MsgRepo{
+        engine: engine,
+    }
+}
+
+func (d *MsgRepo) GetPage(m map[string]interface{}) (*viewmodels.PageResult, error) {
+    limit     := m["limit"].(int)
+    page      := m["page"].(int)
+    
+    sqlSelect := ` SELECT   M.oc_id,
+                            M.msg_id,
+                            M.msg_fr_id,
+                            A.account_name      AS msg_fr_name,
+                            A.account_real_name AS msg_fr_real_name,
+                            A.account_avatar    AS msg_fr_avatar,
+                            M.msg_to_group,
+                            M.msg_cc,
+                            M.msg_to,
+                            M.msg_content,
+                            M.msg_detail,
+                            M.msg_cat_id,
+                            MC.msg_cat_title,
+                            MC.is_link,
+                            MC.msg_cat_link,
+                            MC.msg_cat_link_params,
+                            M.msg_params,
+                            MC.is_detailed,
+                            M.status,
+                            M.msg_time       `
+    sqlFrom   := `  FROM      msg       AS M
+                    LEFT JOIN account   AS A  ON (M.oc_id       = A.oc_id AND M.msg_fr_id = A.account_id)
+                    LEFT JOIN msg_to    AS B  ON (M.oc_id       = B.oc_id AND M.msg_id    = B.msg_id AND B.msg_to_id=#{msgToCc, jdbcType=BIGINT})
+                    LEFT JOIN msg_cc    AS C  ON (M.oc_id       = C.oc_id AND M.msg_id    = C.msg_id AND C.msg_cc_id=#{msgToCc, jdbcType=BIGINT})
+                    LEFT JOIN msg_cat   AS MC ON (MC.msg_cat_id = M.msg_cat_id)  `
+    sqlWhere  := `  WHERE  A.deleted_flag = 0 `
+    if ocId, ok := m["ocId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND M.oc_id = %d", ocId)
+    }
+    if msgFrId, ok := m["msgFrId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND M.msg_fr_id = %d ", msgFrId)
+    }
+    if msgToCc, ok := m["msgToCc"]; ok {
+        sqlWhere += `
+            AND (
+                EXISTS (
+                    SELECT 1 FROM msg_to TT
+                    WHERE M.oc_id = TT.oc_id AND M.msg_id = TT.msg_id AND TT.msg_to_id = ` + fmt.Sprintf("%d", msgToCc)
+        sqlWhere += `
+                ) OR
+                EXISTS (
+                    SELECT 1 FROM msg_cc CC
+                    WHERE M.oc_id = CC.oc_id AND M.msg_id = CC.msg_id AND CC.msg_cc_id = ` + fmt.Sprintf("%d", msgToCc)
+        sqlWhere += `
+                )
+            ) `
+    }
+    
+    sqlCount := ` SELECT COUNT(*)            `
+    total, err1 := d.engine.SQL(sqlCount + sqlFrom + sqlWhere).Count(new(datamodels.Msg))
+    if err1 != nil {
+        return nil, err1
+    }
+    
+    sqlOrderBy := " BY M.created_at DESC "
+    pageStart  := (page - 1) * limit
+    sqlLimit   := fmt.Sprintf(" LIMIT %d OFFSET %d ", limit, pageStart)
+    
+    datalist := make([]datamodels.Msg, 0)
+    err2 := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy + sqlLimit).Find(&datalist)
+    if err2 != nil {
+        return nil, err2
+    }
+    
+    pageResult := &viewmodels.PageResult{}
+    pageResult.Data     = datalist
+    pageResult.Total    = total
+    pageResult.PageSize = limit
+    pageResult.Page     = page
+    return pageResult, nil
+}
+
+func (d *MsgRepo) GetList(m map[string]interface{}) ([]viewmodels.MsgInfo, error) {
+    sqlSelect := ` SELECT   M.oc_id,
+                            M.msg_id,
+                            M.msg_fr_id,
+                            A.account_name      AS msg_fr_name,
+                            A.account_real_name AS msg_fr_real_name,
+                            A.account_avatar    AS msg_fr_avatar,
+                            M.msg_to_group,
+                            M.msg_cc,
+                            M.msg_to,
+                            M.msg_content,
+                            M.msg_detail,
+                            M.msg_cat_id,
+                            MC.msg_cat_title,
+                            MC.is_link,
+                            MC.msg_cat_link,
+                            MC.msg_cat_link_params,
+                            M.msg_params,
+                            MC.is_detailed,
+                            M.status,
+                            M.msg_time       `
+    sqlFrom   := `  FROM      msg       AS M
+                    LEFT JOIN account   AS A  ON (M.oc_id       = A.oc_id AND M.msg_fr_id = A.account_id)
+                    LEFT JOIN msg_to    AS B  ON (M.oc_id       = B.oc_id AND M.msg_id    = B.msg_id AND B.msg_to_id=#{msgToCc, jdbcType=BIGINT})
+                    LEFT JOIN msg_cc    AS C  ON (M.oc_id       = C.oc_id AND M.msg_id    = C.msg_id AND C.msg_cc_id=#{msgToCc, jdbcType=BIGINT})
+                    LEFT JOIN msg_cat   AS MC ON (MC.msg_cat_id = M.msg_cat_id)  `
+    sqlWhere  := `  WHERE  A.deleted_flag = 0 `
+    if ocId, ok := m["ocId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND M.oc_id = %d", ocId)
+    }
+    if msgFrId, ok := m["msgFrId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND M.msg_fr_id = %d ", msgFrId)
+    }
+    if msgToCc, ok := m["msgToCc"]; ok {
+        sqlWhere += `
+            AND (
+                EXISTS (
+                    SELECT 1 FROM msg_to TT
+                    WHERE M.oc_id = TT.oc_id AND M.msg_id = TT.msg_id AND TT.msg_to_id = ` + fmt.Sprintf("%d", msgToCc)
+        sqlWhere += `
+                ) OR
+                EXISTS (
+                    SELECT 1 FROM msg_cc CC
+                    WHERE M.oc_id = CC.oc_id AND M.msg_id = CC.msg_id AND CC.msg_cc_id = ` + fmt.Sprintf("%d", msgToCc)
+        sqlWhere += `
+                )
+            ) `
+    }
+    
+    sqlOrderBy := " ORDER BY M.created_at DESC "
+    datalist   := make([]viewmodels.MsgInfo, 0)
+    err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy).Find(&datalist)
+    if err != nil {
+        return nil, err
+    } else {
+        return datalist, nil
+    }
+}
+
+func (d *MsgRepo) GetById(ocId, msgId int64) (*viewmodels.MsgInfo, error) {
+    sqlSelect := ` SELECT   M.oc_id,
+                            M.msg_id,
+                            M.msg_fr_id,
+                            A.account_name      AS msg_fr_name,
+                            A.account_real_name AS msg_fr_real_name,
+                            A.account_avatar    AS msg_fr_avatar,
+                            M.msg_to_group,
+                            M.msg_cc,
+                            M.msg_to,
+                            M.msg_content,
+                            M.msg_detail,
+                            M.msg_cat_id,
+                            MC.msg_cat_title,
+                            MC.is_link,
+                            MC.msg_cat_link,
+                            MC.msg_cat_link_params,
+                            M.msg_params,
+                            MC.is_detailed,
+                            M.status,
+                            M.msg_time       `
+    sqlFrom   := `  FROM      msg       AS M
+                    LEFT JOIN account   AS A  ON (M.oc_id       = A.oc_id AND M.msg_fr_id = A.account_id)
+                    LEFT JOIN msg_to    AS B  ON (M.oc_id       = B.oc_id AND M.msg_id    = B.msg_id AND B.msg_to_id=#{msgToCc, jdbcType=BIGINT})
+                    LEFT JOIN msg_cc    AS C  ON (M.oc_id       = C.oc_id AND M.msg_id    = C.msg_id AND C.msg_cc_id=#{msgToCc, jdbcType=BIGINT})
+                    LEFT JOIN msg_cat   AS MC ON (MC.msg_cat_id = M.msg_cat_id)  `
+    sqlWhere  := `  WHERE  A.deleted_flag = 0 `
+    sqlWhere   += fmt.Sprintf(" AND A.oc_id = %d ", ocId)
+    sqlWhere   += fmt.Sprintf(" AND A.msg_id  = %d ", msgId)
+    data := &viewmodels.MsgInfo{}
+    has, err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere).Get(data)
+    if !has || err != nil {
+        return nil, err
+    } else {
+        return data, nil
+    }
+}
+
+func (d *MsgRepo) Create(data *datamodels.Msg) error {
+    data.CreatedAt = time.Now()
+    _, err := d.engine.Insert(data)
+    return err
+}
+
+func (d *MsgRepo) Update(data *datamodels.Msg) error {
+    msgCatId := data.MsgId
+    data.UpdatedAt = time.Now()
+    _, err := d.engine.Where("msg_cat_id = ?", msgCatId).Update(data)
+    return err
+}
+
+func (d *MsgRepo) Delete(m map[string]interface{}) error {
+    ocId      := m["ocId"].(int64)
+    msgId     := m["msgId"].(int64)
+    deletedBy := m["deletedBy"].(int64)
+    
+    data := &datamodels.Msg{}
+    data.DeletedFlag = 1
+    data.DeletedBy = deletedBy
+    data.DeletedAt = time.Now()
+    _, err := d.engine.
+        Where("oc_id = ?", ocId).
+        Where("msg_id = ?", msgId).
+        Update(data)
+    return err
+}
+
+func (d *MsgRepo) GetUnReadCount(ocId, msgToCc int64) int {
+   return 0
+}

+ 49 - 0
repositories/msg_to_repo.go

@@ -0,0 +1,49 @@
+package repositories
+
+import (
+    "time"
+    "xorm.io/xorm"
+    "xps/datamodels"
+)
+
+type MsgToRepo struct {
+    engine *xorm.Engine
+}
+
+func NewMsgToRepo(engine *xorm.Engine) *MsgCatRepo {
+    return &MsgCatRepo{
+        engine: engine,
+    }
+}
+
+
+func (d *MsgToRepo) Create(data *datamodels.MsgTo) error {
+    data.CreatedAt = time.Now()
+    _, err := d.engine.Insert(data)
+    return err
+}
+
+func (d *MsgToRepo) Update(data *datamodels.MsgTo) error {
+    msgToId := data.MsgToId
+    data.UpdatedAt = time.Now()
+    _, err := d.engine.
+        Where("msg_to_id = ?", msgToId).
+        Update(data)
+    return err
+}
+
+func (d *MsgToRepo) Delete(m map[string]interface{}) error {
+    ocId      := m["ocId"].(int64)
+    msgToId   := m["msgToId"].(int64)
+    deletedBy := m["deletedBy"].(int64)
+    
+    data := &datamodels.MsgCat{}
+    data.DeletedFlag = 1
+    data.DeletedBy = deletedBy
+    data.DeletedAt = time.Now()
+    _, err := d.engine.
+        Where("oc_id = ?", ocId).
+        Where("msg_to_id = ?", msgToId).
+        Update(data)
+    return err
+}

+ 52 - 0
service/msg_cat_service.go

@@ -0,0 +1,52 @@
+package service
+
+import (
+"xps/datamodels"
+"xps/datasource"
+"xps/repositories"
+"xps/viewmodels"
+)
+
+type MsgCatService interface {
+    GetList(m map[string]interface{}) ([]viewmodels.MsgCatInfo, error)
+    GetPage(m map[string]interface{}) (*viewmodels.PageResult, error)
+    GetById(ocId int64, msgCatId int64) (*viewmodels.MsgCatInfo, error)
+    Create(d *datamodels.MsgCat) error
+    Update(d *datamodels.MsgCat) error
+    Delete(m map[string]interface{}) error
+}
+
+type msgCatService struct {
+    repo *repositories.MsgCatRepo
+}
+
+func NewMsgCatService() MsgCatService {
+    return &msgCatService{
+        repo: repositories.NewMsgCatRepo(datasource.InstanceMaster()),
+    }
+}
+
+func (s *msgCatService) GetList(m map[string]interface{}) ([]viewmodels.MsgCatInfo, error) {
+    return s.repo.GetList(m)
+}
+
+func (s *msgCatService) GetPage(m map[string]interface{}) (*viewmodels.PageResult, error) {
+    return s.repo.GetPage(m)
+}
+
+func (s *msgCatService) GetById(ocId int64, msgCatId int64) (*viewmodels.MsgCatInfo, error) {
+    return s.repo.GetById(ocId, msgCatId)
+}
+
+func (s *msgCatService) Create(MsgCat *datamodels.MsgCat) error {
+    MsgCat.MsgCatId = NewID()
+    return s.repo.Create(MsgCat)
+}
+
+func (s *msgCatService) Update(MsgCat *datamodels.MsgCat) error {
+    return s.repo.Update(MsgCat)
+}
+
+func (s *msgCatService) Delete(m map[string]interface{}) error {
+    return s.repo.Delete(m)
+}

+ 52 - 0
service/msg_service.go

@@ -0,0 +1,52 @@
+package service
+
+import (
+    "xps/datamodels"
+    "xps/datasource"
+    "xps/repositories"
+    "xps/viewmodels"
+)
+
+type MsgService interface {
+    GetList(m map[string]interface{}) ([]viewmodels.MsgInfo, error)
+    GetPage(m map[string]interface{}) (*viewmodels.PageResult, error)
+    GetById(ocId, msgId int64) (*viewmodels.MsgInfo, error)
+    Create(d *datamodels.Msg) error
+    Update(d *datamodels.Msg) error
+    Delete(m map[string]interface{}) error
+}
+
+type msgService struct {
+    modelRepo *repositories.MsgRepo
+}
+
+func NewMsgService() MsgService {
+    return &msgService{
+        modelRepo: repositories.NewMsgRepo(datasource.InstanceMaster()),
+    }
+}
+
+func (s *msgService) GetList(m map[string]interface{}) ([]viewmodels.MsgInfo, error) {
+    return s.modelRepo.GetList(m)
+}
+
+func (s *msgService) GetPage(m map[string]interface{}) (*viewmodels.PageResult, error) {
+    return s.modelRepo.GetPage(m)
+}
+
+func (s *msgService) GetById(ocId, msgId int64) (*viewmodels.MsgInfo, error) {
+    return s.modelRepo.GetById(ocId, msgId)
+}
+
+func (s *msgService) Create(m *datamodels.Msg) error {
+    m.MsgId = NewID()
+    return s.modelRepo.Create(m)
+}
+
+func (s *msgService) Update(m *datamodels.Msg) error {
+    return s.modelRepo.Update(m)
+}
+
+func (s *msgService) Delete(m map[string]interface{}) error {
+    return s.modelRepo.Delete(m)
+}

+ 28 - 0
viewmodels/msg_cat_info.go

@@ -0,0 +1,28 @@
+package viewmodels
+
+import "time"
+
+type MsgCatInfo struct {
+    OcId                int64     `json:"-"                 xorm:"'oc_id'             bigint     pk comment('组织ID:公司或机构或单位ID')"`
+    MsgCatId            int64     `json:"msgCatId"          xorm:"'msg_cat_id'        bigint     pk comment('主键ID')                 "`
+    MsgCatTitle         string    `json:"msgCatTitle"       xorm:"'msg_cat_title'     varchar(50)   comment('群组类型名称')            "`
+    MsgCatDesc          string    `json:"msgCatDesc"        xorm:"'msg_cat_desc'      varchar(50)   comment('描述')                   "`
+    IsLink              int64     `json:"isLink"            xorm:"'is_link'           bigint        comment('是否可修改')              "`
+    IsFixed             int64     `json:"isFixed"           xorm:"'is_fixed'          bigint        comment('是否可修改')              "`
+    IsDetailed          int64     `json:"isDetailed"        xorm:"'is_detailed'       bigint        comment('是否可修改')              "`
+    
+    MsgCatLink          string    `json:"msgCatLink"        xorm:"'msg_cat_link'        varchar(50)   comment('描述')         "`
+    MsgCatLinkParams    string    `json:"msgCatLinkParams"  xorm:"'msg_cat_link_params' varchar(50)   comment('描述')         "`
+    
+    CreatedBy           int64     `json:"createdBy"         xorm:"'created_by'"`
+    CreatedAt           time.Time `json:"createdAt"         xorm:"'created_at'"`
+    UpdatedBy           int64     `json:"updatedBy"         xorm:"'updated_by'"`
+    UpdatedAt           time.Time `json:"updatedAt"         xorm:"'updated_at'"`
+    DeletedFlag         int64     `json:"deletedFlag"       xorm:"'deleted_flag'"`
+    DeletedBy           int64     `json:"deletedBy"         xorm:"'deleted_by'"`
+    DeletedAt           time.Time `json:"deletedAt"         xorm:"'deleted_at'"`
+}
+
+func (t *MsgCatInfo) TableName() string {
+    return "msg_cat"
+}

+ 38 - 0
viewmodels/msg_detail_info.go

@@ -0,0 +1,38 @@
+package viewmodels
+
+import "time"
+
+type MsgDetailInfo struct {
+    OcId                int64     `json:"ocId"              xorm:"'oc_id'               bigint     pk comment('OC ID')     "`
+    
+    MsgId               int64     `json:"msgId"             xorm:"'msg_id'              bigint     pk comment('主键ID')    "`
+    MsgTitle            string    `json:"msgTitle"          xorm:"'msg_title'           varchar(50)   comment('模型名称')   "`
+    MsgFrId             int64     `json:"msgFrId"           xorm:"'msg_fr_id'           bigint        comment('主键ID')     "`
+    MsgFrName           string    `json:"msgFrName"         xorm:"'msg_fr_name'         varchar(255)  comment('描述')         "`
+    MsgFrRealName       string    `json:"msgFrRealName"     xorm:"'msg_fr_real_name'    varchar(255)  comment('描述')         "`
+    MsgFrAvatar         string    `json:"msgFrAvatar"       xorm:"'msg_fr_avatar'       varchar(255)  comment('描述')         "`
+    
+    MsgToGroup          string    `json:"msgToGroup"        xorm:"'msg_to_group'        varchar(255)  comment('描述')         "`
+    MsgTo               string    `json:"msgTo"             xorm:"'msg_to'              varchar(255)  comment('描述')         "`
+    MsgCc               string    `json:"msgCc"             xorm:"'msg_cc'              varchar(255)  comment('描述')         "`
+    
+    MsgCatId            int64     `json:"msgCatId"          xorm:"'msg_cat_id'          bigint        comment('主键ID')       "`
+    MsgCatTitle         string    `json:"msgCatTitle"       xorm:"'msg_cat_title'       varchar(50)   comment('描述')         "`
+    
+    IsLink              int64     `json:"isLink"            xorm:"'is_link'             bigint        comment('是否可修改')    "`
+    MsgCatLink          string    `json:"msgCatLink"        xorm:"'msg_cat_link'        varchar(50)   comment('描述')         "`
+    MsgCatLinkParams    string    `json:"msgCatLinkParams"  xorm:"'msg_cat_link_params' varchar(50)   comment('描述')         "`
+    MsgParams           string    `json:"msgParams"         xorm:"'msg__params'         varchar(50)   comment('描述')         "`
+    
+    
+    IsDetailed          int64     `json:"isDetailed"        xorm:"'is_detailed'         bigint        comment('是否可修改')   "`
+    MsgContent          string    `json:"msgContent"        xorm:"'msg_content'         varchar(50)   comment('描述')        "`
+    MsgDetail           string    `json:"msgDetail"         xorm:"'msg_detail'          varchar(50)   comment('描述')        "`
+    MsgTime             time.Time `json:"msgTime"           xorm:"'msg_time'"`
+    
+    Status              int64     `json:"status"            xorm:"'status'              bigint        comment('Status')     "`
+}
+
+func (t *MsgDetailInfo) TableName() string {
+    return "msg"
+}

+ 26 - 0
viewmodels/msg_info.go

@@ -0,0 +1,26 @@
+package viewmodels
+
+import "time"
+
+type MsgInfo struct {
+    OcId          int64     `json:"ocId"            xorm:"'oc_id'         bigint     pk comment('OC ID')          "`
+    
+    MsgId         int64     `json:"msgId"           xorm:"'msg_id'        bigint     pk comment('主键ID')          "`
+    MsgTitle      string    `json:"msgTitle"        xorm:"'msg_title'     varchar(50)   comment('模型名称')         "`
+    MsgFrId       int64     `json:"msgFrId"         xorm:"'msg_fr_id'     bigint        comment('主键ID')          "`
+    MsgToGroup    string    `json:"msgToGroup"      xorm:"'msg_to_group'  varchar(255)  comment('描述')            "`
+    MsgTo         string    `json:"msgTo"           xorm:"'msg_to'        varchar(255)  comment('描述')            "`
+    MsgCc         string    `json:"msgCc"           xorm:"'msg_cc'        varchar(255)  comment('描述')            "`
+    
+    MsgCatId      int64     `json:"msgCatId"        xorm:"'msg_cat_id'    bigint        comment('主键ID')          "`
+    MsgContent    string    `json:"msgContent"      xorm:"'msg_content'   varchar(50)   comment('描述')            "`
+    MsgDetail     string    `json:"msgDetail"       xorm:"'msg_detail'    varchar(50)   comment('描述')            "`
+    MsgTime       time.Time `json:"msgTime"         xorm:"'msg_time'"`
+    
+    Status        int64     `json:"status"          xorm:"'status'        bigint        comment('Status')         "`
+    MsgParams     string    `json:"msgParams"       xorm:"'msg_params'    varchar(50)   comment('Msg Params')     "`
+}
+
+func (t *MsgInfo) TableName() string {
+    return "msg"
+}

+ 102 - 0
web/controllers/msg_cat_controller.go

@@ -0,0 +1,102 @@
+package controllers
+
+import (
+    "github.com/kataras/iris/v12/mvc"
+    "xps/datamodels"
+    "xps/service"
+)
+
+type MsgCatController struct {
+    Base
+    Service service.MsgCatService
+}
+
+func (c *MsgCatController) BeforeActivation(b mvc.BeforeActivation) {
+    b.Handle("GET",         "/",                        "GetList"   )
+    b.Handle("GET",         "/page",                    "GetPage"   )
+    b.Handle("GET",         "/{msgCatId:int64}",        "GetById"   )
+    b.Handle("POST",        "/add",                     "Create"    )
+    b.Handle("PUT",         "/update",                  "Update"    )
+    b.Handle("DELETE",      "/{msgCatId:int64}",        "DeleteByID")
+}
+
+func (c *MsgCatController) GetList() *JsonResult {
+    params    := c.buildParams()
+    data, err := c.Service.GetList(params)
+    if err != nil {
+        return ResultErr(err.Error(), nil)
+    } else {
+        return ResultOk("获取成功", data)
+    }
+}
+
+func (c *MsgCatController) GetPage() *JsonResult {
+    params    := c.buildParams()
+    data, err := c.Service.GetPage(params)
+    if err != nil {
+        return ResultErr(err.Error(), nil)
+    } else {
+        return ResultOk("获取成功", data)
+    }
+}
+
+func (c *MsgCatController) GetById(msgCatId int64) *JsonResult {
+    ocId      := c.GetCurOcId()
+    data, err := c.Service.GetById(ocId, msgCatId)
+    if err != nil {
+        return ResultErr(err.Error(), nil)
+    } else {
+        return ResultOk("获取成功", data)
+    }
+}
+
+func (c *MsgCatController) Create() *JsonResult {
+    ocId     := c.GetCurOcId()
+    userId   := c.GetCurUserId()
+    msgCat := datamodels.MsgCat{}
+    
+    if err := c.Ctx.ReadJSON(&msgCat); err != nil {
+        return ResultErr("读取数据失败", nil)
+    }
+    
+    msgCat.OcId = ocId
+    msgCat.CreatedBy = userId
+    if err := c.Service.Create(&msgCat); err != nil {
+        return ResultErr(err.Error(), nil)
+    } else {
+        return ResultOk("新增成功", nil)
+    }
+}
+
+func (c *MsgCatController) Update() *JsonResult {
+    ocId     := c.GetCurOcId()
+    userId   := c.GetCurUserId()
+    
+    msgCat := datamodels.MsgCat{}
+    if err := c.Ctx.ReadJSON(&msgCat); err != nil {
+        return ResultErr("读取数据失败", nil)
+    }
+    
+    msgCat.OcId = ocId
+    msgCat.UpdatedBy = userId
+    if err := c.Service.Update(&msgCat); err != nil {
+        return ResultErr(err.Error(), nil)
+    } else {
+        return ResultOk("更新成功", nil)
+    }
+}
+
+func (c *MsgCatController) DeleteByID(msgCatId int64) *JsonResult {
+    ocId   := c.GetCurOcId()
+    userId := c.GetCurUserId()
+    
+    m := make(map[string]interface{})
+    m["ocId"]       = ocId
+    m["msgCatId"]   = msgCatId
+    m["deletedBy"]  = userId
+    if err := c.Service.Delete(m); err != nil {
+        return ResultErr(err.Error(), nil)
+    } else {
+        return ResultOk("删除成功", nil)
+    }
+}

+ 101 - 0
web/controllers/msg_controller.go

@@ -0,0 +1,101 @@
+package controllers
+
+import (
+    "github.com/kataras/iris/v12/mvc"
+    "xps/datamodels"
+    "xps/service"
+)
+
+type MsgController struct {
+    Base
+    Service service.MsgService
+}
+
+func (c *MsgController) BeforeActivation(b mvc.BeforeActivation) {
+    b.Handle("GET",         "/",                    "GetList"     )
+    b.Handle("GET",         "/page",                "GetPage"     )
+    b.Handle("GET",         "/{msgId:int64}",       "GetById"     )
+    b.Handle("POST",        "/add",                 "Create"      )
+    b.Handle("PUT",         "/update",              "Update"      )
+    b.Handle("DELETE",      "/{msgId:int64}",       "DeleteByID"  )
+}
+
+func (c *MsgController) GetList() *JsonResult {
+    params    := c.buildParams()
+    data, err := c.Service.GetList(params)
+    if err != nil {
+        return ResultErr(err.Error(), nil)
+    } else {
+        return ResultOk("获取成功", data)
+    }
+}
+
+func (c *MsgController) GetPage() *JsonResult {
+    params    := c.buildParams()
+    data, err := c.Service.GetPage(params)
+    if err != nil {
+        return ResultErr(err.Error(), nil)
+    } else {
+        return ResultOk("获取成功", data)
+    }
+}
+
+func (c *MsgController) GetById(msgId int64)*JsonResult {
+    ocId := c.GetCurOcId()
+    data, err := c.Service.GetById(ocId, msgId)
+    if err != nil {
+        return ResultErr(err.Error(), nil)
+    } else {
+        return ResultOk("获取成功", data)
+    }
+}
+
+func (c *MsgController) Create()*JsonResult {
+    ocId   := c.GetCurOcId()
+    userId := c.GetCurUserId()
+    
+    msg := datamodels.Msg{}
+    if err := c.Ctx.ReadJSON(&msg); err != nil {
+        return ResultErr("读取数据失败", nil)
+    }
+    msg.OcId      = ocId
+    msg.CreatedBy = userId
+    if err := c.Service.Create(&msg); err != nil {
+        return ResultErr(err.Error(), nil)
+    } else {
+        return ResultOk("新增成功", nil)
+    }
+}
+
+func (c *MsgController) Update()*JsonResult {
+    ocId   := c.GetCurOcId()
+    userId := c.GetCurUserId()
+    
+    msg    := datamodels.Msg{}
+    if err := c.Ctx.ReadJSON(&msg); err != nil {
+        return ResultErr("读取数据失败", nil)
+    }
+    msg.OcId      = ocId
+    msg.UpdatedBy = userId
+    if err := c.Service.Update(&msg); err != nil {
+        return ResultErr(err.Error(), nil)
+    } else {
+        return ResultOk("更新成功", nil)
+    }
+}
+
+func (c *MsgController) DeleteByID(msgId int64)*JsonResult {
+    ocId   := c.GetCurOcId()
+    userId := c.GetCurUserId()
+    
+    m := make(map[string]interface{})
+    m["ocId"]      = ocId
+    m["msgId"]     = msgId
+    m["deletedBy"] = userId
+    if err := c.Service.Delete(m); err != nil {
+        return ResultErr(err.Error(), nil)
+    } else {
+        return ResultOk("删除成功", nil)
+    }
+}
+

+ 15 - 0
web/router/routes.go

@@ -124,6 +124,21 @@ func Configure(b *bootstrap.Bootstrapper) {
 		taskCatApp.Handle(new(controllers.TaskCatController))
 	}
 	
+	// Msg
+	msgParty := b.Party("/msg", crs).AllowMethods(iris.MethodOptions)
+	{
+		msgParty.Use(middleware.AuthToken)
+		msgService := service.NewMsgService()
+		msgApp := mvc.New(msgParty.Party(""))
+		msgApp.Register(msgService)
+		msgApp.Handle(new(controllers.MsgController))
+		
+		msgCatService := service.NewMsgCatService()
+		msgCatApp := mvc.New(taskParty.Party("/cat"))
+		msgCatApp.Register(msgCatService)
+		msgCatApp.Handle(new(controllers.MsgCatController))
+	}
+	
 	// oc
 	ocParty := b.Party("/oc", crs).AllowMethods(iris.MethodOptions)
 	{