Merge pull request #4 from testerSunshine/master

merge
pull/195/head
MonsterTan 2019-01-15 16:18:26 +08:00 committed by GitHub
commit 1fa7d11187
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
30 changed files with 277 additions and 692 deletions

9
.dockerignore Executable file
View File

@ -0,0 +1,9 @@
**/*.html
**/*.pyc
**/*.yaml
**/*.log
**/*~
**/.DS_Store
**/Thumbs.db
.idea/
.git/

View File

@ -2,7 +2,7 @@
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="jdk" jdkName="Python 2.7 (qt12306)" jdkType="Python SDK" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TestRunnerService">

View File

@ -4,7 +4,7 @@
<inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ignoredPackages">
<value>
<list size="11">
<list size="13">
<item index="0" class="java.lang.String" itemvalue="nose" />
<item index="1" class="java.lang.String" itemvalue="locust" />
<item index="2" class="java.lang.String" itemvalue="selenium" />
@ -16,6 +16,8 @@
<item index="8" class="java.lang.String" itemvalue="MySQL-python" />
<item index="9" class="java.lang.String" itemvalue="redis" />
<item index="10" class="java.lang.String" itemvalue="redis_py_cluster" />
<item index="11" class="java.lang.String" itemvalue="requests" />
<item index="12" class="java.lang.String" itemvalue="APScheduler" />
</list>
</value>
</option>

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MarkdownExportedFiles">
<htmlFiles />
<imageFiles />
<otherFiles />
</component>
</project>

View File

@ -1,72 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MarkdownProjectSettings">
<PreviewSettings splitEditorLayout="SPLIT" splitEditorPreview="PREVIEW" useGrayscaleRendering="false" zoomFactor="1.0" maxImageWidth="0" showGitHubPageIfSynced="false" allowBrowsingInPreview="false" synchronizePreviewPosition="true" highlightPreviewType="NONE" highlightFadeOut="5" highlightOnTyping="true" synchronizeSourcePosition="true" verticallyAlignSourceAndPreviewSyncPosition="true" showSearchHighlightsInPreview="false" showSelectionInPreview="true" openRemoteLinks="true">
<PanelProvider>
<provider providerId="com.vladsch.idea.multimarkdown.editor.swing.html.panel" providerName="Default - Swing" />
</PanelProvider>
</PreviewSettings>
<ParserSettings gitHubSyntaxChange="false">
<PegdownExtensions>
<option name="ABBREVIATIONS" value="false" />
<option name="ANCHORLINKS" value="true" />
<option name="ASIDE" value="false" />
<option name="ATXHEADERSPACE" value="true" />
<option name="AUTOLINKS" value="true" />
<option name="DEFINITIONS" value="false" />
<option name="DEFINITION_BREAK_DOUBLE_BLANK_LINE" value="false" />
<option name="FENCED_CODE_BLOCKS" value="true" />
<option name="FOOTNOTES" value="false" />
<option name="HARDWRAPS" value="false" />
<option name="HTML_DEEP_PARSER" value="false" />
<option name="INSERTED" value="false" />
<option name="QUOTES" value="false" />
<option name="RELAXEDHRULES" value="true" />
<option name="SMARTS" value="false" />
<option name="STRIKETHROUGH" value="true" />
<option name="SUBSCRIPT" value="false" />
<option name="SUPERSCRIPT" value="false" />
<option name="SUPPRESS_HTML_BLOCKS" value="false" />
<option name="SUPPRESS_INLINE_HTML" value="false" />
<option name="TABLES" value="true" />
<option name="TASKLISTITEMS" value="true" />
<option name="TOC" value="false" />
<option name="WIKILINKS" value="true" />
</PegdownExtensions>
<ParserOptions>
<option name="COMMONMARK_LISTS" value="true" />
<option name="DUMMY" value="false" />
<option name="EMOJI_SHORTCUTS" value="true" />
<option name="FLEXMARK_FRONT_MATTER" value="false" />
<option name="GFM_LOOSE_BLANK_LINE_AFTER_ITEM_PARA" value="false" />
<option name="GFM_TABLE_RENDERING" value="true" />
<option name="GITBOOK_URL_ENCODING" value="false" />
<option name="GITHUB_EMOJI_URL" value="false" />
<option name="GITHUB_LISTS" value="false" />
<option name="GITHUB_WIKI_LINKS" value="true" />
<option name="JEKYLL_FRONT_MATTER" value="false" />
<option name="SIM_TOC_BLANK_LINE_SPACER" value="true" />
</ParserOptions>
</ParserSettings>
<HtmlSettings headerTopEnabled="false" headerBottomEnabled="false" bodyTopEnabled="false" bodyBottomEnabled="false" embedUrlContent="false" addPageHeader="true" embedImages="false" embedHttpImages="false">
<GeneratorProvider>
<provider providerId="com.vladsch.idea.multimarkdown.editor.swing.html.generator" providerName="Default Swing HTML Generator" />
</GeneratorProvider>
<headerTop />
<headerBottom />
<bodyTop />
<bodyBottom />
</HtmlSettings>
<CssSettings previewScheme="UI_SCHEME" cssUri="" isCssUriEnabled="false" isCssTextEnabled="false" isDynamicPageWidth="true">
<StylesheetProvider>
<provider providerId="com.vladsch.idea.multimarkdown.editor.swing.html.css" providerName="Default Swing Stylesheet" />
</StylesheetProvider>
<ScriptProviders />
<cssText />
</CssSettings>
<HtmlExportSettings updateOnSave="false" parentDir="$ProjectFileDir$" targetDir="$ProjectFileDir$" cssDir="" scriptDir="" plainHtml="false" imageDir="" copyLinkedImages="false" imageUniquifyType="0" targetExt="" useTargetExt="false" noCssNoScripts="false" linkToExportedHtml="true" exportOnSettingsChange="true" regenerateOnProjectOpen="false" linkFormatType="HTTP_ABSOLUTE" />
<LinkMapSettings>
<textMaps />
</LinkMapSettings>
</component>
</project>

View File

@ -1,3 +0,0 @@
<component name="MarkdownNavigator.ProfileManager">
<settings default="" pdf-export="" />
</component>

View File

@ -3,5 +3,5 @@
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 2.7 (qt12306)" project-jdk-type="Python SDK" />
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.6.3 (/Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6)" project-jdk-type="Python SDK" />
</project>

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/12306.iml" filepath="$PROJECT_DIR$/.idea/12306.iml" />
</modules>
</component>
</project>

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

View File

@ -1,12 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="e3073fd1-1758-4def-8eb5-379307a272f8" name="Default" comment="增加余票不足优先提交功能">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/config/ticket_config.yaml" beforeDir="false" afterPath="$PROJECT_DIR$/config/ticket_config.yaml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/inter/Query.py" beforeDir="false" afterPath="$PROJECT_DIR$/inter/Query.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/inter/QueryOrderWaitTime.py" beforeDir="false" afterPath="$PROJECT_DIR$/inter/QueryOrderWaitTime.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/tkcode" beforeDir="false" afterPath="$PROJECT_DIR$/tkcode" afterDir="false" />
<list default="true" id="4ff88715-dd0d-4e26-8ea7-b7b28038ca10" name="Default" comment="">
<change beforePath="$PROJECT_DIR$/.idea/12306.iml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/markdown-exported-files.xml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/markdown-navigator.xml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/markdown-navigator/profiles_settings.xml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/misc.xml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/modules.xml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/vcs.xml" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" />
</list>
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="TRACKING_ENABLED" value="true" />
@ -24,8 +28,8 @@
<file leaf-file-name="select_ticket_info.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/init/select_ticket_info.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="3168">
<caret line="243" column="47" selection-start-line="243" selection-start-column="47" selection-end-line="243" selection-end-column="47" />
<state relative-caret-position="1184">
<caret line="104" column="36" selection-start-line="104" selection-start-column="36" selection-end-line="104" selection-end-column="36" />
</state>
</provider>
</entry>
@ -33,80 +37,58 @@
<file leaf-file-name="QueryOrderWaitTime.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/inter/QueryOrderWaitTime.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="433">
<caret line="89" column="32" selection-start-line="89" selection-start-column="32" selection-end-line="89" selection-end-column="32" />
<state relative-caret-position="48">
<caret line="34" column="122" selection-start-line="34" selection-start-column="122" selection-end-line="34" selection-end-column="122" />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="GetQueueCountAsync.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/inter/GetQueueCountAsync.py">
<file leaf-file-name=".gitignore" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/.gitignore">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="96">
<caret line="80" column="8" selection-start-line="80" selection-start-column="8" selection-end-line="80" selection-end-column="8" />
<state relative-caret-position="64">
<caret line="4" column="1" selection-start-line="4" selection-start-column="1" selection-end-line="4" selection-end-column="1" />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="GetQueueCount.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/inter/GetQueueCount.py">
<file leaf-file-name="TicketEnmu.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/config/TicketEnmu.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="384">
<caret line="86" column="37" selection-start-line="86" selection-start-column="37" selection-end-line="86" selection-end-column="37" />
<state relative-caret-position="416">
<caret line="26" column="4" selection-start-line="26" selection-start-column="4" selection-end-line="26" selection-end-column="4" />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="GetPassengerDTOs.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/inter/GetPassengerDTOs.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="80">
<caret line="63" column="35" selection-start-line="63" selection-start-column="35" selection-end-line="63" selection-end-column="35" />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="GetPassCodeNewOrderAndLogin.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/inter/GetPassCodeNewOrderAndLogin.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="208">
<caret line="15" column="63" selection-start-line="15" selection-start-column="63" selection-end-line="15" selection-end-column="63" />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ConfirmSingleForQueueAsys.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/inter/ConfirmSingleForQueueAsys.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-248">
<caret line="13" column="25" selection-start-line="13" selection-start-column="25" selection-end-line="13" selection-end-column="25" />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="AutoSubmitOrderRequest.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/inter/AutoSubmitOrderRequest.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="340">
<caret line="99" selection-start-line="99" selection-end-line="99" />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ticket_config.yaml" pinned="false" current-in-tab="true">
<file leaf-file-name="ticket_config.yaml" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/config/ticket_config.yaml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="448">
<caret line="28" column="14" selection-start-line="28" selection-start-column="14" selection-end-line="28" selection-end-column="14" />
<state relative-caret-position="192">
<caret line="12" column="19" selection-start-line="12" selection-start-column="19" selection-end-line="12" selection-end-column="19" />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ConfirmSingleForQueue.py" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/inter/ConfirmSingleForQueue.py">
<file leaf-file-name="requirements.txt" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/requirements.txt">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-232">
<caret line="36" column="98" selection-start-line="36" selection-start-column="61" selection-end-line="36" selection-end-column="98" />
<state relative-caret-position="96">
<caret line="6" column="16" selection-start-line="6" selection-start-column="16" selection-end-line="6" selection-end-column="16" />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="README.md" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/README.md">
<provider selected="true" editor-type-id="split-provider[text-editor;MarkdownPreviewEditor]">
<state split_layout="SPLIT">
<first_editor relative-caret-position="848">
<caret line="53" column="4" selection-start-line="53" selection-start-column="4" selection-end-line="56" selection-end-column="23" />
</first_editor>
<second_editor>
<js_state />
</second_editor>
</state>
</provider>
</entry>
@ -120,86 +102,9 @@
</list>
</option>
</component>
<component name="FindInProjectRecents">
<findStrings>
<find>12306account</find>
<find>ticket</find>
<find>联系人不在列表中,请查证后添加</find>
<find>飘飘</find>
<find>select_refresh_interval</find>
<find>正在尝试排队</find>
<find>passengerDTOs</find>
<find>提交订单失败</find>
<find>ifshowPassCodeTime</find>
<find>车票提交通过</find>
<find>query</find>
<find>出票成功</find>
<find>查询到有余票,尝试提交订单</find>
<find>station_seat</find>
<find>ifShowPassCodeTime</find>
<find>checkOrderInfo</find>
<find>/otn/leftTicket/submitOrderRequest</find>
<find>文贤平</find>
<find>当前余票数小于乘车人数,放弃订票</find>
<find>车票提交通过,正在尝试排队</find>
<find>select_url</find>
<find>loginInit</find>
<find>验证码提交安全期,等待</find>
<find>文贤平(二代身份证-43052419950223777X)存在与本次购票行程冲突的车票!!</find>
<find>logininit</find>
<find>confirmSingleForQueueAsys</find>
<find>is_auto_code</find>
<find>idateM</find>
<find>queryMyOrderNoCompleteUrl</find>
<find>queryMyOrderNoComplete</find>
</findStrings>
<replaceStrings>
<replace>is_auto_code</replace>
<replace>auto_code_type</replace>
<replace>self.session.urls</replace>
<replace>self.session.httpClint</replace>
</replaceStrings>
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/inter/CheckRandCodeAnsyn.py" />
<option value="$PROJECT_DIR$/inter/getPassCodeNewOrder.py" />
<option value="$PROJECT_DIR$/inter/getPassCodeNewOrderAndLogin.py" />
<option value="$PROJECT_DIR$/inter/ConfirmSingleForQueue.py" />
<option value="$PROJECT_DIR$/init/SelectTicketInfoFast.py" />
<option value="$PROJECT_DIR$/config/ticketConf.py" />
<option value="$PROJECT_DIR$/requirements.txt" />
<option value="$PROJECT_DIR$/.gitignore" />
<option value="$PROJECT_DIR$/run.py" />
<option value="$PROJECT_DIR$/agency/CdnPar.py" />
<option value="$PROJECT_DIR$/agency/cdn_utils.py" />
<option value="$PROJECT_DIR$/inter/GetRandCode.py" />
<option value="$PROJECT_DIR$/init/login.py" />
<option value="$PROJECT_DIR$/inter/GetPassCodeNewOrderAndLogin.py" />
<option value="$PROJECT_DIR$/inter/CheckOrderInfo.py" />
<option value="$PROJECT_DIR$/inter/SubmitOrderRequest.py" />
<option value="$PROJECT_DIR$/inter/GetQueueCount.py" />
<option value="$PROJECT_DIR$/inter/GetQueueCountAsync.py" />
<option value="$PROJECT_DIR$/Update.md" />
<option value="$PROJECT_DIR$/myUrllib/httpUtils.py" />
<option value="$PROJECT_DIR$/inter/ConfirmSingleForQueueAsys.py" />
<option value="$PROJECT_DIR$/inter/CheckUser.py" />
<option value="$PROJECT_DIR$/README.md" />
<option value="$PROJECT_DIR$/inter/Query.py" />
<option value="$PROJECT_DIR$/init/select_ticket_info.py" />
<option value="$PROJECT_DIR$/inter/GetPassengerDTOs.py" />
<option value="$PROJECT_DIR$/inter/QueryOrderWaitTime.py" />
<option value="$PROJECT_DIR$/tmp/log/2018-10-17.log" />
<option value="$PROJECT_DIR$/config/urlConf.py" />
<option value="$PROJECT_DIR$/inter/AutoSubmitOrderRequest.py" />
<option value="$PROJECT_DIR$/config/ticket_config.yaml" />
</list>
</option>
</component>
<component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
<component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
<component name="JsGulpfileManager">
@ -209,7 +114,7 @@
<component name="ProjectFrameBounds" fullScreen="true">
<option name="y" value="23" />
<option name="width" value="1440" />
<option name="height" value="812" />
<option name="height" value="829" />
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="true">
<ConfirmationsSetting value="1" id="Add" />
@ -226,11 +131,6 @@
<item name="12306" type="b2602c69:ProjectViewProjectNode" />
<item name="12306" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="12306" type="b2602c69:ProjectViewProjectNode" />
<item name="12306" type="462c0819:PsiDirectoryNode" />
<item name="config" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
</subPane>
@ -239,9 +139,7 @@
</panes>
</component>
<component name="PropertiesComponent">
<property name="SearchEverywhereHistoryKey" value="query&#9;FILE&#9;file:///usr/local/py_work/12306/inter/Query.py&#10;confirmSingleForQueueAsys&#9;FILE&#9;file:///usr/local/py_work/12306/inter/ConfirmSingleForQueueAsys.py&#10;check&#9;FILE&#9;file:///usr/local/py_work/12306/inter/CheckUser.py&#10;url&#9;FILE&#9;file:///usr/local/py_work/12306/config/urlConf.py&#10;get&#9;FILE&#9;file:///usr/local/py_work/12306/inter/GetPassengerDTOs.py&#10;httpc&#9;null&#9;null&#10;tt&#9;FILE&#9;file:///usr/local/py_work/12306/myUrllib/httpUtils.py&#10;urls&#9;null&#9;null&#10;htt&#9;FILE&#9;file:///usr/local/py_work/12306/myUrllib/httpUtils.py&#10;createOrder&#9;null&#9;null&#10;login&#9;FILE&#9;file:///usr/local/py_work/12306/init/login.py&#10;urlc&#9;FILE&#9;file:///usr/local/py_work/12306/config/urlConf.py" />
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="settings.editor.selected.configurable" value="com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable" />
</component>
<component name="RunDashboard">
@ -256,223 +154,12 @@
</list>
</option>
</component>
<component name="RunManager" selected="Python.run">
<configuration name="run" type="PythonConfigurationType" factoryName="Python" temporary="true">
<module name="12306" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/run.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
</configuration>
<configuration name="select_ticket_info" type="PythonConfigurationType" factoryName="Python" temporary="true">
<module name="12306" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/init" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/init/select_ticket_info.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
</configuration>
<configuration default="true" type="DjangoTestsConfigurationType" factoryName="Django tests">
<module name="12306" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="TARGET" value="" />
<option name="SETTINGS_FILE" value="" />
<option name="CUSTOM_SETTINGS" value="false" />
<option name="USE_OPTIONS" value="false" />
<option name="OPTIONS" value="" />
</configuration>
<configuration default="true" type="PyBehaveRunConfigurationType" factoryName="Behave">
<module name="12306" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="ADDITIONAL_ARGS" value="" />
</configuration>
<configuration default="true" type="PyLettuceRunConfigurationType" factoryName="Lettuce">
<module name="12306" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="ADDITIONAL_ARGS" value="" />
</configuration>
<configuration default="true" type="PythonConfigurationType" factoryName="Python">
<module name="12306" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
</configuration>
<configuration default="true" type="Python.FlaskServer" factoryName="Flask server">
<module name="12306" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="launchJavascriptDebuger" value="false" />
</configuration>
<configuration default="true" type="Tox" factoryName="Tox">
<module name="12306" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
</configuration>
<configuration default="true" type="tests" factoryName="Doctests">
<module name="12306" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="" />
<option name="CLASS_NAME" value="" />
<option name="METHOD_NAME" value="" />
<option name="FOLDER_NAME" value="" />
<option name="TEST_TYPE" value="TEST_SCRIPT" />
<option name="PATTERN" value="" />
<option name="USE_PATTERN" value="false" />
</configuration>
<configuration default="true" type="tests" factoryName="Nosetests">
<module name="12306" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="_new_regexPattern" value="&quot;&quot;" />
<option name="_new_additionalArguments" value="&quot;&quot;" />
<option name="_new_target" value="&quot;&quot;" />
<option name="_new_targetType" value="&quot;PATH&quot;" />
</configuration>
<configuration default="true" type="tests" factoryName="Twisted Trial">
<module name="12306" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="_new_additionalArguments" value="&quot;&quot;" />
<option name="_new_target" value="&quot;&quot;" />
<option name="_new_targetType" value="&quot;PATH&quot;" />
</configuration>
<configuration default="true" type="tests" factoryName="Unittests">
<module name="12306" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="_new_additionalArguments" value="&quot;&quot;" />
<option name="_new_target" value="&quot;&quot;" />
<option name="_new_targetType" value="&quot;PATH&quot;" />
</configuration>
<configuration default="true" type="tests" factoryName="py.test">
<module name="12306" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="_new_keywords" value="&quot;&quot;" />
<option name="_new_additionalArguments" value="&quot;&quot;" />
<option name="_new_target" value="&quot;&quot;" />
<option name="_new_targetType" value="&quot;PATH&quot;" />
</configuration>
<list>
<item itemvalue="Python.run" />
<item itemvalue="Python.select_ticket_info" />
</list>
<recent_temporary>
<list>
<item itemvalue="Python.run" />
<item itemvalue="Python.select_ticket_info" />
</list>
</recent_temporary>
</component>
<component name="SvnConfiguration">
<configuration />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="e3073fd1-1758-4def-8eb5-379307a272f8" name="Default" comment="" />
<changelist id="4ff88715-dd0d-4e26-8ea7-b7b28038ca10" name="Default" comment="" />
<created>1535103824843</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
@ -590,30 +277,27 @@
<option name="project" value="LOCAL" />
<updated>1540282122550</updated>
</task>
<option name="localTasksCounter" value="17" />
<task id="LOCAL-00017" summary="更新群号">
<created>1547460780535</created>
<option name="number" value="00017" />
<option name="presentableId" value="LOCAL-00017" />
<option name="project" value="LOCAL" />
<updated>1547460780535</updated>
</task>
<servers />
</component>
<component name="TodoView">
<todo-panel id="selected-file">
<is-autoscroll-to-source value="true" />
</todo-panel>
<todo-panel id="all">
<are-packages-shown value="true" />
<is-autoscroll-to-source value="true" />
</todo-panel>
</component>
<component name="ToolWindowManager">
<frame x="0" y="0" width="1440" height="900" extended-state="6" />
<frame x="0" y="0" width="1440" height="900" extended-state="0" />
<editor active="true" />
<layout>
<window_info anchor="bottom" id="TODO" order="6" weight="0.32969698" />
<window_info anchor="bottom" id="Event Log" order="7" sideWeight="0.5007153" side_tool="true" weight="0.32867134" />
<window_info anchor="bottom" id="Database Changes" order="7" show_stripe_button="false" />
<window_info active="true" anchor="bottom" id="Run" order="2" visible="true" weight="0.42303032" />
<window_info anchor="bottom" id="Run" order="2" weight="0.42303032" />
<window_info anchor="bottom" id="Version Control" order="7" weight="0.32447553" />
<window_info anchor="bottom" id="Python Console" order="7" sideWeight="0.49928468" weight="0.32447553" />
<window_info anchor="bottom" id="Terminal" order="7" sideWeight="0.49928468" weight="0.32484847" />
<window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.3311874" />
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.33547926" />
<window_info anchor="bottom" id="Docker" order="7" show_stripe_button="false" />
<window_info anchor="right" id="Database" order="3" />
<window_info anchor="right" id="SciView" order="3" />
@ -632,32 +316,6 @@
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="1" />
</component>
<component name="Vcs.Log.Tabs.Properties">
<option name="TAB_STATES">
<map>
<entry key="MAIN">
<value>
<State>
<option name="RECENTLY_FILTERED_USER_GROUPS">
<collection />
</option>
<option name="RECENTLY_FILTERED_BRANCH_GROUPS">
<collection />
</option>
<option name="COLUMN_ORDER">
<list>
<option value="0" />
<option value="1" />
<option value="2" />
<option value="3" />
</list>
</option>
</State>
</value>
</entry>
</map>
</option>
</component>
<component name="VcsContentAnnotationSettings">
<option name="myLimit" value="2678400000" />
</component>
@ -674,28 +332,12 @@
<MESSAGE value="1、优化查询策略&#10;2、快读下单修复&#10;3、关闭cdn功能" />
<MESSAGE value="update readme" />
<MESSAGE value="1、修改提交订单逻辑问题感谢群里小伙伴发现&#10;2、查询接口修改" />
<option name="LAST_COMMIT_MESSAGE" value="1、修改提交订单逻辑问题感谢群里小伙伴发现&#10;2、查询接口修改" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<option name="time" value="18" />
</breakpoint-manager>
<MESSAGE value="更新群号" />
<option name="LAST_COMMIT_MESSAGE" value="更新群号" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/tmp/log/2018-08-27.log">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-4727">
<caret line="100" column="79" lean-forward="true" selection-start-line="100" selection-start-column="79" selection-end-line="100" selection-end-column="79" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tmp/log/2018-08-24.log">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="3463">
<caret line="430" column="69" lean-forward="true" selection-start-line="430" selection-start-column="69" selection-end-line="430" selection-end-column="69" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tmp/log/2018-08-27.log" />
<entry file="file://$PROJECT_DIR$/tmp/log/2018-08-24.log" />
<entry file="file://$PROJECT_DIR$/init/SelectTicketInfoFast.py" />
<entry file="file://$PROJECT_DIR$/config/emailConf.py">
<provider selected="true" editor-type-id="text-editor">
@ -704,18 +346,7 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tmp/log/2018-08-31.log">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-1157" />
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.gitignore">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="64">
<caret line="4" column="1" selection-start-line="4" selection-start-column="1" selection-end-line="4" selection-end-column="1" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tmp/log/2018-08-31.log" />
<entry file="file://$PROJECT_DIR$/damatuCode/ruokuai.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="27">
@ -731,20 +362,8 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tmp/log/2018-09-02.log">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="245">
<caret line="84" column="264" selection-start-line="84" selection-start-column="247" selection-end-line="84" selection-end-column="264" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tmp/log/2018-09-04.log">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="278">
<caret line="40" column="81" selection-start-line="40" selection-start-column="67" selection-end-line="40" selection-end-column="81" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tmp/log/2018-09-02.log" />
<entry file="file://$PROJECT_DIR$/tmp/log/2018-09-04.log" />
<entry file="file://$PROJECT_DIR$/init/login.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="330">
@ -752,13 +371,7 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tmp/log/2018-09-18.log">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="570">
<caret line="832" column="21" selection-start-line="832" selection-end-line="832" selection-end-column="21" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tmp/log/2018-09-18.log" />
<entry file="file://$APPLICATION_HOME_DIR$/helpers/typeshed/stdlib/2/typing.pyi">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="154">
@ -766,27 +379,9 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tmp/log/2018-09-19.log">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="500">
<caret line="4952" column="196" selection-start-line="4952" selection-start-column="184" selection-end-line="4952" selection-end-column="196" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tmp/log/2018-09-20.log">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="163">
<caret line="156" selection-start-line="156" selection-end-line="157" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tmp/log/2018-09-21.log">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="250">
<caret line="534" column="27" selection-start-line="534" selection-start-column="27" selection-end-line="534" selection-end-column="27" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tmp/log/2018-09-19.log" />
<entry file="file://$PROJECT_DIR$/tmp/log/2018-09-20.log" />
<entry file="file://$PROJECT_DIR$/tmp/log/2018-09-21.log" />
<entry file="file://$PROJECT_DIR$/run.py">
<provider selected="true" editor-type-id="text-editor">
<state>
@ -811,7 +406,7 @@
<entry file="file://$PROJECT_DIR$/requirements.txt">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="96">
<caret line="6" column="16" lean-forward="true" selection-start-line="6" selection-start-column="16" selection-end-line="6" selection-end-column="16" />
<caret line="6" column="16" selection-start-line="6" selection-start-column="16" selection-end-line="6" selection-end-column="16" />
</state>
</provider>
</entry>
@ -834,13 +429,7 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tmp/log/2018-09-28.log">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1058">
<caret line="74" column="122" lean-forward="true" selection-start-line="74" selection-start-column="122" selection-end-line="74" selection-end-column="122" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tmp/log/2018-09-28.log" />
<entry file="file://$PROJECT_DIR$/inter/GetRandCode.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="240">
@ -865,8 +454,8 @@
<entry file="file://$PROJECT_DIR$/README.md">
<provider selected="true" editor-type-id="split-provider[text-editor;MarkdownPreviewEditor]">
<state split_layout="SPLIT">
<first_editor relative-caret-position="350">
<caret line="55" lean-forward="true" selection-start-line="51" selection-end-line="55" />
<first_editor relative-caret-position="848">
<caret line="53" column="4" selection-start-line="53" selection-start-column="4" selection-end-line="56" selection-end-column="23" />
</first_editor>
<second_editor>
<js_state />
@ -881,20 +470,8 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tmp/log/2018-09-30.log">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="295">
<caret line="654" selection-start-line="654" selection-end-line="655" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tmp/log/2018-10-05.log">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="181">
<caret line="36" selection-start-line="36" selection-end-line="37" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tmp/log/2018-09-30.log" />
<entry file="file://$PROJECT_DIR$/tmp/log/2018-10-05.log" />
<entry file="file://$PROJECT_DIR$/myUrllib/httpUtils.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="746">
@ -923,41 +500,19 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tmp/log/2018-10-06.log">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="304">
<caret line="95" column="36" selection-start-line="95" selection-start-column="36" selection-end-line="95" selection-end-column="36" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tmp/log/2018-10-13.log">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="129">
<caret line="26" column="6" lean-forward="true" selection-start-line="26" selection-start-column="6" selection-end-line="26" selection-end-column="6" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tmp/log/2018-10-06.log" />
<entry file="file://$PROJECT_DIR$/tmp/log/2018-10-13.log" />
<entry file="file://$PROJECT_DIR$/inter/Query.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="784">
<caret line="49" column="40" selection-start-line="49" selection-start-column="40" selection-end-line="49" selection-end-column="40" />
<folding>
<element signature="e#15#26#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/config/TicketEnmu.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="416">
<caret line="26" column="4" selection-start-line="26" selection-start-column="4" selection-end-line="26" selection-end-column="4" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/init/select_ticket_info.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="3168">
<caret line="243" column="47" selection-start-line="243" selection-start-column="47" selection-end-line="243" selection-end-column="47" />
<state relative-caret-position="1184">
<caret line="104" column="36" selection-start-line="104" selection-start-column="36" selection-end-line="104" selection-end-column="36" />
</state>
</provider>
</entry>
@ -968,20 +523,7 @@
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tmp/log/2018-10-17.log">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="258">
<caret line="29" column="68" selection-start-line="29" selection-start-column="46" selection-end-line="29" selection-end-column="68" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/inter/QueryOrderWaitTime.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="433">
<caret line="89" column="32" selection-start-line="89" selection-start-column="32" selection-end-line="89" selection-end-column="32" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/tmp/log/2018-10-17.log" />
<entry file="file://$PROJECT_DIR$/inter/GetQueueCountAsync.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="96">
@ -1033,8 +575,29 @@
</entry>
<entry file="file://$PROJECT_DIR$/config/ticket_config.yaml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="448">
<caret line="28" column="14" selection-start-line="28" selection-start-column="14" selection-end-line="28" selection-end-column="14" />
<state relative-caret-position="192">
<caret line="12" column="19" selection-start-line="12" selection-start-column="19" selection-end-line="12" selection-end-column="19" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/config/TicketEnmu.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="416">
<caret line="26" column="4" selection-start-line="26" selection-start-column="4" selection-end-line="26" selection-end-column="4" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/inter/QueryOrderWaitTime.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="48">
<caret line="34" column="122" selection-start-line="34" selection-start-column="122" selection-end-line="34" selection-end-column="122" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.gitignore">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="64">
<caret line="4" column="1" selection-start-line="4" selection-start-column="1" selection-end-line="4" selection-end-column="1" />
</state>
</provider>
</entry>

View File

@ -47,7 +47,14 @@
![image](https://github.com/testerSunshine/12306/blob/master/uml/uml.png)
- 项目声明:
- 本软件只供学习交流使用务作为商业用途交流群号286271084(已满) 2群649992274(已满)请加3群(未满) 群号632501142、4群(未满) 群号606340519
- 本软件只供学习交流使用,务作为商业用途,交流群号
- 1群286271084(已满)
- 2群649992274(已满)
- 3群632501142(已满)
- 4群: 606340519(已满)
- 5群: 948526733(未满)
- 6群: 444101020(未满)
- 7群: 660689659(未满)
- 请不要重复加群,一个群就可以了,把机会留给更多人
- **进群先看公告!!!进群先看公告!!!进群先看公告!!! 重要的事情说三遍**
- 能为你抢到一张回家的票,是我最大的心愿
@ -75,12 +82,16 @@
- 学生票issues [学生票修改](https://github.com/testerSunshine/12306/issues/47)
- 依赖安装不对的问题ImportError[requirements.txt问题](https://github.com/testerSunshine/12306/issues/91)
- 若快豆子疑问 [点我](https://github.com/testerSunshine/12306/issues/67)
- IOError: 【Errno 0】 Error 问题 [点我](https://github.com/testerSunshine/12306/issues/159)
- 测试下单接口是否可用有两个下单接口随便用哪个都ok
- 如果下载验证码过期或者下载失败的问题应该是12306封ip的策略多重试几次12306现在封服务器(阿里云和腾讯云)ip比较严重尽量不要放在服务器里面
- 目前12306对服务器ip比较敏感大家还是在自己家里挂着吧
- 如果想使用此项目的gui版本请加群目前只有mac版本
- 感谢一下小伙伴对本项目提供的帮助
- @ sun7127@126.com
- @才
- @sun7127@126.com
- @ 才
- @MonsterTan
- 以及所有为此项目提供pr的同学
- [更新日志](Update.md)

View File

@ -6,6 +6,7 @@ import requests
from agency.agency_tools import proxy
from config.emailConf import sendEmail
from config.pushbearConf import sendPushBear
def _set_header_default():
@ -39,6 +40,13 @@ class testAll(unittest.TestCase):
"""
sendEmail("订票小助手测试一下")
def testPushbear(self):
"""
实测pushbear是否可用
:return:
"""
sendPushBear("pushbear 微信通知测试一下")
# def testConfig(self):
# """
# 测试config是否配置正确

View File

@ -134,3 +134,6 @@
- mac和linux服务器自动对点
- 增加预售踩点查询下单经测试误差在0.004s
- 2019.01.12更新
- 增加对python3语法的支持
- 删除校验时间很多机器不兼容的问题win10会阻拦对时功能导致大面积报错如果是预售为了不耽误宝贵的时间请手动对时

View File

@ -76,4 +76,4 @@ class CDNProxy:
if __name__ == '__main__':
cdn = CDNProxy()
cdn.open_cdn_file()
print(cdn.open_cdn_file())

View File

@ -15,21 +15,21 @@ def autoSynchroTime():
hosts = ['ntp1.aliyun.com', 'ntp2.aliyun.com', 'ntp3.aliyun.com', 'ntp4.aliyun.com', 'cn.pool.ntp.org']
print(u"正在同步时间请耐心等待30秒左右")
print(u"正在同步时间请耐心等待30秒左右,如果下面有错误发送,可以忽略!!")
print(u"系统当前时间{}".format(str(datetime.datetime.now())[:22]))
system = platform.system()
if system == "Windows": # windows 同步时间未测试过参考地址https://www.jianshu.com/p/92ec15da6cc3
for host in hosts:
os.system('w32tm /register')
os.system('net start w32time')
os.system('w32tm /config /manualpeerlist:"{}" /syncfromflags:manual /reliable:yes /update'.format(host))
os.system('ping -n 3 127.0.0.1 >nul')
sin = os.system('w32tm /resync')
os.popen('w32tm /register')
os.popen('net start w32time')
os.popen('w32tm /config /manualpeerlist:"{}" /syncfromflags:manual /reliable:yes /update'.format(host))
os.popen('ping -n 3 127.0.0.1 >nul')
sin = os.popen('w32tm /resync')
if sin is 0:
break
else: # mac同步地址如果ntpdate未安装brew install ntpdate linux 安装 yum install -y ntpdate
for host in hosts:
sin = os.system('ntpdate {}'.format(host))
sin = os.popen('ntpdate {}'.format(host))
if sin is 0:
break
print(u"同步后时间:{}".format(str(datetime.datetime.now())[:22]))

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
import datetime
import os
import random
import sys
import time
@ -102,9 +103,9 @@ def getCacheFile(cacheType):
def checkSleepTime(session):
now = datetime.datetime.now()
if now.hour >= 23 or now.hour < 6:
print(u"12306休息时间本程序自动停止,明天早上点将自动运行")
print(u"12306休息时间本程序自动停止,明天早上六点点将自动运行")
open_time = datetime.datetime(now.year, now.month, now.day, 6)
if open_time < now:
open_time += datetime.timedelta(1)
time.sleep((open_time - now).seconds)
time.sleep((open_time - now).seconds + round(random.uniform(1, 10)))
session.call_login()

26
config/pushbearConf.py Normal file
View File

@ -0,0 +1,26 @@
# -*- coding: utf8 -*-
__author__ = 'kongkongyzt'
import requests
from config.ticketConf import _get_yaml
PUSH_BEAR_API_PATH = "https://pushbear.ftqq.com/sub"
def sendPushBear(msg):
"""
pushBear微信通知
:param str: 通知内容 content
:return:
"""
conf = _get_yaml()
if conf["pushbear_conf"]["is_pushbear"] and conf["pushbear_conf"]["send_key"].strip() != "":
try:
requests.get("{}?sendkey={}&text=来自12306抢票助手的通知&desp={}".format(PUSH_BEAR_API_PATH, conf["pushbear_conf"]["send_key"].strip(), msg))
print(u"已下发 pushbear 微信通知, 请查收")
except Exception as e:
print(u"pushbear 配置有误 {}".format(e))
else:
pass
if __name__ == '__main__':
sendPushBear(1)

View File

@ -5,7 +5,8 @@ set:
# - 2018-01-06
# - 2018-01-07
station_dates:
- "2019-02-02"
- "2019-02-10"
- "2019-02-11"
# 是否根据时间范围 和 乘车类型 购票
# 否则将需要手动填写车次
@ -30,15 +31,15 @@ set:
# - "G1353"
# - "G1329"
station_trains:
- "G6172"
- "G6186"
- "G6154"
- "G6153"
- "G6184"
- "G6173"
# 出发城市,比如深圳北,就填深圳就搜得到
from_station: "广州南"
from_station: "邵阳"
# 到达城市 比如深圳北,就填深圳就搜得到
to_station: "邵阳"
to_station: "深圳北"
# 座位(list) 多个座位ex:
# - "商务座"
@ -54,18 +55,18 @@ set:
- "二等座"
# 当余票小于乘车人,如果选择优先提交,则删减联系人和余票数一致在提交
is_more_ticket: True
is_more_ticket: False
# 乘车人(list) 多个乘车人ex:
# - "张三"
# - "李四"
ticke_peoples:
- "文贤平"
- "李梦云"
# - "梁敏"
- ""
- ""
# 12306登录账号(list)
12306account:
- user: "13828728396"
- user: "931128603@qq.com"
- pwd: ""
# 加入小黑屋时间默认为5分钟此功能为了防止僵尸票导致一直下单不成功错过正常的票
@ -103,10 +104,15 @@ email_conf:
password: ""
host: "smtp.qq.com"
# 是否开启 pushbear 微信提醒, 使用前需要前往 http://pushbear.ftqq.com 扫码绑定获取 send_key 并关注获得抢票结果通知的公众号
pushbear_conf:
is_pushbear: False
send_key: ""
# 是否开启cdn查询可以更快的检测票票 1为开启2为关闭
is_cdn: 1
# 下单接口分为两种1 为快速下单2 是普通下单
# 下单接口分为两种1 模拟网页自动捡漏下单不稳定2 模拟车次后面的购票按钮下单(稳如老狗)
order_type: 2
# 下单模式 1 为预售整点刷新刷新间隔0.1-0.5S, 然后会校验时间比如12点的预售那脚本就会在12.00整检票,刷新订单

View File

@ -11,7 +11,7 @@ urls = {
"Host": "kyfw.12306.cn",
"Content-Type": 1,
"re_try": 10,
"re_time": 0.1,
"re_time": 1,
"s_time": 0.1,
"is_logger": True,
"is_json": True,
@ -23,7 +23,7 @@ urls = {
"Host": "kyfw.12306.cn",
"Content-Type": 1,
"re_try": 10,
"re_time": 0.1,
"re_time": 1,
"s_time": 0.1,
"is_logger": True,
"is_json": True,
@ -36,7 +36,7 @@ urls = {
"Host": "kyfw.12306.cn",
"Content-Type": 1,
"re_try": 10,
"re_time": 0.1,
"re_time": 1,
"s_time": 0.1,
"is_logger": False,
"is_json": False,
@ -49,7 +49,7 @@ urls = {
"Host": "kyfw.12306.cn",
"Content-Type": 1,
"re_try": 10,
"re_time": 0.1,
"re_time": 1,
"s_time": 0.1,
"is_logger": False,
"is_json": False,
@ -62,7 +62,7 @@ urls = {
"Host": "kyfw.12306.cn",
"Content-Type": 1,
"re_try": 10,
"re_time": 0.1,
"re_time": 1,
"s_time": 0.1,
"is_logger": True,
"is_json": True,
@ -73,7 +73,7 @@ urls = {
"Referer": "https://kyfw.12306.cn/otn/index/init",
"Host": "kyfw.12306.cn",
"re_try": 1,
"re_time": 0.1,
"re_time": 1,
"s_time": 0.1,
"is_logger": False,
"is_json": False,
@ -84,7 +84,7 @@ urls = {
"Referer": "https://kyfw.12306.cn/otn/index/init",
"Host": "kyfw.12306.cn",
"re_try": 1,
"re_time": 0.1,
"re_time": 1,
"s_time": 0.1,
"is_logger": False,
"is_test_cdn": True,
@ -96,7 +96,7 @@ urls = {
"Referer": "https://kyfw.12306.cn/otn/passport?redirect=/otn/login/userLogin",
"Host": "kyfw.12306.cn",
"re_try": 10,
"re_time": 0.1,
"re_time": 1,
"s_time": 0.01,
"is_logger": False,
"is_json": False,
@ -107,7 +107,7 @@ urls = {
"Referer": "https://kyfw.12306.cn/otn/passport?redirect=/otn/login/userLogin",
"Host": "kyfw.12306.cn",
"re_try": 10,
"re_time": 0.1,
"re_time": 1,
"s_time": 0.1,
"is_logger": True,
"is_json": True,
@ -119,7 +119,7 @@ urls = {
"Host": "kyfw.12306.cn",
"Content-Type": 1,
"re_try": 10,
"re_time": 0.1,
"re_time": 1,
"s_time": 0.1,
"is_logger": True,
"is_json": True,
@ -337,6 +337,18 @@ urls = {
"is_logger": True,
"is_json": True,
},
"loginAysnSuggest": { # 快速订单排队
"req_url": "/otn/login/loginAysnSuggest",
"req_type": "post",
"Referer": "https://kyfw.12306.cn/otn/leftTicket/init",
"Content-Type": 1,
"Host": "kyfw.12306.cn",
"re_try": 10,
"re_time": 0.01,
"s_time": 0.1,
"is_logger": True,
"is_json": True,
},
"cdn_host": {
"req_url": "http://ping.chinaz.com/kyfw.12306.cn",
"req_type": "post"

View File

@ -7,7 +7,10 @@ class RClient(object):
def __init__(self, username, password):
self.username = username
try:
self.password = md5(password).hexdigest()
except TypeError:
self.password = md5(password.encode('utf-8')).hexdigest()
self.soft_id = '96061'
self.soft_key = '6facb9da7bb645ad9c4a229464b2cf89'
self.base_params = {

View File

@ -70,7 +70,10 @@ class select:
to_station = ticket_info_config["set"]["to_station"]
station_dates = ticket_info_config["set"]["station_dates"]
set_names = ticket_info_config["set"]["set_type"]
try:
set_type = [seat_conf[x.encode("utf-8")] for x in ticket_info_config["set"]["set_type"]]
except KeyError:
set_type = [seat_conf[x] for x in ticket_info_config["set"]["set_type"]]
is_more_ticket = ticket_info_config["set"]["is_more_ticket"]
ticke_peoples = ticket_info_config["set"]["ticke_peoples"]
station_trains = ticket_info_config["set"]["station_trains"]
@ -93,7 +96,14 @@ class select:
print(u"*" * 50)
print(u"检查当前python版本为{}目前版本只支持2.7.10-2.7.15".format(sys.version.split(" ")[0]))
print(u"12306刷票小助手最后更新于2019.01.08请勿作为商业用途交流群号286271084(已满) 2群649992274(已满)请加3群(未满) 群号632501142、4群(未满) 群号606340519")
print(u"12306刷票小助手最后更新于2019.01.08请勿作为商业用途交流群号286271084(已满)"
u" 2群649992274(已满)\n"
u" 3群632501142(已满)\n"
u" 4群: 606340519(已满)\n"
u" 5群: 948526733(未满)\n"
u" 6群: 444101020(未满)\n"
u" 7群: 660689659(未满)\n"
)
if is_by_time:
method_notie = u"购票方式:根据时间区间购票\n可接受最早出发时间:{0}\n可接受最晚抵达时间:{1}\n可接受最长旅途时间:{2}\n可接受列车类型:{3}\n" \
.format(minutes_to_time(departure_time), minutes_to_time(arrival_time), minutes_to_time(take_time),
@ -134,8 +144,12 @@ class select:
for i in range(0, len(info)):
n_info = info[i].split('|')
station_name[n_info[1]] = n_info[2]
try:
from_station = station_name[from_station.encode("utf8")]
to_station = station_name[to_station.encode("utf8")]
except KeyError:
from_station = station_name[from_station]
to_station = station_name[to_station]
return from_station, to_station
def call_login(self, auth=False):
@ -182,7 +196,7 @@ class select:
raise ticketConfigException(u"cdn列表为空请先加载cdn")
def main(self):
autoSynchroTime() # 同步时间
# autoSynchroTime() # 同步时间
self.cdn_certification()
l = liftTicketInit(self)
l.reqLiftTicketInit()
@ -193,6 +207,8 @@ class select:
t.start()
from_station, to_station = self.station_table(self.from_station, self.to_station)
num = 0
s = getPassengerDTOs(session=self, ticket_peoples=self.ticke_peoples)
s.sendGetPassengerDTOs()
while 1:
try:
num += 1

View File

@ -25,7 +25,10 @@ class autoSubmitOrderRequest:
leftTicket,
set_type,):
self.set_type = set_type
try:
self.secretStr = urllib.unquote(secretStr)
except AttributeError:
self.secretStr = urllib.parse.unquote(secretStr)
self.train_date = train_date
self.query_from_station_name = query_from_station_name
self.query_to_station_name = query_to_station_name

View File

@ -79,7 +79,7 @@ class confirmSingleForQueue:
if "status" in checkQueueOrderResult and checkQueueOrderResult["status"]:
c_data = checkQueueOrderResult["data"] if "data" in checkQueueOrderResult else {}
if 'submitStatus' in c_data and c_data['submitStatus'] is True:
print(u"提交订单成功!")
# print(u"提交订单成功!")
qow = queryOrderWaitTime(self.session)
qow.sendQueryOrderWaitTime()
else:

View File

@ -1,4 +1,6 @@
# coding=utf-8
import json
from config.TicketEnmu import ticket
from myException.PassengerUserException import PassengerUserException
import wrapcache
@ -14,19 +16,21 @@ class getPassengerDTOs:
获取乘客信息
:return:
"""
def __init__(self, session, ticket_peoples, set_type, is_more_ticket_num):
def __init__(self, session, ticket_peoples=None, set_type=None, is_more_ticket_num=None):
"""
:param session: 登录实例
:param ticket_peoples: 乘客
:param set_type: 坐席
"""
if ticket_peoples is None:
ticket_peoples = []
self.session = session
self.ticket_peoples = ticket_peoples
self.is_more_ticket_num = is_more_ticket_num
self.set_type = set_type.encode("utf8")
self.set_type = set_type
def sendGetPassengerDTOs(self):
getPassengerDTOsResult = self.session.httpClint.send(self.session.urls["get_passengerDTOs"], {})
getPassengerDTOsResult = self.session.httpClint.send(self.session.urls["get_passengerDTOs"], json.dumps({"_json_att": ""}))
if getPassengerDTOsResult.get("data", False) and getPassengerDTOsResult["data"].get("normal_passengers", False):
normal_passengers = getPassengerDTOsResult['data']['normal_passengers']
_normal_passenger = [normal_passengers[i] for i in range(len(normal_passengers)) if
@ -38,8 +42,10 @@ class getPassengerDTOs:
elif getPassengerDTOsResult.get('messages', False):
print(getPassengerDTOsResult.get('messages', False))
else:
print(getPassengerDTOsResult)
raise PassengerUserException(ticket.DTO_NOT_FOUND)
print(u"警告:您的账号可能买票有问题,获取不到联系人,请测试是否能正常下单,在捡漏或者购票!!!")
print(u"警告:您的账号可能买票有问题,获取不到联系人,请测试是否能正常下单,在捡漏或者购票!!!")
print(u"警告:您的账号可能买票有问题,获取不到联系人,请测试是否能正常下单,在捡漏或者购票!!!")
# raise PassengerUserException(ticket.DTO_NOT_FOUND)
def getPassengerTicketStr(self, set_type):
"""
@ -57,7 +63,6 @@ class getPassengerDTOs:
'软座': 2,
'软卧': 4,
'硬卧': 3,
'动卧': 1,
}
return str(passengerTicketStr[set_type.replace(' ', '')])

View File

@ -1,5 +1,6 @@
# coding=utf-8
import datetime
import sys
import time
from collections import OrderedDict
import wrapcache
@ -46,7 +47,10 @@ class getQueueCount:
:return:
"""
if sys.version_info.major is 2:
new_train_date = filter(None, str(time.asctime(time.strptime(self.station_dates, "%Y-%m-%d"))).split(" "))
else:
new_train_date = list(filter(None, str(time.asctime(time.strptime(self.station_dates, "%Y-%m-%d"))).split(" ")))
data = OrderedDict()
data['train_date'] = "{0} {1} 0{2} {3} 00:00:00 GMT+0800 (中国标准时间)".format(
new_train_date[0],

View File

@ -1,5 +1,6 @@
# coding=utf-8
import datetime
import sys
import time
from collections import OrderedDict
@ -56,7 +57,10 @@ class getQueueCountAsync:
- _json_att 没啥卵用还是带上吧
:return:
"""
if sys.version_info.major is 2:
new_train_date = filter(None, str(time.asctime(time.strptime(self.station_dates, "%Y-%m-%d"))).split(" "))
else:
new_train_date = list(filter(None, str(time.asctime(time.strptime(self.station_dates, "%Y-%m-%d"))).split(" ")))
data = OrderedDict()
data['train_date'] = "{0} {1} {2} {3} 00:00:00 GMT+0800 (中国标准时间)".format(
new_train_date[0],

View File

@ -95,7 +95,7 @@ class query:
continue
value = station_ticket.get("data", "")
if not value:
print (u'{0}-{1} 车次坐席查询为空,ip网络异常查询url: https://kyfw.12306.cn{2}, 可以手动查询是否有票'.format(self.from_station_h,
print(u'{0}-{1} 车次坐席查询为空,ip网络异常查询url: https://kyfw.12306.cn{2}, 可以手动查询是否有票'.format(self.from_station_h,
self.to_station_h,
select_url["req_url"]))
else:
@ -103,7 +103,7 @@ class query:
if result:
for i in value['result']:
ticket_info = i.split('|')
if ticket_info[11] == "Y" and ticket_info[1].encode("utf8") == "预订": # 筛选未在开始时间内的车次
if ticket_info[11] == "Y" and ticket_info[1] == "预订": # 筛选未在开始时间内的车次
for j in self._station_seat:
is_ticket_pass = ticket_info[j]
if is_ticket_pass != '' and is_ticket_pass != '' and is_ticket_pass != '*' and self.check_is_need_train(

View File

@ -4,6 +4,7 @@ import time
from config.TicketEnmu import ticket
from config.emailConf import sendEmail
from config.pushbearConf import sendPushBear
from myException.ticketIsExitsException import ticketIsExitsException
from myException.ticketNumOutException import ticketNumOutException
@ -42,6 +43,8 @@ class queryOrderWaitTime:
if data and data.get("orderId", ""):
sendEmail(ticket.WAIT_ORDER_SUCCESS.format(
data.get("orderId", "")))
sendPushBear(ticket.WAIT_ORDER_SUCCESS.format(
data.get("orderId", "")))
raise ticketIsExitsException(ticket.WAIT_ORDER_SUCCESS.format(
data.get("orderId")))
elif data.get("msg", False):

View File

@ -19,7 +19,10 @@ class submitOrderRequest:
def __init__(self, session, secretStr, from_station, to_station, train_no, set_type,
passengerTicketStrList, oldPassengerStr, train_date, ticke_peoples):
self.session = session
self.secretStr = secretStr
try:
self.secretStr = urllib.unquote(secretStr)
except AttributeError:
self.secretStr = urllib.parse.unquote(secretStr)
self.from_station = from_station
self.to_station = to_station
self.to_station = to_station
@ -34,7 +37,7 @@ class submitOrderRequest:
"""
:return:
"""
data = [('secretStr', urllib.unquote(self.secretStr)), # 字符串加密
data = [('secretStr', self.secretStr), # 字符串加密
('train_date', self.train_date), # 出发时间
('back_train_date', time()), # 返程时间
('tour_flag', 'dc'), # 旅途类型

BIN
tkcode.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB