源战役
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

204 lines
10 KiB

  1. %%%------------------------------------------------
  2. %%% File : mail.erl
  3. %%% Author : zhenghehe
  4. %%% Created : 2012-02-01
  5. %%% Description: 信件record定义
  6. %%%------------------------------------------------
  7. %% ------------------ 进程字典 ------------------
  8. -define(P_MAIL_KEY(RoleId), lists:concat(["P_Mail_Key", RoleId])). %% 邮件 value:[#mail{}|...]
  9. %% ------------------ 邮件类型 ------------------
  10. -define(MAIL_TYPE_SYS, 1). % 系统邮件
  11. -define(MAIL_TYPE_PRIV, 2). % 私人邮件
  12. -define(MAIL_TYPE_GUILD, 3). % 公会邮件
  13. -define(MAIL_TYPE_GUILD_MEMBER, 4). % 公会个人邮件
  14. -define(MAIL_TYPE_AUCTION, 5). % 拍卖邮件
  15. %% ------------------ 邮件状态 ------------------
  16. -define(MAIL_STATE_READ, 1). % 已读
  17. -define(MAIL_STATE_NO_READ, 2). % 未读
  18. -define(MAIL_STATE_HAS_RECEIVE, 3). % 已领取附件
  19. %% ------------------ 锁定状态 ------------------
  20. -define(MAIL_LOCKED_YES, 1). % 邮件锁定
  21. -define(MAIL_LOCKED_NO, 2). % 邮件未锁定
  22. %% ------------------ 附件类型 ------------------
  23. -define(ATTACHMENT_TYPE_NO, 0). % 没有附件
  24. -define(ATTACHMENT_TYPE_OWN_SQ, 1). % 拥有特殊物品的附件
  25. -define(ATTACHMENT_TYPE_CM, 2). % 只有普通附件
  26. %% ------------------ 发送邮件日志的类型 ------------------
  27. -define(SEND_LOG_TYPE_NO, 0). % 不加入日志
  28. -define(SEND_LOG_TYPE_YES, 1). % 加入日志
  29. %% ------------------ 是否立即发送邮件 ------------------
  30. -define(SCHEDULE_SAVE_MAIL, 0). % 否
  31. -define(DIRECT_SAVE_MAIL, 1). % 是
  32. %% ------------------ 是否是重要邮件 ------------------
  33. -define(NOT_IMPORTANT_MAIL, 0). % 否
  34. -define(IMPORTANT_MAIL, 1). % 是
  35. %% ------------------ 文本 ------------------
  36. % -define(MAIL_TXT_SYS_NAME, 1). % 邮件系统名字
  37. %% ------------------ 其他定义 ------------------
  38. -define(DEFAULT_LOGIN_DAY, 30). %% 默认最近30天登录
  39. -define(DEFAULT_MAX_LV, 999). %% 默认最大等级
  40. %% 邮件
  41. -record(mail, {
  42. id = 0 % 邮件id
  43. , type = 1 % 邮件类型
  44. , state = 2 % 邮件状态
  45. , locked = 2 % 锁定状态
  46. , sid = 0 % 发送者id
  47. , sname = undefined % 发件人名字(第一次读信加载)
  48. , rid = 0 % 接受者id
  49. , title = <<>> % 标题
  50. , content = <<>> % 信件内容(第一次读信加载) 修改老版undefined|<<>>
  51. , cm_attachment = [] % 普通附件列表,[{Type,GoodsTypeId,Num},...]
  52. % , sq_attachment :: undefined | [] % 特殊附件列表(保留字段,后续处理)
  53. , timestamp = 0 % 时间戳(微秒)
  54. , time = 0 % 秒
  55. , effect_st = 0 % 有效开始时间
  56. , effect_et = 0 % 有效结束时间
  57. , module_id = 0 % 模块id
  58. , sub_module_id = 0 % 子模块id
  59. , important = 0 % 是否重要邮件 0否|1是
  60. }).
  61. %% ------------------ 邮件 ------------------
  62. %% 邮件属性
  63. -define(sql_mail_insert, <<"
  64. INSERT INTO
  65. mail(id, type, state, locked, sid, rid, title, cm_attachment, module_id, sub_module_id, timestamp, effect_st, content, important)
  66. VALUES(~p, ~p, ~p, ~p, ~p, ~p, '~ts', '~ts', ~p, ~p, ~p, ~p, '~ts', ~p)">>).
  67. -define(sql_mail_select, <<"SELECT id, type, state, locked, sid, rid, title, cm_attachment, timestamp, effect_st, module_id, sub_module_id, important FROM mail WHERE rid = ~p">>).
  68. -define(sql_mail_delete, <<"DELETE FROM mail WHERE id = ~p">>).
  69. -define(sql_mail_delete_more, <<"DELETE FROM mail WHERE id in (~ts)">>).
  70. -define(sql_mail_update_cm_attachment, <<"UPDATE mail SET cm_attachment = '~ts' WHERE id = ~p">>).
  71. -define(sql_mail_update_state_read, <<"UPDATE mail SET state = 1 WHERE id = ~p">>).
  72. -define(sql_mail_update_cm_attachment_and_effect_st, <<"UPDATE mail SET cm_attachment = '~ts', effect_st = ~p WHERE id = ~p">>).
  73. -define(sql_mail_update_state_and_effect_st, <<"UPDATE mail SET state = ~p, effect_st = ~p WHERE id = ~p">>).
  74. -define(sql_mail_update_receive_state, <<"UPDATE mail SET state = ~p, cm_attachment = '~ts', effect_st = ~p WHERE id = ~p">>).
  75. %% 邮件内容
  76. %%-define(sql_mail_content_insert, <<"INSERT INTO mail_content(id, rid, content) VALUES(~p, ~p, '~ts')">>).
  77. %%-define(sql_mail_content_select, <<"SELECT content FROM mail_content WHERE id = ~p">>).
  78. %%-define(sql_mail_content_delete, <<"DELETE FROM mail_content WHERE id = ~p">>).
  79. %%-define(sql_mail_content_delete_more, <<"DELETE FROM mail_content WHERE id in (~ts)">>).
  80. %% 改造
  81. -define(sql_mail_select_content, <<"SELECT content FROM mail WHERE id = ~p">>).
  82. % %% 特殊附件列表(保留,后续看需求处理)
  83. % -define(sql_mail_sq_attachment_replace, <<"REPLACE INTO mail_sq_attachment(id, rid, goods_id) WHERE id = ~p">>).
  84. % -define(sql_mail_sq_attachment_select, <<"SELECT goods_id FROM mail_sq_attachment WHERE id = ~p">>).
  85. % -define(sql_mail_sq_attachment_delete, <<"DELETE FROM mail_sq_attachment WHERE id = ~p">>).
  86. %% ------------------ PHP后台 ------------------
  87. %% 根据在线、来源、等级来获取玩家id
  88. -define(sql_role_id_by_source_and_onlineflag_and_lv, <<"
  89. SELECT
  90. player_low.id FROM player_low, player_login
  91. WHERE player_login.source = '~ts' AND player_login.online_flag = ~p AND player_low.lv >= ~p AND player_login.id = player_low.id">>).
  92. %% 根据在线、等级来获取玩家id
  93. -define(sql_role_id_by_onlineflag_and_lv, <<"
  94. SELECT
  95. player_low.id FROM player_low, player_login
  96. WHERE player_login.online_flag = ~p AND player_low.lv >= ~p AND player_login.id = player_low.id">>).
  97. %% 根据等级和平台来获取玩家id
  98. -define(sql_role_id_by_source_and_lv, <<"
  99. SELECT
  100. player_low.id FROM player_low, player_login, role_vip
  101. WHERE player_login.source = '~ts' AND (player_login.last_logout_time >= ~p OR player_login.last_login_time >= ~p) AND player_low.lv>= ~p AND role_vip.real_lv >= ~p AND role_vip.real_lv <= ~p
  102. AND role_vip.role_id = player_login.id AND player_login.id = player_low.id">>).
  103. %% 细分判断,以减少连表查询操作
  104. %% ================ 有渠道 =================
  105. %% 根据等级&平台&vip等级&最近登录时间来获取玩家id
  106. -define(SQL_ROLE_ID_BY_ALL_CON,
  107. <<"SELECT log_res.logid FROM
  108. (SELECT low.id AS logid, COALESCE(vip.real_lv, 0) AS viplv FROM player_low low LEFT JOIN player_login log ON low.id = log.id LEFT outer JOIN role_vip vip ON low.id = vip.role_id
  109. WHERE log.last_login_time >= ~p AND low.lv>= ~p AND low.lv <= ~p AND log.source = '~ts') log_res
  110. WHERE log_res.viplv >= ~p AND log_res.viplv <= ~p">>).
  111. %% 无VIP无天数限制
  112. -define(SQL_ROLE_ID_BY_LV,
  113. <<"SELECT low.id FROM player_low low LEFT JOIN player_login log ON low.id = log.id
  114. WHERE low.lv >= ~p AND low.lv <= ~p AND log.source = '~ts'">>).
  115. %% 有VIP无天数限制
  116. -define(SQL_ROLE_ID_BY_VIP_AND_LV,
  117. <<"SELECT log_res.logid FROM
  118. (SELECT low.id AS logid, COALESCE(vip.real_lv,0) AS viplv FROM player_login log LEFT JOIN player_low low ON log.id = low.id LEFT outer JOIN role_vip vip ON low.id = vip.role_id
  119. WHERE low.lv >= ~p AND low.lv <= ~p AND log.source = '~ts') log_res
  120. WHERE log_res.viplv >= ~p AND log_res.viplv <= ~p">>).
  121. %% 无VIP有天数限制
  122. -define(SQL_ROLE_ID_BY_LOGIN_DAY,
  123. <<"SELECT low.id FROM player_low low LEFT JOIN player_login log ON low.id = log.id
  124. WHERE log.last_login_time >= ~p AND low.lv >= ~p AND low.lv <= ~p AND log.source = '~ts'">>).
  125. %% ================ 无渠道 ==================
  126. %% 根据等级&vip&最近登录时间来获取玩家id
  127. -define(sql_role_id_by_lv,
  128. <<"SELECT vip_res.vipid FROM (SELECT low.id as vipid, coalesce(vip.real_lv, 0) as viplv
  129. FROM player_low low LEFT JOIN player_login log ON low.id = log.id LEFT outer JOIN role_vip vip ON low.id = vip.role_id WHERE low.lv >= ~p AND low.lv <= ~p AND log.last_login_time >= ~p) vip_res
  130. WHERE vip_res.viplv >= ~p AND vip_res.viplv <= ~p">>).
  131. %% 无VIP无天数限制
  132. -define(SQL_ROLE_ID_BY_LV_WITHOUT_SOURCE,
  133. <<"SELECT id FROM player_low WHERE lv >= ~p AND lv <= ~p">>).
  134. %% 无VIP有天数限制
  135. -define(SQL_ROLE_ID_BY_DAY_WITHOUT_SOURCE,
  136. <<"SELECT low.id FROM player_low low LEFT JOIN player_login log ON low.id = log.id
  137. WHERE log.last_login_time >= ~p AND low.lv >= ~p AND low.lv <= ~p">>).
  138. %% 有VIP无天数限制
  139. -define(SQL_ROLE_ID_BY_VIP_WITHOUT_SOURCE,
  140. <<"SELECT log_res.vipid FROM
  141. (SELECT low.id as vipid, coalesce(vip.real_lv, 0) as viplv FROM player_low low LEFT outer JOIN role_vip vip ON low.id = vip.role_id WHERE low.lv >= ~p AND low.lv <= ~p) log_res
  142. WHERE log_res.viplv >= ~p AND log_res.viplv <= ~p">>).
  143. %% 根据等级,最近下线时间来获取玩家id
  144. -define(sql_role_id_by_lv_and_lastlogouttime, <<"
  145. SELECT
  146. low.id FROM player_low low, player_login login
  147. WHERE
  148. login.id = low.id AND low.lv >= ~p
  149. AND (login.online_flag = 1 OR (login.online_flag <> 1 AND login.last_logout_time >= ~p))">>).
  150. %% ------------------ 反馈 ------------------
  151. -define(sql_feedback_insert, <<"
  152. INSERT INTO feedback(
  153. player_id, player_name, content, timestamp, ip, server)
  154. VALUES(~p, '~ts', '~ts', ~p, '~ts', '~ts')">>).
  155. %% ------------------ 限时邮件 -----------------
  156. -define(SQL_LIMIT_MAIL_SELECT,
  157. <<"SELECT id, title, content, gold, bgold, rewards, open_days, tar_time, last_day_login, lvs, vips, source FROM limited_mail">>).
  158. -define(SQL_ONE_LIMIT_MAIL_SELECT,
  159. <<"SELECT id, title, content, gold, bgold, rewards, open_days, tar_time, last_day_login, lvs, vips, source FROM limited_mail WHERE id = ~p">>).
  160. -define(SQL_LIMIT_MAIL_DELETE,
  161. <<"DELETE FROM limited_mail WHERE id = ~p">>).
  162. -define (SQL_TARGET_LIMIT_MAIL_SELECT,
  163. <<"SELECT id, title, content, gold, bgold, rewards, open_days, tar_time, last_day_login, lvs, vips, source FROM limited_mail WHERE id in ~s">>).
  164. -define (SQL_TARGET_LIMIT_MAIL_DELETE,
  165. <<"DELETE FROM limited_mail WHERE id in ~s">>).