yzms/show/time_task.php

2536 lines
113 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
header("Content-type:text/html;charset=utf-8");
$gdbname = "yzms";
require_once(dirname(__FILE__)."/common.php");
require_once(dirname(__FILE__)."/push_sms.php");
require_once(dirname(__FILE__)."/include/pay.inc.php");
// 参数过滤
function check_form($str){
$farr = array(
"/\s+/", //过滤多余空白
//过滤 <script>等可能引入恶意内容或恶意改变显示布局的代码,如果不需要插入flash等,还可以加入<object>的过滤
"/<(\/?)(script|i?frame|style|html|body|title|link|meta|\?|\%)([^>]*?)>/isU",
"/(<[^>]*)on[a-zA-Z]+\s*=([^>]*>)/isU",//过滤javascript的on事件
);
$tarr = array(
" ",
"\1\2\3",//如果要直接清除不安全的标签,这里可以留空
"\1\2",
);
$str = preg_replace($farr, $tarr, $str);
return $str;
}
// 根据id获取菜式投票的详情
function get_dish_vote_date_info($db, $vote_date_id){
return $db->get_one("select
a.*,
b.name meal_type_name ,
c.name dining_hall_name
from tb_dish_vote_date a
left join tb_meal_type b on a.dc_type=b.id
left join tb_dining_hall c on a.dining_hall_id=c.id
where a.id='{$vote_date_id}' and a.status='1'");
}
function dc_type_info($dc_type){
return $db->get_one("select * from tb_meal_type where id='{$dc_type}' and status='1'");
}
function dish_vote_foot_type($db, $dining_hall_id,$dc_type = ''){
$where = "";
if($dc_type){
$where = " and a.meal_type_id='{$dc_type}' ";
}
return $db->get_all("select
a.*,
b.name meal_type_name
from tb_dish_vote_foot_type a
left join tb_meal_type b on a.meal_type_id=b.id
where a.dining_hall_id='{$dining_hall_id}' {$where} and b.status='1'
order by b.idx desc,a.id asc");
}
function vote_dish_list_day($db, $date, $dc_type, $dining_hall_id, $generate_dish_ids){
$where = '';
if($generate_dish_ids){
$where .= " and a.dish_id not in ({$generate_dish_ids}) ";
}
return $db->get_all("select * from (
select
a.*,
b.dish_name,
b.dish_price,
c.type_name,
count(a.id) dish_vote_num
from tb_dish_vote_user a
left join tb_dish b on a.dish_id=b.id
left join tb_dish_type c on b.dish_type=c.id
where a.status='2' and a.dining_hall_id='{$dining_hall_id}' and a.dc_type='{$dc_type}' and a.date='{$date}' {$where}
group by a.dish_id) a
order by a.dish_vote_num desc
");
}
// 生成菜谱
function add_date_dish($db, $vote_date_id, $current_date, $dc_type){
// 根据id获取菜式投票的详情
$vote_date_info = get_dish_vote_date_info($db, $vote_date_id);
// 判断这个日期是否已经存在菜谱
$check_date = $db->get_one("select * from tb_date where dc_date='{$current_date}' and dc_type='{$dc_type}'");
if($check_date){
return array(
'status' => -1,
'msg' => "{$current_date}】该日期已存在菜谱。"
);
}
// 获取已经生成的菜谱,以及获取已选取的菜品
$dish_ids = array();
for ($i=strtotime($vote_date_info['start_day']); $i<=strtotime($vote_date_info['end_day']); $i+=86400) {
$date_info = $db->get_one("select
a.*,
GROUP_CONCAT(b.dish_id) dish_ids
from tb_date a
left join tb_date_dish b on a.id=b.date_id
where a.dc_date='".date('Y-m-d')."' and a.dc_type='{$vote_date_info['dc_type']}' and a.dining_hall_id='{$vote_date_info['dining_hall_id']}'
GROUP BY a.id
");
if(empty($date_info['dish_ids'])){
continue;
}
$dish_ids = array_merge($dish_ids, explode(",",$date_info['dish_ids']));
}
// 已经生成菜谱的菜品id
// $data_dish_list_arr = $dish_ids;
// 获取荤素规则
$dish_vote_foot_type = dish_vote_foot_type($db, $vote_date_info['dining_hall_id'],$vote_date_info['dc_type']);
// tb_dish_vote_foot_type 根据该表 获取当天票数最多的菜式(荤,素)
$vote_dish_list = vote_dish_list_day($db, $current_date, $vote_date_info['dc_type'], $vote_date_info['dining_hall_id'], implode(",", $dish_ids));
// 记录每个规则的选中菜式的个人方便判断all_book_limit
$good_type_max_vote = array();
$dish_arr = array();
foreach ($vote_dish_list as $k => $v){
// 循环foot_type
foreach ($dish_vote_foot_type as $foot_type_key => $foot_type_val){
// 排除不需要的规则
if($v['dc_type'] != $foot_type_val['meal_type_id']){
continue;
}
$dish_type_id_arr = explode(",",substr($foot_type_val['dish_type_id'],1,strlen($foot_type_val['dish_type_id'])-2));
// 判断菜式类型是否存在foot_type里
if(in_array($v['dish_type'], $dish_type_id_arr)){
// 判断在这个周期里,是否已经被安排过菜谱
if(!in_array($v['dish_id'], $dish_arr)){
// 超出类型可以max_vote的范围
$good_type_max_vote_num = count($good_type_max_vote) != 0 && isset($good_type_max_vote[$foot_type_val['id']]) ? $good_type_max_vote[$foot_type_val['id']] : 0;
if($foot_type_val['max_vote'] != 0 && $good_type_max_vote_num >= $foot_type_val['max_vote']){
continue;
}
$good_type_max_vote[$foot_type_val['id']] = $good_type_max_vote_num + 1;
$dish_arr[] = array(
'dish_id' => $v['dish_id'],
'type' => $v['type_name'],
'name' => $v['dish_name'],
'price' => $v['dish_price'],
'num' => 0
);
break;
}
}
}
}
if(empty($dish_arr)){
// 生成成功1次都改变状态添加成功更新is_create_dishes状态
$db->query("update tb_dish_vote_date set is_create_dishes='1' where id='{$vote_date_id}'");
// 如果没有投票,则不生成菜谱
return array(
'status' => 0,
'msg' => "{$vote_date_info['dining_hall_name']}饭堂 ".date('Y年m月d日', strtotime($current_date))."{$vote_date_info['meal_type_name']} 没有生产;"
// 'msg' => "【{$vote_date_info['start_day']} ~ {$vote_date_info['end_day']}】({$vote_date_info['meal_type_name']}{$current_date},这天没有足够的投票菜品信息,不能生成菜谱,请手动添加对应菜谱。"
);
}
// $dish_arr 获取 $current_date 对应投票最多且排除以生成菜谱的 菜品列表
// 生成 $current_date 这天的菜谱
// $date_data = array(
// 'dc_date' => $current_date,
// 'dc_type' => $vote_date_info['dc_type'],
// 'is_free' => 0,
// 'dining_hall_id' => $vote_date_info['dining_hall_id']
// );
$db->query("insert into tb_date set dc_date='{$current_date}', dc_type='{$vote_date_info['dc_type']}', is_free='0', dining_hall_id='{$vote_date_info['dining_hall_id']}'");
$date_id = $db->insert_id();
if(!$date_id){
return array(
'status' => 0,
'msg' => "{$vote_date_info['dining_hall_name']}饭堂 ".date('Y年m月d日', strtotime($current_date))."{$vote_date_info['meal_type_name']} 没有生产(生成菜谱失败)"
);
}
$dish_str = '';
foreach ($dish_arr as $k => $v){
$dish_str .= ", {$v['name']}";
$date_dish_data = array(
'date_id' => $date_id,
'dish_id' => $v['dish_id'],
'max_num' => 2,
'is_normal_dish' => 1,
'total_max_num' => 0,
'book_num' => 0,
'idx' => 0,
'book_type' => 1,
);
$date_dish_sql = "";
foreach($date_dish_data as $k2 => $v2){
$date_dish_sql .= ",{$k2}='{$v2}'";
}
$date_dish_sql = substr($date_dish_sql, 1, strlen($date_dish_sql) - 1);
$db->query("insert into tb_date_dish set {$date_dish_sql}");
$date_dish_id = $db->insert_id();
if(!$date_dish_id){
// 生成失败删除tb_date_dish 和 tb_date
$db->query("delete from tb_date_dish where date_id='{$date_id}'");
$db->query("delete from tb_date where id='{$date_id}'");
return array(
'status' => 0,
'msg' => "{$vote_date_info['dining_hall_name']} ".date('Y年m月d日', strtotime($current_date))."-{$vote_date_info['meal_type_name']} 没有生产(生成菜谱存在错误)"
);
}
}
// 生成成功1次都改变状态添加成功更新is_create_dishes状态
$db->query("update tb_dish_vote_date set is_create_dishes='1' where id='{$vote_date_id}'");
// 的订餐数据:".count($suc_type_val)." 份;
$dish_str = substr($dish_str, 1, strlen($dish_str) - 1);
return array(
'status' => 1,
'msg' => "{$vote_date_info['dining_hall_name']}".date('Y年m月d日', strtotime($current_date)) . $vote_date_info['meal_type_name'] . "的订餐数据:". $dish_str . ",共 ".count($dish_arr)." 份。",
'date_id' => $date_id,
'dish_arr' => $dish_arr,
);
// $get_dish = $this->db->query("");
}
if(isset($argv)){
$act = check_form($argv[1]);
$dining_hall_id = check_form($argv[2]); // 饭堂ID
$company_id = check_form($argv[3]); // 公司ID
$admin_id_suc = check_form($argv[4]); // 生成菜谱成功后对改admin_id进行短信通知
$admin_id_err = check_form($argv[5]); // 生成菜谱失败后对改admin_id进行短信通知
}else{
$act = check_form($_GET['act']);
$dining_hall_id = check_form($_GET['dining_hall_id']);
$company_id = check_form($_GET['company_id']);
$admin_id_suc = check_form($_GET['admin_id_suc']);
$admin_id_err = check_form($_GET['admin_id_err']);
}
if($act == 'create_dishes'){
$fp = fopen(dirname(__FILE__)."/time_task_lock.txt", "w+");
if (!flock($fp, LOCK_EX | LOCK_NB)) {
fclose($fp);
exit;
}
$log_type = "create_dishes";
$res['status'] = 0;
// $dining_hall_id = check_form($_GET['dining_hall_id']);
// $admin_id_suc = check_form($_GET['admin_id_suc']);
// $admin_id_err = check_form($_GET['admin_id_err']);
if(empty($dining_hall_id) || empty($admin_id_suc) || empty($admin_id_err)){
// $res['msg'] = "必要参数不能为空";
// echo json_encode($res);
echo "必要参数不能为空";
exit;
}
// 获取还没生成的菜式投票列表
$get_not_generate_list = $db->get_all("select
a.*,
b.name meal_type_name
from tb_dish_vote_date a
left join tb_meal_type b on a.dc_type=b.id
where a.is_create_dishes='0' and a.status='1' and a.dining_hall_id='{$dining_hall_id}'");
if(empty($get_not_generate_list)){
echo "没有可生成菜谱的日期";
exit;
}
$now_time = date("Y-m-d H:i:s");
$generate_num = 0;
$generate_suc_num = 0;
$create_date_ids = array();
$vote_date_ids = array();
$msg = array();
// $msg_suc = '';
// $msg_err = '';
// 循环还没生成菜谱的周期
foreach ($get_not_generate_list as $k => $v){
if($now_time >= $v['deadline']){
$vote_date_ids[] = $v['id'];
// 生成菜谱
for ($i=strtotime($v['start_day']); $i<=strtotime($v['end_day']); $i+=86400){
// 循环每一天 逐个添加
$current_date = date("Y-m-d", $i);
// $add_date = $this->Dishes_model->add_date($current_date, $v['dc_type'], $v['dining_hall_id'], 1);
// if($add_date == -1){
// $error_msg .= "【".date("Y-m-d", $i)."】 已存在菜谱,生成失败;";
// continue;
// }
$rs = add_date_dish($db, $v['id'], $current_date, $v['dc_type']);
$generate_num += 1;
if($rs['status'] == 0){
$msg[$current_date]['err'][] = $rs['msg'];
// echo $rs['msg'];
// $msg_err .= $rs['msg'];
// pushSms($rs['msg']);
// echo json_encode($rs);
}
if($rs['status'] == 1){
$msg[$current_date]['suc'][$v['meal_type_name']] .= $rs['msg'];
// $msg[$current_date]['suc_type'][$v['meal_type_name']] +=1 ;
// $msg[$current_date]['suc_type'][$v['meal_type_name']] +=1 ;
// $msg_suc .= $rs['msg'];
$create_date_ids[] = $rs['date_id'];
$generate_suc_num += 1;
}
}
}
}
// $res['status'] = 1;
// $msg = "【{$get_not_generate_list['start_day']} ~ {$get_not_generate_list['end_day']}】({$get_not_generate_list['meal_type_name']})生成菜谱成功,共生成 {$generate_num} 餐次";
// $msg = "生成菜谱成功,共生成次数 {$generate_num} 餐次,成功生成 {$generate_suc_num} 餐次";
// pushSms($res['msg']);
// 判断是否推送过
if($generate_suc_num == 0){
echo "没有可生成的菜谱,生成次数 {$generate_num},成功生成次数 {$generate_suc_num}";
}
// 获取推送用户的信息
$admin_info = $db->get_all("select * from tb_admin where id in ({$admin_id_suc}) and enabled='1'");
if(empty($admin_info)){
echo "没有可推送的用户";
exit;
}
// 获取手机号列表
$cellphone_suc_list = array();
$cellphone_err_list = array();
$admin_suc_list = $db->get_all("select * from tb_admin where id in ({$admin_id_suc}) and enabled='1'");
$admin_err_list = $db->get_all("select * from tb_admin where id in ({$admin_id_err}) and enabled='1'");
$admin_suc_ids = array();
$admin_err_ids = array();
foreach ($admin_suc_list as $admin_key => $admin_val){
$check_create_dish = $db->get_one("select * from tb_jtj_ts_log where type='{$log_type}' and admin_id='{$admin_val['id']}' and vote_date_id in (".implode(",", $vote_date_ids).")");
// if($check_create_dish){
// // 这些周期都推送过
// continue;
// }
$cellphone_suc_list[] = $admin_val['cellphone'];
$admin_suc_ids[] = $admin_val['id'];
}
foreach ($admin_err_list as $admin_key => $admin_val){
$check_create_dish = $db->get_one("select * from tb_jtj_ts_log where type='{$log_type}' and admin_id='{$admin_val['id']}' and vote_date_id in (".implode(",", $vote_date_ids).")");
// if($check_create_dish){
// // 这些周期都推送过
// continue;
// }
$cellphone_err_list[] = $admin_val['cellphone'];
$admin_err_ids[] = $admin_val['id'];
}
// {$vote_date_info['meal_type_name']}的订餐数据;
foreach ($msg as $msg_key => $msg_val){
foreach ($msg_val as $k2 => $v2){
$send_msg = "";
if($k2 == 'suc' && !empty($v2)){
// 成功的
foreach ($v2 as $suc_type_key => $suc_type_val){
$send_msg .= $suc_type_val;
}
foreach ($cellphone_suc_list as $k => $v){
// 过滤
// $check_username = $db->get_all("select * from tb_user where username in ('向熊林','霍瑞兴','张桂香','王建美','蒙秀荣','杜春梅','陆伟玲','谭婷芳','郑新浓','马绿花','莫火燕','覃金兰','张淼开','甘文盛','谢卫连','黎伟玲','黄玉娇','李亚炳','罗庆坚')");
// $check_tel = array_column($check_username, 'cellphone');
// if(in_array($v, $check_tel)){
// 暂时停止推送
// $send_res = sendTs($v, "自动生成菜谱提示", $send_msg);
// $sms_res = sendSms($v, $send_msg);
// }
// $sms_res = sendSms($v, $send_msg);
}
}elseif($k2 == 'err' && !empty($msg_val)){
// 失败的
$send_msg = implode('', $msg_val['err']);
foreach ($cellphone_err_list as $k => $v) {
// 过滤
// $check_username = $db->get_all("select * from tb_user where username in ('向熊林','霍瑞兴','张桂香','王建美','蒙秀荣','杜春梅','陆伟玲','谭婷芳','郑新浓','马绿花','莫火燕','覃金兰','张淼开','甘文盛','谢卫连','黎伟玲','黄玉娇','李亚炳','罗庆坚')");
// $check_tel = array_column($check_username, 'cellphone');
// if(in_array($v, $check_tel)){
// 暂时停止推送
// $send_res = sendTs($v, "自动生成菜谱提示", $send_msg);
// $sms_res = sendSms($v, $send_msg);
// }
// $sms_res = sendSms($v, $send_msg);
}
}else{
continue;
}
}
}
// ------------ 记录log
$admin_id_arr = array_merge($admin_suc_ids,$admin_err_ids);
$admin_id_arr = array_unique($admin_id_arr);
foreach ($admin_id_arr as $admin_id_arr_key => $admin_id_arr_val){
foreach ($vote_date_ids as $vote_date_ids_key => $vote_date_ids_val){
// $data['cellphone'] = $v['cellphone'];
$data['content'] = $sms_res;
$data['type'] = $log_type;
$data['admin_id'] = $admin_id_arr_val;
// $data['user_id'] = $v['id'];
$data['vote_date_id'] = $vote_date_ids_val;
$data['add_time'] = date('Y-m-d H:i:s');
$sql_data = "";
foreach ($data as $data_key => $data_val){
$sql_data .= ",{$data_key}='{$data_val}'";
}
$sql_data = substr($sql_data, 1, strlen($sql_data)-1);
// 推送log表记录
$db->query("insert into tb_jtj_ts_log set {$sql_data}");
}
}
}
// 投票截止推送
if($act == 'vote_close_ts'){
$log_type = "vote_close";
// $company_id = check_form($_GET['company_id']);
// $dining_hall_id = check_form($_GET['dining_hall_id']);
$where = "";
if($company_id){
$where .= " and a.company_id='{$company_id}'";
}
if($dining_hall_id){
$where .= " and a.dining_hall_id='{$dining_hall_id}'";
}
// 获取配置 (投票截止提前的时间)
$config = $db->get_one("select * from tb_jtj_excitation_config where name='VOTE_BEFORE_DEADLINE_HOUR'");
$vote_close_second = $config['value'] * 60 * 60; // 提前n秒提醒
// 获取投票截止时间 -------------
// 当前时间
$now_time = date("Y-m-d H:i:s");
// 在现在时间 + $vote_close_second 提前 $vote_close_second 小时
$remind_deadline = date("Y-m-d H:i:s", strtotime($now_time) + $vote_close_second);
// 需要提醒的投票范围列表
$dish_vote_date_info = $db->get_all("select a.*,b.name meal_type_name from tb_dish_vote_date a
left join tb_meal_type b on a.dc_type=b.id
where a.status='1' and a.deadline>='{$now_time}' and a.deadline<='{$remind_deadline}'");
if(empty($dish_vote_date_info)){
echo "没有需要推送的内容";
exit;
}
// 获取交通局的用户列表 (没被提醒过的人,或可以被提醒的人)(记录时间 < 当前时间-提前通知时间 = 允许再次提醒)
$ts_time = date("Y-m-d H:i:s", strtotime("-{$vote_close_second} seconds"));
$jtj_user_list = $db->get_all("select a.* from tb_user a
left join tb_jtj_ts_log b on a.id=b.user_id
where a.enabled='1' {$where}
");
$jtj_user = array();
foreach ($jtj_user_list as $k => $v){
if($v['add_time'] < $ts_time){
// 允许再次记录的用户
$jtj_user[] = $v['id'];
}
}
if(empty($jtj_user)){
echo "没有需要推送的用户";
exit;
}
$ts_msg = array();
// 循环每个投票 周期
foreach ($dish_vote_date_info as $k => $v){
// if($v['id'] == 34){
// echo "-------------";
// }
// 获取规则
$dish_vote_foot_type = $db->get_all("select * from tb_dish_vote_foot_type where dining_hall_id='{$v['dining_hall_id']}' and meal_type_id='{$v['dc_type']}'");
if(empty($dish_vote_foot_type)){
continue;
}
// 获取这个周期 有几天 (查找每天是否都投票满)
$days = round(strtotime($v['end_day']) - strtotime($v['start_day']) / 3600 / 24);
for ($i=strtotime($v['start_day']); $i<=strtotime($v['end_day']); $i+=86400){
// 获取已投票,用户投票的内容
$get_dish_type_num = $db->get_all("select a.*,
a.user_id,GROUP_CONCAT(b.dish_type) dish_type_id
from tb_dish_vote_user a
, tb_dish b
where
a.vote_date_id='{$v['id']}' and
a.dish_id=b.id and
a.dining_hall_id='{$v['dining_hall_id']}' and
a.status='2' and
a.dc_type='{$v['dc_type']}' and
a.date='".date('Y-m-d',$i)."' and
a.user_id in (".implode(",",$jtj_user).")
group by a.user_id
");
// 获取 用户投票后的 菜品类型数组
$user_dish_id_arr = array();
$user_dish_id_arr2 = array();
foreach ($get_dish_type_num as $k2 => $v2){
$user_dish_id_arr[$v2['user_id']] = $v2['dish_type_id'];
$user_dish_id_arr2[] = $v2['user_id'];
}
// 判断这天有没有没参与投票的人,直接推送通知
if(count($user_dish_id_arr2) != count($jtj_user)){
$diff = array_diff($jtj_user, $user_dish_id_arr2);
foreach ($diff as $diff_key => $diff_val){
$user_dish_id_arr[$diff_val] = '';
}
}
// 提炼每个规则
foreach ($dish_vote_foot_type as $foot_type_key => $foot_type_val){
// 需要投票的票数
$max_vote = $foot_type_val['max_vote'];
// 规则 对应的菜品类型
$dish_type_ids = substr($foot_type_val['dish_type_id'], 1, strlen($foot_type_val['dish_type_id']) - 2);
$dish_type_ids = explode(",",$dish_type_ids);
// 循环多个规则
foreach ($user_dish_id_arr as $user_id_key => $user_dish_val){
$vote_num = 0;
// 循环单个用户 投票的菜品,匹配规则
if(!empty($user_dish_val)){
$user_dish_type_arr = explode(",", $user_dish_val);
foreach ($user_dish_type_arr as $vote_dish_type_key => $vote_dish_type_val){
if(in_array($vote_dish_type_val, $dish_type_ids)){
$vote_num += 1;
}
}
}
if($vote_num < $max_vote){
// 投票少于规则,需要推送提醒
// 日期_周期ID_用户ID
$ts_msg[$user_id_key][$v['id']][] = "{$v['start_day']} ~ {$v['end_day']}】({$v['meal_type_name']}{$foot_type_val['name']})投票准备截止,请尽快投票!";
// $ts_msg[date('Y-m-d',$i).'_'.$v['id'].'_'.$user_id_key][] = "【{$v['start_day']} ~ {$v['end_day']}】({$v['meal_type_name']}{$foot_type_val['name']})投票准备截止,请尽快投票!";
// $ts_msg[date('Y-m-d',$i).'_'.$foot_type_val['name'].'_'.$v['id']][$user_id_key][] = "【{$v['start_day']} ~ {$v['end_day']}】({$v['meal_type_name']})投票准备截止,请尽快投票!{$foot_type_val['name']}-".date('Y-m-d',$i)."-{$vote_num}-{$max_vote}-{$user_id_key}";
// pushSms();
}
}
}
}
}
foreach ($ts_msg as $k => $v){
// 判断推送记录
$vote_date_ids = array_keys($v);
$check_vote_ts = $db->get_all("select * from tb_jtj_ts_log where type='{$log_type}' and user_id='{$k}' and vote_date_id in (".implode(',',$vote_date_ids).")");
if($check_vote_ts){
// 这些周期都推送过
echo "已有推送记录,不重复推送";
exit;
}
$user_info = $db->get_one("select * from tb_user where enabled='1' and id='{$k}'");
if(empty($check_reminder)){
// 发短信提醒 用户订餐
$cellphone = $user_info['cellphone'];
$title = "投票通知";
$content = "您还有没投票的菜品,请及时投票";
// 暂时停止推送
// $send_res = sendTs($cellphone, $title, $content);
// sendSms($cellphone, $content);
// 暂时屏蔽推送消息
$send_res = 0;
if($send_res){
foreach ($vote_date_ids as $vote_date_ids_key => $vote_date_ids_val){
$data['cellphone'] = $user_info['cellphone'];
$data['title'] = $title;
$data['content'] = $content;
$data['type'] = $log_type;
$data['user_id'] = $k;
$data['vote_date_id'] = $vote_date_ids_val;
$data['add_time'] = date('Y-m-d H:i:s');
$sql_data = "";
foreach ($data as $data_key => $data_val){
$sql_data .= ",{$data_key}='{$data_val}'";
}
$sql_data = substr($sql_data, 1, strlen($sql_data)-1);
// 推送log表记录
$db->query("insert into tb_jtj_ts_log set {$sql_data}");
}
echo "{$user_info['cellphone']}” 用户推送消息成功。";
}
}else{
echo "{$user_info['cellphone']}” 用户已推送过消息。";
exit;
}
}
}
// 订餐截止推送
if($act == 'dc_close_ts'){
$log_type = "dc_close";
// $company_id = check_form($_GET['company_id']);
// $dining_hall_id = check_form($_GET['dining_hall_id']);
if(empty($dining_hall_id)){
echo "参数不能为空";
exit;
}
$where = "";
if($company_id){
$where .= " and company_id='{$company_id}'";
}
if($dining_hall_id){
$where .= " and dining_hall_id='{$dining_hall_id}'";
}
$config = $db->get_one("select * from tb_jtj_excitation_config where name='MEAL_BEFORE_DEADLINE_HOUR'");
$second = $config['value'] * 60 * 60;
// 获取当前饭堂所有用户
$user_list = $db->get_one("select *,group_concat(id) ids from tb_user where enabled='1' {$where} group by dining_hall_id");
$now_day = date('Y-m-d');
$s_day = date('Y-m-d', strtotime('-2 day'));
// 获取今天订餐的dc_type
$dc_type_arr = $db->get_all("select * from tb_date where dc_date>='{$s_day}' and dining_hall_id='{$dining_hall_id}'");
foreach ($dc_type_arr as $k => $v){
$dc_date = $v['dc_date'];
$order_rule_info = $db->get_one("select a.name dc_type_name,b.* from tb_meal_type a,tb_order_rule b where a.id = b.for_dc_type and b.rule_type = 1 and for_action = 1 AND a.id='{$v['dc_type']}' and b.status='1' and b.dining_hall_id='{$dining_hall_id}'");
$reminder_time = strtotime($v['dc_date'] . " " . $order_rule_info['time']) - ($order_rule_info['relative_day'] * 86400) - $second;
$reminder_end_time = strtotime($v['dc_date'] . " " . $order_rule_info['time']) - ($order_rule_info['relative_day'] * 86400);
if(strtotime("now") >= $reminder_time && strtotime("now") <= $reminder_end_time){
// 提醒为订餐用户
$dc_user = $db->get_one("select *,group_concat(uid) uids from tb_order where date_id='{$v['id']}' and type='1' and is_delete='0' and uid in ({$user_list['ids']}) group by date_id");
$reminder_user_ids = array_diff(explode(",", $user_list['ids']), explode(",", $dc_user['uid']));
// 这些人还没订餐
if(!empty($reminder_user_ids)){
foreach ($reminder_user_ids as $ids_key => $ids_val){
// 判断是否通知过
// $check_reminder = $db->get_one("select * from tb_jtj_ts_log where type='{$log_type}' and user_id='{$ids_val}' and date_id='{$v['id']}'");
$check_reminder = $db->get_one("select * from tb_jtj_ts_log where type='{$log_type}' and user_id='{$ids_val}' and date='{$dc_date}'");
$user_info = $db->get_one("select * from tb_user where enabled='1' and id='{$ids_val}'");
if(empty($check_reminder)){
// 发短信提醒 用户订餐
$cellphone = $user_info['cellphone'];
$title = "订餐通知";
// $content = "您还没预定 ".$v['dc_date']." 的{$order_rule_info['dc_type_name']},订餐即将结束,过时系统默认订餐,请及时订餐,如已订餐,请忽略此信息,谢谢。";
$content = "{$dc_date} 订餐即将结束,请及时订餐,过时系统将自动下单,如已订餐,请忽略此信息,谢谢。";
// 暂时停止推送
// $send_res = sendTs($cellphone, $title, $content);
// sendSms($cellphone, $content);
$send_res = 0;
if($send_res){
$data['cellphone'] = $user_info['cellphone'];
$data['title'] = $title;
$data['content'] = $content;
$data['type'] = $log_type;
$data['user_id'] = $ids_val;
$data['date_id'] = $v['id'];
$data['date'] = $dc_date;
$data['add_time'] = date('Y-m-d H:i:s');
$sql_data = "";
foreach ($data as $data_key => $data_val){
$sql_data .= ",{$data_key}='{$data_val}'";
}
$sql_data = substr($sql_data, 1, strlen($sql_data)-1);
// 推送log表记录
$db->query("insert into tb_jtj_ts_log set {$sql_data}");
echo "{$user_info['cellphone']}” 用户推送消息成功。";
}
}else{
echo "{$user_info['cellphone']}” 用户已推送过消息。";
continue;
}
}
}
}else{
echo "还没到通知时间。";
}
}
}
// 余额不足推送
if($act == 'insufficient_balance_ts'){
$log_type = "insufficient_balance";
// $company_id = check_form($_GET['company_id']);
// $dining_hall_id = check_form($_GET['dining_hall_id']);
$config = $db->get_one("select * from tb_jtj_excitation_config where name='INSUFFICIENT_BALANCE'");
$price = $config['value'];
$where = "";
if($company_id){
$where .= " and a.company_id='{$company_id}'";
}
if($dining_hall_id){
$where .= " and a.dining_hall_id='{$dining_hall_id}'";
}
// 获取钱包剩余金额
// $je_list = $db->get_all("select a.user_id, b.cellphone, b.username, sum(a.account) account_total
// from tb_account a
// left join tb_user b on a.user_id=b.id
// where a.type_id in (1,2) and b.enabled='1' {$where}
// GROUP BY a.user_id");
// $je_list = $db->get_all("select a.id, a.cellphone, a.username,sum(a.account)
// from (select a.id, a.cellphone, a.username,b.account,b.type_id from tb_user a left join tb_account b on a.id=b.user_id) a
// where a.type_id in (1,2) or a.type_id is null
// GROUP BY a.id");
$je_list = $db->get_all("select
a.id, a.cellphone, a.username, sum(b.account) account_total
from tb_user a left join tb_account b on a.id=b.user_id
where a.enabled='1' and (b.type_id in (1,2) or b.type_id is null) {$where}
GROUP BY a.id");
if(!empty($je_list)){
foreach ($je_list as $k => $v){
if($v['account_total'] < $price){
// 推送规则
$check_ye = $db->get_one("select *
from tb_jtj_ts_log
where type='{$log_type}' and user_id='{$v['id']}' and CURDATE() <= date(add_time)
order by id desc");
if($check_ye){
// 今天内不重复推送
echo "{$v['cellphone']} 号码余额不足 {$price} 元 已推送过。\n";
continue;
}
// 提示余额不足推送
// 推送log表记录
$cellphone = $v['cellphone'];
$title = "余额不足";
$content = "您的余额已不足 {$price} 元,请及时充值。";
// $check_username = $db->get_all("select * from tb_user where username in ('向熊林','霍瑞兴','张桂香','王建美','蒙秀荣','杜春梅','陆伟玲','谭婷芳','郑新浓','马绿花','莫火燕','覃金兰','张淼开','甘文盛','谢卫连','黎伟玲','黄玉娇','李亚炳','罗庆坚')");
// $check_tel = array_column($check_username, 'cellphone');
// if(in_array($cellphone, $check_tel)){
$send_res = sendTs($cellphone, $title, $content);
// $sms_res = sendSms($cellphone, $content);
// }
// $send_res = sendTs($cellphone, $title, $content);
// $sms_res = sendSms($cellphone, $content);
if($send_res){
$data['cellphone'] = $cellphone;
$data['title'] = $title;
$data['content'] = $content;
$data['type'] = $log_type;
$data['user_id'] = $v['id'];
$data['add_time'] = date('Y-m-d H:i:s');
$sql_data = "";
foreach ($data as $data_key => $data_val){
$sql_data .= ",{$data_key}='{$data_val}'";
}
$sql_data = substr($sql_data, 1, strlen($sql_data)-1);
$db->query("insert into tb_jtj_ts_log set {$sql_data}");
}
}
}
}else{
echo "找不到对应用户";
exit;
}
}
// 截止时间后,自动生成进行订餐(星期日订下周的餐,订菜谱所有的菜品)
if($act == 'default_dish'){
$fp = fopen(dirname(__FILE__)."/time_task_lock.txt", "w+");
if (!flock($fp, LOCK_EX | LOCK_NB)) {
fclose($fp);
exit;
}
header("Content-type:text/html;charset=utf-8");
// 测试数据
$dc_types = check_form($argv[2]); // dc_type
$company_id = check_form($argv[3]); // 公司ID
$cls_ids = check_form($argv[4]); // 荤素汤 1,2,3
// 自动订餐提前几天
$relative_day_tq = 1;
if(empty($dc_types)){
$dc_types = trim($_GET['dc_types']);
}
if(empty($company_id)){
$company_id = trim($_GET['company_id']);
}
if(empty($cls_ids)){
$cls_ids = trim($_GET['cls_ids']);
}
if(empty($cls_ids)){
$cls_ids = '4,5,6'; // 荤素汤 1,2,3
}
$cls_ids_arr = explode(',', $cls_ids);
// $dc_types = "27,33,25"; // 早,午,晚
// if(empty($dc_types) || empty($company_id)){
// exit;
// }
// 记录异常问题提示
$err_msg = array();
$suc_msg = array();
// 查找几天内
$other_day = strtotime("-5 day"); // 当前时间往前5天
$to_day = date('Y-m-d');
$time = date('H:i:s');
$relative_datetime = date('Y-m-d H:i:s');
$current_date = date('Y-m-d H:i:s');
// 判断明天是否有可定餐
$dc_date_list = $db->get_all("
select
a.id date_id,
a.dc_date,
a.update_time,
b.name dc_type_name,
b.id dc_type,
b.start_time,
c.*
from tb_date a
left join tb_meal_type b on a.dc_type=b.id
left join tb_order_rule c on (a.dc_type=c.for_dc_type and c.`status`=1 and c.dining_hall_id=a.dining_hall_id and c.rule_type=1 and c.for_action=1)
where
a.dc_date>='{$to_day}' and
b.company_id='{$company_id}' and
b.mealtype='1' and
a.dc_type in ({$dc_types})
");
if(empty($dc_date_list)){
$err_msg[] = "没有安排可订餐时间";
echo "没有安排可订餐时间";
exit;
}
// 获取所有可以自动进行订餐的 用户
$user_list = $db->get_all("select * from tb_user where enabled in (1,-1) and company_id='{$company_id}' and default_dc_type!=''");
// 进行订餐
foreach ($dc_date_list as $k => $v){
// 判断当前菜谱的更新时间,更新时间+1小时才能执行自动订餐
if(!empty($v['update_time'])){
$update_time = strtotime($v['update_time']) + 3600;
if($update_time > time()){
echo "创建菜谱后1小时才能自动订餐";
continue;
}
}
$log_type = 'default_dish';
$dc_date = $v['dc_date'];
$date_id = $v['date_id'];
$dc_type_name = $v['dc_type_name'];
$dc_type = $v['for_dc_type'];
// 1预定2退订
$for_action = $v['for_action'];
// 提前多少天
if($relative_day_tq){
$relative_day = $relative_day_tq;
}else{
$relative_day = $v['relative_day'];
}
// 截止时间
$deadline = $v['time'];
// 获取下一周的日期段
$next_week_arr = get_next_week_day(1);
$next_week_start_day = $next_week_arr['start_day'];
// 临时改周日也可以订餐
// $z_ri = strtotime($next_week_arr['start_day']) - (60*60*24);
// $next_week_start_day = date('Y-m-d', $z_ri);
// // 前提2天星期6自动订
// $relative_day = 2;
$next_week_start_end = $next_week_arr['end_day'];
// 订餐周期的起始日(的$relative_day表示提前多少天开始订餐
$current_date = strtotime($next_week_start_day) - (60 * 60 * 24 * $relative_day);
$current_date = date('Y-m-d', $current_date)." 09:00:00";
// 非下周的餐次,都跳过
if($dc_date < $next_week_start_day || $dc_date > $next_week_start_end){
continue;
}
// 截止具体时间
$deadline_time = strtotime($v['dc_date']) - (60 * 60 * 24 * $relative_day);
$deadline_time = date('Y-m-d', $deadline_time) ." {$deadline}";
// 判断时间段 用餐开始时间
$meal_time = $dc_date.' '.$v['start_time'];
if(strtotime($current_date) > time()){
echo "还没到周期开始日前{$relative_day}天的09:00:00自动订餐时间 {$dc_date} {$dc_type_name}<br>";
continue;
}
// 今天的餐都不订
if($dc_date <= date('Y-m-d')){
echo "今天的餐都不订 {$dc_date} {$dc_type_name}<br>";
continue;
}
// 每天下午09:00 对未订餐开始订餐
if(date("H:i") <= "09:00"){
echo "还没到09:00订餐时间 {$dc_date} {$dc_type_name}<br>";
continue;
}
// 循环用户
foreach ($user_list as $user_k => $user_v){
$cellphone = $user_v['cellphone'];
// 用户设置自定义 自动订餐
if(empty($user_v['default_dc_type'])){
// 用户没有设置自动订餐
echo "【用户:{$user_v['username']}】用户没有设置自动订餐<br>";
continue;
}
$default_dc_type = explode(',', $user_v['default_dc_type']);
if(!in_array($v['dc_type'], $default_dc_type)){
// 当前dc_type 用户没有设置自动订餐
echo "当前dc_type='{$v['dc_type']}' 用户没有设置自动订餐<br>";
continue;
}
$dish = array();
$user_id = $user_v['id'];
$dining_hall_id = $user_v['dining_hall_id'];
$user_type_id = $user_v['type_id'];
// 判断该用户是否订餐(已订过餐 或 已取消过)
$check_dish = $db->get_one("select * from tb_order where uid='{$user_id}' and type='1' and state_id in (3,4,6) and date_id='{$date_id}' and is_delete=0");
if($check_dish){
continue;
}
// if($dc_type == '229'){
// 当菜品类型 是 早餐固定从tb_date 找3个dish_type的一个菜品 生成 $dish
$dish = array();
$get_dc_date_info = $db->get_all("select * from tb_date a ,tb_date_dish b where a.id=b.date_id and a.dc_date='{$dc_date}' and a.dc_type='{$dc_type}' and a.dining_hall_id='{$dining_hall_id}'");
$dish_list_id = array_column($get_dc_date_info, 'dish_id');
$dish_list_id_str = join(',', $dish_list_id);
$dish = $db->get_all("select * from tb_dish where id in ({$dish_list_id_str}) and enabled='1'");
if(count($dish) <= 0){
$err_msg[] = $log_msg = "【用户:{$user_v['username']}{$dc_date} {$dc_type_name} 菜品类型不足必须大于等于1个菜品";
echo $log_msg;
$log_data['cellphone'] = $user_v['cellphone'];
$log_data['title'] = '自动订餐';
$log_data['content'] = $log_msg;
$log_data['type'] = $log_type;
$log_data['user_id'] = $user_v['id'];
$log_data['add_time'] = date('Y-m-d H:i:s');
$sql_data = "";
foreach ($log_data as $data_key => $data_val){
$sql_data .= ",{$data_key}='{$data_val}'";
}
$sql_data = substr($sql_data, 1, strlen($sql_data)-1);
$db->query("insert into tb_jtj_ts_log set {$sql_data}");
continue;
}
// }
// 下单
$total_price = 0;
// 计算金额
foreach ($dish as $dk => $dv){
$total_price += $dv['dish_price'];
}
//考虑tb_meal_type_guding_price固定金额
$row = $db->get_one("select * from tb_meal_type_guding_price where company_id = '".$company_id."' and meal_type_id = '".$dc_type."' and (user_type_id=0 or user_type_id=".$user_type_id.") and (dining_hall_id=0 or dining_hall_id = ".$dining_hall_id.") order by idx");
if($row) {
$total_price = $row['price'];
}
// 判断该用户余额是否充足
$user_balance = $db->get_one("select sum(account) account from tb_account where user_id='{$user_id}' group by user_id");
if($user_balance['account'] < $total_price){
// 判断是否今天已经记录过
$check_yu_e = $db->get_one("select * from tb_jtj_ts_log where DAY(add_time) = DAY(NOW()) and type='default_dish' and user_id='{$user_v['id']}' and content like '%余额不足%'");
if($check_yu_e){
echo "【用户:{$user_v['username']}】 余额不足,自动订餐失败,今天已记录过,跳过。<br>";
continue;
}
$err_msg[] = $log_msg = "用户:{$user_v['username']} 余额不足,自动订餐失败。";
echo "【用户:{$user_v['username']}】 余额不足,自动订餐失败。<br>";
$log_data['cellphone'] = $user_v['cellphone'];
$log_data['title'] = '自动订餐';
$log_data['content'] = $log_msg;
$log_data['type'] = $log_type;
$log_data['user_id'] = $user_v['id'];
$log_data['add_time'] = date('Y-m-d H:i:s');
$sql_data = "";
foreach ($log_data as $data_key => $data_val){
$sql_data .= ",{$data_key}='{$data_val}'";
}
$sql_data = substr($sql_data, 1, strlen($sql_data)-1);
$db->query("insert into tb_jtj_ts_log set {$sql_data}");
continue;
}
$total_num = count($dish);
$parent_code = md5(uniqid(rand(), true));
// 生成code
do {
$code = date('Ymd') . $dc_type . substr(preg_replace("/[a-z]/", "", md5(rand()."_1".microtime())."0000"), 0, 4);
$t_order = $db->get_one("select a.* from tb_order a where code = '{$code}'");
} while ($t_order);
// 生成take_food_code
do {
$take_food_code = substr(preg_replace("/[a-z]/", "", md5(rand()."_".microtime())."00000000"), 0, 8);
$t_order = $db->get_one("select a.* from tb_order a where take_food_code='{$take_food_code}'");
} while ($t_order);
$qrcode_url = "/show/get.php?act=getQRCode&takecode=" . $take_food_code;
$total = array("total_price" => $total_price, "total_num" => $total_num);
if($total_num <= 0){
// if($total_num < $default_dish_num){
$log_msg = "【用户:{$user_v['username']}{$dc_date} {$dc_type_name} 没有可订的菜品,自定订餐失败。";
$log_data['cellphone'] = $user_v['cellphone'];
$log_data['title'] = '自动订餐';
$log_data['content'] = $log_msg;
$log_data['type'] = $log_type;
$log_data['user_id'] = $user_v['id'];
$log_data['add_time'] = date('Y-m-d H:i:s');
$sql_data = "";
foreach ($log_data as $data_key => $data_val){
$sql_data .= ",{$data_key}='{$data_val}'";
}
$sql_data = substr($sql_data, 1, strlen($sql_data)-1);
$db->query("insert into tb_jtj_ts_log set {$sql_data}");
echo $log_msg;
continue;
}
$order = array(
'code' => $code,
"parent_code" => $parent_code,
"state_id" => 6,
"uid" => $user_id,
"date_id" => $date_id,
"type" => 1,
"create_time" => date('Y-m-d H:i:s'),
"book_num" => 1,
"take_num" => 0,
"reason" => "自动订餐,订餐消费支付{$total['total_price']}",
"take_food_code" => $take_food_code,
'total_num' => $total['total_num'],
'total_price' => $total['total_price'],
"qrcode_url" => $qrcode_url,
"qrcode_path" => '',
"book_fee" => 0
);
// 延迟0.01-0.6秒
$suijishu = mt_rand(1,60);
usleep($suijishu * 10000);
// 在判断是否已经有订单
$check_dish = $db->get_one("select * from tb_order where uid='{$user_id}' and type='1' and state_id in (3,4,6) and date_id='{$date_id}' and is_delete=0");
if($check_dish){
continue;
}
$db->insert("tb_order", $order);
$oid = $db->insert_id();
if($oid > 0){
$rList = array(array('ac' => $total['total_price'], 'rtype' => 2, 'ftid' => $dining_hall_id, 'oid' => $oid));
foreach ($dish as $dk => $dv){
$order_detail = array("order_id" => $oid, "dish_id" => $dv['id'], "dish_amount" => 1, "dish_price" => $dv['dish_price']);
// $this->Dishes_model->add_date_dish_book_num(1, $date_id, $dv['dish_id']);
$db->update("tb_date_dish", array('book_num' => 'book_num+1'), "date_id='{$date_id}' and dish_id='{$dv['id']}'");
$db->insert("tb_order_detail", $order_detail);
$odid = $db->insert_id();
}
$date = strtotime($dc_date);
$month = date('n', $date);
$day = date('j', $date);
$date_text = $month . '月' . $day . '日' . '(周' . cnWeek($date) . ')' . $dc_type_name;
$result[] = array('order_id' => $oid, 'meal_text' => $date_text, 'take_food_code' => $order['take_food_code'], 'qr_code' => $qrcode_url, "total_price" => $total['total_price'], "total_num" => $total['total_num']);
}
// 结账
if($rList) { //扣费
$r = gpay_pay_user_account($user_id, $rList, $updateInfo);
if($r != 'suc') {
// 支付失败,删除记录
foreach ($dish as $dk => $dv){
$db->update("tb_date_dish", array('book_num' => 'book_num-1'), "date_id='{$date_id}' and dish_id='{$dv['id']}'");
}
$db->delete("tb_order_detail", "order_id='{$oid}'");
$db->delete("tb_order", "id='{$oid}'");
if($r == 'yebz') {
// echo "【用户:{$user_v['username']}】余额不足,下单失败,请先充值";
$err_msg[] = $log_msg = "【用户:{$user_v['username']}】余额不足,下单失败,请先充值。";
} else {
$err_msg[] = $log_msg = "【用户:{$user_v['username']}】下单失败,请重试!";
// echo "【用户:{$user_v['username']}】下单失败,请重试!";
}
}else{
$suc_msg[] = $log_msg = "【用户:{$user_v['username']}{$dc_type_name} 订餐成功订单ID{$oid}<br>";
// 发推送和短信
// $check_username = $db->get_all("select * from tb_user where username in ('向熊林','霍瑞兴','张桂香','王建美','蒙秀荣','杜春梅','陆伟玲','谭婷芳','郑新浓','马绿花','莫火燕','覃金兰','张淼开','甘文盛','谢卫连','黎伟玲','黄玉娇','李亚炳','罗庆坚')");
// $check_tel = array_column($check_username, 'cellphone');
// if(in_array($cellphone, $check_tel)){
$content = "已成功为您订餐:{$dc_date} {$dc_type_name}您可进入“云中美食app-我的订单”查看。";
// 暂时停止推送
// $send_res = sendTs($cellphone, $title, $content);
// $sms_res = sendSms($cellphone, $content);
// }
}
$log_data['cellphone'] = $user_v['cellphone'];
$log_data['title'] = '自动订餐';
$log_data['content'] = $log_msg;
$log_data['type'] = $log_type;
$log_data['user_id'] = $user_v['id'];
$log_data['add_time'] = date('Y-m-d H:i:s');
$sql_data = "";
foreach ($log_data as $data_key => $data_val){
$sql_data .= ",{$data_key}='{$data_val}'";
}
$sql_data = substr($sql_data, 1, strlen($sql_data)-1);
$db->query("insert into tb_jtj_ts_log set {$sql_data}");
echo $log_msg;
}
}
}
}
// 今天订明天的餐
if($act == 'default_dish3'){
$fp = fopen(dirname(__FILE__)."/time_task_lock.txt", "w+");
if (!flock($fp, LOCK_EX | LOCK_NB)) {
fclose($fp);
exit;
}
header("Content-type:text/html;charset=utf-8");
// 测试数据
$dc_types = check_form($argv[2]); // dc_type
$company_id = check_form($argv[3]); // 公司ID
$cls_ids = check_form($argv[4]); // 荤素汤 1,2,3
// 自动订餐提前几天
$relative_day_tq = 1;
if(empty($dc_types)){
$dc_types = trim($_GET['dc_types']);
}
if(empty($company_id)){
$company_id = trim($_GET['company_id']);
}
if(empty($cls_ids)){
$cls_ids = trim($_GET['cls_ids']);
}
if(empty($cls_ids)){
$cls_ids = '4,5,6'; // 荤素汤 1,2,3
}
$cls_ids_arr = explode(',', $cls_ids);
// $dc_types = "27,33,25"; // 早,午,晚
// if(empty($dc_types) || empty($company_id)){
// exit;
// }
// 记录异常问题提示
$err_msg = array();
$suc_msg = array();
$to_day = date('Y-m-d');
$time = date('H:i:s');
$current_date = date('Y-m-d H:i:s');
// 明天
$tomorrow_date = date('Y-m-d' , strtotime("+1 days"));
// 判断明天是否有可定餐
$dc_date_list = $db->get_all("
select
a.id date_id,
a.dc_date,
b.name dc_type_name,
b.id dc_type,
b.start_time,
c.*
from tb_date a
left join tb_meal_type b on a.dc_type=b.id
left join tb_order_rule c on (a.dc_type=c.for_dc_type and c.`status`=1 and c.dining_hall_id=a.dining_hall_id and c.rule_type=1 and c.for_action=1)
where
a.dc_date='{$tomorrow_date}' and
b.company_id='{$company_id}' and
b.mealtype='1' and
a.dc_type in ({$dc_types})
");
if(empty($dc_date_list)){
$err_msg[] = "没有安排可订餐时间";
echo "没有安排可订餐时间";
exit;
}
// 获取所有可以自动进行订餐的 用户
$user_list = $db->get_all("select * from tb_user where enabled in (1,-1) and company_id='{$company_id}' and default_dc_type!=''");
// 进行订餐
foreach ($dc_date_list as $k => $v){
$log_type = 'default_dish';
$dc_date = $v['dc_date'];
$date_id = $v['date_id'];
$dc_type_name = $v['dc_type_name'];
$dc_type = $v['for_dc_type'];
// 1预定2退订
$for_action = $v['for_action'];
// 提前多少天
if($relative_day_tq){
$relative_day = $relative_day_tq;
}else{
$relative_day = $v['relative_day'];
}
// 截止时间
$deadline = $v['time'];
//非明天的餐 都不订
if($dc_date != $tomorrow_date){
echo "非明天的餐,都不订";
continue;
}
// 判断时间段 用餐开始时间
$meal_time = $dc_date.' '.$v['start_time'];
// 每天下午09:00 对未订餐开始订餐
if(date("H:i") <= "09:00"){
echo "还没到09:00订餐时间 {$dc_date} {$dc_type_name}<br>";
continue;
}
// 循环用户
foreach ($user_list as $user_k => $user_v){
$cellphone = $user_v['cellphone'];
// 用户设置自定义 自动订餐
if(empty($user_v['default_dc_type'])){
// 用户没有设置自动订餐
echo "【用户:{$user_v['username']}】用户没有设置自动订餐<br>";
continue;
}
$default_dc_type = explode(',', $user_v['default_dc_type']);
if(!in_array($v['dc_type'], $default_dc_type)){
// 当前dc_type 用户没有设置自动订餐
echo "当前dc_type='{$v['dc_type']}' 用户没有设置自动订餐<br>";
continue;
}
$dish = array();
$user_id = $user_v['id'];
$dining_hall_id = $user_v['dining_hall_id'];
$user_type_id = $user_v['type_id'];
// 判断该用户是否订餐(已订过餐 或 已取消过)
$check_dish = $db->get_one("select * from tb_order where uid='{$user_id}' and type='1' and state_id in (3,4,6) and date_id='{$date_id}' and is_delete=0");
if($check_dish){
continue;
}
// if($dc_type == '229'){
// 当菜品类型 是 早餐固定从tb_date 找3个dish_type的一个菜品 生成 $dish
$dish = array();
$get_dc_date_info = $db->get_all("select * from tb_date a ,tb_date_dish b where a.id=b.date_id and a.dc_date='{$dc_date}' and a.dc_type='{$dc_type}' and a.dining_hall_id='{$dining_hall_id}'");
$dish_list_id = array_column($get_dc_date_info, 'dish_id');
$dish_list_id_str = join(',', $dish_list_id);
$dish = $db->get_all("select * from tb_dish where id in ({$dish_list_id_str}) and enabled='1'");
if(count($dish) <= 0){
$err_msg[] = $log_msg = "【用户:{$user_v['username']}{$dc_date} {$dc_type_name} 菜品类型不足必须大于等于1个菜品";
echo $log_msg;
$log_data['cellphone'] = $user_v['cellphone'];
$log_data['title'] = '自动订餐';
$log_data['content'] = $log_msg;
$log_data['type'] = $log_type;
$log_data['user_id'] = $user_v['id'];
$log_data['add_time'] = date('Y-m-d H:i:s');
$sql_data = "";
foreach ($log_data as $data_key => $data_val){
$sql_data .= ",{$data_key}='{$data_val}'";
}
$sql_data = substr($sql_data, 1, strlen($sql_data)-1);
$db->query("insert into tb_jtj_ts_log set {$sql_data}");
continue;
}
// }
// 下单
$total_price = 0;
// 计算金额
foreach ($dish as $dk => $dv){
$total_price += $dv['dish_price'];
}
//考虑tb_meal_type_guding_price固定金额
$row = $db->get_one("select * from tb_meal_type_guding_price where company_id = '".$company_id."' and meal_type_id = '".$dc_type."' and (user_type_id=0 or user_type_id=".$user_type_id.") and (dining_hall_id=0 or dining_hall_id = ".$dining_hall_id.") order by idx");
if($row) {
$total_price = $row['price'];
}
// 判断该用户余额是否充足
$user_balance = $db->get_one("select sum(account) account from tb_account where user_id='{$user_id}' group by user_id");
if($user_balance['account'] < $total_price){
// 判断是否今天已经记录过
$check_yu_e = $db->get_one("select * from tb_jtj_ts_log where DAY(add_time) = DAY(NOW()) and type='default_dish' and user_id='{$user_v['id']}' and content like '%余额不足%'");
if($check_yu_e){
echo "【用户:{$user_v['username']}】 余额不足,自动订餐失败,今天已记录过,跳过。<br>";
continue;
}
$err_msg[] = $log_msg = "用户:{$user_v['username']} 余额不足,自动订餐失败。";
echo "【用户:{$user_v['username']}】 余额不足,自动订餐失败。<br>";
$log_data['cellphone'] = $user_v['cellphone'];
$log_data['title'] = '自动订餐';
$log_data['content'] = $log_msg;
$log_data['type'] = $log_type;
$log_data['user_id'] = $user_v['id'];
$log_data['add_time'] = date('Y-m-d H:i:s');
$sql_data = "";
foreach ($log_data as $data_key => $data_val){
$sql_data .= ",{$data_key}='{$data_val}'";
}
$sql_data = substr($sql_data, 1, strlen($sql_data)-1);
$db->query("insert into tb_jtj_ts_log set {$sql_data}");
continue;
}
$total_num = count($dish);
$parent_code = md5(uniqid(rand(), true));
// 生成code
do {
$code = date('Ymd') . $dc_type . substr(preg_replace("/[a-z]/", "", md5(rand()."_1".microtime())."0000"), 0, 4);
$t_order = $db->get_one("select a.* from tb_order a where code = '{$code}'");
} while ($t_order);
// 生成take_food_code
do {
$take_food_code = substr(preg_replace("/[a-z]/", "", md5(rand()."_".microtime())."00000000"), 0, 8);
$t_order = $db->get_one("select a.* from tb_order a where take_food_code='{$take_food_code}'");
} while ($t_order);
$qrcode_url = "/show/get.php?act=getQRCode&takecode=" . $take_food_code;
$total = array("total_price" => $total_price, "total_num" => $total_num);
if($total_num <= 0){
// if($total_num < $default_dish_num){
$log_msg = "【用户:{$user_v['username']}{$dc_date} {$dc_type_name} 没有可订的菜品,自定订餐失败。";
$log_data['cellphone'] = $user_v['cellphone'];
$log_data['title'] = '自动订餐';
$log_data['content'] = $log_msg;
$log_data['type'] = $log_type;
$log_data['user_id'] = $user_v['id'];
$log_data['add_time'] = date('Y-m-d H:i:s');
$sql_data = "";
foreach ($log_data as $data_key => $data_val){
$sql_data .= ",{$data_key}='{$data_val}'";
}
$sql_data = substr($sql_data, 1, strlen($sql_data)-1);
$db->query("insert into tb_jtj_ts_log set {$sql_data}");
echo $log_msg;
continue;
}
$order = array(
'code' => $code,
"parent_code" => $parent_code,
"state_id" => 6,
"uid" => $user_id,
"date_id" => $date_id,
"type" => 1,
"create_time" => date('Y-m-d H:i:s'),
"book_num" => 1,
"take_num" => 0,
"reason" => "自动订餐,订餐消费支付{$total['total_price']}",
"take_food_code" => $take_food_code,
'total_num' => $total['total_num'],
'total_price' => $total['total_price'],
"qrcode_url" => $qrcode_url,
"qrcode_path" => '',
"book_fee" => 0
);
// 延迟0.01-0.6秒
$suijishu = mt_rand(1,60);
usleep($suijishu * 10000);
// 在判断是否已经有订单
$check_dish = $db->get_one("select * from tb_order where uid='{$user_id}' and type='1' and state_id in (3,4,6) and date_id='{$date_id}' and is_delete=0");
if($check_dish){
continue;
}
$db->insert("tb_order", $order);
$oid = $db->insert_id();
if($oid > 0){
$rList = array(array('ac' => $total['total_price'], 'rtype' => 2, 'ftid' => $dining_hall_id, 'oid' => $oid));
foreach ($dish as $dk => $dv){
$order_detail = array("order_id" => $oid, "dish_id" => $dv['id'], "dish_amount" => 1, "dish_price" => $dv['dish_price']);
// $this->Dishes_model->add_date_dish_book_num(1, $date_id, $dv['dish_id']);
$db->update("tb_date_dish", array('book_num' => 'book_num+1'), "date_id='{$date_id}' and dish_id='{$dv['id']}'");
$db->insert("tb_order_detail", $order_detail);
$odid = $db->insert_id();
}
$date = strtotime($dc_date);
$month = date('n', $date);
$day = date('j', $date);
$date_text = $month . '月' . $day . '日' . '(周' . cnWeek($date) . ')' . $dc_type_name;
$result[] = array('order_id' => $oid, 'meal_text' => $date_text, 'take_food_code' => $order['take_food_code'], 'qr_code' => $qrcode_url, "total_price" => $total['total_price'], "total_num" => $total['total_num']);
}
// 结账
if($rList) { //扣费
$r = gpay_pay_user_account($user_id, $rList, $updateInfo);
if($r != 'suc') {
// 支付失败,删除记录
foreach ($dish as $dk => $dv){
$db->update("tb_date_dish", array('book_num' => 'book_num-1'), "date_id='{$date_id}' and dish_id='{$dv['id']}'");
}
$db->delete("tb_order_detail", "order_id='{$oid}'");
$db->delete("tb_order", "id='{$oid}'");
if($r == 'yebz') {
// echo "【用户:{$user_v['username']}】余额不足,下单失败,请先充值";
$err_msg[] = $log_msg = "【用户:{$user_v['username']}】余额不足,下单失败,请先充值。";
} else {
$err_msg[] = $log_msg = "【用户:{$user_v['username']}】下单失败,请重试!";
// echo "【用户:{$user_v['username']}】下单失败,请重试!";
}
}else{
$suc_msg[] = $log_msg = "【用户:{$user_v['username']}{$dc_type_name} 订餐成功订单ID{$oid}<br>";
// 发推送和短信
// $check_username = $db->get_all("select * from tb_user where username in ('向熊林','霍瑞兴','张桂香','王建美','蒙秀荣','杜春梅','陆伟玲','谭婷芳','郑新浓','马绿花','莫火燕','覃金兰','张淼开','甘文盛','谢卫连','黎伟玲','黄玉娇','李亚炳','罗庆坚')");
// $check_tel = array_column($check_username, 'cellphone');
// if(in_array($cellphone, $check_tel)){
$content = "已成功为您订餐:{$dc_date} {$dc_type_name}您可进入“云中美食app-我的订单”查看。";
// 暂时停止推送
// $send_res = sendTs($cellphone, $title, $content);
// $sms_res = sendSms($cellphone, $content);
// }
}
$log_data['cellphone'] = $user_v['cellphone'];
$log_data['title'] = '自动订餐';
$log_data['content'] = $log_msg;
$log_data['type'] = $log_type;
$log_data['user_id'] = $user_v['id'];
$log_data['add_time'] = date('Y-m-d H:i:s');
$sql_data = "";
foreach ($log_data as $data_key => $data_val){
$sql_data .= ",{$data_key}='{$data_val}'";
}
$sql_data = substr($sql_data, 1, strlen($sql_data)-1);
$db->query("insert into tb_jtj_ts_log set {$sql_data}");
echo $log_msg;
}
}
}
}
// 星期日 订下周的餐,根据投票表
if($act == 'default_dish2'){
$fp = fopen(dirname(__FILE__)."/time_task_lock.txt", "w+");
if (!flock($fp, LOCK_EX | LOCK_NB)) {
fclose($fp);
exit;
}
header("Content-type:text/html;charset=utf-8");
// 测试数据
$dc_types = check_form($argv[2]); // dc_type
$company_id = check_form($argv[3]); // 公司ID
$cls_ids = check_form($argv[4]); // 荤素汤 1,2,3
// 自动订餐提前几天
$relative_day_tq = 1;
if(empty($dc_types)){
$dc_types = trim($_GET['dc_types']);
}
if(empty($company_id)){
$company_id = trim($_GET['company_id']);
}
if(empty($cls_ids)){
$cls_ids = trim($_GET['cls_ids']);
}
if(empty($cls_ids)){
$cls_ids = '4,5,6'; // 荤素汤 1,2,3
}
$cls_ids_arr = explode(',', $cls_ids);
// $dc_types = "27,33,25"; // 早,午,晚
if(empty($dc_types) || empty($company_id)){
exit;
}
// 记录异常问题提示
$err_msg = array();
$suc_msg = array();
// 查找几天内
$other_day = strtotime("-5 day"); // 当前时间往前5天
// $to_day = date('Y-m-d', $other_day);
// $time = date('H:i:s', $other_day);
// $relative_datetime = date('Y-m-d H:i:s', $other_day);
$to_day = date('Y-m-d');
$time = date('H:i:s');
$relative_datetime = date('Y-m-d H:i:s');
$current_date = date('Y-m-d H:i:s');
// 判断今天是否有 可订餐
$dc_date_list = $db->get_all("
select
a.id date_id,
a.dc_date,
b.name dc_type_name,
b.id dc_type,
b.start_time,
c.*
from tb_date a
left join tb_meal_type b on a.dc_type=b.id
left join tb_order_rule c on (a.dc_type=c.for_dc_type and c.`status`=1 and c.dining_hall_id=a.dining_hall_id and c.rule_type=1 and c.for_action=1)
where a.dc_date>='{$to_day}' and b.company_id='{$company_id}' and b.mealtype='1' and a.dc_type in ({$dc_types})
");
if(empty($dc_date_list)){
$err_msg[] = "没有安排可订餐时间";
echo "没有安排可订餐时间";
exit;
}
// 获取所有可以自动进行订餐的 用户
$user_list = $db->get_all("select * from tb_user where enabled='1' and company_id='{$company_id}' and default_dc_type!=''");
// 进行订餐
foreach ($dc_date_list as $k => $v){
$log_type = 'default_dish';
$dc_date = $v['dc_date'];
$date_id = $v['date_id'];
$dc_type_name = $v['dc_type_name'];
$dc_type = $v['for_dc_type'];
// 1预定2退订
$for_action = $v['for_action'];
// 提前多少天
if($relative_day_tq){
$relative_day = $relative_day_tq;
}else{
$relative_day = $v['relative_day'];
}
// 截止时间
$deadline = $v['time'];
/*
// 获取投票开始时间前一天开始暂时不判断is_create_dishes=1因为生成菜谱还没成功update 1待修复
$vote_info = $db->get_one("select a.* from tb_dish_vote_date a left join tb_dining_hall b on a.dining_hall_id=b.id where a.start_day<='{$dc_date}' and a.end_day>='{$dc_date}' and a.dc_type='{$v['dc_type']}' and a.status=1 and b.enabled=1 and b.company_id='{$company_id}'");
if($vote_info){
// 订餐周期的起始日
$current_date = strtotime($vote_info['start_day']) - (60 * 60 * 24 * $relative_day);
$current_date = date('Y-m-d', $current_date)." 17:30:00";
// $current_date_end = date('Y-m-d', $current_date)." 23:59:59";
}else{
echo "找不到投票周期的信息 {$dc_date} {$dc_type_name}<br>";
continue;
}*/
// 需求修改,只是用自动订餐
// 获取下一周的日期段
$next_week_arr = get_next_week_day(1);
$next_week_start_day = $next_week_arr['start_day'];
$next_week_start_end = $next_week_arr['end_day'];
// 订餐周期的起始日(的$relative_day表示提前多少天开始订餐
$current_date = strtotime($next_week_start_day) - (60 * 60 * 24 * $relative_day);
$current_date = date('Y-m-d', $current_date)." 09:00:00";
// 非下周的餐次,都跳过
if($dc_date < $next_week_start_day || $dc_date > $next_week_start_end){
continue;
}
// 截止具体时间
$deadline_time = strtotime($v['dc_date']) - (60 * 60 * 24 * $relative_day);
$deadline_time = date('Y-m-d', $deadline_time) ." {$deadline}";
// 判断时间段 用餐开始时间
$meal_time = $dc_date.' '.$v['start_time'];
if(strtotime($current_date) > time()){
echo "还没到周期开始日前{$relative_day}天的09:00:00自动订餐时间 {$dc_date} {$dc_type_name}<br>";
continue;
}
// 今天的餐都不订
if($dc_date <= date('Y-m-d')){
echo "今天的餐都不订 {$dc_date} {$dc_type_name}<br>";
continue;
}
// 每天下午09:00 对未订餐开始订餐
if(date("H:i") <= "09:00"){
echo "还没到09:00订餐时间 {$dc_date} {$dc_type_name}<br>";
continue;
}
// 已经开始用餐就不自动订餐
if(time() > strtotime($meal_time)){
echo "已经开始用餐,不进行自动订餐 {$dc_date} {$dc_type_name}<br>";
continue;
}
// 如果中途需要订餐,则
// if(strtotime($current_date) < time() && strtotime($current_date_end) > time()){
// // 只订当前时间还没开始用餐 往后的餐次 (提前$relative_day日
// // $tiqian = $relative_day;
// // 提前 $relative_day 日 到 $relative_day日的晚上12点 允许自动订餐
// $tiqian = strtotime($v['dc_date']) - (60 * 60 * 24 * $relative_day);
// $tiqian_start = date('Y-m-d', $tiqian) ." 17:30:00";
// $tiqian_end = date('Y-m-d', $tiqian) ." 23:59:59";
// if(strtotime($tiqian_start) > time()){
// echo "还没到自动订餐时间 {$dc_date} {$dc_type}<br>";
// continue;
// }
// }
// echo $dc_date.' '.$dc_type."<br>";
// continue;
// if($current_date < $deadline_time || $current_date > $meal_time){
// 当前时间 < 截止时间 || 当前时间 > 开始取餐时间
// 还没到预定截止时间
/*
$err_msg[] = $log_msg = "{$dc_date}-{$dc_type_name}(截止时间:{$deadline_time} / 就餐时间:{$meal_time}),还没到截止时间,或者已开始就餐,不进行自动订餐<br>";
echo $log_msg;
continue;
*/
// }
// 循环用户
foreach ($user_list as $user_k => $user_v){
$cellphone = $user_v['cellphone'];
// 用户设置自定义 自动订餐
if(empty($user_v['default_dc_type'])){
// 用户没有设置自动订餐
echo "【用户:{$user_v['username']}】用户没有设置自动订餐<br>";
continue;
}
$default_dc_type = explode(',', $user_v['default_dc_type']);
if(!in_array($v['dc_type'], $default_dc_type)){
// 当前dc_type 用户没有设置自动订餐
echo "当前dc_type 用户没有设置自动订餐<br>";
continue;
}
$dish = array();
$user_id = $user_v['id'];
$dining_hall_id = $user_v['dining_hall_id'];
$user_type_id = $user_v['type_id'];
// 判断该用户是否订餐(已订过餐 或 已取消过)
$check_dish = $db->get_one("select * from tb_order where uid='{$user_id}' and type='1' and state_id in (3,4,6) and date_id='{$date_id}' and is_delete=0");
if($check_dish){
continue;
}
if($dc_type == '229'){
// 当菜品类型 是 早餐固定从tb_date 找3个dish_type的一个菜品 生成 $dish
$dish = array();
$get_dc_date_info = $db->get_all("select * from tb_date a ,tb_date_dish b where a.id=b.date_id and a.dc_date='{$dc_date}' and a.dc_type='{$dc_type}' and a.dining_hall_id='{$dining_hall_id}'");
$dish_list_id = array_column($get_dc_date_info, 'dish_id');
$dish_list_id_str = join(',', $dish_list_id);
$dish = $db->get_all("select * from tb_dish where id in ({$dish_list_id_str}) and enabled='1' group by dish_type LIMIT 3");
if(count($dish) < 3){
$err_msg[] = $log_msg = "【用户:{$user_v['username']}{$dc_date} {$dc_type_name} 菜品类型不足必须大于等于3个菜品";
echo $log_msg;
$log_data['cellphone'] = $user_v['cellphone'];
$log_data['title'] = '自动订餐';
$log_data['content'] = $log_msg;
$log_data['type'] = $log_type;
$log_data['user_id'] = $user_v['id'];
$log_data['add_time'] = date('Y-m-d H:i:s');
$sql_data = "";
foreach ($log_data as $data_key => $data_val){
$sql_data .= ",{$data_key}='{$data_val}'";
}
$sql_data = substr($sql_data, 1, strlen($sql_data)-1);
$db->query("insert into tb_jtj_ts_log set {$sql_data}");
continue;
}
}else{
// 进行自动订餐
$foot_type = $db->get_all("select a.*,b.default_dish_num from tb_dish_vote_foot_type a left join tb_dish_vote_foot_type_cls b on a.cls_id=b.id and a.cls_id>0 where meal_type_id='{$dc_type}' and dining_hall_id='{$dining_hall_id}' and b.id in ({$cls_ids})");
// 筛选出 两荤一素一汤
$dish_ids_arr = array();
// 已录入自定订餐菜式的份数
$default_dish_num = 0;
foreach ($foot_type as $ft_k => $ft_v){
// if($ft_v['cls'] == 1 && count($dish_ids['hun']) >= 2){
// continue;
// }elseif($ft_v['cls'] == 2 && count($dish_ids['su']) >= 1){
// continue;
// }elseif($ft_v['cls'] == 3 && count($dish_ids['tang']) >= 1){
// continue;
// }
if(count($dish_ids_arr[$ft_v['cls_id']]) >= $ft_v['default_dish_num']){
// 数组的个数大于等于 限定个数
continue;
}
$dish_type_ids = substr($ft_v['dish_type_id'], 1, strlen($ft_v['dish_type_id']) - 2);
$dish_type_ids_arr = explode(',', $dish_type_ids);
// 查找对应类型的 dish
// $dish_list = $db->get_all("select * from tb_dish where enabled='1' and dining_hall_id='{$dining_hall_id}' and dish_type in ({$dish_type_ids})");
$dish_list = $db->get_all("select a.total_max_num, a.book_num,b.* from tb_date_dish a
left join tb_dish b on a.dish_id=b.id
where b.enabled='1' and b.dining_hall_id='{$dining_hall_id}' and b.dish_type in ({$dish_type_ids}) and a.date_id='{$date_id}'");
// $count = $ft_v['default_dish_num'] - count($dish_ids_arr[$ft_v['cls_id']]);
// for ($i=0;$i < $count; $i++){
// 有问题
for ($i=0;$i < count($dish_list); $i++){
// 判断菜式是否已经存满
if($ft_v['default_dish_num'] - count($dish_ids_arr[$ft_v['cls_id']]) <= 0){
break;
}
// 判断该菜品最多可点分数 是否已点完
if($dish_list[$i]['total_max_num'] != 0 && $dish_list[$i]['total_max_num'] <= $dish_list[$i]['book_num']){
break;
}
if(empty($dish_list[$i])){
break;
}
$dish_ids_arr[$ft_v['cls_id']][] = $dish_list[$i];
// $default_dish_num += 1;
}
$cls_ids_arr = array_diff($cls_ids_arr, [$ft_v['cls_id']]);
$default_dish_num += $ft_v['default_dish_num'];
}
if(count($cls_ids_arr) > 0){
$err_msg[] = $log_msg = "【用户:{$user_v['username']}{$dc_date} {$dc_type_name} 菜品类型不足必须满足2荤1素1汤<br>";
echo $log_msg;
$log_data['cellphone'] = $user_v['cellphone'];
$log_data['title'] = '自动订餐';
$log_data['content'] = $log_msg;
$log_data['type'] = $log_type;
$log_data['user_id'] = $user_v['id'];
$log_data['add_time'] = date('Y-m-d H:i:s');
$sql_data = "";
foreach ($log_data as $data_key => $data_val){
$sql_data .= ",{$data_key}='{$data_val}'";
}
$sql_data = substr($sql_data, 1, strlen($sql_data)-1);
$db->query("insert into tb_jtj_ts_log set {$sql_data}");
continue;
}
// 把dish_ids数组变成一维数组
$dish = array_reduce($dish_ids_arr, function ($result, $value) {
// foreach ($value as $reduce_k => $reduce_v){
// // 费用翻倍
// $value[$reduce_k]['dish_price'] = $reduce_v['dish_price'] * 2;
// }
return array_merge($result, array_values($value));
}, array());
}
// 下单
$total_price = 0;
// 计算金额
foreach ($dish as $dk => $dv){
$total_price += $dv['dish_price'];
}
//考虑tb_meal_type_guding_price固定金额
$row = $db->get_one("select * from tb_meal_type_guding_price where company_id = '".$company_id."' and meal_type_id = '".$dc_type."' and (user_type_id=0 or user_type_id=".$user_type_id.") and (dining_hall_id=0 or dining_hall_id = ".$dining_hall_id.") order by idx");
if($row) {
$total_price = $row['price'];
}
// 判断该用户余额是否充足
$user_balance = $db->get_one("select sum(account) account from tb_account where user_id='{$user_id}' group by user_id");
if($user_balance['account'] < $total_price){
// 判断是否今天已经记录过
$check_yu_e = $db->get_one("select * from tb_jtj_ts_log where DAY(add_time) = DAY(NOW()) and type='default_dish' and user_id='{$user_v['id']}' and content like '%余额不足%'");
if($check_yu_e){
echo "【用户:{$user_v['username']}】 余额不足,自动订餐失败,今天已记录过,跳过。<br>";
continue;
}
$err_msg[] = $log_msg = "用户:{$user_v['username']} 余额不足,自动订餐失败。";
echo "【用户:{$user_v['username']}】 余额不足,自动订餐失败。<br>";
$log_data['cellphone'] = $user_v['cellphone'];
$log_data['title'] = '自动订餐';
$log_data['content'] = $log_msg;
$log_data['type'] = $log_type;
$log_data['user_id'] = $user_v['id'];
$log_data['add_time'] = date('Y-m-d H:i:s');
$sql_data = "";
foreach ($log_data as $data_key => $data_val){
$sql_data .= ",{$data_key}='{$data_val}'";
}
$sql_data = substr($sql_data, 1, strlen($sql_data)-1);
$db->query("insert into tb_jtj_ts_log set {$sql_data}");
continue;
}
$total_num = count($dish);
$parent_code = md5(uniqid(rand(), true));
// 生成code
do {
$code = date('Ymd') . $dc_type . substr(preg_replace("/[a-z]/", "", md5(rand()."_1".microtime())."0000"), 0, 4);
$t_order = $db->get_one("select a.* from tb_order a where code = '{$code}'");
} while ($t_order);
// 生成take_food_code
do {
$take_food_code = substr(preg_replace("/[a-z]/", "", md5(rand()."_".microtime())."00000000"), 0, 8);
$t_order = $db->get_one("select a.* from tb_order a where take_food_code='{$take_food_code}'");
} while ($t_order);
$qrcode_url = "/show/get.php?act=getQRCode&takecode=" . $take_food_code;
$total = array("total_price" => $total_price, "total_num" => $total_num);
if($total_num <= 0){
// if($total_num < $default_dish_num){
$log_msg = "【用户:{$user_v['username']}{$dc_date} {$dc_type_name} 没有可订的菜品,自定订餐失败。";
$log_data['cellphone'] = $user_v['cellphone'];
$log_data['title'] = '自动订餐';
$log_data['content'] = $log_msg;
$log_data['type'] = $log_type;
$log_data['user_id'] = $user_v['id'];
$log_data['add_time'] = date('Y-m-d H:i:s');
$sql_data = "";
foreach ($log_data as $data_key => $data_val){
$sql_data .= ",{$data_key}='{$data_val}'";
}
$sql_data = substr($sql_data, 1, strlen($sql_data)-1);
$db->query("insert into tb_jtj_ts_log set {$sql_data}");
echo $log_msg;
continue;
}
$order = array(
'code' => $code,
"parent_code" => $parent_code,
"state_id" => 6,
"uid" => $user_id,
"date_id" => $date_id,
"type" => 1,
"create_time" => date('Y-m-d H:i:s'),
"book_num" => 1,
"take_num" => 0,
"reason" => "自动订餐,订餐消费支付{$total['total_price']}",
"take_food_code" => $take_food_code,
'total_num' => $total['total_num'],
'total_price' => $total['total_price'],
"qrcode_url" => $qrcode_url,
"qrcode_path" => '',
"book_fee" => 0
);
// 延迟0.01-0.6秒
$suijishu = mt_rand(1,60);
usleep($suijishu * 10000);
// 在判断是否已经有订单
$check_dish = $db->get_one("select * from tb_order where uid='{$user_id}' and type='1' and state_id in (3,4,6) and date_id='{$date_id}' and is_delete=0");
if($check_dish){
continue;
}
$db->insert("tb_order", $order);
$oid = $db->insert_id();
if($oid > 0){
$rList = array(array('ac' => $total['total_price'], 'rtype' => 2, 'ftid' => $dining_hall_id, 'oid' => $oid));
foreach ($dish as $dk => $dv){
$order_detail = array("order_id" => $oid, "dish_id" => $dv['id'], "dish_amount" => 1, "dish_price" => $dv['dish_price']);
// $this->Dishes_model->add_date_dish_book_num(1, $date_id, $dv['dish_id']);
$db->update("tb_date_dish", array('book_num' => 'book_num+1'), "date_id='{$date_id}' and dish_id='{$dv['id']}'");
$db->insert("tb_order_detail", $order_detail);
$odid = $db->insert_id();
}
$date = strtotime($dc_date);
$month = date('n', $date);
$day = date('j', $date);
$date_text = $month . '月' . $day . '日' . '(周' . cnWeek($date) . ')' . $dc_type_name;
$result[] = array('order_id' => $oid, 'meal_text' => $date_text, 'take_food_code' => $order['take_food_code'], 'qr_code' => $qrcode_url, "total_price" => $total['total_price'], "total_num" => $total['total_num']);
}
// 结账
if($rList) { //扣费
$r = gpay_pay_user_account($user_id, $rList, $updateInfo);
if($r != 'suc') {
// 支付失败,删除记录
foreach ($dish as $dk => $dv){
$db->update("tb_date_dish", array('book_num' => 'book_num-1'), "date_id='{$date_id}' and dish_id='{$dv['id']}'");
}
$db->delete("tb_order_detail", "order_id='{$oid}'");
$db->delete("tb_order", "id='{$oid}'");
if($r == 'yebz') {
// echo "【用户:{$user_v['username']}】余额不足,下单失败,请先充值";
$err_msg[] = $log_msg = "【用户:{$user_v['username']}】余额不足,下单失败,请先充值。";
} else {
$err_msg[] = $log_msg = "【用户:{$user_v['username']}】下单失败,请重试!";
// echo "【用户:{$user_v['username']}】下单失败,请重试!";
}
}else{
$suc_msg[] = $log_msg = "【用户:{$user_v['username']}{$dc_type_name} 订餐成功订单ID{$oid}<br>";
// 发推送和短信
// $check_username = $db->get_all("select * from tb_user where username in ('向熊林','霍瑞兴','张桂香','王建美','蒙秀荣','杜春梅','陆伟玲','谭婷芳','郑新浓','马绿花','莫火燕','覃金兰','张淼开','甘文盛','谢卫连','黎伟玲','黄玉娇','李亚炳','罗庆坚')");
// $check_tel = array_column($check_username, 'cellphone');
// if(in_array($cellphone, $check_tel)){
$content = "已成功为您订餐:{$dc_date} {$dc_type_name}您可进入“云中美食app-我的订单”查看。";
// 暂时停止推送
// $send_res = sendTs($cellphone, $title, $content);
// $sms_res = sendSms($cellphone, $content);
// }
}
$log_data['cellphone'] = $user_v['cellphone'];
$log_data['title'] = '自动订餐';
$log_data['content'] = $log_msg;
$log_data['type'] = $log_type;
$log_data['user_id'] = $user_v['id'];
$log_data['add_time'] = date('Y-m-d H:i:s');
$sql_data = "";
foreach ($log_data as $data_key => $data_val){
$sql_data .= ",{$data_key}='{$data_val}'";
}
$sql_data = substr($sql_data, 1, strlen($sql_data)-1);
$db->query("insert into tb_jtj_ts_log set {$sql_data}");
echo $log_msg;
}
}
}
}
function get_next_work_day($next_week_num = 1, $current_date = ''){
// 获取当前星期几
$week_num = date('w');
// 按照星期1-日 = 1-7
$week_num = $week_num != 0 ? $week_num : 7;
// 获取相差多少天到下星期1
$differ_day = 7 - $week_num + 1;
$n = 7*($next_week_num-1);
$start_day = date('Y-m-d', strtotime($differ_day+$n .' day'));
$end_day = date('Y-m-d', strtotime($differ_day+$n+6 .' day'));
$list = array();
$day_list = array(); // 这周工作日所有日期的数组
for ($i=0; $i<5; $i++){
$date_name = date('Y-m-d', strtotime($differ_day+$n+$i .' day'));
$week_name = get_week_name($date_name);
$current = false;
if($date_name == date('Y').'-'.$current_date){
$current = true;
}
if(empty($current_date) && $i == 0){
$current = true;
}
$day_list[] = $date_name;
$list[] = array(
'exact_date' => $date_name,
'date' => substr($date_name,5),
'weekday' => $week_name,
'name' => substr($date_name.''.$week_name.'',5),
'current' => $current
);
}
return array(
'start_day' => $start_day,
'end_day' => $end_day,
'list' => $list,
'day_list' => $day_list
);
}
function get_next_week_day($next_week_num = 1, $current_date = ''){
// 获取当前星期几
$week_num = date('w');
// 按照星期1-日 = 1-7
$week_num = $week_num != 0 ? $week_num : 7;
// 获取相差多少天到下星期1
$differ_day = 7 - $week_num + 1;
$n = 7*($next_week_num-1);
// $start_day = date('Y-m-d', strtotime($differ_day+$n .' day'));
$start_day = date('Y-m-d', strtotime('+1 day'));
$end_day = date('Y-m-d', strtotime($differ_day+$n+6 .' day'));
$list = array();
$day_list = array(); // 这周工作日所有日期的数组
for ($i=0; $i<14; $i++){
$date_name = date('Y-m-d', strtotime($differ_day+$n+$i .' day'));
$week_name = get_week_name($date_name);
$current = false;
if($date_name == date('Y').'-'.$current_date){
$current = true;
}
if(empty($current_date) && $i == 0){
$current = true;
}
$day_list[] = $date_name;
$list[] = array(
'exact_date' => $date_name,
'date' => substr($date_name,5),
'weekday' => $week_name,
'name' => substr($date_name.''.$week_name.'',5),
'current' => $current
);
}
return array(
'start_day' => $start_day,
'end_day' => $end_day,
'list' => $list,
'day_list' => $day_list
);
}
function get_week_name($day = ''){
$num = !empty($day) ? date('w', strtotime($day)) : date('w');
$arr = array("","","","","","","");
return '周'.$arr[$num];
}
// 投票提醒
if($act == 'vote_remind') {
$log_type = "vote_remind";
$date_time = date("Y-m-d H:i:s");
// 获取今天 往后的一个星期
$next_week_arr = get_next_work_day(1);
$vote_date_list = $db->get_all("select * from tb_dish_vote_date where status=1 and is_create_dishes=0 and deadline>'{$date_time}' and start_day<='{$next_week_arr['end_day']}'");
// 获取该投票菜式已经生成(截止之前)
// $vote_date_list = $db->get_all("select * from tb_dish_vote_date where status=1 and is_create_dishes=1 and deadline>'{$date_time}'");
foreach ($vote_date_list as $k => $v){
$start_day = $v['start_day'];
$end_day = $v['end_day'];
$deadline = $v['deadline'];
$add_time = $v['add_time'];
// 一小时后推送
$push_time = strtotime($add_time) + (60*60*1);
if(time() < $push_time){
// 还没到时间
continue;
}
// 判断是否已经推送过
//$check_push = $db->get_one("select * from tb_jtj_ts_log where type='{$log_type}' and vote_date_id='{$v['id']}'");
//if($check_push){
// 已经推送过
// continue;
//}
$dc_type = $v['dc_type'];
$dc_type_name = '';
if($dc_type){
$dc_type_info = $db->get_one("select * from tb_meal_type where id='{$dc_type}'");
$dc_type_name = "{$dc_type_info['name']}";
}
// 获取可以推送的用户
$user_list = $db->get_all("select * from tb_user where enabled='1' and company_id='54'");
foreach ($user_list as $user_k => $user_v){
// 判断是否已经推送过
$check_push = $db->get_one("select * from tb_jtj_ts_log where type='{$log_type}' and vote_date_id='{$v['id']}' and user_id = ".$user_v['id']);
if($check_push){
// 已经推送过
continue;
}
// 暂时停止推送
// sendTs($user_v['cellphone'], "通知", "投票菜单{$dc_type_name}已更新,请积极参与投票(如已投票,请忽略)。");
// sendSms($user_v['cellphone'], "投票菜单{$dc_type_name}已更新,请积极参与投票(如已投票,请忽略)。");
//记录推送记录
$push_arr = array(
'user_id' => $user_v['id'],
'cellphone' => $user_v['cellphone'],
'title' => '投票提醒',
'type' => $log_type,
'vote_date_id' => $v['id'],
'content' => "{$start_day} ~ {$end_day}】用户:{$user_v['cellphone']},投票菜单{$dc_type_name}已推送完成vote_date_id={$v['id']}",
'add_time' => date('Y-m-d H:i:s')
);
// $db->insert("tb_jtj_ts_log", $push_arr);
// $push_id = $db->insert_id();
}
}
}
// 生成菜谱后 1小时推送提醒订餐
if($act == 'buffet_order_remind'){
$log_type = "buffet_order_remind";
$date_time = date("Y-m-d H:i:s");
// 判断是否已经生成了菜谱 (截止之后)
$vote_date_list = $db->get_all("select * from tb_dish_vote_date where status=1 and is_create_dishes=1 and deadline<='{$date_time}'");
foreach ($vote_date_list as $k => $v){
// 判断是否已经推送了
$start_day = $v['start_day'];
$end_day = $v['end_day'];
$deadline = $v['deadline'];
// 超过7天的不提示
$last_push_time = strtotime($deadline) + (60*60*24*7);
if(time() > $last_push_time){
continue;
}
// 判断是否已经推送过
$check_push = $db->get_one("select * from tb_jtj_ts_log where type='{$log_type}' and vote_date_id='{$v['id']}'");
// 已经推送过
if($check_push){continue;}
// 判断投票截止时间 + 1小时
$push_time = strtotime($deadline) + (60*60*1);
if(time() < $push_time){
// 还没到时间
continue;
}
$dc_type = $v['dc_type'];
$dc_type_name = '';
if($dc_type){
$dc_type_info = $db->get_one("select * from tb_meal_type where id='{$dc_type}'");
$dc_type_name = "{$dc_type_info['name']}";
}
// 获取可以推送的用户
$user_list = $db->get_all("select * from tb_user where enabled='1' and company_id='54'");
foreach ($user_list as $user_k => $user_v){
// 暂时停止推送
// sendTs($user_v['cellphone'], "通知", "菜单{$dc_type_name}已更新,请及时订餐(如已订餐,请忽略)。");
// sendSms($user_v['cellphone'], "菜单{$dc_type_name}已更新,请及时订餐(如已订餐,请忽略)。");
//记录推送记录
$push_arr = array(
'cellphone' => $user_v['cellphone'],
'title' => '提醒订餐',
'type' => $log_type,
'vote_date_id' => $v['id'],
'content' => "{$start_day} ~ {$end_day}】用户:{$user_v['username']},生成菜单{$dc_type_name}后提醒订餐已完成",
'add_time' => date('Y-m-d H:i:s')
);
// $db->insert("tb_jtj_ts_log", $push_arr);
// $push_id = $db->insert_id();
}
}
}
// 生日餐提醒
if($act == 'birth_meal_remind'){
$log_type = 'birth_meal_remind';
$date_time = date("Y-m-d H:i:s");
$year = date('Y');
// 获取所有用户
$user_list = $db->get_all("select * from tb_user where enabled='1' and company_id='54' and (birthday is not null or birthday!='')");
foreach ($user_list as $k => $v){
if(empty(trim($v['birthday']))){
// 防止设置生日是空格
continue;
}
// 判断这个人今年是否提醒了
$check_push = $db->get_one("select * from tb_jtj_ts_log where type='{$log_type}' and user_id='{$v['id']}' and DATE_FORMAT(add_time,'%Y') = '{$year}'");
if($check_push){
continue;
}
// 今年生日时间 - 48小时 提醒
$birth_remind_time = strtotime($year.'-'.$v['birthday']) - (60*60*48);
if(time() < $birth_remind_time){
// 还没到生日提醒
continue;
}
// 生日提醒结束时间
$birth_remind_end_time = strtotime($year.'-'.$v['birthday']) - (60*60*15);
if(time() > $birth_remind_end_time){
continue;
}
// 生日提醒
// 暂时停止推送
// sendTs($v['cellphone'], "通知", "您有生日餐可订,请及时进入【云中美食】订餐(如已订餐,请忽略)。");
// sendSms($v['cellphone'], "您有生日餐可订,请及时进入【云中美食】订餐(如已订餐,请忽略)。");
//记录推送记录
$push_arr = array(
'cellphone' => $v['cellphone'],
'title' => '生日餐提醒',
'type' => $log_type,
'user_id' => $v['id'],
'content' => "【用户:{$v['username']}】生日餐已提醒",
'add_time' => date('Y-m-d H:i:s')
);
// $db->insert("tb_jtj_ts_log", $push_arr);
// $push_id = $db->insert_id();
}
}
//header("Content-type:text/html;charset=utf-8");
if($act == 'tuikuan'){
$dining_hall_id = $_GET['dining_hall_id'];
$date_id = $_GET['date_id'];
$user_id = $_GET['user_id'];
if(empty($dining_hall_id) || empty($date_id)){
echo "参数不能为空";
exit;
}
function get_user_by_phone2($cellphone)
{
global $db;
$row = $db->get_one("select a.*,b.name type_name from tb_user a, tb_user_type b where a.type_id = b.id and (cellphone = '{$cellphone}' or username='{$cellphone}') and a.enabled not in (0, -99)");
if(!$row) return null;
if(is_jdpw2($row['password'])) {
$row['jdmm'] = 1;
} else {
$row['jdmm'] = 0;
}
$row1 = $db->get_one("select * from tb_config where class = 'ONLY_CASH_AREA'");
$cash_fund = 0;
if($row1) {
$v = trim($row1['value'], ",");
if(in_array($row['area_id'], explode(',', $v))) $cash_fund = 1;
}
$row['cash_fund'] = $cash_fund;
return $row;
}
// $sql = "select a.* from tb_order a left join tb_date b on a.date_id=b.id where b.dining_hall_id='{$dining_hall_id}' and a.date_id='{$date_id}' and a.state_id=6 and a.type=1";
$where_user_id = "";
if($user_id){
$where_user_id = " and a.uid='{$user_id}' ";
}else{
$where_user_id = " and DATE(a.create_time) = DATE(now()) ";
}
$sql = "select a.* from tb_order a left join tb_date b on a.date_id=b.id where b.dining_hall_id='{$dining_hall_id}' and a.date_id='{$date_id}' and a.state_id=6 and a.type=1 {$where_user_id}";
$info = $db->get_all($sql);
if(empty($info)){
echo "暂没有可退订单<br>";
exit;
}
$host = $_SERVER['HTTP_HOST'];
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
foreach ($info as $k => $v){
$user_id = $v['uid'];
if(empty($user_id)){
echo "order_id='{$v['id']}'用户ID'{$user_id}' 的uid为空无法退餐<br>";
continue;
}
// 获取用户token
$getToken = $db->get_one("select * from tb_session where uid='{$user_id}' order by expire_time desc");
if(empty($getToken)){
// 没有token信息自己生成
$token = md5(uniqid());
$user_info = $db->get_one("select * from tb_user where id='{$user_id}'");
$user = get_user_by_phone2($user_info['cellphone']);
$set = "token='{$token}', ip='".$_SERVER['REMOTE_ADDR']."', login_time='".time()."', data='".addslashes(json_encode($user))."', expire_time='".(time()+86400)."'";
$row = $db->get_one("select * from tb_session where uid=".$user_id);
if($row) {
$db->query("update tb_session set {$set} where uid=".$user_id);
} else {
$db->query("insert into tb_session set {$set}, uid=".$user_id);
}
$getToken = $db->get_one("select * from tb_session where uid='{$user_id}' order by expire_time desc");
// echo "order_id='{$v['id']}'用户ID'{$user_id}' 的token获取失败无法退餐<br>";
// continue;
}
if($getToken['expire_time'] < time()){
// token过期
$expire_time = time()+60;
$db->query("update tb_session set expire_time='{$expire_time}' where uid='{$getToken['uid']}' and token='{$getToken['token']}'");
}
$post_data = array(
'token' => $getToken['token'],
'order_id' => $v['id'],
'cancel_price' => $v['total_price'],
);
$res = gquery("{$protocol}{$host}/api/order/cancel/", $post_data);
$res = json_decode($res, 1);
echo "order_id='{$v['id']}'用户ID'{$user_id}' {$res['message']}<br>";
}
}
if($act == 'repeat_tc') {
// $user_id = $_GET['user_id'];
$check = $_GET['check'];
$dining_hall_id = 174;
if ($check) {
$user_dc_all = $db->get_all("select * from
(select GROUP_CONCAT(a.id) order_ids, COUNT(a.code) total_code,a.uid
from tb_order a, tb_date b
where a.date_id=b.id and b.dining_hall_id={$dining_hall_id} and a.state_id=6 and a.date_id>0 and a.is_delete=0 and a.uid>0 and a.create_time BETWEEN '2021-08-08 00:00:00' and '2021-08-10 23:00:00'
GROUP BY a.uid,a.date_id)
as c where total_code>=2");
echo "<pre>";
print_r($user_dc_all);
echo "</pre>";
exit;
}
// if (empty($user_id)) {
// echo "参数不能为空";
// exit;
// }
function get_user_by_phone2($cellphone)
{
global $db;
$row = $db->get_one("select a.*,b.name type_name from tb_user a, tb_user_type b where a.type_id = b.id and (cellphone = '{$cellphone}' or username='{$cellphone}') and a.enabled not in (0, -99)");
if (!$row) return null;
if (is_jdpw2($row['password'])) {
$row['jdmm'] = 1;
} else {
$row['jdmm'] = 0;
}
$row1 = $db->get_one("select * from tb_config where class = 'ONLY_CASH_AREA'");
$cash_fund = 0;
if ($row1) {
$v = trim($row1['value'], ",");
if (in_array($row['area_id'], explode(',', $v))) $cash_fund = 1;
}
$row['cash_fund'] = $cash_fund;
return $row;
}
$user_dc_all_arr = $db->get_all("
select * from
(select GROUP_CONCAT(a.id) order_ids, COUNT(a.code) total_code,a.uid
from tb_order a, tb_date b
where a.date_id=b.id and b.dining_hall_id={$dining_hall_id} and a.state_id=6 and a.date_id>0 and a.is_delete=0 and a.uid>0 and a.create_time BETWEEN '2021-08-08 00:00:00' and '2021-08-10 23:00:00'
GROUP BY a.uid,a.date_id)
as c where total_code>=2");
// foreach ($user_dc_all_arr as $dc_k => $user_dc_all) {
foreach ($user_dc_all_arr as $dc_k => $info) {
$order_ids = $info['order_ids'];
$user_id = $info['uid'];
echo "当前用户今天有order_id数量超过1个" . $order_ids . "<br>";
$order_id_arr = explode(',', $order_ids);
foreach ($order_id_arr as $k => $v) {
if ($k == 0) {
echo "order_id{$v},保留。<br>";
continue;
}
echo "退餐order_id{$v}。<br>";
// 获取用户token
$getToken = $db->get_one("select * from tb_session where uid='{$user_id}' order by expire_time desc");
if (empty($getToken)) {
// 没有token信息自己生成
$token = md5(uniqid());
$user_info = $db->get_one("select * from tb_user where id='{$user_id}'");
$user = get_user_by_phone2($user_info['cellphone']);
$set = "token='{$token}', ip='" . $_SERVER['REMOTE_ADDR'] . "', login_time='" . time() . "', data='" . addslashes(json_encode($user)) . "', expire_time='" . (time() + 86400) . "'";
$row = $db->get_one("select * from tb_session where uid=" . $user_id);
if ($row) {
$db->query("update tb_session set {$set} where uid=" . $user_id);
} else {
$db->query("insert into tb_session set {$set}, uid=" . $user_id);
}
$getToken = $db->get_one("select * from tb_session where uid='{$user_id}' order by expire_time desc");
// echo "order_id='{$v['id']}'用户ID'{$user_id}' 的token获取失败无法退餐<br>";
// continue;
}
if ($getToken['expire_time'] < time()) {
// token过期
$expire_time = time() + 60;
$db->query("update tb_session set expire_time='{$expire_time}' where uid='{$getToken['uid']}' and token='{$getToken['token']}'");
}
$order_info = $db->get_one("select * from tb_order where id='{$v}'");
$post_data = array(
'token' => $getToken['token'],
'order_id' => $order_info['id'],
'cancel_price' => $order_info['total_price'],
);
$host = $_SERVER['HTTP_HOST'];
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$res = gquery("{$protocol}{$host}/api/order/cancel/", $post_data);
$res = json_decode($res, 1);
echo "order_id='{$order_info['id']}'用户ID'{$user_id}' {$res['message']}<br>";
echo "--------------------------------------------------<br>";
}
}
}
// 定时脚本,当天围餐的菜品都撤掉,然后自动插入餐标菜式,以便实现:当日预定按照人头固定金额203040这三个金额
if($act == 'baojian'){
$company_id = '4151';
// 固定餐标的类型
$meal_label_type = "898";
$dining_hall_id = "305";
// 获取今天围餐的所有订单
// $today = date('Y-m-d');
$today = date('Y-m-d', strtotime(date('Y-m-d'). ' +1 day'));
$dateInfo = $db->get_all("select a.*, b.name as meal_type_name from tb_date a,tb_meal_type b where a.dc_type=b.id and a.dc_date='{$today}' and a.dining_hall_id='{$dining_hall_id}' and b.mealtype=6 and b.status=1 order by b.idx desc");
if(empty($dateInfo)){
echo "今天没有包间";
exit;
}
foreach ($dateInfo as $k => $v){
// 把tb_date_dish的菜品数量改为0然后插入餐标菜式
$date_id = $v['id'];
// 获取当前菜谱的所有菜品(不含固定餐标)
$dish_list = $db->get_all("select a.*, b.dish_type from tb_date_dish a, tb_dish b where a.dish_id=b.id and b.dish_type!='{$meal_label_type}' and a.date_id='{$date_id}' and b.enabled=1");
// 获取需要更新的菜品id
$dish_ids = array_column($dish_list, 'dish_id');
$dish_ids = join(',', $dish_ids);
$db->query("update tb_date_dish set total_max_num = book_num where date_id=".$date_id." and dish_id in ({$dish_ids})");
//对于book_num = 0的也更新为不可以订了
$db->query("update tb_date_dish set total_max_num = 1,book_num = 1 where date_id=".$date_id." and book_num = 0 and total_max_num = 0 and dish_id in ({$dish_ids})");
// 然后添加餐标菜式
// 判断是否已经有餐标菜式
$has_meal_label = $db->get_one("select * from tb_date_dish a, tb_dish b where a.dish_id=b.id and b.dish_type='{$meal_label_type}' and a.date_id='{$date_id}' and b.enabled=1");
if(empty($has_meal_label)){
// 当前菜谱没有餐标菜式,添加
$meal_label_list = $db->get_all("select * from tb_dish where enabled=1 and dish_type='{$meal_label_type}' and dining_hall_id='{$dining_hall_id}' order by id asc");
foreach ($meal_label_list as $mk => $mv){
$insert_data = array(
'date_id' => $date_id,
'dish_id' => $mv['id'],
'max_num'=> 1000,
'is_normal_dish'=>1,
'total_max_num'=> 0,
'idx' => 0,
'book_type' => 1,
'book_num'=> 0,
);
$db->insert("tb_date_dish", $insert_data);
}
}
}
}