houyaf 3 yıl önce
ebeveyn
işleme
9ad187940b

+ 176 - 0
repositories/wf_activity_action_def_repo.go

@@ -0,0 +1,176 @@
+package repositories
+
+import (
+    "fmt"
+    "time"
+    "xorm.io/xorm"
+    "xps/datamodel"
+    "xps/viewmodel"
+)
+
+type WfActivityActionDefRepo struct {
+    engine *xorm.Engine
+}
+
+func NewWfActivityActionDefRepo(engine *xorm.Engine) *WfActivityActionDefRepo {
+    return &WfActivityActionDefRepo{
+        engine: engine,
+    }
+}
+
+func (d *WfActivityActionDefRepo) GetPage(m map[string]interface{}) (*viewmodel.PageResult, error){
+    limit       := m["limit"].(int)
+    page        := m["page"].(int)
+    
+    sqlSelect   := `    SELECT      A.wf_def_id,
+                                    A.activity_def_id,
+                                    A.action_id,
+                                    A.action_title,
+                                    A.action_desc,
+                                    A.action_code,
+                                    A.form_code,
+                                    A.target_activity_def_id,
+                                    B.activity_def_title AS target_activity_def_title   `
+    sqlFrom     := `    FROM        wf_activity_action_def  AS A
+                        LEFT  JOIN  wf_activity_def         AS B ON (A.wf_def_id = B.wf_def_id AND A.target_activity_def_id = B.activity_def_id)     `
+    sqlWhere    := `    WHERE  A.deleted_flag = 0           `
+    
+    if wfDefId, ok := m["wfDefId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.wf_def_id = %d ", wfDefId)
+    }
+    if activityDefId, ok := m["activityDefId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.activity_def_id = %d ", activityDefId)
+    }
+    if actionId, ok := m["actionId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.action_id = %d ", actionId)
+    }
+    if keywords, ok := m["keywords"]; ok {
+        sqlWhere += ` AND A.action_title like ` + "'%" + fmt.Sprintf("%s", keywords) + "%'"
+    }
+    
+    sqlCount := `SELECT COUNT(*) `
+    total, err := d.engine.SQL(sqlCount + sqlFrom + sqlWhere).Count(new(viewmodel.WfActivityActionDefInfo))
+    if err != nil {
+        return nil, err
+    }
+    
+    sqlOrderBy := " ORDER BY A.wf_def_id, A.activity_def_id, A.action_id ASC "
+    pageStart  := (limit - 1) * limit
+    sqlLimit   := fmt.Sprintf(" LIMIT %d OFFSET %d ", limit, pageStart)
+    
+    datalist   := make([]viewmodel.WfActivityActionDefInfo, 0)
+    err = d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy + sqlLimit).Find(&datalist)
+    if err != nil {
+        return nil, err
+    }
+    
+    pageResult := &viewmodel.PageResult{}
+    pageResult.Data     = datalist
+    pageResult.Total    = total
+    pageResult.PageSize = limit
+    pageResult.Page     = page
+    return pageResult, nil
+}
+
+func (d *WfActivityActionDefRepo) GetList(m map[string]interface{}) ([]viewmodel.WfActivityActionDefInfo, error) {
+    sqlSelect   := `    SELECT      A.wf_def_id,
+                                    A.activity_def_id,
+                                    A.action_id,
+                                    A.action_title,
+                                    A.action_desc,
+                                    A.action_code,
+                                    A.form_code,
+                                    A.target_activity_def_id,
+                                    B.activity_def_title AS target_activity_def_title   `
+    sqlFrom     := `    FROM        wf_activity_action_def  AS A
+                        LEFT  JOIN  wf_activity_def         AS B ON (A.wf_def_id = B.wf_def_id AND A.target_activity_def_id = B.activity_def_id)     `
+    sqlWhere    := `    WHERE  A.deleted_flag = 0           `
+    
+    if wfDefId, ok := m["wfDefId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.wf_def_id = %d ", wfDefId)
+    }
+    if activityDefId, ok := m["activityDefId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.activity_def_id = %d ", activityDefId)
+    }
+    if actionId, ok := m["actionId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.action_id = %d ", actionId)
+    }
+    if keywords, ok := m["keywords"]; ok {
+        sqlWhere += ` AND A.action_title like ` + "'%" + fmt.Sprintf("%s", keywords) + "%'"
+    }
+    
+    sqlOrderBy := " ORDER BY A.wf_def_id, A.activity_def_id, A.action_id ASC "
+    datalist := make([]viewmodel.WfActivityActionDefInfo, 0)
+    err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy).Find(&datalist)
+    if err != nil {
+        return nil, err
+    } else {
+        return datalist, nil
+    }
+}
+
+func (d *WfActivityActionDefRepo) GetById(wfDefId, activityDefId, actionId int64) (*viewmodel.WfActivityActionDefInfo, error) {
+    sqlSelect   := `    SELECT      A.wf_def_id,
+                                    A.activity_def_id,
+                                    A.action_id,
+                                    A.action_title,
+                                    A.action_desc,
+                                    A.action_code,
+                                    A.form_code,
+                                    A.target_activity_def_id,
+                                    B.activity_def_title AS target_activity_def_title   `
+    sqlFrom     := `    FROM        wf_activity_action_def  AS A
+                        LEFT  JOIN  wf_activity_def         AS B ON (A.wf_def_id = B.wf_def_id AND A.target_activity_def_id = B.activity_def_id)     `
+    sqlWhere    := `    WHERE  A.deleted_flag = 0           `
+    
+    sqlWhere += fmt.Sprintf(" AND A.wf_def_id       = %d ", wfDefId)
+    sqlWhere += fmt.Sprintf(" AND A.activity_def_id = %d ", activityDefId)
+    sqlWhere += fmt.Sprintf(" AND A.action_id       = %d ", actionId)
+    
+    data := &viewmodel.WfActivityActionDefInfo{}
+    has, err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere).Get(data)
+    if !has || err != nil {
+        return nil, err
+    } else {
+        return data, nil
+    }
+}
+
+func (d *WfActivityActionDefRepo) Create(data *datamodel.WfActivityActionDef) error {
+    _, err := d.engine.Insert(data)
+    return err
+}
+
+func (d *WfActivityActionDefRepo) Update(data *datamodel.WfActivityActionDef) error {
+    wfDefId       := data.WfDefId
+    activityDefId := data.ActivityDefId
+    actionId      := data.ActionId
+    
+    data.UpdatedAt = time.Now()
+    
+    _, err := d.engine.
+        Where("wf_def_id        = ?", wfDefId).
+        Where("activity_def_id  = ?", activityDefId).
+        Where("action_id        = ?", actionId).
+        Update(data)
+    
+    return err
+}
+
+func (d *WfActivityActionDefRepo) Delete(m map[string]interface{}) error {
+    wfDefId         := m["wfDefId"].(int64)
+    activityDefId   := m["activityDefId"].(int64)
+    actionId        := m["actionId"].(int64)
+    deletedBy       := m["deletedBy"].(int64)
+    
+    data := &datamodel.WfActivityActionDef{}
+    data.DeletedFlag = 1
+    data.DeletedBy   = deletedBy
+    data.DeletedAt   = time.Now()
+    _, err := d.engine.
+        Where("wf_def_id        = ?", wfDefId).
+        Where("activity_def_id  = ?", activityDefId).
+        Where("action_id        = ?", actionId).
+        Update(data)
+    return err
+}

+ 229 - 0
repositories/wf_activity_action_ins_repo.go

@@ -0,0 +1,229 @@
+package repositories
+
+import (
+    "fmt"
+    "time"
+    "xorm.io/xorm"
+    "xps/datamodel"
+    "xps/viewmodel"
+)
+
+type WfActivityActionInsRepo struct {
+    engine *xorm.Engine
+}
+
+func NewWfActivityActionInsRepo(engine *xorm.Engine) *WfActivityActionInsRepo {
+    return &WfActivityActionInsRepo{
+        engine: engine,
+    }
+}
+
+func (d *WfActivityActionInsRepo) GetPage(m map[string]interface{}) (*viewmodel.PageResult, error){
+    limit       := m["limit"].(int)
+    page        := m["page"].(int)
+    
+    sqlSelect   := `    SELECT      A.wf_def_id,
+                                    A.wf_ins_id,
+                                    A.activity_def_id,
+                                    A.activity_ins_id,
+                                    B.activity_ins_title,
+                                    B.activity_ins_from,
+                                    B.activity_ins_to,
+                                    B.activity_code,
+                                    A.action_ins_id,
+                                    A.action_id,
+                                    A.action_title,
+                                    A.action_remark,
+                                    A.action_code,
+                                    A.form_code,
+                                    A.action_result,
+                                    A.target_activity_ins_id,
+                                    A.action_time,
+                                    A.group_id,
+                                    A.group_name,
+                                    A.position_id,
+                                    A.position_name,
+                                    A.account_id,
+                                    A.account_name                              `
+    sqlFrom     := `    FROM        wf_activity_action_ins AS A
+                        LEFT JOIN   wf_activity_ins        AS B ON (A.oc_id = B.oc_id AND A.wf_ins_id = B.wf_ins_id  )`
+    sqlWhere    := `    WHERE       A.deleted_flag = 0           `
+    
+    if ocId, ok := m["ocId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.oc_id = %d ", ocId)
+    }
+    if wfInsId, ok := m["wfInsId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.wf_ins_id = %d ", wfInsId)
+    }
+    if activityInsId, ok := m["activityInsId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.activity_ins_id = %d ", activityInsId)
+    }
+    if actionInsId, ok := m["actionInsId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.action_ins_id = %d ", actionInsId)
+    }
+    if keywords, ok := m["keywords"]; ok {
+        sqlWhere += ` AND A.action_title like ` + "'%" + fmt.Sprintf("%s", keywords) + "%'"
+    }
+    
+    sqlCount := `SELECT COUNT(*) `
+    total, err := d.engine.SQL(sqlCount + sqlFrom + sqlWhere).Count(new(viewmodel.WfActivityActionInsInfo))
+    if err != nil {
+        return nil, err
+    }
+    
+    sqlOrderBy := " ORDER BY A.wf_def_id, A.activity_def_id, A.action_id ASC "
+    pageStart  := (limit - 1) * limit
+    sqlLimit   := fmt.Sprintf(" LIMIT %d OFFSET %d ", limit, pageStart)
+    
+    datalist   := make([]viewmodel.WfActivityActionInsInfo, 0)
+    err = d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy + sqlLimit).Find(&datalist)
+    if err != nil {
+        return nil, err
+    }
+    
+    pageResult := &viewmodel.PageResult{}
+    pageResult.Data     = datalist
+    pageResult.Total    = total
+    pageResult.PageSize = limit
+    pageResult.Page     = page
+    return pageResult, nil
+}
+
+func (d *WfActivityActionInsRepo) GetList(m map[string]interface{}) ([]viewmodel.WfActivityActionInsInfo, error) {
+    sqlSelect   := `    SELECT      A.wf_def_id,
+                                    A.wf_ins_id,
+                                    A.activity_def_id,
+                                    A.activity_ins_id,
+                                    B.activity_ins_title,
+                                    B.activity_ins_from,
+                                    B.activity_ins_to,
+                                    B.activity_code,
+                                    A.action_ins_id,
+                                    A.action_id,
+                                    A.action_title,
+                                    A.action_remark,
+                                    A.action_code,
+                                    A.form_code,
+                                    A.action_result,
+                                    A.target_activity_ins_id,
+                                    A.action_time,
+                                    A.group_id,
+                                    A.group_name,
+                                    A.position_id,
+                                    A.position_name,
+                                    A.account_id,
+                                    A.account_name                              `
+    sqlFrom     := `    FROM        wf_activity_action_ins AS A
+                        LEFT JOIN   wf_activity_ins        AS B ON (A.oc_id = B.oc_id AND A.wf_ins_id = B.wf_ins_id  ) `
+    sqlWhere    := `    WHERE       A.deleted_flag = 0           `
+    
+    if ocId, ok := m["ocId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.oc_id = %d ", ocId)
+    }
+    if wfInsId, ok := m["wfInsId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.wf_ins_id = %d ", wfInsId)
+    }
+    if activityInsId, ok := m["activityInsId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.activity_ins_id = %d ", activityInsId)
+    }
+    if actionInsId, ok := m["actionInsId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.action_ins_id = %d ", actionInsId)
+    }
+    if keywords, ok := m["keywords"]; ok {
+        sqlWhere += ` AND A.action_title like ` + "'%" + fmt.Sprintf("%s", keywords) + "%'"
+    }
+    
+    sqlOrderBy := " ORDER BY A.wf_def_id, A.activity_def_id, A.action_id ASC "
+    datalist := make([]viewmodel.WfActivityActionInsInfo, 0)
+    err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy).Find(&datalist)
+    if err != nil {
+        return nil, err
+    } else {
+        return datalist, nil
+    }
+}
+
+func (d *WfActivityActionInsRepo) GetById(ocId, wfInsId, activityInsId, actionInsId int64) (*viewmodel.WfActivityActionInsInfo, error) {
+    sqlSelect   := `    SELECT      A.wf_def_id,
+                                    A.wf_ins_id,
+                                    A.activity_def_id,
+                                    A.activity_ins_id,
+                                    B.activity_ins_title,
+                                    B.activity_ins_from,
+                                    B.activity_ins_to,
+                                    B.activity_code,
+                                    A.action_ins_id,
+                                    A.action_id,
+                                    A.action_title,
+                                    A.action_remark,
+                                    A.action_code,
+                                    A.form_code,
+                                    A.action_result,
+                                    A.target_activity_ins_id,
+                                    A.action_time,
+                                    A.group_id,
+                                    A.group_name,
+                                    A.position_id,
+                                    A.position_name,
+                                    A.account_id,
+                                    A.account_name                              `
+    sqlFrom     := `    FROM        wf_activity_action_ins AS A
+                        LEFT JOIN   wf_activity_ins        AS B ON (A.oc_id = B.oc_id AND A.wf_ins_id = B.wf_ins_id )`
+    sqlWhere    := `    WHERE       A.deleted_flag = 0           `
+    
+    sqlWhere += fmt.Sprintf(" AND A.oc_id           = %d ", ocId)
+    sqlWhere += fmt.Sprintf(" AND A.wf_ins_id       = %d ", wfInsId)
+    sqlWhere += fmt.Sprintf(" AND A.activity_ins_id = %d ", activityInsId)
+    sqlWhere += fmt.Sprintf(" AND A.action_ins_id   = %d ", actionInsId)
+    
+    data := &viewmodel.WfActivityActionInsInfo{}
+    has, err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere).Get(data)
+    if !has || err != nil {
+        return nil, err
+    } else {
+        return data, nil
+    }
+}
+
+func (d *WfActivityActionInsRepo) Create(data *datamodel.WfActivityActionIns) error {
+    _, err := d.engine.Insert(data)
+    return err
+}
+
+func (d *WfActivityActionInsRepo) Update(data *datamodel.WfActivityActionIns) error {
+    ocId          := data.OcId
+    wfInsId       := data.WfInsId
+    activityInsId := data.ActivityInsId
+    actionInsId   := data.ActionInsId
+    
+    data.UpdatedAt = time.Now()
+    
+    _, err := d.engine.
+        Where("oc_id            = ?", ocId).
+        Where("wf_ins_id        = ?", wfInsId).
+        Where("activity_ins_id  = ?", activityInsId).
+        Where("action_ins_id    = ?", actionInsId).
+        Update(data)
+    
+    return err
+}
+
+func (d *WfActivityActionInsRepo) Delete(m map[string]interface{}) error {
+    ocId            := m["ocId"].(int64)
+    wfInsId         := m["wfInsId"].(int64)
+    activityInsId   := m["activityInsId"].(int64)
+    actionInsId     := m["actionInsId"].(int64)
+    deletedBy       := m["deletedBy"].(int64)
+    
+    data := &datamodel.WfActivityActionIns{}
+    data.DeletedFlag = 1
+    data.DeletedBy   = deletedBy
+    data.DeletedAt   = time.Now()
+    _, err := d.engine.
+        Where("oc_id            = ?", ocId).
+        Where("wf_ins_id        = ?", wfInsId).
+        Where("activity_ins_id  = ?", activityInsId).
+        Where("action_ins_id    = ?", actionInsId).
+        Update(data)
+    return err
+}

+ 145 - 0
repositories/wf_activity_def_repo.go

@@ -0,0 +1,145 @@
+package repositories
+
+import (
+    "fmt"
+    "time"
+    "xorm.io/xorm"
+    "xps/datamodel"
+    "xps/viewmodel"
+)
+
+type WfActivityDefRepo struct {
+    engine *xorm.Engine
+}
+
+func NewWfActivityDefRepo(engine *xorm.Engine) *WfActivityDefRepo {
+    return &WfActivityDefRepo{
+        engine: engine,
+    }
+}
+
+func (d *WfActivityDefRepo) GetPage(m map[string]interface{}) (*viewmodel.PageResult, error){
+    limit       := m["limit"].(int)
+    page        := m["page"].(int)
+    
+    sqlSelect   := ` SELECT A.wf_def_id,
+                            A.activity_def_id,
+                            A.activity_def_title,
+                            A.activity_def_desc,
+                            A.activity_code,
+                            A.form_code                  `
+    sqlFrom     := ` FROM   wf_activity_def AS A         `
+    sqlWhere    := ` WHERE  A.deleted_flag = 0           `
+    
+    if wfDefId, ok := m["wfDefId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.wf_def_id = %d ", wfDefId)
+    }
+    if keywords, ok := m["keywords"]; ok {
+        sqlWhere += ` AND A.wf_def_title like ` + "'%" + fmt.Sprintf("%s", keywords) + "%'"
+    }
+    
+    sqlCount := `SELECT COUNT(*) `
+    total, err := d.engine.SQL(sqlCount + sqlFrom + sqlWhere).Count(new(viewmodel.WfActivityDefInfo))
+    if err != nil {
+        return nil, err
+    }
+    
+    sqlOrderBy := " ORDER BY A.wf_def_id, A.activity_def_id ASC "
+    pageStart  := (limit - 1) * limit
+    sqlLimit   := fmt.Sprintf(" LIMIT %d OFFSET %d ", limit, pageStart)
+    
+    datalist   := make([]viewmodel.WfActivityDefInfo, 0)
+    err = d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy + sqlLimit).Find(&datalist)
+    if err != nil {
+        return nil, err
+    }
+    
+    pageResult := &viewmodel.PageResult{}
+    pageResult.Data     = datalist
+    pageResult.Total    = total
+    pageResult.PageSize = limit
+    pageResult.Page     = page
+    return pageResult, nil
+}
+
+func (d *WfActivityDefRepo) GetList(m map[string]interface{}) ([]viewmodel.WfActivityDefInfo, error) {
+    sqlSelect   := ` SELECT A.wf_def_id,
+                            A.activity_def_id,
+                            A.activity_def_title,
+                            A.activity_def_desc,
+                            A.activity_code,
+                            A.form_code                  `
+    sqlFrom     := ` FROM   wf_activity_def  AS A        `
+    sqlWhere    := ` WHERE  A.deleted_flag = 0           `
+    
+    if wfDefId, ok := m["wfDefId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.wf_def_id = %d ", wfDefId)
+    }
+    if keywords, ok := m["keywords"]; ok {
+        sqlWhere += ` AND A.activity_def_title like ` + "'%" + fmt.Sprintf("%s", keywords) + "%'"
+    }
+    
+    sqlOrderBy := " ORDER BY A.wf_def_id, A.activity_def_id ASC "
+    datalist := make([]viewmodel.WfActivityDefInfo, 0)
+    err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy).Find(&datalist)
+    if err != nil {
+        return nil, err
+    } else {
+        return datalist, nil
+    }
+}
+
+func (d *WfActivityDefRepo) GetById(wfDefId, activityDefId int64) (*viewmodel.WfActivityDefInfo, error) {
+    sqlSelect   := ` SELECT A.wf_def_id,
+                            A.activity_def_id,
+                            A.activity_def_title,
+                            A.activity_def_desc,
+                            A.activity_code,
+                            A.form_code                  `
+    sqlFrom     := ` FROM   wf_activity_def AS A         `
+    sqlWhere    := ` WHERE  A.deleted_flag = 0           `
+    sqlWhere += fmt.Sprintf(" AND A.wf_def_id       = %d ", wfDefId)
+    sqlWhere += fmt.Sprintf(" AND A.activity_def_id = %d ", activityDefId)
+    
+    data := &viewmodel.WfActivityDefInfo{}
+    has, err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere).Get(data)
+    if !has || err != nil {
+        return nil, err
+    } else {
+        return data, nil
+    }
+}
+
+func (d *WfActivityDefRepo) Create(data *datamodel.WfActivityDef) error {
+    _, err := d.engine.Insert(data)
+    return err
+}
+
+func (d *WfActivityDefRepo) Update(data *datamodel.WfActivityDef) error {
+    wfDefId       := data.WfDefId
+    activityDefId := data.ActivityDefId
+    data.UpdatedAt = time.Now()
+    
+    _, err := d.engine.
+        Where("wf_def_id        = ?", wfDefId).
+        Where("activity_def_id  = ?", activityDefId).
+        Update(data)
+    
+    return err
+}
+
+func (d *WfActivityDefRepo) Delete(m map[string]interface{}) error {
+    wfDefId         := m["wfDefId"].(int64)
+    activityDefId   := m["activityDefId"].(int64)
+    deletedBy       := m["deletedBy"].(int64)
+    
+    data := &datamodel.WfActivityDef{}
+    data.DeletedFlag = 1
+    data.DeletedBy   = deletedBy
+    data.DeletedAt   = time.Now()
+    _, err := d.engine.
+        Where("wf_def_id        = ?", wfDefId).
+        Where("activity_def_id = ?", activityDefId).
+        Update(data)
+    return err
+}

+ 213 - 0
repositories/wf_activity_ins_repo.go

@@ -0,0 +1,213 @@
+package repositories
+
+import (
+    "fmt"
+    "time"
+    "xorm.io/xorm"
+    "xps/datamodel"
+    "xps/viewmodel"
+)
+
+type WfActivityInsRepo struct {
+    engine *xorm.Engine
+}
+
+func NewWfActivityInsRepo(engine *xorm.Engine) *WfActivityInsRepo {
+    return &WfActivityInsRepo{
+        engine: engine,
+    }
+}
+
+func (d *WfActivityInsRepo) GetPage(m map[string]interface{}) (*viewmodel.PageResult, error){
+    limit       := m["limit"].(int)
+    page        := m["page"].(int)
+    
+    sqlSelect   := ` SELECT A.oc_id,
+                            A.wf_def_id,
+                            A.activity_def_id,
+                            A.wf_ins_id,
+                            A.activity_ins_id,
+                            A.activity_ins_title,
+                            A.activity_code,
+                            A.form_code,
+                            A.start_time,
+                            A.end_time,
+                            A.status,
+                            A.group_id,
+                            A.group_name,
+                            A.position_id,
+                            A.position_name,
+                            A.account_id,
+                            A.account_name,
+                            A.activity_ins_from,
+                            A.activity_ins_to           `
+    sqlFrom     := ` FROM   wf_activity_ins AS A        `
+    sqlWhere    := ` WHERE  A.deleted_flag = 0          `
+    
+    if ocId, ok := m["ocId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.oc_id = %d ", ocId)
+    }
+    if wfDefId, ok := m["wfDefId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.wf_def_id = %d ", wfDefId)
+    }
+    if wfInsId, ok := m["wfInsId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.wf_ins_id = %d ", wfInsId)
+    }
+    if wfActivityDefId, ok := m["wfActivityDefId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.activity_def_id = %d ", wfActivityDefId)
+    }
+    if wfActivityInsId, ok := m["wfActivityInsId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.activity_ins_id = %d ", wfActivityInsId)
+    }
+    if keywords, ok := m["keywords"]; ok {
+        sqlWhere += ` AND A.activity_ins_title like ` + "'%" + fmt.Sprintf("%s", keywords) + "%'"
+    }
+    
+    sqlCount := `SELECT COUNT(*) `
+    total, err := d.engine.SQL(sqlCount + sqlFrom + sqlWhere).Count(new(viewmodel.WfActivityInsInfo))
+    if err != nil {
+        return nil, err
+    }
+    
+    sqlOrderBy := " ORDER BY A.wf_ins_id, A.activity_ins_id ASC "
+    pageStart  := (limit - 1) * limit
+    sqlLimit   := fmt.Sprintf(" LIMIT %d OFFSET %d ", limit, pageStart)
+    
+    datalist   := make([]viewmodel.WfActivityInsInfo, 0)
+    err = d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy + sqlLimit).Find(&datalist)
+    if err != nil {
+        return nil, err
+    }
+    
+    pageResult := &viewmodel.PageResult{}
+    pageResult.Data     = datalist
+    pageResult.Total    = total
+    pageResult.PageSize = limit
+    pageResult.Page     = page
+    return pageResult, nil
+}
+
+func (d *WfActivityInsRepo) GetList(m map[string]interface{}) ([]viewmodel.WfActivityInsInfo, error) {
+    sqlSelect   := ` SELECT A.oc_id,
+                            A.wf_def_id,
+                            A.activity_def_id,
+                            A.wf_ins_id,
+                            A.activity_ins_id,
+                            A.activity_ins_title,
+                            A.activity_code,
+                            A.form_code,
+                            A.start_time,
+                            A.end_time,
+                            A.status,
+                            A.group_id,
+                            A.group_name,
+                            A.position_id,
+                            A.position_name,
+                            A.account_id,
+                            A.account_name,
+                            A.activity_ins_from,
+                            A.activity_ins_to           `
+    sqlFrom     := ` FROM   wf_activity_ins AS A        `
+    sqlWhere    := ` WHERE  A.deleted_flag = 0          `
+    
+    if ocId, ok := m["ocId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.oc_id = %d ", ocId)
+    }
+    if wfDefId, ok := m["wfDefId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.wf_def_id = %d ", wfDefId)
+    }
+    if wfInsId, ok := m["wfInsId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.wf_ins_id = %d ", wfInsId)
+    }
+    if wfActivityDefId, ok := m["wfActivityDefId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.activity_def_id = %d ", wfActivityDefId)
+    }
+    if wfActivityInsId, ok := m["wfActivityInsId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.activity_ins_id = %d ", wfActivityInsId)
+    }
+    if keywords, ok := m["keywords"]; ok {
+        sqlWhere += ` AND A.activity_ins_title like ` + "'%" + fmt.Sprintf("%s", keywords) + "%'"
+    }
+    
+    sqlOrderBy := " ORDER BY A.wf_ins_id, A.activity_ins_id ASC "
+    datalist := make([]viewmodel.WfActivityInsInfo, 0)
+    err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy).Find(&datalist)
+    if err != nil {
+        return nil, err
+    } else {
+        return datalist, nil
+    }
+}
+
+func (d *WfActivityInsRepo) GetById(ocId, wfInsId, activityInsId int64) (*viewmodel.WfActivityInsInfo, error) {
+    sqlSelect   := ` SELECT A.oc_id,
+                            A.wf_def_id,
+                            A.activity_def_id,
+                            A.wf_ins_id,
+                            A.activity_ins_id,
+                            A.activity_ins_title,
+                            A.activity_code,
+                            A.form_code,
+                            A.start_time,
+                            A.end_time,
+                            A.status,
+                            A.group_id,
+                            A.group_name,
+                            A.position_id,
+                            A.position_name,
+                            A.account_id,
+                            A.account_name,
+                            A.activity_ins_from,
+                            A.activity_ins_to           `
+    sqlFrom     := ` FROM   wf_activity_ins AS A        `
+    sqlWhere    := ` WHERE  A.deleted_flag = 0          `
+    sqlWhere += fmt.Sprintf(" AND A.oc_id           = %d ", ocId)
+    sqlWhere += fmt.Sprintf(" AND A.wf_ins_id       = %d ", wfInsId)
+    sqlWhere += fmt.Sprintf(" AND A.activity_ins_id = %d ", activityInsId)
+    
+    data := &viewmodel.WfActivityInsInfo{}
+    has, err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere).Get(data)
+    if !has || err != nil {
+        return nil, err
+    } else {
+        return data, nil
+    }
+}
+
+func (d *WfActivityInsRepo) Create(data *datamodel.WfActivityIns) error {
+    _, err := d.engine.Insert(data)
+    return err
+}
+
+func (d *WfActivityInsRepo) Update(data *datamodel.WfActivityIns) error {
+    ocId          := data.OcId
+    wfInsId       := data.WfInsId
+    activityInsId := data.ActivityInsId
+    data.UpdatedAt = time.Now()
+    
+    _, err := d.engine.
+        Where("oc_id            = ?", ocId).
+        Where("wf_ins_id        = ?", wfInsId).
+        Where("activity_ins_id  = ?", activityInsId).
+        Update(data)
+    
+    return err
+}
+
+func (d *WfActivityInsRepo) Delete(m map[string]interface{}) error {
+    ocId          := m["OcId"].(int64)
+    wfInsId       := m["WfInsId"].(int64)
+    activityInsId := m["ActivityInsId"].(int64)
+    deletedBy     := m["deletedBy"].(int64)
+    
+    data := &datamodel.WfActivityIns{}
+    data.DeletedFlag = 1
+    data.DeletedBy   = deletedBy
+    data.DeletedAt   = time.Now()
+    _, err := d.engine.
+        Where("oc_id           = ?", ocId).
+        Where("wf_ins_id       = ?", wfInsId).
+        Where("activity_ins_id = ?", activityInsId).
+        Update(data)
+    return err
+}

+ 1 - 0
repositories/wf_activity_member_repo.go

@@ -0,0 +1 @@
+package repositories

+ 131 - 0
repositories/wf_def_repo.go

@@ -0,0 +1,131 @@
+package repositories
+
+import (
+    "fmt"
+    "time"
+    "xorm.io/xorm"
+    "xps/datamodel"
+    "xps/viewmodel"
+)
+
+type WfDefRepo struct {
+    engine *xorm.Engine
+}
+
+func NewWfDefRepo(engine *xorm.Engine) *WfDefRepo {
+    return &WfDefRepo{
+        engine: engine,
+    }
+}
+
+func (d *WfDefRepo) GetPage(m map[string]interface{}) (*viewmodel.PageResult, error){
+    limit       := m["limit"].(int)
+    page        := m["page"].(int)
+    
+    sqlSelect   := ` SELECT A.wf_def_id,
+                            A.wf_def_title,
+                            A.wf_def_desc      `
+    sqlFrom     := ` FROM   wf_def       AS A  `
+    sqlWhere    := ` WHERE  A.deleted_flag = 0 `
+    
+    if wfDefId, ok := m["wfDefId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.wf_def_id = %d ", wfDefId)
+    }
+    if keywords, ok := m["keywords"]; ok {
+        sqlWhere += ` AND A.wf_def_title like ` + "'%" + fmt.Sprintf("%s", keywords) + "%'"
+    }
+    
+    sqlCount := `SELECT COUNT(*) `
+    total, err := d.engine.SQL(sqlCount + sqlFrom + sqlWhere).Count(new(viewmodel.WfDefInfo))
+    if err != nil {
+        return nil, err
+    }
+    
+    sqlOrderBy := " ORDER BY A.wf_def_id ASC "
+    pageStart  := (limit - 1) * limit
+    sqlLimit   := fmt.Sprintf(" LIMIT %d OFFSET %d ", limit, pageStart)
+    
+    datalist   := make([]viewmodel.WfDefInfo, 0)
+    err = d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy + sqlLimit).Find(&datalist)
+    if err != nil {
+        return nil, err
+    }
+    
+    pageResult := &viewmodel.PageResult{}
+    pageResult.Data     = datalist
+    pageResult.Total    = total
+    pageResult.PageSize = limit
+    pageResult.Page     = page
+    return pageResult, nil
+}
+
+func (d *WfDefRepo) GetList(m map[string]interface{}) ([]viewmodel.WfDefInfo, error) {
+    sqlSelect   := ` SELECT A.wf_def_id,
+                            A.wf_def_title,
+                            A.wf_def_desc      `
+    sqlFrom     := ` FROM   wf_def       AS A  `
+    sqlWhere    := ` WHERE  A.deleted_flag = 0 `
+    
+    if wfDefId, ok := m["wfDefId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.wf_def_id = %d ", wfDefId)
+    }
+    if keywords, ok := m["keywords"]; ok {
+        sqlWhere += ` AND A.wf_def_title like ` + "'%" + fmt.Sprintf("%s", keywords) + "%'"
+    }
+    
+    sqlOrderBy := " ORDER BY A.wf_def_id ASC "
+    datalist := make([]viewmodel.WfDefInfo, 0)
+    err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy).Find(&datalist)
+    if err != nil {
+        return nil, err
+    } else {
+        return datalist, nil
+    }
+}
+
+func (d *WfDefRepo) GetById(wfDefId int64) (*viewmodel.WfDefInfo, error) {
+    sqlSelect   := ` SELECT A.wf_def_id,
+                            A.wf_def_title,
+                            A.wf_def_desc      `
+    sqlFrom     := ` FROM   wf_def       AS A  `
+    sqlWhere    := ` WHERE  A.deleted_flag = 0 `
+    sqlWhere += fmt.Sprintf(" AND A.wf_def_id = %d ", wfDefId)
+    
+    data := &viewmodel.WfDefInfo{}
+    has, err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere).Get(data)
+    if !has || err != nil {
+        return nil, err
+    } else {
+        return data, nil
+    }
+}
+
+func (d *WfDefRepo) Create(data *datamodel.WfDef) error {
+    _, err := d.engine.Insert(data)
+    return err
+}
+
+func (d *WfDefRepo) Update(data *datamodel.WfDef) error {
+    wfDefId := data.WfDefId
+    data.UpdatedAt = time.Now()
+    
+    _, err := d.engine.
+        Where("wf_def_id = ?", wfDefId).
+        Update(data)
+    
+    return err
+}
+
+func (d *WfDefRepo) Delete(m map[string]interface{}) error {
+    wfDefId   := m["wfDefId"].(int64)
+    deletedBy := m["deletedBy"].(int64)
+    
+    data := &datamodel.WfDef{}
+    data.DeletedFlag = 1
+    data.DeletedBy   = deletedBy
+    data.DeletedAt   = time.Now()
+    _, err := d.engine.
+        Where("wf_def_id = ?", wfDefId).
+        Update(data)
+    return err
+}

+ 138 - 0
repositories/wf_ins_attach_repo.go

@@ -0,0 +1,138 @@
+package repositories
+
+import (
+    "fmt"
+    "xorm.io/xorm"
+    "xps/datamodel"
+    "xps/viewmodel"
+)
+
+type WfInsAttachRepo struct {
+    engine *xorm.Engine
+}
+
+func NewWfInsAttachRepo(engine *xorm.Engine) *WfInsAttachRepo {
+    return &WfInsAttachRepo{
+        engine: engine,
+    }
+}
+
+func (d *WfInsAttachRepo) GetPage(m map[string]interface{}) (*viewmodel.PageResult, error){
+    limit       := m["limit"].(int)
+    page        := m["page"].(int)
+    
+    sqlSelect   := `    SELECT      A.oc_id,
+                                    A.wf_ins_id,
+                                    A.activity_ins_id,
+                                    A.activity_code,
+                                    A.file_id,
+                                    B.file_title,
+                                    B.dir_id,
+                                    B.file_icon,
+                                    B.file_url,
+                                    B.file_ext,
+                                    B.file_size,
+                                    B.file_author,
+                                    B.file_desc,
+                                    B.uploaded_by  AS uploader_id,
+                                    C.account_name AS uploader_name,
+                                    B.uploaded_at                      `
+    sqlFrom     := `     FROM       wf_ins_attach   AS A
+                         LEFT JOIN  doc_file        AS B ON(A.oc_id = B.oc_id AND A.file_id     = B.file_id)
+                         LEFT JOIN  account         AS C ON(B.oc_id = C.oc_id AND B.uploaded_by = C.account_id) `
+    sqlWhere    := `     WHERE  A.deleted_flag = 0                     `
+    
+    if ocId, ok := m["ocId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.oc_id = %d ", ocId)
+    }
+    if wfInsId, ok := m["wfInsId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.wf_ins_id = %d ", wfInsId)
+    }
+    if keywords, ok := m["keywords"]; ok {
+        sqlWhere += ` AND B.file_title like ` + "'%" + fmt.Sprintf("%s", keywords) + "%'"
+    }
+    
+    sqlCount := ` SELECT COUNT(*) `
+    total, err := d.engine.SQL(sqlCount + sqlFrom + sqlWhere).Count(new(viewmodel.WfInsAttachInfo))
+    if err != nil {
+        return nil, err
+    }
+    
+    sqlOrderBy := " ORDER BY A.file_id ASC "
+    pageStart  := (limit - 1) * limit
+    sqlLimit   := fmt.Sprintf(" LIMIT %d OFFSET %d ", limit, pageStart)
+    
+    datalist   := make([]viewmodel.WfInsAttachInfo, 0)
+    err = d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy + sqlLimit).Find(&datalist)
+    if err != nil {
+        return nil, err
+    }
+    
+    pageResult := &viewmodel.PageResult{}
+    pageResult.Data     = datalist
+    pageResult.Total    = total
+    pageResult.PageSize = limit
+    pageResult.Page     = page
+    return pageResult, nil
+}
+
+func (d *WfInsAttachRepo) GetList(m map[string]interface{}) ([]viewmodel.WfInsAttachInfo, error) {
+    sqlSelect   := `    SELECT      A.oc_id,
+                                    A.wf_ins_id,
+                                    A.activity_ins_id,
+                                    A.activity_code,
+                                    A.file_id,
+                                    B.file_title,
+                                    B.dir_id,
+                                    B.file_icon,
+                                    B.file_url,
+                                    B.file_ext,
+                                    B.file_size,
+                                    B.file_author,
+                                    B.file_desc,
+                                    B.uploaded_by  AS uploader_id,
+                                    C.account_name AS uploader_name,
+                                    B.uploaded_at                      `
+    sqlFrom     := `     FROM       wf_ins_attach   AS A
+                         LEFT JOIN  doc_file        AS B ON(A.oc_id = B.oc_id AND A.file_id     = B.file_id)
+                         LEFT JOIN  account         AS C ON(B.oc_id = C.oc_id AND B.uploaded_by = C.account_id) `
+    sqlWhere    := `     WHERE  A.deleted_flag = 0                     `
+    
+    if ocId, ok := m["ocId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.oc_id = %d ", ocId)
+    }
+    if wfInsId, ok := m["wfInsId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.wf_ins_id = %d ", wfInsId)
+    }
+    if keywords, ok := m["keywords"]; ok {
+        sqlWhere += ` AND B.file_title like ` + "'%" + fmt.Sprintf("%s", keywords) + "%'"
+    }
+    
+    sqlOrderBy := " ORDER BY A.file_id ASC "
+    datalist := make([]viewmodel.WfInsAttachInfo, 0)
+    err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy).Find(&datalist)
+    if err != nil {
+        return nil, err
+    } else {
+        return datalist, nil
+    }
+}
+
+func (d *WfInsAttachRepo) Create(data *datamodel.WfInsAttach) error {
+    _, err := d.engine.Insert(data)
+    return err
+}
+
+func (d *WfInsAttachRepo) Delete(m map[string]interface{}) error {
+    ocId        := m["ocId"].(int64)
+    wfInsId     := m["wfInsId"].(int64)
+    fileId      := m["fileId"].(int64)
+    
+    data := &datamodel.WfDef{}
+    _, err := d.engine.
+        Where("oc_id        = ?", ocId).
+        Where("wf_ins_id    = ?", wfInsId).
+        Where("file_id    = ?", fileId).
+        Delete(data)
+    return err
+}

+ 197 - 0
repositories/wf_ins_repo.go

@@ -0,0 +1,197 @@
+package repositories
+
+import (
+    "fmt"
+    "time"
+    "xorm.io/xorm"
+    "xps/datamodel"
+    "xps/viewmodel"
+)
+
+type WfInsRepo struct {
+    engine *xorm.Engine
+}
+
+func NewWfInsRepo(engine *xorm.Engine) *WfInsRepo {
+    return &WfInsRepo{
+        engine: engine,
+    }
+}
+
+func (d *WfInsRepo) GetPage(m map[string]interface{}) (*viewmodel.PageResult, error){
+    limit       := m["limit"].(int)
+    page        := m["page"].(int)
+    
+    sqlSelect   := `    SELECT      A.oc_id,
+                                    B.oc_name,
+                                    A.wf_def_id,
+                                    A.wf_ins_id,
+                                    A.wf_ins_title,
+                                    A.status,
+                                    A.begin_time,
+                                    A.finish_time,
+                                    A.cur_activity_ins_id,
+                                    A.cur_activity_code,
+                                    A.cur_activity_title,
+                                    A.cur_activity_begin_time,
+                                    A.cur_form_code,
+                                    A.cur_group_id,
+                                    A.cur_position_id,
+                                    A.cur_account_id,
+                                    A.cur_group_name,
+                                    A.cur_position_name,
+                                    A.cur_account_name                          `
+    sqlFrom     := `    FROM        wf_ins          AS A
+                        LEFT JOIN   oc              AS B ON (A.oc_id = B.oc_id) `
+    sqlWhere    := `    WHERE  A.deleted_flag = 0                               `
+    
+    if ocId, ok := m["ocId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.oc_id = %d ", ocId)
+    }
+    if wfDefId, ok := m["wfDefId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.wf_def_id = %d ", wfDefId)
+    }
+    if wfInsId, ok := m["wfInsId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.wf_ins_id = %d ", wfInsId)
+    }
+    if keywords, ok := m["keywords"]; ok {
+        sqlWhere += ` AND   A.wf_ins_title like ` + "'%" + fmt.Sprintf("%s", keywords) + "%'"
+    }
+    
+    sqlCount := ` SELECT COUNT(*) `
+    total, err := d.engine.SQL(sqlCount + sqlFrom + sqlWhere).Count(new(viewmodel.WfInsInfo))
+    if err != nil {
+        return nil, err
+    }
+    
+    sqlOrderBy := " ORDER BY A.wf_ins_id DESC "
+    pageStart  := (limit - 1) * limit
+    sqlLimit   := fmt.Sprintf(" LIMIT %d OFFSET %d ", limit, pageStart)
+    
+    datalist   := make([]viewmodel.WfInsInfo, 0)
+    err = d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy + sqlLimit).Find(&datalist)
+    if err != nil {
+        return nil, err
+    }
+    
+    pageResult := &viewmodel.PageResult{}
+    pageResult.Data     = datalist
+    pageResult.Total    = total
+    pageResult.PageSize = limit
+    pageResult.Page     = page
+    return pageResult, nil
+}
+
+func (d *WfInsRepo) GetList(m map[string]interface{}) ([]viewmodel.WfInsInfo, error) {
+    sqlSelect   := `    SELECT      A.oc_id,
+                                    B.oc_name,
+                                    A.wf_def_id,
+                                    A.wf_ins_id,
+                                    A.wf_ins_title,
+                                    A.status,
+                                    A.begin_time,
+                                    A.finish_time,
+                                    A.cur_activity_ins_id,
+                                    A.cur_activity_code,
+                                    A.cur_activity_title,
+                                    A.cur_activity_begin_time,
+                                    A.cur_form_code,
+                                    A.cur_group_id,
+                                    A.cur_position_id,
+                                    A.cur_account_id,
+                                    A.cur_group_name,
+                                    A.cur_position_name,
+                                    A.cur_account_name                          `
+    sqlFrom     := `    FROM        wf_ins          AS A
+                        LEFT JOIN   oc              AS B ON (A.oc_id = B.oc_id) `
+    sqlWhere    := `    WHERE  A.deleted_flag = 0                               `
+    
+    if ocId, ok := m["ocId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.oc_id = %d ", ocId)
+    }
+    if wfDefId, ok := m["wfDefId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.wf_def_id = %d ", wfDefId)
+    }
+    if wfInsId, ok := m["wfInsId"]; ok {
+        sqlWhere += fmt.Sprintf(" AND A.wf_ins_id = %d ", wfInsId)
+    }
+    if keywords, ok := m["keywords"]; ok {
+        sqlWhere += ` AND A.wf_def_title like ` + "'%" + fmt.Sprintf("%s", keywords) + "%'"
+    }
+    
+    sqlOrderBy := " ORDER BY A.wf_ins_id DESC "
+    datalist := make([]viewmodel.WfInsInfo, 0)
+    err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere + sqlOrderBy).Find(&datalist)
+    if err != nil {
+        return nil, err
+    } else {
+        return datalist, nil
+    }
+}
+
+func (d *WfInsRepo) GetById(ocId, wfInsId int64) (*viewmodel.WfInsInfo, error) {
+    sqlSelect   := `    SELECT      A.oc_id,
+                                    B.oc_name,
+                                    A.wf_def_id,
+                                    A.wf_ins_id,
+                                    A.wf_ins_title,
+                                    A.status,
+                                    A.begin_time,
+                                    A.finish_time,
+                                    A.cur_activity_ins_id,
+                                    A.cur_activity_code,
+                                    A.cur_activity_title,
+                                    A.cur_activity_begin_time,
+                                    A.cur_form_code,
+                                    A.cur_group_id,
+                                    A.cur_position_id,
+                                    A.cur_account_id,
+                                    A.cur_group_name,
+                                    A.cur_position_name,
+                                    A.cur_account_name                          `
+    sqlFrom     := `    FROM        wf_ins          AS A
+                        LEFT JOIN   oc              AS B ON (A.oc_id = B.oc_id) `
+    sqlWhere    := `    WHERE  A.deleted_flag = 0                               `
+    sqlWhere += fmt.Sprintf(" AND A.oc_id     = %d ", ocId)
+    sqlWhere += fmt.Sprintf(" AND A.wf_ins_id = %d ", wfInsId)
+    
+    data := &viewmodel.WfInsInfo{}
+    has, err := d.engine.SQL(sqlSelect + sqlFrom + sqlWhere).Get(data)
+    if !has || err != nil {
+        return nil, err
+    } else {
+        return data, nil
+    }
+}
+
+func (d *WfInsRepo) Create(data *datamodel.WfIns) error {
+    _, err := d.engine.Insert(data)
+    return err
+}
+
+func (d *WfInsRepo) Update(data *datamodel.WfIns) error {
+    wfDefId := data.WfDefId
+    data.UpdatedAt = time.Now()
+    
+    _, err := d.engine.
+        Where("wf_def_id = ?", wfDefId).
+        Update(data)
+    
+    return err
+}
+
+func (d *WfInsRepo) Delete(m map[string]interface{}) error {
+    ocId        := m["ocId"].(int64)
+    wfInsId     := m["wfInsId"].(int64)
+    deletedBy   := m["deletedBy"].(int64)
+    
+    data := &datamodel.WfDef{}
+    data.DeletedFlag = 1
+    data.DeletedBy   = deletedBy
+    data.DeletedAt   = time.Now()
+    _, err := d.engine.
+        Where("oc_id        = ?", ocId).
+        Where("wf_ins_id    = ?", wfInsId).
+        Update(data)
+    return err
+}

+ 52 - 0
service/wf_activity_action_def_service.go

@@ -0,0 +1,52 @@
+package service
+
+import (
+    "xps/datamodel"
+    "xps/datasource"
+    "xps/repositories"
+    "xps/viewmodel"
+)
+
+type WfActivityActionDefService interface {
+    GetList(m map[string]interface{}) ([]viewmodel.WfActivityActionDefInfo, error)
+    GetPage(m map[string]interface{}) (*viewmodel.PageResult, error)
+    GetById(wfDefId, activityDefId, actionId int64) (*viewmodel.WfActivityActionDefInfo, error)
+    Update(user *datamodel.WfActivityActionDef) error
+    Create(user *datamodel.WfActivityActionDef) error
+    Delete(m map[string]interface{}) error
+}
+
+type wfActivityActionDefService struct {
+    repo *repositories.WfActivityActionDefRepo
+}
+
+func NewWfActivityActionDefService() WfActivityActionDefService {
+    return &wfActivityActionDefService{
+        repo: repositories.NewWfActivityActionDefRepo(datasource.InstanceMaster()),
+    }
+}
+
+func (s *wfActivityActionDefService) GetList(m map[string]interface{}) ([]viewmodel.WfActivityActionDefInfo, error) {
+    return s.repo.GetList(m)
+}
+
+func (s *wfActivityActionDefService) GetPage(m map[string]interface{}) (*viewmodel.PageResult, error) {
+    return s.repo.GetPage(m)
+}
+
+func (s *wfActivityActionDefService) GetById(wfDefId, activityDefId, actionId int64) (*viewmodel.WfActivityActionDefInfo, error) {
+    return s.repo.GetById(wfDefId, activityDefId, actionId)
+}
+
+func (s *wfActivityActionDefService) Create(data *datamodel.WfActivityActionDef) error {
+    data.ActionId = NewID()
+    return s.repo.Create(data)
+}
+
+func (s *wfActivityActionDefService) Update(data *datamodel.WfActivityActionDef) error {
+    return s.repo.Update(data)
+}
+
+func (s *wfActivityActionDefService) Delete(m map[string]interface{}) error {
+    return s.repo.Delete(m)
+}

+ 53 - 0
service/wf_activity_action_ins_service.go

@@ -0,0 +1,53 @@
+package service
+
+import (
+    "xps/datamodel"
+    "xps/datasource"
+    "xps/repositories"
+    "xps/viewmodel"
+)
+
+type WfActivityActionInsService interface {
+    GetList(m map[string]interface{}) ([]viewmodel.WfActivityActionInsInfo, error)
+    GetPage(m map[string]interface{}) (*viewmodel.PageResult, error)
+    GetById(ocId, wfInsId, activityInsId, actionInsId int64) (*viewmodel.WfActivityActionInsInfo, error)
+    Update(user *datamodel.WfActivityActionIns) error
+    Create(user *datamodel.WfActivityActionIns) error
+    Delete(m map[string]interface{}) error
+}
+
+type wfActivityActionInsService struct {
+    repo *repositories.WfActivityActionInsRepo
+}
+
+func NewWfActivityActionInsService() WfActivityActionInsService {
+    return &wfActivityActionInsService{
+        repo: repositories.NewWfActivityActionInsRepo(datasource.InstanceMaster()),
+    }
+}
+
+func (s *wfActivityActionInsService) GetList(m map[string]interface{}) ([]viewmodel.WfActivityActionInsInfo, error) {
+    return s.repo.GetList(m)
+}
+
+func (s *wfActivityActionInsService) GetPage(m map[string]interface{}) (*viewmodel.PageResult, error) {
+    return s.repo.GetPage(m)
+}
+
+func (s *wfActivityActionInsService) GetById(ocId, wfInsId, activityInsId, actionInsId int64) (*viewmodel.WfActivityActionInsInfo, error) {
+    return s.repo.GetById(ocId, wfInsId, activityInsId, actionInsId)
+}
+
+func (s *wfActivityActionInsService) Create(data *datamodel.WfActivityActionIns) error {
+    data.ActionId = NewID()
+    return s.repo.Create(data)
+}
+
+func (s *wfActivityActionInsService) Update(data *datamodel.WfActivityActionIns) error {
+    return s.repo.Update(data)
+}
+
+func (s *wfActivityActionInsService) Delete(m map[string]interface{}) error {
+    return s.repo.Delete(m)
+}
+

+ 52 - 0
service/wf_activity_def_service.go

@@ -0,0 +1,52 @@
+package service
+
+import (
+    "xps/datamodel"
+    "xps/datasource"
+    "xps/repositories"
+    "xps/viewmodel"
+)
+
+type WfActivityDefService interface {
+    GetList(m map[string]interface{}) ([]viewmodel.WfActivityDefInfo, error)
+    GetPage(m map[string]interface{}) (*viewmodel.PageResult, error)
+    GetById(wfDefId, activityDefId int64) (*viewmodel.WfActivityDefInfo, error)
+    Update(user *datamodel.WfActivityDef) error
+    Create(user *datamodel.WfActivityDef) error
+    Delete(m map[string]interface{}) error
+}
+
+type wfActivityDefService struct {
+    repo *repositories.WfActivityDefRepo
+}
+
+func NewWfActivityDefService() WfActivityDefService {
+    return &wfActivityDefService{
+        repo: repositories.NewWfActivityDefRepo(datasource.InstanceMaster()),
+    }
+}
+
+func (s *wfActivityDefService) GetList(m map[string]interface{}) ([]viewmodel.WfActivityDefInfo, error) {
+    return s.repo.GetList(m)
+}
+
+func (s *wfActivityDefService) GetPage(m map[string]interface{}) (*viewmodel.PageResult, error) {
+    return s.repo.GetPage(m)
+}
+
+func (s *wfActivityDefService) GetById(wfDefId, activityDefId int64) (*viewmodel.WfActivityDefInfo, error) {
+    return s.repo.GetById(wfDefId, activityDefId)
+}
+
+func (s *wfActivityDefService) Create(data *datamodel.WfActivityDef) error {
+    data.ActivityDefId = NewID()
+    return s.repo.Create(data)
+}
+
+func (s *wfActivityDefService) Update(data *datamodel.WfActivityDef) error {
+    return s.repo.Update(data)
+}
+
+func (s *wfActivityDefService) Delete(m map[string]interface{}) error {
+    return s.repo.Delete(m)
+}

+ 52 - 0
service/wf_activity_ins_service.go

@@ -0,0 +1,52 @@
+package service
+
+import (
+    "xps/datamodel"
+    "xps/datasource"
+    "xps/repositories"
+    "xps/viewmodel"
+)
+
+type WfActivityInsService interface {
+    GetList(m map[string]interface{}) ([]viewmodel.WfActivityInsInfo, error)
+    GetPage(m map[string]interface{}) (*viewmodel.PageResult, error)
+    GetById(ocId, wfInsId, activityInsId int64) (*viewmodel.WfActivityInsInfo, error)
+    Update(user *datamodel.WfActivityIns) error
+    Create(user *datamodel.WfActivityIns) error
+    Delete(m map[string]interface{}) error
+}
+
+type wfActivityInsService struct {
+    repo *repositories.WfActivityInsRepo
+}
+
+func NewWfActivityInsService() WfActivityInsService {
+    return &wfActivityInsService{
+        repo: repositories.NewWfActivityInsRepo(datasource.InstanceMaster()),
+    }
+}
+
+func (s *wfActivityInsService) GetList(m map[string]interface{}) ([]viewmodel.WfActivityInsInfo, error) {
+    return s.repo.GetList(m)
+}
+
+func (s *wfActivityInsService) GetPage(m map[string]interface{}) (*viewmodel.PageResult, error) {
+    return s.repo.GetPage(m)
+}
+
+func (s *wfActivityInsService) GetById(ocId, wfInsId, activityInsId int64) (*viewmodel.WfActivityInsInfo, error) {
+    return s.repo.GetById(ocId, wfInsId, activityInsId)
+}
+
+func (s *wfActivityInsService) Create(data *datamodel.WfActivityIns) error {
+    data.ActivityInsId = NewID()
+    return s.repo.Create(data)
+}
+
+func (s *wfActivityInsService) Update(data *datamodel.WfActivityIns) error {
+    return s.repo.Update(data)
+}
+
+func (s *wfActivityInsService) Delete(m map[string]interface{}) error {
+    return s.repo.Delete(m)
+}

+ 52 - 0
service/wf_def_service.go

@@ -0,0 +1,52 @@
+package service
+
+import (
+    "xps/datamodel"
+    "xps/datasource"
+    "xps/repositories"
+    "xps/viewmodel"
+)
+
+type WfDefService interface {
+    GetList(m map[string]interface{}) ([]viewmodel.WfDefInfo, error)
+    GetPage(m map[string]interface{}) (*viewmodel.PageResult, error)
+    GetById(wfDefId int64) (*viewmodel.WfDefInfo, error)
+    Update(user *datamodel.WfDef) error
+    Create(user *datamodel.WfDef) error
+    Delete(m map[string]interface{}) error
+}
+
+type wfDefService struct {
+    repo *repositories.WfDefRepo
+}
+
+func NewWfDefService() WfDefService {
+    return &wfDefService{
+        repo: repositories.NewWfDefRepo(datasource.InstanceMaster()),
+    }
+}
+
+func (s *wfDefService) GetList(m map[string]interface{}) ([]viewmodel.WfDefInfo, error) {
+    return s.repo.GetList(m)
+}
+
+func (s *wfDefService) GetPage(m map[string]interface{}) (*viewmodel.PageResult, error) {
+    return s.repo.GetPage(m)
+}
+
+func (s *wfDefService) GetById(wfDefId int64) (*viewmodel.WfDefInfo, error) {
+    return s.repo.GetById(wfDefId)
+}
+
+func (s *wfDefService) Create(data *datamodel.WfDef) error {
+    data.WfDefId = NewID()
+    return s.repo.Create(data)
+}
+
+func (s *wfDefService) Update(data *datamodel.WfDef) error {
+    return s.repo.Update(data)
+}
+
+func (s *wfDefService) Delete(m map[string]interface{}) error {
+    return s.repo.Delete(m)
+}

+ 1 - 0
service/wf_ins_attach_service.go

@@ -0,0 +1 @@
+package service

+ 52 - 0
service/wf_ins_service.go

@@ -0,0 +1,52 @@
+package service
+
+import (
+    "xps/datamodel"
+    "xps/datasource"
+    "xps/repositories"
+    "xps/viewmodel"
+)
+
+type WfInsService interface {
+    GetList(m map[string]interface{}) ([]viewmodel.WfInsInfo, error)
+    GetPage(m map[string]interface{}) (*viewmodel.PageResult, error)
+    GetById(ocId, wfInsId int64) (*viewmodel.WfInsInfo, error)
+    Update(user *datamodel.WfIns) error
+    Create(user *datamodel.WfIns) error
+    Delete(m map[string]interface{}) error
+}
+
+type wfInsService struct {
+    repo *repositories.WfInsRepo
+}
+
+func NewWfInsService() WfInsService {
+    return &wfInsService{
+        repo: repositories.NewWfInsRepo(datasource.InstanceMaster()),
+    }
+}
+
+func (s *wfInsService) GetList(m map[string]interface{}) ([]viewmodel.WfInsInfo, error) {
+    return s.repo.GetList(m)
+}
+
+func (s *wfInsService) GetPage(m map[string]interface{}) (*viewmodel.PageResult, error) {
+    return s.repo.GetPage(m)
+}
+
+func (s *wfInsService) GetById(ocId, wfInsId int64) (*viewmodel.WfInsInfo, error) {
+    return s.repo.GetById(ocId, wfInsId)
+}
+
+func (s *wfInsService) Create(data *datamodel.WfIns) error {
+    data.WfInsId = NewID()
+    return s.repo.Create(data)
+}
+
+func (s *wfInsService) Update(data *datamodel.WfIns) error {
+    return s.repo.Update(data)
+}
+
+func (s *wfInsService) Delete(m map[string]interface{}) error {
+    return s.repo.Delete(m)
+}