/** * TransOpenApiModel::assignTrackNumbers() * 分配跟踪号 * @param int $carrierId 运输方式ID * @param int $orderId 订单编号ID * @param int $channelId 渠道ID(可选) * @param string $country 所属国家(可选) * @return array */ public static function assignTrackNumbers($carrierId, $orderId, $country = '', $channelId = 0) { self::initDB(); $where = ''; if (empty($country)) { $where = "carrierId = '{$carrierId}' AND orderId = '{$orderId}' AND (countrys = '' OR countrys IS NULL)"; } else { $where = "carrierId = '{$carrierId}' AND orderId = '{$orderId}' AND countrys = '{$country}'"; } //已经分配的订单跟踪号再次分配时直接返回原来的跟踪号 $res = TrackNumberModel::assignTrackNumber($where); if (!empty($res['trackNumber'])) { return array("trackNumber" => $res['trackNumber']); } //兼容渠道 if (empty($channelId) && $carrierId != 2) { $where = ''; } else { $where = " AND channelId = '{$channelId}'"; } //新订单跟踪号分配 if (empty($country)) { $where = "carrierId = '{$carrierId}' AND orderId = 0 AND is_lock = 0 AND (countrys = '' OR countrys IS NULL)" . $where; } else { $where = "carrierId = '{$carrierId}' AND orderId = 0 AND is_lock = 0 AND countrys = '{$country}'" . $where; } $res = TrackNumberModel::assignTrackNumber($where); if (empty($res['trackNumber'])) { self::$errCode = 10001; self::$errMsg = "当前运输方式已无跟踪号可以分配"; return false; } $tracknum = $res['trackNumber']; $id = $res['id']; //增加锁机制防止并发异常 $res = TrackNumberModel::updateTrackNumber($id, array("is_lock" => 1), true); if (!$res) { self::$errCode = 10002; self::$errMsg = "订单ID{$orderId}=锁定{$id}=跟踪号:{$tracknum}失败,请不要过度频繁申请跟踪号!"; return false; } //更新分配的跟踪号信息 $data = array("orderId" => $orderId, "assignTime" => time()); $res = TrackNumberModel::updateTrackNumber($id, $data, true); if (!$res) { self::$errCode = TrackNumberModel::$errCode; self::$errMsg = TrackNumberModel::$errMsg; return false; } else { return array("trackNumber" => $tracknum); } }
/** * TrackNumberAct::act_updateTrackNumber() * 修改跟踪号 * @param string $trackNumber 跟踪号 * @param string $country 跟踪号所属国家(如果有) * @param string $carrierId 运输方式ID * @return bool */ public function act_updateTrackNumber() { $id = isset($_POST["id"]) ? abs(intval(trim($_POST["id"]))) : 0; $trackNumber = isset($_POST["trackNumber"]) ? post_check($_POST["trackNumber"]) : ""; $country = isset($_POST["country"]) ? post_check($_POST["country"]) : ""; $carrierId = isset($_POST["carrierId"]) ? abs(intval(trim($_POST["carrierId"]))) : 0; $channelId = isset($_POST["channelId"]) ? abs(intval(trim($_POST["channelId"]))) : 0; $act = isset($_REQUEST["act"]) ? post_check($_REQUEST["act"]) : ""; $mod = isset($_REQUEST["mod"]) ? post_check($_REQUEST["mod"]) : ""; if (!AuthUser::checkLogin($mod, $act)) { self::$errCode = 10010; self::$errMsg = "对不起,您无数据编辑权限!"; return false; } if (empty($id) || !is_numeric($id)) { self::$errCode = 10000; self::$errMsg = "ID有误!"; return false; } if (empty($carrierId)) { self::$errCode = 10001; self::$errMsg = "运输方式有误!"; return false; } if (empty($trackNumber)) { self::$errCode = 10002; self::$errMsg = "跟踪号有误!"; return false; } if (!preg_match("/^[A-Z0-9]{1,30}\$/", $trackNumber)) { self::$errCode = 10003; self::$errMsg = "跟踪号内容:{$trackNumber}格式错误,跟踪号内容只能由大写字母和数字组成且长度不超过30,请修改过来!"; return false; } $uid = $_SESSION[C('USER_AUTH_SYS_ID')]; $data = array("trackNumber" => $trackNumber, "countrys" => $country, "carrierId" => $carrierId, "channelId" => $channelId, "editTime" => time(), "edit_user_id" => $uid); $res = TrackNumberModel::updateTrackNumber($id, $data); self::$errCode = TrackNumberModel::$errCode; self::$errMsg = TrackNumberModel::$errMsg; return $res; }