/** * 开始处理数据 * @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; }
/** * 更新房源推广计划的数据 * * @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; }