分单

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));
    }
原文地址:https://www.cnblogs.com/polax/p/13591138.html