/** * @param $task * @return bool */ public function dealTask($task) { $brokerId = $task['brokerId']; $amount = $task['amount']; $siteType = Const_ShowcaseOrders::SALE_DB; if ($task['siteType'] == 2) { $siteType = Const_ShowcaseOrders::RENT_DB; } $requestId = Bll_Broker_ShowcaseAdConsumeQueue::getPaymentRequestId($task['id'], $this->currentYMD, $siteType); //获取账户余额 $ajkBrokerData = Model_Broker_AjkBrokerExtend::getDataByBrokerId($brokerId); $userId = !empty($ajkBrokerData) ? $ajkBrokerData->userId : 0; $cityId = $ajkBrokerData->cityId; $balance = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerMoney($userId); $balance = $balance * 100; if ($balance < $amount) { //余额不足,停止橱窗订单,更新订单操作日志. $this->stopShowCase($task, $siteType, $cityId); //TODO 更新扣费队列状态 $updateArr = array('status' => 1, 'requestId' => $requestId, 'remark' => json_encode(array('balance' => $balance, 'remark' => '余额不足'))); } else { //余额足够,调用扣费API $apiResult = Bll_Broker_ShowcaseConsumeQuery::getInstance()->callCosumeApi($userId, $requestId, $amount, $task['consumeDate'], $siteType); //扣费成功 if ($apiResult['status'] === true) { $updateArr = array('status' => 3, 'requestId' => $requestId, 'remark' => json_encode(array('balance' => $balance, 'apiData' => $apiResult['apiData']))); } else { $updateArr = array('status' => 2, 'requestId' => $requestId, 'remark' => json_encode(array('balance' => $balance, 'apiData' => $apiResult['apiData']))); } } //更新扣费队列状态 Bll_Broker_ShowcaseAdConsumeQueue::updateConsumeInfo($updateArr, array('id' => $task['id'])); return true; }
public static function &getInstance() { if (self::$_instance === null) { self::$_instance = new self(); } return self::$_instance; }
/** * 每日扣费队列 操作主函数 * @param $adSetData * @param $adConsumeData * @param $houseNum */ protected function consumeMainProcess($adSetData, $adConsumeData, $houseNum) { // 1.先更新status,house_num $adConsumeData->status = 1; $adConsumeData->houseNum = $houseNum; $adConsumeData->updateTime = date("Y-m-d H:i:s", time()); $adConsumeData->save(); // 2.获取账户余额 $userId = Bll_Broker_BrokerCheckInfo::getUserIdByBrokerId($adSetData->brokerId, $this->_dateBase); // 3.调用扣费API之前,验证余额是否足够 $balance = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerMoney($userId); $balance = $balance * 100; // 转化成分 //$balance = 200; if ($balance < $adConsumeData->price) { // 3.1 余额不足,插入欠费队列 $this->insertArrearage($adSetData, $adConsumeData, $balance, 4, '', '未调用扣费API之前,余额不足'); } else { // 3.2 余额足够,调用扣费API $apiResult = Bll_Broker_ShowcaseConsumeQuery::getInstance()->callCosumeApi($userId, $adConsumeData->requestId, $adConsumeData->price, $adConsumeData->dateIndex, $this->_dateBase); // 3.2.1 扣费成功 if ($apiResult['status'] === true) { $updateArr = array('status' => 6, 'balance' => $balance); $this->updateAdConsumeLogTable($adConsumeData, $updateArr, 1, $apiResult['apiData'], '扣费成功'); } else { // 3.2.2 扣费失败,插入欠费队列 $this->insertArrearage($adSetData, $adConsumeData, $balance, 5, $apiResult['apiData'], '调用API扣费,扣费失败 ' . $apiResult['msg']); } } }
/** * 插入扣费日志 * @param $arrearageData * @param $type * @param string $apiData * @param string $otherData */ protected function insertQueryLog($arrearageData, $type, $apiData = '', $otherData = '') { // 记录日志 $msg = array('balance' => $arrearageData->balance, 'price' => $arrearageData->price, 'querystatus' => $arrearageData->status, 'requestId' => $arrearageData->requestId, 'apiData' => $apiData, 'otherData' => $otherData); $realAccount = 0; if (!empty($apiData)) { if (!empty($apiData['response'])) { if (!empty($apiData['response']['data'])) { $realAccount = isset($apiData['response']['data']['realAmount']) ? $apiData['response']['data']['realAmount'] : 0; } } } $logData = array('brokerId' => $arrearageData->brokerId, 'queryId' => $arrearageData->id, 'dateIndex' => $arrearageData->dateIndex, 'type' => $type, 'msg' => json_encode($msg), 'createTime' => $this->createTime, 'realAccount' => $realAccount); Bll_Broker_ShowcaseConsumeQuery::getInstance()->insertOneLogData($logData, $this->_dateBase); }
/** *增值业务续费订单操作 * $info 经纪人订单信息 * $type 好租是 rent 二手房sale */ public function continueBrokerOthers($info, $count, $price, $type) { $days = intval($count); $ShowcaseOrders = APF::get_instance()->get_config('ShowcaseOrders'); if ($days < $ShowcaseOrders['min'] || $days > $ShowcaseOrders['max']) { $res = array('status' => false, 'msg' => Const_ShowcaseOrders::DAYS_ERROR); return $res; } $data = array(); $finddata = array(); $today = date('Ymd'); $finddata['brokerId'] = $data['brokerId'] = $info->brokerId; $data['isStop'] = Const_ShowcaseOrders::OPEN_ORDER; $data['status'] = Const_ShowcaseOrders::STATUS_VALID; $ary = array(); $ary['brokerId'] = $info->brokerId; $ary['cityId'] = $info->cityId; $ary['endDate'] = date('Ymd'); $ary['createTime'] = time(); if ($info->isStop == 0 && $today <= $info->endDate) { $ary['startDate'] = $info->startDate; $ary['opType'] = Const_ShowcaseOrders::OPTYPE_2; $ary['endDate'] = $data['endDate'] = date('Ymd', strtotime($info->endDate . ' +' . $days . ' day')); $ary['totalDays'] = ceil((strtotime($ary['endDate']) - strtotime($ary['startDate'])) / 3600 / 24) + 1; $msg = Const_ShowcaseOrders::ORDERS_CONTINUE; } else { $ary['opType'] = Const_ShowcaseOrders::OPTYPE_1; $ary['startDate'] = $data['startDate'] = date('Ymd'); $ndays = $days - 1; $ary['totalDays'] = $days; $ary['endDate'] = $data['endDate'] = date('Ymd', strtotime('+' . $ndays . ' day')); $msg = Const_ShowcaseOrders::ORDERS_NEWS; } $order = $this->updateOrderInfo($finddata, $data, $type); if ($order['status']) { $Column = Bll_Broker_ShowcaseConsumeQuery::getInstance()->addConsumeData($info->brokerId, $info->cityId, $price, 0, date('Ymd'), '购买订单,插入队列', $type); if (!$Column['status']) { $res = array('status' => false, 'msg' => Const_ShowcaseOrders::COLUMN_ERROR); } if ($ary['opType'] == Const_ShowcaseOrders::OPTYPE_1) { //如果是购买 //将昨天也插入扣费队列表 $yesToDay = date('Ymd', strtotime('-1 day')); if ($yesToDay >= $info->startDate && $yesToDay <= $info->endDate) { $Column = Bll_Broker_ShowcaseConsumeQuery::getInstance()->addConsumeData($info->brokerId, $info->cityId, $price, 0, $yesToDay, '购买订单,插入队列', $type); if (!$Column['status']) { $res = array('status' => false, 'msg' => Const_ShowcaseOrders::COLUMN_ERROR); } } } $logId = $this->insertSetLog($ary, $type); if (!$logId['status']) { $res = array('status' => false, 'msg' => Const_ShowcaseOrders::LOG_ERROR); } } else { $res = array('status' => false, 'msg' => Const_ShowcaseOrders::UPDATE_ORDERS_ERROR); } if (!$res) { $res = array('status' => true, 'msg' => $msg); } return $res; }
public function addRentArrearageData($brokerId, $dateIndex, $price, $balance, $consumeId, $requestId, $apiResult, $otherData) { $result = array('status' => 0, 'msg' => '', 'data' => ''); // 1.先判断数据是否已经存在 $tmpData = Model_Broker_AdArrearageRent::getInstance()->getDataByBrokerIdAndDate($brokerId, $dateIndex); if (!empty($tmpData)) { $result['status'] = 2; $result['msg'] = '已经存在'; $result['data'] = $tmpData; return $result; } else { $tmpMsg = array('apiData' => $apiResult, 'otherData' => $otherData); // 2. 不存在开始插入 $insertArrearageArr = array('brokerId' => $brokerId, 'price' => $price, 'balance' => $balance, 'dateIndex' => $dateIndex, 'consumeId' => $consumeId, 'requestId' => $requestId, 'status' => 0, 'createTime' => time()); $arrearageId = Model_Broker_AdArrearageRent::getInstance()->insertData($insertArrearageArr); if ($arrearageId > 0) { // 插入成功,写入操作日志 $insertLogArr = array('brokerId' => $brokerId, 'queryId' => $arrearageId, 'dateIndex' => $dateIndex, 'type' => 2, 'msg' => json_encode($tmpMsg), 'createTime' => time(), 'realAccount' => 0); Bll_Broker_ShowcaseConsumeQuery::getInstance()->insertOneLogData($insertLogArr, Const_ShowcaseOrders::RENT_DB); $result['status'] = 1; $result['msg'] = '插入成功'; } else { $result['status'] = 0; $result['msg'] = '插入失败'; } return $result; } }
public function handle_request() { $adBrokerList = $this->getRequestData(); foreach ($adBrokerList as $val) { $data = array(); $this->setMyFlag($val['id']); // $priceList = Bll_Broker_ShowcaseConsumeQuery::getInstance()->getBrokerQuery($val['brokerId'],$this->yDate,$this->nDate,$this->_dateBase); // $price = 0; // if($priceList){ // foreach($priceList as $plist){ // $price += $plist['realAccount']; // } // } $priceList = Bll_Broker_ShowcaseConsumeQuery::getInstance()->getBrokerQueryV2($val['brokerId'], $this->yDate, $this->_dateBase); $price = 0; if ($priceList) { foreach ($priceList as $plist) { $price += $plist['amount']; } } $time = date('Y-m-d 00:10:00', strtotime($this->yDate)); $propList = Bll_Broker_ShowcaseAdSetPro::getInstance()->getBrokerTimeHouse($val['brokerId'], $time, $this->nDate, $this->_dateBase); $props = $propstmp = array(); if ($propList) { foreach ($propList as $hlist) { if (!in_array($hlist['propId'], $props)) { $props[] = $hlist['propId']; } } } $tpropList = Bll_Broker_ShowcaseAdSetPro::getInstance()->getBrokerTimeHouse($val['brokerId'], $this->nDate, 0, $this->_dateBase); if ($tpropList) { $propstmp = $this->aryMerger($tpropList, $propstmp); } $propShowList = Bll_Broker_ShowcaseAdSetPro::getInstance()->getBrokerAdPropShowInfo($val['brokerId'], $this->_dateBase); if ($propShowList) { $propstmp = $this->aryMerger($propShowList, $propstmp, 2); } if ($propstmp) { foreach ($propstmp as $newval) { if ($newval['flag'] != 1) { if (!in_array($newval['propId'], $props)) { $props[] = $newval['propId']; } } } } $brokerInfo = new Model_Broker_AjkBrokerExtend(); $info = $brokerInfo->getDataByBrokerId($val['brokerId']); $data['brokerId'] = $val['brokerId']; $data['cityId'] = $info['cityId']; $data['dayDate'] = $this->yDate; $data['createTime'] = time(); $data['updateTime'] = date('Y-m-d H:i:s'); $data['propsSum'] = count($props); $data['price'] = $price; $lastid = Bll_Broker_ShowcaseLogs::getInstance()->addAdStatusLog($data, $this->_dateBase); if (!$lastid) { $mailSubject = $this->yDate . $this->_dateBaseName . '插入出错问题'; $mailBody = $this->_dateBaseName . '的' . $val['id'] . ',经纪人id:' . $val['brokerId'] . '执行时间:' . date('Y-m-d H:i:s'); Bll_Broker_ShowcaseCommon::getInstance()->sendMail($mailSubject, $mailBody, $this->mailArr); } } }