/** 短信消息 */
@extendAbstractAuditingEntity
@skipFakeData
@entityPackage(system)
@moduleName(system)
entity SmsMessage {
  title String /** 消息标题 */
  sendType MessageSendType /** 发送方式 */
  receiver String /** 接收人 */
  /**
   * 发送所需参数
   * Json格式
   */
  params String
  content TextBlob /** 推送内容 */
  sendTime ZonedDateTime /** 推送时间 */
  sendStatus SendStatus /** 推送状态 */
  /**
   * 发送次数 超过5次不再发送
   */
  retryNum Integer
  failResult String /** 推送失败原因 */
  remark String /** 备注 */
}

/** 消息模板 */
@extendAbstractAuditingEntity
@skipFakeData
@entityPackage(system)
@moduleName(system)
@skipWebsite
entity SmsTemplate {
  name String /** 模板标题 */
  code String /** 模板CODE */
  type MessageSendType /** 模板类型 */
  content String /** 模板内容 */
  testJson String /** 模板测试json */
}
/** 通知类型 */
enum MessageSendType {
    EMAIL,SMS,WECHAT
}

/**
 * 系统通告
 */
@extendAbstractAuditingEntity
@skipFakeData
@entityPackage(system)
@useTemplate(edit)
@moduleName(system)
@addCustomMethod(repository-updateTemplate-clientService-service-listComponent-rest)
entity Announcement {
  title String /** 标题 */
  content TextBlob /** 内容 */
  startTime ZonedDateTime /** 开始时间 */
  endTime ZonedDateTime /** 结束时间 */
  senderId <%= databaseTypeSql ? userIdTypeName : 'String'%> /** 发布人Id */
  /**
   * 优先级
   *（L低，M中，H高）
   */
  priority PriorityLevel
  /**
   * 消息类型
   * 通知公告,系统消息
   */
  category AnnoCategory
  /**
   * 通告对象类型
   *（USER:指定用户，ALL:全体用户）
   */
  receiverType ReceiverType
  /**
   * 发布状态
   *
   */
  @fieldConfig(hideInForm)
  sendStatus AnnoSendStatus
  @fieldConfig(hideInForm)
  sendTime ZonedDateTime /** 发布时间 */
  @fieldConfig(hideInForm)
  cancelTime ZonedDateTime /** 撤销时间 */
  /**
   * 业务类型
   * (email:邮件 bpm:流程)
   */
  businessType AnnoBusinessType
  businessId <%= databaseTypeSql ? 'Long' : 'String'%> /** 业务id */
  openType AnnoOpenType /** 打开方式 */
  openPage String /** 组件/路由 地址 */
  // @customWrapType(Array_<%= databaseTypeSql ? 'Long' : 'String'%>)
  @fieldConfig(hideInForm)
  receiverIds AnyBlob /** 指定接收者id */
  receiverIds TextBlob /** 指定接收者id */
  summary TextBlob /** 摘要 */
}

enum AnnoSendStatus {
  NOT_RELEASE,RELEASED,CANCELED
}
/**
  * 打开方式(组件：component 路由：url 弹窗显示:MODAL_DETAIL)
  */
enum AnnoOpenType {
  URL,COMPONENT,MODAL_DETAIL
}
enum AnnoBusinessType {
  EMAIL,WORKFLOW
}
enum ReceiverType {
  USER, ALL, DEPARTMENT, AUTHORITY, POSITION
}

enum AnnoCategory {
  SYSTEM_INFO, NOTICE, TODO
}

enum PriorityLevel {
  HIGH,MEDIUM,LOW
}

/**
 * 通告阅读记录
 */
@extendAbstractAuditingEntity
@skipFakeData
@entityPackage(system)
@addCustomMethod(service)
@skipMenu
@moduleName(system)
entity AnnouncementRecord {
  anntId <%= databaseTypeSql ? 'Long' : 'String'%> /** 通告ID */
  userId <%= databaseTypeSql ? userIdTypeName : 'String'%> /** 用户id */
  hasRead Boolean /** 是否已读 */
  readTime ZonedDateTime /** 阅读时间 */
}
<%_ if (jobScheduler === 'quartz') { _%>
/**
 * 定时任务
 */
@extendAbstractAuditingEntity
@skipFakeData
@entityPackage(taskjob)
@moduleName(taskjob)
@addCustomMethod(service)
entity TaskJobConfig {
    name String /** 任务名称 */
    jobClassName String /** 任务类名 */
    cronExpression String /** cron表达式 */
    parameter String /** 参数 */
    description String /** 描述 */
    jobStatus JobStatus /** 任务状态 */
}
/** 任务状态 */
enum JobStatus {
    NORMAL /** 正常 */
    PAUSED /** 暂停 */
    COMPLETE /** 完成 */
    ERROR /** 错误 */
    BLOCKED /** 阻塞 */
}
<%_ } _%>

/** 推送状态
 * WAITING未推送 SUCCESS推送成功 FAILURE推送失败 NOT_TRY失败不再发送
*/
enum SendStatus {
    WAITING /** 未推送 */
    SUCCESS /** 推送成功 */
    FAILURE /** 推送失败 */
    NOT_TRY /** 失败不再发送 */
}

service all with serviceClass
filter *
dto all with mapstruct
paginate all with pagination
clientRootFolder SmsMessage, SmsTemplate, Announcement, AnnouncementRecord, TaskJobConfig with system
clientRootFolder TaskJobConfig with taskjob
//<%_ if (searchEngine === 'elasticsearch') { _%>
search SmsMessage, SmsTemplate, Announcement, AnnouncementRecord with elasticsearch
//<%_ } _%>
