Переглянути джерело

Merge branch 'master' of http://47.100.18.120:3000/LiuQin/CinemaDemo

lt14 7 роки тому
батько
коміт
e352737525
30 змінених файлів з 1657 додано та 160 видалено
  1. 992 0
      .idea/workspace.xml
  2. 7 0
      src/main/java/com/example/cinema/bl/ScheduleService.java
  3. 23 0
      src/main/java/com/example/cinema/bl/VIPService.java
  4. 2 1
      src/main/java/com/example/cinema/blImpl/AccountServiceImpl.java
  5. 2 1
      src/main/java/com/example/cinema/blImpl/HallServiceImpl.java
  6. 7 3
      src/main/java/com/example/cinema/blImpl/MovieServiceImpl.java
  7. 112 61
      src/main/java/com/example/cinema/blImpl/ScheduleServiceImpl.java
  8. 94 0
      src/main/java/com/example/cinema/blImpl/VIPServiceImpl.java
  9. 1 1
      src/main/java/com/example/cinema/controller/AccountController.java
  10. 5 0
      src/main/java/com/example/cinema/controller/ScheduleController.java
  11. 40 0
      src/main/java/com/example/cinema/controller/VIPCardController.java
  12. 2 2
      src/main/java/com/example/cinema/data/MovieLikeMapper.java
  13. 1 1
      src/main/java/com/example/cinema/data/MovieLikeMapper.xml
  14. 11 3
      src/main/java/com/example/cinema/data/ScheduleMapper.java
  15. 12 2
      src/main/java/com/example/cinema/data/ScheduleMapper.xml
  16. 21 0
      src/main/java/com/example/cinema/data/VIPCardMapper.java
  17. 2 3
      src/main/java/com/example/cinema/po/DateLike.java
  18. 0 82
      src/main/java/com/example/cinema/po/Schedule.java
  19. 73 0
      src/main/java/com/example/cinema/po/VIPCard.java
  20. 25 0
      src/main/java/com/example/cinema/strategy/ChargeStrategy.java
  21. 28 0
      src/main/java/com/example/cinema/strategy/ReturnStrategy.java
  22. 12 0
      src/main/java/com/example/cinema/vo/ScheduleForm.java
  23. 43 0
      src/main/java/com/example/cinema/vo/VIPCardForm.java
  24. 31 0
      src/main/java/com/example/cinema/vo/VIPInfoVO.java
  25. 34 0
      src/test/java/com/example/cinema/bl/VIPServiceImplTest.java
  26. BIN
      target/classes/com/example/cinema/bl/ScheduleService.class
  27. BIN
      target/classes/com/example/cinema/controller/ScheduleController.class
  28. BIN
      target/classes/com/example/cinema/data/ScheduleMapper.class
  29. 77 0
      target/classes/com/example/cinema/data/ScheduleMapper.xml
  30. BIN
      target/classes/com/example/cinema/vo/ScheduleForm.class

+ 992 - 0
.idea/workspace.xml

@@ -0,0 +1,992 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ChangeListManager">
+    <list default="true" id="6ab6cf33-62bd-48c1-935e-834777603958" name="Default Changelist" comment="">
+      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/example/cinema/bl/AccountServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/example/cinema/bl/impl/AccountServiceImpl.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/example/cinema/bl/HallServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/example/cinema/bl/impl/HallServiceImpl.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/example/cinema/bl/MovieServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/example/cinema/bl/impl/MovieServiceImpl.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/java/com/example/cinema/controller/AccountController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/example/cinema/controller/AccountController.java" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/target/classes/com/example/cinema/bl/ScheduleServiceImpl.class" beforeDir="false" afterPath="$PROJECT_DIR$/target/classes/com/example/cinema/bl/ScheduleServiceImpl.class" afterDir="false" />
+    </list>
+    <ignored path="$PROJECT_DIR$/target/" />
+    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
+    <option name="SHOW_DIALOG" value="false" />
+    <option name="HIGHLIGHT_CONFLICTS" value="true" />
+    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
+    <option name="LAST_RESOLUTION" value="IGNORE" />
+  </component>
+  <component name="CompilerWorkspaceConfiguration">
+    <option name="MAKE_PROJECT_ON_SAVE" value="true" />
+  </component>
+  <component name="DatabaseView">
+    <option name="SHOW_INTERMEDIATE" value="true" />
+    <option name="GROUP_DATA_SOURCES" value="true" />
+    <option name="GROUP_SCHEMA" value="true" />
+    <option name="GROUP_CONTENTS" value="false" />
+    <option name="SORT_POSITIONED" value="false" />
+    <option name="SHOW_EMPTY_GROUPS" value="false" />
+    <option name="AUTO_SCROLL_FROM_SOURCE" value="false" />
+    <option name="HIDDEN_KINDS">
+      <set />
+    </option>
+    <expand>
+      <path>
+        <item name="Database" type="3277223f:DatabaseStructure$DbRootGroup" />
+        <item name="cinema" type="feb32156:DbDataSourceImpl" />
+      </path>
+      <path>
+        <item name="Database" type="3277223f:DatabaseStructure$DbRootGroup" />
+        <item name="cinema" type="feb32156:DbDataSourceImpl" />
+        <item name="schemas" type="d4e8921:DatabaseStructure$FamilyGroup" />
+      </path>
+      <path>
+        <item name="Database" type="3277223f:DatabaseStructure$DbRootGroup" />
+        <item name="cinema" type="feb32156:DbDataSourceImpl" />
+        <item name="schemas" type="d4e8921:DatabaseStructure$FamilyGroup" />
+        <item name="cinema: schema" type="c314c289:MysqlImplModel$Schema" />
+      </path>
+    </expand>
+    <select />
+  </component>
+  <component name="FUSProjectUsageTrigger">
+    <session id="-1657780334">
+      <usages-collector id="statistics.lifecycle.project">
+        <counts>
+          <entry key="project.closed" value="9" />
+          <entry key="project.open.time.1" value="4" />
+          <entry key="project.open.time.11" value="1" />
+          <entry key="project.open.time.13" value="1" />
+          <entry key="project.open.time.2" value="2" />
+          <entry key="project.open.time.8" value="1" />
+          <entry key="project.opened" value="9" />
+        </counts>
+      </usages-collector>
+      <usages-collector id="statistics.file.extensions.open">
+        <counts>
+          <entry key="gitignore" value="1" />
+          <entry key="hall" value="2" />
+          <entry key="java" value="168" />
+          <entry key="movie" value="8" />
+          <entry key="movie_like" value="1" />
+          <entry key="schedule" value="16" />
+          <entry key="sql" value="11" />
+          <entry key="user" value="2" />
+          <entry key="view" value="1" />
+          <entry key="xml" value="23" />
+          <entry key="yml" value="5" />
+        </counts>
+      </usages-collector>
+      <usages-collector id="statistics.file.types.open">
+        <counts>
+          <entry key="Database Element" value="30" />
+          <entry key="JAVA" value="168" />
+          <entry key="PLAIN_TEXT" value="1" />
+          <entry key="Scratch" value="11" />
+          <entry key="XML" value="23" />
+          <entry key="YAML" value="5" />
+        </counts>
+      </usages-collector>
+      <usages-collector id="statistics.file.extensions.edit">
+        <counts>
+          <entry key="cell" value="112" />
+          <entry key="dummy" value="8" />
+          <entry key="gitignore" value="6" />
+          <entry key="java" value="5752" />
+          <entry key="sql" value="614" />
+          <entry key="txt" value="12" />
+          <entry key="xml" value="961" />
+          <entry key="yml" value="34" />
+        </counts>
+      </usages-collector>
+      <usages-collector id="statistics.file.types.edit">
+        <counts>
+          <entry key="JAVA" value="5752" />
+          <entry key="PLAIN_TEXT" value="26" />
+          <entry key="SQL" value="59" />
+          <entry key="Scratch" value="726" />
+          <entry key="XML" value="902" />
+          <entry key="YAML" value="34" />
+        </counts>
+      </usages-collector>
+    </session>
+  </component>
+  <component name="FileEditorManager">
+    <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/controller/ScheduleController.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="420">
+              <caret line="28" column="37" selection-start-line="28" selection-start-column="37" selection-end-line="28" selection-end-column="37" />
+              <folding>
+                <element signature="imports" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/data/ScheduleMapper.xml">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="345">
+              <caret line="23" column="15" selection-start-line="23" selection-start-column="15" selection-end-line="23" selection-end-column="15" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="true">
+        <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/bl/ScheduleServiceImpl.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="160">
+              <caret line="136" lean-forward="true" selection-start-line="136" selection-end-line="136" />
+              <folding>
+                <element signature="imports" expanded="true" />
+                <element signature="method#searchScheduleSevenDays#0;class#ScheduleServiceImpl#0" />
+                <element signature="method#setScheduleView#0;class#ScheduleServiceImpl#0" />
+                <element signature="method#preCheck#0;class#ScheduleServiceImpl#0" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/vo/ScheduleBatchDeleteForm.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="120">
+              <caret line="8" column="13" selection-start-line="8" selection-start-column="13" selection-end-line="8" selection-end-column="13" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/bl/ScheduleService.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="735">
+              <caret line="49" column="15" selection-start-line="49" selection-start-column="15" selection-end-line="49" selection-end-column="15" />
+              <folding>
+                <element signature="imports" expanded="true" />
+              </folding>
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$APPLICATION_CONFIG_DIR$/consoles/db/b10fd3be-0173-48f3-8d0f-883ecd8b2fcd/console.sql">
+          <provider selected="true" editor-type-id="text-editor" />
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="das://b10fd3be-0173-48f3-8d0f-883ecd8b2fcd/schema/cinema/table/schedule">
+          <provider selected="true" editor-type-id="com.intellij.database.editor.DatabaseTableFileEditorProvider">
+            <state>
+              <filtering enabled="true" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/bl/impl/AccountServiceImpl.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="135">
+              <caret line="15" column="13" selection-start-line="15" selection-start-column="13" selection-end-line="15" selection-end-column="13" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/bl/impl/HallServiceImpl.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="135">
+              <caret line="13" column="13" selection-start-line="13" selection-start-column="13" selection-end-line="13" selection-end-column="13" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file pinned="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/bl/impl/MovieServiceImpl.java">
+          <provider selected="true" editor-type-id="text-editor">
+            <state relative-caret-position="135">
+              <caret line="17" column="13" selection-start-line="17" selection-start-column="13" selection-end-line="17" selection-end-column="13" />
+            </state>
+          </provider>
+        </entry>
+      </file>
+    </leaf>
+  </component>
+  <component name="FileTemplateManagerImpl">
+    <option name="RECENT_TEMPLATES">
+      <list>
+        <option value="HTML File" />
+        <option value="CSS File" />
+        <option value="JavaScript File" />
+        <option value="Interface" />
+        <option value="JUnit4 Test Class" />
+        <option value="Class" />
+      </list>
+    </option>
+  </component>
+  <component name="FindInProjectRecents">
+    <findStrings>
+      <find>System.out.println</find>
+      <find>Audience</find>
+    </findStrings>
+  </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$/src/main/java/com/example/cinema/controller/ViewController.java" />
+        <option value="$PROJECT_DIR$/src/main/resources/static/js/index.js" />
+        <option value="$PROJECT_DIR$/src/main/resources/static/css/common.css" />
+        <option value="$PROJECT_DIR$/src/main/resources/templates/adminCinemaManage.html" />
+        <option value="$PROJECT_DIR$/src/main/resources/templates/adminCinemaStatistic.html" />
+        <option value="$PROJECT_DIR$/src/main/resources/templates/adminMovieDetail.html" />
+        <option value="$PROJECT_DIR$/src/main/resources/templates/adminMovieManage.html" />
+        <option value="$PROJECT_DIR$/src/main/resources/templates/adminPromotionManage.html" />
+        <option value="$PROJECT_DIR$/src/main/resources/templates/adminSessionManage.html" />
+        <option value="$PROJECT_DIR$/src/main/resources/static/js/adminCinemaManage.js" />
+        <option value="$PROJECT_DIR$/src/main/resources/static/css/cinemaHall.css" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/vo/UserVO.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/data/MovieLikeMapper.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/data/MovieMapper.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/vo/DateLikeForm.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/data/AccountMapper.xml" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/controller/AccountController.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/bl/AccountService.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/bl/AccountServiceImpl.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/data/AccountMapper.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/vo/HallVO.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/bl/MovieServiceImpl.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/interceptor/SessionInterceptor.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/bl/HallService.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/bl/HallServiceImpl.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/controller/HallController.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/controller/MovieController.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/vo/ScheduleVO.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/vo/ScheduleItem.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/vo/ScheduleSearchForm.java" />
+        <option value="$PROJECT_DIR$/.gitignore" />
+        <option value="$PROJECT_DIR$/src/main/resources/application.yml" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/data/HallMapper.xml" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/data/HallMapper.java" />
+        <option value="$APPLICATION_CONFIG_DIR$/consoles/db/56491842-8c26-426b-a604-02dce7d52d03/console.sql" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/vo/ViewDaysForm.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/vo/ScheduleViewForm.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/vo/ScheduleBatchDeleteForm.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/po/Schedule.java" />
+        <option value="$PROJECT_DIR$/src/test/java/com/example/cinema/bl/ScheduleServiceImplTest.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/vo/ScheduleForm.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/controller/ScheduleController.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/bl/ScheduleService.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/data/ScheduleMapper.java" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/data/ScheduleMapper.xml" />
+        <option value="$PROJECT_DIR$/src/main/java/com/example/cinema/bl/ScheduleServiceImpl.java" />
+      </list>
+    </option>
+  </component>
+  <component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
+  <component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER" />
+  <component name="JsFlowSettings">
+    <service-enabled>true</service-enabled>
+    <exe-path />
+    <other-services-enabled>true</other-services-enabled>
+    <auto-save>true</auto-save>
+  </component>
+  <component name="JsGulpfileManager">
+    <detection-done>true</detection-done>
+    <sorting>DEFINITION_ORDER</sorting>
+  </component>
+  <component name="ProjectFrameBounds">
+    <option name="x" value="46" />
+    <option name="y" value="23" />
+    <option name="width" value="1234" />
+    <option name="height" value="777" />
+  </component>
+  <component name="ProjectLevelVcsManager" settingsEditedManually="true">
+    <ConfirmationsSetting value="2" id="Add" />
+  </component>
+  <component name="ProjectView">
+    <navigator proportions="" version="1">
+      <hideEmptyPackages ProjectPane="false" />
+      <foldersAlwaysOnTop value="true" />
+    </navigator>
+    <panes>
+      <pane id="PackagesPane">
+        <subPane>
+          <expand>
+            <path>
+              <item name="cinema" type="58d84e3e:PackageViewProjectNode" />
+              <item name="cinema" type="616d4139:PackageViewModuleNode" />
+            </path>
+          </expand>
+          <select />
+        </subPane>
+      </pane>
+      <pane id="ProjectPane">
+        <subPane>
+          <expand>
+            <path>
+              <item name="CinemaDemo" type="b2602c69:ProjectViewProjectNode" />
+              <item name="CinemaDemo" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="CinemaDemo" type="b2602c69:ProjectViewProjectNode" />
+              <item name="CinemaDemo" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="CinemaDemo" type="b2602c69:ProjectViewProjectNode" />
+              <item name="CinemaDemo" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="CinemaDemo" type="b2602c69:ProjectViewProjectNode" />
+              <item name="CinemaDemo" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+              <item name="java" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="CinemaDemo" type="b2602c69:ProjectViewProjectNode" />
+              <item name="CinemaDemo" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+              <item name="java" type="462c0819:PsiDirectoryNode" />
+              <item name="com" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="CinemaDemo" type="b2602c69:ProjectViewProjectNode" />
+              <item name="CinemaDemo" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+              <item name="java" type="462c0819:PsiDirectoryNode" />
+              <item name="com" type="462c0819:PsiDirectoryNode" />
+              <item name="example" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="CinemaDemo" type="b2602c69:ProjectViewProjectNode" />
+              <item name="CinemaDemo" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+              <item name="java" type="462c0819:PsiDirectoryNode" />
+              <item name="com" type="462c0819:PsiDirectoryNode" />
+              <item name="example" type="462c0819:PsiDirectoryNode" />
+              <item name="cinema" type="462c0819:PsiDirectoryNode" />
+            </path>
+            <path>
+              <item name="CinemaDemo" type="b2602c69:ProjectViewProjectNode" />
+              <item name="CinemaDemo" type="462c0819:PsiDirectoryNode" />
+              <item name="src" type="462c0819:PsiDirectoryNode" />
+              <item name="main" type="462c0819:PsiDirectoryNode" />
+              <item name="java" type="462c0819:PsiDirectoryNode" />
+              <item name="com" type="462c0819:PsiDirectoryNode" />
+              <item name="example" type="462c0819:PsiDirectoryNode" />
+              <item name="cinema" type="462c0819:PsiDirectoryNode" />
+              <item name="bl" type="462c0819:PsiDirectoryNode" />
+            </path>
+          </expand>
+          <select />
+        </subPane>
+      </pane>
+      <pane id="Scope" />
+    </panes>
+  </component>
+  <component name="PropertiesComponent">
+    <property name="DatabaseDriversLRU" value="mysql" />
+    <property name="DefaultHtmlFileTemplate" value="HTML File" />
+    <property name="JavaScriptWeakerCompletionTypeGuess" value="true" />
+    <property name="RequestMappingsPanelOrder0" value="0" />
+    <property name="RequestMappingsPanelOrder1" value="1" />
+    <property name="RequestMappingsPanelWidth0" value="75" />
+    <property name="RequestMappingsPanelWidth1" value="75" />
+    <property name="WebServerToolWindowFactoryState" value="false" />
+    <property name="aspect.path.notification.shown" value="true" />
+    <property name="com.android.tools.idea.instantapp.provision.ProvisionBeforeRunTaskProvider.myTimeStamp" value="1555224980104" />
+    <property name="com.intellij.testIntegration.createTest.CreateTestDialog.defaultLibrary" value="JUnit4" />
+    <property name="com.intellij.testIntegration.createTest.CreateTestDialog.defaultLibrarySuperClass.JUnit4" value="" />
+    <property name="database.console.LAST_STATE" value="false" />
+    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
+    <property name="list.type.of.created.stylesheet" value="CSS" />
+    <property name="nodejs_interpreter_path.stuck_in_default_project" value="/usr/local/bin/node" />
+    <property name="nodejs_npm_path_reset_for_default_project" value="true" />
+    <property name="settings.editor.selected.configurable" value="project.propCompiler" />
+  </component>
+  <component name="RecentsManager">
+    <key name="CreateTestDialog.RecentsKey">
+      <recent name="com.example.cinema.bl" />
+    </key>
+    <key name="MoveClassesOrPackagesDialog.RECENTS_KEY">
+      <recent name="com.example.cinema.po" />
+      <recent name="com.example.cinema.vo" />
+    </key>
+    <key name="CreateTestDialog.Recents.Supers">
+      <recent name="" />
+    </key>
+    <key name="CopyFile.RECENT_KEYS">
+      <recent name="$PROJECT_DIR$/src/main/resources/static/images" />
+    </key>
+  </component>
+  <component name="RunDashboard">
+    <option name="ruleStates">
+      <list>
+        <RuleState>
+          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
+        </RuleState>
+        <RuleState>
+          <option name="name" value="StatusDashboardGroupingRule" />
+        </RuleState>
+      </list>
+    </option>
+  </component>
+  <component name="RunManager" selected="Spring Boot.CinemaApplication">
+    <configuration name="ScheduleServiceImplTest" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
+      <module name="cinema" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="com.example.cinema.blImpl.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <option name="PACKAGE_NAME" value="com.example.cinema.bl" />
+      <option name="MAIN_CLASS_NAME" value="com.example.cinema.bl.ScheduleServiceImplTest" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration name="ScheduleServiceImplTest.deleteBatchOfSchedule" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
+      <module name="cinema" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="com.example.cinema.blImpl.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <option name="PACKAGE_NAME" value="com.example.cinema.bl" />
+      <option name="MAIN_CLASS_NAME" value="com.example.cinema.bl.ScheduleServiceImplTest" />
+      <option name="METHOD_NAME" value="deleteBatchOfSchedule" />
+      <option name="TEST_OBJECT" value="method" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration name="ScheduleServiceImplTest.searchScheduleSevenDays" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
+      <module name="cinema" />
+      <extension name="coverage">
+        <pattern>
+          <option name="PATTERN" value="com.example.cinema.blImpl.*" />
+          <option name="ENABLED" value="true" />
+        </pattern>
+      </extension>
+      <option name="PACKAGE_NAME" value="com.example.cinema.bl" />
+      <option name="MAIN_CLASS_NAME" value="com.example.cinema.bl.ScheduleServiceImplTest" />
+      <option name="METHOD_NAME" value="searchScheduleSevenDays" />
+      <option name="TEST_OBJECT" value="method" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration name="CinemaApplication (1)" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
+      <module name="CinemaDemo" />
+      <option name="SPRING_BOOT_MAIN_CLASS" value="com.example.cinema.CinemaApplication" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <configuration name="CinemaApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
+      <module name="CinemaDemo" />
+      <option name="SPRING_BOOT_MAIN_CLASS" value="com.example.cinema.CinemaApplication" />
+      <option name="ALTERNATIVE_JRE_PATH" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
+    <list>
+      <item itemvalue="Spring Boot.CinemaApplication" />
+      <item itemvalue="Spring Boot.CinemaApplication (1)" />
+      <item itemvalue="JUnit.ScheduleServiceImplTest.searchScheduleSevenDays" />
+      <item itemvalue="JUnit.ScheduleServiceImplTest" />
+      <item itemvalue="JUnit.ScheduleServiceImplTest.deleteBatchOfSchedule" />
+    </list>
+    <recent_temporary>
+      <list>
+        <item itemvalue="JUnit.ScheduleServiceImplTest.deleteBatchOfSchedule" />
+        <item itemvalue="JUnit.ScheduleServiceImplTest.searchScheduleSevenDays" />
+        <item itemvalue="JUnit.ScheduleServiceImplTest" />
+      </list>
+    </recent_temporary>
+  </component>
+  <component name="SvnConfiguration">
+    <configuration />
+  </component>
+  <component name="TaskManager">
+    <task active="true" id="Default" summary="Default task">
+      <changelist id="6ab6cf33-62bd-48c1-935e-834777603958" name="Default Changelist" comment="" />
+      <created>1554901806328</created>
+      <option name="number" value="Default" />
+      <option name="presentableId" value="Default" />
+      <updated>1554901806328</updated>
+      <workItem from="1554901808817" duration="665000" />
+      <workItem from="1554961600361" duration="4582000" />
+      <workItem from="1554967154163" duration="4136000" />
+      <workItem from="1555049499640" duration="7967000" />
+      <workItem from="1555075438175" duration="2603000" />
+      <workItem from="1555085752711" duration="4527000" />
+      <workItem from="1555133493417" duration="10139000" />
+      <workItem from="1555218060031" duration="273000" />
+      <workItem from="1555219773177" duration="330000" />
+      <workItem from="1555220261237" duration="2930000" />
+      <workItem from="1555307878450" duration="39000" />
+    </task>
+    <servers />
+  </component>
+  <component name="TestHistory">
+    <history-entry file="ScheduleServiceImplTest_deleteBatchOfSchedule - 2019.04.13 at 16h 26m 52s.xml">
+      <configuration name="ScheduleServiceImplTest.deleteBatchOfSchedule" configurationId="JUnit" />
+    </history-entry>
+    <history-entry file="ScheduleServiceImplTest_deleteBatchOfSchedule - 2019.04.13 at 16h 33m 15s.xml">
+      <configuration name="ScheduleServiceImplTest.deleteBatchOfSchedule" configurationId="JUnit" />
+    </history-entry>
+    <history-entry file="ScheduleServiceImplTest_deleteBatchOfSchedule - 2019.04.13 at 16h 49m 52s.xml">
+      <configuration name="ScheduleServiceImplTest.deleteBatchOfSchedule" configurationId="JUnit" />
+    </history-entry>
+    <history-entry file="ScheduleServiceImplTest_deleteBatchOfSchedule - 2019.04.13 at 16h 55m 54s.xml">
+      <configuration name="ScheduleServiceImplTest.deleteBatchOfSchedule" configurationId="JUnit" />
+    </history-entry>
+    <history-entry file="ScheduleServiceImplTest_deleteBatchOfSchedule - 2019.04.13 at 16h 56m 56s.xml">
+      <configuration name="ScheduleServiceImplTest.deleteBatchOfSchedule" configurationId="JUnit" />
+    </history-entry>
+    <history-entry file="ScheduleServiceImplTest_deleteBatchOfSchedule - 2019.04.13 at 16h 59m 20s.xml">
+      <configuration name="ScheduleServiceImplTest.deleteBatchOfSchedule" configurationId="JUnit" />
+    </history-entry>
+    <history-entry file="ScheduleServiceImplTest_deleteBatchOfSchedule - 2019.04.13 at 16h 59m 56s.xml">
+      <configuration name="ScheduleServiceImplTest.deleteBatchOfSchedule" configurationId="JUnit" />
+    </history-entry>
+    <history-entry file="ScheduleServiceImplTest_deleteBatchOfSchedule - 2019.04.13 at 17h 02m 13s.xml">
+      <configuration name="ScheduleServiceImplTest.deleteBatchOfSchedule" configurationId="JUnit" />
+    </history-entry>
+    <history-entry file="ScheduleServiceImplTest_deleteBatchOfSchedule - 2019.04.13 at 17h 03m 14s.xml">
+      <configuration name="ScheduleServiceImplTest.deleteBatchOfSchedule" configurationId="JUnit" />
+    </history-entry>
+    <history-entry file="ScheduleServiceImplTest_deleteBatchOfSchedule - 2019.04.13 at 17h 08m 37s.xml">
+      <configuration name="ScheduleServiceImplTest.deleteBatchOfSchedule" configurationId="JUnit" />
+    </history-entry>
+  </component>
+  <component name="TimeTrackingManager">
+    <option name="totallyTimeSpent" value="45655000" />
+  </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="46" y="23" width="1234" height="777" extended-state="0" />
+    <layout>
+      <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.21728188" />
+      <window_info id="Structure" order="1" side_tool="true" weight="0.25" />
+      <window_info id="Designer" order="2" />
+      <window_info id="Image Layers" order="3" />
+      <window_info id="Capture Tool" order="4" />
+      <window_info id="UI Designer" order="5" />
+      <window_info id="Favorites" order="6" side_tool="true" />
+      <window_info id="Web" order="7" side_tool="true" />
+      <window_info anchor="bottom" id="Problems" order="0" />
+      <window_info anchor="bottom" id="Message" order="1" />
+      <window_info anchor="bottom" id="Find" order="2" weight="0.32876712" />
+      <window_info anchor="bottom" id="Run" order="3" weight="0.30821916" />
+      <window_info anchor="bottom" id="Debug" order="4" weight="0.4" />
+      <window_info anchor="bottom" id="Cvs" order="5" weight="0.25" />
+      <window_info anchor="bottom" id="Inspection" order="6" weight="0.4" />
+      <window_info anchor="bottom" id="TODO" order="7" weight="0.32876712" />
+      <window_info anchor="bottom" id="Spring" order="8" />
+      <window_info anchor="bottom" id="Terminal" order="9" visible="true" weight="0.3591241" />
+      <window_info anchor="bottom" id="Docker" order="10" show_stripe_button="false" />
+      <window_info anchor="bottom" id="Event Log" order="11" sideWeight="0.50080776" side_tool="true" weight="0.32876712" />
+      <window_info anchor="bottom" id="Messages" order="12" weight="0.32876712" />
+      <window_info anchor="bottom" id="Java Enterprise" order="13" />
+      <window_info anchor="bottom" id="Database Changes" order="14" />
+      <window_info anchor="bottom" id="Version Control" order="15" show_stripe_button="false" sideWeight="0.49919224" weight="0.32876712" />
+      <window_info anchor="bottom" id="FindBugs-IDEA" order="16" />
+      <window_info anchor="bottom" id="Database Console" order="17" weight="0.32739726" />
+      <window_info anchor="bottom" id="Run with VisualVM" order="18" />
+      <window_info anchor="bottom" id="Debug with VisualVM" order="19" />
+      <window_info anchor="right" id="Commander" order="0" weight="0.4" />
+      <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
+      <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
+      <window_info anchor="right" id="Maven" order="3" />
+      <window_info anchor="right" id="Palette" order="4" />
+      <window_info anchor="right" id="Capture Analysis" order="5" />
+      <window_info anchor="right" id="Database" order="6" visible="true" weight="0.22567114" />
+      <window_info anchor="right" id="Palette&#9;" order="7" />
+      <window_info anchor="right" id="Theme Preview" order="8" />
+      <window_info anchor="right" id="Bean Validation" order="9" />
+      <window_info anchor="right" id="Mongo Explorer" order="10" />
+      <window_info anchor="right" id="Maven Projects" order="11" />
+    </layout>
+  </component>
+  <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>
+  <component name="editorHistoryManager">
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/bl/HallService.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="195">
+          <caret line="13" column="15" selection-start-line="13" selection-start-column="15" selection-end-line="13" selection-end-column="15" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="jar://$USER_HOME$/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/src.zip!/java/util/Calendar.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="461">
+          <caret line="467" column="28" selection-start-line="467" selection-start-column="28" selection-end-line="467" selection-end-column="28" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/.idea/dataSources.local.xml" />
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/vo/MovieVO.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="120">
+          <caret line="8" column="13" selection-start-line="8" selection-start-column="13" selection-end-line="8" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="das://56491842-8c26-426b-a604-02dce7d52d03/schema/cinema/table/user">
+      <provider selected="true" editor-type-id="com.intellij.database.editor.DatabaseTableFileEditorProvider">
+        <state>
+          <filtering enabled="true" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/.gitignore">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/.idea/workspace.xml">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/resources/application.yml">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/vo/ScheduleSearchForm.java" />
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/data/MovieMapper.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="135">
+          <caret line="27" column="12" selection-start-line="27" selection-start-column="12" selection-end-line="27" selection-end-column="12" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/data/HallMapper.xml">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="90">
+          <caret line="6" column="30" selection-start-line="6" selection-start-column="16" selection-end-line="6" selection-end-column="30" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/data/MovieMapper.xml">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="480">
+          <caret line="32" column="62" lean-forward="true" selection-start-line="28" selection-start-column="8" selection-end-line="32" selection-end-column="62" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/data/HallMapper.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="300">
+          <caret line="23" column="36" selection-start-line="23" selection-start-column="36" selection-end-line="23" selection-end-column="36" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="das://56491842-8c26-426b-a604-02dce7d52d03/schema/cinema/table/movie">
+      <provider selected="true" editor-type-id="com.intellij.database.editor.DatabaseTableFileEditorProvider">
+        <state>
+          <filtering enabled="true" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/vo/ScheduleViewForm.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="135">
+          <caret line="9" column="29" selection-start-line="9" selection-start-column="29" selection-end-line="9" selection-end-column="29" />
+          <folding>
+            <element signature="e#195#196#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/controller/ViewController.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="435">
+          <caret line="45" column="5" selection-start-line="45" selection-start-column="5" selection-end-line="45" selection-end-column="5" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/vo/ScheduleVO.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="240">
+          <caret line="20" selection-start-line="20" selection-end-line="20" />
+          <folding>
+            <element signature="imports" expanded="true" />
+            <element signature="e#406#407#0" expanded="true" />
+            <element signature="e#445#446#0" expanded="true" />
+            <element signature="e#521#522#0" expanded="true" />
+            <element signature="e#577#578#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$APPLICATION_CONFIG_DIR$/consoles/db/56491842-8c26-426b-a604-02dce7d52d03/console.sql">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="135">
+          <caret line="9" selection-start-line="9" selection-end-line="12" selection-end-column="74" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="das://56491842-8c26-426b-a604-02dce7d52d03/schema/cinema/table/view">
+      <provider selected="true" editor-type-id="com.intellij.database.editor.DatabaseTableFileEditorProvider">
+        <state>
+          <filtering enabled="true" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/controller/MovieController.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="-225">
+          <caret line="8" column="7" selection-start-line="8" selection-start-column="7" selection-end-line="8" selection-end-column="7" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/controller/HallController.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="60">
+          <caret line="9" column="7" selection-start-line="9" selection-start-column="7" selection-end-line="9" selection-end-column="7" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/controller/FileController.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="135">
+          <caret line="23" column="13" selection-start-line="23" selection-start-column="13" selection-end-line="23" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/controller/AccountController.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="21">
+          <caret line="19" column="13" selection-start-line="19" selection-start-column="13" selection-end-line="19" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/po/User.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="90">
+          <caret line="6" column="13" selection-start-line="6" selection-start-column="13" selection-end-line="6" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/vo/ScheduleItem.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="103">
+          <caret line="8" column="13" selection-start-line="8" selection-start-column="13" selection-end-line="8" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/po/Schedule.java" />
+    <entry file="das://56491842-8c26-426b-a604-02dce7d52d03/schema/cinema/table/schedule">
+      <provider selected="true" editor-type-id="com.intellij.database.editor.DatabaseTableFileEditorProvider">
+        <state>
+          <filtering enabled="true" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/CinemaApplication.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="195">
+          <caret line="13" selection-start-line="13" selection-end-line="13" />
+          <folding>
+            <element signature="imports" expanded="true" />
+            <element signature="e#250#251#0" expanded="true" />
+            <element signature="e#318#319#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/controller/VIPCardController.java">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/test/java/com/example/cinema/bl/ScheduleServiceImplTest.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="420">
+          <caret line="28" column="40" selection-start-line="28" selection-start-column="40" selection-end-line="28" selection-end-column="40" />
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/vo/ResponseVO.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="540">
+          <caret line="36" column="29" selection-start-line="36" selection-start-column="29" selection-end-line="36" selection-end-column="29" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/vo/ScheduleForm.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="810">
+          <caret line="74" column="28" selection-start-line="74" selection-start-column="28" selection-end-line="74" selection-end-column="28" />
+          <folding>
+            <element signature="e#1248#1249#0" expanded="true" />
+            <element signature="e#1285#1286#0" expanded="true" />
+            <element signature="e#1313#1314#0" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/form/VIPCardForm.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="135">
+          <caret line="9" column="7" selection-start-line="9" selection-start-column="7" selection-end-line="9" selection-end-column="7" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/data/ScheduleMapper.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="110">
+          <caret line="36" column="28" selection-start-line="36" selection-start-column="28" selection-end-line="36" selection-end-column="28" />
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/controller/ScheduleController.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="420">
+          <caret line="28" column="37" selection-start-line="28" selection-start-column="37" selection-end-line="28" selection-end-column="37" />
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/data/ScheduleMapper.xml">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="345">
+          <caret line="23" column="15" selection-start-line="23" selection-start-column="15" selection-end-line="23" selection-end-column="15" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/vo/ScheduleBatchDeleteForm.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="120">
+          <caret line="8" column="13" selection-start-line="8" selection-start-column="13" selection-end-line="8" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/bl/ScheduleService.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="735">
+          <caret line="49" column="15" selection-start-line="49" selection-start-column="15" selection-end-line="49" selection-end-column="15" />
+          <folding>
+            <element signature="imports" expanded="true" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$APPLICATION_CONFIG_DIR$/consoles/db/b10fd3be-0173-48f3-8d0f-883ecd8b2fcd/console.sql">
+      <provider selected="true" editor-type-id="text-editor" />
+    </entry>
+    <entry file="das://b10fd3be-0173-48f3-8d0f-883ecd8b2fcd/schema/cinema/table/schedule">
+      <provider selected="true" editor-type-id="com.intellij.database.editor.DatabaseTableFileEditorProvider">
+        <state>
+          <filtering enabled="true" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/bl/impl/AccountServiceImpl.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="135">
+          <caret line="15" column="13" selection-start-line="15" selection-start-column="13" selection-end-line="15" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/bl/impl/HallServiceImpl.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="135">
+          <caret line="13" column="13" selection-start-line="13" selection-start-column="13" selection-end-line="13" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/bl/impl/MovieServiceImpl.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="135">
+          <caret line="17" column="13" selection-start-line="17" selection-start-column="13" selection-end-line="17" selection-end-column="13" />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/src/main/java/com/example/cinema/bl/ScheduleServiceImpl.java">
+      <provider selected="true" editor-type-id="text-editor">
+        <state relative-caret-position="160">
+          <caret line="136" lean-forward="true" selection-start-line="136" selection-end-line="136" />
+          <folding>
+            <element signature="imports" expanded="true" />
+            <element signature="method#searchScheduleSevenDays#0;class#ScheduleServiceImpl#0" />
+            <element signature="method#setScheduleView#0;class#ScheduleServiceImpl#0" />
+            <element signature="method#preCheck#0;class#ScheduleServiceImpl#0" />
+          </folding>
+        </state>
+      </provider>
+    </entry>
+  </component>
+  <component name="masterDetails">
+    <states>
+      <state key="ProjectJDKs.UI">
+        <settings>
+          <last-edited>9.0</last-edited>
+          <splitter-proportions>
+            <option name="proportions">
+              <list>
+                <option value="0.2" />
+              </list>
+            </option>
+          </splitter-proportions>
+        </settings>
+      </state>
+    </states>
+  </component>
+</project>

+ 7 - 0
src/main/java/com/example/cinema/bl/ScheduleService.java

@@ -41,4 +41,11 @@ public interface ScheduleService {
      * @return
      */
     ResponseVO deleteBatchOfSchedule(ScheduleBatchDeleteForm scheduleBatchDeleteForm);
+
+    /**
+     * 修改排片信息
+     * @param scheduleForm
+     * @return
+     */
+    ResponseVO updateSchedule(ScheduleForm scheduleForm);
 }

+ 23 - 0
src/main/java/com/example/cinema/bl/VIPService.java

@@ -0,0 +1,23 @@
+package com.example.cinema.bl;
+
+import com.example.cinema.vo.VIPCardForm;
+import com.example.cinema.vo.ResponseVO;
+
+
+
+/**
+ * Created by liying on 2019/4/14.
+ */
+
+public interface VIPService {
+
+    ResponseVO addVIPCard(int userId);
+
+    ResponseVO getCardById(int id);
+
+    ResponseVO getVIPInfo();
+
+    ResponseVO charge(VIPCardForm vipCardForm);
+
+
+}

+ 2 - 1
src/main/java/com/example/cinema/bl/AccountServiceImpl.java → src/main/java/com/example/cinema/blImpl/AccountServiceImpl.java

@@ -1,5 +1,6 @@
-package com.example.cinema.bl;
+package com.example.cinema.blImpl;
 
+import com.example.cinema.bl.AccountService;
 import com.example.cinema.data.AccountMapper;
 import com.example.cinema.vo.UserForm;
 import com.example.cinema.vo.ResponseVO;

+ 2 - 1
src/main/java/com/example/cinema/bl/HallServiceImpl.java → src/main/java/com/example/cinema/blImpl/HallServiceImpl.java

@@ -1,5 +1,6 @@
-package com.example.cinema.bl;
+package com.example.cinema.blImpl;
 
+import com.example.cinema.bl.HallService;
 import com.example.cinema.data.HallMapper;
 import com.example.cinema.vo.ResponseVO;
 import org.springframework.beans.factory.annotation.Autowired;

+ 7 - 3
src/main/java/com/example/cinema/bl/MovieServiceImpl.java → src/main/java/com/example/cinema/blImpl/MovieServiceImpl.java

@@ -1,5 +1,7 @@
-package com.example.cinema.bl;
+package com.example.cinema.blImpl;
 
+import com.example.cinema.bl.MovieService;
+import com.example.cinema.data.AccountMapper;
 import com.example.cinema.data.MovieLikeMapper;
 import com.example.cinema.data.MovieMapper;
 
@@ -24,6 +26,8 @@ public class MovieServiceImpl implements MovieService {
     private MovieMapper movieMapper;
     @Autowired
     private MovieLikeMapper movieLikeMapper;
+    @Autowired
+    private AccountMapper accountMapper;
 
     @Override
     public ResponseVO addMovie(MovieForm addMovieForm) {
@@ -59,6 +63,7 @@ public class MovieServiceImpl implements MovieService {
 
     @Override
     public ResponseVO likeMovie(int userId, int movieId) {
+
         //todo: user 判空
         if (userLikeTheMovie(userId, movieId)) {
             return ResponseVO.buildFailure(ALREADY_LIKE_ERROR_MESSAGE);
@@ -81,8 +86,7 @@ public class MovieServiceImpl implements MovieService {
             return ResponseVO.buildFailure(MOVIE_NOT_EXIST_ERROR_MESSAGE);
         }
         try {
-            movieLikeMapper.deleteOneLike(movieId, userId);
-            return ResponseVO.buildSuccess(movieLikeMapper.deleteOneLike(userId, movieId));
+            return ResponseVO.buildSuccess(movieLikeMapper.deleteOneLike(movieId, userId));
         } catch (Exception e) {
             e.printStackTrace();
             return ResponseVO.buildFailure("失败");

+ 112 - 61
src/main/java/com/example/cinema/bl/ScheduleServiceImpl.java → src/main/java/com/example/cinema/blImpl/ScheduleServiceImpl.java

@@ -1,5 +1,6 @@
-package com.example.cinema.bl;
+package com.example.cinema.blImpl;
 
+import com.example.cinema.bl.ScheduleService;
 import com.example.cinema.data.HallMapper;
 import com.example.cinema.data.MovieMapper;
 import com.example.cinema.data.ScheduleMapper;
@@ -9,10 +10,8 @@ import org.springframework.stereotype.Service;
 
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+
 /**
  * @author fjj
  * @date 2019/4/11 4:14 PM
@@ -40,46 +39,31 @@ public class ScheduleServiceImpl implements ScheduleService {
     @Override
     public ResponseVO addSchedule(ScheduleForm scheduleForm) {
         try {
-            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
-
-            // 处理排片跨天错误
-            if(!simpleDateFormat.format(scheduleForm.getStartTime()).equals(simpleDateFormat.format(scheduleForm.getEndTime()))){
-                return ResponseVO.buildFailure(CROSS_DAYS_ERROR_MESSAGE);
-            }
-
-            //检查影厅是否存在
-            if(hallMapper.selectHallById(scheduleForm.getHallId()) == null){
-                return ResponseVO.buildFailure(HALL_NOT_EXIST_ERROR_MESSAGE);
-            }
-
-            // 检查电影是否存在
-            MovieVO movieVO = movieMapper.selectMovieById(scheduleForm.getMovieId());
-            if(movieVO == null){
-                return ResponseVO.buildFailure(MOVIE_NOT_EXIST_ERROR_MESSAGE);
-            }
-
-            // 检查电影的上映时间是否和排片时间匹配
-            if(scheduleForm.getStartTime().before(movieVO.getStartDate())){
-                return ResponseVO.buildFailure(BEFORE_START_DATE_ERROR_MESSAGE);
+            ResponseVO responseVO = preCheck(scheduleForm);
+            if(!responseVO.getSuccess()){
+                return responseVO;
             }
+            scheduleMapper.insertOneSchedule(scheduleForm);
+            return ResponseVO.buildSuccess();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return ResponseVO.buildFailure("失败");
+        }
+    }
 
-            // 校验排片时间段合法性
-            int minutes = movieVO.getLength();
-            Calendar calendarStartTime = Calendar.getInstance();
-            calendarStartTime.setTime(scheduleForm.getStartTime());
-            calendarStartTime.add(Calendar.MINUTE, minutes);
-            Date endTime = calendarStartTime.getTime();
-            if(scheduleForm.getEndTime().before(endTime)){
-                return ResponseVO.buildFailure(DATE_INTERVAL_LESS_THAN_LENGTH_ERROR_MESSAGE);
+    @Override
+    public ResponseVO updateSchedule(ScheduleForm scheduleForm) {
+        try {
+            ResponseVO responseVO = preCheck(scheduleForm);
+            if(!responseVO.getSuccess()){
+                return responseVO;
             }
-
-            // 检查该排片时间段是否和其他排片信息冲突
-            if(0 != scheduleMapper.selectScheduleConflictByHallIdAndTime(scheduleForm.getHallId(), scheduleForm.getStartTime(), scheduleForm.getEndTime()).size()){
-                return ResponseVO.buildFailure(TIME_CONFLICT_ERROR_MESSAGE);
+            //在修改时要检查想要修改的排片信息是否已被观众可见,若可见则无法修改
+            if(isAudienceCanView(Arrays.asList(scheduleForm.getId()))){
+                return ResponseVO.buildFailure(VIEW_CONFLICT_ERROR_MESSAGE);
             }
 
-            //插入排片信息
-            scheduleMapper.insertOneSchedule(scheduleForm);
+            scheduleMapper.updateScheduleById(scheduleForm);
             return ResponseVO.buildSuccess();
         } catch (Exception e) {
             e.printStackTrace();
@@ -93,20 +77,14 @@ public class ScheduleServiceImpl implements ScheduleService {
             // 处理查询表单的起止时间
             SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
             startDate = simpleDateFormat.parse(simpleDateFormat.format(startDate));
-
-            Calendar calendarStartDate = Calendar.getInstance();
-            calendarStartDate.setTime(startDate);
-            calendarStartDate.add(Calendar.DAY_OF_YEAR, 7);
-            Date endDate = calendarStartDate.getTime();
+            Date endDate = getNumDayAfterDate(startDate, 7);
 
             // 按照日期整理ScheduleItem
             List<ScheduleItem> scheduleItemList = scheduleMapper.selectSchedule(hallId, startDate, endDate);
             List<ScheduleVO> scheduleVOList = new ArrayList<>();
 
             for(int i = 0; i < 7; i++){
-                calendarStartDate.setTime(startDate);
-                calendarStartDate.add(Calendar.DAY_OF_YEAR, i);
-                Date date = calendarStartDate.getTime();
+                Date date = getNumDayAfterDate(startDate, i);
                 ScheduleVO scheduleVO = new ScheduleVO();
                 scheduleVO.setDate(date);
                 List<ScheduleItem> scheduleItems = new ArrayList<>();
@@ -158,19 +136,8 @@ public class ScheduleServiceImpl implements ScheduleService {
                 return ResponseVO.buildFailure(ID_LIST_NULL_ERROR_MESSAGE);
             }
 
-            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
-            Date today = simpleDateFormat.parse(simpleDateFormat.format(new Date()));
-            Calendar calendarStartTime = Calendar.getInstance();
-            calendarStartTime.setTime(today);
-            calendarStartTime.add(Calendar.DAY_OF_YEAR, scheduleMapper.selectView());
-            Date endDate = calendarStartTime.getTime();
-
-            List<ScheduleItem> scheduleList = scheduleMapper.selectScheduleBatch(scheduleIdList);
-            for(ScheduleItem s : scheduleList){
-                if(s.getEndTime().before(endDate) && s.getEndTime().after(today)){
-                    return ResponseVO.buildFailure(VIEW_CONFLICT_ERROR_MESSAGE);
-                }
-
+            if(isAudienceCanView(scheduleIdList)){
+                return ResponseVO.buildFailure(VIEW_CONFLICT_ERROR_MESSAGE);
             }
             scheduleMapper.deleteScheduleBatch(scheduleIdList);
             return ResponseVO.buildSuccess();
@@ -179,4 +146,88 @@ public class ScheduleServiceImpl implements ScheduleService {
             return ResponseVO.buildFailure("失败");
         }
     }
+
+
+
+    /**
+     * 获得num天后的日期
+     * @param oldDate
+     * @param num
+     * @return
+     * @throws ParseException
+     */
+    Date getNumDayAfterDate(Date oldDate, int num) throws ParseException {
+        Calendar calendarTime = Calendar.getInstance();
+        calendarTime.setTime(oldDate);
+        calendarTime.add(Calendar.DAY_OF_YEAR, num);
+        return calendarTime.getTime();
+    }
+
+
+    /**
+     * 新增或修改排片信息的公共前置检查
+     * @param scheduleForm
+     * @return
+     */
+    ResponseVO preCheck(ScheduleForm scheduleForm){
+        try {
+            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+
+            // 处理排片跨天错误
+            if(!simpleDateFormat.format(scheduleForm.getStartTime()).equals(simpleDateFormat.format(scheduleForm.getEndTime()))){
+                return ResponseVO.buildFailure(CROSS_DAYS_ERROR_MESSAGE);
+            }
+
+            //检查影厅是否存在
+            if(hallMapper.selectHallById(scheduleForm.getHallId()) == null){
+                return ResponseVO.buildFailure(HALL_NOT_EXIST_ERROR_MESSAGE);
+            }
+
+            // 检查电影是否存在
+            MovieVO movieVO = movieMapper.selectMovieById(scheduleForm.getMovieId());
+            if(movieVO == null){
+                return ResponseVO.buildFailure(MOVIE_NOT_EXIST_ERROR_MESSAGE);
+            }
+
+            // 检查电影的上映时间是否和排片时间匹配
+            if(scheduleForm.getStartTime().before(movieVO.getStartDate())){
+                return ResponseVO.buildFailure(BEFORE_START_DATE_ERROR_MESSAGE);
+            }
+
+            // 校验排片时间段合法性
+            int minutes = movieVO.getLength();
+            Calendar calendarStartTime = Calendar.getInstance();
+            calendarStartTime.setTime(scheduleForm.getStartTime());
+            calendarStartTime.add(Calendar.MINUTE, minutes);
+            Date endTime = calendarStartTime.getTime();
+            if(scheduleForm.getEndTime().before(endTime)){
+                return ResponseVO.buildFailure(DATE_INTERVAL_LESS_THAN_LENGTH_ERROR_MESSAGE);
+            }
+
+            // 检查该排片时间段是否和其他排片信息冲突
+            int id = scheduleForm.getId() == null? 0 : scheduleForm.getId();
+            if(0 != scheduleMapper.selectScheduleConflictByHallIdAndTime(scheduleForm.getHallId(), scheduleForm.getStartTime(), scheduleForm.getEndTime(),id).size()){
+                return ResponseVO.buildFailure(TIME_CONFLICT_ERROR_MESSAGE);
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return ResponseVO.buildSuccess();
+    }
+
+    boolean isAudienceCanView(List<Integer> scheduleIdList) throws ParseException {
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        Date today = simpleDateFormat.parse(simpleDateFormat.format(new Date()));
+        Date endDate = getNumDayAfterDate(today, scheduleMapper.selectView());
+
+        List<ScheduleItem> scheduleList = scheduleMapper.selectScheduleBatch(scheduleIdList);
+        for(ScheduleItem s : scheduleList){
+            if(s.getEndTime().before(endDate) && s.getEndTime().after(today)){
+                return true;
+            }
+
+        }
+
+        return false;
+    }
 }

+ 94 - 0
src/main/java/com/example/cinema/blImpl/VIPServiceImpl.java

@@ -0,0 +1,94 @@
+package com.example.cinema.blImpl;
+
+import com.example.cinema.bl.VIPService;
+import com.example.cinema.data.VIPCardMapper;
+import com.example.cinema.vo.VIPCardForm;
+import com.example.cinema.po.VIPCard;
+import com.example.cinema.strategy.ChargeStrategy;
+import com.example.cinema.strategy.ReturnStrategy;
+import com.example.cinema.vo.ResponseVO;
+import com.example.cinema.vo.VIPInfoVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Created by liying on 2019/4/14.
+ */
+@Service
+public class VIPServiceImpl implements VIPService {
+    @Autowired
+    VIPCardMapper vipCardMapper;
+
+    @Override
+    public ResponseVO addVIPCard(int userId) {
+        VIPCard vipCard = new VIPCard();
+        vipCard.setUserId(userId);
+        vipCard.setBalance(0);
+        try {
+            return ResponseVO.buildSuccess(vipCardMapper.insertOneCard(vipCard));
+        } catch (Exception e) {
+            e.printStackTrace();
+            return ResponseVO.buildFailure("失败");
+        }
+    }
+
+    @Override
+    public ResponseVO getCardById(int id) {
+        try {
+            return ResponseVO.buildSuccess(vipCardMapper.selectCardById(id));
+        } catch (Exception e) {
+            e.printStackTrace();
+            return ResponseVO.buildFailure("失败");
+        }
+    }
+
+    @Override
+    public ResponseVO getVIPInfo() {
+        List<ChargeStrategy> strategies = new ArrayList<>();
+        strategies.add(new ReturnStrategy());
+        VIPInfoVO vipInfoVO = new VIPInfoVO();
+        vipInfoVO.setStrategies(strategies);
+        vipInfoVO.setPrice(VIPCard.price);
+        return ResponseVO.buildSuccess(vipInfoVO);
+    }
+
+    @Override
+    public ResponseVO charge(VIPCardForm vipCardForm) {
+        if (vipCardForm.getStrategyName() == null) {
+            return ResponseVO.buildFailure("充值优惠策略不能为空");
+        }
+        ChargeStrategy chargeStrategy;
+        try {
+            Class c = Class.forName(vipCardForm.getStrategyName());
+            //如果是抽象类或接口
+            if (Modifier.isAbstract(c.getModifiers()) || Modifier.isInterface(c.getModifiers())) {
+                return ResponseVO.buildFailure("充值优惠策略不存在");
+            }
+            chargeStrategy = (ChargeStrategy) c.newInstance();
+        } catch (ClassNotFoundException e) {
+            return ResponseVO.buildFailure("充值优惠策略不存在");
+        } catch (IllegalAccessException e) {
+            chargeStrategy = new ReturnStrategy();
+        } catch (InstantiationException e) {
+            chargeStrategy = new ReturnStrategy();
+        }
+        VIPCard vipCard=vipCardMapper.selectCardById(vipCardForm.getVipId());
+        if(vipCard==null){
+            return ResponseVO.buildFailure("会员卡不存在");
+        }
+        double balance = chargeStrategy.calculate(vipCardForm.getAmount());
+        vipCard.setBalance(vipCard.getBalance()+balance);
+        try {
+            return ResponseVO.buildSuccess(vipCardMapper.updateCardBalance(vipCardForm.getVipId(),balance));
+        } catch (Exception e) {
+            e.printStackTrace();
+            return ResponseVO.buildFailure("失败");
+        }
+    }
+
+
+}

+ 1 - 1
src/main/java/com/example/cinema/controller/AccountController.java

@@ -1,6 +1,6 @@
 package com.example.cinema.controller;
 
-import com.example.cinema.bl.AccountServiceImpl;
+import com.example.cinema.blImpl.AccountServiceImpl;
 import com.example.cinema.config.InterceptorConfiguration;
 import com.example.cinema.vo.UserForm;
 import com.example.cinema.vo.ResponseVO;

+ 5 - 0
src/main/java/com/example/cinema/controller/ScheduleController.java

@@ -24,6 +24,11 @@ public class ScheduleController {
         return scheduleService.addSchedule(scheduleForm);
     }
 
+    @RequestMapping(value = "/schedule/update", method = RequestMethod.POST)
+    public ResponseVO updateSchedule(@RequestBody ScheduleForm scheduleForm){
+        return scheduleService.updateSchedule(scheduleForm);
+    }
+
     @RequestMapping(value = "/schedule/search", method = RequestMethod.GET)
     public ResponseVO searchSchedule(@RequestParam int hallId, @RequestParam Date startDate){
         //这里传递startDate参数时,前端传的是用/分隔的时间,例如startDate=2019/04/12

+ 40 - 0
src/main/java/com/example/cinema/controller/VIPCardController.java

@@ -0,0 +1,40 @@
+package com.example.cinema.controller;
+
+import com.example.cinema.bl.VIPService;
+import com.example.cinema.vo.VIPCardForm;
+import com.example.cinema.vo.ResponseVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * Created by liying on 2019/4/14.
+ */
+@RestController()
+@RequestMapping("/vip")
+public class VIPCardController {
+    @Autowired
+    VIPService vipService;
+
+    @PostMapping("/add")
+    public ResponseVO addVIP(@RequestParam int userId){
+        return vipService.addVIPCard(userId);
+    }
+    @GetMapping("{id}/get")
+    public ResponseVO getVIP(@PathVariable int id){
+        return vipService.getCardById(id);
+    }
+
+    @GetMapping("/getVIPInfo")
+    public ResponseVO getVIPInfo(){
+        return vipService.getVIPInfo();
+    }
+
+    @PostMapping("/charge")
+    public ResponseVO charge(@RequestBody VIPCardForm vipCardForm){
+        return vipService.charge(vipCardForm);
+    }
+
+
+
+
+}

+ 2 - 2
src/main/java/com/example/cinema/data/MovieLikeMapper.java

@@ -1,6 +1,6 @@
 package com.example.cinema.data;
 
-import com.example.cinema.vo.DateLikeForm;
+import com.example.cinema.po.DateLike;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -49,5 +49,5 @@ public interface MovieLikeMapper {
      * @param movieId
      * @return
      */
-    List<DateLikeForm> getDateLikeNum(@Param("movieId") int movieId);
+    List<DateLike> getDateLikeNum(@Param("movieId") int movieId);
 }

+ 1 - 1
src/main/java/com/example/cinema/data/MovieLikeMapper.xml

@@ -22,7 +22,7 @@
         select count(*) as like_num ,DATE(like_time) as `time` from movie_like ml where movie_id=#{movieId} GROUP BY DATE(ml.like_time)
     </select>
 
-    <resultMap id="MovieLike" type="com.example.cinema.vo.DateLikeForm">
+    <resultMap id="MovieLike" type="com.example.cinema.po.DateLike">
         <result column="time" property="likeTime"></result>
         <result column="like_num" property="likeNum"></result>
     </resultMap>

+ 11 - 3
src/main/java/com/example/cinema/data/ScheduleMapper.java

@@ -1,6 +1,6 @@
 package com.example.cinema.data;
 
-import com.example.cinema.po.Schedule;
+
 import com.example.cinema.vo.ScheduleForm;
 import com.example.cinema.vo.ScheduleItem;
 import com.example.cinema.vo.ScheduleViewForm;
@@ -34,13 +34,14 @@ public interface ScheduleMapper {
 
 
     /**
-     * 查询起止时间是否有冲突
+     * 查询起止时间是否有冲突(不包括与自身的冲突)
      * @param hallId
      * @param startTime
      * @param endTime
+     * @param id
      * @return
      */
-    List<ScheduleItem> selectScheduleConflictByHallIdAndTime(@Param("hallId") int hallId, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
+    List<ScheduleItem> selectScheduleConflictByHallIdAndTime(@Param("hallId") int hallId, @Param("startTime") Date startTime, @Param("endTime") Date endTime, @Param("id") int id);
 
     /**
      * 插入观众可见排片限制
@@ -80,4 +81,11 @@ public interface ScheduleMapper {
      * @return
      */
     int selectView();
+
+    /**
+     * 根据id修改排片信息
+     * @param scheduleForm
+     * @return
+     */
+    int updateScheduleById(ScheduleForm scheduleForm);
 }

+ 12 - 2
src/main/java/com/example/cinema/data/ScheduleMapper.xml

@@ -18,9 +18,12 @@
     <select id="selectScheduleConflictByHallIdAndTime" resultMap="ScheduleItem">
       select * from schedule
         where hall_id = #{hallId}
-          and (#{startTime} between start_time and end_time)
+          <if test="#{id} != null">
+              and id != #{id}
+          </if>
+          and ((#{startTime} between start_time and end_time)
           or (#{endTime} between start_time and end_time)
-          or (start_time between #{startTime} and #{endTime})
+          or (start_time between #{startTime} and #{endTime}))
     </select>
 
     <insert id="insertOneView" parameterType="com.example.cinema.vo.ScheduleViewForm"
@@ -54,6 +57,13 @@
         select day from view limit 1
     </select>
 
+    <update id="updateScheduleById" parameterType="com.example.cinema.vo.ScheduleForm">
+        update schedule set hall_id = #{hallId}, movie_id = #{movieId}, start_time = #{startTime},
+          end_time = #{endTime}, fare = #{fare}
+          where id = #{id}
+
+    </update>
+
     <resultMap id="ScheduleItem" type="com.example.cinema.vo.ScheduleItem">
         <id column="id" property="id"></id>
         <result column="hall_id" property="hallId"></result>

+ 21 - 0
src/main/java/com/example/cinema/data/VIPCardMapper.java

@@ -0,0 +1,21 @@
+package com.example.cinema.data;
+
+import com.example.cinema.po.VIPCard;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * Created by liying on 2019/4/14.
+ */
+@Mapper
+public interface VIPCardMapper {
+
+    int insertOneCard(VIPCard vipCard);
+
+    VIPCard selectCardById(int id);
+
+    VIPCard updateCardBalance(@Param("id") int id,@Param("balance") double balance);
+
+
+
+}

+ 2 - 3
src/main/java/com/example/cinema/vo/DateLikeForm.java → src/main/java/com/example/cinema/po/DateLike.java

@@ -1,13 +1,12 @@
-package com.example.cinema.vo;
+package com.example.cinema.po;
 
-import lombok.Data;
 
 import java.sql.Date;
 
 /**
  * Created by liying on 2019/3/23.
  */
-public class DateLikeForm {
+public class DateLike {
     /**
      * 喜爱人数
      */

+ 0 - 82
src/main/java/com/example/cinema/po/Schedule.java

@@ -1,82 +0,0 @@
-package com.example.cinema.po;
-
-import java.util.Date;
-
-/**
- * @author fjj
- * @date 2019/4/13 4:16 PM
- */
-public class Schedule {
-    /**
-     * 排片id
-     */
-    private Integer id;
-    /**
-     * 影厅id
-     */
-    private Integer hallId;
-    /**
-     * 电影id
-     */
-    private Integer movieId;
-    /**
-     *  电影开始放映的时间
-     */
-    private Date startTime;
-    /**
-     * 电影结束放映的时间
-     */
-    private Date endTime;
-    /**
-     * 电影票价
-     */
-    private Double fare;
-
-    public Integer getId() {
-        return id;
-    }
-
-    public void setId(Integer id) {
-        this.id = id;
-    }
-
-    public Integer getHallId() {
-        return hallId;
-    }
-
-    public void setHallId(Integer hallId) {
-        this.hallId = hallId;
-    }
-
-    public Integer getMovieId() {
-        return movieId;
-    }
-
-    public void setMovieId(Integer movieId) {
-        this.movieId = movieId;
-    }
-
-    public Date getStartTime() {
-        return startTime;
-    }
-
-    public void setStartTime(Date startTime) {
-        this.startTime = startTime;
-    }
-
-    public Date getEndTime() {
-        return endTime;
-    }
-
-    public void setEndTime(Date endTime) {
-        this.endTime = endTime;
-    }
-
-    public Double getFare() {
-        return fare;
-    }
-
-    public void setFare(Double fare) {
-        this.fare = fare;
-    }
-}

+ 73 - 0
src/main/java/com/example/cinema/po/VIPCard.java

@@ -0,0 +1,73 @@
+package com.example.cinema.po;
+
+
+import com.example.cinema.strategy.ChargeStrategy;
+
+import java.sql.Timestamp;
+
+/**
+ * Created by liying on 2019/4/14.
+ */
+
+public class VIPCard {
+
+    public static final double price = 25;
+
+    /**
+     * 用户id
+     */
+    private int userId;
+
+    /**
+     * 会员卡id
+     */
+    private int id;
+
+    /**
+     * 会员卡余额
+     */
+    private double balance;
+
+    /**
+     * 办卡日期
+     */
+    private Timestamp joinDate;
+
+
+    public VIPCard() {
+
+    }
+
+
+    public int getUserId() {
+        return userId;
+    }
+
+    public void setUserId(int userId) {
+        this.userId = userId;
+    }
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public double getBalance() {
+        return balance;
+    }
+
+    public void setBalance(double balance) {
+        this.balance = balance;
+    }
+
+    public Timestamp getJoinDate() {
+        return joinDate;
+    }
+
+    public void setJoinDate(Timestamp joinDate) {
+        this.joinDate = joinDate;
+    }
+}

+ 25 - 0
src/main/java/com/example/cinema/strategy/ChargeStrategy.java

@@ -0,0 +1,25 @@
+package com.example.cinema.strategy;
+
+/**
+ * Created by liying on 2019/4/14.
+ */
+public interface ChargeStrategy {
+    /**
+     * 充值策略描述
+     * @return
+     */
+    String getDescription();
+
+    /**
+     * 计算充值金额
+     * @param amount
+     * @return
+     */
+    double calculate(double amount);
+
+    /**
+     * 获得类名
+     * @return
+     */
+    String getName();
+}

+ 28 - 0
src/main/java/com/example/cinema/strategy/ReturnStrategy.java

@@ -0,0 +1,28 @@
+package com.example.cinema.strategy;
+
+/**
+ * Created by liying on 2019/4/14.
+ */
+public class ReturnStrategy implements ChargeStrategy {
+    private String description="满200送30";
+
+    private String className="ReturnStrategy";
+
+
+    @Override
+    public String getDescription() {
+        return description;
+    }
+
+    @Override
+    public double calculate(double amount) {
+        return (int)(amount/200)*30+amount;
+
+    }
+
+    @Override
+    public String getName() {
+        return className;
+    }
+
+}

+ 12 - 0
src/main/java/com/example/cinema/vo/ScheduleForm.java

@@ -7,6 +7,10 @@ import java.util.Date;
  * @date 2019/4/11 4:09 PM
  */
 public class ScheduleForm {
+    /**
+     * id
+     */
+    private Integer id;
     /**
      * 影厅id
      */
@@ -67,4 +71,12 @@ public class ScheduleForm {
     public void setFare(Double fare) {
         this.fare = fare;
     }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
 }

+ 43 - 0
src/main/java/com/example/cinema/vo/VIPCardForm.java

@@ -0,0 +1,43 @@
+package com.example.cinema.vo;
+
+/**
+ * Created by liying on 2019/4/14.
+ */
+public class VIPCardForm {
+
+    /**
+     * vip卡id
+     */
+    private int vipId;
+
+    /**
+     * 付款金额
+     */
+    private int amount;
+
+    private String strategyName;
+
+    public int getVipId() {
+        return vipId;
+    }
+
+    public void setVipId(int vipId) {
+        this.vipId = vipId;
+    }
+
+    public int getAmount() {
+        return amount;
+    }
+
+    public void setAmount(int amount) {
+        this.amount = amount;
+    }
+
+    public String getStrategyName() {
+        return strategyName;
+    }
+
+    public void setStrategyName(String strategyName) {
+        strategyName = strategyName;
+    }
+}

+ 31 - 0
src/main/java/com/example/cinema/vo/VIPInfoVO.java

@@ -0,0 +1,31 @@
+package com.example.cinema.vo;
+
+import com.example.cinema.strategy.ChargeStrategy;
+
+import java.util.List;
+
+/**
+ * Created by liying on 2019/4/15.
+ */
+public class VIPInfoVO {
+
+    List<ChargeStrategy> strategies;
+
+    double price;
+
+    public List<ChargeStrategy> getStrategies() {
+        return strategies;
+    }
+
+    public void setStrategies(List<ChargeStrategy> strategies) {
+        this.strategies = strategies;
+    }
+
+    public double getPrice() {
+        return price;
+    }
+
+    public void setPrice(double price) {
+        this.price = price;
+    }
+}

+ 34 - 0
src/test/java/com/example/cinema/bl/VIPServiceImplTest.java

@@ -0,0 +1,34 @@
+package com.example.cinema.bl;
+
+import com.example.cinema.vo.VIPCardForm;
+import com.example.cinema.vo.ResponseVO;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+
+/**
+ * Created by liying on 2019/4/14.
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class VIPServiceImplTest {
+    @Autowired
+    VIPService vipService;
+
+    @Test
+    public void addVIPCard() throws Exception {
+        VIPCardForm vipCardForm=new VIPCardForm();
+        vipCardForm.setUserId(13);
+        vipCardForm.setAmount(300);
+    }
+
+    @Test
+    public void getCardById() throws Exception {
+        ResponseVO vo=vipService.getCardById(2);
+        vo.getContent();
+    }
+
+}

BIN
target/classes/com/example/cinema/bl/ScheduleService.class


BIN
target/classes/com/example/cinema/controller/ScheduleController.class


BIN
target/classes/com/example/cinema/data/ScheduleMapper.class


+ 77 - 0
target/classes/com/example/cinema/data/ScheduleMapper.xml

@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.example.cinema.data.ScheduleMapper">
+    <insert id="insertOneSchedule" parameterType="com.example.cinema.vo.ScheduleForm"
+            useGeneratedKeys="true" keyProperty="id">
+        insert into schedule(hall_id, movie_id, start_time, end_time, fare)
+        values(#{hallId}, #{movieId}, #{startTime}, #{endTime}, #{fare})
+    </insert>
+
+    <select id="selectSchedule" resultMap="ScheduleItem">
+        select * from
+          (select * from schedule where hall_id = #{hallId} and start_time between #{startDate} and #{endDate}) s,
+          (select name as movie_name, id as movie_id from movie) m,
+          (select name as hall_name, id as hall_id from hall) h
+            where s.movie_id = m.movie_id and s.hall_id = h.hall_id
+    </select>
+
+    <select id="selectScheduleConflictByHallIdAndTime" resultMap="ScheduleItem">
+      select * from schedule
+        where hall_id = #{hallId}
+          <if test="#{id} != null">
+              and id != #{id}
+          </if>
+          and ((#{startTime} between start_time and end_time)
+          or (#{endTime} between start_time and end_time)
+          or (start_time between #{startTime} and #{endTime}))
+    </select>
+
+    <insert id="insertOneView" parameterType="com.example.cinema.vo.ScheduleViewForm"
+            useGeneratedKeys="true" keyProperty="id">
+        insert into view(day) values(#{day})
+    </insert>
+
+    <update id="updateOneView" parameterType="com.example.cinema.vo.ScheduleViewForm">
+        update view set day = #{day}
+    </update>
+
+    <select id="selectViewCount" resultType="int">
+      select count(*) as num from view
+    </select>
+
+    <delete id="deleteScheduleBatch" parameterType="java.util.List">
+        delete from schedule where id in
+        <foreach collection="list" index="index" item="item" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+    </delete>
+
+    <select id="selectScheduleBatch" parameterType="java.util.List" resultMap="ScheduleItem">
+        select * from schedule where id in
+        <foreach collection="list" index="index" item="item" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+    </select>
+
+    <select id="selectView" resultType="int">
+        select day from view limit 1
+    </select>
+
+    <update id="updateScheduleById" parameterType="com.example.cinema.vo.ScheduleForm">
+        update schedule set hall_id = #{hallId}, movie_id = #{movieId}, start_time = #{startTime},
+          end_time = #{endTime}, fare = #{fare}
+          where id = #{id}
+
+    </update>
+
+    <resultMap id="ScheduleItem" type="com.example.cinema.vo.ScheduleItem">
+        <id column="id" property="id"></id>
+        <result column="hall_id" property="hallId"></result>
+        <result column="movie_id" property="movieId"></result>
+        <result column="start_time" property="startTime"></result>
+        <result column="end_time" property="endTime"></result>
+        <result column="movie_name" property="movieName"></result>
+        <result column="hall_name" property="hallName"></result>
+    </resultMap>
+
+</mapper>

BIN
target/classes/com/example/cinema/vo/ScheduleForm.class