model('cloud');
$cloud = cloud_prepare();
$cloud_error = 0;
if(is_error($cloud)) {
$cloud_error = 1;
}
$groups = pdo_fetch('SELECT * FROM ' . tablename('mc_fans_groups') . ' WHERE uniacid = :uniacid AND acid = :acid', array(':uniacid' => $_W['uniacid'], ':acid' => $_W['acid']));
$groups = iunserializer($groups['groups']);
$time = strtotime(date('Y-m-d'));
$record = pdo_fetchall('SELECT * FROM ' . tablename('mc_mass_record') . ' WHERE uniacid = :uniacid AND sendtime >= :time ORDER BY sendtime ASC LIMIT 7', array(':uniacid' => $_W['uniacid'], ':time' => $time), 'sendtime');
for($i = 0; $i < 7; $i++) {
$time_key = date('Y-m-d', strtotime("+{$i} days", $time));
$mass_old[$time_key] = array(
'msgtype' => 'news',
'group' => -1,
'time' => $time_key,
'status' => 1,
'clock' => '20:00',
'media' => array(
'items' => array(
array(
'title' => '请选择素材'
)
)
),
);
}
$mass_new = array();
if(!empty($record)) {
foreach($record as &$li) {
$time_key = date('Y-m-d', $li['sendtime']);
$li['time'] = $time_key;
$li['clock'] = date('H:i', $li['sendtime']);
$li['media'] = pdo_get('wechat_attachment', array('id' => $li['attach_id']));
$li['media']['attach'] = tomedia($li['media']['attachment']);
if($li['msgtype'] == 'video') {
$li['media']['attach']['tag'] = iunserializer($li['media']['tag']);
} elseif($li['msgtype'] == 'news') {
$li['media']['items'] = pdo_getall('wechat_news', array('attach_id' => $li['attach_id']));
foreach($li['media']['items'] as &$row) {
$row['thumb_url'] = url('utility/wxcode/image', array('attach' => $row['thumb_url']));
}
} elseif($li['msgtype'] == 'wxcard') {
$li['media'] = pdo_get('coupon', array('id' => $li['attach_id']));
$li['media']['media_id'] = $li['media']['card_id'];
$li['media']['logo_url'] = url('utility/wxcode/image', array('attach' => $li['media']['logo_url']));
$li['media']['type'] = 'wxcard';
}
$li['media']['createtime_cn'] = date('Y-m-d H:i', $li['media']['createtime']);
$li['media_id'] = $li['media']['media_id'];
$mass_new[$time_key] = $li;
}
unset($record);
}
$mass = array_values((array_merge($mass_old, $mass_new)));
template('material/mass');
}
if($do == 'del') {
load()->func('cron');
load()->model('cloud');
$post = $_GPC['__input'];
$mass = pdo_get('mc_mass_record', array('uniacid' => $_W['uniacid'], 'id' => intval($post['id'])));
if(!empty($mass) && $mass['cron_id'] > 0) {
$status = cron_delete(array($mass['cron_id']));
if(is_error($status)) {
message($status, '', 'ajax');
}
}
pdo_delete('mc_mass_record', array('uniacid' => $_W['uniacid'], 'id' => intval($post['id'])));
message(error(0, ''), '', 'ajax');
}
if($do == 'post') {
load()->func('cron');
load()->model('cloud');
$cloud = cloud_prepare();
if(is_error($cloud)) {
message($cloud, '', 'ajax');
}
set_time_limit(0);
$records = pdo_fetchall('SELECT id, cron_id FROM ' . tablename('mc_mass_record') . ' WHERE uniacid = :uniacid AND sendtime >= :time AND status = 1 ORDER BY sendtime ASC LIMIT 8', array(':uniacid' => $_W['uniacid'], ':time' => strtotime(date('Y-m-d'))), 'id');
if(!empty($records)) {
foreach($records as $re) {
if(!$re['cron_id']) {
continue;
}
$corn_ids[] = $re['cron_id'];
}
if(!empty($corn_ids)) {
$status = cron_delete($corn_ids);
if(is_error($status)) {
message(error(-1, '删除群发错误,请重新提交'), '', 'ajax');
}
}
$ids = implode(',', array_keys($records));
pdo_query('DELETE FROM ' . tablename('mc_mass_record') . " WHERE uniacid = :uniacid AND id IN ({$ids})", array(':uniacid' => $_W['uniacid']));
}
$groups = pdo_fetch('SELECT * FROM ' . tablename('mc_fans_groups') . ' WHERE uniacid = :uniacid AND acid = :acid', array(':uniacid' => $_W['uniacid'], ':acid' => $_W['acid']));
$groups = iunserializer($groups['groups']);
$groups['-1'] = array('name' => '全部粉丝', 'count' => '');
$post = $_GPC['__input'];
$mass = $post['data'];
$message = '';
$sended = array();
foreach($mass as $key => $row) {
if($row['media_id']) {
if($row['id'] && (!$row['status'] || $row['sendtime'] < TIMESTAMP)) {
$sended[] = $row['id'];
} else {
$row['sendtime'] = strtotime("{$row['time']} {$row['clock']}");
if($row['sendtime'] <= TIMESTAMP) {
$message .= "{$row['time']}的群发时间不合法,必须大于当前时间
";
}
}
} else {
unset($mass[$key]);
}
}
if(empty($mass)) {
message(error(-1, '没有设置群发'), '', 'ajax');
}
if(!empty($message)) {
message(error(-1, $message), '', 'ajax');
}
$cron_status = 0;
$message = '';
foreach($mass as $row) {
if(!empty($sended) && in_array($row['id'], $sended)) {
continue;
}
$data = array(
'uniacid' => $_W['uniacid'],
'acid' => $_W['acid'],
'groupname' => $groups[$row['group']]['name'],
'group' => $row['group'],
'attach_id' => $row['attach_id'],
'media_id' => $row['media_id'],
'fansnum' => $groups[$row['group']]['count'],
'msgtype' => $row['msgtype'],
'sendtime' => strtotime($row['time'] . " {$row['clock']}"),
'createtime' => TIMESTAMP,
'type' => 1,
'status' => 1,
'cron_id' => 0,
);
pdo_insert('mc_mass_record', $data);
$insert_id = pdo_insertid();
$cron = array(
'uniacid' => $_W['uniacid'],
'name' => $row['time'] . "微信群发任务",
'filename' => 'mass',
'type' => 1,
'lastruntime' => $row['sendtime'],
'extra' => $insert_id,
'module' => 'task',
'status' => 1,
);
$status = cron_add($cron);
if(is_error($status)) {
$message .= "{$row['time']}的群发任务同步到云服务失败,请手动同步
";
$cron_status = 1;
} else {
pdo_update('mc_mass_record', array('cron_id' => $status), array('id' => $insert_id));
}
}
if($cron_status) {
message(error(-1000, $message), '', 'ajax');
}
message(error(0, 'success'), '', 'ajax');
}
if($do == 'cron') {
$id = intval($_GPC['id']);
$record = pdo_get('mc_mass_record', array('uniacid' => $_W['uniacid'], 'id' => $id));
if(empty($record)) {
message('群发任务不存在或已删除', referer(), 'error');
}
load()->func('cron');
$cron = array(
'uniacid' => $_W['uniacid'],
'name' => date('Y-m-d', $record['sendtime']) . "微信群发任务",
'filename' => 'mass',
'type' => 1,
'lastruntime' => $record['sendtime'],
'extra' => $record['id'],
'module' => 'task',
'status' => 1
);
$status = cron_add($cron);
if(is_error($status)) {
message($status['message'], referer(), 'error');
}
pdo_update('mc_mass_record', array('cron_id' => $status), array('uniacid' => $_W['uniacid'], 'id' => $id));
message('同步到云服务成功', referer(), 'success');
}
if($do == 'send') {
$_W['page']['title'] = '群发记录-微信群发';
$pindex = max(1, intval($_GPC['page']));
$psize = 20;
$condition = ' WHERE `uniacid` = :uniacid AND `acid` = :acid';
$pars = array();
$pars[':uniacid'] = $_W['uniacid'];
$pars[':acid'] = $_W['acid'];
$total = pdo_fetchcolumn("SELECT COUNT(*) FROM ".tablename('mc_mass_record').$condition, $pars);
$list = pdo_fetchall("SELECT * FROM ".tablename('mc_mass_record') . $condition ." ORDER BY `id` DESC LIMIT ".($pindex - 1) * $psize.','.$psize, $pars);
$types = array('text' => '文本消息', 'image' => '图片消息', 'voice' => '语音消息', 'video' => '视频消息', 'news' => '图文消息', 'wxcard' => '微信卡券');
$pager = pagination($total, $pindex, $psize);
template('material/send');
}