Ejemplo n.º 1
0
 /**
  * 记录报表数据
  * | 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;
             }
         }
     }
 }