public function fixapierror20150626Action() { set_time_limit(300); $dbSql = $this->getServiceLocator()->get('dbSql'); $dbAdapter = $this->getServiceLocator()->get('dbAdapter'); /*@var $dbAdapter \Zend\Db\Adapter\Adapter */ $fromDate = '2015-06-26 00:00:00'; $toDate = '2015-06-30 00:00:00'; $defaultSupporter = 21; // lấy ra các lead do api tạo thành trong khoảng từ 26/6 -> 29/6 (arr1) $select = $dbSql->select(['l' => \Crm\Model\LeadMapper::TABLE_NAME]); $select->where(['createdById' => 1]); $select->where(['createdDateTime >= ?' => $fromDate]); $select->where(['createdDateTime <= ?' => $toDate]); $query = $dbSql->buildSqlString($select); echo $query; echo '<br/>'; echo '<br/>'; $rows = $dbAdapter->query($query, $dbAdapter::QUERY_MODE_EXECUTE); $leadIds = []; $leads = []; if ($rows->count()) { foreach ($rows->toArray() as $row) { $leadIds[$row['id']] = $row['id']; } } unset($select); unset($rows); // thêm ra các lead có yêu cầu tính năng hoặc đăng kí dùng thử trong đoạn thời gian này $select = $dbSql->select(['a' => \Crm\Model\ActivityMapper::TABLE_NAME]); $select->columns(['leadId']); $select->where(['accountId IS NULL']); $select->where(['createdById' => 1]); $select->where(['type' => [\Crm\Model\Activity::TYPE_CUSTOMER_REQUEST, \Crm\Model\Activity::TYPE_REGISTER_FOR_TRIAL]]); $select->where(['createdDateTime >= ?' => $fromDate]); $select->where(['createdDateTime <= ?' => $toDate]); $query = $dbSql->buildSqlString($select); echo $query; echo '<br/>'; echo '<br/>'; $rows = $dbAdapter->query($query, $dbAdapter::QUERY_MODE_EXECUTE); if ($rows->count()) { foreach ($rows->toArray() as $row) { if (!isset($leadIds[$row['leadId']])) { $leadIds[$row['leadId']] = $row['leadId']; } } } unset($select); unset($rows); // loại trừ trong số lead này các lead mà lan đang năm giữ (arr2) $select = $dbSql->select(['l' => \Crm\Model\LeadMapper::TABLE_NAME]); $select->join(['lu' => \Crm\Model\Lead\UserMapper::TABLE_NAME], 'l.id=lu.leadId', []); $select->columns(['id']); $select->where(['leadId' => $leadIds]); $select->where(['lu.userId' => $defaultSupporter]); $select->group(['l.id']); $query = $dbSql->buildSqlString($select); echo $query; echo '<br/>'; echo '<br/>'; $rows = $dbAdapter->query($query, $dbAdapter::QUERY_MODE_EXECUTE); if ($rows->count()) { foreach ($rows->toArray() as $row) { if (isset($leadIds[$row['id']])) { unset($leadIds[$row['id']]); } } } unset($select); unset($rows); // loaij trừ các leadId trong số đó mà có bất cứ hành động nào ko thuộc (nhận, bàn giao, yêu cầu tính năng, tự đăng kí, yêu cầu gọi) $select = $dbSql->select(['a' => \Crm\Model\ActivityMapper::TABLE_NAME]); $select->columns(['leadId']); $select->where(['leadId' => $leadIds]); $select->where(new NotIn('type', [\Crm\Model\Activity::TYPE_ASSIGN_LEAD, \Crm\Model\Activity::TYPE_SELF_ASSIGN_LEAD, \Crm\Model\Activity::TYPE_REQUEST_PHONECALL, \Crm\Model\Activity::TYPE_CUSTOMER_REQUEST, \Crm\Model\Activity::TYPE_REGISTER_FOR_TRIAL])); $select->where(['companyId' => 1]); $select->group(['leadId']); $query = $dbSql->buildSqlString($select); echo $query; echo '<br/>'; echo '<br/>'; $rows = $dbAdapter->query($query, $dbAdapter::QUERY_MODE_EXECUTE); if ($rows->count()) { foreach ($rows->toArray() as $row) { if (isset($leadIds[$row['leadId']])) { unset($leadIds[$row['leadId']]); } } } unset($select); unset($rows); // với mỗi leadId này, gỡ hết user ra, gắn lại cho Lan + thêm yêu cầu gọi cho cái lan if (count($leadIds)) { $activityMapper = $this->getServiceLocator()->get('\\Crm\\Model\\ActivityMapper'); $leadMapper = $this->getServiceLocator()->get('\\Crm\\Model\\LeadMapper'); foreach ($leadIds as $leadId) { // xóa action nhận - bàn giao của lead này $delete = $dbSql->delete(\Crm\Model\ActivityMapper::TABLE_NAME); $delete->where(['leadId' => $leadId]); $delete->where(['companyId' => 1]); $delete->where(['type' => [\Crm\Model\Activity::TYPE_ASSIGN_LEAD, \Crm\Model\Activity::TYPE_SELF_ASSIGN_LEAD]]); $delete->where(['relatedUserId != ?' => $defaultSupporter]); $query = $dbSql->buildSqlString($delete); $dbAdapter->query($query, $dbAdapter::QUERY_MODE_EXECUTE); // xóa user đang chăm sóc lead này $delete = $dbSql->delete(\Crm\Model\Lead\UserMapper::TABLE_NAME); $delete->where(['leadId' => $leadId]); $delete->where(['companyId' => 1]); $delete->where(['userId != ?' => $defaultSupporter]); $query = $dbSql->buildSqlString($delete); $dbAdapter->query($query, $dbAdapter::QUERY_MODE_EXECUTE); // lay ra lead $lead = new \Crm\Model\Lead(); $lead->setId($leadId); $leadMapper->get($lead); // thêm action yêu cầu gọi cho Lan $activity = new \Crm\Model\Activity(); $activity->setLeadId($leadId); $activity->setCompanyId(1); $activity->setType(\Crm\Model\Activity::TYPE_REQUEST_PHONECALL); $activity->setStatus(\Crm\Model\Activity::STATUS_SUCCESS); $activity->setTitle('Bổ sung xác nhận dùng thử 26/6 - 30/6'); $content = []; if ($lead->getNhanhStoreId()) { $content[] = '<b>nhanhStoreId: </b>' . $lead->getNhanhStoreId(); } if ($lead->getNhanhStoreName()) { $content[] = '<b>nhanhStoreName: </b>' . $lead->getNhanhStoreName(); } $activity->setContent(count($content) ? implode('<br/>', $content) : null); $activity->setCreatedById(1); $activity->setCreatedDate(DateBase::getCurrentDate()); $activity->setCreatedDateTime(DateBase::getCurrentDateTime()); $activity->setRelatedUserId($defaultSupporter); $activityMapper->save($activity); //gắn cho lan $leadUser = new \Crm\Model\Lead\User(); $leadUser->setLeadId($leadId); $leadUser->setCompanyId(1); $leadUser->setUserId($defaultSupporter); $leadUser->setType(\Crm\Model\Lead\User::TYPE_SALE); $leadUserMapper = $this->getServiceLocator()->get('\\Crm\\Model\\Lead\\UserMapper'); if (!$leadUserMapper->isExisted($leadUser)) { $leadUser->setCreatedById(1); $leadUser->setCreatedDateTime(DateBase::getCurrentDateTime()); $leadUserMapper->save($leadUser); } //update lại companyStatus + lastActivity $leadCompany = new \Crm\Model\Lead\Company(); $leadCompany->setLeadId($leadId); $leadCompany->setCompanyId(1); $leadCompanyMapper = $this->getServiceLocator()->get('\\Crm\\Model\\Lead\\CompanyMapper'); $leadCompanyMapper->isExisted($leadCompany); $leadCompany->setLastActivityDateTime(DateBase::getCurrentDateTime()); $leadCompany->setStatus(\Crm\Model\Lead\Company::STATUS_BELONG); $leadCompanyMapper->save($leadCompany); echo 'update lead : <b>' . $leadId . '</b><br/>'; } } die; }
public function fixaddlead20150630Action() { $fromDateTime = '2015-06-26 00:00:00'; $toDateTime = '2015-06-29 00:00:00'; //@TODO fix cung nguoi dc yeu cau laf Thanh Lan $relatedUserId = 21; if ($this->getRequest()->isPost()) { $formValidate = new \System\Form\Api\LeadValidate($this->getServiceLocator()); $dataToPopulate = $this->getRequest()->getPost(); //@TODO: fix cứng cho nhanh đã $dataToPopulate['companyId'] = 1; $formValidate->setData($dataToPopulate); if ($formValidate->isValid()) { $formData = $formValidate->getData(); $isNew = true; $accountId = null; $campaignId = null; $createdDateTime = $this->getRequest()->getPost('createdDateTime'); //Tạo mới thông tin nếu chưa có $lead = new \Crm\Model\Lead(); $lead->exchangeArray($formData); $lead->setSource(\Crm\Model\Lead::SOURCE_WEB); if ($lead->getSourceReference()) { $lead->setSourceReference(substr($lead->getSourceReference(), 0, 220)); } $lead->setCreatedById(1); $lead->setCreatedDate(DateBase::getCurrentDate()); $lead->setCreatedDateTime(DateBase::getCurrentDateTime()); $lead->setDescription('Khách hàng tự đăng kí dùng thử trên nhanh.vn'); $leadMapper = $this->getServiceLocator()->get('\\Crm\\Model\\LeadMapper'); if (!$leadMapper->isExisted($lead)) { $referSource = []; $content = []; $isVaild = false; if (isset($formData['utm_source']) && $formData['utm_source']) { $referSource[] = $formData['utm_source']; $content[] = '<b>utm_source: </b>' . $formData['utm_source']; $isVaild = true; } else { $referSource[] = ''; $content[] = '<b>utm_source: </b>'; } if (isset($formData['utm_medium']) && $formData['utm_medium']) { $referSource[] = $formData['utm_medium']; $content[] = '<b>utm_medium: </b>' . $formData['utm_medium']; $isVaild = true; } else { $referSource[] = ''; $content[] = '<b>utm_medium: </b>'; } if (isset($formData['utm_campaign']) && $formData['utm_campaign']) { $referSource[] = $formData['utm_campaign']; $content[] = '<b>utm_campaign: </b>' . $formData['utm_campaign']; $isVaild = true; } else { $referSource[] = ''; $content[] = '<b>utm_campaign: </b>'; } if (isset($formData['utm_term']) && $formData['utm_term']) { $content[] = '<b>utm_term: </b>' . $formData['utm_term']; } else { $content[] = '<b>utm_term: </b>'; } if (isset($formData['utm_content']) && $formData['utm_content']) { $content[] = '<b>utm_content: </b>' . $formData['utm_content']; } else { $content[] = '<b>utm_content: </b>'; } if ($isVaild) { $campaign = new \Crm\Model\Campaign(); $campaign->setCode(implode('_', $referSource)); $campaign->setCompanyId($lead->getCompanyId()); $campaignMapper = $this->getServiceLocator()->get('\\Crm\\Model\\CampaignMapper'); if ($campaignMapper->isExistedCode($campaign) === false) { $campaign->setStartDate(DateBase::getCurrentDate()); $today = new \DateTime(); $today->add(new \DateInterval('P12M')); $campaign->setEndDate($today->format(DateBase::COMMON_DATE_FORMAT)); $campaign->setName($campaign->getCode()); $campaign->setContent(implode('<br/>', $content)); $campaign->setCreatedById(1); $campaign->setCreatedDateTime(DateBase::getCurrentDateTime()); $campaignMapper->save($campaign); } $campaignId = $campaign->getId(); $lead->setSource(\Crm\Model\Lead::SOURCE_MARKETING_CAMPAIGN); $lead->setDescription(implode('<br/>', $content)); $lead->setCampaignId($campaignId); } $leadMapper->save($lead); } else { if ($lead->getOption('tableExisted') == 'lead') { $dbAdapter = $this->getServiceLocator()->get('dbAdapter'); /* @var $dbSql \Zend\Db\Sql\Sql */ $dbSql = $this->getServiceLocator()->get('dbSql'); // check nếu đã tồn tại yêu cầu dùng thử trong khoảng thời gian cần check thì sẽ kiểm tra lại // nếu có hành động bàn giao cho người khác Lan nhưng ko có bất kì hành động j sau đó thì xóa đi $select = $dbSql->select(['a' => \Crm\Model\ActivityMapper::TABLE_NAME]); $select->where(['leadId' => $lead->getId()]); $select->where(['companyId' => $lead->getCompanyId()]); $select->where(['type' => [\Crm\Model\Activity::TYPE_CUSTOMER_REQUEST, \Crm\Model\Activity::TYPE_REGISTER_FOR_TRIAL]]); $select->where(['createdDateTime >= ?' => $fromDateTime]); $select->where(['createdDateTime >= ?' => $createdDateTime]); //$select->where(['createdDateTime <= ?' => $toDateTime]); $query = $dbSql->buildSqlString($select); $rows = $dbAdapter->query($query, $dbAdapter::QUERY_MODE_EXECUTE); if ($rows->count()) { return $this->getJsonModel()->setVariables(['code' => 1, 'messages' => 'sended']); } //check thông tin có dc ai nhận sau thời điểm bắn về ko $select = $dbSql->select(['a' => \Crm\Model\ActivityMapper::TABLE_NAME]); $select->where(['leadId' => $lead->getId()]); $select->where(['companyId' => $lead->getCompanyId()]); $select->where(['type' => [\Crm\Model\Activity::TYPE_ASSIGN_LEAD, \Crm\Model\Activity::TYPE_SELF_ASSIGN_LEAD]]); $select->where(['createdById != ?' => $relatedUserId]); $select->where(['createdDateTime >= ?' => $fromDateTime]); $select->where(['createdDateTime >= ?' => $createdDateTime]); //$select->where(['createdDateTime <= ?' => $toDateTime]); $select->order(['createdDateTime ASC']); $select->limit(1); $query = $dbSql->buildSqlString($select); $rows = $dbAdapter->query($query, $dbAdapter::QUERY_MODE_EXECUTE); if ($rows->count()) { // nếu có, check tiếp có hành động nào sau đấy ko $row = (array) $rows->current(); $select = $dbSql->select(['a' => \Crm\Model\ActivityMapper::TABLE_NAME]); $select->where(['leadId' => $lead->getId()]); $select->where(['companyId' => $lead->getCompanyId()]); $select->where(new NotIn('type', ['\\Crm\\Model\\Activity::TYPE_ASSIGN_LEAD, \\Crm\\Model\\Activity::TYPE_SELF_ASSIGN_LEAD'])); $select->where(['createdDateTime > ?' => $row['createdDateTime']]); $select->limit(1); $query = $dbSql->buildSqlString($select); $row2 = $dbAdapter->query($query, $dbAdapter::QUERY_MODE_EXECUTE); if (!$row2->count()) { // nếu chỉ nhận về mà ko có bất kì hành động j, // Xóa các lead user dc tạo trong khoảng thời gian từ lúc bắn về đến hết thời điểm check $delete = $dbSql->delete(\Crm\Model\Lead\UserMapper::TABLE_NAME); $delete->where(['leadId' => $lead->getId()]); $delete->where(['companyId' => $lead->getCompanyId()]); $delete->where(['userId != ?' => $relatedUserId]); $delete->where(['createdDateTime > ?' => $createdDateTime]); $delete->where(['createdDateTime <= ?' => $toDateTime]); $query = $dbSql->buildSqlString($delete); $dbAdapter->query($query, $dbAdapter::QUERY_MODE_EXECUTE); // xóa các activities nhận chăm sóc $delete = $dbSql->delete(\Crm\Model\ActivityMapper::TABLE_NAME); $delete->where(['leadId' => $lead->getId()]); $delete->where(['companyId' => $lead->getCompanyId()]); $delete->where(['createdById != ?' => $relatedUserId]); $delete->where(['type' => [\Crm\Model\Activity::TYPE_ASSIGN_LEAD, \Crm\Model\Activity::TYPE_SELF_ASSIGN_LEAD]]); $delete->where(['createdDateTime > ?' => $createdDateTime]); $delete->where(['createdDateTime <= ?' => $toDateTime]); $query = $dbSql->buildSqlString($delete); $dbAdapter->query($query, $dbAdapter::QUERY_MODE_EXECUTE); } } } $isNew = false; if ($lead->getOption('tableExisted') == 'account') { $accountId = $lead->getOption('accountId'); } } //Update nguồn cho leadCompany $leadCompany = new \Crm\Model\Lead\Company(); $leadCompany->setCompanyId($lead->getCompanyId()); $leadCompany->setLeadId($lead->getId()); $leadCompany->setAccountId($accountId); if ($campaignId) { $leadCompany->setSource(\Crm\Model\Lead::SOURCE_MARKETING_CAMPAIGN); $leadCompany->setSourceCampaignId($campaignId); $leadCompany->setSourceReference($lead->getSourceReference()); } elseif ($isNew) { $leadCompany->setSource(\Crm\Model\Lead::SOURCE_WEB); if ($lead->getSourceReference()) { $leadCompany->setSourceReference($lead->getSourceReference()); } else { $leadCompany->setSourceReference('nhanh.vn'); } } $leadCompany->setStatus(\Crm\Model\Lead\Company::STATUS_FREE); $leadCompanyMapper = $this->getServiceLocator()->get('\\Crm\\Model\\Lead\\CompanyMapper'); //Nếu leadCompany đã tồn tại (thông tin đã được sử dụng với cty đang check) thì chỉ update lastActivityDateTime $leadCompanyMapper->isExisted($leadCompany); $leadCompany->setLastActivityDateTime(DateBase::getCurrentDateTime()); $leadCompanyMapper->save($leadCompany); //Log hành động yêu cầu dùng thử của khách hàng $activity = new \Crm\Model\Activity(); $activity->setLeadId($lead->getId()); $activity->setAccountId($accountId); $activity->setCompanyId($lead->getCompanyId()); $activity->setType(\Crm\Model\Activity::TYPE_REGISTER_FOR_TRIAL); $activity->setStatus(\Crm\Model\Activity::STATUS_SUCCESS); //$activity->setTitle('Đăng kí dùng thử '.$formData['service']) ; $activity->setTitle($formData['title'] ?: 'Đăng kí dùng thử ' . $formData['service']); $activity->setContent($formData['note'] ?: null); $activity->setCreatedById(1); $activity->setCreatedDate(DateBase::toFormat($createdDateTime, DateBase::COMMON_DATE_FORMAT)); $activity->setCreatedDateTime($createdDateTime); $activityMapper = $this->getServiceLocator()->get('\\Crm\\Model\\ActivityMapper'); $activityMapper->save($activity); $activityMapper->updateLeadId($activity); //Check lại 1 lần nữa trạng thái của leadCompany là thả nổi hay đã có KD $leadCompanyMapper->updateStatus($leadCompany); //Nếu là thả nổi (tức là vừa dc tạo hoặc đang thả nổi) thì tạo 1 yêu cầu gọi cho chăm sóc mặc định và gắn cho cham sóc mặc định if ($leadCompany->getStatus() == \Crm\Model\Lead\Company::STATUS_FREE) { $activity = new \Crm\Model\Activity(); $activity->setLeadId($lead->getId()); $activity->setAccountId($accountId); $activity->setCompanyId($lead->getCompanyId()); $activity->setType(\Crm\Model\Activity::TYPE_REQUEST_PHONECALL); $activity->setStatus(\Crm\Model\Activity::STATUS_SUCCESS); $activity->setTitle('Gọi xác nhận yêu cầu dùng thử'); $activity->setCreatedById(1); $activity->setCreatedDate(DateBase::toFormat($createdDateTime, DateBase::COMMON_DATE_FORMAT)); $activity->setCreatedDateTime($createdDateTime); $activity->setRelatedUserId($relatedUserId); $activityMapper->save($activity); $leadUser = new \Crm\Model\Lead\User(); $leadUser->setLeadId($lead->getId()); $leadUser->setAccountId($accountId); $leadUser->setCompanyId($lead->getCompanyId()); $leadUser->setType(\Crm\Model\Lead\User::TYPE_SALE); $leadUser->setUserId($relatedUserId); $leadUser->setCreatedById(1); $leadUser->setCreatedDateTime(DateBase::getCurrentDateTime()); $leadUserMapper = $this->getServiceLocator()->get('\\Crm\\Model\\Lead\\UserMapper'); if (!$leadUserMapper->isExisted($leadUser)) { $leadUserMapper->save($leadUser); } $leadCompanyMapper->updateColumns(['status' => \Crm\Model\Lead\Company::STATUS_BELONG], $leadCompany); } return $this->getJsonModel()->setVariable('code', 1); } return $this->getJsonModel()->setVariables(['code' => 0, 'messages' => [$formValidate->getMessages()]]); } return $this->getJsonModel()->setVariables(['code' => 0, 'messages' => ['']]); }