/** * 整形字段自减 * * @param array $key_arr, key数组 * @param string $fld, 字段名,必须为整形字段 * @param int $val, 自减值 * @return boolean */ public function decrement($key_arr, $fld, $val = 1) { $this->clearERR(); if ($this->server == false && $this->init() == false) { return false; } $key = $this->config['KEY']; if (!isset($key_arr[$key])) { $this->errCode = 20081; $this->errMsg = "dtc config:{$this->dtcKey} decrement key not set"; return false; } $fields = $this->config['FIELDS']; if (!array_key_exists($fld, $fields)) { $this->errCode = 20082; $this->errMsg = "dtc config:{$this->dtcKey} decrement no field name {$fld}"; return false; } $val = intval($val); if ($val < 1) { $this->errCode = 20083; $this->errMsg = "dtc config:{$this->dtcKey} invalid decrement value"; return false; } $req = new tphp_ttc_request($this->server, TPHP_DTC_OP_UPDATE); if ($this->key_type == 1) { $errCode = $req->set_key($key_arr[$key]); } elseif ($this->key_type == 2) { $errCode = $req->set_key_str($key_arr[$key]); } else { $this->errCode = 200111; $this->errMsg = 'request failed'; return false; } if ($errCode != 0) { $this->errCode = $errCode; $this->errMsg = "dtc config:{$this->dtcKey} decrement:{$key}: set_key error"; return false; } if (count($key_arr) > 1) { // 处理多字段key情况 foreach ($key_arr as $mk => $mv) { if ($mk == $key) { continue; } $chk = $this->checkMultikey($mk, $mv); if (!$chk) { return $chk; } $eq = $this->eqv($req, $mk, $mv); if ($eq != 0) { $this->errCode = 20085; $this->errMsg = "dtc config:{$this->dtcKey} decrement:{$key}: set multikey error"; return false; } } } $add = $req->sub($fld, $val); if ($add != 0) { $this->errCode = 20086; $this->errMsg = "dtc config:{$this->dtcKey} decrement:{$key}: sub error"; return false; } $result = new tphp_ttc_result(); $req->execute($result); $this->result = $result; $errCode = $result->result_code(); if ($errCode != 0) { $this->dtcCode = $errCode; $this->errCode = $errCode; $this->errMsg = "dtc config:{$this->dtcKey} decrement:{$key} error,error code:{$errCode}"; return false; } return true; }