liujie
2023-10-10 29bd4d946349eacd38442c07ebf15b470af92e82
Merge remote-tracking branch 'origin/master'

# Conflicts:
# cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/platformIncome.html
35个文件已修改
1个文件已删除
12个文件已添加
3864 ■■■■ 已修改文件
.idea/workspace.xml 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-account/src/test/java/com/dsh/AccountApplicationTests.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/course/mapper/StoreMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/GameDataController.java 119 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/GateDataController.java 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/OperatorController.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/OperatorUserController.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/BallController.java 375 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/AccuracyGameDataOne.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/AccuracyGameOne.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CityGame.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/OperatorUser.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/MethodDto.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IStoreService.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/StoreServiceImpl.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/resources/TOperatorUserMapper.xml 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/resources/mapper/TStoreMapper.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/ball_pre_add.html 192 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/ball_pre_edit.html 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/cancel.html 206 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/join.html 189 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue.html 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue_add.html 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue_edit.html 354 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue_info.html 384 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/course/course.html 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_add.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_edit.html 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/gameData/GameData.html 141 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/gateData/GateData.html 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/operator/Operator.html 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/operator/OperatorUser_proportion.html 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/operator/OperatorUser_proportionAuth.html 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/operatorUser/OperatorUser.html 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/operatorUser/OperatorUser_auth.html 308 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/operatorUser/OperatorUser_proportion.html 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/operatorUser/OperatorUser_proportionAuth.html 125 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_add.html 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/ball/yuyue.js 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/ball/yuyue_info.js 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage.js 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/gameData/gameData.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/gateData/gateData.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/operator/operator.js 106 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-management/src/main/webapp/static/modular/system/operatorUser/operatorUser.js 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/java/com/dsh/other/controller/BallController.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cloud-server-other/src/main/resources/mapper/GameMapper.xml 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/workspace.xml
@@ -25,13 +25,26 @@
    <select />
  </component>
  <component name="ChangeListManager">
    <list default="true" id="cb08d02f-fd4f-4fa2-85fe-abd508fa83ac" name="Default Changelist" comment="10.8">
    <list default="true" id="cb08d02f-fd4f-4fa2-85fe-abd508fa83ac" name="Default Changelist" comment="10.8。1">
      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/service/impl/CourseCounsumServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/service/impl/CourseCounsumServiceImpl.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/mapper/StoreMapper.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/course/mapper/StoreMapper.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/BallController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/BallController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IStoreService.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IStoreService.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/StoreServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/StoreServiceImpl.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/resources/mapper/TStoreMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/resources/mapper/TStoreMapper.xml" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/ball_pre_add.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/ball_pre_add.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/ball_pre_edit.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/ball_pre_edit.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue_add.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue_add.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_add.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_add.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_edit.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_edit.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_add.html" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_add.html" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/ball/yuyue.js" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/ball/yuyue.js" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/ball/yuyue_info.js" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/ball/yuyue_info.js" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/entity/SiteBooking.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/entity/SiteBooking.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage.js" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage.js" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/controller/BallController.java" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/java/com/dsh/other/controller/BallController.java" afterDir="false" />
      <change beforePath="$PROJECT_DIR$/cloud-server-other/src/main/resources/mapper/GameMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/cloud-server-other/src/main/resources/mapper/GameMapper.xml" afterDir="false" />
    </list>
    <option name="SHOW_DIALOG" value="false" />
    <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -79,43 +92,43 @@
    <option name="hideEmptyMiddlePackages" value="true" />
    <option name="showLibraryContents" value="true" />
  </component>
  <component name="PropertiesComponent">{
  &quot;keyToString&quot;: {
    &quot;DefaultHtmlFileTemplate&quot;: &quot;HTML File&quot;,
    &quot;RequestMappingsPanelOrder0&quot;: &quot;0&quot;,
    &quot;RequestMappingsPanelOrder1&quot;: &quot;1&quot;,
    &quot;RequestMappingsPanelWidth0&quot;: &quot;75&quot;,
    &quot;RequestMappingsPanelWidth1&quot;: &quot;75&quot;,
    &quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
    &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
    &quot;WebServerToolWindowFactoryState&quot;: &quot;false&quot;,
    &quot;git-widget-placeholder&quot;: &quot;master&quot;,
    &quot;ignore.virus.scanning.warn.message&quot;: &quot;true&quot;,
    &quot;last_opened_file_path&quot;: &quot;D:/Javaproject/PlayPay/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball&quot;,
    &quot;node.js.detected.package.eslint&quot;: &quot;true&quot;,
    &quot;node.js.detected.package.tslint&quot;: &quot;true&quot;,
    &quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
    &quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
    &quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
    &quot;project.structure.last.edited&quot;: &quot;模块&quot;,
    &quot;project.structure.proportion&quot;: &quot;0.15&quot;,
    &quot;project.structure.side.proportion&quot;: &quot;0.54367816&quot;,
    &quot;service.view.auto.scroll.to.source&quot;: &quot;true&quot;,
    &quot;settings.editor.selected.configurable&quot;: &quot;preferences.pluginManager&quot;,
    &quot;spring.configuration.checksum&quot;: &quot;6e27eb92c8707375af194da5aa857bbc&quot;,
    &quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
  <component name="PropertiesComponent"><![CDATA[{
  "keyToString": {
    "DefaultHtmlFileTemplate": "HTML File",
    "RequestMappingsPanelOrder0": "0",
    "RequestMappingsPanelOrder1": "1",
    "RequestMappingsPanelWidth0": "75",
    "RequestMappingsPanelWidth1": "75",
    "RunOnceActivity.OpenProjectViewOnStart": "true",
    "RunOnceActivity.ShowReadmeOnStart": "true",
    "WebServerToolWindowFactoryState": "false",
    "git-widget-placeholder": "master",
    "ignore.virus.scanning.warn.message": "true",
    "last_opened_file_path": "D:/Javaproject/PlayPay/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball",
    "node.js.detected.package.eslint": "true",
    "node.js.detected.package.tslint": "true",
    "node.js.selected.package.eslint": "(autodetect)",
    "node.js.selected.package.tslint": "(autodetect)",
    "nodejs_package_manager_path": "npm",
    "project.structure.last.edited": "模块",
    "project.structure.proportion": "0.15",
    "project.structure.side.proportion": "0.54367816",
    "service.view.auto.scroll.to.source": "true",
    "settings.editor.selected.configurable": "preferences.lookFeel",
    "spring.configuration.checksum": "6e27eb92c8707375af194da5aa857bbc",
    "vue.rearranger.settings.migration": "true"
  }
}</component>
}]]></component>
  <component name="ReactorSettings">
    <option name="notificationShown" value="true" />
  </component>
  <component name="RecentsManager">
    <key name="CopyFile.RECENT_KEYS">
      <recent name="D:\Javaproject\PlayPay\cloud-server-management\src\main\webapp\WEB-INF\view\system\ball" />
      <recent name="D:\Javaproject\PlayPay\cloud-server-account\src\test\java\com\dsh" />
      <recent name="D:\Javaproject\PlayPay\cloud-server-management\src\main\webapp\static\modular\system\ball" />
      <recent name="D:\Javaproject\PlayPay\cloud-server-course\src\main\resources\mapper" />
      <recent name="D:\ttt\java\PlayPai\cloud-server-management\src\main\webapp\WEB-INF\view\system\ball" />
      <recent name="D:\ttt\java\PlayPai\cloud-server-management\src\main\webapp\static\modular\system\ball" />
    </key>
    <key name="MoveFile.RECENT_KEYS">
      <recent name="D:\JavaTool\PlayPai1\cloud-server-management\src\main\webapp\static\modular\system\tStudent" />
@@ -147,6 +160,30 @@
          <option name="ENABLED" value="true" />
        </pattern>
      </extension>
      <method v="2">
        <option name="Make" enabled="true" />
      </method>
    </configuration>
    <configuration name="AccountApplicationTests.contextLoads" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
      <module name="mb-cloud-account" />
      <shortenClasspath name="MANIFEST" />
      <extension name="coverage">
        <pattern>
          <option name="PATTERN" value="com.dsh.*" />
          <option name="ENABLED" value="true" />
        </pattern>
      </extension>
      <option name="PACKAGE_NAME" value="com.dsh" />
      <option name="MAIN_CLASS_NAME" value="com.dsh.AccountApplicationTests" />
      <option name="METHOD_NAME" value="contextLoads" />
      <option name="TEST_OBJECT" value="method" />
      <method v="2">
        <option name="Make" enabled="true" />
      </method>
    </configuration>
    <configuration default="true" type="JUnit" factoryName="JUnit">
      <shortenClasspath name="MANIFEST" />
      <option name="TEST_OBJECT" value="class" />
      <method v="2">
        <option name="Make" enabled="true" />
      </method>
@@ -235,8 +272,9 @@
      </method>
    </configuration>
    <list>
      <item itemvalue="Spring Boot.GatewayApplication" />
      <item itemvalue="JUnit.AccountApplicationTests.contextLoads" />
      <item itemvalue="Spring Boot.ManagementApplication" />
      <item itemvalue="Spring Boot.GatewayApplication" />
      <item itemvalue="Spring Boot.OtherApplication" />
      <item itemvalue="Spring Boot.UserApplication" />
      <item itemvalue="Spring Boot.AccountApplication" />
@@ -248,6 +286,7 @@
    </list>
    <recent_temporary>
      <list>
        <item itemvalue="JUnit.AccountApplicationTests.contextLoads" />
        <item itemvalue="应用程序.BigDecimalToChineseWords" />
      </list>
    </recent_temporary>
@@ -307,7 +346,7 @@
      <workItem from="1696433675086" duration="2211000" />
      <workItem from="1696462020097" duration="481000" />
      <workItem from="1696465598653" duration="19850000" />
      <workItem from="1696639362946" duration="45956000" />
      <workItem from="1696639362946" duration="88523000" />
    </task>
    <task id="LOCAL-00001" summary="后台代码删除">
      <created>1690249807612</created>
@@ -608,7 +647,15 @@
      <option name="project" value="LOCAL" />
      <updated>1696749061197</updated>
    </task>
    <option name="localTasksCounter" value="40" />
    <task id="LOCAL-00040" summary="10.8。1">
      <option name="closed" value="true" />
      <created>1696753188954</created>
      <option name="number" value="00040" />
      <option name="presentableId" value="LOCAL-00040" />
      <option name="project" value="LOCAL" />
      <updated>1696753188954</updated>
    </task>
    <option name="localTasksCounter" value="41" />
    <servers />
  </component>
  <component name="TypeScriptGeneratedFilesManager">
@@ -650,7 +697,8 @@
    <MESSAGE value="9.26。14" />
    <MESSAGE value="9.26。15" />
    <MESSAGE value="10.8" />
    <option name="LAST_COMMIT_MESSAGE" value="10.8" />
    <MESSAGE value="10.8。1" />
    <option name="LAST_COMMIT_MESSAGE" value="10.8。1" />
  </component>
  <component name="XDebuggerManager">
    <breakpoint-manager>
@@ -674,11 +722,6 @@
          <url>file://$PROJECT_DIR$/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackagePaymentController.java</url>
          <line>1358</line>
          <option name="timeStamp" value="14" />
        </line-breakpoint>
        <line-breakpoint enabled="true" type="java-line">
          <url>file://$PROJECT_DIR$/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCompetitionAuditController.java</url>
          <line>139</line>
          <option name="timeStamp" value="21" />
        </line-breakpoint>
      </breakpoints>
    </breakpoint-manager>
cloud-server-account/src/test/java/com/dsh/AccountApplicationTests.java
New file
@@ -0,0 +1,22 @@
package com.dsh;
import com.dsh.account.controller.CoachTypeController;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = AccountApplication.class)
class AccountApplicationTests {
    @Autowired
    private CoachTypeController controller;
    @Test
    void contextLoads() {
      System.out.println("==============="+controller.list());
    }
}
cloud-server-management/src/main/java/com/dsh/course/mapper/StoreMapper.java
@@ -7,6 +7,7 @@
import com.dsh.guns.modular.system.model.TStore;
import com.dsh.guns.modular.system.model.TStoreListVo;
import com.dsh.guns.modular.system.model.TTurn;
import com.dsh.guns.modular.system.model.dto.SelectDto;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -69,4 +70,6 @@
    void inset(JsDto jsDto);
    JsDto get(Integer id);
    List<SelectDto> getSelect();
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/GameDataController.java
@@ -102,8 +102,60 @@
        }
        return new ArrayList<>();
    }
    @RequestMapping("/listAll1")
    @ResponseBody
    public Object listAll1(String spaceId,String type,String date,String cityCode){
        if(spaceId==null){
            spaceId="";
        }
        if(type==null){
            type="y";
        }
        if(date==null){
            date="";
        }
        if(cityCode==null){
            cityCode="";
        }
//        String apiUrl1 = "https://try.daowepark.com/v7/user_api/general/accuracyGameRanking?space_id=1001"+spaceId+"&type="+type+"&date="+date+"&city_code="+cityCode;
        String apiUrl1 = "https://try.daowepark.com/v7/user_api/general/accuracyGameRanking?space_id="+spaceId+"&type="+type+"&date="+date+"&city_code="+cityCode;
        URL url1 = null;
        try {
            url1 = new URL(apiUrl1);
            HttpURLConnection connection1 = (HttpURLConnection) url1.openConnection();
            connection1.setRequestMethod("GET");
            // 发送请求并获取响应
            int responseCode1 = connection1.getResponseCode();
            if (responseCode1 == HttpURLConnection.HTTP_OK) {
                BufferedReader reader1 = new BufferedReader(new InputStreamReader(connection1.getInputStream()));
                String line1;
                StringBuilder response1 = new StringBuilder();
                while ((line1 = reader1.readLine()) != null) {
                    response1.append(line1);
                }
                reader1.close();
                // 处理响应数据
                String data1 = response1.toString();
                // 使用Jackson库将JSON字符串转换为Java对象
                ObjectMapper objectMapper1 = new ObjectMapper();
                AccuracyGameOne res1 = objectMapper1.readValue(data1, AccuracyGameOne.class);
                List<AccuracyGameDataOne> data2 = res1.getData();
                return data2;
            }
        } catch (ProtocolException e) {
            e.printStackTrace();
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new ArrayList<>();
    }
    /**
     * 跳转到充值记录页面
     * 跳转到智慧球场数据统计页面
     */
    @RequestMapping("")
    public String index(Model model) {
@@ -153,7 +205,7 @@
     */
    @RequestMapping("/list")
    @ResponseBody
    public Object list(Integer storeId) {
    public Object list(String storeId) {
        Map<String, Object> result = new HashMap<>();
        try {
            // 年度数据
@@ -162,7 +214,7 @@
            // 创建 POST 请求
            HttpPost httpPost = new HttpPost("https://try.daowepark.com/v7/user_api/general/getBatterData");
            // 设置请求体数据
            String postData = "sign=0DB011836143EEE2C2E072967C9F4E4B&space_id="+""+"&date_type=y";
            String postData = "sign=0DB011836143EEE2C2E072967C9F4E4B&space_id="+storeId+"&date_type=y"+"&year=";
            StringEntity entity = new StringEntity(postData, ContentType.APPLICATION_FORM_URLENCODED);
            httpPost.setEntity(entity);
@@ -196,7 +248,7 @@
            // 创建 POST 请求
            HttpPost httpPost1 = new HttpPost("https://try.daowepark.com/v7/user_api/general/getBatterData");
            // 设置请求体数据
            String postData1 = "sign=0DB011836143EEE2C2E072967C9F4E4B&space_id=1001&date_type=m&year=2022";
            String postData1 = "sign=0DB011836143EEE2C2E072967C9F4E4B&space_id=1001"+""+"&date_type=m"+"&year="+year;
            StringEntity entity1 = new StringEntity(postData1, ContentType.APPLICATION_FORM_URLENCODED);
            httpPost1.setEntity(entity1);
            // 执行请求
@@ -204,13 +256,12 @@
            // 处理响应
            HttpEntity responseEntity1 = response1.getEntity();
            if (responseEntity1 != null) {
                String responseData = EntityUtils.toString(responseEntity1);
                String responseData1 = EntityUtils.toString(responseEntity1);
                ObjectMapper objectMapper = new ObjectMapper();
                Batter batter = objectMapper.readValue(responseData, Batter.class);
                Batter batter = objectMapper.readValue(responseData1, Batter.class);
                result.put("totalNumber", batter.getData().getAll_batter_num());
                result.put("totalTime", batter.getData().getAll_batter_time());
                List<BatterData> dataList = batter.getData().getList();
                // 月度数据
                result.put("mDataList", dataList);
            }
@@ -351,7 +402,44 @@
        return result;
    }
    /**
     * 获取跨城赛统计
     * 获取90°准度赛全球总数
     */
    @RequestMapping("/cityGameOne")
    @ResponseBody
    public Object cityGameOne() {
        Map<String, Object> result = new HashMap<>();
        try {
            String apiUrl = "https://try.daowepark.com/v7/user_api/general/getAccuracyGameCount?space_id=";
            URL url = new URL(apiUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            // 发送请求并获取响应
            int responseCode = connection.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                String line;
                StringBuilder response = new StringBuilder();
                while ((line = reader.readLine()) != null) {
                    response.append(line);
                }
                reader.close();
                // 处理响应数据
                String data = response.toString();
                // 使用Jackson库将JSON字符串转换为Java对象
                ObjectMapper objectMapper = new ObjectMapper();
                CityGame res = objectMapper.readValue(data, CityGame.class);
                result.put("totalNum", res.getData().getTotal_num());
                    return result;
                }
            }
         catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }
    /**
     * 获取跨城赛统计全球总数
     */
    @RequestMapping("/cityGame")
    @ResponseBody
@@ -377,18 +465,11 @@
                // 使用Jackson库将JSON字符串转换为Java对象
                ObjectMapper objectMapper = new ObjectMapper();
                CityGame res = objectMapper.readValue(data, CityGame.class);
                // 场地总入场人数
                String totalNum = "";
                for (CityGameData datum : res.getData()) {
                    totalNum = datum.getTotal_num();
                }
                result.put("totalNum", totalNum);
                    return result;
                }
                result.put("totalNum", res.getData().getTotal_num());
                return result;
            }
         catch (IOException e) {
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        return result;
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/GateDataController.java
@@ -53,8 +53,6 @@
    private SiteClient siteClient;
    private String PREFIX = "/system/gateData/";
    /**
     * 跳转到充值记录页面
     */
@@ -63,15 +61,13 @@
        return PREFIX + "GateData.html";
    }
    /**
     * 获取教练类型列表
     * 获取闸机数据列表
     */
    @RequestMapping("/list")
    @ResponseBody
    public Object list() {
        List<Site> list = siteClient.getList();
        try {
            for (Site site : list) {
                String apiUrl = "https://try.daowepark.com/v7/user_api/general/spaceDoorData?space_id=" + site.getId();
                String apiUrl = "https://try.daowepark.com/v7/user_api/general/spaceDoorData?space_id=1001";
                URL url = new URL(apiUrl);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setRequestMethod("GET");
@@ -106,6 +102,46 @@
                } else {
                    System.out.println("请求失败: " + responseCode);
                }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new ArrayList<>();
    }
    /**
     * 获取教练类型列表
     */
    @RequestMapping("/totalNum")
    @ResponseBody
    public Object totalNum() {
        try {
            String apiUrl = "https://try.daowepark.com/v7/user_api/general/spaceDoorData?space_id=1001";
            URL url = new URL(apiUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            // 发送请求并获取响应
            int responseCode = connection.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                String line;
                StringBuilder response = new StringBuilder();
                while ((line = reader.readLine()) != null) {
                    response.append(line);
                }
                reader.close();
                // 处理响应数据
                String data = response.toString();
                // 使用Jackson库将JSON字符串转换为Java对象
                ObjectMapper objectMapper = new ObjectMapper();
                GateDataResponse res = objectMapper.readValue(data, GateDataResponse.class);
                // 访问Java对象中的数据
                int code = res.getCode();
                String message = res.getMessage();
                // 场地总入场人数
                int totalNum = res.getData().getTotal_num();
                return totalNum;
            } else {
                System.out.println("请求失败: " + responseCode);
            }
        } catch (IOException e) {
            e.printStackTrace();
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/OperatorController.java
@@ -20,12 +20,11 @@
import com.dsh.guns.core.common.constant.factory.PageFactory;
import com.dsh.guns.core.util.SinataUtil;
import com.dsh.guns.modular.system.model.*;
import com.dsh.guns.modular.system.service.ICityService;
import com.dsh.guns.modular.system.service.IUserService;
import com.dsh.guns.modular.system.service.TOperatorCityService;
import com.dsh.guns.modular.system.service.TOperatorService;
import com.dsh.guns.modular.system.service.*;
import com.dsh.guns.modular.system.service.impl.TOperatorUserServiceImpl;
import com.dsh.guns.modular.system.util.ResultUtil;
import io.swagger.models.auth.In;
import org.apache.catalina.valves.RemoteIpValve;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
@@ -48,6 +47,8 @@
    private TOperatorService operatorService;
    @Autowired
    private TOperatorCityService operatorCityService;
    @Autowired
    private IOperatorUserService operatorUserService;
    @Autowired
    private IUserService userService;
    @Autowired
@@ -127,7 +128,59 @@
        page.setRecords(list);
        return super.packForBT(page);
    }
    /**
     * 跳转运营商商户去认证页面
     */
    @RequestMapping("/proportionAuth/{id}")
    public String proportionAuth(Model model,@PathVariable("id") Integer id) {
        model.addAttribute("operatorId",id);
        return PREFIX + "OperatorUser_proportionAuth.html";
    }
    /**
     * 商户认证提交
     */
    @RequestMapping(value = "/auth")
    @ResponseBody
    public Object auth(Integer alipayType,Integer wechatType,String alipayNum,String wechatNum,Integer operatorId ) {
        TOperator id = operatorService.getOne(new QueryWrapper<TOperator>().eq("id", operatorId));
        OperatorUser operatorUser = new OperatorUser();
        operatorUser.setUserId(id.getUserId());
        operatorUser.setAlipay("支付宝");
        operatorUser.setWechat("微信");
        operatorUser.setWechatType(wechatType);
        operatorUser.setAlipayType(alipayType);
        operatorUser.setAlipayNum(alipayNum);
        operatorUser.setWechatNum(wechatNum);
        operatorUser.setOperatorId(operatorId);
        operatorUserService.save(operatorUser);
        // 修改运营商状态为 已认证
        id.setStatus(2);
        operatorService.updateById(id);
        return SUCCESS_TIP;
    }
    /**
     * 分账比例提交
     */
    @RequestMapping(value = "/proportion")
    @ResponseBody
    public Object auth(String alipayProportion,String wechatProportion,Integer operatorIdOne ) {
        OperatorUser id = operatorUserService.getOne(new QueryWrapper<OperatorUser>().eq("id", operatorIdOne));
        id.setAlipayProportion(alipayProportion);
        id.setWechatProportion(wechatProportion);
        operatorUserService.updateById(id);
        return SUCCESS_TIP;
    }
    /**
     * 跳转运营商设置分账比例页面
     */
    @RequestMapping("/proportion/{id}")
    public String proportion(Model model,@PathVariable("id") Integer id) {
        OperatorUser o = operatorUserService.getOne(new QueryWrapper<OperatorUser>().eq("operatorId", id));
        model.addAttribute("operatorIdOne",o.getId());
        model.addAttribute("alipayProportion",o.getAlipayProportion());
        model.addAttribute("wechatProportion",o.getWechatProportion());
        return PREFIX + "OperatorUser_proportion.html";
    }
    /**
     * 批量重置密码
     * @return
@@ -140,7 +193,7 @@
            List<Integer> userIds = list.stream()
                    .map(TOperator::getUserId)
                    .collect(Collectors.toList());
            String a123456 = SecureUtil.md5("123456");
            String a123456 = SecureUtil.md5("a123456");
            List<User> users = userService.list(new QueryWrapper<User>().in("id", userIds));
            for (User user : users) {
                user.setPassword(a123456);
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/OperatorUserController.java
@@ -62,22 +62,7 @@
    }
    /**
     * 跳转运营商商户去认证页面
     */
    @RequestMapping("/proportion/{id}")
    public String update(Model model,@PathVariable("id") Integer id) {
        List<TCity> provinceList = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0));
        model.addAttribute("provinceList",provinceList);
        List<Bank> bankList = operatorService.getBankList();
        TStore store = storeService.getOne(new QueryWrapper<TStore>().eq("cityManagerId", id));
        model.addAttribute("storeName",store.getName());
        TStoreStaff storeByStoreStaffId = storeStaffClient.getStoreByStoreStaffId(store.getStoreStaffId());
        model.addAttribute("storeStaff",storeByStoreStaffId.getName());
        model.addAttribute("storePhone",storeByStoreStaffId.getPhone());
        model.addAttribute("bankList",bankList);
        return PREFIX + "OperatorUser_auth.html";
    }
    /**
     * 获取运营商列表
     */
@@ -90,23 +75,4 @@
        return super.packForBT(page);
    }
    /**
     * 批量重置密码
     * @return
     */
    @RequestMapping(value = "/addProportion")
    @ResponseBody
    public Object pwd(Integer id, BigDecimal alipay,BigDecimal wechat) {
        List<OperatorUser> list = operatorUserService.list(new QueryWrapper<OperatorUser>().eq("operatorId", id));
        for (OperatorUser operatorUser : list) {
            if (operatorUser.getPlatform()==1){
                operatorUser.setProportion(wechat);
                operatorUserService.updateById(operatorUser);
            }else {
                operatorUser.setProportion(alipay);
                operatorUserService.updateById(operatorUser);
            }
        }
        return SUCCESS_TIP;
    }
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java
@@ -830,8 +830,10 @@
            String jsonString = jsonArray.getString(i);
            String[] split = jsonString.split("-");
            System.out.println("============"+split);
            if (split.length>1){
            first.add(split[0]);
            second.add(split[1]);
            second.add(split[1]);}
        }
        String firstString = String.join(",",first);
cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/BallController.java
@@ -22,10 +22,7 @@
import com.dsh.guns.core.base.controller.BaseController;
import com.dsh.guns.modular.system.model.*;
import com.dsh.guns.modular.system.model.dto.*;
import com.dsh.guns.modular.system.service.ICityService;
import com.dsh.guns.modular.system.service.ICoursePackageService;
import com.dsh.guns.modular.system.service.IStoreService;
import com.dsh.guns.modular.system.service.ITSiteService;
import com.dsh.guns.modular.system.service.*;
import com.dsh.guns.modular.system.util.HttpRequestUtil;
import com.dsh.guns.modular.system.util.ResultUtil;
import com.google.common.base.Ascii;
@@ -56,7 +53,9 @@
import java.nio.charset.StandardCharsets;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
@Controller
@@ -106,6 +105,72 @@
        return PREFIX+"ball.html";
    }
    //入园方式
    @RequestMapping("/joinmethod/{id}")
    public String joinmethod(Model model,@PathVariable("id") Integer id) {
        model.addAttribute("id",id);
        return PREFIX+"join.html";
    }
    @RequestMapping("/selectJoin")
    @ResponseBody
    public ResultUtil join(@RequestBody MethodDto method) {
        System.out.println("============"+method);
        SiteBooking siteBooking = new SiteBooking();
        siteBooking.setStatus(2);
        siteBooking.setId(method.getId());
        siteBooking.setGoType(method.getMethod());
        iSiteBookingService.updateById(siteBooking);
        return new ResultUtil<>(0,0,"到店成功",null,null);
    }
    @RequestMapping(value = "/yunying")
    @ResponseBody
    public ResultUtil getUserSlect() {
        List<SelectDto>  selectDtos =  storeService.getSelect();
        Map<String,List<SelectDto>> map = new HashMap<>();
        map.put("options",selectDtos);
        System.out.println("=======selectDtos====="+selectDtos);
        return new ResultUtil(0,0,"编辑成功",map,"");
    }
    //取消凭证页面
    @RequestMapping("/tocancel/{id}")
    public String tocancel(Model model,@PathVariable("id") Integer id) {
        model.addAttribute("id",id);
        return PREFIX+"cancel.html";
    }
    @RequestMapping("/cancel")
    @ResponseBody
    public ResultUtil cancel(Integer id,String voucher,String textarea) {
        System.out.println("============"+id);
        SiteBooking siteBooking = new SiteBooking();
        siteBooking.setId(id);
        siteBooking.setStatus(5);
        siteBooking.setVoucher(voucher);
        siteBooking.setRemark(textarea);
        siteBooking.setCancelUserId(UserExt.getUser().getId());
        iSiteBookingService.updateById(siteBooking);
        return new ResultUtil<>(0,0,"到店成功",null,null);
    }
    /**
     * 获取变更列表
@@ -123,7 +188,7 @@
    @RequestMapping("/save")
    @ResponseBody
    public ResultUtil save(String red, String blue, String province, String city, Integer site, Integer store
    public ResultUtil save(String operationId,String red, String blue, String province, String city, Integer site, Integer store
    , String kuacheng, BigDecimal kuachengCoin, BigDecimal kuachengCash,String kuachengImage,BigDecimal kuachengInt,Integer kuachengId
            , String shequ, BigDecimal shequCoin, BigDecimal shequCash,String shequImage,BigDecimal shequInt,Integer shequId
            , String shemen, BigDecimal shemenCoin, BigDecimal shemenCash,String shemenImage,BigDecimal shemenInt,Integer shemenId
@@ -148,6 +213,13 @@
        game.setCityCode(city);
        game.setSiteId(site);
        game.setStoreId(store);
        if (!operationId.equals("平台")){
        game.setOperationId(Integer.valueOf(operationId));}
        else {
            game.setOperationId(0);
        }
        System.out.println("============"+game);
        Integer gameId = ballClient.save(game);
@@ -285,7 +357,7 @@
    @RequestMapping("/pre_add")
    public String add(Model model) {
        model.addAttribute("is","${is}");
        return PREFIX+"ball_pre_add.html";
    }
@@ -301,6 +373,260 @@
        return PREFIX+"ball_pre_edit.html";
    }
    @Autowired
     private ISiteBookingService iSiteBookingService;
    @RequestMapping("/yueyue_edit/{id}")
    public String yueyue_edit(@PathVariable("id") Integer id,Model model) {
        List<String> strings1 = new ArrayList<>();
        SiteBooking book = iSiteBookingService.getById(id);
        model.addAttribute("item", book);
        if (book.getMoney()!=null){
        model.addAttribute("money",book.getMoney().split(","));}
        String[] split1 = book.getTimes().split(";");
        model.addAttribute("date",split1[0].substring(0,10));
        for (String s : split1) {
            String convertedValue = s.substring(11);
            strings1.add(convertedValue);
        }
        System.out.println("========strings1====="+strings1);
//时间段
        List<String> strings = new ArrayList<>();
//        List<SiteBooking> siteBookings = siteClient.listBooks(book.getSiteId());
        List<SiteBooking> siteBookings = iSiteBookingService.list(new QueryWrapper<SiteBooking>().eq("siteId", book.getSiteId()).like("times",split1[0].substring(0,10)));
        System.out.println("=======siteBookings======"+siteBookings);
        for (SiteBooking siteBooking : siteBookings) {
            String[] split = siteBooking.getTimes().split(";");
            for (String s : split) {
                String convertedValue = s.substring(11);
                strings.add(convertedValue);
            }
        }
        System.out.println("======strings======="+strings);
        List<OrderDto> timeRanges = new ArrayList<>();
        Site site =  siteClient.listById(book.getSiteId());
        System.out.println("================"+site);
        String appointmentStartTime = site.getAppointmentStartTime();
        String appointmentEndTime = site.getAppointmentEndTime();
        //生成用于比较日期是否超过的当前日期
        LocalDate currentDate = LocalDate.now();
        LocalDate parsedDate = LocalDate.parse(split1[0].substring(0,10), DateTimeFormatter.ISO_DATE);
        boolean isAfterCurrentDate = parsedDate.isBefore(currentDate);
        System.out.println("是否超过当前日期"+isAfterCurrentDate);
        String currentTime = appointmentStartTime;
        while (currentTime.compareTo(appointmentEndTime) < 0) {
            String nextTime = getNextTime(currentTime);
            String timeRange = currentTime + "-" + nextTime;
            OrderDto orderDto = new OrderDto();
            orderDto.setTime(timeRange);
            LocalTime currentTime1 = LocalTime.now();
            LocalTime targetTime = LocalTime.parse(currentTime);
            boolean hasExceeded = currentTime1.isAfter(targetTime);
            //是否超过当前时间
            if (hasExceeded){
                orderDto.setState(0);
            }
            //是否已经预定
            if (strings.contains(timeRange)){
                orderDto.setState(0);
            }
            //日期是否超过
            if (isAfterCurrentDate){
                orderDto.setState(0);
            }
            //是否是当前场地当前日期预定的
            if (strings1.contains(timeRange)){
                orderDto.setState(1);
            }
            timeRanges.add(orderDto);
            currentTime = nextTime;
        }
        System.out.println("-------------"+timeRanges);
            model.addAttribute("timeRanges",timeRanges);
System.out.println("======timeRanges========"+timeRanges);
        Integer objectType = UserExt.getUser().getObjectType();
        Integer objectId = UserExt.getUser().getObjectId();
        String cityCode = null;
        if(objectType == 2){//城市管理员
            CityManager cityManager = cityManagerClient.queryCityManagerById(objectId);
            cityCode = cityManager.getCityCode();
        }
        List<Map<String, Object>> list = storeService.queryProvince(cityCode);
        model.addAttribute("province", list);
        Object code = list.get(0).get("code");
        List<Map<String, Object>> list1 = storeService.queryCity(code.toString(), cityCode);
        model.addAttribute("city", list1);
        String code1 = list1.get(0).get("code").toString();
        List<TStore> list2 = storeService.list(new QueryWrapper<TStore>().eq("cityCode", code1).eq("state", 1));
        model.addAttribute("store", list2);
        TStore store = list2.get(0);
        List<TSite> list3 = siteService.list(new QueryWrapper<TSite>().eq("storeId", store.getId()).eq("state", 1));
        model.addAttribute("site", list3);
        return PREFIX+"yuyue_edit.html";
    }
@Autowired
private IUserService userService;
    @RequestMapping("/yueyue_info/{id}")
    public String yueyue_info(@PathVariable("id") Integer id,Model model) {
        List<String> strings1 = new ArrayList<>();
        SiteBooking book = iSiteBookingService.getById(id);
        model.addAttribute("item", book);
        if (book.getMoney()!=null){
            model.addAttribute("money",book.getMoney().split(","));}
        String[] split1 = book.getTimes().split(";");
        model.addAttribute("date",split1[0].substring(0,10));
        User user = userService.getById(book.getCancelUserId());
        if (user!=null) {
            model.addAttribute("cancelUser", user.getName());
        }
        for (String s : split1) {
            String convertedValue = s.substring(11);
            strings1.add(convertedValue);
        }
        System.out.println("========strings1====="+strings1);
//时间段
        List<String> strings = new ArrayList<>();
//        List<SiteBooking> siteBookings = siteClient.listBooks(book.getSiteId());
        List<SiteBooking> siteBookings = iSiteBookingService.list(new QueryWrapper<SiteBooking>().eq("siteId", book.getSiteId()).like("times",split1[0].substring(0,10)));
        System.out.println("=======siteBookings======"+siteBookings);
        for (SiteBooking siteBooking : siteBookings) {
            String[] split = siteBooking.getTimes().split(";");
            for (String s : split) {
                String convertedValue = s.substring(11);
                strings.add(convertedValue);
            }
        }
        System.out.println("======strings======="+strings);
        List<OrderDto> timeRanges = new ArrayList<>();
        Site site =  siteClient.listById(book.getSiteId());
        System.out.println("================"+site);
        String appointmentStartTime = site.getAppointmentStartTime();
        String appointmentEndTime = site.getAppointmentEndTime();
        //生成用于比较日期是否超过的当前日期
        LocalDate currentDate = LocalDate.now();
        LocalDate parsedDate = LocalDate.parse(split1[0].substring(0,10), DateTimeFormatter.ISO_DATE);
        boolean isAfterCurrentDate = parsedDate.isBefore(currentDate);
        System.out.println("是否超过当前日期"+isAfterCurrentDate);
        String currentTime = appointmentStartTime;
        while (currentTime.compareTo(appointmentEndTime) < 0) {
            String nextTime = getNextTime(currentTime);
            String timeRange = currentTime + "-" + nextTime;
            OrderDto orderDto = new OrderDto();
            orderDto.setTime(timeRange);
            LocalTime currentTime1 = LocalTime.now();
            LocalTime targetTime = LocalTime.parse(currentTime);
            boolean hasExceeded = currentTime1.isAfter(targetTime);
            //是否超过当前时间
            if (hasExceeded){
                orderDto.setState(0);
            }
            //是否已经预定
            if (strings.contains(timeRange)){
                orderDto.setState(0);
            }
            //日期是否超过
            if (isAfterCurrentDate){
                orderDto.setState(0);
            }
            //是否是当前场地当前日期预定的
            if (strings1.contains(timeRange)){
                orderDto.setState(1);
            }
            timeRanges.add(orderDto);
            currentTime = nextTime;
        }
        System.out.println("-------------"+timeRanges);
        model.addAttribute("timeRanges",timeRanges);
        System.out.println("======timeRanges========"+timeRanges);
        Integer objectType = UserExt.getUser().getObjectType();
        Integer objectId = UserExt.getUser().getObjectId();
        String cityCode = null;
        if(objectType == 2){//城市管理员
            CityManager cityManager = cityManagerClient.queryCityManagerById(objectId);
            cityCode = cityManager.getCityCode();
        }
        List<Map<String, Object>> list = storeService.queryProvince(cityCode);
        model.addAttribute("province", list);
        Object code = list.get(0).get("code");
        List<Map<String, Object>> list1 = storeService.queryCity(code.toString(), cityCode);
        model.addAttribute("city", list1);
        String code1 = list1.get(0).get("code").toString();
        List<TStore> list2 = storeService.list(new QueryWrapper<TStore>().eq("cityCode", code1).eq("state", 1));
        model.addAttribute("store", list2);
        TStore store = list2.get(0);
        List<TSite> list3 = siteService.list(new QueryWrapper<TSite>().eq("storeId", store.getId()).eq("state", 1));
        model.addAttribute("site", list3);
        return PREFIX+"yuyue_info.html";
    }
    @RequestMapping("/paike")
@@ -434,11 +760,13 @@
    @RequestMapping("/yuyuetimes/{id}")
    @ResponseBody
    public List<OrderDto> yuyuetimes(@PathVariable("id") Integer id) {
    public List<OrderDto> yuyuetimes(@PathVariable("id") Integer id,String date) {
        System.out.println("=======date======"+date);
        List<String> strings = new ArrayList<>();
        List<SiteBooking> siteBookings = siteClient.listBooks(id);
//        List<SiteBooking> siteBookings = siteClient.listBooks(id);
        List<SiteBooking> siteBookings = iSiteBookingService.list(new QueryWrapper<SiteBooking>().eq("siteId", id).like("times",date));
System.out.println("=======siteBookings======"+siteBookings);
        for (SiteBooking siteBooking : siteBookings) {
            String[] split = siteBooking.getTimes().split(";");
@@ -503,6 +831,25 @@
        }
        return String.format("%02d:%02d", hour, minute);
//        String[] parts = currentTime.split(":");
//        int hour = Integer.parseInt(parts[0]);
//        int minute = Integer.parseInt(parts[1]);
//
//        if (minute == 45) {
//            hour++;
//            minute = 0;
//        } else if (minute == 0){
//            minute = 15;
//        }else if (minute == 15){
//            minute = 30;
//        }else if (minute == 30){
//            minute = 45;
//        }
//
//        return String.format("%02d:%02d", hour, minute);
    }
@@ -556,4 +903,14 @@
        return new ResultUtil<>(null,200,null,null,null);
    }
    @RequestMapping("/orderedit")
    @ResponseBody
    public ResultUtil orderedit(SiteBooking siteBooking){
            iSiteBookingService.updateById(siteBooking);
        System.out.println("================="+siteBooking);
        return new ResultUtil<>(null,200,null,null,null);
    }
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/AccuracyGameDataOne.java
New file
@@ -0,0 +1,16 @@
package com.dsh.guns.modular.system.model;
import lombok.Data;
/**
 * 获取游戏列表
 */
@Data
public class AccuracyGameDataOne {
   private int account_id;
   private int score;
   private int match_id;
   private String name;
   private String avatar;
   private String rank;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/AccuracyGameOne.java
New file
@@ -0,0 +1,16 @@
package com.dsh.guns.modular.system.model;
import lombok.Data;
import java.util.List;
/**
 * 获取游戏列表
 */
@Data
public class AccuracyGameOne {
    private int code;
    private String message;
    private List<AccuracyGameDataOne> data;
    private String nextUrl;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/CityGame.java
@@ -11,6 +11,6 @@
public class CityGame {
    private int code;
    private String message;
    private List<CityGameData> data;
    private CityGameData data;
    private String nextUrl;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/OperatorUser.java
@@ -1,5 +1,8 @@
package com.dsh.guns.modular.system.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@@ -8,16 +11,26 @@
@TableName("t_operator_user")
@Data
public class OperatorUser {
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    private String province;
    private Integer provinceCode;
    private String city;
    private Integer cityCode;
    @TableField(value = "userId")
    private Integer userId;
    private Integer platform;
    private Integer type;
    private BigDecimal proportion;
    private Integer state;
    private Integer status;
    @TableField(value = "alipay")
    private String alipay;
    @TableField(value = "alipayProportion")
    private String alipayProportion;
    @TableField(value = "alipayNum")
    private String alipayNum;
    @TableField(value = "wechat")
    private String wechat;
    @TableField(value = "wechatProportion")
    private String wechatProportion;
    @TableField(value = "wechatNum")
    private String wechatNum;
    @TableField(value = "alipayType")
    private Integer alipayType;
    @TableField(value = "wechatType")
    private Integer wechatType;
    @TableField(value = "operatorId")
    private Integer operatorId;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/MethodDto.java
New file
@@ -0,0 +1,9 @@
package com.dsh.guns.modular.system.model.dto;
import lombok.Data;
@Data
public class MethodDto {
    Integer id;
    Integer method;
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IStoreService.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dsh.guns.modular.system.model.*;
import com.dsh.guns.modular.system.model.dto.SelectDto;
import io.swagger.models.auth.In;
import com.dsh.course.dto.JsDto;
import com.dsh.guns.modular.system.model.Dict;
@@ -71,4 +72,6 @@
    void insert(JsDto jsDto);
    JsDto get(Integer id);
    List<SelectDto> getSelect();
}
cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/StoreServiceImpl.java
@@ -8,6 +8,7 @@
import com.dsh.guns.modular.system.model.TStore;
import com.dsh.guns.modular.system.model.TStoreListVo;
import com.dsh.guns.modular.system.model.TTurn;
import com.dsh.guns.modular.system.model.dto.SelectDto;
import com.dsh.guns.modular.system.service.IStoreService;
import org.springframework.stereotype.Service;
@@ -104,6 +105,11 @@
    }
    @Override
    public List<SelectDto> getSelect() {
        return this.baseMapper.getSelect();
    }
    @Override
    public List<TImgConfig> getConfig() {
        return this.baseMapper.getConfig1();
cloud-server-management/src/main/resources/TOperatorUserMapper.xml
@@ -1,37 +1,5 @@
<?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.dsh.course.mapper.TOperatorUserMapper">
    <select id="listAll" resultType="java.util.Map">
        select t1.id as id, t1.platform,t1.type,t1.proportion,CONCAT(t1.province,t1.city) as provinceAndCity
        t1.state as state,t1.status as status,t2.name as userName,t2.phone as phone from t_operatorUser t1
        left join sys_user t2 on t1.userId = t2.id
        where 1=1
        <if test="province != null and province != ''">
            and t1.provinceCode =  #{province}
        </if>
        <if test="city != null and city != ''">
            and t1.cityCode =  #{city}
        </if>
        <if test="userName != null and userName != ''">
            and t2.name like CONCAT('%',#{userName},'%')
        </if>
        <if test="phone != null and phone != ''">
            and t2.phone like CONCAT('%',#{phone},'%')
        </if>
        <if test="platform != null and platform != ''">
            and t1.platform =  #{platform}
        </if>
        <if test="type != null and type != ''">
            and t1.type =  #{type}
        </if>
        <if test="proportion != null and proportion != ''">
            and t1.proportion =  #{proportion}
        </if>
        <if test="state != null and state != ''">
            and t1.state =  #{state}
        </if>
        <if test="status != null and status != ''">
            and t1.status =  #{status}
        </if>
    </select>
</mapper>
cloud-server-management/src/main/resources/mapper/TStoreMapper.xml
@@ -127,4 +127,15 @@
    <select id="getConfig1" resultType="com.dsh.guns.modular.system.model.TImgConfig">
        select * from t_img_config
    </select>
    <select id="getSelect" resultType="com.dsh.guns.modular.system.model.dto.SelectDto">
        SELECT op.id , CONCAT(us.name,'-',us.`phone`) as value
        FROM t_operator op
            LEFT JOIN sys_user us on op.userId = us.id
    </select>
</mapper>
cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/ball_pre_add.html
@@ -42,15 +42,24 @@
        {
          "type": "form",
          "id": "u:24af29be25d2",
          "title": "111",
          "title": "",
          "body": [
            {
              "label": "所属运营商:",
              "type": "tpl",
              "id": "u:587781d5d181",
              "tpl": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp*所属运营商:",
              "inline": true,
              "wrapperComponent": "",
              "style": {
                "marginLeft": "0"
              }
            },{
              "type": "select",
              "name": "operator",
              "id": "u:970f68a2c4ee",
              "mode": "horizontal",
              "size": "lg",
              "label": "",
              "name": "operationId",
              "id": "u:c037c33c2c81",
              "mode": "inline",
              "size": "md",
              "multiple": false,
              "showInvalidMatch": false,
              "searchable": true,
@@ -58,12 +67,38 @@
              "horizontal": {
                "leftFixed": "lg"
              },
              "options": [
                {
                  "label": "等待沟通中",
                  "value": "等待沟通中"
              "disabledOn": "is!=0",
              "required": true,
              "source": {
                "url": "/ball/yunying",
                "method": "post",
                "messages": {
                }
              ]
              },
              "labelField": "value",
              "valueField": "id"
            },{
              "type": "checkbox",
              "option": "平台",
              "name": "is",
              "id": "u:88f23ebcf4f7",
              "onEvent": {
                "change": {
                  "weight": 0,
                  "actions": [
                    {
                      "componentId": "u:c037c33c2c81",
                      "args": {
                        "value": "$event.data.value"
                      },
                      "actionType": "setValue"
                    }
                  ]
                }
              },
              "trueValue": "平台",
              "falseValue": 0,
              "mode": "inline"
            },
            {
              "type": "select",
@@ -214,6 +249,7 @@
              },
              "value": "",
              "required": true
            },
            {
              "type": "input-text",
@@ -224,6 +260,7 @@
              "clearValueOnHidden": false,
              "hidden": false,
              "required": true
            },
            {
              "type": "button",
@@ -301,6 +338,16 @@
                          "mode": "inline",
                          "labelClassName": "text-dark m-b",
                          "value": "14"
                        },
                        {
                          "type": "tpl",
                          "id": "u:587781d5d181",
                          "tpl": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp",
                          "inline": true,
                          "wrapperComponent": "",
                          "style": {
                            "marginLeft": "0"
                          }
                        },
                        {
                          "type": "input-text",
@@ -385,6 +432,16 @@
                          "value": "16"
                        },
                        {
                          "type": "tpl",
                          "id": "u:587781d5d181",
                          "tpl": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp",
                          "inline": true,
                          "wrapperComponent": "",
                          "style": {
                            "marginLeft": "0"
                          }
                        },
                        {
                          "type": "input-text",
                          "label": "玩派币",
                          "name": "shequCoin",
@@ -466,6 +523,16 @@
                          "value": "13"
                        },
                        {
                          "type": "tpl",
                          "id": "u:587781d5d181",
                          "tpl": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp",
                          "inline": true,
                          "wrapperComponent": "",
                          "style": {
                            "marginLeft": "0"
                          }
                        },
                        {
                          "type": "input-text",
                          "label": "玩派币",
                          "name": "shemenCoin",
@@ -544,10 +611,20 @@
                          "value": "玩湃熊之力-速度"
                        },
                        {
                          "type": "tpl",
                          "id": "u:587781d5d181",
                          "tpl": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp",
                          "inline": true,
                          "wrapperComponent": "",
                          "style": {
                            "marginLeft": "0"
                          }
                        },
                        {
                          "type": "hidden",
                          "label": "",
                          "name": "suduId",
                          "id": "u:f0f7e6028e17",
                          "id": "u:ca5a1fd9c191",
                          "mode": "inline",
                          "labelClassName": "text-dark m-b",
                          "value": "15"
@@ -635,6 +712,16 @@
                          "value": "1"
                        },
                        {
                          "type": "tpl",
                          "id": "u:587781d5d181",
                          "tpl": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp",
                          "inline": true,
                          "wrapperComponent": "",
                          "style": {
                            "marginLeft": "0"
                          }
                        },
                        {
                          "type": "input-text",
                          "label": "玩派币",
                          "name": "fangkuaiCoin",
@@ -714,6 +801,16 @@
                          "mode": "inline",
                          "labelClassName": "text-dark m-b",
                          "value": "7"
                        },
                        {
                          "type": "tpl",
                          "id": "u:587781d5d181",
                          "tpl": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp",
                          "inline": true,
                          "wrapperComponent": "",
                          "style": {
                            "marginLeft": "0"
                          }
                        },
                        {
                          "type": "input-text",
@@ -803,6 +900,16 @@
                          "value": "8"
                        },
                        {
                          "type": "tpl",
                          "id": "u:587781d5d181",
                          "tpl": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp",
                          "inline": true,
                          "wrapperComponent": "",
                          "style": {
                            "marginLeft": "0"
                          }
                        },
                        {
                          "type": "input-text",
                          "label": "玩派币",
                          "name": "sqCoin",
@@ -883,6 +990,16 @@
                          "mode": "inline",
                          "labelClassName": "text-dark m-b",
                          "value": "10"
                        },
                        {
                          "type": "tpl",
                          "id": "u:587781d5d181",
                          "tpl": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp",
                          "inline": true,
                          "wrapperComponent": "",
                          "style": {
                            "marginLeft": "0"
                          }
                        },
                        {
                          "type": "input-text",
@@ -966,6 +1083,16 @@
                          "value": "11"
                        },
                        {
                          "type": "tpl",
                          "id": "u:587781d5d181",
                          "tpl": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp",
                          "inline": true,
                          "wrapperComponent": "",
                          "style": {
                            "marginLeft": "0"
                          }
                        },
                        {
                          "type": "input-text",
                          "label": "玩派币",
                          "name": "zs2Coin",
@@ -1036,7 +1163,7 @@
                        },
                        {
                          "type": "hidden",
                          "label": "游戏名称",
                          "label": "",
                          "name": "ly",
                          "id": "u:c4a543b6cda0",
                          "mode": "inline",
@@ -1045,12 +1172,22 @@
                        },
                        {
                          "type": "hidden",
                          "label": "游戏id",
                          "label": "",
                          "name": "lyId",
                          "id": "u:90d5f2fa406a",
                          "mode": "inline",
                          "labelClassName": "text-dark m-b",
                          "value": "5"
                        },
                        {
                          "type": "tpl",
                          "id": "u:587781d5d181",
                          "tpl": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp",
                          "inline": true,
                          "wrapperComponent": "",
                          "style": {
                            "marginLeft": "0"
                          }
                        },
                        {
                          "type": "input-text",
@@ -1137,10 +1274,18 @@
                              "actions": [
                                {
                                  "componentId": "u:24af29be25d2",
                                  "actionType": "submit"
                                },
                                {
                                  "args": {
                                  },
                                  "outputVar": "responseResult",
                                  "actionType": "submit"
                                  "script": "window.parent.TStudent.table.refresh();",
                                  "actionType": "custom"
                                },
                                {
                                  "args": {},
                                  "script": "parent.layer.close(window.parent.TStudent.layerIndex);",
                                  "actionType": "custom"
                                }
                              ]
                            }
@@ -1166,7 +1311,20 @@
            "dataType": "form-data"
          },
          "actions": [
          ]
          ],
          "onEvent": {
            "submitSucc": {
              "weight": 0,
              "actions": [
                {
                  "args": {
                  },
                  "script": "parent.layer.close(window.parent.TStudent.layerIndex);",
                  "actionType": "custom"
                }
              ]
            }
          }
        }
      ]
    };
cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/ball_pre_edit.html
@@ -45,12 +45,21 @@
          "title": "",
          "body": [
            {
              "label": "所属运营商:",
              "type": "tpl",
              "id": "u:587781d5d181",
              "tpl": "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp*所属运营商:",
              "inline": true,
              "wrapperComponent": "",
              "style": {
                "marginLeft": "0"
              }
            },{
              "type": "select",
              "name": "operator",
              "id": "u:970f68a2c4ee",
              "mode": "horizontal",
              "size": "lg",
              "label": "",
              "name": "operationId",
              "id": "u:c037c33c2c81",
              "mode": "inline",
              "size": "md",
              "multiple": false,
              "showInvalidMatch": false,
              "searchable": true,
@@ -58,12 +67,38 @@
              "horizontal": {
                "leftFixed": "lg"
              },
              "options": [
                {
                  "label": "等待沟通中",
                  "value": "等待沟通中"
              "disabledOn": "is!=0",
              "required": true,
              "source": {
                "url": "/ball/yunying",
                "method": "post",
                "messages": {
                }
              ]
              },
              "labelField": "value",
              "valueField": "id"
            },{
              "type": "checkbox",
              "option": "平台",
              "name": "is",
              "id": "u:88f23ebcf4f7",
              "onEvent": {
                "change": {
                  "weight": 0,
                  "actions": [
                    {
                      "componentId": "u:c037c33c2c81",
                      "args": {
                        "value": "$event.data.value"
                      },
                      "actionType": "setValue"
                    }
                  ]
                }
              },
              "trueValue": "平台",
              "falseValue": 0,
              "mode": "inline"
            },
            {
              "type": "select",
@@ -1245,10 +1280,18 @@
                              "actions": [
                                {
                                  "componentId": "u:24af29be25d2",
                                  "actionType": "submit"
                                },
                                {
                                  "args": {
                                  },
                                  "outputVar": "responseResult",
                                  "actionType": "submit"
                                  "script": "window.parent.TStudent.table.refresh();",
                                  "actionType": "custom"
                                },
                                {
                                  "args": {},
                                  "script": "parent.layer.close(window.parent.TStudent.layerIndex);",
                                  "actionType": "custom"
                                }
                              ]
                            }
cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/cancel.html
New file
@@ -0,0 +1,206 @@
<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8" />
  <title>amis demo</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta
          name="viewport"
          content="width=device-width, initial-scale=1, maximum-scale=1"
  />
  <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
  <link rel="stylesheet" href="${ctxPath}/sdk/sdk.css" />
  <link rel="stylesheet" href="${ctxPath}/sdk/helper.css" />
  <link rel="stylesheet" href="${ctxPath}/sdk/iconfont.css" />
  <!-- 这是默认主题所需的,如果是其他主题则不需要 -->
  <!-- 从 1.1.0 开始 sdk.css 将不支持 IE 11,如果要支持 IE11 请引用这个 css,并把前面那个删了 -->
  <!-- <link rel="stylesheet" href="sdk-ie11.css" /> -->
  <!-- 不过 amis 开发团队几乎没测试过 IE 11 下的效果,所以可能有细节功能用不了,如果发现请报 issue -->
  <style>
    html,
    body,
    .app-wrapper {
      position: relative;
      width: 100%;
      height: 100%;
      margin: 0;
      padding: 0;
    }
  </style>
</head>
<body>
<div id="root" class="app-wrapper"></div>
<script src="${ctxPath}/sdk/sdk.js"></script>
<script type="text/javascript">
  (function () {
    let amis = amisRequire('amis/embed');
    // 通过替换下面这个配置来生成不同页面
    let amisJSON ={
      "type": "page",
      "title": "",
      "body": [
        {
          "type": "form",
          "id": "u:6d72ddddf222",
          "title": "",
          "body": [
            {
              "type": "grid",
              "columns": [
              ],
              "id": "u:313016b48f71"
            },
            {
              "type": "flex",
              "id": "u:e21645a48093",
              "className": "p-1",
              "items": [
                {
                  "type": "tpl",
                  "id": "u:5130236fd5a1",
                  "tpl": "入园方式",
                  "inline": true,
                  "wrapperComponent": "h2"
                }
              ],
              "style": {
                "position": "static",
                "flexWrap": "nowrap"
              },
              "direction": "row",
              "justify": "center",
              "alignItems": "stretch",
              "isFixedHeight": false,
              "isFixedWidth": false
            },
            {
              "type": "input-image",
              "label": "上传凭证",
              "name": "voucher",
              "autoUpload": true,
              "proxy": true,
              "uploadType": "fileReceptor",
              "imageClassName": "r w-full",
              "receiver": {
                "url": "/mgr/uploadImgAmis",
                "method": "post"
              },
              "id": "u:15f57e1e7de6",
              "accept": ".jpeg, .jpg, .png, .gif",
              "multiple": false,
              "hideUploadButton": false,
              "fixedSize": false,
              "required": true,
              "mode": "horizontal"
            },
            {
              "type": "textarea",
              "label": "备注:",
              "name": "textarea",
              "id": "u:d98613414ea8",
              "minRows": 3,
              "maxRows": 20,
              "mode": "horizontal",
              "size": "md"
            },
            {
              "type": "hidden",
              "name": "id",
              "id": "u:91f4afc2930e",
              "value": `${id}`
            },
            {
              "type": "flex",
              "id": "u:8254704349a2",
              "className": "p-1",
              "items": [
                {
                  "type": "button",
                  "id": "u:6c0b8f917bf7",
                  "label": "关闭",
                  "onEvent": {
                    "click": {
                      "actions": [
                        {
                          "args": {
                          },
                          "script": "parent.layer.close(window.parent.TStudent.layerIndex);",
                          "actionType": "custom"
                        }
                      ]
                    }
                  }
                },
                {
                  "type": "button",
                  "id": "u:6c0b8f917bf7",
                  "label": "保存",
                  "level": "info",
                  "onEvent": {
                    "click": {
                      "actions": [
                        {
                          "componentId": "u:6d72ddddf222",
                          "actionType": "submit"
                        }
                      ]
                    }
                  }
                }
              ],
              "style": {
                "position": "relative"
              }
            },
            {
              "type": "grid",
              "columns": [
              ],
              "id": "u:ec43218540fa"
            }
          ],
          "api": {
            "url": "/ball/cancel",
            "method": "post",
            "messages": {
            },
            "dataType": "form-data"
          },
          "actions": [
          ],
          "onEvent": {
            "submitSucc": {
              "weight": 0,
              "actions": [
                {
                  "args": {
                  },
                  "script": "window.parent.TStudent.table.refresh();",
                  "actionType": "custom"
                },
                {
                  "args": {
                  },
                  "script": "parent.layer.close(window.parent.TStudent.layerIndex);",
                  "actionType": "custom"
                }
              ]
            }
          }
        }
      ],
      "id": "u:b97e4e9b9f48",
      "actions": [
      ]
    };
    let amisScoped = amis.embed('#root', amisJSON);
  })();
</script>
</body>
</html>
cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/join.html
New file
@@ -0,0 +1,189 @@
<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8" />
  <title>amis demo</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta
          name="viewport"
          content="width=device-width, initial-scale=1, maximum-scale=1"
  />
  <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
  <link rel="stylesheet" href="${ctxPath}/sdk/sdk.css" />
  <link rel="stylesheet" href="${ctxPath}/sdk/helper.css" />
  <link rel="stylesheet" href="${ctxPath}/sdk/iconfont.css" />
  <!-- 这是默认主题所需的,如果是其他主题则不需要 -->
  <!-- 从 1.1.0 开始 sdk.css 将不支持 IE 11,如果要支持 IE11 请引用这个 css,并把前面那个删了 -->
  <!-- <link rel="stylesheet" href="sdk-ie11.css" /> -->
  <!-- 不过 amis 开发团队几乎没测试过 IE 11 下的效果,所以可能有细节功能用不了,如果发现请报 issue -->
  <style>
    html,
    body,
    .app-wrapper {
      position: relative;
      width: 100%;
      height: 100%;
      margin: 0;
      padding: 0;
    }
  </style>
</head>
<body>
<div id="root" class="app-wrapper"></div>
<script src="${ctxPath}/sdk/sdk.js"></script>
<script type="text/javascript">
  (function () {
    let amis = amisRequire('amis/embed');
    // 通过替换下面这个配置来生成不同页面
    let amisJSON ={
      "type": "page",
      "title": "",
      "body": [
        {
          "type": "form",
          "id": "u:6d72ddddf25c",
          "title": "",
          "body": [
            {
              "type": "grid",
              "columns": [
              ],
              "id": "u:313016b48f71"
            },
            {
              "type": "flex",
              "id": "u:e21645a48093",
              "className": "p-1",
              "items": [
                {
                  "type": "tpl",
                  "id": "u:5130236fd5a1",
                  "tpl": "入园方式",
                  "inline": true,
                  "wrapperComponent": "h2"
                }
              ],
              "style": {
                "position": "static",
                "flexWrap": "nowrap"
              },
              "direction": "row",
              "justify": "center",
              "alignItems": "stretch",
              "isFixedHeight": false,
              "isFixedWidth": false
            },
            {
              "type": "hidden",
              "name": "id",
              "id": "u:91f4afc2930e",
              "value": `${id}`
            },
            {
              "type": "radios",
              "id": "u:d98068b4f7d2",
              "label": "请选择:",
              "name": "method",
              "options": [
                {
                  "label": "手环",
                  "value": "1"
                }
              ],
              "mode": "inline",
              "required": true
            },
            {
              "type": "flex",
              "id": "u:8254704349a2",
              "className": "p-1",
              "items": [
                {
                  "type": "button",
                  "id": "u:6c0b8f917bf7",
                  "label": "关闭",
                  "onEvent": {
                    "click": {
                      "actions": [
                        {
                          "args": {
                          },
                          "script": "parent.layer.close(window.parent.TStudent.layerIndex);",
                          "actionType": "custom"
                        }
                      ]
                    }
                  }
                },
                {
                  "type": "button",
                  "id": "u:6c0b8f917bf7",
                  "label": "保存",
                  "level": "info",
                  "onEvent": {
                    "click": {
                      "actions": [
                        {
                          "componentId": "u:6d72ddddf25c",
                          "actionType": "submit"
                        }
                      ]
                    }
                  }
                }
              ],
              "style": {
                "position": "relative"
              }
            },
            {
              "type": "grid",
              "columns": [
              ],
              "id": "u:ec43218540fa"
            }
          ],
          "api": {
            "url": "/ball/selectJoin",
            "method": "post",
            "messages": {
            }
          },
          "actions": [
          ],
          "onEvent": {
            "submitSucc": {
              "weight": 0,
              "actions": [
                {
                  "args": {
                  },
                  "script": "window.parent.TStudent.table.refresh();",
                  "actionType": "custom"
                },
                {
                  "args": {
                  },
                  "script": "parent.layer.close(window.parent.TStudent.layerIndex);",
                  "actionType": "custom"
                }
              ]
            }
          }
        }
      ],
      "id": "u:b97e4e9b9f48",
      "actions": [
      ]
    };
    let amisScoped = amis.embed('#root', amisJSON);
  })();
</script>
</body>
</html>
cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue.html
@@ -55,6 +55,45 @@
                            </div>
                            <div class="col-sm-3">
                                <div class="input-group">
                                    <div class="input-group-btn open">
                                        <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button" aria-expanded="true">
                                            支付方式
                                        </button>
                                    </div>
                                    <select class="form-control" id="payMethod">
                                        <option value="">全部</option>
                                        <option value=1>微信</option>
                                        <option value=2>支付宝</option>
                                        <option value=3>玩湃币</option>
                                        <option value=4>手动支付</option>
                                    </select>
                                </div>
                            </div>
                            <div class="col-sm-3">
                                <div class="input-group">
                                    <div class="input-group-btn open">
                                        <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button" aria-expanded="true">
                                            支付方式
                                        </button>
                                    </div>
                                    <select class="form-control" id="state">
                                        <option value="">全部</option>
                                        <option value="0">待支付</option>
                                        <option value="1">待核销</option>
                                        <option value="2">已到店</option>
                                        <option value="3">已完成</option>
                                        <option value="4">已过期</option>
                                        <option value="5">已取消</option>
                                    </select>
                                </div>
                            </div>
                            <div class="col-sm-3">
                                <#button name="搜索" icon="fa-search" clickFun="TStudent.search()"/>
                            </div>
                        </div>
@@ -62,7 +101,10 @@
                                <#button name="添加" icon="fa-plus" clickFun="TStudent.openAddTStudent()"/>
                                <#button name="修改" icon="fa-edit" clickFun="TStudent.openTStudentDetail()" space="true"/>
                            <#button name="查看详情" icon="fa-edit" clickFun="TStudent.openTStudentDetail1()" space="true"/>
                            <#button name="确认到店" icon="fa-edit" clickFun="TStudent.openTStudentDetail1()" space="true"/>
                            <#button name="取消凭证" icon="fa-edit" clickFun="TStudent.openTStudentDetail4()" space="true"/>
                            <#button name="查看详情" icon="fa-edit" clickFun="TStudent.openTStudentDetail5()" space="true"/>
                            @if(shiro.hasPermission("/tStudent/delete")){
                                <#button name="删除" icon="fa-remove" clickFun="TStudent.delete()" space="true"/>
cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue_add.html
@@ -52,7 +52,7 @@
                <div class="form-group">
                    <label class="col-sm-3 control-label">*上课场地:</label>
                    <div class="col-sm-4">
                        <select class="form-control" id="siteId" name="siteId"  onchange="CoursePackageInfo.addTime(this.value)">
                        <select class="form-control" id="siteId" name="siteId"  >
                            <option >请选择场地</option>
@@ -76,7 +76,7 @@
                <div class="form-group">
                    <label class="col-sm-3 control-label">预约时间:</label>
                    <div class="col-sm-4">
                        <input class="form-control" id="time" name="time" type="text" >
                        <input class="form-control" id="time" name="time" type="text" onchange="CoursePackageInfo.addTime()">
                    </div>
                </div>
@@ -248,7 +248,42 @@
        elem: '#time'
        ,lang:"CN",
        min:0,
        max:10
        max:10,
        format:'yyyy-MM-dd',
        done:function (a) {
            console.log("==========="+a)
            var ajax = new $ax(Feng.ctxPath + "/ball/yuyuetimes/"+ $('#siteId').val(), function(data){
                console.log("================"+data)
                if(data!=null){
                    var content='';
                    $.each(data, function(k, v) {
                        var buttonClass = "layui-btn layui-btn-primary";
                        var style = "";
                        if (v.state === 0) {
                            style = "background-color: red;";
                        }
                        var disabledAttribute = v.state === 0 ? "disabled" : "";
                        content += '<button type="button" class="' + buttonClass + '" ' + disabledAttribute + ' style="' + style + '" onclick="toggleColor(this)">' + v.time + '</button>';
                    });
                    $("#ttt2").empty().append(content);
                }
            })
            ajax.set("date",$('#time').val());
            ajax.start()
            var ajax1 = new $ax(Feng.ctxPath + "/ball/halfName/"+ $('#siteId').val(), function(data){
                console.log("================"+data)
                if(data!=null){
                    let htmlStr = '';
                    for (let i = 0; i < data.length; i++) {
                        htmlStr += '<option value="' + data[i] + '">' + data[i] + '</option>'
                    }
                    $("#half").empty().append(htmlStr);
                }
            })
            ajax1.start()
        }
    });
    laydate.render({
cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue_edit.html
New file
@@ -0,0 +1,354 @@
@layout("/common/_container.html"){
<style>
    .green-button {
        background-color: green;
    }
</style>
<div class="ibox float-e-margins">
    <div class="ibox-content">
        <input type="hidden" id="id" value="${item.id}">
        <div class="form-horizontal">
            <div class="row">
                <div class="form-group">
                    <label class="col-sm-3 control-label">*所在省:</label>
                    <div class="col-sm-4">
                        <select class="form-control" id="provinceCode" name="provinceCode">
                            @for(obj in province){
                            <option value="${obj.code}" ${obj.code == item.provinceCode ? 'selected=selected' : ''}>${obj.name}</option>
                            @}
                        </select>
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label">*所在市:</label>
                    <div class="col-sm-4">
                        <select class="form-control" id="cityCode" name="cityCode">
                            @for(obj in city){
                            <option value="${obj.code}" ${obj.code == item.cityCode ? 'selected=selected' : ''}>${obj.name}</option>
                            @}
                        </select>
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label">*所属门店:</label>
                    <div class="col-sm-4">
                        <select class="form-control" id="storeId" name="storeId">
                            @for(obj in store){
                            <option value="${obj.id}" ${obj.id == item.storeId ? 'selected=selected' : ''}>${obj.name}</option>
                            @}
                        </select>
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label">*预约类型:</label>
                    <div class="col-sm-4">
                       <input type="radio" name="type" value="1"  checked="" onclick="updateType(1)"  > 全场
                        <input type="radio" name="type" value="2" onclick="updateType(2)" > 半场
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label">*上课场地:</label>
                    <input type="hidden" id="selSiteId" value="${item.siteId}">
                    <div class="col-sm-4">
                        <select class="form-control" id="siteId" name="siteId"  onchange="CoursePackageInfo.addTime1()" >
                            <option >请选择场地</option>
                            @for(obj in site){
                            <option value="${obj.id}"  data-custom-data="1" ${obj.id == item.siteId ? 'selected=selected' : ''} >${obj.name}</option>
                            @}
                        </select>
                    </div>
                </div>
                <div class="form-group"  id="half1"  hidden="hidden">
                    <label class="col-sm-3 control-label">*选择半场:</label>
                    <div class="col-sm-4">
                        <select class="form-control"  name="half" id="half">
                        </select>
                    </div>
                </div>
                <div class="form-group">
                    <input type="hidden" id="selDate" value="${date}">
                    <label class="col-sm-3 control-label">预约时间:</label>
                    <div class="col-sm-4">
                        <input class="form-control" id="time" name="time" type="text"  value="${date}">
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label">*预约时间段:</label>
                    <div class="col-sm-5" id="ttt1">
                        <div class="layui-btn-group" id="ttt2">
                        </div>
                        <div class="layui-btn-group" id="ttt3">
                            @for(obj in timeRanges){
                            <button  name="has" type="button" ${obj.state == 0 ? "class = 'layui-btn layui-btn-primary' disabled style='background-color: red'" : obj.state == 1 ? "class = 'layui-btn layui-btn-primary green-button'" : "class = 'layui-btn layui-btn-primary'"} onclick="toggleColor(this)">${obj.time}</button>
<!--                            <button type="button" ${obj.state == 0 ? "class = 'layui-btn layui-btn-primary' disabled style='background-color: red'" : "class = 'layui-btn layui-btn-primary' "} onclick="toggleColor(this)">${obj.time}</button>-->
<!--                            <button type="button" ${obj.state == 0 ? "class = 'layui-btn layui-btn-primary green-button'" : "class = 'layui-btn layui-btn-primary'"} onclick="toggleColor(this)">${obj.time}</button>-->
                            @}
                        </div>
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label">现金价格:</label>
                    <div class="col-sm-4">
                        <input class="form-control" id="cash" name="cash" type="text" value="${money[0]!}" >
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label">玩派币价格:</label>
                    <div class="col-sm-4">
                        <input class="form-control" id="play" name="play" type="text" value="${money[1]!}" >
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label">预约人:</label>
                    <div class="col-sm-4">
                        <input class="form-control" id="booker" name="booker" type="text" value="${item.booker}" >
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label">联系电话:</label>
                    <div class="col-sm-4">
                        <input class="form-control" id="phone" name="phone" type="text" value="${item.phone}" >
                    </div>
                </div>
<!--                <input type="text" id = "counpons">-->
            </div>
            <div class="row btn-group-m-t">
                <div class="col-sm-10">
                    <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="CoursePackageInfo.addSubmit1()"/>
                    <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="CoursePackageInfo.close()"/>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/modular/system/ball/yuyue_info.js"></script>
<script type="text/javascript">
    function updateType(o) {
        if(o==1){
            var elements = document.getElementsByClassName("layui-btn layui-btn-primary green-button");
            var count = elements.length;
            console.log("Number of elements: " + count);
            $("#half1").hide()
            var radios = document.getElementsByName("type");
            var selectedValue;
            for (var i = 0; i < radios.length; i++) {
                if (radios[i].checked) {
                    selectedValue = radios[i].value;
                    break;
                }
            }
            var ajax3 = new $ax(Feng.ctxPath + "/ball/getMoney/"+$('#siteId').val()+'/'+selectedValue, function(data){
                console.log("===========3333====="+data)
                if(data!=null){
                    $("#cash").val(data[0] * count);
                    $("#play").val(data[1] * count);
                }
            })
            ajax3.start()
        }else {
            var elements = document.getElementsByClassName("layui-btn layui-btn-primary green-button");
            var count = elements.length;
            console.log("Number of elements: " + count);
            $("#half1").show()
            var radios = document.getElementsByName("type");
            var selectedValue;
            for (var i = 0; i < radios.length; i++) {
                if (radios[i].checked) {
                    selectedValue = radios[i].value;
                    break;
                }
            }
            var ajax3 = new $ax(Feng.ctxPath + "/ball/getMoney/"+$('#siteId').val()+'/'+selectedValue, function(data){
                console.log("===========3333====="+data)
                if(data!=null){
                    $("#cash").val(data[0] * count);
                    $("#play").val(data[1] * count);
                }
            })
            ajax3.start()
        }
    }
    function toggleColor(button) {
        button.classList.toggle("green-button");
        var elements = document.getElementsByClassName("layui-btn layui-btn-primary green-button");
        var count = elements.length;
        console.log("Number of elements: " + count);
        var radios = document.getElementsByName("type");
        var selectedValue;
        for (var i = 0; i < radios.length; i++) {
            if (radios[i].checked) {
                selectedValue = radios[i].value;
                break;
            }
        }
        var ajax3 = new $ax(Feng.ctxPath + "/ball/getMoney/"+$('#siteId').val()+'/'+selectedValue, function(data){
            console.log("===========3333====="+data)
            if(data!=null){
                $("#cash").val(data[0] * count);
                $("#play").val(data[1] * count);
            }
        })
        ajax3.start()
    }
    laydate.render({
        elem: '#time'
        ,lang:"CN",
        min:0,
        max:10,
        format:'yyyy-MM-dd',
        done:function (a) {
        console.log("==============="+$('#time').val())
        console.log("==============="+$('#selDate').val())
        console.log("==============="+$('#siteId').val())
        console.log("==============="+$('#selSiteId').val())
            if ($('#siteId').val() != $('#selSiteId').val()||$('#time').val()!=$('#selDate').val()){
                $("#ttt3").hide()
                $("#ttt2").show()
            }else {
                $("#ttt3").show()
                $("#ttt2").hide()
            }
            console.log("==========="+a)
            var ajax = new $ax(Feng.ctxPath + "/ball/yuyuetimes/"+ $('#siteId').val(), function(data){
                console.log("================"+data)
                if(data!=null){
                    var content='';
                    $.each(data, function(k, v) {
                        var buttonClass = "layui-btn layui-btn-primary";
                        var style = "";
                        if (v.state === 0) {
                            style = "background-color: red;";
                        }
                        var disabledAttribute = v.state === 0 ? "disabled" : "";
                        content += '<button type="button" class="' + buttonClass + '" ' + disabledAttribute + ' style="' + style + '" onclick="toggleColor(this)">' + v.time + '</button>';
                    });
                    $("#ttt2").empty().append(content);
                }
            })
            ajax.start()
            var ajax1 = new $ax(Feng.ctxPath + "/ball/halfName/"+ $('#siteId').val(), function(data){
                console.log("================"+data)
                if(data!=null){
                    let htmlStr = '';
                    for (let i = 0; i < data.length; i++) {
                        htmlStr += '<option value="' + data[i] + '">' + data[i] + '</option>'
                    }
                    $("#half").empty().append(htmlStr);
                }
            })
            ajax1.start()
        }
    });
    laydate.render({
        elem: '#holitime'
        ,range: true //或 range: '~' 来自定义分割字符
    });
    var avatarUp = new $WebUpload("coverDrawing");
    avatarUp.setUploadBarId("progressBar");
    avatarUp.init();
    var avatarUp1 = new $WebUpload("detailDrawing");
    avatarUp1.setUploadBarId("progressBar");
    avatarUp1.init();
    var avatarUp1 = new $WebUpload("introduceDrawing");
    avatarUp1.setUploadBarId("progressBar");
    avatarUp1.init();
    function addTime(){
        var i =  $('#dayTime > div').length
        let htmlStr ='           <div style="display:flex">\n' +
            '                                <input class="form-control" id="classStartTime'+i+'" name="classStartTime" placeholder="请选择" style="width: 200px;">\n' +
            '                                <i class="fa fa-trash-o" style="font-size:24px" onclick="removePrice1(this)"></i>\n' +
            '                            </div>'
        $('#dayTime').append(htmlStr);
        console.log("========="+i)
        laydate.render({
            elem: '#classStartTime'+i,
            type: 'time',
            range: true
        });
    }
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue_info.html
New file
@@ -0,0 +1,384 @@
@layout("/common/_container.html"){
<style>
    .green-button {
        background-color: green;
    }
</style>
<div class="ibox float-e-margins">
    <div class="ibox-content">
        <input type="hidden" id="id" value="${item.id}">
        <div class="form-horizontal">
            <div class="row">
                <div class="form-group">
                    <label class="col-sm-3 control-label">*所在省:</label>
                    <div class="col-sm-4">
                        <select class="form-control" id="provinceCode" name="provinceCode" disabled>
                            @for(obj in province){
                            <option value="${obj.code}" ${obj.code == item.provinceCode ? 'selected=selected' : ''}>${obj.name}</option>
                            @}
                        </select>
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label">*所在市:</label>
                    <div class="col-sm-4">
                        <select class="form-control" id="cityCode" name="cityCode" disabled>
                            @for(obj in city){
                            <option value="${obj.code}" ${obj.code == item.cityCode ? 'selected=selected' : ''}>${obj.name}</option>
                            @}
                        </select>
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label">*所属门店:</label>
                    <div class="col-sm-4">
                        <select class="form-control" id="storeId" name="storeId" disabled>
                            @for(obj in store){
                            <option value="${obj.id}" ${obj.id == item.storeId ? 'selected=selected' : ''}>${obj.name}</option>
                            @}
                        </select>
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label">*预约类型:</label>
                    <div class="col-sm-4">
                        <input type="radio" name="type" value="1"  checked="" onclick="updateType(1)"   disabled> 全场
                        <input type="radio" name="type" value="2" onclick="updateType(2)"  disabled> 半场
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label">*上课场地:</label>
                    <input type="hidden" id="selSiteId" value="${item.siteId}">
                    <div class="col-sm-4">
                        <select class="form-control" id="siteId" name="siteId"  onchange="CoursePackageInfo.addTime1()" disabled >
                            <option >请选择场地</option>
                            @for(obj in site){
                            <option value="${obj.id}"  data-custom-data="1" ${obj.id == item.siteId ? 'selected=selected' : ''} >${obj.name}</option>
                            @}
                        </select>
                    </div>
                </div>
                <div class="form-group"  id="half1"  hidden="hidden">
                    <label class="col-sm-3 control-label">*选择半场:</label>
                    <div class="col-sm-4">
                        <select class="form-control"  name="half" id="half" disabled>
                        </select>
                    </div>
                </div>
                <div class="form-group">
                    <input type="hidden" id="selDate" value="${date}">
                    <label class="col-sm-3 control-label">预约时间:</label>
                    <div class="col-sm-4">
                        <input class="form-control" id="time" name="time" type="text"  value="${date}" disabled>
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label">*预约时间段:</label>
                    <div class="col-sm-5" id="ttt1" disabled="">
                        <div class="layui-btn-group" id="ttt2">
                        </div>
                        <div class="layui-btn-group" id="ttt3">
                            @for(obj in timeRanges){
                            <button  disabled name="has" type="button" ${obj.state == 0 ? "class = 'layui-btn layui-btn-primary' disabled style='background-color: red'" : obj.state == 1 ? "class = 'layui-btn layui-btn-primary green-button'" : "class = 'layui-btn layui-btn-primary'"} onclick="toggleColor(this)">${obj.time}</button>
                            <!--                            <button type="button" ${obj.state == 0 ? "class = 'layui-btn layui-btn-primary' disabled style='background-color: red'" : "class = 'layui-btn layui-btn-primary' "} onclick="toggleColor(this)">${obj.time}</button>-->
                            <!--                            <button type="button" ${obj.state == 0 ? "class = 'layui-btn layui-btn-primary green-button'" : "class = 'layui-btn layui-btn-primary'"} onclick="toggleColor(this)">${obj.time}</button>-->
                            @}
                        </div>
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label">现金价格:</label>
                    <div class="col-sm-4">
                        <input class="form-control" id="cash" name="cash" type="text" value="${money[0]!}" disabled >
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label">玩派币价格:</label>
                    <div class="col-sm-4">
                        <input class="form-control" id="play" name="play" type="text" value="${money[1]!}" disabled >
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label">预约人:</label>
                    <div class="col-sm-4">
                        <input class="form-control" id="booker" name="booker" type="text" value="${item.booker}" disabled >
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label">联系电话:</label>
                    <div class="col-sm-4">
                        <input class="form-control" id="phone" name="phone" type="text" value="${item.phone}" disabled >
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label">操作人:</label>
                    <div class="col-sm-4">
                        <input class="form-control" id="cancelUserId" name="cancelUserId" type="text" value="${cancelUser!}" disabled >
                    </div>
                </div>
                <div class="form-group" disabled>
                    <label class="col-sm-3 control-label head-scu-label">*上传凭证:</label>
                    <div class="col-sm-2">
                        <div id="introduceDrawingPreId">
                            <div><img width="100px" height="100px" src="${item.voucher}"></div>
                        </div>
                    </div>
                    <div class="col-sm-2">
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-3 control-label">备注:</label>
                    <div class="col-sm-4">
                        <textarea class="form-control" id="remark" name="remark" disabled>${item.remark}</textarea >
                    </div>
                </div>
            </div>
            <div class="row btn-group-m-t">
                <div class="col-sm-10">
<!--                    <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="CoursePackageInfo.addSubmit1()"/>-->
                    <#button btnCss="danger" name="关闭" id="cancel" icon="fa-eraser" clickFun="CoursePackageInfo.close()"/>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/modular/system/ball/yuyue_info.js"></script>
<script type="text/javascript">
    function updateType(o) {
        if(o==1){
            var elements = document.getElementsByClassName("layui-btn layui-btn-primary green-button");
            var count = elements.length;
            console.log("Number of elements: " + count);
            $("#half1").hide()
            var radios = document.getElementsByName("type");
            var selectedValue;
            for (var i = 0; i < radios.length; i++) {
                if (radios[i].checked) {
                    selectedValue = radios[i].value;
                    break;
                }
            }
            var ajax3 = new $ax(Feng.ctxPath + "/ball/getMoney/"+$('#siteId').val()+'/'+selectedValue, function(data){
                console.log("===========3333====="+data)
                if(data!=null){
                    $("#cash").val(data[0] * count);
                    $("#play").val(data[1] * count);
                }
            })
            ajax3.start()
        }else {
            var elements = document.getElementsByClassName("layui-btn layui-btn-primary green-button");
            var count = elements.length;
            console.log("Number of elements: " + count);
            $("#half1").show()
            var radios = document.getElementsByName("type");
            var selectedValue;
            for (var i = 0; i < radios.length; i++) {
                if (radios[i].checked) {
                    selectedValue = radios[i].value;
                    break;
                }
            }
            var ajax3 = new $ax(Feng.ctxPath + "/ball/getMoney/"+$('#siteId').val()+'/'+selectedValue, function(data){
                console.log("===========3333====="+data)
                if(data!=null){
                    $("#cash").val(data[0] * count);
                    $("#play").val(data[1] * count);
                }
            })
            ajax3.start()
        }
    }
    function toggleColor(button) {
        button.classList.toggle("green-button");
        var elements = document.getElementsByClassName("layui-btn layui-btn-primary green-button");
        var count = elements.length;
        console.log("Number of elements: " + count);
        var radios = document.getElementsByName("type");
        var selectedValue;
        for (var i = 0; i < radios.length; i++) {
            if (radios[i].checked) {
                selectedValue = radios[i].value;
                break;
            }
        }
        var ajax3 = new $ax(Feng.ctxPath + "/ball/getMoney/"+$('#siteId').val()+'/'+selectedValue, function(data){
            console.log("===========3333====="+data)
            if(data!=null){
                $("#cash").val(data[0] * count);
                $("#play").val(data[1] * count);
            }
        })
        ajax3.start()
    }
    laydate.render({
        elem: '#time'
        ,lang:"CN",
        min:0,
        max:10,
        format:'yyyy-MM-dd',
        done:function (a) {
            console.log("==============="+$('#time').val())
            console.log("==============="+$('#selDate').val())
            console.log("==============="+$('#siteId').val())
            console.log("==============="+$('#selSiteId').val())
            if ($('#siteId').val() != $('#selSiteId').val()||$('#time').val()!=$('#selDate').val()){
                $("#ttt3").hide()
                $("#ttt2").show()
            }else {
                $("#ttt3").show()
                $("#ttt2").hide()
            }
            console.log("==========="+a)
            var ajax = new $ax(Feng.ctxPath + "/ball/yuyuetimes/"+ $('#siteId').val(), function(data){
                console.log("================"+data)
                if(data!=null){
                    var content='';
                    $.each(data, function(k, v) {
                        var buttonClass = "layui-btn layui-btn-primary";
                        var style = "";
                        if (v.state === 0) {
                            style = "background-color: red;";
                        }
                        var disabledAttribute = v.state === 0 ? "disabled" : "";
                        content += '<button type="button" class="' + buttonClass + '" ' + disabledAttribute + ' style="' + style + '" onclick="toggleColor(this)">' + v.time + '</button>';
                    });
                    $("#ttt2").empty().append(content);
                }
            })
            ajax.start()
            var ajax1 = new $ax(Feng.ctxPath + "/ball/halfName/"+ $('#siteId').val(), function(data){
                console.log("================"+data)
                if(data!=null){
                    let htmlStr = '';
                    for (let i = 0; i < data.length; i++) {
                        htmlStr += '<option value="' + data[i] + '">' + data[i] + '</option>'
                    }
                    $("#half").empty().append(htmlStr);
                }
            })
            ajax1.start()
        }
    });
    laydate.render({
        elem: '#holitime'
        ,range: true //或 range: '~' 来自定义分割字符
    });
    var avatarUp = new $WebUpload("coverDrawing");
    avatarUp.setUploadBarId("progressBar");
    avatarUp.init();
    var avatarUp1 = new $WebUpload("detailDrawing");
    avatarUp1.setUploadBarId("progressBar");
    avatarUp1.init();
    var avatarUp1 = new $WebUpload("introduceDrawing");
    avatarUp1.setUploadBarId("progressBar");
    avatarUp1.init();
    function addTime(){
        var i =  $('#dayTime > div').length
        let htmlStr ='           <div style="display:flex">\n' +
            '                                <input class="form-control" id="classStartTime'+i+'" name="classStartTime" placeholder="请选择" style="width: 200px;">\n' +
            '                                <i class="fa fa-trash-o" style="font-size:24px" onclick="removePrice1(this)"></i>\n' +
            '                            </div>'
        $('#dayTime').append(htmlStr);
        console.log("========="+i)
        laydate.render({
            elem: '#classStartTime'+i,
            type: 'time',
            range: true
        });
    }
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/course/course.html
@@ -4,7 +4,7 @@
    <div class="col-sm-12">
        <div class="ibox float-e-margins">
            <div class="ibox-title">
                <h5>课程管理</h5>
                <h5>视频课管理</h5>
            </div>
            <div class="ibox-content">
                <div class="row row-lg">
@@ -35,24 +35,12 @@
                            </div>
                        </div>
                        <div class="hidden-xs" id="managerTableToolbar" role="group">
                            @if(shiro.hasPermission("/course/addCourse")){
                            <#button name="添加" icon="fa-plus" clickFun="Course.addCourse()"/>
                            @}
                            @if(shiro.hasPermission("/course/editCourse")){
                            <#button name="编辑" icon="fa-edit" clickFun="Course.editCourse()" space="true"/>
                            @}
                            @if(shiro.hasPermission("/course/deleteCourse")){
                            <#button name="删除" icon="fa-remove" clickFun="Course.deleteCourse()" space="true"/>
                            @}
                            @if(shiro.hasPermission("/course/upCourse")){
                            <#button name="上架" icon="fa-refresh" clickFun="Course.editCourseState(1)" space="true"/>
                            @}
                            @if(shiro.hasPermission("/course/downCourse")){
                            <#button name="下架" icon="fa-warning" clickFun="Course.editCourseState(2)" space="true"/>
                            @}
                            @if(shiro.hasPermission("/course/detailsCourse")){
                            <#button name="详情" icon="fa-check-circle" clickFun="Course.detailsCourse()" space="true"/>
                            @}
                        </div>
                        <#table id="managerTable"/>
                    </div>
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_add.html
@@ -205,7 +205,7 @@
                            <span class="classNumber_span"  ${type == 2||type == 3 ? 'hidden=hidden' : ''}><input class="classNumber" type="number" min="0" placeholder="请输入" style="width: 110px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;">&nbsp;&nbsp;&nbsp;&nbsp;</span>
                            <span class="cash_span" ></span>
                            <span class="paiCoin_span"></span>
                            <#button btnCss="info" name="优惠卷" id="ensure" icon="fa-check" clickFun="CoursePackageInfo.openDia(1)"/>
                            <#button btnCss="info" name="优惠券" id="ensure" icon="fa-check" clickFun="CoursePackageInfo.openDia(1)"/>
                            <i class="fa fa-plus-circle" style="font-size:24px" onclick="addPrice(${type})"></i>
                            <input type="text" id = "counpons1" class="counpons" hidden="hidden" >
                        </div>
cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_edit.html
@@ -221,7 +221,7 @@
                                @}
                            </span>
                            <input type="hidden" id="counpons1" value="${couponIds}" class="counpons">
                            <#button btnCss="info" name="优惠卷" id="ensure" icon="fa-check" clickFun="CoursePackageInfo.openDia(1)"/>
                            <#button btnCss="info" name="优惠券" id="ensure" icon="fa-check" clickFun="CoursePackageInfo.openDia(1)"/>
                            <i class="fa fa-plus-circle" style="font-size:24px" onclick="addPrice(${type})"></i>
                        </div>
                    </div>
cloud-server-management/src/main/webapp/WEB-INF/view/system/gameData/GameData.html
@@ -66,7 +66,7 @@
                                    @}
                                </select>
                                &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                                <#button name="搜索" icon="fa-search" clickFun="Search()"/>
                                <#button name="搜索" icon="fa-search" clickFun="BatterData()"/>
                            </div>
                            <div class="col-sm-10">
                                <div class="row" id="t1" style="margin-left: 100px;">
@@ -142,61 +142,76 @@
                        </div>
                    </div>
                    <div class="row" id="content3" style="margin-left: 100px;">
                        <div class="col-sm-11">
                            <div class="form-group">
                                <span id="totalNumber3">全球场次总数:</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                            </div>
                        </div>
                        </br>
                        <div class="col-sm-11" style="display: flex">
                            <div class="form-group">
                                <label class="col-sm-3 control-label">*筛选城市:</label>
                                <label class="col-sm-3 control-label">*筛选范围:</label>
                                <div class="col-sm-9">
                                    <select style="width: 200px" class="form-control" id="yearOrMonth3" name="cCode" onchange="getStoreByCity1(this)">
                                    <select style="width: 300px" class="form-control" id="yearOrMonth3" name="cCode" >
                                        <option value="y">年度</option>
                                        <option value="m">月度</option>
                                    </select>
                                </div>
                            </div>
                            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                            <div class="form-group" >
                                <label class="col-sm-3 control-label">*筛选内容:</label>
                                <div class="col-sm-9" style="display: flex;">
                                    <input style="width: 200px" class="form-control" id="con3"  placeholder="请输入年份或者月份" type="text">
                                    <input style="width: 300px" class="form-control" id="con3"  placeholder="请输入年份或者月份" type="text">
                                </div>
                            </div>
                            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                            <div class="form-group">
                                <label class="col-sm-3 control-label">*筛选城市:</label>
                                <div class="col-sm-9">
                                    <select style="width: 200px" class="form-control" id="cCode3" name="cCode" onchange="getStoreByCity1(this)">
                                    <select style="width: 300px" class="form-control" id="cCode3" name="cCode" onchange="getStoreByCity3(this)">
                                        <option value="">全球</option>
                                        @for(obj in list){
                                        <option style="width: 200px" value="${obj.cityCode}">${obj.city}</option>
                                        <option style="width: 300px" value="${obj.cityCode}">${obj.city}</option>
                                        @}
                                    </select>
                                </div>
                            </div>
                            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                            <div class="form-group" >
                                <label class="col-sm-3 control-label">*筛选场地:</label>
                                <div class="col-sm-9">
                                    <select style="width: 200px" class="form-control" id="site3" name="site">
                                        <option value="">全球</option>
                                        @for(obj in sites){
                                        <option style="width: 200px" value="${obj.id}">${obj.name}</option>
                                        @}
                                    </select>
                                </div>
                        </div>
                        <div class="col-sm-11" style="display: flex">
                        <div class="form-group" >
                            <label class="col-sm-3 control-label">*筛选场地:</label>
                            <div class="col-sm-9">
                                <select style="width: 300px" class="form-control" id="site3" name="site">
                                    <option value="">全球</option>
                                    @for(obj in sites){
                                    <option style="width: 300px" value="${obj.id}">${obj.name}</option>
                                    @}
                                </select>
                            </div>
                            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<#button name="搜索" icon="fa-search" clickFun="TSite.search3()"/>
                        </div>
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<#button name="搜索" icon="fa-search" clickFun="TSite.search3()"/>
                        </div>
                        <#table id="TSiteTable"/>
                    </div>
                <div class="row" id="content4" style="margin-left: 100px;">
                    <div class="col-sm-11">
                        <div class="form-group">
                            <span id="totalNumber4">全球场次总数:</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                        </div>
                    </div>
                    <div class="col-sm-11" style="display: flex">
                        <div class="form-group">
                            <label class="col-sm-3 control-label">*筛选城市:</label>
                            <label class="col-sm-3 control-label">*筛选范围:</label>
                            <div class="col-sm-9">
                                <select style="width: 200px" class="form-control" id="yearOrMonth4" name="cCode" onchange="getStoreByCity1(this)">
                                <select style="width: 300px" class="form-control" id="yearOrMonth4" name="cCode">
                                    <option value="y">年度</option>
                                    <option value="m">月度</option>
                                </select>
                            </div>
                        </div>
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                        <div class="form-group" >
                            <label class="col-sm-3 control-label">*筛选内容:</label>
                            <div class="col-sm-9" style="display: flex;">
@@ -207,7 +222,7 @@
                        <div class="form-group">
                            <label class="col-sm-3 control-label">*筛选城市:</label>
                            <div class="col-sm-9">
                                <select style="width: 300px" class="form-control" id="cCode4" name="cCode" onchange="getStoreByCity1(this)">
                                <select style="width: 300px" class="form-control" id="cCode4" name="cCode" onchange="getStoreByCity4(this)">
                                    <option value="">全球</option>
                                    @for(obj in list){
                                    <option style="width: 300px" value="${obj.cityCode}">${obj.city}</option>
@@ -216,19 +231,23 @@
                            </div>
                        </div>
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                        <div class="form-group" >
                            <label class="col-sm-3 control-label">*筛选场地:</label>
                            <div class="col-sm-9">
                                <select style="width: 300px" class="form-control" id="site4" name="site">
                                    <option value="">全球</option>
                                    @for(obj in sites){
                                    <option style="width: 300px" value="${obj.id}">${obj.name}</option>
                                    @}
                                </select>
                            </div>
                        </div>
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<#button name="搜索" icon="fa-search" clickFun="TCompetition.search4()"/>
                    </div>
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                        <div class="col-sm-11" style="display: flex">
                            <div class="form-group" >
                                <label class="col-sm-3 control-label">*筛选场地:</label>
                                <div class="col-sm-9">
                                    <select style="width: 300px" class="form-control" id="site4" name="site">
                                        <option value="">全球</option>
                                        @for(obj in sites){
                                        <option style="width: 300px" value="${obj.id}">${obj.name}</option>
                                        @}
                                    </select>
                                </div>
                            </div>
                            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<#button name="搜索" icon="fa-search" clickFun="TSite1.search4()"/>
                        </div>
                    <#table id="TSiteTable1"/>
                </div>
                </div>
@@ -376,8 +395,8 @@
            // 时长
            yT = [];
            mT = [];
            yearX=[];
            for (let i = 0; i <yDataList.length ; i++) {
                yD.push(yDataList[i].total_num);
                yT.push(yDataList[i].batter_time);
            }
@@ -387,6 +406,9 @@
            }
            for (let i = 0; i <resp.yearList.length ; i++) {
                yearX.push(resp.yearList[i])
            }
            if(resp.yearList.length==0){
                yearX=[2019,2020,2021,2023]
            }
            var totalNumber= resp.totalNumber;
            var totalTime= resp.totalTime;
@@ -496,7 +518,12 @@
                    }
                ]
            };
            var myChart4  = echarts.init(document.getElementById('number'));
            myChart4.setOption(option);
            var myChart5  = echarts.init(document.getElementById('time'));
            myChart5.setOption(option2);
        });
        ajax.set("storeId",$("#stores").val());
        ajax.start();
    }
@@ -546,7 +573,18 @@
        BatterData();
        SUTUData();
        Search1();
        // 跨城赛获取全球场次总数
        var ajax = new $ax(Feng.ctxPath + "/gameData/cityGame", function(data){
            var totalNumber3= document.getElementById("totalNumber3");
            totalNumber3.innerText = "全球场次总数:"+data.totalNum;
        });
        ajax.start();
        // 获取90°准度赛全球场次总数
        var ajax4 = new $ax(Feng.ctxPath + "/gameData/cityGameOne", function(data){
            var totalNumber4= document.getElementById("totalNumber4");
            totalNumber4.innerText = "全球场次总数:"+data.totalNum;
        });
        ajax4.start();
        // 基于准备好的dom,初始化echarts实例
        var myChart  = echarts.init(document.getElementById('number'));
@@ -619,7 +657,12 @@
        var cityCode=$(e).val();
        var ajax = new $ax(Feng.ctxPath + "/tSite/getSiteByCity", function(data){
            if(data!=null){
                var content='<option value="">全球</option>';
                if (cityCode==""){
                    var content='<option value="">全球</option>';
                }else{
                    var content='<option value="">全部</option>';
                }
                $.each(data, function(k,v) {
                    content += "<option value='"+v.id+"'>"+v.name+"</option>";
                });
@@ -629,15 +672,37 @@
        ajax.set("oneId",cityCode);
        ajax.start();
    }
    function getStoreByCity1(e) {
    function getStoreByCity3(e) {
        var cityCode=$(e).val();
        var ajax = new $ax(Feng.ctxPath + "/tSite/getSiteByCity", function(data){
            if(data!=null){
                var content='<option value="">全球</option>';
                if (cityCode==""){
                    var content='<option value="">全球</option>';
                }else{
                    var content='<option value="">全部</option>';
                }
                $.each(data, function(k,v) {
                    content += "<option value='"+v.id+"'>"+v.name+"</option>";
                });
                $("#site1").empty().append(content);
                $("#site3").empty().append(content);
            }
        });
        ajax.set("oneId",cityCode);
        ajax.start();
    }
    function getStoreByCity4(e) {
        var cityCode=$(e).val();
        var ajax = new $ax(Feng.ctxPath + "/tSite/getSiteByCity", function(data){
            if(data!=null){
                if (cityCode==""){
                    var content='<option value="">全球</option>';
                }else{
                    var content='<option value="">全部</option>';
                }
                $.each(data, function(k,v) {
                    content += "<option value='"+v.id+"'>"+v.name+"</option>";
                });
                $("#site4").empty().append(content);
            }
        });
        ajax.set("oneId",cityCode);
cloud-server-management/src/main/webapp/WEB-INF/view/system/gateData/GateData.html
@@ -11,7 +11,7 @@
                        <div class="row">
                        </div>
                <div class="hidden-xs" id="TCompetitionTableToolbar" role="group">
                    <h3>场地总人次:</h3>
                    <h3 id="totalNumber">场地总人次:</h3>
                </div>
                <#table id="TSiteTable"/>
            </div>
@@ -27,5 +27,12 @@
        ,range: true
        ,lang:"en"
    });
    $(function(){
        var ajax = new $ax(Feng.ctxPath + "/gateData/totalNum", function(data){
            var totalNumber= document.getElementById("totalNumber");
            totalNumber.innerText = "场地总人次:" + data +"次";
        });
        ajax.start();
    });
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/operator/Operator.html
@@ -39,6 +39,7 @@
                            <#button name="编辑" icon="fa-edit" clickFun="TSite.openInfo()" space="true"/>
                            <#button name="冻结" icon="fa-remove" clickFun="TSite.offShelf()" space="true"/>
                            <#button name="解冻" icon="fa-check" clickFun="TSite.onShelf()" space="true"/>
                            <#button name="分账比例" icon="fa-plus" clickFun="TSite.proportion()"/>
                            <#button name="重置密码" icon="fa-search" clickFun="TSite.reload()" space="true"/>
                        </div>
                        <#table id="TSiteTable"/>
cloud-server-management/src/main/webapp/WEB-INF/view/system/operator/OperatorUser_proportion.html
New file
@@ -0,0 +1,109 @@
@layout("/common/_container.html"){
<style>
    .avatar-uploader .el-upload {
        border: 1px dashed #d9d9d9;
        border-radius: 6px;
        cursor: pointer;
        position: relative;
        height: 100px;
        width: 100px;
        overflow: hidden;
    }
    .avatar-uploader .el-upload:hover {
        border-color: #409EFF;
    }
    .avatar-uploader-icon {
        font-size: 28px;
        color: #8c939d;
        width: 100px;
        height: 100px;
        line-height: 100px;
        margin-top: 32px;
        text-align: center;
    }
    .avatar {
        width: 100px;
        height: 100px;
        display: block;
    }
    .col-sm-12 {
        margin-top: 20px;
    }
    .col-sm-12 select {
        height: 33px;
    }
    #app1{
        margin-left: 255px;
    }
</style>
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
<div class="ibox float-e-margins">
    <div class="ibox-content">
        <div class="form-horizontal" id="carInfoForm">
            <div class="row">
                <div class="col-lg-6" style="">
                    <input hidden id="operatorIdOne" value="${operatorIdOne}">
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*支付宝分账比例(%):</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" id="alipayProportion" value="${alipayProportion}"  placeholder="请输入" type="number">
                        </div>
                    </div>
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*微信分账比例(%):</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" id="wechatProportion" value="${wechatProportion}"  placeholder="请输入" type="number">
                        </div>
                    </div>
                </div>
            </div>
            <div class="form-group">
                <div class="row btn-group-m-t">
                    <div class="col-sm-10 col-sm-offset-5" >
                        <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TSite.addSubmit1()"/>
                        <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TSite.close()"/>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/modular/system/operator/operator.js"></script>
<script src="${ctxPath}/js/vue/vue.js"></script>
<script src="${ctxPath}/js/elementui/index.js"></script>
<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
<script>
    laydate.render({
        elem: '#tradeTime'
        ,range: true
        ,lang:"CN"
    });
    laydate.render({
        elem: '#IDCardTime'
        ,range: true
        ,lang:"CN"
    });
    laydate.render({
        elem: '#bTime'
        ,range: true
        ,lang:"CN"
    });
    function updateHalf(e) {
        if(e==1){
            $("#benefit").hide()
        }else {
            $("#benefit").show()
        }
    }
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/operator/OperatorUser_proportionAuth.html
New file
@@ -0,0 +1,125 @@
@layout("/common/_container.html"){
<style>
    .avatar-uploader .el-upload {
        border: 1px dashed #d9d9d9;
        border-radius: 6px;
        cursor: pointer;
        position: relative;
        height: 100px;
        width: 100px;
        overflow: hidden;
    }
    .avatar-uploader .el-upload:hover {
        border-color: #409EFF;
    }
    .avatar-uploader-icon {
        font-size: 28px;
        color: #8c939d;
        width: 100px;
        height: 100px;
        line-height: 100px;
        margin-top: 32px;
        text-align: center;
    }
    .avatar {
        width: 100px;
        height: 100px;
        display: block;
    }
    .col-sm-12 {
        margin-top: 20px;
    }
    .col-sm-12 select {
        height: 33px;
    }
    #app1{
        margin-left: 255px;
    }
</style>
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
<div class="ibox float-e-margins">
    <div class="ibox-content">
        <div class="form-horizontal" id="carInfoForm">
            <div class="row">
                <div class="col-lg-6" style="">
                    <input id="operatorId" value="${operatorId}" hidden>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*支付宝认证类型:</label>
                        <div class="col-sm-9">
                            <input type="radio" name="alipayType" value="1" checked>个人
                            <input type="radio" name="alipayType" value="2" >企业
                        </div>
                    </div>
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*支付宝商户号:</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" id="alipayNum"  placeholder="请输入" type="text">
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-3 control-label">*微信认证类型:</label>
                        <div class="col-sm-9">
                            <input type="radio" name="wechatType" value="1" checked>个人
                            <input type="radio" name="wechatType" value="2" >企业
                        </div>
                    </div>
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*微信商户号:</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" id="wechatNum"  placeholder="请输入" type="text">
                        </div>
                    </div>
                </div>
            </div>
            <div class="form-group">
                <div class="row btn-group-m-t">
                    <div class="col-sm-10 col-sm-offset-5" >
                        <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TSite.addSubmit()"/>
                        <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TSite.close()"/>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/modular/system/operator/operator.js"></script>
<script src="${ctxPath}/js/vue/vue.js"></script>
<script src="${ctxPath}/js/elementui/index.js"></script>
<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
<script>
    laydate.render({
        elem: '#tradeTime'
        ,range: true
        ,lang:"CN"
    });
    laydate.render({
        elem: '#IDCardTime'
        ,range: true
        ,lang:"CN"
    });
    laydate.render({
        elem: '#bTime'
        ,range: true
        ,lang:"CN"
    });
    function updateHalf(e) {
        if(e==1){
            $("#benefit").hide()
        }else {
            $("#benefit").show()
        }
    }
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/operatorUser/OperatorUser.html
@@ -93,8 +93,7 @@
                            </div>
                        </div>
                        <div class="hidden-xs" id="TCompetitionTableToolbar" role="group">
                            <#button name="分账比例" icon="fa-plus" clickFun="TSite.openAddTSite()"/>
                            <#button name="认证" icon="fa-plus" clickFun="TSite.openInfo()"/>
                            <#button name="分账比例" icon="fa-plus" clickFun="TSite.proportion()"/>
                        </div>
                        <#table id="TSiteTable"/>
                    </div>
cloud-server-management/src/main/webapp/WEB-INF/view/system/operatorUser/OperatorUser_auth.html
File was deleted
cloud-server-management/src/main/webapp/WEB-INF/view/system/operatorUser/OperatorUser_proportion.html
New file
@@ -0,0 +1,109 @@
@layout("/common/_container.html"){
<style>
    .avatar-uploader .el-upload {
        border: 1px dashed #d9d9d9;
        border-radius: 6px;
        cursor: pointer;
        position: relative;
        height: 100px;
        width: 100px;
        overflow: hidden;
    }
    .avatar-uploader .el-upload:hover {
        border-color: #409EFF;
    }
    .avatar-uploader-icon {
        font-size: 28px;
        color: #8c939d;
        width: 100px;
        height: 100px;
        line-height: 100px;
        margin-top: 32px;
        text-align: center;
    }
    .avatar {
        width: 100px;
        height: 100px;
        display: block;
    }
    .col-sm-12 {
        margin-top: 20px;
    }
    .col-sm-12 select {
        height: 33px;
    }
    #app1{
        margin-left: 255px;
    }
</style>
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
<div class="ibox float-e-margins">
    <div class="ibox-content">
        <div class="form-horizontal" id="carInfoForm">
            <div class="row">
                <div class="col-lg-6" style="">
                    <input hidden id="operatorIdOne" value="${operatorIdOne}">
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*支付宝分账比例:</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" id="alipayProportion" value="${alipay}"  placeholder="请输入" type="text">
                        </div>
                    </div>
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">*微信分账比例:</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" id="wechatProportion" value="${wechat}"  placeholder="请输入" type="text">
                        </div>
                    </div>
                </div>
            </div>
            <div class="form-group">
                <div class="row btn-group-m-t">
                    <div class="col-sm-10 col-sm-offset-5" >
                        <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TSite.addSubmit()"/>
                        <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TSite.close()"/>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/modular/system/operatorUser/operatorUser.js"></script>
<script src="${ctxPath}/js/vue/vue.js"></script>
<script src="${ctxPath}/js/elementui/index.js"></script>
<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
<script>
    laydate.render({
        elem: '#tradeTime'
        ,range: true
        ,lang:"CN"
    });
    laydate.render({
        elem: '#IDCardTime'
        ,range: true
        ,lang:"CN"
    });
    laydate.render({
        elem: '#bTime'
        ,range: true
        ,lang:"CN"
    });
    function updateHalf(e) {
        if(e==1){
            $("#benefit").hide()
        }else {
            $("#benefit").show()
        }
    }
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/operatorUser/OperatorUser_proportionAuth.html
New file
@@ -0,0 +1,125 @@
@layout("/common/_container.html"){
<style>
    .avatar-uploader .el-upload {
        border: 1px dashed #d9d9d9;
        border-radius: 6px;
        cursor: pointer;
        position: relative;
        height: 100px;
        width: 100px;
        overflow: hidden;
    }
    .avatar-uploader .el-upload:hover {
        border-color: #409EFF;
    }
    .avatar-uploader-icon {
        font-size: 28px;
        color: #8c939d;
        width: 100px;
        height: 100px;
        line-height: 100px;
        margin-top: 32px;
        text-align: center;
    }
    .avatar {
        width: 100px;
        height: 100px;
        display: block;
    }
    .col-sm-12 {
        margin-top: 20px;
    }
    .col-sm-12 select {
        height: 33px;
    }
    #app1{
        margin-left: 255px;
    }
</style>
<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.15&key=77b37f0753049c4e712ea79a24e0719c"></script>
<div class="ibox float-e-margins">
    <div class="ibox-content">
        <div class="form-horizontal" id="carInfoForm">
            <div class="row">
                <div class="col-lg-6" style="">
                    <input id="operatorId" value="${operatorId}" hidden>
                    <div class="form-group">
                        <label class="col-sm-4 control-label" >
                            支付宝认证类型:
                            <input type="radio" name="alipayType" value="1" checked>个人
                            <input type="radio" name="alipayType" value="2" >企业
                        </label>
                    </div>
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">支付宝商户号</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" id="alipayNum"  placeholder="请输入" type="text">
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="col-sm-4 control-label" >
                            微信认证类型:
                            <input type="radio" name="wechatType" value="1" checked>个人
                            <input type="radio" name="wechatType" value="2" >企业
                        </label>
                    </div>
                    <div class="form-group" >
                        <label class="col-sm-3 control-label">微信商户号</label>
                        <div class="col-sm-9">
                            <input style="width: 300px" class="form-control" id="wechatNum"  placeholder="请输入" type="text">
                        </div>
                    </div>
                </div>
            </div>
            <div class="form-group">
                <div class="row btn-group-m-t">
                    <div class="col-sm-10 col-sm-offset-5" >
                        <#button btnCss="info" name="提交" id="ensure" icon="fa-check" clickFun="TSite.addSubmit()"/>
                        <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TSite.close()"/>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<script src="${ctxPath}/modular/system/operatorUser/operatorUser.js"></script>
<script src="${ctxPath}/js/vue/vue.js"></script>
<script src="${ctxPath}/js/elementui/index.js"></script>
<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
<script>
    laydate.render({
        elem: '#tradeTime'
        ,range: true
        ,lang:"CN"
    });
    laydate.render({
        elem: '#IDCardTime'
        ,range: true
        ,lang:"CN"
    });
    laydate.render({
        elem: '#bTime'
        ,range: true
        ,lang:"CN"
    });
    function updateHalf(e) {
        if(e==1){
            $("#benefit").hide()
        }else {
            $("#benefit").show()
        }
    }
</script>
@}
cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_add.html
@@ -70,7 +70,7 @@
            <div class="form-group" id="shop">
                <label class="col-sm-3 control-label">举办门店:</label>
                <div class="col-sm-9">
                    <select class="form-control" id="shopId" name="shopId">
                    <select class="form-control" id="shopId" name="shopId" multiple>
                        <option value="">选择门店</option>
                    </select>
                </div>
@@ -193,10 +193,31 @@
    </div>
</div>
<script src="${ctxPath}/modular/system/tCompetition/tCompetition_info.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/css/select2.min.css">
<!--<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.13/js/select2.min.js"></script>
<script src="${ctxPath}/js/vue/vue.js"></script>
<script src="${ctxPath}/js/elementui/index.js"></script>
<link rel="stylesheet" href="${ctxPath}/js/elementui/index.css">
<script>
    $(document).ready(function() {
        $('#shopId').select2({
            multiple: true,
            closeOnSelect: false
        });
    });
    laydate.render({
        elem: '#startTime'
        ,type:"datetime"
    });
    laydate.render({
        elem: '#endTime'
        ,type:"datetime"
    });
    var vue2 = new Vue({
        el: '#app1',
        props: {
cloud-server-management/src/main/webapp/static/modular/system/ball/yuyue.js
@@ -127,23 +127,88 @@
 */
TStudent.openTStudentDetail = function () {
    if (this.check()) {
        if (TStudent.seItem.status!=1){
            Feng.error("请选择待核销的数据")
            return
        }
        var index = layer.open({
            type: 2,
            title: '详情',
            area: ['100%', '100%'],  //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/ball/pre_edit/' + TStudent.seItem.id
            content: Feng.ctxPath + '/ball/yueyue_edit/' + TStudent.seItem.id
        });
        this.layerIndex = index;
    }
};
TStudent.openTStudentDetail5 = function () {
    if (this.check()) {
        var index = layer.open({
            type: 2,
            title: '详情',
            area: ['100%', '100%'],  //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/ball/yueyue_info/' + TStudent.seItem.id
        });
        this.layerIndex = index;
    }
};
/**
 * 打开详情
 * 确认到店
 */
TStudent.openTStudentDetail1 = function () {
    if (this.check()) {
        if (TStudent.seItem.status!=1){
            Feng.error("请选择待核销的数据")
            return
        }
        var index = layer.open({
            type: 2,
            title: '',
            area: ['20%', '25%'],  //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/ball/joinmethod/' + TStudent.seItem.id
        });
        this.layerIndex = index;
    }
};
/**
 * 确认到店
 */
TStudent.openTStudentDetail4 = function () {
    if (this.check()) {
        if (TStudent.seItem.status!=1){
            Feng.error("请选择待核销的数据")
            return
        }
        var index = layer.open({
            type: 2,
            title: '',
            area: ['30%', '40%'],  //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/ball/tocancel/' + TStudent.seItem.id
        });
        this.layerIndex = index;
    }
};
TStudent.openTStudentDetail2 = function () {
    if (this.check()) {
        var index = layer.open({
            type: 2,
@@ -185,7 +250,9 @@
    queryData['store'] = $("#store").val();
    queryData['peopleName'] = $("#peopleName").val();
    queryData['phone'] = $("#phone").val();
    queryData['date'] = $("#peopleName").val();
    queryData['date'] = $("#date").val();
    queryData['payMethod'] = $("#payMethod").val();
    queryData['state'] = $("#state").val();
cloud-server-management/src/main/webapp/static/modular/system/ball/yuyue_info.js
@@ -62,6 +62,59 @@
            $("#ttt2").empty().append(content);
        }
    })
    ajax.set("date",$('#time').val());
    ajax.start()
    var ajax1 = new $ax(Feng.ctxPath + "/ball/halfName/"+ $('#siteId').val(), function(data){
        console.log("================"+data)
        if(data!=null){
            let htmlStr = '';
            for (let i = 0; i < data.length; i++) {
                htmlStr += '<option value="' + data[i] + '">' + data[i] + '</option>'
            }
            $("#half").empty().append(htmlStr);
        }
    })
    ajax1.start()
};
CoursePackageInfo.addTime1 = function (a) {
    if ($('#siteId').val() != $('#selSiteId').val()||$('#time').val()!=$('#selDate').val()){
        $("#ttt3").hide()
        $("#ttt2").show()
    }else {
        $("#ttt3").show()
        $("#ttt2").hide()
    }
    console.log("==========="+a)
    var ajax = new $ax(Feng.ctxPath + "/ball/yuyuetimes/"+ $('#siteId').val(), function(data){
        console.log("================"+data)
        if(data!=null){
            var content='';
            $.each(data, function(k, v) {
                var buttonClass = "layui-btn layui-btn-primary";
                var style = "";
                if (v.state === 0) {
                    style = "background-color: red;";
                }
                var disabledAttribute = v.state === 0 ? "disabled" : "";
                content += '<button type="button" class="' + buttonClass + '" ' + disabledAttribute + ' style="' + style + '" onclick="toggleColor(this)">' + v.time + '</button>';
            });
            $("#ttt2").empty().append(content);
        }
    })
    ajax.start()
    var ajax1 = new $ax(Feng.ctxPath + "/ball/halfName/"+ $('#siteId').val(), function(data){
@@ -114,7 +167,7 @@
    var values = "";
    for (var i = 0; i < elements.length; i++) {
        values += date +" "+ elements[i].innerText + ",";
         values += date +" "+ elements[i].innerText + ";";
    }
// 去除最后一个逗号
@@ -204,6 +257,144 @@
    ajax.start();
};
/**
 * 新修改
 */
CoursePackageInfo.addSubmit1 = function () {
    let province = $('#provinceCode option:checked').text();
    let provinceCode = $('#provinceCode').val();
    let city = $('#cityCode option:checked').text();
    let cityCode = $('#cityCode').val();
    let storeId = $('#storeId').val();
    let siteId = $('#siteId').val();
    let site = $('#siteId option:checked').text();
    var radios = document.getElementsByName("type");
    var selectedValue;
    for (var i = 0; i < radios.length; i++) {
        if (radios[i].checked) {
            selectedValue = radios[i].value;
            break;
        }
    }
    let type = selectedValue;
    let half = $('#half').val();
    let date = $('#time').val();
    var elements = document.getElementsByClassName("layui-btn layui-btn-primary green-button");
    var values = "";
    console.log("==============="+elements[0])
    if ($('#siteId').val() != $('#selSiteId').val()||$('#time').val()!=$('#selDate').val()) {
        for (var i = 0; i < elements.length; i++) {
            if (elements[i].name != 'has') {
                values += date + " " + elements[i].innerText + ";";
            }
        }
    }else {
        for (var i = 0; i < elements.length; i++) {
            if (elements[i].name = 'has') {
                values += date + " " + elements[i].innerText + ";";
            }
        }
    }
// 去除最后一个逗号
    values = values.slice(0, -1);
    console.log(values);
    var times = values;
    let cash = $('#cash').val();
    let play = $('#play').val();
    let booker = $('#booker').val();
    let phone = $('#phone').val();
    let id = $('#id').val();
    // if(null == provinceCode || '' == provinceCode){
    //     Feng.error("所在省不能为空");
    //     return
    // }
    // if(null == cityCode || '' == cityCode){
    //     Feng.error("所在市不能为空");
    //     return
    // }
    // if(null == storeId || '' == storeId){
    //     Feng.error("所属门店不能为空");
    //     return
    // }
    // if(null == coursePackageTypeId || '' == coursePackageTypeId){
    //     Feng.error("课程类型不能为空");
    //     return
    // }
    // if(null == name || '' == name){
    //     Feng.error("课包名称不能为空");
    //     return
    // }
    // if(null == siteId || '' == siteId){
    //     Feng.error("上课场地不能为空");
    //     return
    // }
    // if(null == coachId || '' == coachId){
    //     Feng.error("授课教师不能为空");
    //     return
    // }
    //
    // classWeeks = classWeeks.substring(0, classWeeks.length - 1);
    //
    // if(null == coverDrawing || '' == coverDrawing){
    //     Feng.error("课包封面不能为空");
    //     return
    // }
    // if(null == detailDrawing || '' == detailDrawing){
    //     Feng.error("详情页不能为空");
    //     return
    // }
    // if(null == introduceDrawing || '' == introduceDrawing){
    //     Feng.error("课包介绍不能为空");
    //     return
    // }
    //提交信息
    var ajax = new $ax(Feng.ctxPath + "/ball/orderedit", function (data) {
        if(data.code == 200){
            Feng.success("添加成功!");
            CoursePackageInfo.close();
            window.parent.TStudent.table.refresh();
        }else{
            Feng.error(data.msg);
        }
    }, function (data) {
        Feng.error("添加失败!" + data.responseJSON.message + "!");
    });
    ajax.set("province",province)
    ajax.set("provinceCode",provinceCode);
    ajax.set("city",city);
    ajax.set("cityCode",cityCode);
    ajax.set("storeId",storeId);
    ajax.set("isHalf",type);
    ajax.set("siteId",siteId);
    ajax.set("nextName",site);
    ajax.set("halfName",half);
    ajax.set("date",date);
    ajax.set("times",times);
    ajax.set("money",cash+","+play);
    ajax.set("booker",booker);
    ajax.set("phone",phone);
    ajax.set("id",id);
    ajax.start();
};
/**
 * 提交修改
 */
cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage.js
@@ -167,10 +167,14 @@
 */
CoursePackage.editCoursePackageState = function (state) {
    if (this.check()) {
        if(CoursePackage.seItem.state == state){
            Feng.error("不能重复操作");
            return
        }
        parent.layer.confirm(state == 1 ? '是否上架' : "是否下架" , {
            btn: ['确定', '取消']
        }, function (index) {
        let ajax = new $ax(Feng.ctxPath + "/coursePackage/editCoursePackageState", function (data) {
            Feng.success(state == 1 ? '上架' : "下架" + "成功!");
            CoursePackage.table.refresh();
@@ -180,6 +184,15 @@
        ajax.set("id", CoursePackage.seItem.id);
        ajax.set("state", state);
        ajax.start();
                parent.layer.close(index);
            }, function (index) {
                parent.layer.close(index);
            }
        )
    }
};
cloud-server-management/src/main/webapp/static/modular/system/gameData/gameData.js
@@ -47,7 +47,7 @@
        {field: 'selectItem', checkbox: true},
        {title: '主键ID', field: 'id', visible: false, align: 'center', valign: 'middle'},
        {title: '序号', field: 'account_id', visible:true, align: 'center', valign: 'middle'},
        {title: '昵称', field: 'nickname', visible: true, align: 'center', valign: 'middle',},
        {title: '昵称', field: 'name', visible: true, align: 'center', valign: 'middle',},
        {title: '成绩', field: 'score', visible: true, align: 'center', valign: 'middle'},
    ];
};
@@ -73,7 +73,7 @@
    queryData['date'] = $("#con4").val();
    queryData['cityCode'] = $("#cCode4").val();
    queryData['spaceId'] = $("#site4").val();
    TSite.table.refresh({query: queryData});
    TSite1.table.refresh({query: queryData});
};
TSite.resetSearch = function () {
@@ -95,7 +95,7 @@
    TSite.table = table.init();
    var defaultColunms1 = TSite1.initColumn();
    var table1 = new BSTable(TSite1.id, "/gameData/listAll", defaultColunms1);
    var table1 = new BSTable(TSite1.id, "/gameData/listAll1", defaultColunms1);
    table1.setPaginationType("client");
    TSite1.table = table1.init();
});
cloud-server-management/src/main/webapp/static/modular/system/gateData/gateData.js
@@ -16,7 +16,7 @@
        {field: 'selectItem', radio: true},
        {title: '主键ID', field: 'id', visible: false, align: 'center', valign: 'middle'},
        {title: '场地区域名称', field: 'name', visible: true, align: 'center', valign: 'middle'},
        {title: '入场人次', field: 'number', visible: true, align: 'center', valign: 'middle'}
        {title: '入场人次', field: 'enter_num', visible: true, align: 'center', valign: 'middle'}
    ];
};
cloud-server-management/src/main/webapp/static/modular/system/operator/operator.js
@@ -34,7 +34,7 @@
            formatter: function (data,row) {
                var btn = "";
                if(data==1) {
                    var str = '<button class="btn btn-outline btn-primary" onclick="TSite.bindOperator('+row.id+')" >去绑定</button>'
                    var str = '<button class="btn btn-outline btn-primary" onclick="TSite.Allocationratio('+row.id+')" >去绑定</button>'
                    btn = ['<p class="toolTip" style="overflow:hidden;white-space:nowrap;text-overflow:ellipsis;" title="" onfocus="TUser.tooltip()">' + str + '</p>']
                }else{
                    var str = '<h3>已绑定</h3>'
@@ -64,18 +64,102 @@
        return true;
    }
};
TSite.bindOperator = function (e) {
    var index = layer.open({
        type: 2,
        title: "认证",
        area: ['100%', '100%'], //宽高
        fix: false, //不固定
        maxmin: true,
        content: Feng.ctxPath + '/operatorUser/proportion/' + e
    });
    this.layerIndex = index;
/**
 * 商户号认证
 */
TSite.Allocationratio = function (e) {
    console.log("看看E");
    console.log(e);
        var index = layer.open({
            type: 2,
            title: "商户认证",
            area: ['100%', '100%'], //宽高
            fix: false, //不固定
            maxmin: true,
            content: Feng.ctxPath + '/operator/proportionAuth/' + e
        });
        this.layerIndex = index;
};
/**
 * 分账比例
 */
TSite.proportion = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一个运营商商户设置分账比例!");
    }else {
        if (this.check()) {
            console.log("看看状态")
            console.log(TSite.seItem.status)
            if (TSite.seItem.status==1){
                Feng.error("当前运营商没有绑定商户号,请先绑定商户号!")
                return;
            }
            var index = layer.open({
                type: 2,
                title: "认证",
                area: ['100%', '100%'], //宽高
                fix: false, //不固定
                maxmin: true,
                content: Feng.ctxPath + '/operator/proportion/' + TSite.seItem.id
            });
            this.layerIndex = index;
        }
    }
};
TSite.addSubmit = function(){
    var alipayType = $("input[name='alipayType']:checked").val();
    var wechatType = $("input[name='wechatType']:checked").val();
    var alipayNum  = $("#alipayNum").val();
    var wechatNum  = $("#wechatNum").val();
    var operatorId  = $("#operatorId").val();
    if($("#alipayNum").val()=='' ){
        Feng.info("请输入支付宝商户号")
        return;
    }
    if($("#wechatNum").val()=='' ){
        Feng.info("请输入微信商户号")
        return;
    }
    var ajax = new $ax(Feng.ctxPath + "/operator/auth", function(data){
        Feng.success("认证成功")
        TSite.close();
        TSite.search();
    });
    ajax.set("alipayType",alipayType);
    ajax.set("wechatType",wechatType);
    ajax.set("alipayNum",alipayNum);
    ajax.set("wechatNum",wechatNum);
    ajax.set("operatorId",operatorId);
    ajax.start();
};
TSite.addSubmit1 = function(){
    var alipayProportion  = $("#alipayProportion").val();
    var wechatProportion  = $("#wechatProportion").val();
    var operatorIdOne  = $("#operatorIdOne").val();
    if($("#alipayNum").val()=='' ){
        Feng.info("请输入支付宝分账比例")
        return;
    }
    if($("#wechatNum").val()=='' ){
        Feng.info("请输入微信分账比例")
        return;
    }
    if (Number(alipayProportion)+Number(wechatProportion)!=100){
        Feng.info("总比例应该是100%,当前比例:"+Number(Number(alipayProportion)+Number(wechatProportion)));
        return;
    }
    var ajax = new $ax(Feng.ctxPath + "/operator/proportion", function(data){
        Feng.success("分账比例设置成功")
        TSite.close();
        TSite.search();
    });
    ajax.set("alipayProportion",alipayProportion);
    ajax.set("wechatProportion",wechatProportion);
    ajax.set("operatorIdOne",operatorIdOne);
    ajax.start();
};
/**
 * 上架
 */
cloud-server-management/src/main/webapp/static/modular/system/operatorUser/operatorUser.js
@@ -48,76 +48,7 @@
        return true;
    }
};
/**
 * 分账比例
 */
TSite.openAddTSite = function () {
    var selected = $('#' + this.id).bootstrapTable('getSelections');
    if(selected.length >1 ){
        Feng.info("只能选择一个运营商商户设置分账比例!");
    }else {
        if (this.check()) {
            var index = layer.load(1,{
                type: 1
                , title: '添加分账比例'
                , area: ['50%', '50%']
                , offset: 'auto' //具体配置参考:http://www.layui.com/doc/modules/layer.html#offset
                , id: 'layerDemo' //防止重复弹出cge
                , content: '<div class="form-horizontal">' +
                    '                    <div class="col-sm-11" >' +
                    '                    <div class="col-sm-11">' +
                    '                        <div class="form-group">\n' +
                    '                            <label class="col-sm-3 control-label">支付宝分账比例:</label>\n' +
                    '                         <div class="col-sm-9">\n' +
                    '                                  <input class="form-control" placeholder="请输入分账比例" type="text" id="alipay"> '+
                    '                            </div>\n' +
                    '                        </div>\n' +
                    '                        <div class="form-group">\n' +
                    '                            <label class="col-sm-3 control-label">微信分账比例:</label>\n' +
                    '                         <div class="col-sm-9">\n' +
                    '                                  <input class="form-control" placeholder="请输入分账比例" type="text" id="wechat"> '+
                    '                            </div>\n' +
                    '                        </div>\n' +
                    '                       </div>' +
                    '                   </div>' +
                    '</div>'
                , btn: ['关闭', '保存']
                , btnAlign: 'c' //按钮居中
                , shade:  0.5 //不显示遮罩
                ,load:1
                , yes: function () {
                    layer.closeAll();
                },
                btn2:function () {
                    let wechat = $("#wechat").val()
                    let alipay = $("#alipay").val()
                    if(alipay==''){
                        Feng.info("请输入支付宝分账比例")
                        return false;
                    }
                    if(wechat==''){
                        Feng.info("请输入微信分账比例")
                        return false;
                    }
                    var ajax = new $ax(Feng.ctxPath + "/operatorUser/addProportion", function (data) {
                            Feng.success("设置成功!");
                            window.location.reload();
                            window.parent.layer.closeAll();
                    }, function (data) {
                        Feng.error("操作失败!")
                    });
                    ajax.set("id", TSite.seItem.id);
                    ajax.set("alipay", alipay);
                    ajax.set("wechat", wechat);
                    ajax.start();
                    layer.closeAll();
                }
            });
            this.layerIndex = index;
        }
    }
};
function UploadFileFn(){
    $('#upFile').click();
}
cloud-server-other/src/main/java/com/dsh/other/controller/BallController.java
@@ -83,6 +83,7 @@
    @ResponseBody
    @PostMapping("/listorder")
    public List<Map<String, Object>>  listorder(@RequestBody BookingQuery bookingQuery){
        System.out.println("===bookingQuery===="+bookingQuery);
        return gameService.orderlist(bookingQuery);
//        return  game.getId();
    }
cloud-server-other/src/main/resources/mapper/GameMapper.xml
@@ -36,7 +36,39 @@
        FROM t_site_booking bk
                 LEFT JOIN t_store st on bk.storeId = st.id
                 LEFT JOIN t_site si on bk.siteId = si.id
        <where>
        <if test="provinceCode!=null and provinceCode!= ''">
          and  bk.provinceCode=#{provinceCode}
        </if>
            <if test="cityCode!=null and cityCode!= ''">
                and  bk.cityCode=#{cityCode}
            </if>
            <if test="store!=null and store!= ''">
                and  st.name=#{store}
            </if>
            <if test="peopleName!=null and peopleName!= ''">
                and  bk.booker=#{peopleName}
            </if>
            <if test="phone!=null and phone!= ''">
                and  bk.phone=#{phone}
            </if>
            <if test="date!=null and date!= ''">
                and bk.times like concat('%',#{date},'%')            </if>
            <if test="payMethod!=null ">
                and  bk.payType=#{payMethod}
            </if>
            <if test="state!=null ">
                and  bk.status=#{state}
            </if>
        </where>