diff --git a/application/common/command/PoolCommand.php b/application/common/command/PoolCommand.php index 3677338..abf22bc 100644 --- a/application/common/command/PoolCommand.php +++ b/application/common/command/PoolCommand.php @@ -72,46 +72,51 @@ class PoolCommand extends Command $this->timer = Timer::add($this->interval, function () { # 只在凌晨12点至6点间执行 if ((int)date('H') >= 0 && (int)date('H') < 6) { - # 公海规则 - $ruleList = db('crm_customer_pool_rule')->alias('rule')->field('rule.*') - ->join('__CRM_CUSTOMER_POOL__ pool', 'pool.pool_id = rule.pool_id', 'LEFT')->field("pool.customer_type")->where('pool.status', 1)->select(); - if (!empty($ruleList)) { - # 符合公海条件的客户IDS - $customerIds = $this->getQueryCondition($ruleList); - - # 整理客户公海关联数据 - $poolRelationData = $this->getCustomerPoolRelationData($customerIds); - - # 整理修改客户数据的条件(进入公海时间,前负责人...) - $customerWhere = $this->getCustomerQueryCondition($customerIds); - - Db::startTrans(); - try { - # 将客户退回公海 - if (!empty($poolRelationData)) Db::name('crm_customer_pool_relation')->insertAll($poolRelationData); - - # 修改客户数据 - if (!empty($customerWhere)) { - Db::name('crm_customer')->whereIn('customer_id', $customerWhere)->exp('before_owner_user_id', 'owner_user_id')->update([ - 'ro_user_id' => '', - 'rw_user_id' => '', - 'owner_user_id' => 0, - 'into_pool_time' => time() - ]); - } - $this->updateInfo($ruleList, $customerWhere); - # 删除联系人的负责人 - Db::name('crm_contacts')->whereIn('customer_id', $customerWhere)->update(['owner_user_id' => '']); - - Db::commit(); - } catch (\Exception $e) { - Db::rollback(); - } - } + $this->poolRecover(); } }); } + public function poolRecover() + { + # 公海规则 + $ruleList = db('crm_customer_pool_rule')->alias('rule')->field('rule.*') + ->join('__CRM_CUSTOMER_POOL__ pool', 'pool.pool_id = rule.pool_id', 'LEFT')->field("pool.customer_type")->where('pool.status', 1)->select(); + if (!empty($ruleList)) { + # 符合公海条件的客户IDS + $customerIds = PoolCommand::getQueryCondition($ruleList); + + # 整理客户公海关联数据 + $poolRelationData = PoolCommand::getCustomerPoolRelationData($customerIds); + + # 整理修改客户数据的条件(进入公海时间,前负责人...) + $customerWhere = PoolCommand::getCustomerQueryCondition($customerIds); + + Db::startTrans(); + try { + # 将客户退回公海 + if (!empty($poolRelationData)) Db::name('crm_customer_pool_relation')->insertAll($poolRelationData); + + # 修改客户数据 + if (!empty($customerWhere)) { + Db::name('crm_customer')->whereIn('customer_id', $customerWhere)->exp('before_owner_user_id', 'owner_user_id')->update([ + 'ro_user_id' => '', + 'rw_user_id' => '', + 'owner_user_id' => 0, + 'into_pool_time' => time() + ]); + } + PoolCommand::updateInfo($ruleList, $customerWhere); + # 删除联系人的负责人 + Db::name('crm_contacts')->whereIn('customer_id', $customerWhere)->update(['owner_user_id' => '']); + + Db::commit(); + } catch (\Exception $e) { + Db::rollback(); + } + } + } + /** * 自动入公海操作记录 * @param $ruleList @@ -129,7 +134,7 @@ class PoolCommand extends Command if (!empty($v1['limit_day'])) { $time = $v1['limit_day']; } else { - $time = $this->getMinDay($levels); + $time = PoolCommand::getMinDay($levels); } } foreach ($customerWhere as $val) { @@ -226,9 +231,9 @@ class PoolCommand extends Command foreach ($rules as $k => $v) { if (!isset($result[$v['pool_id']])) $result[$v['pool_id']] = []; - if ($v['type'] == 1) $result[$v['pool_id']] = array_merge($result[$v['pool_id']], $this->getFollowUpQueryResult($v['level_conf'], $v['level'], $v['deal_handle'], $v['business_handle'], $v['customer_type'])); - if ($v['type'] == 2) $result[$v['pool_id']] = array_merge($result[$v['pool_id']], $this->getBusinessQueryResult($v['level_conf'], $v['level'], $v['deal_handle'], $v['customer_type'])); - if ($v['type'] == 3) $result[$v['pool_id']] = array_merge($result[$v['pool_id']], $this->getDealQueryResult($v['level_conf'], $v['level'], $v['business_handle'], $v['customer_type'])); + if ($v['type'] == 1) $result[$v['pool_id']] = array_merge($result[$v['pool_id']], PoolCommand::getFollowUpQueryResult($v['level_conf'], $v['level'], $v['deal_handle'], $v['business_handle'], $v['customer_type'])); + if ($v['type'] == 2) $result[$v['pool_id']] = array_merge($result[$v['pool_id']], PoolCommand::getBusinessQueryResult($v['level_conf'], $v['level'], $v['deal_handle'], $v['customer_type'])); + if ($v['type'] == 3) $result[$v['pool_id']] = array_merge($result[$v['pool_id']], PoolCommand::getDealQueryResult($v['level_conf'], $v['level'], $v['business_handle'], $v['customer_type'])); } return $result; @@ -277,7 +282,7 @@ class PoolCommand extends Command } # 获取最小天数,对于没有设置级别的客户数据使用 - $minLimit = $this->getMinDay($levels); + $minLimit = PoolCommand::getMinDay($levels); $minTime = (time() - 24 * 60 * 60 * $minLimit); $where .= " OR ((!`customer`.`level` AND `customer`.`last_time` < " . $minTime . " AND `customer`.`last_time` > `customer`.`obtain_time`) OR (!`customer`.`level` AND `customer`.`obtain_time` < " . $minTime . " AND `customer`.`obtain_time` > `customer`.`last_time`) OR (!`customer`.`level` AND `customer`.`obtain_time` < " . $minTime . " AND ISNULL(`customer`.`last_time`))) )"; @@ -292,16 +297,10 @@ class PoolCommand extends Command # 锁定的客户不提醒 $where .= " AND `customer`.`is_lock` = 0"; - - # 过滤客户类型 - if (!empty($customerType)) { - $where .= "And `customer`.`customer_type` in " . $customerType; - } - # 查询符合条件的客户 return db('crm_customer') ->alias('customer')->join('__CRM_BUSINESS__ business', 'business.customer_id = customer.customer_id', 'LEFT') - ->where($where)->column('customer.customer_id'); + ->where($where)->where(['customer.crm_lthugd' => array('in', $customerType)])->column('customer.customer_id'); } /** @@ -346,7 +345,7 @@ class PoolCommand extends Command } # 获取最小天数,对于没有设置级别的客户数据使用 - $minLimit = $this->getMinDay($levels); + $minLimit = PoolCommand::getMinDay($levels); $minTime = (time() - 24 * 60 * 60 * $minLimit); $where .= " OR ((ISNULL(`business`.`customer_id`) AND `customer`.`obtain_time` < " . $minTime . " AND !`customer`.`level`) OR (`customer`.`obtain_time` < " . $minTime . " AND `customer`.`obtain_time` > `business`.`create_time` AND !`customer`.`level`) OR (`business`.`create_time` < " . $minTime . " AND `business`.`create_time` > `customer`.`obtain_time` AND !`customer`.`level`)) )"; @@ -358,14 +357,10 @@ class PoolCommand extends Command # 锁定的客户不提醒 $where .= " AND `customer`.`is_lock` = 0"; - # 过滤客户类型 - if (!empty($customerType)) { - $where .= "And `customer`.`customer_type` in " . $customerType; - } # 查询匹配条件的客户 return db('crm_customer')->alias('customer') ->join('__CRM_BUSINESS__ business', 'business.customer_id = customer.customer_id', 'LEFT') - ->where($where)->column('customer.customer_id'); + ->where($where)->where(['customer.crm_lthugd' => array('in', $customerType)])->column('customer.customer_id'); } /** @@ -410,7 +405,7 @@ class PoolCommand extends Command } # 获取最小天数,对于没有设置级别的客户数据使用 - $minLimit = $this->getMinDay($levels); + $minLimit = PoolCommand::getMinDay($levels); $minTime = (time() - 24 * 60 * 60 * $minLimit); $where .= " OR ((ISNULL(`contract`.`customer_id`) AND `customer`.`obtain_time` < " . $minTime . " AND !`customer`.`level`) OR (`customer`.`obtain_time` < " . $minTime . " AND `customer`.`obtain_time` > `contract`.`create_time` AND !`customer`.`level`) OR (`contract`.`create_time` < " . $minTime . " AND `contract`.`create_time` > `customer`.`obtain_time` AND !`customer`.`level`)) )"; @@ -422,15 +417,11 @@ class PoolCommand extends Command # 锁定的客户不提醒 $where .= " AND `customer`.`is_lock` = 0"; - # 过滤客户类型 - if (!empty($customerType)) { - $where .= "And `customer`.`customer_type` in " . $customerType; - } # 查询符合条件的客户 return db('crm_customer')->alias('customer') ->join('__CRM_BUSINESS__ business', 'business.customer_id = customer.customer_id', 'LEFT') ->join('__CRM_CONTRACT__ contract', 'contract.customer_id = customer.customer_id', 'LEFT') - ->where($where)->column('customer.customer_id'); + ->where($where)->where(['customer.crm_lthugd' => array('in', $customerType)])->column('customer.customer_id'); } /**