/** * 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); } }
/** * TransOpenApiModel::getTrackCarrierList() * 获取跟踪号运输方式列表 * @return array */ public static function getTrackCarrierList() { self::initDB(); $sql = "SELECT id,carrierName FROM trans_track_carrier_name WHERE is_delete = 0 ORDER BY id ASC"; $query = self::$dbConn->query($sql); if ($query) { $res = self::$dbConn->fetch_array_all($query); return $res; } else { self::$errCode = 10000; self::$errMsg = "获取数据失败"; return false; } }