/** * 记录报表数据 * | mainType | subType | ymd | rptdata | flg1 | flg2 | flg3 | * @param \Sooh\DB\Interfaces\All $db * @param int $ymd yyyymmdd * @param array $rptData * @param string $mainType * @param string $subType * @param array $flgs 标志位字段,不参与任何统计 * @param array $conditionCanOverwrite 满足条件的才可以覆盖,null表示始终不能覆盖,空数组表示始终可以覆盖 * @return boolean */ public function save($db, $ymd, $rptData, $mainType, $subType, $flgs = array(), $conditionCanOverwrite = array()) { $pkey = array('mainType' => $mainType, 'subType' => $subType, 'ymd' => $ymd); $fields = $flgs; if (!isset($fields['flg1'])) { $fields['flg1'] = 0; } if (!isset($fields['flg2'])) { $fields['flg2'] = 0; } if (!isset($fields['flg3'])) { $fields['flg3'] = 0; } $fields['rptdata'] = json_encode($rptData); $exists = $db->getOne($this->tbName, 'ymd', $pkey); if ($exists) { if (is_array($conditionCanOverwrite)) { if (empty($conditionCanOverwrite)) { foreach ($pkey as $k => $v) { $conditionCanOverwrite[$k] = $v; } $exists = $db->getOne($this->tbName, 'ymd', $conditionCanOverwrite); if (!$exists) { return false; } } $db->updRecords($this->tbName, $fields, $pkey); } else { return false; } } else { try { \Sooh\DB\Broker::errorMarkSkip($v); foreach ($pkey as $k => $v) { $fields[$k] = $v; } $db->addRecord($this->tbName, $fields); } catch (ErrorException $e) { if (\Sooh\DB\Broker::errorIs($e)) { $this->save($db, $ymd, $mainType, $subType, $rptData); } else { error_log($e->getMessage() . '#' . \Sooh\DB\Broker::lastCmd() . "\n" . $e->getTraceAsString()); return false; } } } }
/** * 更新回调通知结果 * @param \Sooh\DB\Interfaces\All $db * @param string $tb * @param array $r * @param \Sooh\Base\RetSimple $__ignore__ */ protected static function updNotifiRet($db, $tb, $r, $retry, $__ignore__ = null) { $__ignore__ = $r['copartnerRet']; if ($__ignore__->ret == \Sooh\Base\RetSimple::ok) { $r['callbackRetry'] = $retry->maxForDone; } else { $retry->parse($r['callbackRetry']); $retry->needsRetry(); $r['callbackRetry'] = $retry->toNumStr(); } $r['copartnerRet'] = json_encode($__ignore__); $ret = $db->updRecords($tb, array('copartnerRet' => $r['copartnerRet'], 'callbackRetry' => $r['callbackRetry'], 'iRecordVerID' => $r['iRecordVerID'] + 1), array('appType' => $r['appType'], 'pkey' => $r['pkey'], 'skey' => $r['skey'], 'iRecordVerID' => $r['iRecordVerID'])); return $ret === 1; }