/**
  * @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;
 }
Example #3
0
 /**
  * 每日扣费队列 操作主函数
  * @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']);
         }
     }
 }
Example #4
0
 /**
  * 插入扣费日志
  * @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;
     }
 }
Example #7
0
 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);
         }
     }
 }