object_notice.go 3.8 KB
package domain

import (
	"context"
	"gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/db/transaction"
	"gitlab.fjmaimaimai.com/allied-creation/sumifcc-bchart/cmd/chart-server/interanl/pkg/gateway/bytelib"
	"gorm.io/plugin/soft_delete"
)

type ObjectNotice struct {
	Id                int64                 `json:"id"`                  // ID
	CompanyId         int64                 `json:"companyId"`           //公司ID
	TableId           int                   `json:"tableId"`             //表ID
	TableType         string                `json:"tableType"`           //表类型 导入模块(主表、附表、分表) 拆解(方案、子过程、计算表) 计算(计算项、计算集)
	ObjectType        string                `json:"objectType"`          //模块 导入模块、拆解模块、计算模块
	Event             string                `json:"event"`               //事件
	TableAffectedList []int                 `json:"TableAffectedList"`   //级联影响到的表
	DataChanged       bool                  `json:"dataChanged"`         //数据有更新
	StructChanged     bool                  `json:"structChanged"`       //结构有更新
	Status            int                   `json:"status"`              //状态 1-等待处理 2-处理完成 3-处理失败
	UpdateTable       int                   `json:"updateTable"`         //更新表结构
	UpdateData        int                   `json:"updateData"`          //更新表数据
	Message           string                `json:"message"`             //错误信息
	Retry             int                   `json:"retry"`               //重试次数
	MetaData          ObjectNoticeMetaData  `json:"metaData"`            //模块信息
	Version           int                   `json:",omitempty"`          //版本
	IsDel             soft_delete.DeletedAt `json:"isDel"`               //删除标记
	CreatedAt         int64                 `json:"createdAt,omitempty"` //创建时间
	UpdatedAt         int64                 `json:"updatedAt,omitempty"` //更新时间
	DeletedAt         int64                 `json:"deletedAt,omitempty"` //删除时间
}

type ObjectNoticeMetaData struct {
	Module int `json:"module"` // 导入模块判断是否 取消应用
	Status int `json:"status"` // 拆解模块判断是否 取消
}

var (
	ObjectNoticeStatusWait  = 1 //等待处理
	ObjectNoticeStatusDone  = 2 //处理完成
	ObjectNoticeStatusError = 3 //处理失败
)

type ObjectNoticeRepository interface {
	Insert(ctx context.Context, conn transaction.Conn, dm *ObjectNotice) (*ObjectNotice, error)
	Update(ctx context.Context, conn transaction.Conn, dm *ObjectNotice) (*ObjectNotice, error)
	UpdateWithVersion(ctx context.Context, conn transaction.Conn, dm *ObjectNotice) (*ObjectNotice, error)
	Delete(ctx context.Context, conn transaction.Conn, dm *ObjectNotice) (*ObjectNotice, error)
	FindOne(ctx context.Context, conn transaction.Conn, id int64) (*ObjectNotice, error)
	Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*ObjectNotice, error)
}

func (m *ObjectNotice) Identify() interface{} {
	if m.Id == 0 {
		return nil
	}
	return m.Id
}

// IsDeletedEvent 是否删除事件
func (m *ObjectNotice) IsDeletedEvent() bool {
	deletedEvents := []string{
		"table.delete",
		"table.query.set.delete",
	}
	for _, event := range deletedEvents {
		if m.Event == event {
			return true
		}
	}
	//导入模块 取消应用和应用于
	if m.Event == "table.apply-on" {
		if m.MetaData.Module&bytelib.ModuleChartTemplate == 0 {
			return true
		}
	}
	//拆解模块 方案启用、禁用
	//计算模块 计算项和计算集启用、禁用
	if m.Event == "table.query.set.update.status" {
		if m.MetaData.Status&bytelib.ModuleDigitalCenter == 0 {
			return true
		}
	}
	return false
}