/**
  * 开始处理数据
  * @return bool
  */
 protected function proccessData()
 {
     if (empty($this->jobData)) {
         //没有数据
         return false;
     }
     $tDate = date('Ymd');
     foreach ($this->jobData as $jobData) {
         $this->id = $jobData->id;
         //查询委托关系
         $commissionInfo = Model_House_Commission::getInfoByBrokerIdAndBrokerHouseId($jobData->proId, 1, '');
         if (!empty($commissionInfo)) {
             if (empty($this->cPropInfo[$commissionInfo->houseId])) {
                 //房东房源具体信息
                 try {
                     $this->cPropInfo[$commissionInfo->houseId] = Model_House_CommissionHouse::data_access()->find_by_pk($commissionInfo->houseId);
                 } catch (Exception $e) {
                     $this->cPropInfo[$commissionInfo->houseId] = false;
                 }
             }
             $commissionProp = $this->cPropInfo[$commissionInfo->houseId];
             if (empty($commissionProp)) {
                 //房东信息没有,跳过处理下一跳
                 continue;
             }
             //写入委托房源被推广日志
             $spreadObj = new Model_House_CommissionSaleLog();
             $spreadObj->cityId = $commissionProp->cityId;
             $spreadObj->ownerId = $commissionInfo->ownerId;
             $spreadObj->houseId = $commissionInfo->houseId;
             $spreadObj->brokerId = $commissionInfo->brokerId;
             $spreadObj->brokerHouseId = $jobData->proId;
             $spreadObj->dateindex = $tDate;
             $spreadObj->status = $jobData->type == 1 ? Model_House_CommissionSaleLog::STATUS_PROP_FS : Model_House_CommissionSaleLog::STATUS_PROP_BS;
             $spreadObj->origin = $commissionInfo->origin;
             $spreadObj->createTime = time();
             $spreadObj->save();
             unset($spreadObj);
             $firstSmsInfo = Model_House_CommissionFirstAction::getBrokerHouseInfo($commissionInfo->brokerId, $commissionInfo->houseId);
             if (!empty($firstSmsInfo)) {
                 //如果已经发过短信,无需再处理
                 continue;
             }
             if (empty($this->brokerInfo[$commissionInfo->brokerId])) {
                 //经纪人信息
                 $this->brokerInfo[$commissionInfo->brokerId] = Model_Broker_AjkBrokerExtend::data_access()->find_by_pk($commissionInfo->brokerId);
             }
             $bInfo = $this->brokerInfo[$commissionInfo->brokerId];
             if (empty($bInfo) || empty($commissionProp)) {
                 continue;
             }
             if (mb_strlen($commissionProp->commName, 'UTF-8') > 12) {
                 //小区名称
                 $commName = mb_substr($commissionProp->commName, 0, 12, 'UTF-8') . '...';
             } else {
                 $commName = $commissionProp->commName;
             }
             //短信内容
             $content = $commissionProp->userName . '您好,' . $bInfo->trueName . ' ' . $bInfo->userMobile . ' 已将您在' . $commName . '的房源在安居客网站上挂牌';
             $smsInfo = array('userid' => $commissionProp->userId, 'brokerid' => $commissionInfo->brokerId, 'mobile' => $commissionProp->ownerMobile, 'content' => $content, 'status' => '0', 'createtime' => date('Y-m-d H:i:s'), 'bizid' => 1010);
             Model_Notice_AjkSmsTask::insertLayer($smsInfo);
             //插入发短信信息表
             $smsObj = new Model_House_CommissionFirstAction();
             $smsObj->brokerId = $commissionInfo->brokerId;
             $smsObj->houseId = $commissionInfo->houseId;
             $smsObj->type = $jobData->type;
             $smsObj->dateIndex = $tDate;
             $smsObj->createTime = time();
             $smsObj->save();
             //给app推送消息
             $this->senfAppMsg($commissionInfo->brokerId, $jobData->proId, $commissionInfo->houseId, $commissionProp->userId);
             var_dump('LOG:' . $jobData->id . ' send sms done!' . "\n");
         }
         var_dump('LOG:' . $jobData->id . ' is done!' . "\n");
     }
     return true;
 }
Example #2
0
 /**
  * 更新房源推广计划的数据
  *
  * @param $userId
  * @param int $propSpreadId
  * @param $propId
  * @param $brokerId
  * @param string $remark 形式“变更的字段:字段值”;
  * @param array $params key为变更的数据库字段,val为数据库值
  * @param $cityid
  * @param bool $addon_sn 计划表记录的支付中心支付流水号
  * @param bool $addon_amount 追加的金额
  * @param bool $account
  * @param string $action
  * @param int $intStopTime
  * @param $spreadInfo
  * @param $version 用来更新计划的时候防止并发的。
  * @return bool|int|mixed
  */
 public function updateBrokerExpsDao($userId, $propSpreadId = 0, $propId, $brokerId, $remark = "", $params = array(), $cityid, $addon_sn = false, $addon_amount = false, $account = false, $action = '', $intStopTime = 0, $spreadInfo, $version = -1)
 {
     //log acton config 计划日志操作类型
     $arrLogAction = APF::get_instance()->get_config('log_action_type', 'hp');
     $actionid = $arrLogAction[$action] ? $arrLogAction[$action] : 0;
     //如果有冻结先冻结
     if ($addon_sn && $addon_amount && $account) {
         //冻结金额,计划进行中修改计划
         $addon_amount_zf = $addon_amount / 100;
         //$propSpread = APF::get_instance()->get_config("propSpread2","app");
         //$apporderbll = new  BLL_Payment_AppOrder($propSpread['paycenter_id'],$propSpread['paycenter_key'],0);
         $note = "推广房源" . $propId . "(房源编号)追加冻结金额";
         $serial_number = $this->freezeAccount($userId, $addon_amount_zf, $addon_sn, $note, $propSpreadId, $propId);
         if ($serial_number !== false) {
             if (isset($spreadInfo->balance)) {
                 $newBalance = intval($spreadInfo->balance) + intval($addon_amount);
                 $freeRemark = "SERIALNUMBER:" . $addon_sn . "=>" . $serial_number . ";BALANCE:" . $spreadInfo->balance . "=>" . $newBalance;
             } else {
                 $freeRemark = "SERIALNUMBER:" . $addon_sn . "=>" . $serial_number . ";BALANCE:0=>" . $addon_amount;
             }
             $rsUpbalance = $this->updateSpreadByAddAmountBll($propSpreadId, $serial_number, $addon_amount);
             if (!$rsUpbalance) {
                 //报警
                 $setValue = '计划id:' . $propSpreadId . "SERIALNUMBER:" . $serial_number . "追加金额:" . $addon_amount . "失败";
                 $arrData = array('USERID' => '0', 'BROKERID' => '0', 'MOBILE' => '13564775408', 'CONTENT' => $setValue, 'STATUS' => '0', 'CREATETIME' => date('Y-m-d H:i:s'));
                 Model_Notice_AjkSmsTask::insertLayer(array_change_key_case($arrData));
                 return false;
             } else {
                 $this->addPropSpreadLog($propSpreadId, $brokerId, $freeRemark, $actionid);
             }
         } else {
             return false;
         }
     } else {
         if ($addon_sn === 0 && $addon_amount && $account) {
             //这种情况是在计划停止后重新推广
             $propSpread = APF::get_instance()->get_config("propSpread2", "app");
             //$apporderbll = new  BLL_Payment_AppOrder($propSpread['paycenter_id'],$propSpread['paycenter_key'],0);
             $addon_amount_zf = $addon_amount / 100;
             $note = "推广房源" . $propId . "(房源编号)冻结金额";
             $serial_number = $this->freezeAccount($userId, $addon_amount_zf, 0, $note);
             //冻结账户
             if ($serial_number !== false) {
                 $freeRemark = "SERIALNUMBER:" . $spreadInfo['SERIALNUMBER'] . "=>" . $serial_number;
                 $resUp = $this->updateBrokerExpsDao($userId, $propSpreadId, $propId, $brokerId, $freeRemark, array("SERIALNUMBER" => $serial_number), $cityid, 0, 0, 0, $action);
                 //重新推广加一条重推队列给退款结算中心使用
                 $this->addRedoSpreadBll($propSpreadId, $propId, $serial_number, $addon_amount);
             } else {
                 return false;
             }
         }
     }
     /*
      * 如果有时间变更通知自动停止计划job
      * 1、如果变更计划表是要改状态status(status==1并且修改了停止时间stoptime)那用插队列表
      * 2、如果原计划状态状态为1,在不改状态的情况下并且修改了原计划的停止时间stoptime那用插队列表
      * 3、注意原计划状态不是1的话不会传stoptime
      * 4、重新推广会单独传停止时间intStopTime,防止停止时间不必被更新的情况
      */
     if (isset($params['STOPTIME'])) {
         $intStopTime = $params['STOPTIME'];
     }
     if ((!isset($params['STATUS']) || $params['STATUS'] == 1 || $params['STATUS'] == 11) && isset($intStopTime) && $intStopTime != 0) {
         $this->sendSpreadQueue($propSpreadId, array('stoptime' => $intStopTime));
     }
     //如果是停止计划的话,发起结算
     if ($params['STATUS'] == 3 || $params['STATUS'] == 10) {
         $callBack = $this->settleBidPlan($propSpreadId, $cityid, 6);
         if (!isset($callBack) || $callBack['code'] != 200 || $callBack['info'] != "success") {
             $this->errorMsg = "结算失败";
             return false;
         }
     }
     //更新计划
     $upresult = $this->updatePropSpread($propSpreadId, $params, $version);
     //写日志
     $this->addPropSpreadLog($propSpreadId, $brokerId, $remark, $actionid);
     if (!$upresult) {
         $this->errorMsg = "更新竞价计划失败";
         return false;
     }
     return $upresult;
 }