|
%%%------------------------------------------------
|
|
%%% File : mail.erl
|
|
%%% Author : zhenghehe
|
|
%%% Created : 2012-02-01
|
|
%%% Description: 信件record定义
|
|
%%%------------------------------------------------
|
|
|
|
%% ------------------ 进程字典 ------------------
|
|
-define(P_MAIL_KEY(RoleId), lists:concat(["P_Mail_Key", RoleId])). %% 邮件 value:[#mail{}|...]
|
|
|
|
%% ------------------ 邮件类型 ------------------
|
|
-define(MAIL_TYPE_SYS, 1). % 系统邮件
|
|
-define(MAIL_TYPE_PRIV, 2). % 私人邮件
|
|
-define(MAIL_TYPE_GUILD, 3). % 公会邮件
|
|
-define(MAIL_TYPE_GUILD_MEMBER, 4). % 公会个人邮件
|
|
-define(MAIL_TYPE_AUCTION, 5). % 拍卖邮件
|
|
|
|
%% ------------------ 邮件状态 ------------------
|
|
-define(MAIL_STATE_READ, 1). % 已读
|
|
-define(MAIL_STATE_NO_READ, 2). % 未读
|
|
-define(MAIL_STATE_HAS_RECEIVE, 3). % 已领取附件
|
|
|
|
%% ------------------ 锁定状态 ------------------
|
|
-define(MAIL_LOCKED_YES, 1). % 邮件锁定
|
|
-define(MAIL_LOCKED_NO, 2). % 邮件未锁定
|
|
|
|
%% ------------------ 附件类型 ------------------
|
|
-define(ATTACHMENT_TYPE_NO, 0). % 没有附件
|
|
-define(ATTACHMENT_TYPE_OWN_SQ, 1). % 拥有特殊物品的附件
|
|
-define(ATTACHMENT_TYPE_CM, 2). % 只有普通附件
|
|
|
|
%% ------------------ 发送邮件日志的类型 ------------------
|
|
-define(SEND_LOG_TYPE_NO, 0). % 不加入日志
|
|
-define(SEND_LOG_TYPE_YES, 1). % 加入日志
|
|
|
|
%% ------------------ 是否立即发送邮件 ------------------
|
|
-define(SCHEDULE_SAVE_MAIL, 0). % 否
|
|
-define(DIRECT_SAVE_MAIL, 1). % 是
|
|
|
|
%% ------------------ 是否是重要邮件 ------------------
|
|
-define(NOT_IMPORTANT_MAIL, 0). % 否
|
|
-define(IMPORTANT_MAIL, 1). % 是
|
|
|
|
%% ------------------ 文本 ------------------
|
|
% -define(MAIL_TXT_SYS_NAME, 1). % 邮件系统名字
|
|
|
|
%% ------------------ 其他定义 ------------------
|
|
-define(DEFAULT_LOGIN_DAY, 30). %% 默认最近30天登录
|
|
|
|
-define(DEFAULT_MAX_LV, 999). %% 默认最大等级
|
|
|
|
|
|
%% 邮件
|
|
-record(mail, {
|
|
id = 0 % 邮件id
|
|
, type = 1 % 邮件类型
|
|
, state = 2 % 邮件状态
|
|
, locked = 2 % 锁定状态
|
|
, sid = 0 % 发送者id
|
|
, sname = undefined % 发件人名字(第一次读信加载)
|
|
, rid = 0 % 接受者id
|
|
, title = <<>> % 标题
|
|
, content = <<>> % 信件内容(第一次读信加载) 修改老版undefined|<<>>
|
|
, cm_attachment = [] % 普通附件列表,[{Type,GoodsTypeId,Num},...]
|
|
% , sq_attachment :: undefined | [] % 特殊附件列表(保留字段,后续处理)
|
|
, timestamp = 0 % 时间戳(微秒)
|
|
, time = 0 % 秒
|
|
, effect_st = 0 % 有效开始时间
|
|
, effect_et = 0 % 有效结束时间
|
|
, module_id = 0 % 模块id
|
|
, sub_module_id = 0 % 子模块id
|
|
, important = 0 % 是否重要邮件 0否|1是
|
|
}).
|
|
|
|
%% ------------------ 邮件 ------------------
|
|
%% 邮件属性
|
|
-define(sql_mail_insert, <<"
|
|
INSERT INTO
|
|
mail(id, type, state, locked, sid, rid, title, cm_attachment, module_id, sub_module_id, timestamp, effect_st, content, important)
|
|
VALUES(~p, ~p, ~p, ~p, ~p, ~p, '~ts', '~ts', ~p, ~p, ~p, ~p, '~ts', ~p)">>).
|
|
-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">>).
|
|
-define(sql_mail_delete, <<"DELETE FROM mail WHERE id = ~p">>).
|
|
-define(sql_mail_delete_more, <<"DELETE FROM mail WHERE id in (~ts)">>).
|
|
|
|
-define(sql_mail_update_cm_attachment, <<"UPDATE mail SET cm_attachment = '~ts' WHERE id = ~p">>).
|
|
-define(sql_mail_update_state_read, <<"UPDATE mail SET state = 1 WHERE id = ~p">>).
|
|
-define(sql_mail_update_cm_attachment_and_effect_st, <<"UPDATE mail SET cm_attachment = '~ts', effect_st = ~p WHERE id = ~p">>).
|
|
-define(sql_mail_update_state_and_effect_st, <<"UPDATE mail SET state = ~p, effect_st = ~p WHERE id = ~p">>).
|
|
-define(sql_mail_update_receive_state, <<"UPDATE mail SET state = ~p, cm_attachment = '~ts', effect_st = ~p WHERE id = ~p">>).
|
|
|
|
%% 邮件内容
|
|
%%-define(sql_mail_content_insert, <<"INSERT INTO mail_content(id, rid, content) VALUES(~p, ~p, '~ts')">>).
|
|
%%-define(sql_mail_content_select, <<"SELECT content FROM mail_content WHERE id = ~p">>).
|
|
%%-define(sql_mail_content_delete, <<"DELETE FROM mail_content WHERE id = ~p">>).
|
|
%%-define(sql_mail_content_delete_more, <<"DELETE FROM mail_content WHERE id in (~ts)">>).
|
|
|
|
%% 改造
|
|
-define(sql_mail_select_content, <<"SELECT content FROM mail WHERE id = ~p">>).
|
|
|
|
% %% 特殊附件列表(保留,后续看需求处理)
|
|
% -define(sql_mail_sq_attachment_replace, <<"REPLACE INTO mail_sq_attachment(id, rid, goods_id) WHERE id = ~p">>).
|
|
% -define(sql_mail_sq_attachment_select, <<"SELECT goods_id FROM mail_sq_attachment WHERE id = ~p">>).
|
|
% -define(sql_mail_sq_attachment_delete, <<"DELETE FROM mail_sq_attachment WHERE id = ~p">>).
|
|
|
|
%% ------------------ PHP后台 ------------------
|
|
%% 根据在线、来源、等级来获取玩家id
|
|
-define(sql_role_id_by_source_and_onlineflag_and_lv, <<"
|
|
SELECT
|
|
player_low.id FROM player_low, player_login
|
|
WHERE player_login.source = '~ts' AND player_login.online_flag = ~p AND player_low.lv >= ~p AND player_login.id = player_low.id">>).
|
|
%% 根据在线、等级来获取玩家id
|
|
-define(sql_role_id_by_onlineflag_and_lv, <<"
|
|
SELECT
|
|
player_low.id FROM player_low, player_login
|
|
WHERE player_login.online_flag = ~p AND player_low.lv >= ~p AND player_login.id = player_low.id">>).
|
|
|
|
%% 根据等级和平台来获取玩家id
|
|
-define(sql_role_id_by_source_and_lv, <<"
|
|
SELECT
|
|
player_low.id FROM player_low, player_login, role_vip
|
|
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
|
|
AND role_vip.role_id = player_login.id AND player_login.id = player_low.id">>).
|
|
|
|
%% 细分判断,以减少连表查询操作
|
|
|
|
%% ================ 有渠道 =================
|
|
|
|
%% 根据等级&平台&vip等级&最近登录时间来获取玩家id
|
|
-define(SQL_ROLE_ID_BY_ALL_CON,
|
|
<<"SELECT log_res.logid FROM
|
|
(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
|
|
WHERE log.last_login_time >= ~p AND low.lv>= ~p AND low.lv <= ~p AND log.source = '~ts') log_res
|
|
WHERE log_res.viplv >= ~p AND log_res.viplv <= ~p">>).
|
|
|
|
%% 无VIP无天数限制
|
|
-define(SQL_ROLE_ID_BY_LV,
|
|
<<"SELECT low.id FROM player_low low LEFT JOIN player_login log ON low.id = log.id
|
|
WHERE low.lv >= ~p AND low.lv <= ~p AND log.source = '~ts'">>).
|
|
|
|
%% 有VIP无天数限制
|
|
-define(SQL_ROLE_ID_BY_VIP_AND_LV,
|
|
<<"SELECT log_res.logid FROM
|
|
(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
|
|
WHERE low.lv >= ~p AND low.lv <= ~p AND log.source = '~ts') log_res
|
|
WHERE log_res.viplv >= ~p AND log_res.viplv <= ~p">>).
|
|
|
|
%% 无VIP有天数限制
|
|
-define(SQL_ROLE_ID_BY_LOGIN_DAY,
|
|
<<"SELECT low.id FROM player_low low LEFT JOIN player_login log ON low.id = log.id
|
|
WHERE log.last_login_time >= ~p AND low.lv >= ~p AND low.lv <= ~p AND log.source = '~ts'">>).
|
|
|
|
|
|
%% ================ 无渠道 ==================
|
|
|
|
%% 根据等级&vip&最近登录时间来获取玩家id
|
|
-define(sql_role_id_by_lv,
|
|
<<"SELECT vip_res.vipid FROM (SELECT low.id as vipid, 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 WHERE low.lv >= ~p AND low.lv <= ~p AND log.last_login_time >= ~p) vip_res
|
|
WHERE vip_res.viplv >= ~p AND vip_res.viplv <= ~p">>).
|
|
|
|
%% 无VIP无天数限制
|
|
-define(SQL_ROLE_ID_BY_LV_WITHOUT_SOURCE,
|
|
<<"SELECT id FROM player_low WHERE lv >= ~p AND lv <= ~p">>).
|
|
|
|
%% 无VIP有天数限制
|
|
-define(SQL_ROLE_ID_BY_DAY_WITHOUT_SOURCE,
|
|
<<"SELECT low.id FROM player_low low LEFT JOIN player_login log ON low.id = log.id
|
|
WHERE log.last_login_time >= ~p AND low.lv >= ~p AND low.lv <= ~p">>).
|
|
|
|
%% 有VIP无天数限制
|
|
-define(SQL_ROLE_ID_BY_VIP_WITHOUT_SOURCE,
|
|
<<"SELECT log_res.vipid FROM
|
|
(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
|
|
WHERE log_res.viplv >= ~p AND log_res.viplv <= ~p">>).
|
|
|
|
%% 根据等级,最近下线时间来获取玩家id
|
|
-define(sql_role_id_by_lv_and_lastlogouttime, <<"
|
|
SELECT
|
|
low.id FROM player_low low, player_login login
|
|
WHERE
|
|
login.id = low.id AND low.lv >= ~p
|
|
AND (login.online_flag = 1 OR (login.online_flag <> 1 AND login.last_logout_time >= ~p))">>).
|
|
|
|
%% ------------------ 反馈 ------------------
|
|
-define(sql_feedback_insert, <<"
|
|
INSERT INTO feedback(
|
|
player_id, player_name, content, timestamp, ip, server)
|
|
VALUES(~p, '~ts', '~ts', ~p, '~ts', '~ts')">>).
|
|
|
|
|
|
%% ------------------ 限时邮件 -----------------
|
|
-define(SQL_LIMIT_MAIL_SELECT,
|
|
<<"SELECT id, title, content, gold, bgold, rewards, open_days, tar_time, last_day_login, lvs, vips, source FROM limited_mail">>).
|
|
|
|
-define(SQL_ONE_LIMIT_MAIL_SELECT,
|
|
<<"SELECT id, title, content, gold, bgold, rewards, open_days, tar_time, last_day_login, lvs, vips, source FROM limited_mail WHERE id = ~p">>).
|
|
|
|
-define(SQL_LIMIT_MAIL_DELETE,
|
|
<<"DELETE FROM limited_mail WHERE id = ~p">>).
|
|
|
|
-define (SQL_TARGET_LIMIT_MAIL_SELECT,
|
|
<<"SELECT id, title, content, gold, bgold, rewards, open_days, tar_time, last_day_login, lvs, vips, source FROM limited_mail WHERE id in ~s">>).
|
|
|
|
-define (SQL_TARGET_LIMIT_MAIL_DELETE,
|
|
<<"DELETE FROM limited_mail WHERE id in ~s">>).
|