public function fendan_dpt_auto_task() { // $orderList = $this->Baoming->find("all", ['conditions' => ['is_fp' => 0, 'zx_tuijian' => 1], 'fields' => ['id', 'ownercs', 'area']]); /* $userRedisList = $this->Redis->get("auto_remind_userRedisList"); print_r(json_decode($userRedisList));exit;*/ /* $this->Redis->del("auto_remind_userRedisList"); $this->Redis->del("auto_remind_userAllotList"); exit;*/ $orderList = $this->Baoming->findAsPlus('all', array('conditions' => array( 'BaomingPlus.track_is_fp' => 0, 'Baoming.is_qy !=' => 1, 'Baoming.is_fp' => 1, 'Baoming.mes_bak' => 5, 'Baoming.allow' => 0, 'Baoming.status' => array(0,1), 'Baoming.status_trace' => array(0,1), 'Baoming.invalid' => array(0,2), 'BaomingPlus.is_wh !=' => 1, 'Baoming.lf_cs' => NULL, 'BaomingPlus.is_old_fpd' => 0, 'OR' => array( 'Baoming.can_not_go' => 1, 'Baoming.stage >=' => 1, 'Baoming.ck_nums >= Baoming.limits + BaomingPlus.cxfp_limiits', )),'fields'=>array('Baoming.id','Baoming.lf_time','Baoming.fdtime'))); // print_r($orderList);exit; if (empty($orderList)) { exit("无可分配数据!"); } // $userList = $this->Member->find("all", ['conditions' => ['status' => 0]]); //根据所有待分配的客服信息 $userList = $this->Member->find('all', array('conditions' => array('js_type' => 37, 'fp_type' => 1, 'status' => 0), 'fields' => array('id','fp_nums', 'is_plus_minus','lf_time_interval'), 'order' => 'id ASC')); if (empty($userList)) { exit("无可分配客服!"); } //print_r($userList);exit; $userRedisList = $this->Redis->get("auto_remind_userRedisList"); $userRedisList = $this->object2array(json_decode($userRedisList)); // 每位客服分配总次数 $userAllAllotList = $this->Redis->get("auto_remind_userAllotList"); $userAllAllotList = $this->object2array(json_decode($userAllAllotList)); foreach ($userList as $uk => $uv) { if (empty($userRedisList[$uv['Member']['id']])) { $userRedisList[$uv['Member']['id']] = ['limit' => $uv['Member']['fp_nums'], 'alloted' => 0]; } if (empty($userAllAllotList[$uv['Member']['id']])) { $userAllAllotList[$uv['Member']['id']] = 0; } } /* echo "<pre>";print_r($userRedisList);exit;*/ /* echo "<pre>"; print_r($userAllAllotList);exit;*/ foreach ($orderList as $key => $val) { // 计算量房间隔时间 $lf_time_arr = strtotime($val['Baoming']['lf_time'] != '0000-00-00' ? $val['Baoming']['lf_time']:''); //分单时间 $fd_time_arr = strtotime(substr($val['Baoming']['fdtime'],0,10)); if( !empty($lf_time_arr) && !empty($fd_time_arr) && $lf_time_arr > $fd_time_arr ){ $lf_jg_time = floor( ($lf_time_arr - $fd_time_arr) / 86400); //天数 }else{ $lf_jg_time = 0; } // $userList = $this->Member->find('all', array('conditions' => array('js_type' => 37, 'fp_type' => 1, 'status' => 0), 'fields' => array('id','fp_nums', 'is_plus_minus','lf_time_interval'), 'order' => 'id ASC')); $conditions['js_type'] = 37; $conditions['fp_type'] = 1; $conditions['status'] = 0; $userListArr = $this->Member->find('all', array('conditions' => $conditions), 'fields' => array('id','fp_nums', 'is_plus_minus','lf_time_interval'), 'order' => 'id ASC')); // 面积符合的 foreach ($userList as $k => $v) { $updateSave = []; if ( ( ($v['Member']['is_plus_minus'] == 1 && $lf_jg_time >= $v['Member']['lf_time_interval']) || ($v['Member']['is_plus_minus'] == 2 && $lf_jg_time <= $v['Member']['lf_time_interval'] ) ) && (array_search(max($userAllAllotList), $userAllAllotList) != $v['Member']['id'] || count($userAllAllotList) <= 1) && $userRedisList[$v['Member']['id']]['alloted'] < $userRedisList[$v['Member']['id']]['limit']) { $userRedisList[$v['Member']['id']]['alloted'] ++; if ($userRedisList[$v['Member']['id']]['alloted'] == $userRedisList[$v['Member']['id']]['limit']) { $userRedisList[$v['Member']['id']]['alloted'] = 0; $userAllAllotList[$v['Member']['id']] ++; } $updateSave = ['id' => $val['Baoming']['id'], 'ownercs' => $v['Member']['id']]; } else { continue; } if (!empty($updateSave)) { echo "<<<<<<<客户编号:" . $v['Member']['id'] . ">>>>>业主编号:" . $val['Baoming']['id']."<br/>"; } break; } # 顺序分配 if (empty($updateSave)) { foreach ($userList as $k => $v) { if (array_search(min($userAllAllotList), $userAllAllotList) == $v['Member']['id'] && $userRedisList[$v['Member']['id']]['alloted'] < $userRedisList[$v['Member']['id']]['limit']) { $userRedisList[$v['Member']['id']]['alloted'] ++; } else { continue; } if ($userRedisList[$v['Member']['id']]['alloted'] == $userRedisList[$v['Member']['id']]['limit']) { $userRedisList[$v['Member']['id']]['alloted'] = 0; $userAllAllotList[$v['Member']['id']] ++; } $updateSave = ['id' => $val['Baoming']['id'], 'ownercs' => $v['Member']['id']]; echo "<<<<<<<客户编号:" . $v['Member']['id'] . ">>>>>业主编号:" . $val['Baoming']['id']."<br/>"; break; } } /* print_r($userRedisList);*/ // $this->Baoming->save($updateSave); } $this->Redis->setex("auto_remind_userRedisList", (strtotime(date("Y-m-d") . "23:59:59") - time()), json_encode($userRedisList)); $this->Redis->setex("auto_remind_userAllotList", (strtotime(date("Y-m-d") . "23:59:59") - time()), json_encode($userAllAllotList)); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现