From 19251fb5596415bfa83c51b8ed130ecbb31644ce Mon Sep 17 00:00:00 2001 From: 44323 <443237572@qq.com> Date: 星期一, 09 十月 2023 18:31:30 +0800 Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/PlayPai --- cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/DiscountList.java | 23 cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue.html | 44 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryDiscountList.java | 25 .idea/workspace.xml | 121 cloud-server-competition/src/main/resources/sharding-jdbc.properties | 4 cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage.js | 13 cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_add.html | 2 cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_add.html | 6 cloud-server-management/src/main/webapp/static/modular/system/tDiscount/tDiscount.js | 358 + cloud-server-account/src/main/java/com/dsh/account/util/ResultUtil.java | 3 cloud-server-competition/src/main/java/com/dsh/competition/feignclient/other/StoreClient.java | 5 cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/operatorIncome.html | 772 +++- cloud-server-management/src/main/webapp/static/modular/system/tDiscountAudit/coursePackageDiscount.js | 819 ++++ cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageDiscountService.java | 4 cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue_edit.html | 354 + cloud-server-management/src/main/resources/mapper/TBackRecordMapper.xml | 6 cloud-server-management/src/main/java/com/dsh/course/mapper/TBackRecordMapper.java | 17 cloud-server-course/src/main/java/com/dsh/course/model/DiscountUpdateState.java | 14 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseClient.java | 28 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/StoreServiceImpl.java | 6 cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscountAudit/TCity_add.html | 83 cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/ball_pre_add.html | 192 cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue_add.html | 41 cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscountAudit/coursePackageDiscount.html | 105 cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscount/TDiscount.html | 80 cloud-server-management/src/main/webapp/static/modular/system/tDiscount/tDiscount_info.js | 320 + cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java | 180 cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageDiscountClient.java | 4 cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html | 14 cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_edit.html | 2 cloud-server-account/src/main/java/com/dsh/account/vo/entity/WeekData.java | 17 cloud-server-management/src/main/webapp/static/modular/system/tDiscountAudit/tDiscount.js | 433 ++ cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackageDiscountMapper.java | 10 cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageDiscountController.java | 6 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TBackRecord.java | 46 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TDiscountController.java | 382 ++ cloud-server-account/src/main/java/com/dsh/account/mapper/TAppUserMapper.java | 19 cloud-server-account/src/main/java/com/dsh/account/vo/entity/MonthData.java | 21 cloud-server-account/src/main/resources/mapper/TAppUserMapper.xml | 180 cloud-server-other/src/main/java/com/dsh/other/mapper/TBackRecordMapper.java | 17 cloud-server-management/src/main/java/com/dsh/course/model/AuditDiscount.java | 16 cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscount/coursePackageDiscount.html | 88 cloud-server-account/src/main/java/com/dsh/account/entity/TAppUser.java | 2 cloud-server-account/src/main/java/com/dsh/account/vo/entity/YearData.java | 17 cloud-server-management/src/main/java/com/dsh/course/feignClient/competition/CompetitionClient.java | 4 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IStoreService.java | 3 cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/storeIncome.html | 677 +++ cloud-server-activity/src/main/resources/sharding-jdbc.properties | 4 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TBackRecordServiceImpl.java | 21 cloud-server-account/src/test/java/com/dsh/AccountApplicationTests.java | 22 cloud-server-account/src/main/java/com/dsh/account/dto/UserInfoQueryDTO.java | 34 cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscountAudit/TCity_edit.html | 98 cloud-server-other/src/main/java/com/dsh/other/service/TBackRecordService.java | 16 cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/TBackRecordService.java | 17 cloud-server-management/src/main/webapp/static/modular/system/tDiscountAudit/tDiscount_info.js | 320 + cloud-server-account/src/main/java/com/dsh/account/vo/UserInfoQueryVO.java | 32 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/DataStatisticsController.java | 670 +++ cloud-server-other/src/main/java/com/dsh/other/controller/BallController.java | 1 cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_add.html | 23 cloud-server-other/src/main/resources/mapper/GameMapper.xml | 32 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java | 4 cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java | 17 cloud-server-management/src/main/java/com/dsh/course/mapper/StoreMapper.java | 3 cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java | 58 cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/ball_pre_edit.html | 67 cloud-server-competition/src/main/java/com/dsh/competition/service/impl/PaymentCompetitionServiceImpl.java | 4 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/BallController.java | 375 ++ cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue_info.html | 384 ++ cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java | 18 cloud-server-management/src/main/webapp/static/modular/system/tDiscountAudit/tCity_info.js | 320 + cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscount/TCity_edit.html | 98 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TStore.java | 3 cloud-server-course/src/main/java/com/dsh/course/model/AuditDiscount.java | 16 cloud-server-course/src/main/resources/mapper/TCoursePackageDiscountMapper.xml | 40 cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscountAudit/TDiscount.html | 79 cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java | 446 ++ cloud-server-other/src/main/resources/mapper/TBackRecordMapper.xml | 6 cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java | 24 cloud-server-management/src/main/webapp/static/modular/system/ball/yuyue_info.js | 193 + cloud-server-course/src/main/java/com/dsh/course/model/DiscountList.java | 23 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TShopController.java | 10 cloud-server-account/src/main/resources/sharding-jdbc.properties | 4 cloud-server-course/src/main/java/com/dsh/course/model/QueryDiscountList.java | 25 cloud-server-other/src/main/java/com/dsh/other/entity/TBackRecord.java | 48 cloud-server-management/src/main/resources/mapper/TStoreMapper.xml | 11 cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TDiscountExamineController.java | 9 cloud-server-other/src/main/java/com/dsh/other/service/impl/TBackRecordServiceImpl.java | 21 cloud-server-account/src/main/java/com/dsh/account/vo/GroupCityInfoVO.java | 18 cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java | 21 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/DiscountUpdateState.java | 14 cloud-server-account/src/main/java/com/dsh/account/model/LoginWeChatVo.java | 5 cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscount/TCity_add.html | 83 cloud-server-management/src/main/webapp/static/modular/system/tShop/tShop_info.js | 24 cloud-server-management/src/main/webapp/static/modular/system/ball/yuyue.js | 73 cloud-server-account/src/main/java/com/dsh/account/vo/entity/DayData.java | 23 cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/join.html | 189 + cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackageDiscount.java | 3 cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/MethodDto.java | 9 /dev/null | 28 cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java | 80 cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java | 64 cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java | 20 cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/platformIncome.html | 721 +++ cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java | 52 cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/cancel.html | 206 + 105 files changed, 10,138 insertions(+), 674 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index aacdc06..f73921d 100644 --- a/.idea/workspace.xml +++ b/.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">{ - "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.pluginManager", - "spring.configuration.checksum": "6e27eb92c8707375af194da5aa857bbc", - "vue.rearranger.settings.migration": "true" + <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> diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java index 260bd03..384d2d1 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java +++ b/cloud-server-account/src/main/java/com/dsh/account/controller/AppUserController.java @@ -1,8 +1,10 @@ package com.dsh.account.controller; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.dsh.account.dto.SelectDto; +import com.dsh.account.dto.UserInfoQueryDTO; import com.dsh.account.entity.Coach; import com.dsh.account.entity.TAppUser; import com.dsh.account.entity.TCourseInfoRecord; @@ -12,19 +14,25 @@ import com.dsh.account.service.IVipPaymentService; import com.dsh.account.service.TAppUserService; import com.dsh.account.service.TCourseInfoRecordService; -import com.dsh.account.util.PayMoneyUtil; -import com.dsh.account.util.ResultUtil; -import com.dsh.account.util.TokenUtil; -import com.dsh.account.util.ToolUtil; +import com.dsh.account.util.*; +import com.dsh.account.vo.GroupCityInfoVO; +import com.dsh.account.vo.UserInfoQueryVO; +import com.dsh.account.vo.entity.DayData; +import com.dsh.account.vo.entity.MonthData; +import com.dsh.account.vo.entity.WeekData; +import com.dsh.account.vo.entity.YearData; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; +import java.time.LocalDateTime; +import java.time.LocalTime; import java.util.*; import java.util.List; @@ -50,6 +58,9 @@ @Autowired private TCourseInfoRecordService courseInfoRecordService; + + @Autowired + private RedisUtil redisUtil; /** * 获取所有用户 @@ -208,6 +219,27 @@ public ResultUtil<String> loginWeChat(LoginWeChatVo loginWeChatVo){ try { return appUserService.loginWechat(loginWeChatVo); + }catch (Exception e){ + e.printStackTrace(); + return ResultUtil.runErr(); + } + } + @ResponseBody + @PostMapping("/base/appUser/bind") + @ApiOperation(value = "微信登录--绑定手机号", tags = {"APP-登录注册"}) + @ApiImplicitParams({ + }) + public ResultUtil<String> bind(String phone,String openId,String code){ + try { + String value = redisUtil.getValue(phone); + if(!code.equals(value)){ + return ResultUtil.error("验证码无效", ""); + } + List<TAppUser> list = appUserService.list(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getOpenid, openId)); + TAppUser tAppUser = list.get(0); + tAppUser.setPhone(phone); + appUserService.updateById(tAppUser); + return ResultUtil.success(); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); @@ -479,4 +511,144 @@ System.out.println("=======selectDtos======>"+selectDtos); return selectDtos; } + + + @PostMapping("/appUser/userInfo") + public UserInfoQueryVO userInfo(@RequestBody UserInfoQueryDTO dto){ + + UserInfoQueryVO userInfoQueryVO = new UserInfoQueryVO(); + + LambdaQueryWrapper<TAppUser> wrapper = new LambdaQueryWrapper<>(); + + if(StringUtils.hasLength(dto.getCityCode())){ + wrapper.eq(TAppUser::getCityCode,dto.getCityCode()); + } + + if(Objects.nonNull(dto.getOperatorId())){ + wrapper.eq(TAppUser::getInsertType,2); + wrapper.eq(TAppUser::getAddUserId,dto.getOperatorId()); + } + + if(Objects.nonNull(dto.getStoreId())){ + wrapper.eq(TAppUser::getInsertType,3); + wrapper.eq(TAppUser::getAddUserId,dto.getStoreId()); + } + + // 查询会员总数,年度会员总数 + int userCount = appUserService.count(wrapper); + int userVipCount = appUserService.count(wrapper.eq(TAppUser::getIsVip,1)); + + userInfoQueryVO.setUserCount(userCount); + userInfoQueryVO.setUserVipCount(userVipCount); + + if(Objects.nonNull(dto.getIsVip())){ + wrapper.eq(TAppUser::getIsVip,dto.getIsVip()); + } + + // 年度数据 + List<YearData> yearData = appUserService.getYearUserCount(dto); + userInfoQueryVO.setYearData(yearData); + // 月度数据 + List<MonthData> monthData = appUserService.getMonthUserCount(dto); + userInfoQueryVO.setMonthData(monthData); + + // 获取最近四周 + LocalDateTime minNow = LocalDateTime.now().with(LocalTime.MIN); + LocalDateTime maxNow = LocalDateTime.now().with(LocalTime.MAX); + // 周度数据 + dto.setStartTime(minNow.minusDays(6).toString()); + dto.setEndTime(maxNow.toString()); + WeekData week4 = appUserService.getWeekUserCount4(dto); + dto.setStartTime(minNow.minusDays(13).toString()); + dto.setEndTime(maxNow.minusDays(6).toString()); + WeekData week3 = appUserService.getWeekUserCount3(dto); + dto.setStartTime(minNow.minusDays(20).toString()); + dto.setEndTime(maxNow.minusDays(13).toString()); + WeekData week2 = appUserService.getWeekUserCount2(dto); + dto.setStartTime(minNow.minusDays(27).toString()); + dto.setEndTime(maxNow.minusDays(20).toString()); + WeekData week1 = appUserService.getWeekUserCount1(dto); + + List<WeekData> weekDataList = new ArrayList<>(); + weekDataList.add(week1); + weekDataList.add(week2); + weekDataList.add(week3); + weekDataList.add(week4); + userInfoQueryVO.setWeekData(weekDataList); + + // 日度数据 + dto.setStartTime(minNow.minusDays(6).toString()); + dto.setEndTime(maxNow.toString()); + List<DayData> dayData = appUserService.getDayUserCount(dto); + userInfoQueryVO.setDayData(dayData); + return userInfoQueryVO; + } + + @PostMapping("/appUser/ageInfo") + public Map<String,Long> ageInfo(@RequestBody UserInfoQueryDTO dto){ + + Map<String,Long> map = new HashMap<>(); + + LambdaQueryWrapper<TAppUser> wrapper = new LambdaQueryWrapper<>(); + + if(StringUtils.hasLength(dto.getCityCode())){ + wrapper.eq(TAppUser::getCityCode,dto.getCityCode()); + } + + if(Objects.nonNull(dto.getOperatorId())){ + wrapper.eq(TAppUser::getInsertType,2); + wrapper.eq(TAppUser::getAddUserId,dto.getOperatorId()); + } + + if(Objects.nonNull(dto.getStoreId())){ + wrapper.eq(TAppUser::getInsertType,3); + wrapper.eq(TAppUser::getAddUserId,dto.getStoreId()); + } + + List<TAppUser> list = appUserService.list(wrapper); + // 查询会员 + list.forEach(tAppUser->tAppUser.setAge(DateUtil.ageOfNow(tAppUser.getBirthday()))); + + map.put("age1", list.stream().filter(e -> e.getAge() > 0 && e.getAge() <= 12).count()); + map.put("age2",list.stream().filter(e -> e.getAge() >= 13 && e.getAge() <= 18).count()); + map.put("age3",list.stream().filter(e -> e.getAge() >= 19 && e.getAge() <= 25).count()); + map.put("age4",list.stream().filter(e -> e.getAge() >= 26 && e.getAge() <= 35).count()); + map.put("age5",list.stream().filter(e -> e.getAge() >= 36 && e.getAge() <= 50).count()); + map.put("age6",list.stream().filter(e -> e.getAge() >= 51).count()); + return map; + } + + @PostMapping("/appUser/sexInfo") + public Map<String,Integer> sexInfo(@RequestBody UserInfoQueryDTO dto){ + + Map<String,Integer> map = new HashMap<>(2); + LambdaQueryWrapper<TAppUser> wrapper = new LambdaQueryWrapper<>(); + + if(StringUtils.hasLength(dto.getCityCode())){ + wrapper.eq(TAppUser::getCityCode,dto.getCityCode()); + } + + if(Objects.nonNull(dto.getOperatorId())){ + wrapper.eq(TAppUser::getInsertType,2); + wrapper.eq(TAppUser::getAddUserId,dto.getOperatorId()); + } + + if(Objects.nonNull(dto.getStoreId())){ + wrapper.eq(TAppUser::getInsertType,3); + wrapper.eq(TAppUser::getAddUserId,dto.getStoreId()); + } + + // 查询会员 + int boyCount = appUserService.count(wrapper.eq(TAppUser::getGender,1)); + int girlCount = appUserService.count(wrapper.eq(TAppUser::getGender,2)); + map.put("boyCount",boyCount); + map.put("girlCount",girlCount); + return map; + } + + @PostMapping("/appUser/groupCityInfo") + public List<GroupCityInfoVO> groupCityInfo(@RequestBody UserInfoQueryDTO dto){ + // 查询地区会员 + return appUserService.groupCityInfo(dto); + } } diff --git a/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java b/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java index b7c7d88..394eec2 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java +++ b/cloud-server-account/src/main/java/com/dsh/account/controller/StudentController.java @@ -26,10 +26,9 @@ import javax.annotation.Resource; import java.math.BigDecimal; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.*; import java.util.stream.Collectors; /** @@ -256,9 +255,140 @@ if(ids.size()==0){ ids.add(-1); } - List<TAppUser> list = appUserService.list(new LambdaQueryWrapper<TAppUser>().in(TAppUser::getInsertType, 1)); + List<TAppUser> list = appUserService.list(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 1)); return list.stream().map(TAppUser::getId).collect(Collectors.toList()); } + @PostMapping("/student/getUserYYs") + @ResponseBody + public List<Integer> getUserYYs(@RequestBody Integer id){ + List<TAppUser> list = appUserService.list(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 2).eq(TAppUser::getAddUserId,id)); + return list.stream().map(TAppUser::getId).collect(Collectors.toList()); + } + @ResponseBody + @PostMapping("/student/getUserPtVip") + public List<Integer> getUserPtVip(){ + List<TAppUser> list = appUserService.list(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 1).eq(TAppUser::getIsVip,1)); + return list.stream().map(TAppUser::getId).collect(Collectors.toList()); + } + + @PostMapping("/student/getUserStore") + @ResponseBody + public List<Integer> getUserStore(@RequestBody Integer id){ + List<TAppUser> list = appUserService.list(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 3).eq(TAppUser::getAddUserId,id)); + return list.stream().map(TAppUser::getId).collect(Collectors.toList()); + } + + + @ResponseBody + @PostMapping("/student/userAndVipPt") + public HashMap<String, Object> userAndVipPt(@RequestBody Integer type){ + HashMap<String, Object> map = new HashMap<>(); + // 所有的 + List<TAppUser> list = appUserService.list(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 1)); + map.put("allUser",list.size()); + List<TAppUser> list1 = appUserService.list(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 1).eq(TAppUser::getIsVip,1)); + map.put("allVip",list1.size()); + + + ArrayList<Object> integers = new ArrayList<>(); + int year = DateUtil.year(new Date()); + for (int i = 0; i < 10; i++) { + integers.add(year-i); + } + List<Object> collect = integers.stream().sorted().collect(Collectors.toList()); + // 年 + ArrayList<Long> years = new ArrayList<>(); + ArrayList<Long> yearsVip = new ArrayList<>(); + for (Object o : collect) { + String s = o.toString(); + long count = list.stream().filter(e -> e.getInsertTime().toString().contains(s)).count(); + long count1 = list1.stream().filter(e -> e.getInsertTime().toString().contains(s)).count(); + years.add(count); + yearsVip.add(count1); + } + map.put("yearData",years); + map.put("yearsVip",yearsVip); + + ArrayList<Long> months = new ArrayList<>(); + ArrayList<Long> monthsVip = new ArrayList<>(); + // 月 + for (int i = 1; i <= 12; i++) { + String m=i+""; + if(i<10){ + m="0"+i; + } + String s = year + "-" + m; + long count = list.stream().filter(e -> e.getInsertTime().toString().contains(s)).count(); + long count1 = list1.stream().filter(e -> e.getInsertTime().toString().contains(s)).count(); + months.add(count); + monthsVip.add(count1); + } + map.put("monthData",months); + map.put("monthsVip",monthsVip); + + // 周 + + // 获取最近四周 + LocalDateTime minNow = LocalDateTime.now().with(LocalTime.MIN); + LocalDateTime maxNow = LocalDateTime.now().with(LocalTime.MAX); + // 周度数据 + String s1 = minNow.minusDays(6).toString(); + String s2 = maxNow.toString(); + + String s3 = minNow.minusDays(13).toString(); + String s4 = maxNow.minusDays(6).toString(); + + + String s5 = minNow.minusDays(20).toString(); + String s6 = maxNow.minusDays(13).toString(); + + String s7 = minNow.minusDays(27).toString(); + String s8 = maxNow.minusDays(20).toString(); + + + int count = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 1).between(TAppUser::getInsertTime, s7, s8)); + int countVip = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 1).eq(TAppUser::getIsVip,1).between(TAppUser::getInsertTime, s7, s8)); + + int count1 = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 1).between(TAppUser::getInsertTime,s5,s6)); + int countVip1 = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 1).eq(TAppUser::getIsVip,1).between(TAppUser::getInsertTime, s5,s6)); + + int count2 = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 1).between(TAppUser::getInsertTime,s3,s4)); + int countVip2 = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 1).eq(TAppUser::getIsVip,1).between(TAppUser::getInsertTime, s3,s4)); + + int count3 = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 1).between(TAppUser::getInsertTime,s1,s2)); + int countVip3 = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 1).eq(TAppUser::getIsVip,1).between(TAppUser::getInsertTime, s1,s2)); + map.put("count",count); + map.put("count1",count1); + map.put("count2",count2); + map.put("count3",count3); + map.put("countVip",countVip); + map.put("countVip1",countVip1); + map.put("countVip2",countVip2); + map.put("countVip3",countVip3); + + + // 日 + ArrayList<Integer> days = new ArrayList<>(); + ArrayList<Integer> daysVip = new ArrayList<>(); + for (int i = 6; i >= 0; i--) { + String s = minNow.minusDays(i).toString(); + String s9 = maxNow.minusDays(i).toString(); + int count4 = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 1).between(TAppUser::getInsertTime,s,s9)); + int countVip5 = appUserService.count(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 1).eq(TAppUser::getIsVip,1).between(TAppUser::getInsertTime, s,s9)); + days.add(count4); + daysVip.add(countVip5); + } + map.put("dayData",days); + map.put("daysVip",daysVip); + + + return map; + + } + + + + @PostMapping("/student/queryFee") @@ -308,7 +438,7 @@ @PostMapping("/student/queryUserAge") public HashMap<String, Object> queryUserAge(){ HashMap<String, Object> map = new HashMap<>(); - List<TAppUser> list = appUserService.list(new LambdaQueryWrapper<TAppUser>().in(TAppUser::getInsertType, 1)); + List<TAppUser> list = appUserService.list(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 1)); List<Integer> collect = list.stream().map(TAppUser::getId).collect(Collectors.toList()); if(collect.size()==0){ collect.add(-1); @@ -349,4 +479,308 @@ } + @PostMapping("/student/queryUserAge1") + public HashMap<String, Object> queryUserAge1(){ + HashMap<String, Object> map = new HashMap<>(); + List<TAppUser> list = appUserService.list(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 1)); + List<Integer> collect = list.stream().map(TAppUser::getId).collect(Collectors.toList()); + if(collect.size()==0){ + collect.add(-1); + } + + + Set<String> strings = list.stream().collect(Collectors.groupingBy(TAppUser::getCity)).keySet(); + ArrayList<String> strings1 = new ArrayList<>(); + ArrayList<Integer> integers = new ArrayList<>(); + + for (String string : strings) { + int a = 0; + strings1.add(string); + for (TAppUser tAppUser : list) { + if(tAppUser.getCity().equals(string)){ + a++; + } + } + integers.add(a); + } + + map.put("cityData",strings1); + map.put("cityNum",integers); + int age1=0; + int age2=0; + int age3=0; + int age4=0; + int age5=0; + int age6=0; + int boy=0; + int girl=0; + for (TAppUser tStudent : list) { + Date birthday = tStudent.getBirthday(); + long l =0; + if(birthday!=null){ + + l = DateUtil.betweenYear(birthday, new Date(), true); + } + if(l<=12){ + age1++; + }else if(l>12 && l<18){ + age2++; + }else if(l>=19 && l<=25){ + age3++; + }else if(l>=26 && l<=35){ + age4++; + }else if(l>=36 && l<=50){ + age5++; + }else { + age6++; + } + if(tStudent.getGender()!=null &&tStudent.getGender()==1){ + boy++; + }else { + girl++; + } + } + map.put("age1",age1); + map.put("age2",age2); + map.put("age3",age3); + map.put("age4",age4); + map.put("age5",age5); + map.put("age6",age6); + map.put("boy",boy); + map.put("girl",girl); + return map; + + + + } + @PostMapping("/student/queryUserAgeYys") + public HashMap<String, Object> queryUserAgeYys(Integer id){ + HashMap<String, Object> map = new HashMap<>(); + List<TAppUser> list = appUserService.list(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 2).eq(TAppUser::getAddUserId,id)); + List<Integer> collect = list.stream().map(TAppUser::getId).collect(Collectors.toList()); + if(collect.size()==0){ + collect.add(-1); + } + + + Set<String> strings = list.stream().collect(Collectors.groupingBy(TAppUser::getCity)).keySet(); + ArrayList<String> strings1 = new ArrayList<>(); + ArrayList<Integer> integers = new ArrayList<>(); + + for (String string : strings) { + int a = 0; + strings1.add(string); + for (TAppUser tAppUser : list) { + if(tAppUser.getCity().equals(string)){ + a++; + } + } + integers.add(a); + } + + map.put("cityData",strings1); + map.put("cityNum",integers); + int age1=0; + int age2=0; + int age3=0; + int age4=0; + int age5=0; + int age6=0; + int boy=0; + int girl=0; + for (TAppUser tStudent : list) { + Date birthday = tStudent.getBirthday(); + long l =0; + if(birthday!=null){ + + l = DateUtil.betweenYear(birthday, new Date(), true); + } + if(l<=12){ + age1++; + }else if(l>12 && l<18){ + age2++; + }else if(l>=19 && l<=25){ + age3++; + }else if(l>=26 && l<=35){ + age4++; + }else if(l>=36 && l<=50){ + age5++; + }else { + age6++; + } + if(tStudent.getGender()!=null &&tStudent.getGender()==1){ + boy++; + }else { + girl++; + } + } + map.put("age1",age1); + map.put("age2",age2); + map.put("age3",age3); + map.put("age4",age4); + map.put("age5",age5); + map.put("age6",age6); + map.put("boy",boy); + map.put("girl",girl); + return map; + + } + @PostMapping("/student/queryUserAgeStore") + public HashMap<String, Object> queryUserAgeStore(Integer id){ + HashMap<String, Object> map = new HashMap<>(); + List<TAppUser> list = appUserService.list(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 3).eq(TAppUser::getAddUserId,id)); + List<Integer> collect = list.stream().map(TAppUser::getId).collect(Collectors.toList()); + if(collect.size()==0){ + collect.add(-1); + } + + + Set<String> strings = list.stream().collect(Collectors.groupingBy(TAppUser::getCity)).keySet(); + ArrayList<String> strings1 = new ArrayList<>(); + ArrayList<Integer> integers = new ArrayList<>(); + + for (String string : strings) { + int a = 0; + strings1.add(string); + for (TAppUser tAppUser : list) { + if(tAppUser.getCity().equals(string)){ + a++; + } + } + integers.add(a); + } + + map.put("cityData",strings1); + map.put("cityNum",integers); + int age1=0; + int age2=0; + int age3=0; + int age4=0; + int age5=0; + int age6=0; + int boy=0; + int girl=0; + for (TAppUser tStudent : list) { + Date birthday = tStudent.getBirthday(); + long l =0; + if(birthday!=null){ + + l = DateUtil.betweenYear(birthday, new Date(), true); + } + if(l<=12){ + age1++; + }else if(l>12 && l<18){ + age2++; + }else if(l>=19 && l<=25){ + age3++; + }else if(l>=26 && l<=35){ + age4++; + }else if(l>=36 && l<=50){ + age5++; + }else { + age6++; + } + if(tStudent.getGender()!=null &&tStudent.getGender()==1){ + boy++; + }else { + girl++; + } + } + map.put("age1",age1); + map.put("age2",age2); + map.put("age3",age3); + map.put("age4",age4); + map.put("age5",age5); + map.put("age6",age6); + map.put("boy",boy); + map.put("girl",girl); + return map; + + } + @PostMapping("/student/queryUserAgeYys1") + public HashMap<String, Object> queryUserAgeYys1(@RequestBody Integer id){ + HashMap<String, Object> map = new HashMap<>(); + List<TAppUser> list = appUserService.list(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 2).eq(TAppUser::getAddUserId,id)); + List<Integer> collect = list.stream().map(TAppUser::getId).collect(Collectors.toList()); + if(collect.size()==0){ + collect.add(-1); + } + List<TStudent> list1 = studentService.list(new LambdaQueryWrapper<TStudent>().in(TStudent::getAppUserId, collect)); + int age1=0; + int age2=0; + int age3=0; + int age4=0; + int boy=0; + int girl=0; + for (TStudent tStudent : list1) { + Date birthday = tStudent.getBirthday(); + long l = DateUtil.betweenYear(birthday, new Date(), true); + if(l<7){ + age1++; + }else if(l>=8 && l<11){ + age2++; + }else if(l>=11 && l<=12){ + age3++; + }else { + age4++; + } + if(tStudent.getSex()==1){ + boy++; + }else { + girl++; + } + } + map.put("age1",age1); + map.put("age2",age2); + map.put("age3",age3); + map.put("age4",age4); + map.put("boy",boy); + map.put("girl",girl); + return map; + + + } + @PostMapping("/student/queryUserAgeStore1") + public HashMap<String, Object> queryUserAgeStore1(@RequestBody Integer id){ + HashMap<String, Object> map = new HashMap<>(); + List<TAppUser> list = appUserService.list(new LambdaQueryWrapper<TAppUser>().eq(TAppUser::getInsertType, 3).eq(TAppUser::getAddUserId,id)); + List<Integer> collect = list.stream().map(TAppUser::getId).collect(Collectors.toList()); + if(collect.size()==0){ + collect.add(-1); + } + List<TStudent> list1 = studentService.list(new LambdaQueryWrapper<TStudent>().in(TStudent::getAppUserId, collect)); + int age1=0; + int age2=0; + int age3=0; + int age4=0; + int boy=0; + int girl=0; + for (TStudent tStudent : list1) { + Date birthday = tStudent.getBirthday(); + long l = DateUtil.betweenYear(birthday, new Date(), true); + if(l<7){ + age1++; + }else if(l>=8 && l<11){ + age2++; + }else if(l>=11 && l<=12){ + age3++; + }else { + age4++; + } + if(tStudent.getSex()==1){ + boy++; + }else { + girl++; + } + } + map.put("age1",age1); + map.put("age2",age2); + map.put("age3",age3); + map.put("age4",age4); + map.put("boy",boy); + map.put("girl",girl); + return map; + + + } } diff --git a/cloud-server-account/src/main/java/com/dsh/account/dto/UserInfoQueryDTO.java b/cloud-server-account/src/main/java/com/dsh/account/dto/UserInfoQueryDTO.java new file mode 100644 index 0000000..196dd96 --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/dto/UserInfoQueryDTO.java @@ -0,0 +1,34 @@ +package com.dsh.account.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +@ApiModel(value = "运营统计查询DTO") +public class UserInfoQueryDTO implements Serializable { + + @ApiModelProperty(value = "选择城市") + private String cityCode; + + @ApiModelProperty(value = "分类 1平台 2运营商 3门店") + private Integer insertType; + + @ApiModelProperty(value = "运营商id") + private Integer operatorId; + + @ApiModelProperty(value = "门店id") + private Integer storeId; + + @ApiModelProperty(value = "是否年费会员 0=否,1=是") + private Integer isVip; + + @ApiModelProperty(value = "开始时间,前端忽略") + private String startTime; + + @ApiModelProperty(value = "结束时间,前端忽略") + private String endTime; + +} diff --git a/cloud-server-account/src/main/java/com/dsh/account/entity/TAppUser.java b/cloud-server-account/src/main/java/com/dsh/account/entity/TAppUser.java index 4e1b938..c0b9123 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/entity/TAppUser.java +++ b/cloud-server-account/src/main/java/com/dsh/account/entity/TAppUser.java @@ -171,4 +171,6 @@ */ @TableField("addUserId") private Integer addUserId; + @TableField(exist = false) + private Integer age; } diff --git a/cloud-server-account/src/main/java/com/dsh/account/mapper/TAppUserMapper.java b/cloud-server-account/src/main/java/com/dsh/account/mapper/TAppUserMapper.java index 5d3e8ef..46c9d97 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/mapper/TAppUserMapper.java +++ b/cloud-server-account/src/main/java/com/dsh/account/mapper/TAppUserMapper.java @@ -2,10 +2,16 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.dsh.account.dto.SelectDto; +import com.dsh.account.dto.UserInfoQueryDTO; import com.dsh.account.entity.TAppUser; import com.dsh.account.model.AppUserByNameAndPhoneDTO; import com.dsh.account.model.query.appUserQuery.QueryAppUser; import com.dsh.account.model.vo.QueryAppUserVO; +import com.dsh.account.vo.GroupCityInfoVO; +import com.dsh.account.vo.entity.DayData; +import com.dsh.account.vo.entity.MonthData; +import com.dsh.account.vo.entity.WeekData; +import com.dsh.account.vo.entity.YearData; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.springframework.web.bind.annotation.PathVariable; @@ -37,4 +43,17 @@ int changeState(@Param("ids") List<Integer> ids,@Param("state") Integer state); List<TAppUser> queryAPPUserByNameAndPhone(@Param("query") AppUserByNameAndPhoneDTO dto); + + List<YearData> getYearUserCount(@Param("dto") UserInfoQueryDTO dto); + + List<MonthData> getMonthUserCount(@Param("dto")UserInfoQueryDTO dto); + + WeekData getWeekUserCount4(@Param("dto")UserInfoQueryDTO dto); + WeekData getWeekUserCount3(@Param("dto")UserInfoQueryDTO dto); + WeekData getWeekUserCount2(@Param("dto")UserInfoQueryDTO dto); + WeekData getWeekUserCount1(@Param("dto")UserInfoQueryDTO dto); + + List<DayData> getDayUserCount(@Param("dto")UserInfoQueryDTO dto); + + List<GroupCityInfoVO> groupCityInfo(@Param("dto")UserInfoQueryDTO dto); } diff --git a/cloud-server-account/src/main/java/com/dsh/account/model/LoginWeChatVo.java b/cloud-server-account/src/main/java/com/dsh/account/model/LoginWeChatVo.java index c7471ca..b301616 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/model/LoginWeChatVo.java +++ b/cloud-server-account/src/main/java/com/dsh/account/model/LoginWeChatVo.java @@ -13,6 +13,9 @@ public class LoginWeChatVo { @ApiModelProperty(value = "微信openId", dataType = "string", required = true) private String openId; - @ApiModelProperty(value = "手机号", dataType = "string", required = true) + @ApiModelProperty(value = "手机号", dataType = "string", required = false) private String phone; + private String nickname; + private String headimgurl; + private Integer sex; } diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java b/cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java index 2975b15..c33df21 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java +++ b/cloud-server-account/src/main/java/com/dsh/account/service/TAppUserService.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.account.dto.SelectDto; +import com.dsh.account.dto.UserInfoQueryDTO; import com.dsh.account.entity.TAppUser; import com.dsh.account.model.*; import com.dsh.account.model.query.appUserQuery.QueryAppUser; @@ -11,6 +12,11 @@ import com.dsh.account.model.vo.classDetails.classInsVo.ClassInfoVo; import com.dsh.account.model.vo.userBenefitDetail.*; import com.dsh.account.util.ResultUtil; +import com.dsh.account.vo.GroupCityInfoVO; +import com.dsh.account.vo.entity.DayData; +import com.dsh.account.vo.entity.MonthData; +import com.dsh.account.vo.entity.WeekData; +import com.dsh.account.vo.entity.YearData; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; @@ -148,4 +154,18 @@ Object changeState(AdvertisementChangeStateDTO dto); List<TAppUser> queryAPPUserByNameAndPhone(AppUserByNameAndPhoneDTO dto); + + + List<YearData> getYearUserCount(UserInfoQueryDTO dto); + + List<MonthData> getMonthUserCount(UserInfoQueryDTO dto); + + WeekData getWeekUserCount4(UserInfoQueryDTO dto); + WeekData getWeekUserCount3(UserInfoQueryDTO dto); + WeekData getWeekUserCount2(UserInfoQueryDTO dto); + WeekData getWeekUserCount1(UserInfoQueryDTO dto); + + List<DayData> getDayUserCount(UserInfoQueryDTO dto); + + List<GroupCityInfoVO> groupCityInfo(UserInfoQueryDTO dto); } diff --git a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java index 599d6d4..a14dda0 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java +++ b/cloud-server-account/src/main/java/com/dsh/account/service/impl/TAppUserServiceImpl.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dsh.account.dto.SelectDto; +import com.dsh.account.dto.UserInfoQueryDTO; import com.dsh.account.entity.*; import com.dsh.account.enums.RechargeRecordEnum; import com.dsh.account.feignclient.activity.IntroduceRewardsClient; @@ -44,6 +45,11 @@ import com.dsh.account.service.TAppUserService; import com.dsh.account.util.*; import com.dsh.account.util.akeylogin.Md5Util; +import com.dsh.account.vo.GroupCityInfoVO; +import com.dsh.account.vo.entity.DayData; +import com.dsh.account.vo.entity.MonthData; +import com.dsh.account.vo.entity.WeekData; +import com.dsh.account.vo.entity.YearData; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; @@ -60,6 +66,7 @@ import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; @@ -177,7 +184,62 @@ public List<TAppUser> queryAPPUserByNameAndPhone(AppUserByNameAndPhoneDTO dto) { return appUserMapper.queryAPPUserByNameAndPhone(dto); } + @Override + public List<YearData> getYearUserCount(UserInfoQueryDTO dto) { + return appUserMapper.getYearUserCount(dto); + } + @Override + public List<MonthData> getMonthUserCount(UserInfoQueryDTO dto) { + List<MonthData> monthUserCount = appUserMapper.getMonthUserCount(dto); + for (int i = 1; i <= 12; i++) { + String time = String.valueOf(i); + if (i < 10) { + time = "0" + time; + } + monthUserCount.add(Optional.ofNullable(monthUserCount.get(i)).orElse(new MonthData(time, 0))); + } + return monthUserCount.stream().sorted(Comparator.comparing(MonthData::getMonth)).collect(Collectors.toList()); + } + + @Override + public WeekData getWeekUserCount4(UserInfoQueryDTO dto) { + return appUserMapper.getWeekUserCount4(dto); + } + @Override + public WeekData getWeekUserCount3(UserInfoQueryDTO dto) { + return appUserMapper.getWeekUserCount3(dto); + } + @Override + public WeekData getWeekUserCount2(UserInfoQueryDTO dto) { + return appUserMapper.getWeekUserCount2(dto); + } + @Override + public WeekData getWeekUserCount1(UserInfoQueryDTO dto) { + return appUserMapper.getWeekUserCount1(dto); + } + + @Override + public List<DayData> getDayUserCount(UserInfoQueryDTO dto) { + List<DayData> dayUserCount = appUserMapper.getDayUserCount(dto); + if(dayUserCount.size()<7){ + for (int i = 1; i <= 6; i++) { + String time = LocalDate.now().minusDays(i).toString(); + for (DayData dayData : dayUserCount) { + if(!time.equals(dayData.getDay())){ + dayUserCount.add(new DayData(time,0)); + } + } + } + } + dayUserCount.forEach(dayData->dayData.setDay(dayData.getDay().split("-")[2])); + return dayUserCount.stream().sorted(Comparator.comparing(DayData::getDay)).collect(Collectors.toList()); + } + + @Override + public List<GroupCityInfoVO> groupCityInfo(UserInfoQueryDTO dto) { + return appUserMapper.groupCityInfo(dto); + } @Override public ClassInfoVo queryUserOfStus(Integer id) { TAppUser tAppUser = this.baseMapper.selectById(id); @@ -373,7 +435,7 @@ return ResultUtil.error("请先注册", ""); } if(tAppUser.getState() == 2){ - return ResultUtil.error("您的账号已被冻结", ""); + return ResultUtil.errorCode("您的账号已被冻结", ""); } // password = Md5Util.MD5Encode(password, null); if(!tAppUser.getPassword().equals(password)){ @@ -421,6 +483,7 @@ @Override public ResultUtil loginWechat(LoginWeChatVo loginWechatVo) throws Exception { TAppUser tAppUser = this.baseMapper.selectOne(new QueryWrapper<TAppUser>().eq("openid", loginWechatVo.getOpenId()).ne("state", 3)); + if(null == tAppUser){ tAppUser = this.baseMapper.selectOne(new QueryWrapper<TAppUser>().eq("phone", loginWechatVo.getPhone()).ne("state", 3)); if(null == tAppUser){ @@ -430,6 +493,9 @@ tAppUser.setPhone(loginWechatVo.getPhone()); tAppUser.setPassword(Md5Util.MD5Encode("111111", null)); tAppUser.setIsVip(0); + tAppUser.setName(loginWechatVo.getNickname()); + tAppUser.setHeadImg(loginWechatVo.getHeadimgurl()); + tAppUser.setGender(loginWechatVo.getSex()); tAppUser.setState(1); tAppUser.setInsertTime(new Date()); this.baseMapper.insert(tAppUser); @@ -448,7 +514,15 @@ this.updateById(tAppUser); String token = getToken(tAppUser); - return ResultUtil.success(token); + + HashMap<String, String> map = new HashMap<>(); + map.put("token",token); + if(ToolUtil.isEmpty(tAppUser.getPhone())){ + map.put("isBind","0"); + }else { + map.put("isBind","1"); + } + return ResultUtil.success(map); } @@ -485,7 +559,7 @@ if(tAppUser.getState() == 2){ return ResultUtil.error("您的账号已被冻结", ""); } - tAppUser.setPassword(Md5Util.MD5Encode(password, null)); + tAppUser.setPassword(password); this.updateById(tAppUser); return ResultUtil.success(); } diff --git a/cloud-server-account/src/main/java/com/dsh/account/util/ResultUtil.java b/cloud-server-account/src/main/java/com/dsh/account/util/ResultUtil.java index 289ff54..4c70087 100644 --- a/cloud-server-account/src/main/java/com/dsh/account/util/ResultUtil.java +++ b/cloud-server-account/src/main/java/com/dsh/account/util/ResultUtil.java @@ -86,6 +86,9 @@ public static <T> ResultUtil <T> error(String mag, T obj){ return ResultUtil.getResult(ResultUtil.ERROR, mag, obj); } + public static <T> ResultUtil <T> errorCode(String mag, T obj){ + return ResultUtil.getResult(501, mag, obj); + } /** * token失效 diff --git a/cloud-server-account/src/main/java/com/dsh/account/vo/GroupCityInfoVO.java b/cloud-server-account/src/main/java/com/dsh/account/vo/GroupCityInfoVO.java new file mode 100644 index 0000000..fcd343d --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/vo/GroupCityInfoVO.java @@ -0,0 +1,18 @@ +package com.dsh.account.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class GroupCityInfoVO implements Serializable { + + @ApiModelProperty(value = "市code") + private String cityCode; + @ApiModelProperty(value = "市区") + private String city; + @ApiModelProperty(value = "数量") + private Integer userCount; + +} diff --git a/cloud-server-account/src/main/java/com/dsh/account/vo/UserInfoQueryVO.java b/cloud-server-account/src/main/java/com/dsh/account/vo/UserInfoQueryVO.java new file mode 100644 index 0000000..13419ed --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/vo/UserInfoQueryVO.java @@ -0,0 +1,32 @@ +package com.dsh.account.vo; + +import com.dsh.account.vo.entity.DayData; +import com.dsh.account.vo.entity.MonthData; +import com.dsh.account.vo.entity.WeekData; +import com.dsh.account.vo.entity.YearData; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +@Data +public class UserInfoQueryVO implements Serializable { + + + @ApiModelProperty(value = "用户总数") + private Integer userCount; + @ApiModelProperty(value = "年费会员总数") + private Integer userVipCount; + + @ApiModelProperty(value = "年度数据") + private List<YearData> yearData; + @ApiModelProperty(value = "月度数据") + private List<MonthData> monthData; + @ApiModelProperty(value = "周度数据") + private List<WeekData> weekData; + @ApiModelProperty(value = "日度数据") + private List<DayData> dayData; + +} diff --git a/cloud-server-account/src/main/java/com/dsh/account/vo/entity/DayData.java b/cloud-server-account/src/main/java/com/dsh/account/vo/entity/DayData.java new file mode 100644 index 0000000..8190bf8 --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/vo/entity/DayData.java @@ -0,0 +1,23 @@ +package com.dsh.account.vo.entity; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class DayData implements Serializable { + + @ApiModelProperty(value = "日") + private String day; + + @ApiModelProperty(value = "数量") + private Integer dayCount; + +} diff --git a/cloud-server-account/src/main/java/com/dsh/account/vo/entity/MonthData.java b/cloud-server-account/src/main/java/com/dsh/account/vo/entity/MonthData.java new file mode 100644 index 0000000..206e512 --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/vo/entity/MonthData.java @@ -0,0 +1,21 @@ +package com.dsh.account.vo.entity; + +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class MonthData implements Serializable { + + @ApiModelProperty(value = "月份") + private String month; + + @ApiModelProperty(value = "数量") + private Integer monthCount; + +} diff --git a/cloud-server-account/src/main/java/com/dsh/account/vo/entity/WeekData.java b/cloud-server-account/src/main/java/com/dsh/account/vo/entity/WeekData.java new file mode 100644 index 0000000..260e9c6 --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/vo/entity/WeekData.java @@ -0,0 +1,17 @@ +package com.dsh.account.vo.entity; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class WeekData implements Serializable { + + @ApiModelProperty(value = "周") + private String week; + + @ApiModelProperty(value = "数量") + private Integer weekCount; + +} diff --git a/cloud-server-account/src/main/java/com/dsh/account/vo/entity/YearData.java b/cloud-server-account/src/main/java/com/dsh/account/vo/entity/YearData.java new file mode 100644 index 0000000..de4d2aa --- /dev/null +++ b/cloud-server-account/src/main/java/com/dsh/account/vo/entity/YearData.java @@ -0,0 +1,17 @@ +package com.dsh.account.vo.entity; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class YearData implements Serializable { + + @ApiModelProperty(value = "年份") + private String year; + + @ApiModelProperty(value = "数量") + private Integer yearCount; + +} diff --git a/cloud-server-account/src/main/resources/mapper/TAppUserMapper.xml b/cloud-server-account/src/main/resources/mapper/TAppUserMapper.xml index f713086..5599921 100644 --- a/cloud-server-account/src/main/resources/mapper/TAppUserMapper.xml +++ b/cloud-server-account/src/main/resources/mapper/TAppUserMapper.xml @@ -93,4 +93,184 @@ </if> </where> </select> + + + <select id="getYearUserCount" resultType="com.dsh.account.vo.entity.YearData"> + select IFNULL(count(*),0) AS yearCount,DATE_FORMAT(insertTime,'%Y') AS `year` from t_app_user + <where> + <if test="dto.cityCode != null and dto.cityCode != ''"> + AND cityCode = #{dto.cityCode} + </if> + <if test="dto.isVip != null"> + AND isVip = #{dto.isVip} + </if> + <if test="dto.insertType != null and dto.insertType == 2 and dto.operatorId != null"> + AND insertType = 2 + AND addUserId = #{dto.operatorId} + </if> + <if test="dto.insertType != null and dto.insertType == 3 and dto.storeId != null"> + AND insertType = 3 + AND addUserId = #{dto.storeId} + </if> + </where> + GROUP BY DATE_FORMAT(insertTime,'%Y') + </select> + <select id="getMonthUserCount" resultType="com.dsh.account.vo.entity.MonthData"> + select IFNULL(count(*),0) AS monthCount,DATE_FORMAT(insertTime,'%Y%m') AS `month` from t_app_user + <where> + <if test="dto.cityCode != null and dto.cityCode != ''"> + AND cityCode = #{dto.cityCode} + </if> + <if test="dto.isVip != null"> + AND isVip = #{dto.isVip} + </if> + <if test="dto.insertType != null and dto.insertType == 2 and dto.operatorId != null"> + AND insertType = 2 + AND addUserId = #{dto.operatorId} + </if> + <if test="dto.insertType != null and dto.insertType == 3 and dto.storeId != null"> + AND insertType = 3 + AND addUserId = #{dto.storeId} + </if> + </where> + GROUP BY DATE_FORMAT(insertTime,'%Y%m') + </select> + <select id="getWeekUserCount4" resultType="com.dsh.account.vo.entity.WeekData"> + select IFNULL(count(*),0) AS weekCount,4 AS `week` from t_app_user + <where> + <if test="dto.startTime != null and dto.startTime != '' and dto.endTime != null and dto.endTime != ''"> + AND insertTime between #{dto.startTime} and #{dto.endTime} + </if> + <if test="dto.cityCode != null and dto.cityCode != ''"> + AND cityCode = #{dto.cityCode} + </if> + <if test="dto.isVip != null"> + AND isVip = #{dto.isVip} + </if> + <if test="dto.insertType != null and dto.insertType == 2 and dto.operatorId != null"> + AND insertType = 2 + AND addUserId = #{dto.operatorId} + </if> + <if test="dto.insertType != null and dto.insertType == 3 and dto.storeId != null"> + AND insertType = 3 + AND addUserId = #{dto.storeId} + </if> + </where> + </select> + + <select id="getWeekUserCount3" resultType="com.dsh.account.vo.entity.WeekData"> + select IFNULL(count(*),0) AS weekCount,3 AS `week` from t_app_user + <where> + <if test="dto.startTime != null and dto.startTime != '' and dto.endTime != null and dto.endTime != ''"> + AND insertTime between #{dto.startTime} and #{dto.endTime} + </if> + <if test="dto.cityCode != null and dto.cityCode != ''"> + AND cityCode = #{dto.cityCode} + </if> + <if test="dto.isVip != null"> + AND isVip = #{dto.isVip} + </if> + <if test="dto.insertType != null and dto.insertType == 2 and dto.operatorId != null"> + AND insertType = 2 + AND addUserId = #{dto.operatorId} + </if> + <if test="dto.insertType != null and dto.insertType == 3 and dto.storeId != null"> + AND insertType = 3 + AND addUserId = #{dto.storeId} + </if> + </where> + </select> + + <select id="getWeekUserCount2" resultType="com.dsh.account.vo.entity.WeekData"> + select IFNULL(count(*),0) AS weekCount,2 AS `week` from t_app_user + <where> + <if test="dto.startTime != null and dto.startTime != '' and dto.endTime != null and dto.endTime != ''"> + AND insertTime between #{dto.startTime} and #{dto.endTime} + </if> + <if test="dto.cityCode != null and dto.cityCode != ''"> + AND cityCode = #{dto.cityCode} + </if> + <if test="dto.isVip != null"> + AND isVip = #{dto.isVip} + </if> + <if test="dto.insertType != null and dto.insertType == 2 and dto.operatorId != null"> + AND insertType = 2 + AND addUserId = #{dto.operatorId} + </if> + <if test="dto.insertType != null and dto.insertType == 3 and dto.storeId != null"> + AND insertType = 3 + AND addUserId = #{dto.storeId} + </if> + </where> + </select> + + <select id="getWeekUserCount1" resultType="com.dsh.account.vo.entity.WeekData"> + select IFNULL(count(*),0) AS weekCount,1 AS `week` from t_app_user + <where> + <if test="dto.startTime != null and dto.startTime != '' and dto.endTime != null and dto.endTime != ''"> + AND insertTime between #{dto.startTime} and #{dto.endTime} + </if> + <if test="dto.cityCode != null and dto.cityCode != ''"> + AND cityCode = #{dto.cityCode} + </if> + <if test="dto.isVip != null"> + AND isVip = #{dto.isVip} + </if> + <if test="dto.insertType != null and dto.insertType == 2 and dto.operatorId != null"> + AND insertType = 2 + AND addUserId = #{dto.operatorId} + </if> + <if test="dto.insertType != null and dto.insertType == 3 and dto.storeId != null"> + AND insertType = 3 + AND addUserId = #{dto.storeId} + </if> + </where> + </select> + + <select id="getDayUserCount" resultType="com.dsh.account.vo.entity.DayData"> + select IFNULL(count(*),0) AS dayCount,DATE_FORMAT(insertTime,'%Y-%m-%d') AS `day` from t_app_user + <where> + <if test="dto.startTime != null and dto.startTime != '' and dto.endTime != null and dto.endTime != ''"> + AND insertTime between #{dto.startTime} and #{dto.endTime} + </if> + <if test="dto.cityCode != null and dto.cityCode != ''"> + AND cityCode = #{dto.cityCode} + </if> + <if test="dto.isVip != null"> + AND isVip = #{dto.isVip} + </if> + <if test="dto.insertType != null and dto.insertType == 2 and dto.operatorId != null"> + AND insertType = 2 + AND addUserId = #{dto.operatorId} + </if> + <if test="dto.insertType != null and dto.insertType == 3 and dto.storeId != null"> + AND insertType = 3 + AND addUserId = #{dto.storeId} + </if> + </where> + GROUP BY DATE_FORMAT(insertTime,'%Y-%m-%d') + </select> + <select id="groupCityInfo" resultType="com.dsh.account.vo.GroupCityInfoVO"> + select IFNULL(count(*),0) AS userCount,cityCode,city from t_app_user + <where> + <if test="dto.startTime != null and dto.startTime != '' and dto.endTime != null and dto.endTime != ''"> + AND insertTime between #{dto.startTime} and #{dto.endTime} + </if> + <if test="dto.cityCode != null and dto.cityCode != ''"> + AND cityCode = #{dto.cityCode} + </if> + <if test="dto.isVip != null"> + AND isVip = #{dto.isVip} + </if> + <if test="dto.insertType != null and dto.insertType == 2 and dto.operatorId != null"> + AND insertType = 2 + AND addUserId = #{dto.operatorId} + </if> + <if test="dto.insertType != null and dto.insertType == 3 and dto.storeId != null"> + AND insertType = 3 + AND addUserId = #{dto.storeId} + </if> + </where> + GROUP BY cityCode + </select> </mapper> diff --git a/cloud-server-account/src/main/resources/sharding-jdbc.properties b/cloud-server-account/src/main/resources/sharding-jdbc.properties index 9c041c5..d3f7a4e 100644 --- a/cloud-server-account/src/main/resources/sharding-jdbc.properties +++ b/cloud-server-account/src/main/resources/sharding-jdbc.properties @@ -3,9 +3,9 @@ #�������� datasource.master0.type=com.alibaba.druid.pool.DruidDataSource datasource.master0.driverClassName=com.mysql.cj.jdbc.Driver -datasource.master0.url=jdbc:mysql://8.137.22.229:3306/playpai_account?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai +datasource.master0.url=jdbc:mysql://192.168.110.80:3306/playpai_account?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai datasource.master0.username=root -datasource.master0.password=playpai2023! +datasource.master0.password=123456 datasource.master0.maxActive=20 datasource.master0.maxWait=60000 datasource.master0.minIdle=5 diff --git a/cloud-server-account/src/test/java/com/dsh/AccountApplicationTests.java b/cloud-server-account/src/test/java/com/dsh/AccountApplicationTests.java new file mode 100644 index 0000000..455dcdd --- /dev/null +++ b/cloud-server-account/src/test/java/com/dsh/AccountApplicationTests.java @@ -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()); + } + +} diff --git a/cloud-server-activity/src/main/resources/sharding-jdbc.properties b/cloud-server-activity/src/main/resources/sharding-jdbc.properties index f7b7fb6..54db095 100644 --- a/cloud-server-activity/src/main/resources/sharding-jdbc.properties +++ b/cloud-server-activity/src/main/resources/sharding-jdbc.properties @@ -3,9 +3,9 @@ #�������� datasource.master0.type=com.alibaba.druid.pool.DruidDataSource datasource.master0.driverClassName=com.mysql.cj.jdbc.Driver -datasource.master0.url=jdbc:mysql://8.137.22.229:3306/playpai_activity?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai +datasource.master0.url=jdbc:mysql://192.168.110.80:3306/playpai_activity?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai datasource.master0.username=root -datasource.master0.password=playpai2023! +datasource.master0.password=123456 datasource.master0.maxActive=20 datasource.master0.maxWait=60000 datasource.master0.minIdle=5 diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java b/cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java index 6990211..29210cf 100644 --- a/cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java +++ b/cloud-server-competition/src/main/java/com/dsh/competition/controller/CompetitionController.java @@ -1,6 +1,7 @@ package com.dsh.competition.controller; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -572,5 +573,56 @@ return sum; } + + + @ResponseBody + @PostMapping("/base/competition/actPt") + public HashMap<String, Object> actPt(@RequestBody List<Integer> ids){ + HashMap<String, Object> map = new HashMap<>(); + if(ids.size()==0){ + ids.add(-1); + } + ArrayList<Object> integers = new ArrayList<>(); + List<Object> collect = integers.stream().sorted().collect(Collectors.toList()); + int year = DateUtil.year(new Date()); + for (int i = 0; i < 10; i++) { + integers.add(year-i); + } + // 年 + ArrayList<Integer> years = new ArrayList<>(); + ArrayList<Integer> yearsUser = new ArrayList<>(); + for (Object o : collect) { + String s = o.toString(); + int count = cttService.count(new LambdaQueryWrapper<Competition>().like(Competition::getInsertTime, s)); + int count1 = ucttService.count(new LambdaQueryWrapper<UserCompetition>().in(UserCompetition::getAppUserId, ids).like(UserCompetition::getInsertTime,s)); + years.add(count); + yearsUser.add(count1); + } + map.put("yearData",years); + map.put("yearsUser",yearsUser); + // 月 + ArrayList<Integer> months = new ArrayList<>(); + ArrayList<Integer> monthsUser = new ArrayList<>(); + for (int i = 1; i <= 12; i++) { + double sum=0.0; + String m=i+""; + if(i<10){ + m="0"+i; + } + String s = year + "-" + m; + int count = cttService.count(new LambdaQueryWrapper<Competition>().like(Competition::getInsertTime, s)); + int count1 = ucttService.count(new LambdaQueryWrapper<UserCompetition>().in(UserCompetition::getAppUserId, ids).like(UserCompetition::getInsertTime,s)); + months.add(count); + monthsUser.add(count1); + } + map.put("monthData",months); + map.put("monthsUser",monthsUser); + + return map; + + + + } + } diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/feignclient/other/StoreClient.java b/cloud-server-competition/src/main/java/com/dsh/competition/feignclient/other/StoreClient.java index 9c4fa3d..03861a6 100644 --- a/cloud-server-competition/src/main/java/com/dsh/competition/feignclient/other/StoreClient.java +++ b/cloud-server-competition/src/main/java/com/dsh/competition/feignclient/other/StoreClient.java @@ -30,4 +30,9 @@ */ @PostMapping("/store/queryStoreById") Store queryStoreById(Integer id); + + @PostMapping("/store/addBackRecord") + void addBackRecord(String s); + + } diff --git a/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/PaymentCompetitionServiceImpl.java b/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/PaymentCompetitionServiceImpl.java index 180ce8c..a9b8333 100644 --- a/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/PaymentCompetitionServiceImpl.java +++ b/cloud-server-competition/src/main/java/com/dsh/competition/service/impl/PaymentCompetitionServiceImpl.java @@ -180,6 +180,10 @@ String refund_id = map.get("refund_id"); paymentCompetition.setRefundOrderNo(refund_id); this.updateById(paymentCompetition); + + storeClient.addBackRecord(paymentCompetition.getAmount()+"_"+paymentCompetition.getAppUserId()); + + } if(paymentCompetition.getPayType() == 2){//支付宝支付 Map<String, String> map = payMoneyUtil.aliRefund(payOrderNo, amount.toString()); diff --git a/cloud-server-competition/src/main/resources/sharding-jdbc.properties b/cloud-server-competition/src/main/resources/sharding-jdbc.properties index e9334d0..ffe6f6b 100644 --- a/cloud-server-competition/src/main/resources/sharding-jdbc.properties +++ b/cloud-server-competition/src/main/resources/sharding-jdbc.properties @@ -3,9 +3,9 @@ #�������� datasource.master0.type=com.alibaba.druid.pool.DruidDataSource datasource.master0.driverClassName=com.mysql.cj.jdbc.Driver -datasource.master0.url=jdbc:mysql://8.137.22.229:3306/playpai_competition?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai +datasource.master0.url=jdbc:mysql://192.168.110.80:3306/playpai_competition?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai datasource.master0.username=root -datasource.master0.password=playpai2023! +datasource.master0.password=123456 datasource.master0.maxActive=20 datasource.master0.maxWait=60000 datasource.master0.minIdle=5 diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java index fa41b2b..b3aa303 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java +++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CourseController.java @@ -5,19 +5,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.dsh.course.entity.TCourse; -import com.dsh.course.entity.TCoursePackage; -import com.dsh.course.entity.TCoursePackagePayment; -import com.dsh.course.entity.TCoursePackageType; +import com.dsh.course.entity.*; import com.dsh.course.feignclient.model.ExerciseVideo; import com.dsh.course.model.*; import com.dsh.course.model.dto.CourseChangeStateDTO; import com.dsh.course.model.dto.TQueryBenefitsVideosDTO; import com.dsh.course.model.vo.TQueryBenefitsVideosVO; -import com.dsh.course.service.TCoursePackagePaymentService; -import com.dsh.course.service.TCoursePackageService; -import com.dsh.course.service.TCoursePackageTypeService; -import com.dsh.course.service.TCourseService; +import com.dsh.course.service.*; import com.dsh.course.util.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -64,6 +58,9 @@ @Autowired private TCoursePackagePaymentService coursePackagePaymentService; + + @Autowired + private TCoursePackageDiscountService discountService; /** * 上/下架 1为上架 2为下架 3为删除 @@ -451,6 +448,51 @@ return coursePackageService.getHours(coursePackageId1); } + @PostMapping("/course/queryByDiscountId") + public TCoursePackage queryByDiscountId(@RequestBody Integer id){ + TCoursePackageDiscount byId = discountService.getById(id); + TCoursePackage byId1 = coursePackageService.getById(byId.getCoursePackageId()); + return byId1; + } + + + @PostMapping("/course/queryDiscountById") + public Integer queryDiscountById(@RequestBody Integer id){ + TCoursePackageDiscount byId = discountService.getById(id); + return byId.getAuditStatus(); + } + @PostMapping("/course/queryDiscountList") + public List<DiscountList> queryDiscountList(@RequestBody QueryDiscountList queryDiscountList){ + return discountService.queryDiscountList(queryDiscountList); + } + + @PostMapping("/course/queryDiscountListAudit") + public List<DiscountList> queryDiscountListAudit(@RequestBody QueryDiscountList queryDiscountList){ + return discountService.queryDiscountListAudit(queryDiscountList); + } + + + @PostMapping("/course/updateState") + public Boolean updateState( @RequestBody DiscountUpdateState discountUpdateState){ + TCoursePackageDiscount byId = discountService.getById(discountUpdateState.getId()); + List<TCoursePackageDiscount> list = discountService.list(new LambdaQueryWrapper<TCoursePackageDiscount>().eq(TCoursePackageDiscount::getCoursePackageId, byId.getCoursePackageId())); + list.forEach(e->e.setStatus(discountUpdateState.getStatus())); + return discountService.updateBatchById(list); + } + + + @PostMapping("/course/auditDiscount") + public Boolean auditDiscount( @RequestBody AuditDiscount auditDiscount){ + TCoursePackageDiscount byId = discountService.getById(auditDiscount.getId()); + List<TCoursePackageDiscount> list = discountService.list(new LambdaQueryWrapper<TCoursePackageDiscount>().eq(TCoursePackageDiscount::getCoursePackageId, byId.getCoursePackageId())); + for (TCoursePackageDiscount tCoursePackageDiscount : list) { + tCoursePackageDiscount.setAuditStatus(auditDiscount.getType()); + tCoursePackageDiscount.setAuditRemark(auditDiscount.getText()); + } + + return discountService.updateBatchById(list); + } + @PostMapping("/course/queryFee") public HashMap<String, Object> queryFee(@RequestBody QueryDataFee queryDataFee){ HashMap<String, Object> map = new HashMap<>(); diff --git a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageDiscountController.java b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageDiscountController.java index 189b306..d7b3b06 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageDiscountController.java +++ b/cloud-server-course/src/main/java/com/dsh/course/controller/CoursePackageDiscountController.java @@ -56,6 +56,12 @@ } + @PostMapping("/coursePackageDiscount/queryCoursePackageDiscountOne") + public List<TCoursePackageDiscount> queryCoursePackageDiscountOne(@RequestBody Integer id){ + return coursePackageDiscountService.list(new QueryWrapper<TCoursePackageDiscount>().eq("coursePackagePaymentConfigId", id) + .ne("auditStatus", 2)); + } + diff --git a/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackageDiscount.java b/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackageDiscount.java index 48ac5e9..d6be067 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackageDiscount.java +++ b/cloud-server-course/src/main/java/com/dsh/course/entity/TCoursePackageDiscount.java @@ -74,6 +74,7 @@ @TableField("insertTime") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date insertTime; - + @TableField("status") + private Integer status; } diff --git a/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackageDiscountMapper.java b/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackageDiscountMapper.java index 38b7057..3296859 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackageDiscountMapper.java +++ b/cloud-server-course/src/main/java/com/dsh/course/mapper/TCoursePackageDiscountMapper.java @@ -1,7 +1,12 @@ package com.dsh.course.mapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.dsh.course.entity.TCoursePackageDiscount; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dsh.course.model.DiscountList; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * <p> @@ -13,4 +18,9 @@ */ public interface TCoursePackageDiscountMapper extends BaseMapper<TCoursePackageDiscount> { + List<DiscountList> queryDiscountList(@Param("discountListPage") Page<DiscountList> discountListPage, @Param("pCode") String pCode, @Param("cCode") String cCode, @Param("name") String name, @Param("type") Integer type, @Param("ids") List<Integer> ids); + + List<DiscountList> queryDiscountListAudit(@Param("discountListPage") Page<DiscountList> discountListPage, @Param("pCode") String pCode, @Param("cCode") String cCode, @Param("name") String name, @Param("type") Integer type, @Param("ids") List<Integer> ids); + + } diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/AuditDiscount.java b/cloud-server-course/src/main/java/com/dsh/course/model/AuditDiscount.java new file mode 100644 index 0000000..970b818 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/model/AuditDiscount.java @@ -0,0 +1,16 @@ +package com.dsh.course.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class AuditDiscount { + private Integer id; + + private Integer type; + + private String text; +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/DiscountList.java b/cloud-server-course/src/main/java/com/dsh/course/model/DiscountList.java new file mode 100644 index 0000000..f054562 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/model/DiscountList.java @@ -0,0 +1,23 @@ +package com.dsh.course.model; + +import lombok.Data; + +@Data +public class DiscountList { + private Integer id; + + private String pName; + + private String cName; + + private String shopName; + + private String name; + + private String type; + + private Integer status; + + private Integer storeId; + private Integer courseId; +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/DiscountUpdateState.java b/cloud-server-course/src/main/java/com/dsh/course/model/DiscountUpdateState.java new file mode 100644 index 0000000..1b4747e --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/model/DiscountUpdateState.java @@ -0,0 +1,14 @@ +package com.dsh.course.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class DiscountUpdateState { + private Integer id; + + private Integer status; +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/model/QueryDiscountList.java b/cloud-server-course/src/main/java/com/dsh/course/model/QueryDiscountList.java new file mode 100644 index 0000000..72c4cd0 --- /dev/null +++ b/cloud-server-course/src/main/java/com/dsh/course/model/QueryDiscountList.java @@ -0,0 +1,25 @@ +package com.dsh.course.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class QueryDiscountList { + private long offset; + private long limit; + + private String pCode; + + private String cCode; + + private String name; + + private Integer type; + + private List<Integer> ids; +} diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageDiscountService.java b/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageDiscountService.java index cd02a1a..2daf426 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageDiscountService.java +++ b/cloud-server-course/src/main/java/com/dsh/course/service/TCoursePackageDiscountService.java @@ -2,6 +2,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.dsh.course.entity.TCoursePackageDiscount; +import com.dsh.course.model.DiscountList; +import com.dsh.course.model.QueryDiscountList; import com.dsh.course.model.vo.response.Details; import com.dsh.course.model.vo.response.ExchangeCoursePackageResponse; @@ -22,5 +24,7 @@ ExchangeCoursePackageResponse getWeekFreeCourseDetails(Integer coursePackageDiscountId,String lat,String lon); + List<DiscountList> queryDiscountList(QueryDiscountList queryDiscountList); + List<DiscountList> queryDiscountListAudit(QueryDiscountList queryDiscountList); } diff --git a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java index 1017f20..f0e8c04 100644 --- a/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java +++ b/cloud-server-course/src/main/java/com/dsh/course/service/impl/TCoursePackageDiscountServiceImpl.java @@ -3,7 +3,9 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dsh.course.entity.CoursePackagePaymentConfig; import com.dsh.course.entity.TCoursePackage; @@ -16,6 +18,8 @@ import com.dsh.course.mapper.TCoursePackageDiscountMapper; import com.dsh.course.mapper.TCoursePackageMapper; import com.dsh.course.mapper.TCoursePackagePaymentMapper; +import com.dsh.course.model.DiscountList; +import com.dsh.course.model.QueryDiscountList; import com.dsh.course.model.vo.response.Details; import com.dsh.course.model.vo.response.ExchangeCoursePackageResponse; import com.dsh.course.service.TCoursePackageDiscountService; @@ -351,8 +355,64 @@ return packageResponse; } - - + @Override + public List<DiscountList> queryDiscountListAudit(QueryDiscountList queryDiscountList) { + Page<DiscountList> discountListPage = new Page<>(queryDiscountList.getOffset(), queryDiscountList.getLimit()); + List<DiscountList> discountLists = this.baseMapper.queryDiscountListAudit(discountListPage, queryDiscountList.getPCode(), queryDiscountList.getCCode(), queryDiscountList.getName(), queryDiscountList.getType(), queryDiscountList.getIds()); + for (DiscountList discountList : discountLists) { + List<TCoursePackageDiscount> tCoursePackageDiscounts = this.baseMapper.selectList(new LambdaQueryWrapper<TCoursePackageDiscount>().eq(TCoursePackageDiscount::getCoursePackageId, discountList.getCourseId()).ne(TCoursePackageDiscount::getAuditStatus,2).orderByAsc(TCoursePackageDiscount::getType)); + long count = tCoursePackageDiscounts.stream().filter(e -> e.getAuditStatus().equals(2)).count(); + if(count>0){ + discountList.setStatus(2); + }else { + discountList.setStatus(1); + } + String type=""; + for (int i = 0; i < tCoursePackageDiscounts.size(); i++) { + if(tCoursePackageDiscounts.get(i).getType()==1){ + type += "会员折扣、"; + }else if(tCoursePackageDiscounts.get(i).getType()==3){ + type += "限时折扣、"; + }else if(tCoursePackageDiscounts.get(i).getType()==4){ + type += "赠送课时、"; + } + } + if(type.length()>0){ + type = type.substring(0,type.length()-1); + } + discountList.setType(type); + } + return discountLists; + } + @Override + public List<DiscountList> queryDiscountList(QueryDiscountList queryDiscountList) { + Page<DiscountList> discountListPage = new Page<>(queryDiscountList.getOffset(), queryDiscountList.getLimit()); + List<DiscountList> discountLists = this.baseMapper.queryDiscountList(discountListPage, queryDiscountList.getPCode(), queryDiscountList.getCCode(), queryDiscountList.getName(), queryDiscountList.getType(), queryDiscountList.getIds()); + for (DiscountList discountList : discountLists) { + List<TCoursePackageDiscount> tCoursePackageDiscounts = this.baseMapper.selectList(new LambdaQueryWrapper<TCoursePackageDiscount>().eq(TCoursePackageDiscount::getCoursePackageId, discountList.getCourseId()).eq(TCoursePackageDiscount::getAuditStatus,2).orderByAsc(TCoursePackageDiscount::getType)); + long count = tCoursePackageDiscounts.stream().filter(e -> e.getStatus().equals(2)).count(); + if(count>0){ + discountList.setStatus(2); + }else { + discountList.setStatus(1); + } + String type=""; + for (int i = 0; i < tCoursePackageDiscounts.size(); i++) { + if(tCoursePackageDiscounts.get(i).getType()==1){ + type += "会员折扣、"; + }else if(tCoursePackageDiscounts.get(i).getType()==3){ + type += "限时折扣、"; + }else if(tCoursePackageDiscounts.get(i).getType()==4){ + type += "赠送课时、"; + } + } + if(type.length()>0){ + type = type.substring(0,type.length()-1); + } + discountList.setType(type); + } + return discountLists; + } private static boolean isDateWithinRange(Date date, Date startTime, Date endTime) { return date.after(startTime) && date.before(endTime); diff --git a/cloud-server-course/src/main/resources/mapper/TCoursePackageDiscountMapper.xml b/cloud-server-course/src/main/resources/mapper/TCoursePackageDiscountMapper.xml index 95fc2a7..cec4c9e 100644 --- a/cloud-server-course/src/main/resources/mapper/TCoursePackageDiscountMapper.xml +++ b/cloud-server-course/src/main/resources/mapper/TCoursePackageDiscountMapper.xml @@ -15,4 +15,44 @@ <result column="insertTime" property="insertTime" /> </resultMap> + <select id="queryDiscountList" resultType="com.dsh.course.model.DiscountList"> + select t1.id,t1.type,t1.status,t2.province pName,t2.city cName,t2.name,t2.storeId,t2.id courseId from t_course_package_discount t1 left join t_course_package t2 on t1.coursePackageId = t2.id + where t2.storeId in <foreach collection="ids" close=")" item="id" open="(" separator=","> + #{id} and t1.auditStatus =2 + </foreach> + <if test="pCode !=null and pCode !=''"> + and t2.provinceCode =#{pCode} + </if> + <if test="cCode !=null and cCode !=''"> + and t2.cityCode =#{cCode} + </if> + <if test="name !=null and name !=''"> + and t2.name like concat("%",#{name},"%") + </if> + <if test="type !=null "> + and t1.type =#{type} + </if> + group by t1.coursePackageId + </select> + + + <select id="queryDiscountListAudit" resultType="com.dsh.course.model.DiscountList"> + select t1.id,t1.type,t1.auditStatus status,t2.province pName,t2.city cName,t2.name,t2.storeId,t2.id courseId from t_course_package_discount t1 left join t_course_package t2 on t1.coursePackageId = t2.id + where t2.storeId in <foreach collection="ids" close=")" item="id" open="(" separator=","> + #{id} and t1.auditStatus !=2 + </foreach> + <if test="pCode !=null and pCode !=''"> + and t2.provinceCode =#{pCode} + </if> + <if test="cCode !=null and cCode !=''"> + and t2.cityCode =#{cCode} + </if> + <if test="name !=null and name !=''"> + and t2.name like concat("%",#{name},"%") + </if> + <if test="type !=null "> + and t1.type =#{type} + </if> + group by t1.coursePackageId + </select> </mapper> diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java index bf46cef..bca3425 100644 --- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/account/AppUserClient.java @@ -102,7 +102,28 @@ @PostMapping("/student/queryUserAge") HashMap<String, Object> queryUserAge(); + @PostMapping("/student/queryUserAge1") + HashMap<String, Object> queryUserAge1(); + @PostMapping("/student/getUserYYs") + List<Integer> getUserYYs(Integer id); + @PostMapping("/student/queryUserAgeYys") + HashMap<String, Object> queryUserAgeYys(Integer id); + @PostMapping("/student/queryUserAgeStore") + HashMap<String, Object> queryUserAgeStore(Integer id); + + @PostMapping("/student/queryUserAgeYys1") + HashMap<String, Object> queryUserAgeYys1(Integer id); + @PostMapping("/student/queryUserAgeStore1") + HashMap<String, Object> queryUserAgeStore1(Integer id); + + @PostMapping("/student/getUserStore") + List<Integer> getUserStore(Integer id); + @PostMapping("/student/getUserPtVip") + List<Integer> getUserPtVip(); + + @PostMapping("/student/userAndVipPt") + HashMap<String, Object> userAndVipPt(Integer type); } diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/competition/CompetitionClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/competition/CompetitionClient.java index faf925c..6d5921a 100644 --- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/competition/CompetitionClient.java +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/competition/CompetitionClient.java @@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.HashMap; import java.util.List; @FeignClient("mb-cloud-competition") @@ -45,6 +46,9 @@ @PostMapping("/base/competition/queryFee") Double queryFee(QueryDataFee queryDataFee); + @PostMapping("/base/competition/actPt") + HashMap<String, Object> actPt(List<Integer> ids); + } diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseClient.java index 4df17a7..1b0ae84 100644 --- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseClient.java +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CourseClient.java @@ -2,12 +2,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.dsh.course.feignClient.account.model.QueryDataFee; -import com.dsh.course.feignClient.course.model.CourseChangeStateDTO; -import com.dsh.course.feignClient.course.model.QueryCourseList; -import com.dsh.guns.modular.system.model.EditCourseState; -import com.dsh.guns.modular.system.model.TCourse; -import com.dsh.guns.modular.system.model.TQueryBenefitsVideosDTO; -import com.dsh.guns.modular.system.model.TQueryBenefitsVideosVO; +import com.dsh.course.feignClient.course.model.*; +import com.dsh.course.model.AuditDiscount; +import com.dsh.guns.modular.system.model.*; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -114,4 +111,23 @@ HashMap<String, Object> queryFee(QueryDataFee queryDataFee); + @PostMapping("/course/queryByDiscountId") + TCoursePackage queryByDiscountId(Integer id); + + + @PostMapping("/course/queryDiscountById") + Integer queryDiscountById(Integer id); + + + @PostMapping("/course/queryDiscountList") + List<DiscountList> queryDiscountList(QueryDiscountList queryDiscountList); + + @PostMapping("/course/queryDiscountListAudit") + List<DiscountList> queryDiscountListAudit(QueryDiscountList queryDiscountList); + + @PostMapping("/course/updateState") + Boolean updateState(DiscountUpdateState discountUpdateState); + + @PostMapping("/course/auditDiscount") + Boolean auditDiscount(AuditDiscount auditDiscount); } diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageDiscountClient.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageDiscountClient.java index ffc0ba8..7007aed 100644 --- a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageDiscountClient.java +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/CoursePackageDiscountClient.java @@ -36,4 +36,8 @@ @PostMapping("/coursePackageDiscount/setCoursePackageDiscount") void setCoursePackageDiscount(List<TCoursePackageDiscount> list); + + @PostMapping("/coursePackageDiscount/queryCoursePackageDiscountOne") + List<TCoursePackageDiscount> queryCoursePackageDiscountOne(Integer id); + } diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/DiscountList.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/DiscountList.java new file mode 100644 index 0000000..59af385 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/DiscountList.java @@ -0,0 +1,23 @@ +package com.dsh.course.feignClient.course.model; + +import lombok.Data; + +@Data +public class DiscountList { + private Integer id; + + private String pName; + + private String cName; + + private String shopName; + + private String name; + + private String type; + + private Integer status; + + private Integer storeId; + private Integer courseId; +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryDiscountList.java b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryDiscountList.java new file mode 100644 index 0000000..6c78a09 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/feignClient/course/model/QueryDiscountList.java @@ -0,0 +1,25 @@ +package com.dsh.course.feignClient.course.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class QueryDiscountList { + private long offset; + private long limit; + + private String pCode; + + private String cCode; + + private String name; + + private Integer type; + + private List<Integer> ids; +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/mapper/StoreMapper.java b/cloud-server-management/src/main/java/com/dsh/course/mapper/StoreMapper.java index 0a958da..07185a1 100644 --- a/cloud-server-management/src/main/java/com/dsh/course/mapper/StoreMapper.java +++ b/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(); } diff --git a/cloud-server-management/src/main/java/com/dsh/course/mapper/TBackRecordMapper.java b/cloud-server-management/src/main/java/com/dsh/course/mapper/TBackRecordMapper.java new file mode 100644 index 0000000..b6e0267 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/mapper/TBackRecordMapper.java @@ -0,0 +1,17 @@ +package com.dsh.course.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dsh.guns.modular.system.model.TBackRecord; + +/** + * <p> + * 退费记录 Mapper 接口 + * </p> + * + * @author administrator + * @since 2023-10-09 + */ +public interface TBackRecordMapper extends BaseMapper<TBackRecord> { + +} diff --git a/cloud-server-management/src/main/java/com/dsh/course/model/AuditDiscount.java b/cloud-server-management/src/main/java/com/dsh/course/model/AuditDiscount.java new file mode 100644 index 0000000..8414990 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/course/model/AuditDiscount.java @@ -0,0 +1,16 @@ +package com.dsh.course.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class AuditDiscount { + private Integer id; + + private Integer type; + + private String text; +} diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/DataStatisticsController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/DataStatisticsController.java index 0fe7d8e..fcaffb4 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/DataStatisticsController.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/DataStatisticsController.java @@ -1,5 +1,6 @@ package com.dsh.guns.modular.system.controller.code; +import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.dsh.course.feignClient.account.*; import com.dsh.course.feignClient.account.model.CityManager; @@ -60,6 +61,9 @@ @Autowired private CourseClient courseClient; + + @Autowired + private IStoreService storeService; @Autowired private VipPaymentClient vipPaymentClient; @Autowired @@ -83,6 +87,8 @@ private CourseStuddentClient courseStuddentClient; @Autowired private CoursePackageClient coursePackageClient; + @Autowired + private TOperatorService operatorService; /** * 跳转到平台统计数据页面 */ @@ -409,6 +415,13 @@ // 最后put monthlyData.put("yearMount",objects); + ArrayList<Object> integers = new ArrayList<>(); + int year = DateUtil.year(new Date()); + for (int i = 0; i < 10; i++) { + integers.add(year-i); + } + List<Object> collect = integers.stream().sorted().collect(Collectors.toList()); + monthlyData.put("year",collect); return monthlyData; } @@ -490,40 +503,582 @@ return null; } + + + @Autowired + private TBackRecordService backRecordService; + + @RequestMapping(value = "/backPt") + @ResponseBody + public Object backPt(Integer type) { + HashMap<String, Object> map = new HashMap<>(); + List<Integer> userPt = appUserClient.getUserPt(Arrays.asList(1)); + if(userPt.size()==0){ + userPt.add(-1); + } + ArrayList<Object> integers = new ArrayList<>(); + int year = DateUtil.year(new Date()); + List<TBackRecord> thisYear = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().like(TBackRecord::getTime, year).in(TBackRecord::getUserId,userPt)); + double sum5 = thisYear.stream().mapToDouble(TBackRecord::getMoney).sum(); + map.put("thisYear",sum5); + + List<TBackRecord> thisMonth = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().like(TBackRecord::getTime, new SimpleDateFormat("yyyy-MM").format(new Date())).in(TBackRecord::getUserId,userPt)); + double sum6= thisMonth.stream().mapToDouble(TBackRecord::getMoney).sum(); + map.put("thisMonth",sum6); + + + + for (int i = 0; i < 10; i++) { + integers.add(year-i); + } + List<Object> collect = integers.stream().sorted().collect(Collectors.toList()); + // 年 + ArrayList<Double> years = new ArrayList<>(); + for (Object o : collect) { + double sum=0.0; + String s = o.toString(); + List<TBackRecord> list = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().like(TBackRecord::getTime, s).in(TBackRecord::getUserId,userPt)); + sum = list.stream().mapToDouble(TBackRecord::getMoney).sum(); + years.add(sum); + } + ArrayList<Double> months = new ArrayList<>(); + // 月 + for (int i = 1; i <= 12; i++) { + double sum=0.0; + String m=i+""; + if(i<10){ + m="0"+i; + } + String s = year + "-" + m; + List<TBackRecord> list = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().like(TBackRecord::getTime, s).in(TBackRecord::getUserId,userPt)); + sum = list.stream().mapToDouble(TBackRecord::getMoney).sum(); + months.add(sum); + } + + // 获取最近四周 + LocalDateTime minNow = LocalDateTime.now().with(LocalTime.MIN); + LocalDateTime maxNow = LocalDateTime.now().with(LocalTime.MAX); + // 周度数据 + String s1 = minNow.minusDays(6).toString(); + String s2 = maxNow.toString(); + + String s3 = minNow.minusDays(13).toString(); + String s4 = maxNow.minusDays(6).toString(); + + + String s5 = minNow.minusDays(20).toString(); + String s6 = maxNow.minusDays(13).toString(); + + String s7 = minNow.minusDays(27).toString(); + String s8 = maxNow.minusDays(20).toString(); + + List<TBackRecord> list = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().between(TBackRecord::getTime, s7,s8).in(TBackRecord::getUserId,userPt)); + double sum = list.stream().mapToDouble(TBackRecord::getMoney).sum(); + + List<TBackRecord> list1 = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().between(TBackRecord::getTime, s5,s6).in(TBackRecord::getUserId,userPt)); + double sum1 = list1.stream().mapToDouble(TBackRecord::getMoney).sum(); + List<TBackRecord> list2 = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().between(TBackRecord::getTime, s3,s4).in(TBackRecord::getUserId,userPt)); + double sum2 = list2.stream().mapToDouble(TBackRecord::getMoney).sum(); + List<TBackRecord> list3 = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().between(TBackRecord::getTime, s1,s2).in(TBackRecord::getUserId,userPt)); + double sum3 = list3.stream().mapToDouble(TBackRecord::getMoney).sum(); + + map.put("thisWeek",sum3); + + ArrayList<Double> week = new ArrayList<>(); + week.add(sum); + week.add(sum1); + week.add(sum2); + week.add(sum3); + + // 日 + ArrayList<Double> days = new ArrayList<>(); + Double thisDay=0.0; + for (int i = 6; i >= 0; i--) { + String s = minNow.minusDays(i).toString(); + String s9 = maxNow.minusDays(i).toString(); + List<TBackRecord> day = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().between(TBackRecord::getTime, s,s9).in(TBackRecord::getUserId,userPt)); + double sum4 = day.stream().mapToDouble(TBackRecord::getMoney).sum(); + days.add(sum4); + if(i==0){ + thisDay=sum4; + } + } + + map.put("thisDay",thisDay); + map.put("yearData",years); + map.put("monthData",months); + map.put("weekData",week); + map.put("dayData",days); + + return map; + } + + @RequestMapping(value = "/backYys") + @ResponseBody + public Object backYys(Integer id) { + HashMap<String, Object> map = new HashMap<>(); + List<Integer> userPt = appUserClient.getUserYYs(id); + if(userPt.size()==0){ + userPt.add(-1); + } + ArrayList<Object> integers = new ArrayList<>(); + int year = DateUtil.year(new Date()); + List<TBackRecord> thisYear = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().like(TBackRecord::getTime, year).in(TBackRecord::getUserId,userPt)); + double sum5 = thisYear.stream().mapToDouble(TBackRecord::getMoney).sum(); + map.put("thisYear",sum5); + + List<TBackRecord> thisMonth = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().like(TBackRecord::getTime, new SimpleDateFormat("yyyy-MM").format(new Date())).in(TBackRecord::getUserId,userPt)); + double sum6= thisMonth.stream().mapToDouble(TBackRecord::getMoney).sum(); + map.put("thisMonth",sum6); + + + + for (int i = 0; i < 10; i++) { + integers.add(year-i); + } + List<Object> collect = integers.stream().sorted().collect(Collectors.toList()); + // 年 + ArrayList<Double> years = new ArrayList<>(); + for (Object o : collect) { + double sum=0.0; + String s = o.toString(); + List<TBackRecord> list = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().like(TBackRecord::getTime, s).in(TBackRecord::getUserId,userPt)); + sum = list.stream().mapToDouble(TBackRecord::getMoney).sum(); + years.add(sum); + } + ArrayList<Double> months = new ArrayList<>(); + // 月 + for (int i = 1; i <= 12; i++) { + double sum=0.0; + String m=i+""; + if(i<10){ + m="0"+i; + } + String s = year + "-" + m; + List<TBackRecord> list = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().like(TBackRecord::getTime, s).in(TBackRecord::getUserId,userPt)); + sum = list.stream().mapToDouble(TBackRecord::getMoney).sum(); + months.add(sum); + } + + // 获取最近四周 + LocalDateTime minNow = LocalDateTime.now().with(LocalTime.MIN); + LocalDateTime maxNow = LocalDateTime.now().with(LocalTime.MAX); + // 周度数据 + String s1 = minNow.minusDays(6).toString(); + String s2 = maxNow.toString(); + + String s3 = minNow.minusDays(13).toString(); + String s4 = maxNow.minusDays(6).toString(); + + + String s5 = minNow.minusDays(20).toString(); + String s6 = maxNow.minusDays(13).toString(); + + String s7 = minNow.minusDays(27).toString(); + String s8 = maxNow.minusDays(20).toString(); + + List<TBackRecord> list = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().between(TBackRecord::getTime, s7,s8).in(TBackRecord::getUserId,userPt)); + double sum = list.stream().mapToDouble(TBackRecord::getMoney).sum(); + + List<TBackRecord> list1 = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().between(TBackRecord::getTime, s5,s6).in(TBackRecord::getUserId,userPt)); + double sum1 = list1.stream().mapToDouble(TBackRecord::getMoney).sum(); + List<TBackRecord> list2 = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().between(TBackRecord::getTime, s3,s4).in(TBackRecord::getUserId,userPt)); + double sum2 = list2.stream().mapToDouble(TBackRecord::getMoney).sum(); + List<TBackRecord> list3 = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().between(TBackRecord::getTime, s1,s2).in(TBackRecord::getUserId,userPt)); + double sum3 = list3.stream().mapToDouble(TBackRecord::getMoney).sum(); + + map.put("thisWeek",sum3); + + ArrayList<Double> week = new ArrayList<>(); + week.add(sum); + week.add(sum1); + week.add(sum2); + week.add(sum3); + + // 日 + ArrayList<Double> days = new ArrayList<>(); + Double thisDay=0.0; + for (int i = 6; i >= 0; i--) { + String s = minNow.minusDays(i).toString(); + String s9 = maxNow.minusDays(i).toString(); + List<TBackRecord> day = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().between(TBackRecord::getTime, s,s9).in(TBackRecord::getUserId,userPt)); + double sum4 = day.stream().mapToDouble(TBackRecord::getMoney).sum(); + days.add(sum4); + if(i==0){ + thisDay=sum4; + } + } + + map.put("thisDay",thisDay); + map.put("yearData",years); + map.put("monthData",months); + map.put("weekData",week); + map.put("dayData",days); + + return map; + } + @RequestMapping(value = "/backStore") + @ResponseBody + public Object backStore(Integer id) { + HashMap<String, Object> map = new HashMap<>(); + List<Integer> userPt = appUserClient.getUserStore(id); + if(userPt.size()==0){ + userPt.add(-1); + } + ArrayList<Object> integers = new ArrayList<>(); + int year = DateUtil.year(new Date()); + List<TBackRecord> thisYear = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().like(TBackRecord::getTime, year).in(TBackRecord::getUserId,userPt)); + double sum5 = thisYear.stream().mapToDouble(TBackRecord::getMoney).sum(); + map.put("thisYear",sum5); + + List<TBackRecord> thisMonth = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().like(TBackRecord::getTime, new SimpleDateFormat("yyyy-MM").format(new Date())).in(TBackRecord::getUserId,userPt)); + double sum6= thisMonth.stream().mapToDouble(TBackRecord::getMoney).sum(); + map.put("thisMonth",sum6); + + + + for (int i = 0; i < 10; i++) { + integers.add(year-i); + } + List<Object> collect = integers.stream().sorted().collect(Collectors.toList()); + // 年 + ArrayList<Double> years = new ArrayList<>(); + for (Object o : collect) { + double sum=0.0; + String s = o.toString(); + List<TBackRecord> list = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().like(TBackRecord::getTime, s).in(TBackRecord::getUserId,userPt)); + sum = list.stream().mapToDouble(TBackRecord::getMoney).sum(); + years.add(sum); + } + ArrayList<Double> months = new ArrayList<>(); + // 月 + for (int i = 1; i <= 12; i++) { + double sum=0.0; + String m=i+""; + if(i<10){ + m="0"+i; + } + String s = year + "-" + m; + List<TBackRecord> list = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().like(TBackRecord::getTime, s).in(TBackRecord::getUserId,userPt)); + sum = list.stream().mapToDouble(TBackRecord::getMoney).sum(); + months.add(sum); + } + + // 获取最近四周 + LocalDateTime minNow = LocalDateTime.now().with(LocalTime.MIN); + LocalDateTime maxNow = LocalDateTime.now().with(LocalTime.MAX); + // 周度数据 + String s1 = minNow.minusDays(6).toString(); + String s2 = maxNow.toString(); + + String s3 = minNow.minusDays(13).toString(); + String s4 = maxNow.minusDays(6).toString(); + + + String s5 = minNow.minusDays(20).toString(); + String s6 = maxNow.minusDays(13).toString(); + + String s7 = minNow.minusDays(27).toString(); + String s8 = maxNow.minusDays(20).toString(); + + List<TBackRecord> list = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().between(TBackRecord::getTime, s7,s8).in(TBackRecord::getUserId,userPt)); + double sum = list.stream().mapToDouble(TBackRecord::getMoney).sum(); + + List<TBackRecord> list1 = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().between(TBackRecord::getTime, s5,s6).in(TBackRecord::getUserId,userPt)); + double sum1 = list1.stream().mapToDouble(TBackRecord::getMoney).sum(); + List<TBackRecord> list2 = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().between(TBackRecord::getTime, s3,s4).in(TBackRecord::getUserId,userPt)); + double sum2 = list2.stream().mapToDouble(TBackRecord::getMoney).sum(); + List<TBackRecord> list3 = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().between(TBackRecord::getTime, s1,s2).in(TBackRecord::getUserId,userPt)); + double sum3 = list3.stream().mapToDouble(TBackRecord::getMoney).sum(); + + map.put("thisWeek",sum3); + + ArrayList<Double> week = new ArrayList<>(); + week.add(sum); + week.add(sum1); + week.add(sum2); + week.add(sum3); + + // 日 + ArrayList<Double> days = new ArrayList<>(); + Double thisDay=0.0; + for (int i = 6; i >= 0; i--) { + String s = minNow.minusDays(i).toString(); + String s9 = maxNow.minusDays(i).toString(); + List<TBackRecord> day = backRecordService.list(new LambdaQueryWrapper<TBackRecord>().between(TBackRecord::getTime, s,s9).in(TBackRecord::getUserId,userPt)); + double sum4 = day.stream().mapToDouble(TBackRecord::getMoney).sum(); + days.add(sum4); + if(i==0){ + thisDay=sum4; + } + } + + map.put("thisDay",thisDay); + map.put("yearData",years); + map.put("monthData",months); + map.put("weekData",week); + map.put("dayData",days); + + return map; + } + + + @RequestMapping(value = "/userAndVipPt") + @ResponseBody + public Object userAndVipPt(Integer type) { + HashMap<String, Object> map = appUserClient.userAndVipPt(type); + return map; + } + @RequestMapping(value = "/actPt") + @ResponseBody + public Object actPt(Integer type) { + List<Integer> userPt = appUserClient.getUserPt(Arrays.asList(1)); + HashMap<String, Object> map = competitionClient.actPt(userPt); + + List<TStore> list = storeService.list(new LambdaQueryWrapper<TStore>().eq(TStore::getOperatorId, 0)); + for (TStore tStore : list) { + long l = DateUtil.betweenDay(tStore.getCreateTime(), new Date(), true); + tStore.getStartTime(); + } + return map; + } + + + /** * 跳转到运营商统计数据页面 */ @RequestMapping("/operator") public String operator(Model model) { Integer objectType = UserExt.getUser().getObjectType(); - List<CityManager> cityManagers = cityManagerClient.listAll(); - HashSet<String> city = new HashSet<>(); - List<CityManager> list = new ArrayList<>(); - for (CityManager cityManager : cityManagers) { - if (!city.contains(cityManager.getCity())){ - city.add(cityManager.getCity()); - list.add(cityManager); - } - } + List<TOperator> list = operatorService.list(new LambdaQueryWrapper<TOperator>().ne(TOperator::getState, 3)); model.addAttribute("list",list); model.addAttribute("objectType",objectType); return PREFIX + "operatorIncome.html"; } + + /** + * 运营商 + * @param + * @return + */ + @ResponseBody + @RequestMapping("/selectYys") + public Object selectYys(Integer id,String time) { + HashMap<String, Object> map = new HashMap<>(); + // 找出平台的用户 + List<User> list = sysUserService.list(new LambdaQueryWrapper<User>().eq(User::getObjectType, 2)); + List<Integer> ids = list.stream().map(User::getId).collect(Collectors.toList()); + List<Integer> userIds = appUserClient.getUserYYs(id); + QueryDataFee queryDataFee = new QueryDataFee(time, userIds); + // 会员费 + HashMap<String, Object> map1 = appUserClient.queryFee(queryDataFee); + Object fee1 = map1.get("fee1"); + + map.put("fee1",fee1); + //玩湃比 + Object fee2 = map1.get("fee2"); + map.put("fee2",fee2); + // 课程收入 + HashMap<String, Object> map3 = courseClient.queryFee(queryDataFee); + map.put("fee3",map3.get("fee")); + Object data = map3.get("data"); + map.put("courseData",data); + + + // 赛事收入 + Double aDouble1 = competitionClient.queryFee(queryDataFee); + map.put("fee4",aDouble1); + + // 订场 + if(ids.size()==0){ + ids.add(-1); + } + LambdaQueryWrapper<SiteBooking> vipPaymentLambdaQueryWrapper = new LambdaQueryWrapper<>(); + if(ToolUtil.isNotEmpty(time)){ + String stime = time.split(" - ")[0]+" 00:00:00"; + String etime = time.split(" - ")[1]+" 23:59:59"; + vipPaymentLambdaQueryWrapper.between(SiteBooking::getInsertTime,stime,etime); + } + if(userIds.size()==0){ + userIds.add(-1); + } + vipPaymentLambdaQueryWrapper.in(SiteBooking::getAppUserId,userIds); + vipPaymentLambdaQueryWrapper.ne(SiteBooking::getStatus,0); + ArrayList<Integer> objects = new ArrayList<>(); + objects.add(1); + objects.add(2); + vipPaymentLambdaQueryWrapper.in(SiteBooking::getPayType,objects); + List<SiteBooking> list1 = siteBookingService.list(vipPaymentLambdaQueryWrapper); + double sum = list1.stream().mapToDouble(SiteBooking::getPayMoney).sum(); + map.put("fee5",sum); + + + List<Integer> collect = list1.stream().map(SiteBooking::getSiteId).collect(Collectors.toList()); + if(collect.size()==0){ + collect.add(-1); + } + List<TSite> list3 = siteService.list(new LambdaQueryWrapper<TSite>().in(TSite::getId, collect)); + for (SiteBooking siteBooking : list1) { + for (TSite tSite : list3) { + if(siteBooking.getSiteId().equals(tSite.getId())){ + siteBooking.setType(tSite.getSiteTypeId()); + } + } + } + + + List<TSiteType> list2 = siteTypeService.list(); + + List<Map<String,Object>> mapList = new ArrayList<>(); + + for (TSiteType tSiteType : list2) { + HashMap<String, Object> map2 = new HashMap<>(); + map2.put("name",tSiteType.getName()); + double a =0; + for (SiteBooking siteBooking : list1) { + if(tSiteType.getId().equals(siteBooking.getType())){ + a += siteBooking.getPayMoney(); + } + } + map2.put("value",a); + mapList.add(map2); + } + map.put("siteData",mapList); + + + // 商品 门票 + HashMap<String, Object> map2 = pointMercharsClient.queryFee(queryDataFee); + Object all = map2.get("all"); + Object day = map2.get("day"); + Object month = map2.get("month"); + Object quarter = map2.get("quarter"); + Object year = map2.get("year"); + map.put("fee7",all); + map.put("dayone",day); + map.put("monthone",month); + map.put("quarterone",quarter); + map.put("yearone",year); + + return map; + } + + + + /** + * 运营商 + * @param + * @return + */ + @ResponseBody + @RequestMapping("/selectStore") + public Object selectStore(Integer id,String time) { + HashMap<String, Object> map = new HashMap<>(); + // 找出平台的用户 + List<User> list = sysUserService.list(new LambdaQueryWrapper<User>().eq(User::getObjectType, 2)); + List<Integer> ids = list.stream().map(User::getId).collect(Collectors.toList()); + List<Integer> userIds = appUserClient.getUserStore(id); + QueryDataFee queryDataFee = new QueryDataFee(time, userIds); + // 会员费 + HashMap<String, Object> map1 = appUserClient.queryFee(queryDataFee); + Object fee1 = map1.get("fee1"); + + map.put("fee1",fee1); + //玩湃比 + Object fee2 = map1.get("fee2"); + map.put("fee2",fee2); + // 课程收入 + HashMap<String, Object> map3 = courseClient.queryFee(queryDataFee); + map.put("fee3",map3.get("fee")); + Object data = map3.get("data"); + map.put("courseData",data); + + + // 赛事收入 + Double aDouble1 = competitionClient.queryFee(queryDataFee); + map.put("fee4",aDouble1); + + // 订场 + if(ids.size()==0){ + ids.add(-1); + } + LambdaQueryWrapper<SiteBooking> vipPaymentLambdaQueryWrapper = new LambdaQueryWrapper<>(); + if(ToolUtil.isNotEmpty(time)){ + String stime = time.split(" - ")[0]+" 00:00:00"; + String etime = time.split(" - ")[1]+" 23:59:59"; + vipPaymentLambdaQueryWrapper.between(SiteBooking::getInsertTime,stime,etime); + } + if(userIds.size()==0){ + userIds.add(-1); + } + vipPaymentLambdaQueryWrapper.in(SiteBooking::getAppUserId,userIds); + vipPaymentLambdaQueryWrapper.ne(SiteBooking::getStatus,0); + ArrayList<Integer> objects = new ArrayList<>(); + objects.add(1); + objects.add(2); + vipPaymentLambdaQueryWrapper.in(SiteBooking::getPayType,objects); + List<SiteBooking> list1 = siteBookingService.list(vipPaymentLambdaQueryWrapper); + double sum = list1.stream().mapToDouble(SiteBooking::getPayMoney).sum(); + map.put("fee5",sum); + + + List<Integer> collect = list1.stream().map(SiteBooking::getSiteId).collect(Collectors.toList()); + if(collect.size()==0){ + collect.add(-1); + } + List<TSite> list3 = siteService.list(new LambdaQueryWrapper<TSite>().in(TSite::getId, collect)); + for (SiteBooking siteBooking : list1) { + for (TSite tSite : list3) { + if(siteBooking.getSiteId().equals(tSite.getId())){ + siteBooking.setType(tSite.getSiteTypeId()); + } + } + } + + + List<TSiteType> list2 = siteTypeService.list(); + + List<Map<String,Object>> mapList = new ArrayList<>(); + + for (TSiteType tSiteType : list2) { + HashMap<String, Object> map2 = new HashMap<>(); + map2.put("name",tSiteType.getName()); + double a =0; + for (SiteBooking siteBooking : list1) { + if(tSiteType.getId().equals(siteBooking.getType())){ + a += siteBooking.getPayMoney(); + } + } + map2.put("value",a); + mapList.add(map2); + } + map.put("siteData",mapList); + + + // 商品 门票 + HashMap<String, Object> map2 = pointMercharsClient.queryFee(queryDataFee); + Object all = map2.get("all"); + Object day = map2.get("day"); + Object month = map2.get("month"); + Object quarter = map2.get("quarter"); + Object year = map2.get("year"); + map.put("fee7",all); + map.put("dayone",day); + map.put("monthone",month); + map.put("quarterone",quarter); + map.put("yearone",year); + + return map; + } + + /** * 跳转到门店统计数据页面 */ @RequestMapping("/store") public String store(Model model) { Integer objectType = UserExt.getUser().getObjectType(); - List<CityManager> cityManagers = cityManagerClient.listAll(); - HashSet<String> city = new HashSet<>(); - List<CityManager> list = new ArrayList<>(); - for (CityManager cityManager : cityManagers) { - if (!city.contains(cityManager.getCity())){ - city.add(cityManager.getCity()); - list.add(cityManager); - } - } + List<TStore> list = storeService.list(new LambdaQueryWrapper<TStore>().eq(TStore::getState, 1)); model.addAttribute("list",list); model.addAttribute("objectType",objectType); return PREFIX + "storeIncome.html"; @@ -657,6 +1212,85 @@ map.put("data2",objects3); return map; } + @RequestMapping("/stuUserData") + @ResponseBody + public Object stuUserData() { + ArrayList<Integer> objects = new ArrayList<>(); + objects.add(1); + HashMap<String, Object> map = appUserClient.queryUserAge1(); + + return map; + } + @RequestMapping("/stuUserDataYys") + @ResponseBody + public Object stuUserDataYys(Integer id) { + ArrayList<Integer> objects = new ArrayList<>(); + objects.add(1); + HashMap<String, Object> map = appUserClient.queryUserAgeYys(id); + + return map; + } + @RequestMapping("/stuUserDataStore") + @ResponseBody + public Object stuUserDataStore(Integer id) { + ArrayList<Integer> objects = new ArrayList<>(); + objects.add(1); + HashMap<String, Object> map = appUserClient.queryUserAgeStore(id); + + return map; + } + @RequestMapping("/selectYysJx") + @ResponseBody + public Object selectYysJx(Integer id) { + ArrayList<Integer> objects = new ArrayList<>(); + objects.add(1); + HashMap<String, Object> map1 = appUserClient.queryUserAgeYys1(id); + // 找出运营商的用户 + List<Integer> userYYs = appUserClient.getUserYYs(id); + + + List<Map<String, Object>> mapList = coursePackagePaymentClient.queryCourseData(userYYs); + ArrayList<Object> objects2 = new ArrayList<>(); + ArrayList<Object> objects3 = new ArrayList<>(); + for (Map<String, Object> map : mapList) { + Object name = map.get("name"); + Object value = map.get("value"); + objects2.add(name); + objects3.add(value); + } + HashMap<String, Object> map = new HashMap<>(); + map1.put("data1",objects2); + map1.put("data2",objects3); + + + return map1; + } + @RequestMapping("/selectStoreJx") + @ResponseBody + public Object selectStoreJx(Integer id) { + ArrayList<Integer> objects = new ArrayList<>(); + objects.add(1); + HashMap<String, Object> map1 = appUserClient.queryUserAgeStore1(id); + // 找出运营商的用户 + List<Integer> userYYs = appUserClient.getUserYYs(id); + + + List<Map<String, Object>> mapList = coursePackagePaymentClient.queryCourseData(userYYs); + ArrayList<Object> objects2 = new ArrayList<>(); + ArrayList<Object> objects3 = new ArrayList<>(); + for (Map<String, Object> map : mapList) { + Object name = map.get("name"); + Object value = map.get("value"); + objects2.add(name); + objects3.add(value); + } + HashMap<String, Object> map = new HashMap<>(); + map1.put("data1",objects2); + map1.put("data2",objects3); + + + return map1; + } } diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java index 3c4532d..ae08367 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TCoursePackageController.java +++ b/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); diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TDiscountController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TDiscountController.java new file mode 100644 index 0000000..3414c9e --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TDiscountController.java @@ -0,0 +1,382 @@ +package com.dsh.guns.modular.system.controller.code; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.dsh.course.feignClient.competition.CompetitionClient; +import com.dsh.course.feignClient.competition.model.Competition; +import com.dsh.course.feignClient.competition.model.CompetitionUser; +import com.dsh.course.feignClient.competition.model.GetPeopleQuery; +import com.dsh.course.feignClient.course.CourseClient; +import com.dsh.course.feignClient.course.CoursePackageDiscountClient; +import com.dsh.course.feignClient.course.CoursePackagePaymentConfigClient; +import com.dsh.course.feignClient.course.model.*; +import com.dsh.course.model.AuditDiscount; +import com.dsh.guns.core.base.controller.BaseController; +import com.dsh.guns.core.base.tips.ErrorTip; +import com.dsh.guns.core.base.tips.SuccessTip; +import com.dsh.guns.core.common.constant.factory.PageFactory; +import com.dsh.guns.core.util.ToolUtil; +import com.dsh.guns.modular.system.model.DiscountUpdateState; +import com.dsh.guns.modular.system.model.TCity; +import com.dsh.guns.modular.system.model.TStore; +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 org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.annotation.Resource; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 车辆管理控制器 + * + * @author fengshuonan + * @Date 2020-06-05 17:25:12 + */ +@Controller +@RequestMapping("/tDiscount") +public class TDiscountController extends BaseController { + + private String PREFIX = "/system/tDiscount/"; + private String PREFIX1 = "/system/tDiscountAudit/"; + + @Autowired + private CompetitionClient competitionClient; + + @Autowired + private IStoreService storeService; + + @Autowired + private ICityService cityService; + + @Autowired + private CourseClient courseClient; + + + + + /** + * 跳转到车辆管理首页 + */ + @RequestMapping("") + public String index(Model model) { + List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0)); + model.addAttribute("list",list); + return PREFIX + "TDiscount.html"; + } + @RequestMapping("/audit") + public String indexAudit(Model model) { + List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0)); + model.addAttribute("list",list); + return PREFIX1 + "TDiscount.html"; + } + + /** + * 跳转到添加车辆管理 + */ + @RequestMapping("/tCompetition_add") + public String tCompetitionAdd(Model model) { + List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0)); + model.addAttribute("list",list); + return PREFIX + "TCompetition_add.html"; + } + + + /** + * 跳转到修改车辆管理 + */ + @RequestMapping("/tCompetition_update/{id}") + public String tCarUpdate(@PathVariable Integer id, Model model) { + Competition competition = competitionClient.queryById(id); + model.addAttribute("item",competition); + List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0)); + TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, competition.getProvinceCode())); + List<TCity> list1 = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId,one.getId())); + + List<TStore> list2 = storeService.list(new LambdaQueryWrapper<TStore>().eq(TStore::getCityCode,competition.getCityCode())); + model.addAttribute("list",list); + model.addAttribute("list1",list1); + model.addAttribute("list2",list2); + model.addAttribute("type",1); + return PREFIX + "TCompetition_edit.html"; + } + @RequestMapping("/tCompetition_info/{id}") + public String tCarInfo(@PathVariable Integer id, Model model) { + Competition competition = competitionClient.queryById(id); + model.addAttribute("item",competition); + List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0)); + TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, competition.getProvinceCode())); + List<TCity> list1 = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId,one.getId())); + + List<TStore> list2 = storeService.list(new LambdaQueryWrapper<TStore>().eq(TStore::getCityCode,competition.getCityCode())); + model.addAttribute("list",list); + model.addAttribute("list1",list1); + model.addAttribute("list2",list2); + model.addAttribute("type",2); + + return PREFIX + "TCompetition_edit.html"; + } + @RequestMapping("/tCompetition_user/{id}") + public String tCarUser(@PathVariable Integer id, Model model) { + model.addAttribute("id",id); + return PREFIX + "TCompetitionUser.html"; + } + + @Autowired + private ICoursePackageService coursePackageService; + + @Resource + private CoursePackagePaymentConfigClient coursePackagePaymentConfigClient; + + @Resource + private CoursePackageDiscountClient coursePackageDiscountClient; + @RequestMapping("/info") + public String info( Integer id, Model model) { + TCoursePackage tCoursePackage1 = courseClient.queryByDiscountId(id); + TCoursePackage tCoursePackage = coursePackageService.queryById(tCoursePackage1.getId()); + model.addAttribute("item", tCoursePackage); + List<CoursePackagePaymentConfig> list4 = coursePackagePaymentConfigClient.queryCoursePackagePaymentConfigList(id); + List<Map<String, Object>> list = new ArrayList<>(); + for (CoursePackagePaymentConfig coursePackagePaymentConfig : list4) { + if(coursePackagePaymentConfig.getCashPayment() == 0){ + continue; + } + Map<String, Object> map = new HashMap<>(); + map.put("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId()); + map.put("classHours", coursePackagePaymentConfig.getClassHours()); + String payment = ""; + if(coursePackagePaymentConfig.getCashPayment() > 0){ + payment += "现金支付"; + } + if(coursePackagePaymentConfig.getPlayPaiCoin() > 0){ + payment += (ToolUtil.isNotEmpty(payment) ? "、" : "") + "玩湃币支付"; + } + map.put("payment", payment); + map.put("cashPayment", coursePackagePaymentConfig.getCashPayment()); + List<TCoursePackageDiscount> tCoursePackageDiscounts = coursePackageDiscountClient.queryCoursePackageDiscount(coursePackagePaymentConfig.getId()); + map.put("coursePackageDiscount", tCoursePackageDiscounts); + list.add(map); + } + model.addAttribute("coursePackagePaymentConfig", JSON.toJSONString(list)); + return PREFIX + "coursePackageDiscount.html"; + } + @RequestMapping("/infoOne") + public String infoOne( Integer id, Model model) { + Integer state = courseClient.queryDiscountById(id); + if(state==1){ + model.addAttribute("stateStr","待审核"); + model.addAttribute("state",1); + }else { + model.addAttribute("stateStr","未通过"); + model.addAttribute("state",3); + } + + TCoursePackage tCoursePackage1 = courseClient.queryByDiscountId(id); + TCoursePackage tCoursePackage = coursePackageService.queryById(tCoursePackage1.getId()); + model.addAttribute("item", tCoursePackage); + List<CoursePackagePaymentConfig> list4 = coursePackagePaymentConfigClient.queryCoursePackagePaymentConfigList(id); + List<Map<String, Object>> list = new ArrayList<>(); + for (CoursePackagePaymentConfig coursePackagePaymentConfig : list4) { + if(coursePackagePaymentConfig.getCashPayment() == 0){ + continue; + } + Map<String, Object> map = new HashMap<>(); + map.put("coursePackagePaymentConfigId", coursePackagePaymentConfig.getId()); + map.put("classHours", coursePackagePaymentConfig.getClassHours()); + String payment = ""; + if(coursePackagePaymentConfig.getCashPayment() > 0){ + payment += "现金支付"; + } + if(coursePackagePaymentConfig.getPlayPaiCoin() > 0){ + payment += (ToolUtil.isNotEmpty(payment) ? "、" : "") + "玩湃币支付"; + } + map.put("payment", payment); + map.put("cashPayment", coursePackagePaymentConfig.getCashPayment()); + List<TCoursePackageDiscount> tCoursePackageDiscounts = coursePackageDiscountClient.queryCoursePackageDiscountOne(coursePackagePaymentConfig.getId()); + map.put("coursePackageDiscount", tCoursePackageDiscounts); + list.add(map); + } + model.addAttribute("coursePackagePaymentConfig", JSON.toJSONString(list)); + return PREFIX1 + "coursePackageDiscount.html"; + } + + + @RequestMapping(value = "/list") + @ResponseBody + public Object list(String provinceCode, String cityCode, String shopName, String name, Integer type) { + LambdaQueryWrapper<TStore> wrapper = new LambdaQueryWrapper<>(); + if(ToolUtil.isNotEmpty(shopName)){ + wrapper.like(TStore::getName, shopName); + } + List<TStore> list = storeService.list(wrapper); + Page<DiscountList> page = new PageFactory<DiscountList>().defaultPage(); + List<DiscountList> discountLists = courseClient.queryDiscountList(new QueryDiscountList(page.getCurrent(),page.getSize(),provinceCode,cityCode,name,type,list.stream().map(TStore::getId).collect(Collectors.toList()))); + for (DiscountList discountList : discountLists) { + for (TStore tStore : list) { + if(discountList.getStoreId().equals(tStore.getId())){ + discountList.setShopName(tStore.getName()); + } + } + } + page.setRecords(discountLists); + return super.packForBT(page); + } + @RequestMapping(value = "/listAudit") + @ResponseBody + public Object listAudit(String provinceCode, String cityCode, String shopName, String name, Integer type) { + LambdaQueryWrapper<TStore> wrapper = new LambdaQueryWrapper<>(); + if(ToolUtil.isNotEmpty(shopName)){ + wrapper.like(TStore::getName, shopName); + } + List<TStore> list = storeService.list(wrapper); + Page<DiscountList> page = new PageFactory<DiscountList>().defaultPage(); + List<DiscountList> discountLists = courseClient.queryDiscountListAudit(new QueryDiscountList(page.getCurrent(),page.getSize(),provinceCode,cityCode,name,type,list.stream().map(TStore::getId).collect(Collectors.toList()))); + for (DiscountList discountList : discountLists) { + for (TStore tStore : list) { + if(discountList.getStoreId().equals(tStore.getId())){ + discountList.setShopName(tStore.getName()); + } + } + } + page.setRecords(discountLists); + return super.packForBT(page); + } + + + @RequestMapping(value = "/updateState") + @ResponseBody + public Object updateState( Integer id,Integer status) { + try { + Boolean b = courseClient.updateState(new DiscountUpdateState(id,status)); + if(b){ + return new SuccessTip<>(); + } + return new ErrorTip(500,""); + }catch (Exception e){ + e.printStackTrace(); + return ERROR; + } + } + @RequestMapping(value = "/auditDiscount") + @ResponseBody + public Object auditDiscount(Integer id,Integer audit,String text) { + try { + Boolean b = courseClient.auditDiscount(new AuditDiscount(id,audit,text)); + if(b){ + return new SuccessTip<>(); + } + return new ErrorTip(500,""); + }catch (Exception e){ + e.printStackTrace(); + return ERROR; + } + } + + + @RequestMapping(value = "/add") + @ResponseBody + public Object list(Competition competition) { + try { + if(ToolUtil.isNotEmpty(competition.getProvinceCode())) { + TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, competition.getProvinceCode())); + competition.setProvince(one.getName()); + TCity one1 = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, competition.getCityCode())); + competition.setCity(one1.getName()); + } + competition.setAuditStatus(1); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + competition.setStartTime(format.parse(competition.getSTime())); + competition.setEndTime(format.parse(competition.getETime())); + competition.setRegisterEndTime(format.parse(competition.getREndTime())); + competitionClient.add(competition); + return new SuccessTip<>(); + }catch (Exception e){ + e.printStackTrace(); + return ERROR; + } + } + + @RequestMapping(value = "/update") + @ResponseBody + public Object update(Competition competition) { + try { + Competition competition1 = competitionClient.queryById(competition.getId()); + if(ToolUtil.isNotEmpty(competition.getProvinceCode())) { + TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, competition.getProvinceCode())); + competition.setProvince(one.getName()); + TCity one1 = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, competition.getCityCode())); + competition.setCity(one1.getName()); + } + if(ToolUtil.isEmpty(competition.getCoverDrawing())){ + competition.setCoverDrawing(competition1.getCoverDrawing()); + } + if(ToolUtil.isEmpty(competition.getRegistrationNotes())){ + competition.setRegistrationNotes(competition1.getRegistrationNotes()); + } + competitionClient.update(competition); + return new SuccessTip<>(); + }catch (Exception e){ + e.printStackTrace(); + return ERROR; + } + } + + + @RequestMapping(value = "/cancel") + public Object cancel(Integer id) { + try { + competitionClient.cancel(id); + return SUCCESS_TIP; + }catch (Exception e){ + e.printStackTrace(); + return ERROR; + } + } + + @RequestMapping(value = "/getPeopleFromId") + public Object getPeopleFromId(Integer id,Integer state) { + try { + Page<Object> page = new PageFactory<>().defaultPage(); + Page<CompetitionUser> data = competitionClient.getPeopleFromId(new GetPeopleQuery(page.getSize(),page.getCurrent(),id,state)); + return super.packForBT(data); + }catch (Exception e){ + e.printStackTrace(); + return ERROR; + } + } + + @RequestMapping(value = "/onChange") + @ResponseBody + public Object onChange(Integer oneId) { + try { + TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, oneId)); + return cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId,one.getId())); + }catch (Exception e){ + e.printStackTrace(); + return ERROR; + } + } + @RequestMapping(value = "/oneChangeNext") + @ResponseBody + public Object oneChangeNext(Integer oneId) { + try { + return storeService.list(new LambdaQueryWrapper<TStore>().eq(TStore::getCityCode, oneId)); + }catch (Exception e){ + e.printStackTrace(); + return ERROR; + } + } + + +} diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TDiscountExamineController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TDiscountExamineController.java index bcdaa19..eaa11c4 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TDiscountExamineController.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TDiscountExamineController.java @@ -1,26 +1,21 @@ package com.dsh.guns.modular.system.controller.code; - import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; - -/** - * 折扣审核 控制器 - */ @Controller @RequestMapping("/tDiscountExamine") public class TDiscountExamineController { - private String PREFIX = "/system/tDiscountExamine/"; + private String PREFIX = "/system/tDiscount/"; /** * 折扣审核列表页 */ @RequestMapping("") public String index(Model model) { - return PREFIX + "TDiscountExamine.html"; + return PREFIX + "TDiscount.html"; } diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TDiscountManageController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TDiscountManageController.java deleted file mode 100644 index 80a0669..0000000 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TDiscountManageController.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.dsh.guns.modular.system.controller.code; - - -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.RequestMapping; - -/** - * 折扣管理 控制器 - */ - -@Controller -@RequestMapping("/tDiscountManage") -public class TDiscountManageController { - - private String PREFIX = "/system/tDiscountManage/"; - - /** - * 优惠券审核列表页 - */ - @RequestMapping("") - public String index(Model model) { - return PREFIX + "TDiscountManage.html"; - } - - - -} diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TShopController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TShopController.java index e9d7090..070b2e5 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TShopController.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TShopController.java @@ -29,8 +29,10 @@ import javax.annotation.Resource; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * 车辆管理控制器 @@ -140,12 +142,13 @@ List<TCity> list = cityService.list(new LambdaQueryWrapper<TCity>().eq(TCity::getParentId, 0)); // TCity one = cityService.getOne(new LambdaQueryWrapper<TCity>().eq(TCity::getCode, byId.getProvinceCode())); - TOperatorCity one = operatorCityService.getOne(new LambdaQueryWrapper<TOperatorCity>().eq(TOperatorCity::getOperatorId, byId.getOperatorId()).eq(TOperatorCity::getType, 1)); + List<TOperatorCity> one = operatorCityService.list(new LambdaQueryWrapper<TOperatorCity>().eq(TOperatorCity::getOperatorId, byId.getOperatorId()).eq(TOperatorCity::getType, 1)); List<TOperatorCity> ones = operatorCityService.list(new LambdaQueryWrapper<TOperatorCity>().eq(TOperatorCity::getOperatorId, byId.getOperatorId()).eq(TOperatorCity::getType, 1)); if(ones.size()>0){ model.addAttribute("list",ones); - List<TOperatorCity> list3 = operatorCityService.list(new LambdaQueryWrapper<TOperatorCity>().eq(TOperatorCity::getPid, one.getId()).eq(TOperatorCity::getType, 2)); + TOperatorCity one1 = operatorCityService.getOne(new LambdaQueryWrapper<TOperatorCity>().eq(TOperatorCity::getOperatorId, byId.getOperatorId()).eq(TOperatorCity::getType, 1).eq(TOperatorCity::getCode,byId.getProvinceCode())); + List<TOperatorCity> list3 = operatorCityService.list(new LambdaQueryWrapper<TOperatorCity>().in(TOperatorCity::getPid, one1.getId()).eq(TOperatorCity::getType, 2)); model.addAttribute("list1",list3); System.out.println("===list3======="+list3); @@ -353,6 +356,7 @@ tStore.setType(type); tStore.setOperatorId(yyId); tStore.setState(1); + tStore.setCreateTime(new Date()); User user = new User(); List<User> users = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getAccount, userPhone)); if(users.size()>0){ @@ -560,7 +564,7 @@ @ResponseBody public Object onChange2(Integer oneId) { try { - List<TOperatorCity> list1 = operatorCityService.list(new LambdaQueryWrapper<TOperatorCity>().eq(TOperatorCity::getOperatorId, oneId).eq(TOperatorCity::getType, 1)); + List<TOperatorCity> list1 = operatorCityService.list(new LambdaQueryWrapper<TOperatorCity>().eq(TOperatorCity::getId, oneId).eq(TOperatorCity::getType, 1)); List<TOperatorCity> list = operatorCityService.list(new LambdaQueryWrapper<TOperatorCity>().eq(TOperatorCity::getPid, oneId).eq(TOperatorCity::getType, 2)); // 若是全国 为空 去找这个省下面的市 diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java index cfad2a4..aa246a9 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/code/TSiteController.java @@ -426,24 +426,6 @@ return ResultUtil.success("添加成功"); } - public static void main(String[] args) { - - HashMap<String, String> map = new HashMap<>(); - map.put("sign","0DB011836143EEE2C2E072967C9F4E4B"); - map.put("name","测试场地"); - map.put("short_name","测试场地"); - map.put("location","成都"); - map.put("address","成都地址"); - map.put("telephone","17888888888"); - map.put("linkman","成都"); - map.put("business_time","[{\"start_time\":\"00:00\",\"close_time\":\"23:59\"}]"); - map.put("logo","https://we-park-life.oss-cn-beijing.aliyuncs.com/img/f325d449f2634855ad1fb0cc796465e8.png"); - map.put("remark","场地介绍"); - map.put("lat","30.670124"); - map.put("lng","103.929497"); - String s = HttpRequestUtil.postRequest("https://try.daowepark.com/v7/user_api/general/addSpace", map); - System.out.println(s); - } /** * 编辑场地管理 diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/BallController.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/BallController.java index 210b1ff..4efb025 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/controller/system/BallController.java +++ b/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); + } + } diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/DiscountUpdateState.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/DiscountUpdateState.java new file mode 100644 index 0000000..668f15c --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/DiscountUpdateState.java @@ -0,0 +1,14 @@ +package com.dsh.guns.modular.system.model; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class DiscountUpdateState { + private Integer id; + + private Integer status; +} diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TBackRecord.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TBackRecord.java new file mode 100644 index 0000000..b3c3f05 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TBackRecord.java @@ -0,0 +1,46 @@ +package com.dsh.guns.modular.system.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * <p> + * 退费记录 + * </p> + * + * @author administrator + * @since 2023-10-09 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("t_back_record") +public class TBackRecord extends Model<TBackRecord> { + + private static final long serialVersionUID=1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @TableField("userId") + private Integer userId; + + private Double money=0.0; + + private LocalDateTime time; + + + @Override + protected Serializable pkVal() { + return this.id; + } + +} diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TStore.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TStore.java index 2881577..8adf9ff 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TStore.java +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/TStore.java @@ -7,6 +7,7 @@ import lombok.Data; import java.math.BigDecimal; +import java.util.Date; @TableName("t_store") @Data @@ -48,4 +49,6 @@ private Integer type; @TableField("ids") private String ids; + @TableField("createTime") + private Date createTime; } diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/MethodDto.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/MethodDto.java new file mode 100644 index 0000000..6af7834 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/model/dto/MethodDto.java @@ -0,0 +1,9 @@ +package com.dsh.guns.modular.system.model.dto; + +import lombok.Data; + +@Data +public class MethodDto { + Integer id; + Integer method; +} diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IStoreService.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IStoreService.java index 55d1c2b..01baa7a 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/IStoreService.java +++ b/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(); } diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/TBackRecordService.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/TBackRecordService.java new file mode 100644 index 0000000..5d01eb6 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/TBackRecordService.java @@ -0,0 +1,17 @@ +package com.dsh.guns.modular.system.service; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dsh.guns.modular.system.model.TBackRecord; + +/** + * <p> + * 退费记录 服务类 + * </p> + * + * @author administrator + * @since 2023-10-09 + */ +public interface TBackRecordService extends IService<TBackRecord> { + +} diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/StoreServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/StoreServiceImpl.java index 2ac311e..f66f1c7 100644 --- a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/StoreServiceImpl.java +++ b/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(); diff --git a/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TBackRecordServiceImpl.java b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TBackRecordServiceImpl.java new file mode 100644 index 0000000..d542177 --- /dev/null +++ b/cloud-server-management/src/main/java/com/dsh/guns/modular/system/service/impl/TBackRecordServiceImpl.java @@ -0,0 +1,21 @@ +package com.dsh.guns.modular.system.service.impl; + + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dsh.course.mapper.TBackRecordMapper; +import com.dsh.guns.modular.system.model.TBackRecord; +import com.dsh.guns.modular.system.service.TBackRecordService; +import org.springframework.stereotype.Service; + +/** + * <p> + * 退费记录 服务实现类 + * </p> + * + * @author administrator + * @since 2023-10-09 + */ +@Service +public class TBackRecordServiceImpl extends ServiceImpl<TBackRecordMapper, TBackRecord> implements TBackRecordService { + +} diff --git a/cloud-server-management/src/main/resources/mapper/TBackRecordMapper.xml b/cloud-server-management/src/main/resources/mapper/TBackRecordMapper.xml new file mode 100644 index 0000000..02e2eca --- /dev/null +++ b/cloud-server-management/src/main/resources/mapper/TBackRecordMapper.xml @@ -0,0 +1,6 @@ +<?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.TBackRecordMapper"> + + +</mapper> diff --git a/cloud-server-management/src/main/resources/mapper/TStoreMapper.xml b/cloud-server-management/src/main/resources/mapper/TStoreMapper.xml index e247e9d..5877e09 100644 --- a/cloud-server-management/src/main/resources/mapper/TStoreMapper.xml +++ b/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> \ No newline at end of file diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/ball_pre_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/ball_pre_add.html index 8eef478..caf096a 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/ball_pre_add.html +++ b/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": "                                    *所属运营商:", + "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": "                                ", + "inline": true, + "wrapperComponent": "", + "style": { + "marginLeft": "0" + } }, { "type": "input-text", @@ -385,6 +432,16 @@ "value": "16" }, { + "type": "tpl", + "id": "u:587781d5d181", + "tpl": "                                ", + "inline": true, + "wrapperComponent": "", + "style": { + "marginLeft": "0" + } + }, + { "type": "input-text", "label": "玩派币", "name": "shequCoin", @@ -466,6 +523,16 @@ "value": "13" }, { + "type": "tpl", + "id": "u:587781d5d181", + "tpl": "                                ", + "inline": true, + "wrapperComponent": "", + "style": { + "marginLeft": "0" + } + }, + { "type": "input-text", "label": "玩派币", "name": "shemenCoin", @@ -544,10 +611,20 @@ "value": "玩湃熊之力-速度" }, { + "type": "tpl", + "id": "u:587781d5d181", + "tpl": "                                ", + "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": "                                ", + "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": "                                ", + "inline": true, + "wrapperComponent": "", + "style": { + "marginLeft": "0" + } }, { "type": "input-text", @@ -803,6 +900,16 @@ "value": "8" }, { + "type": "tpl", + "id": "u:587781d5d181", + "tpl": "                                ", + "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": "                                ", + "inline": true, + "wrapperComponent": "", + "style": { + "marginLeft": "0" + } }, { "type": "input-text", @@ -966,6 +1083,16 @@ "value": "11" }, { + "type": "tpl", + "id": "u:587781d5d181", + "tpl": "                                ", + "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": "                                ", + "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" + } + ] + } + } } ] }; diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/ball_pre_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/ball_pre_edit.html index 6b53d15..f375f7f 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/ball_pre_edit.html +++ b/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": "                                    *所属运营商:", + "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" } ] } diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/cancel.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/cancel.html new file mode 100644 index 0000000..624df13 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/cancel.html @@ -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> \ No newline at end of file diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/join.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/join.html new file mode 100644 index 0000000..1ff3eb8 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/join.html @@ -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> \ No newline at end of file diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue.html index 0aafb2c..f4eef17 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue.html +++ b/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"/> diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue_add.html index d64fa91..3ced3d4 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue_add.html +++ b/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({ diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue_edit.html new file mode 100644 index 0000000..6dd45c1 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue_edit.html @@ -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> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue_info.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue_info.html new file mode 100644 index 0000000..4ee4007 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/ball/yuyue_info.html @@ -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> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_add.html index cb7fc3a..f66df1d 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_add.html +++ b/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;"> </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> diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_edit.html index c9d8e1b..7142138 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/coursePackage/coursePackage_edit.html +++ b/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> diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/operatorIncome.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/operatorIncome.html index ca25adc..d7c2800 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/operatorIncome.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/operatorIncome.html @@ -41,6 +41,7 @@ <div class="ibox float-e-margins"> <div class="ibox-content"> <div class="form-horizontal"> + <div class="row"> <br class="col-sm-10"> @if(objectType==1){ @@ -48,32 +49,20 @@ <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="cCode" onchange="TSite.oneChangeNext(1)"> + <select class="form-control" id="cCode" > <option value="">请选择</option> @for(obj in list){ - <option value="${obj.cityCode}">${obj.city}</option> + <option value="${obj.id}">${obj.name}</option> @} </select> </div> </div> @} @if(objectType==1){ - <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="account" > - <option value="">请选择账号</option> - </select> - </div> - </div> - <#button name="搜索" icon="fa-search" clickFun="TCompetition.search()"/> + <#button name="搜索" icon="fa-search" clickFun="search()"/> @} </br> </br> @@ -106,21 +95,19 @@ </br> <div class="col-sm-3" style="width: 400px;display: flex"> <#TimeCon id="beginTime" name="时间段:" isTime="false"/> - <#button name="搜索" icon="fa-search" clickFun="TCompetition.search()"/> + <#button name="搜索" icon="fa-search" clickFun="search()"/> </div> </div> <div class="col-sm-10" style="width: 1500px" > </br> </br> - <span>会员费收入:</span> - <span>玩湃币充值收入:</span> - <span>课程收入:</span> - <span>活动收入:</span> - <span>订场收入:</span> - <span>赛事收入:</span> - <span>商品收入:</span> - <span>其他收入:</span> + <span>会员费收入:<label id="fee1">0.0</label></span> + <span>玩湃币充值收入:<label id="fee2">0.0</label></span> + <span>课程收入:<label id="fee3">0.0</label></span> + <span>活动/赛事收入:<label id="fee4">0.0</label></span> + <span>订场收入:<label id="fee5">0.0</label></span> + <span>商品收入:<label id="fee7">0.0</label></span> </br> </br> </br> @@ -137,10 +124,10 @@ <div class="col-sm-10" style="width: 1500px" > </br> </br> - <span>本年退费额度:</span> - <span>本月退费额度:</span> - <span>本周退费额度:</span> - <span>本日退费额度:</span> + <span id="yearRefund">本年退费额度:<span id="back1"></span></span> + <span id="monthRefund">本月退费额度:<span id="back2"></span></span> + <span id="weekRefund">本周退费额度:<span id="back3"></span></span> + <span id="todayRefund">本日退费额度:<span id="back4"></span></span> </br> </br> <div id="refund" style="width: 1280px;height:500px;"></div> @@ -279,6 +266,50 @@ <script src="${ctxPath}/modular/system/dataStatistics/tSite.js"></script> <script src="${ctxPath}/static/js/plugins/switchery/switchery.js"></script> <script> + + + function oneChangeNext(e){ + var oneId=$(e).val(); + var ajax = new $ax(Feng.ctxPath + "/tCity/onChange", function(data){ + if(data!=null){ + if(language==1){ + var content='<option value="">选择市</option>'; + }else if(language==2){ + var content='<option value="">Choose your franchisee</option>'; + }else { + var content='<option value="">Pilih franchisee Anda</option>'; + } + $.each(data, function(k,v) { + content += "<option value='"+v.code+"'>"+v.name+"</option>"; + }); + $("#cCode").empty().append(content); + } + }); + ajax.set("oneId",oneId); + ajax.start(); + } + + + + function search(){ + + if(cutType==1){ + srtj() + tuifei() + } + + if(cutType==2){ + yytj() + } + if(cutType==3){ + jxtj() + } + } + + + let cutType=1; + + laydate.render({ elem: '#beginTime' , trigger: 'click' @@ -288,15 +319,17 @@ getContent(1); getContent1(1); getContent2(1); + // 基于准备好的dom,初始化echarts实例 var myChart = echarts.init(document.getElementById('income')); - var myChart1 = echarts.init(document.getElementById('refund')); + var myChart2 = echarts.init(document.getElementById('user')); var myChart3 = echarts.init(document.getElementById('vip')); var myChart4 = echarts.init(document.getElementById('activity')); var myChart5 = echarts.init(document.getElementById('prepare')); var myChart6 = echarts.init(document.getElementById('teach')); var myChart7 = echarts.init(document.getElementById('courseData')); + tuifei() option = { tooltip: { trigger: 'axis' @@ -344,59 +377,6 @@ }, { name: '日度营收', - type: 'line', - stack: 'Total', - data: [320, 332, 301, 334, 390, 330, 320, 10, 195, 145, 188, 160] - } - ] - }; - option1 = { - tooltip: { - trigger: 'axis' - }, - legend: { - data: ['年度退费', '月度退费', '周度退费', '日度退费'] - }, - grid: { - left: '3%', - right: '4%', - bottom: '3%', - containLabel: true - }, - toolbox: { - feature: { - saveAsImage: {} - } - }, - xAxis: { - type: 'category', - boundaryGap: false, - data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'] - }, - yAxis: { - type: 'value' - }, - series: [ - { - name: '年度退费', - type: 'line', - stack: 'Total', - data: [120, 132, 101, 134, 90, 230, 160, 190, 410, 330, 210, 330] - }, - { - name: '月度退费', - type: 'line', - stack: 'Total', - data: [220, 182, 191, 234, 290, 330, 310, 190, 210, 330, 410, 160] - }, - { - name: '周度退费', - type: 'line', - stack: 'Total', - data: [150, 232, 201, 154, 190, 330, 410, 160, 210, 195, 210, 188] - }, - { - name: '日度退费', type: 'line', stack: 'Total', data: [320, 332, 301, 334, 390, 330, 320, 10, 195, 145, 188, 160] @@ -700,7 +680,6 @@ }; // 使用刚指定的配置项和数据显示图表。 myChart.setOption(option); - myChart1.setOption(option1); myChart2.setOption(option2); myChart3.setOption(option3); myChart4.setOption(option4); @@ -709,6 +688,7 @@ myChart7.setOption(option7); }); function getContent(type){ + cutType=type //设置点击字体颜色效果 for(var i=1;i<4;i++){ document.getElementById("div"+i).style.color="#888888";// @@ -727,7 +707,500 @@ $("#ensure").show(); $("#nextB").hide(); } + + + if(type==1){ + srtj() + tuifei() + } + + + + if(type==2){ + yytj() + } + + if(type==3){ + jxtj() + } + + + + } + function srtj() { + var id = $("#cCode").val() + var beginTime = $("#beginTime").val() + console.log(id) + if(id==""){ + Feng.info("请先选择运营商"); + return; + } + var ajax = new $ax(Feng.ctxPath + "/data/selectYys", function (data) { + + $("#fee1").text(data.fee1) + $("#fee2").text(data.fee2) + $("#fee3").text(data.fee3) + $("#fee4").text(data.fee4) + $("#fee5").text(data.fee5) + $("#fee7").text(data.fee7) + $("#day").val(data.dayone) + $("#month").val(data.monthone) + $("#quarter").val(data.quarterone) + $("#year").val(data.yearone) + + + + + + var chartDom = document.getElementById('cookieTicket'); + var myChart = echarts.init(chartDom); + var option; + option = { + title: { + text: '门票收入', + subtext: '', + left: 'center' + }, + tooltip: { + trigger: 'item' + }, + + series: [ + { + name: 'Access From', + type: 'pie', + radius: '50%', + data: [ + { value: data.dayone, name: '日卡' }, + { value: data.monthone, name: '月卡' }, + { value: data.quarterone, name: '季卡' }, + { value: data.yearone, name: '年卡' }, + + ], + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + } + ] + }; + myChart.setOption(option); + + var chartDom = document.getElementById('cookieCourse'); + var myChart = echarts.init(chartDom); + var option; + option = { + title: { + text: '课程收入', + subtext: '', + left: 'center' + }, + tooltip: { + trigger: 'item' + }, + + series: [ + { + name: 'Access From', + type: 'pie', + radius: '50%', + data: data.courseData, + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + } + ] + }; + myChart.setOption(option); + + + var chartDom = document.getElementById('cookieBooking'); + var myChart = echarts.init(chartDom); + var option; + option = { + title: { + text: '订场收入', + subtext: '', + left: 'center' + }, + tooltip: { + trigger: 'item' + }, + + series: [ + { + name: 'Access From', + type: 'pie', + radius: '50%', + data: data.siteData, + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + } + ] + }; + myChart.setOption(option); + + + + + + }, function (data) { + + }); + ajax.set("id",id); + ajax.set("time",beginTime); + ajax.start(); + + } + + function jxtj() { + var id = $("#cCode").val() + console.log(id,333) + if(id==""){ + Feng.info("请先选择运营商"); + return; + } + var ajax = new $ax(Feng.ctxPath + "/data/selectYysJx", function (data) { + console.log(data) + + var chartDom = document.getElementById('cookieTeachAge'); + var myChart = echarts.init(chartDom); + var option; + option = { + title: { + text: '年龄分布', + subtext: '', + left: 'center' + }, + tooltip: { + trigger: 'item' + }, + + series: [ + { + name: 'Access From', + type: 'pie', + radius: '50%', + data: [ + { value: data.age1, name: '0-7岁' }, + { value: data.age2, name: '8-10岁' }, + { value:data.age3, name: '11-12岁' }, + { value: data.age4, name: '13岁以上' }, + ], + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + } + ] + }; + myChart.setOption(option); + + + + var chartDom = document.getElementById('cookieTeachGender'); + var myChart = echarts.init(chartDom); + var option; + option = { + title: { + text: '性别分布', + subtext: '', + left: 'center' + }, + tooltip: { + trigger: 'item' + }, + + series: [ + { + name: 'Access From', + type: 'pie', + radius: '50%', + data: [ + { value: data.boy, name: '男' }, + { value: data.girl, name: '女' }, + + ], + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + } + ] + }; + myChart.setOption(option); + + + + var chartDom = document.getElementById('cookieTeachCourse'); + var myChart = echarts.init(chartDom); + var option; + + option = { + xAxis: { + type: 'category', + data: data.data1 + }, + yAxis: { + type: 'value' + }, + series: [ + { + data: data.data2, + type: 'bar' + } + ] + }; + myChart.setOption(option); + + + + + + }, function (data) { + + }); + ajax.set("id",id); + ajax.start(); + + } + + function yytj() { + let id = $("#cCode").val() + console.log(id) + if(id==''){ + Feng.info("请先选择运营商"); + return; + } + var ajax = new $ax(Feng.ctxPath + "/data/stuUserDataYys", function (data) { + console.log(data,323232) + var chartDom = document.getElementById('cookieAge'); + var myChart = echarts.init(chartDom); + var option; + option = { + title: { + text: '年龄分布', + subtext: '', + left: 'center' + }, + tooltip: { + trigger: 'item' + }, + + series: [ + { + name: 'Access From', + type: 'pie', + radius: '50%', + data: [ + { value: data.age1, name: '0-12岁' }, + { value: data.age2, name: '13-18岁' }, + { value: data.age3, name: '19-25岁' }, + { value: data.age4, name: '12-35岁' }, + { value: data.age5, name: '36-50岁' }, + { value: data.age6, name: '51岁以上' }, + + ], + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + } + ] + }; + myChart.setOption(option); + + + + var chartDom = document.getElementById('cookieGender'); + var myChart = echarts.init(chartDom); + var option; + option = { + title: { + text: '性别分布', + subtext: '', + left: 'center' + }, + tooltip: { + trigger: 'item' + }, + + series: [ + { + name: 'Access From', + type: 'pie', + radius: '50%', + data: [ + { value: data.boy, name: '男' }, + { value: data.girl, name: '女' }, + + ], + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + } + ] + }; + myChart.setOption(option); + + + + + var chartDom = document.getElementById('city'); + var myChart = echarts.init(chartDom); + var option; + + option = { + xAxis: { + type: 'category', + data: data.cityData + }, + yAxis: { + type: 'value' + }, + series: [ + { + data: data.cityNum, + type: 'bar' + } + ] + }; + myChart.setOption(option); + + + + }, function (data) { + + }); + ajax.set("id",id); + ajax.start(); + } + + + + function tuifei() { + var myChart1 = echarts.init(document.getElementById('refund')); + let id = $("#cCode").val() + console.log(id) + if(id==''){ + Feng.info("请先选择运营商"); + return; + } + var ajax3 = new $ax(Feng.ctxPath + "/data/backYys", function(data){ + $("#back1").text(data.thisYear); + $("#back2").text(data.thisMonth); + $("#back3").text(data.thisWeek); + $("#back4").text(data.thisDay); + option1 = { + tooltip: { + trigger: 'axis' + }, + legend: { + + data: ['年度退费', '月度退费','周度退费','日度退费'], + icon: 'stack', + selectedMode: 'single', // 单选 + selected: { + 年度会员数: true, + 月度会员数: false, + 周度会员数: false, + 日度会员数: false + } + }, + grid: { + left: '3%', + right: '4%', + bottom: '3%', + containLabel: true + }, + toolbox: { + feature: { + saveAsImage: {} + } + }, + xAxis: { + type: 'category', + boundaryGap: false, + data: yearX + }, + yAxis: { + type: 'value' + }, + series: [ + { + name: '年度退费', + type: 'line', + stack: 'Total', + data: data.yearData + }, + { + name: '月度退费', + type: 'line', + stack: 'Total', + data: data.monthData + }, + { + name: '周度退费', + type: 'line', + stack: 'Total', + data: data.weekData + }, + { + name: '日度退费', + type: 'line', + stack: 'Total', + data: data.dayData + } + ] + + }; + }); + ajax3.set("id",id) + ajax3.start(); + + myChart1.on('legendselectchanged', obj => { + var options = myChart1.getOption() + //这里是选择切换什么样的x轴,那么他会进行对Y值的切换 + if (obj.name == '年度退费') { + options.xAxis[0].data = yearX + } else if (obj.name == '月度退费') { + options.xAxis[0].data = monthX + } else if (obj.name == '周度退费') { + options.xAxis[0].data = ["1周","2周","3周","4周"] + } else if (obj.name == '日度退费') { + options.xAxis[0].data = dataX + } + myChart1.setOption(options, true) + }) + myChart1.setOption(option1); + } + function getContent1(type){ //设置点击字体颜色效果 for(var i=1;i<3;i++){ @@ -762,6 +1235,35 @@ } </script> <script> + var ans = []; + var weekX = ["1周","2周","3周","4周"]; + var monthX = ["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"]; + var yearX = []; + var timeX = []; + var dataX = []; + // 创建一个日期对象 + var currentDate = new Date(); + // 获取当前日期的号数 + let currentDay = currentDate.getDate(); + // 循环添加号数到数组 + for (let i = 0; i < 7; i++) { + dataX.push(currentDay - 6+i); + } + // 获取当前月份 + var currentMonth = currentDate.getMonth(); + // 获取当前年份 + var currentYear = currentDate.getFullYear(); + // 计算指定年份和月份的天数 + function getDaysInMonth(year, month) { + // month 参数范围是 0-11,所以需要加 1 + return new Date(year, month + 1, 0).getDate(); + } + // 获取当前月份的天数 + var daysInMonth = getDaysInMonth(currentYear, currentMonth); + // 将天数按字符串格式添加到 timeX 数组中 + for (var i = 1; i <= daysInMonth; i++) { + timeX.push(String(i)); + } $(function(){ var chartDom = document.getElementById('cookieTicket'); var myChart = echarts.init(chartDom); @@ -782,8 +1284,10 @@ type: 'pie', radius: '50%', data: [ - { value: 1048, name: '年票' }, - { value: 735, name: '亲子票' }, + { value: 1048, name: '日卡' }, + { value: 735, name: '月卡' }, + { value: 735, name: '季卡' }, + { value: 735, name: '年卡' }, ], emphasis: { @@ -892,43 +1396,7 @@ type: 'pie', radius: '50%', data: [ - { value: 1048, name: '30-35' }, - { value: 735, name: '12-18' }, - - ], - emphasis: { - itemStyle: { - shadowBlur: 10, - shadowOffsetX: 0, - shadowColor: 'rgba(0, 0, 0, 0.5)' - } - } - } - ] - }; - myChart.setOption(option); - }); - $(function(){ - var chartDom = document.getElementById('cookieTeachAge'); - var myChart = echarts.init(chartDom); - var option; - option = { - title: { - text: '年龄分布', - subtext: '', - left: 'center' - }, - tooltip: { - trigger: 'item' - }, - - series: [ - { - name: 'Access From', - type: 'pie', - radius: '50%', - data: [ - { value: 1048, name: '30-35' }, + { value: 1048, name: '30-351' }, { value: 735, name: '12-18' }, ], @@ -975,64 +1443,6 @@ shadowColor: 'rgba(0, 0, 0, 0.5)' } } - } - ] - }; - myChart.setOption(option); - }); - $(function(){ - var chartDom = document.getElementById('cookieTeachGender'); - var myChart = echarts.init(chartDom); - var option; - option = { - title: { - text: '性别分布', - subtext: '', - left: 'center' - }, - tooltip: { - trigger: 'item' - }, - - series: [ - { - name: 'Access From', - type: 'pie', - radius: '50%', - data: [ - { value: 1048, name: '男' }, - { value: 735, name: '女' }, - - ], - emphasis: { - itemStyle: { - shadowBlur: 10, - shadowOffsetX: 0, - shadowColor: 'rgba(0, 0, 0, 0.5)' - } - } - } - ] - }; - myChart.setOption(option); - }); - $(function(){ - var chartDom = document.getElementById('city'); - var myChart = echarts.init(chartDom); - var option; - - option = { - xAxis: { - type: 'category', - data: ['北京', '上海', '广东', '深圳', '成都', '曹县', '奥里给'] - }, - yAxis: { - type: 'value' - }, - series: [ - { - data: [120, 200, 150, 80, 70, 110, 130], - type: 'bar' } ] }; diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/platformIncome.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/platformIncome.html index 0bf9052..411caab 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/platformIncome.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/platformIncome.html @@ -102,10 +102,10 @@ <div class="col-sm-10" style="width: 1500px" > </br> </br> - <span id="yearRefund">本年退费额度:</span> - <span id="monthRefund">本月退费额度:</span> - <span id="weekRefund">本周退费额度:</span> - <span id="todayRefund">本日退费额度:</span> + <span id="yearRefund">本年退费额度:<span id="back1"></span></span> + <span id="monthRefund">本月退费额度:<span id="back2"></span></span> + <span id="weekRefund">本周退费额度:<span id="back3"></span></span> + <span id="todayRefund">本日退费额度:<span id="back4"></span></span> </br> </br> <div id="refund" style="width: 1280px;height:500px;"></div> @@ -121,8 +121,8 @@ </br> </br> <div style="height: 25px;box-sizing: border-box;background:#f3f3f4;line-height: 25px;border:1px solid;margin-bottom: 20px;width: 500px"> - <div id="d1" class='table2' onclick="getContent1(1)" style="border-right: 1px solid #333;background-color: rgb(26, 179, 148);color: white;">用户总数:0人</div> - <div id="d2" class='table2' onclick="getContent1(2)" style="border-right: 1px solid #333;">年费会员数量:0人</div> + <div id="d1" class='table2' onclick="getContent1(1)" style="border-right: 1px solid #333;background-color: rgb(26, 179, 148);color: white;">用户总数:<span id="userAll"></span>人</div> + <div id="d2" class='table2' onclick="getContent1(2)" style="border-right: 1px solid #333;">年费会员数量:<span id="userVipAll"></span>人</div> </div> </div> <div class="col-sm-10"> @@ -244,9 +244,9 @@ <script src="${ctxPath}/static/js/plugins/switchery/switchery.js"></script> <script> var ans = []; - var weekX = []; + var weekX = ["1","2","上周","本周"]; var monthX = ["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"]; - var yearX = ["2023年","2024年","2025年","2026年","2027年","2028年"]; + var yearX = []; var timeX = []; var dataX = []; // 创建一个日期对象 @@ -283,6 +283,9 @@ getContent2(1); var ajax = new $ax(Feng.ctxPath + "/data/getIncomeData", function(resp){ + yearX=resp.year + + var list = resp.yearMount; console.log(list); var t1 = document.getElementById("totalIncome"); @@ -378,80 +381,30 @@ }); ajax.set("type",1); ajax.start(); - option2 = { + + // 基于准备好的dom,初始化echarts实例 + var myChart = echarts.init(document.getElementById('main')); + var myChart1 = echarts.init(document.getElementById('refund')); + + + + var myChart6 = echarts.init(document.getElementById('teach')); + var myChart7 = echarts.init(document.getElementById('courseData')); + + + var ajax3 = new $ax(Feng.ctxPath + "/data/backPt", function(data){ + $("#back1").text(data.thisYear); + $("#back2").text(data.thisMonth); + $("#back3").text(data.thisWeek); + $("#back4").text(data.thisDay); + option1 = { + tooltip: { trigger: 'axis' }, legend: { - data: ['年度用户数', '月度用户数','周度用户数','日度用户数'], - icon: 'stack', - selectedMode: 'single', // 单选 - selected: { - 年度用户数: true, - 月度用户数: false, - 周度用户数: false, - 日度用户数: false - } - }, - grid: { - left: '3%', - right: '4%', - bottom: '3%', - containLabel: true - }, - toolbox: { - feature: { - saveAsImage: {} - } - }, - xAxis: { - type: 'category', - boundaryGap: false, - data: yearX - }, - yAxis: { - type: 'value' - }, - series: [ - { - name: '年度用户数', - type: 'line', - stack: 'Total', - data: [100,50,60,10,12,13,54,156] - }, - { - name: '月度用户数', - type: 'line', - stack: 'Total', - data: [26,44,55,12,6,7,98,541,223] - }, - { - name: '周度用户数', - type: 'line', - stack: 'Total', - data: [ - 33,22,11,12,61,17,23,33,41 - ] - }, - { - name: '日度用户数', - type: 'line', - stack: 'Total', - data: [ - 12,11,17,26,23,111,23,45,41 - ] - } - ] - }; - var ajax2 = new $ax(Feng.ctxPath + "/data/getIncomeData", function(resp){ - option3 = { - tooltip: { - trigger: 'axis' - }, - legend: { - - data: ['年度会员数', '月度会员数','周度会员数','日度会员数'], + data: ['年度退费', '月度退费','周度退费','日度退费'], icon: 'stack', selectedMode: 'single', // 单选 selected: { @@ -482,54 +435,115 @@ }, series: [ { - name: '年度会员数', + name: '年度退费', type: 'line', stack: 'Total', - data: [100,50,60,10,12,13,54,156] + data: data.yearData }, { - name: '月度会员数', + name: '月度退费', type: 'line', stack: 'Total', - data: [26,44,55,12,6,7,98,541,223] + data: data.monthData }, { - name: '周度会员数', + name: '周度退费', type: 'line', stack: 'Total', - data: [ - 33,22,11,12,61,17,23,33,41 - ] + data: data.weekData }, { - name: '日度会员数', + name: '日度退费', type: 'line', stack: 'Total', - data: [ - 12,11,17,26,23,111,23,45,41 - ] + data: data.dayData } ] + }; }); - ajax2.set("type",1); - ajax2.start(); - // 基于准备好的dom,初始化echarts实例 - var myChart = echarts.init(document.getElementById('main')); - var myChart1 = echarts.init(document.getElementById('refund')); - var myChart2 = echarts.init(document.getElementById('user')); - var myChart3 = echarts.init(document.getElementById('vip')); - var myChart4 = echarts.init(document.getElementById('activity')); - var myChart5 = echarts.init(document.getElementById('prepare')); - var myChart6 = echarts.init(document.getElementById('teach')); - var myChart7 = echarts.init(document.getElementById('courseData')); + ajax3.start(); - option1 = { + + + var ajax4 = new $ax(Feng.ctxPath + "/data/userAndVipPt", function(data){ + option1 = { + + tooltip: { + trigger: 'axis' + }, + legend: { + + data: ['年度退费', '月度退费','周度退费','日度退费'], + icon: 'stack', + selectedMode: 'single', // 单选 + selected: { + 年度会员数: true, + 月度会员数: false, + 周度会员数: false, + 日度会员数: false + } + }, + grid: { + left: '3%', + right: '4%', + bottom: '3%', + containLabel: true + }, + toolbox: { + feature: { + saveAsImage: {} + } + }, + xAxis: { + type: 'category', + boundaryGap: false, + data: yearX + }, + yAxis: { + type: 'value' + }, + series: [ + { + name: '年度退费', + type: 'line', + stack: 'Total', + data: data.yearData + }, + { + name: '月度退费', + type: 'line', + stack: 'Total', + data: data.monthData + }, + { + name: '周度退费', + type: 'line', + stack: 'Total', + data: data.weekData + }, + { + name: '日度退费', + type: 'line', + stack: 'Total', + data: data.dayData + } + ] + + }; + }); + ajax4.start(); + + + + + + option6 = { tooltip: { trigger: 'axis' }, legend: { - data: ['年度退费', '月度退费', '周度退费', '日度退费'] + data: ['年度学员数', '月度学员数', '周度学员数', '日度学员数'] }, grid: { left: '3%', @@ -552,25 +566,25 @@ }, series: [ { - name: '年度退费', + name: '年度学员数', type: 'line', stack: 'Total', data: [120, 132, 101, 134, 90, 230, 160, 190, 410, 330, 210, 330] }, { - name: '月度退费', + name: '月度学员数', type: 'line', stack: 'Total', data: [220, 182, 191, 234, 290, 330, 310, 190, 210, 330, 410, 160] }, { - name: '周度退费', + name: '周度学员数', type: 'line', stack: 'Total', data: [150, 232, 201, 154, 190, 330, 410, 160, 210, 195, 210, 188] }, { - name: '日度退费', + name: '日度学员数', type: 'line', stack: 'Total', data: [320, 332, 301, 334, 390, 330, 320, 10, 195, 145, 188, 160] @@ -579,12 +593,13 @@ }; - option4 = { + + option7 = { tooltip: { trigger: 'axis' }, legend: { - data: ['年度次数', '月度次数'] + data: ['年度耗课数量', '月度耗课数量', '周度耗课数量', '日度耗课数量'] }, grid: { left: '3%', @@ -607,18 +622,29 @@ }, series: [ { - name: '年度次数', + name: '年度耗课数量', type: 'line', stack: 'Total', - data: [1220, 1532, 101, 1394, 980, 2380, 1680, 1190, 1410, 1330, 2110, 1330] + data: [120, 132, 101, 134, 90, 230, 160, 190, 410, 330, 210, 330] }, { - name: '月度次数', + name: '月度耗课数量', type: 'line', stack: 'Total', - data: [1220, 1182, 2191, 3234, 1290, 1330, 2310, 2190, 2210, 1330, 2410, 1650] + data: [220, 182, 191, 234, 290, 330, 310, 190, 210, 330, 410, 160] + }, + { + name: '周度耗课数量', + type: 'line', + stack: 'Total', + data: [150, 232, 201, 154, 190, 330, 410, 160, 210, 195, 210, 188] + }, + { + name: '日度耗课数量', + type: 'line', + stack: 'Total', + data: [320, 332, 301, 334, 390, 330, 320, 10, 195, 145, 188, 160] } - ] }; option5 = { @@ -753,21 +779,6 @@ type: 'line', stack: 'Total', data: [220, 182, 191, 234, 290, 330, 310, 190, 210, 330, 410, 160] - }, - { - name: '周度耗课数量', - type: 'line', - stack: 'Total', - data: [150, 232, 201, 154, 190, 330, 410, 160, 210, 195, 210, 188] - }, - { - name: '日度耗课数量', - type: 'line', - stack: 'Total', - data: [320, 332, 301, 334, 390, 330, 320, 10, 195, 145, 188, 160] - } - ] - }; myChart.on('legendselectchanged', obj => { var options = myChart.getOption() //这里是选择切换什么样的x轴,那么他会进行对Y值的切换 @@ -782,6 +793,33 @@ } myChart.setOption(options, true) }) + myChart1.on('legendselectchanged', obj => { + var options = myChart1.getOption() + //这里是选择切换什么样的x轴,那么他会进行对Y值的切换 + if (obj.name == '年度退费') { + options.xAxis[0].data = yearX + } else if (obj.name == '月度退费') { + options.xAxis[0].data = monthX + } else if (obj.name == '周度退费') { + options.xAxis[0].data = ["1周","2周","3周","4周"] + } else if (obj.name == '日度退费') { + options.xAxis[0].data = dataX + } + myChart1.setOption(options, true) + }) + + + // 使用刚指定的配置项和数据显示图表。 + myChart.setOption(option); + myChart1.setOption(option1); + + myChart6.setOption(option6); + myChart7.setOption(option7); + }); + + function ptUser() { + var myChart2 = echarts.init(document.getElementById('user')); + var myChart3 = echarts.init(document.getElementById('vip')); myChart2.on('legendselectchanged', obj => { var options = myChart2.getOption() //这里是选择切换什么样的x轴,那么他会进行对Y值的切换 @@ -790,7 +828,7 @@ } else if (obj.name == '月度用户数') { options.xAxis[0].data = monthX } else if (obj.name == '周度用户数') { - options.xAxis[0].data = weekX + options.xAxis[0].data = ["1周","2周","3周","4周"] } else if (obj.name == '日度用户数') { options.xAxis[0].data = dataX } @@ -805,22 +843,244 @@ } else if (obj.name == '月度会员数') { options.xAxis[0].data = monthX } else if (obj.name == '周度会员数') { - options.xAxis[0].data = weekX + options.xAxis[0].data = ["1周","2周","3周","4周"] } else if (obj.name == '日度会员数') { options.xAxis[0].data = dataX } myChart3.setOption(options, true) }); - // 使用刚指定的配置项和数据显示图表。 - myChart.setOption(option); - myChart1.setOption(option1); + var ajax2 = new $ax(Feng.ctxPath + "/data/userAndVipPt", function(data){ + $("#userAll").text(data.allUser) + $("#userVipAll").text(data.allVip) + console.log(data) + option2 = { + tooltip: { + trigger: 'axis' + }, + legend: { + + data: ['年度用户数', '月度用户数','周度用户数','日度用户数'], + icon: 'stack', + selectedMode: 'single', // 单选 + selected: { + 年度用户数: true, + 月度用户数: false, + 周度用户数: false, + 日度用户数: false + } + }, + grid: { + left: '3%', + right: '4%', + bottom: '3%', + containLabel: true + }, + toolbox: { + feature: { + saveAsImage: {} + } + }, + xAxis: { + type: 'category', + boundaryGap: false, + data: yearX + }, + yAxis: { + type: 'value' + }, + series: [ + { + name: '年度用户数', + type: 'line', + stack: 'Total', + data: data.yearData + }, + { + name: '月度用户数', + type: 'line', + stack: 'Total', + data: data.monthData + }, + { + name: '周度用户数', + type: 'line', + stack: 'Total', + data: [data.count,data.count1,data.count2,data.count3] + }, + { + name: '日度用户数', + type: 'line', + stack: 'Total', + data: data.dayData + } + ] + }; + option3 = { + tooltip: { + trigger: 'axis' + }, + legend: { + + data: ['年度会员数', '月度会员数','周度会员数','日度会员数'], + icon: 'stack', + selectedMode: 'single', // 单选 + selected: { + 年度会员数: true, + 月度会员数: false, + 周度会员数: false, + 日度会员数: false + } + }, + grid: { + left: '3%', + right: '4%', + bottom: '3%', + containLabel: true + }, + toolbox: { + feature: { + saveAsImage: {} + } + }, + xAxis: { + type: 'category', + boundaryGap: false, + data: yearX + }, + yAxis: { + type: 'value' + }, + series: [ + { + name: '年度会员数', + type: 'line', + stack: 'Total', + data: data.yearsVip + }, + { + name: '月度会员数', + type: 'line', + stack: 'Total', + data: data.monthsVip + }, + { + name: '周度会员数', + type: 'line', + stack: 'Total', + data:[data.countVip,data.countVip1,data.countVip2,data.countVip3] + }, + { + name: '日度会员数', + type: 'line', + stack: 'Total', + data: data.daysVip + } + ] + }; + }); + ajax2.set("type",1) + ajax2.start() myChart2.setOption(option2); myChart3.setOption(option3); + } + + function ptActivity() { + var myChart4 = echarts.init(document.getElementById('activity')); + var myChart5 = echarts.init(document.getElementById('prepare')); + + var ajax2 = new $ax(Feng.ctxPath + "/data/actPt", function(data){ + console.log(data) + + option4 = { + tooltip: { + trigger: 'axis' + }, + legend: { + data: ['年度次数', '月度次数'] + }, + grid: { + left: '3%', + right: '4%', + bottom: '3%', + containLabel: true + }, + toolbox: { + feature: { + saveAsImage: {} + } + }, + xAxis: { + type: 'category', + boundaryGap: false, + data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'] + }, + yAxis: { + type: 'value' + }, + series: [ + { + name: '年度次数', + type: 'line', + stack: 'Total', + data: [1220, 1532, 101, 1394, 980, 2380, 1680, 1190, 1410, 1330, 2110, 1330] + }, + { + name: '月度次数', + type: 'line', + stack: 'Total', + data: [1220, 1182, 2191, 3234, 1290, 1330, 2310, 2190, 2210, 1330, 2410, 1650] + } + + ] + }; + option5 = { + tooltip: { + trigger: 'axis' + }, + legend: { + data: ['年度次数', '月度次数'] + }, + grid: { + left: '3%', + right: '4%', + bottom: '3%', + containLabel: true + }, + toolbox: { + feature: { + saveAsImage: {} + } + }, + xAxis: { + type: 'category', + boundaryGap: false, + data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'] + }, + yAxis: { + type: 'value' + }, + series: [ + { + name: '年度次数', + type: 'line', + stack: 'Total', + data: [120, 132, 101, 394, 980, 2380, 1680, 1190, 1410, 1330, 2110, 1330] + }, + { + name: '月度次数', + type: 'line', + stack: 'Total', + data: [120, 182, 211, 324, 120, 130, 310, 290, 220, 130, 240, 150] + } + ] + }; + }); + ajax2.set("type",1) + ajax2.start() myChart4.setOption(option4); myChart5.setOption(option5); - myChart6.setOption(option6); - myChart7.setOption(option7); - }); + } + function getContent(type){ //设置点击字体颜色效果 for(var i=1;i<4;i++){ @@ -840,6 +1100,158 @@ $("#ensure").show(); $("#nextB").hide(); } + + if(type==2){ + var ajax = new $ax(Feng.ctxPath + "/data/stuUserData", function (data) { + console.log(data,323232) + var chartDom = document.getElementById('cookieAge'); + var myChart = echarts.init(chartDom); + var option; + option = { + title: { + text: '年龄分布', + subtext: '', + left: 'center' + }, + tooltip: { + trigger: 'item' + }, + + series: [ + { + name: 'Access From', + type: 'pie', + radius: '50%', + data: [ + { value: data.age1, name: '0-12岁' }, + { value: data.age2, name: '13-18岁' }, + { value: data.age3, name: '19-25岁' }, + { value: data.age4, name: '12-35岁' }, + { value: data.age5, name: '36-50岁' }, + { value: data.age6, name: '51岁以上' }, + + ], + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + } + ] + }; + myChart.setOption(option); + + + + var chartDom = document.getElementById('cookieGender'); + var myChart = echarts.init(chartDom); + var option; + option = { + title: { + text: '性别分布', + subtext: '', + left: 'center' + }, + tooltip: { + trigger: 'item' + }, + + series: [ + { + name: 'Access From', + type: 'pie', + radius: '50%', + data: [ + { value: data.boy, name: '男' }, + { value: data.girl, name: '女' }, + + ], + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + } + ] + }; + myChart.setOption(option); + + + + + var chartDom = document.getElementById('city'); + var myChart = echarts.init(chartDom); + var option; + + option = { + xAxis: { + type: 'category', + data: data.cityData + }, + yAxis: { + type: 'value' + }, + series: [ + { + data: data.cityNum, + type: 'bar' + } + ] + }; + myChart.setOption(option); + + + + }, function (data) { + + }); + ajax.start(); + + + ptUser() + + } + + + if(type==3){ + var ajax = new $ax(Feng.ctxPath + "/data/stuCourseData", function (data) { + + console.log(data.data1) + var chartDom = document.getElementById('cookieTeachCourse'); + var myChart = echarts.init(chartDom); + var option; + + option = { + xAxis: { + type: 'category', + data: data.data1, + }, + yAxis: { + type: 'value' + }, + series: [ + { + data: data.data2, + type: 'bar' + } + ] + }; + myChart.setOption(option); + }, function (data) { + + }); + ajax.start(); + + ptActivity() + } + + + + } function getContent1(type){ //设置点击字体颜色效果 @@ -1059,42 +1471,6 @@ myChart.setOption(option); }); $(function(){ - var chartDom = document.getElementById('cookieGender'); - var myChart = echarts.init(chartDom); - var option; - option = { - title: { - text: '性别分布', - subtext: '', - left: 'center' - }, - tooltip: { - trigger: 'item' - }, - - series: [ - { - name: 'Access From', - type: 'pie', - radius: '50%', - data: [ - { value: 1048, name: '男' }, - { value: 735, name: '女' }, - - ], - emphasis: { - itemStyle: { - shadowBlur: 10, - shadowOffsetX: 0, - shadowColor: 'rgba(0, 0, 0, 0.5)' - } - } - } - ] - }; - myChart.setOption(option); - }); - $(function(){ var chartDom = document.getElementById('cookieTeachGender'); var myChart = echarts.init(chartDom); var option; @@ -1174,5 +1550,6 @@ }; myChart.setOption(option); }); + </script> @} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/storeIncome.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/storeIncome.html index 0f10169..55f042a 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/storeIncome.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/dataStatistics/storeIncome.html @@ -48,47 +48,23 @@ <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="cCode" onchange="TSite.oneChangeNext(1)"> + <select class="form-control" id="cCode" > <option value="">请选择</option> @for(obj in list){ - <option value="${obj.cityCode}">${obj.city}</option> + <option value="${obj.id}">${obj.name}</option> @} </select> </div> </div> @} @if(objectType==1){ - <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="account" onchange="TSite.getStore()"> - <option value="">请先选择城市</option> - </select> - </div> - </div> @} @if(objectType!=3){ - <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="store"> - <option value="">请先选择城市</option> - </select> - </div> - </div> - <#button name="搜索" icon="fa-search" clickFun="TCompetition.search()"/> + <#button name="搜索" icon="fa-search" clickFun="search()"/> @} </br> </br> @@ -121,21 +97,19 @@ </br> <div class="col-sm-3" style="width: 400px;display: flex"> <#TimeCon id="beginTime" name="时间段:" isTime="false"/> - <#button name="搜索" icon="fa-search" clickFun="TCompetition.search()"/> + <#button name="搜索" icon="fa-search" clickFun="search()"/> </div> </div> <div class="col-sm-10" style="width: 1500px" > </br> </br> - <span>会员费收入:</span> - <span>玩湃币充值收入:</span> - <span>课程收入:</span> - <span>活动收入:</span> - <span>订场收入:</span> - <span>赛事收入:</span> - <span>商品收入:</span> - <span>其他收入:</span> + <span>会员费收入:<label id="fee1">0.0</label></span> + <span>玩湃币充值收入:<label id="fee2">0.0</label></span> + <span>课程收入:<label id="fee3">0.0</label></span> + <span>活动/赛事收入:<label id="fee4">0.0</label></span> + <span>订场收入:<label id="fee5">0.0</label></span> + <span>商品收入:<label id="fee7">0.0</label></span> </br> </br> </br> @@ -152,10 +126,10 @@ <div class="col-sm-10" style="width: 1500px" > </br> </br> - <span>本年退费额度:</span> - <span>本月退费额度:</span> - <span>本周退费额度:</span> - <span>本日退费额度:</span> + <span id="yearRefund">本年退费额度:<span id="back1"></span></span> + <span id="monthRefund">本月退费额度:<span id="back2"></span></span> + <span id="weekRefund">本周退费额度:<span id="back3"></span></span> + <span id="todayRefund">本日退费额度:<span id="back4"></span></span> </br> </br> <div id="refund" style="width: 1280px;height:500px;"></div> @@ -294,6 +268,499 @@ <script src="${ctxPath}/modular/system/dataStatistics/tSite.js"></script> <script src="${ctxPath}/static/js/plugins/switchery/switchery.js"></script> <script> + + + function search(){ + + if(cutType==1){ + srtj() + tuifei() + } + + if(cutType==2){ + yytj() + } + if(cutType==3){ + jxtj() + } + } + + + let cutType=1; + + + function srtj() { + var id = $("#cCode").val() + var beginTime = $("#beginTime").val() + console.log(id) + if(id==""){ + Feng.info("请先选择门店"); + return; + } + var ajax = new $ax(Feng.ctxPath + "/data/selectStore", function (data) { + + $("#fee1").text(data.fee1) + $("#fee2").text(data.fee2) + $("#fee3").text(data.fee3) + $("#fee4").text(data.fee4) + $("#fee5").text(data.fee5) + $("#fee7").text(data.fee7) + $("#day").val(data.dayone) + $("#month").val(data.monthone) + $("#quarter").val(data.quarterone) + $("#year").val(data.yearone) + + + + + + var chartDom = document.getElementById('cookieTicket'); + var myChart = echarts.init(chartDom); + var option; + option = { + title: { + text: '门票收入', + subtext: '', + left: 'center' + }, + tooltip: { + trigger: 'item' + }, + + series: [ + { + name: 'Access From', + type: 'pie', + radius: '50%', + data: [ + { value: data.dayone, name: '日卡' }, + { value: data.monthone, name: '月卡' }, + { value: data.quarterone, name: '季卡' }, + { value: data.yearone, name: '年卡' }, + + ], + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + } + ] + }; + myChart.setOption(option); + + var chartDom = document.getElementById('cookieCourse'); + var myChart = echarts.init(chartDom); + var option; + option = { + title: { + text: '课程收入', + subtext: '', + left: 'center' + }, + tooltip: { + trigger: 'item' + }, + + series: [ + { + name: 'Access From', + type: 'pie', + radius: '50%', + data: data.courseData, + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + } + ] + }; + myChart.setOption(option); + + + var chartDom = document.getElementById('cookieBooking'); + var myChart = echarts.init(chartDom); + var option; + option = { + title: { + text: '订场收入', + subtext: '', + left: 'center' + }, + tooltip: { + trigger: 'item' + }, + + series: [ + { + name: 'Access From', + type: 'pie', + radius: '50%', + data: data.siteData, + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + } + ] + }; + myChart.setOption(option); + + + + + + }, function (data) { + + }); + ajax.set("id",id); + ajax.set("time",beginTime); + ajax.start(); + + } + + + function yytj() { + let id = $("#cCode").val() + console.log(id) + if(id==''){ + Feng.info("请先选择门店"); + return; + } + var ajax = new $ax(Feng.ctxPath + "/data/stuUserDataStore", function (data) { + console.log(data,323232) + var chartDom = document.getElementById('cookieAge'); + var myChart = echarts.init(chartDom); + var option; + option = { + title: { + text: '年龄分布', + subtext: '', + left: 'center' + }, + tooltip: { + trigger: 'item' + }, + + series: [ + { + name: 'Access From', + type: 'pie', + radius: '50%', + data: [ + { value: data.age1, name: '0-12岁' }, + { value: data.age2, name: '13-18岁' }, + { value: data.age3, name: '19-25岁' }, + { value: data.age4, name: '12-35岁' }, + { value: data.age5, name: '36-50岁' }, + { value: data.age6, name: '51岁以上' }, + + ], + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + } + ] + }; + myChart.setOption(option); + + + + var chartDom = document.getElementById('cookieGender'); + var myChart = echarts.init(chartDom); + var option; + option = { + title: { + text: '性别分布', + subtext: '', + left: 'center' + }, + tooltip: { + trigger: 'item' + }, + + series: [ + { + name: 'Access From', + type: 'pie', + radius: '50%', + data: [ + { value: data.boy, name: '男' }, + { value: data.girl, name: '女' }, + + ], + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + } + ] + }; + myChart.setOption(option); + + + + + var chartDom = document.getElementById('city'); + var myChart = echarts.init(chartDom); + var option; + + option = { + xAxis: { + type: 'category', + data: data.cityData + }, + yAxis: { + type: 'value' + }, + series: [ + { + data: data.cityNum, + type: 'bar' + } + ] + }; + myChart.setOption(option); + + + + }, function (data) { + + }); + ajax.set("id",id); + ajax.start(); + } + + function jxtj() { + var id = $("#cCode").val() + console.log(id,333) + if(id==""){ + Feng.info("请先选择门店"); + return; + } + var ajax = new $ax(Feng.ctxPath + "/data/selectStoreJx", function (data) { + console.log(data) + + var chartDom = document.getElementById('cookieTeachAge'); + var myChart = echarts.init(chartDom); + var option; + option = { + title: { + text: '年龄分布', + subtext: '', + left: 'center' + }, + tooltip: { + trigger: 'item' + }, + + series: [ + { + name: 'Access From', + type: 'pie', + radius: '50%', + data: [ + { value: data.age1, name: '0-7岁' }, + { value: data.age2, name: '8-10岁' }, + { value:data.age3, name: '11-12岁' }, + { value: data.age4, name: '13岁以上' }, + ], + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + } + ] + }; + myChart.setOption(option); + + + + var chartDom = document.getElementById('cookieTeachGender'); + var myChart = echarts.init(chartDom); + var option; + option = { + title: { + text: '性别分布', + subtext: '', + left: 'center' + }, + tooltip: { + trigger: 'item' + }, + + series: [ + { + name: 'Access From', + type: 'pie', + radius: '50%', + data: [ + { value: data.boy, name: '男' }, + { value: data.girl, name: '女' }, + + ], + emphasis: { + itemStyle: { + shadowBlur: 10, + shadowOffsetX: 0, + shadowColor: 'rgba(0, 0, 0, 0.5)' + } + } + } + ] + }; + myChart.setOption(option); + + + + var chartDom = document.getElementById('cookieTeachCourse'); + var myChart = echarts.init(chartDom); + var option; + + option = { + xAxis: { + type: 'category', + data: data.data1 + }, + yAxis: { + type: 'value' + }, + series: [ + { + data: data.data2, + type: 'bar' + } + ] + }; + myChart.setOption(option); + + + + + + }, function (data) { + + }); + ajax.set("id",id); + ajax.start(); + + } + function tuifei() { + var myChart1 = echarts.init(document.getElementById('refund')); + let id = $("#cCode").val() + console.log(id) + if(id==''){ + Feng.info("请先选择门店"); + return; + } + var ajax3 = new $ax(Feng.ctxPath + "/data/backStore", function(data){ + $("#back1").text(data.thisYear); + $("#back2").text(data.thisMonth); + $("#back3").text(data.thisWeek); + $("#back4").text(data.thisDay); + option1 = { + tooltip: { + trigger: 'axis' + }, + legend: { + + data: ['年度退费', '月度退费','周度退费','日度退费'], + icon: 'stack', + selectedMode: 'single', // 单选 + selected: { + 年度会员数: true, + 月度会员数: false, + 周度会员数: false, + 日度会员数: false + } + }, + grid: { + left: '3%', + right: '4%', + bottom: '3%', + containLabel: true + }, + toolbox: { + feature: { + saveAsImage: {} + } + }, + xAxis: { + type: 'category', + boundaryGap: false, + data: yearX + }, + yAxis: { + type: 'value' + }, + series: [ + { + name: '年度退费', + type: 'line', + stack: 'Total', + data: data.yearData + }, + { + name: '月度退费', + type: 'line', + stack: 'Total', + data: data.monthData + }, + { + name: '周度退费', + type: 'line', + stack: 'Total', + data: data.weekData + }, + { + name: '日度退费', + type: 'line', + stack: 'Total', + data: data.dayData + } + ] + + }; + }); + ajax3.set("id",id) + ajax3.start(); + + myChart1.on('legendselectchanged', obj => { + var options = myChart1.getOption() + //这里是选择切换什么样的x轴,那么他会进行对Y值的切换 + if (obj.name == '年度退费') { + options.xAxis[0].data = yearX + } else if (obj.name == '月度退费') { + options.xAxis[0].data = monthX + } else if (obj.name == '周度退费') { + options.xAxis[0].data = ["1周","2周","3周","4周"] + } else if (obj.name == '日度退费') { + options.xAxis[0].data = dataX + } + myChart1.setOption(options, true) + }) + myChart1.setOption(option1); + } + + laydate.render({ elem: '#beginTime' , trigger: 'click' @@ -305,13 +772,13 @@ getContent2(1); // 基于准备好的dom,初始化echarts实例 var myChart = echarts.init(document.getElementById('income')); - var myChart1 = echarts.init(document.getElementById('refund')); var myChart2 = echarts.init(document.getElementById('user')); var myChart3 = echarts.init(document.getElementById('vip')); var myChart4 = echarts.init(document.getElementById('activity')); var myChart5 = echarts.init(document.getElementById('prepare')); var myChart6 = echarts.init(document.getElementById('teach')); var myChart7 = echarts.init(document.getElementById('courseData')); + tuifei() option = { tooltip: { trigger: 'axis' @@ -359,59 +826,6 @@ }, { name: '日度营收', - type: 'line', - stack: 'Total', - data: [320, 332, 301, 334, 390, 330, 320, 10, 195, 145, 188, 160] - } - ] - }; - option1 = { - tooltip: { - trigger: 'axis' - }, - legend: { - data: ['年度退费', '月度退费', '周度退费', '日度退费'] - }, - grid: { - left: '3%', - right: '4%', - bottom: '3%', - containLabel: true - }, - toolbox: { - feature: { - saveAsImage: {} - } - }, - xAxis: { - type: 'category', - boundaryGap: false, - data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'] - }, - yAxis: { - type: 'value' - }, - series: [ - { - name: '年度退费', - type: 'line', - stack: 'Total', - data: [120, 132, 101, 134, 90, 230, 160, 190, 410, 330, 210, 330] - }, - { - name: '月度退费', - type: 'line', - stack: 'Total', - data: [220, 182, 191, 234, 290, 330, 310, 190, 210, 330, 410, 160] - }, - { - name: '周度退费', - type: 'line', - stack: 'Total', - data: [150, 232, 201, 154, 190, 330, 410, 160, 210, 195, 210, 188] - }, - { - name: '日度退费', type: 'line', stack: 'Total', data: [320, 332, 301, 334, 390, 330, 320, 10, 195, 145, 188, 160] @@ -715,7 +1129,6 @@ }; // 使用刚指定的配置项和数据显示图表。 myChart.setOption(option); - myChart1.setOption(option1); myChart2.setOption(option2); myChart3.setOption(option3); myChart4.setOption(option4); @@ -724,6 +1137,8 @@ myChart7.setOption(option7); }); function getContent(type){ + + cutType=type; //设置点击字体颜色效果 for(var i=1;i<4;i++){ document.getElementById("div"+i).style.color="#888888";// @@ -742,6 +1157,20 @@ $("#ensure").show(); $("#nextB").hide(); } + + if(type==1){ + srtj() + tuifei() + } + + if(type==2){ + yytj() + } + + if(type==3){ + jxtj() + } + } function getContent1(type){ //设置点击字体颜色效果 @@ -775,8 +1204,40 @@ $("#nextB").hide(); } } + + + </script> <script> + var ans = []; + var weekX = ["1周","2周","3周","4周"]; + var monthX = ["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"]; + var yearX = []; + var timeX = []; + var dataX = []; + // 创建一个日期对象 + var currentDate = new Date(); + // 获取当前日期的号数 + let currentDay = currentDate.getDate(); + // 循环添加号数到数组 + for (let i = 0; i < 7; i++) { + dataX.push(currentDay - 6+i); + } + // 获取当前月份 + var currentMonth = currentDate.getMonth(); + // 获取当前年份 + var currentYear = currentDate.getFullYear(); + // 计算指定年份和月份的天数 + function getDaysInMonth(year, month) { + // month 参数范围是 0-11,所以需要加 1 + return new Date(year, month + 1, 0).getDate(); + } + // 获取当前月份的天数 + var daysInMonth = getDaysInMonth(currentYear, currentMonth); + // 将天数按字符串格式添加到 timeX 数组中 + for (var i = 1; i <= daysInMonth; i++) { + timeX.push(String(i)); + } $(function(){ var chartDom = document.getElementById('cookieTicket'); var myChart = echarts.init(chartDom); @@ -797,8 +1258,10 @@ type: 'pie', radius: '50%', data: [ - { value: 1048, name: '年票' }, - { value: 735, name: '亲子票' }, + { value: 0, name: '日卡' }, + { value: 0, name: '月卡' }, + { value: 0, name: '季卡' }, + { value: 0, name: '年卡' }, ], emphasis: { @@ -833,9 +1296,9 @@ type: 'pie', radius: '50%', data: [ - { value: 1048, name: '篮球课' }, - { value: 735, name: '羽毛课' }, - { value: 735, name: '足球课' }, + { value: 0, name: '篮球课' }, + { value: 0, name: '羽毛课' }, + { value: 0, name: '足球课' }, ], emphasis: { @@ -870,9 +1333,9 @@ type: 'pie', radius: '50%', data: [ - { value: 1048, name: '激战' }, - { value: 735, name: '篮球场' }, - { value: 735, name: '足球场' }, + { value: 0, name: '激战' }, + { value: 0, name: '篮球场' }, + { value: 0, name: '足球场' }, ], emphasis: { @@ -943,8 +1406,10 @@ type: 'pie', radius: '50%', data: [ - { value: 1048, name: '30-35' }, - { value: 735, name: '12-18' }, + { value: 0, name: '0-7岁' }, + { value: 0, name: '8-10岁' }, + { value:0, name: '11-12岁' }, + { value: 0, name: '13岁以上' }, ], emphasis: { diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_add.html index b49d32e..92cd00c 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tCompetition/TCompetition_add.html +++ b/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: { diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscount/TCity_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscount/TCity_add.html new file mode 100644 index 0000000..0e0a53c --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscount/TCity_add.html @@ -0,0 +1,83 @@ +@layout("/common/_container.html"){ +<div class="ibox float-e-margins"> + <div class="ibox-content"> + + + <div class="form-horizontal" id="carInfoForm"> + <div class="form-group" id="provinceCode"> + <label class="col-sm-3 control-label">所在省:</label> + <div class="col-sm-9"> + <select class="form-control" id="pCode" name="pCode" onchange="TCarInfoDlg.oneChange(this)"> + <option value="">选择省</option> + @for(obj in list){ + <option value="${obj.code}">${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group" id="cityCode"> + <label class="col-sm-3 control-label">所在市:</label> + <div class="col-sm-9"> + <select class="form-control" id="cCode" name="cCode"> + <option value="">选择市</option> + </select> + </div> + </div> + <#input id="name" name="管理员姓名" type="text"/> + <#input id="phone" name="管理员手机号" type="text"/> + + + </div> +</div> + +<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="TCarInfoDlg.addSubmit()"/> + <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TCarInfoDlg.close()"/> + </div> +</div> + + </div> + + </div> +</div> +<script src="${ctxPath}/modular/system/tCity/tCity_info.js"></script> +<script> + laydate.render({ + elem: '#annualInspectionTime' + ,lang:"en" + }); + laydate.render({ + elem: '#commercialInsuranceTime' + ,lang:"en" + }); + laydate.render({ + elem: '#certifyDateA' + ,lang:"en" + }); + laydate.render({ + elem: '#transDateStart' + ,lang:"en" + }); + laydate.render({ + elem: '#transDateStop' + ,lang:"en" + }); + laydate.render({ + elem: '#certifyDateB' + ,lang:"en" + }); + laydate.render({ + elem: '#nextFixDate' + ,lang:"en" + }); + laydate.render({ + elem: '#GPSInstallDate' + ,lang:"en" + }); + laydate.render({ + elem: '#registerDate' + ,lang:"en" + }); +</script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscount/TCity_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscount/TCity_edit.html new file mode 100644 index 0000000..8bb70f5 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscount/TCity_edit.html @@ -0,0 +1,98 @@ +@layout("/common/_container.html"){ +<div class="ibox float-e-margins"> + <div class="ibox-content"> + + <div class="form-horizontal" id="carInfoForm"> + <input hidden id="id" value="${item.id}"> + <div class="form-group" id="provinceCode"> + <label class="col-sm-3 control-label">所在省:</label> + <div class="col-sm-9"> + <select class="form-control" id="pCode" name="pCode" onchange="TCarInfoDlg.oneChange(this)"> + <option value="">选择省</option> + @for(obj in list){ + <option value="${obj.code}" ${obj.code == item.provinceCode ? 'selected=selected' : ''}>${obj.name}</option> + <option value="${obj.code}">${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group" id="cityCode"> + <label class="col-sm-3 control-label">所在市:</label> + <div class="col-sm-9"> + <select class="form-control" id="cCode" name="cCode"> + <option value="">选择市</option> + @for(obj in list1){ + <option value="${obj.code}" ${obj.code == item.cityCode ? 'selected=selected' : ''}>${obj.name}</option> + @} + </select> + </div> + </div> + <#input id="name" name="发放数量" type="text" value="${item.name}"/> + <#input id="phone" name="管理员手机号" type="text" value="${item.phone}"/> + + + </div> + <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="TCarInfoDlg.editSubmit()"/> + <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TCarInfoDlg.close()"/> + </div> + </div> + + </div> +</div> +<script src="${ctxPath}/modular/system/tCity/tCity_info.js"></script> +<script> + laydate.render({ + elem: '#annualInspectionTime' + ,lang:"en" + }); + laydate.render({ + elem: '#commercialInsuranceTime' + ,lang:"en" + }); + laydate.render({ + elem: '#certifyDateA' + ,lang:"en" + }); + laydate.render({ + elem: '#transDateStart' + ,lang:"en" + }); + laydate.render({ + elem: '#transDateStop' + ,lang:"en" + }); + laydate.render({ + + elem: '#certifyDateB' + ,lang:"en" + }); + laydate.render({ + elem: '#nextFixDate' + ,lang:"en" + }); + laydate.render({ + elem: '#GPSInstallDate' + ,lang:"en" + }); + laydate.render({ + elem: '#registerDate' + ,lang:"en" + }); +</script> +<script type="application/javascript"> + $(function() { + var companyType = $("input[name='companyType']:checked").val(); + if (1 == companyType){ + $(".companyDiv").hide(); + } else if (2 == companyType){ + $(".companyDiv").show(); + } + + TCarInfoDlg.zcServerClick(); + TCarInfoDlg.kcServerClick(); + + }); +</script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscount/TDiscount.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscount/TDiscount.html new file mode 100644 index 0000000..009a6c1 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscount/TDiscount.html @@ -0,0 +1,80 @@ + @layout("/common/_container.html"){ +<div class="row"> + <div class="col-sm-12"> + <div class="ibox float-e-margins"> + + <div class="ibox-title"> + <h5>折扣管理</h5> + </div> + <div class="ibox-content"> + <div class="row row-lg"> + <div class="col-sm-12"> + <div class="row"> + <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="pCode" onchange="TCompetition.oneChange(this)"> + <option value="">全部</option> + @for(obj in list){ + <option value="${obj.code}">${obj.name}</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="cCode"> + </select> + </div> + </div> + <div class="col-sm-3"> + <#NameCon id="shopName" name="所属门店" /> + </div> + <div class="col-sm-3"> + <#NameCon id="name" name="课包名称" /> + </div> + <div class="col-sm-3"> + <#SelectCon id="type" name="折扣类型" > + <option value="">全部</option> + <option value="1">会员折扣</option> + <option value="3">限时折扣</option> + <option value="4">赠送课时</option> + </#SelectCon> + </div> + <div class="col-sm-3"> + <#button name="搜索" icon="fa-search" clickFun="TCompetition.search()"/> + <#button name="重置" icon="fa-trash" clickFun="TCompetition.resetSearch()" space="true"/> + </div> + </div> + <div class="hidden-xs" id="TCompetitionTableToolbar" role="group"> + <#button name="上架" icon="fa-plus" clickFun="TCompetition.updateState(1)"/> + <#button name="下架" icon="fa-edit" clickFun="TCompetition.updateState(2)" space="true"/> + <#button name="查看详情" icon="fa-remove" clickFun="TCompetition.info()" space="true"/> + + </div> + <#table id="TCompetitionTable"/> + </div> + </div> + </div> +</div> +</div> +</div> +<script src="${ctxPath}/modular/system/tDiscount/tDiscount.js"></script> +<script> + laydate.render({ + elem: '#createTime' + ,range: true + ,lang:"en" + }); +</script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscount/coursePackageDiscount.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscount/coursePackageDiscount.html new file mode 100644 index 0000000..8b7c500 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscount/coursePackageDiscount.html @@ -0,0 +1,88 @@ +@layout("/common/_container.html"){ +<div class="ibox float-e-margins"> + <div class="ibox-content"> + <div class="form-horizontal"> + <div class="row"> + <input type="hidden" id="id" value="${item.id}"> + <input type="hidden" id="coursePackagePaymentConfig" value='${coursePackagePaymentConfig}'> + <div class="form-group"> + <div class="col-sm-2"></div> + <div class="col-sm-10"> + <label class="col-sm-2 control-label">课包名称:</label> + <div class="col-sm-4" style="margin-top: 6px;"> + <span>${item.name}</span> + </div> + </div> + </div> + <div class="form-group"> + <div class="col-sm-2"></div> + <div class="col-sm-10"> + <div class="col-sm-2"> + </div> + <div class="col-sm-6" id="classHours" style="margin-top: 6px;"> + </div> + </div> + </div> + <div class="form-group"> + <div class="col-sm-2"></div> + <div class="col-sm-10"> + <label class="col-sm-2 control-label">支付方式:</label> + <div class="col-sm-4" style="margin-top: 6px;"> + <span id="payment"></span> + </div> + </div> + </div> + <div class="form-group"> + <div class="col-sm-2"></div> + <div class="col-sm-10"> + <label class="col-sm-2 control-label">现金支付:</label> + <div class="col-sm-4" style="margin-top: 6px;"> + <span id="cashPayment"></span> + </div> + </div> + </div> + <div class="form-group"> + <div class="col-sm-2"></div> + <div class="col-sm-10"> + <label class="col-sm-2 control-label">*折扣类型:</label> + <div class="col-sm-6" id="types" style="margin-top: 6px;"> + <input type="checkbox" name="type" value="1"> 会员折扣 + <input type="checkbox" name="type" value="2"> 续课优惠 + <input type="checkbox" name="type" value="3"> 限时折扣 + <input type="checkbox" name="type" value="4"> 赠送课时 + </div> + </div> + </div> + <div id="memberDiscount"> + + </div> + <div id="renewalOffer"> + + </div> + <div id="limitedTimeDiscount"> + + </div> + <div id="complimentaryClass"> + + </div> + </div> + <div class="row btn-group-m-t"> + <div class="col-sm-10"> + <#button btnCss="danger" name="关闭" id="cancel" icon="fa-eraser" clickFun="TCarInfoDlg.close()"/> + </div> + </div> + </div> + </div> +</div> +<script src="${ctxPath}/modular/system/coursePackage/coursePackageDiscount.js"></script> +<script src="${ctxPath}/modular/system/tDiscount/tDiscount_info.js"></script> + + +<script type="text/javascript"> + laydate.render({ + elem: '#classStartTime' + ,type: 'time' + ,range: true + }); +</script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscountAudit/TCity_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscountAudit/TCity_add.html new file mode 100644 index 0000000..0e0a53c --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscountAudit/TCity_add.html @@ -0,0 +1,83 @@ +@layout("/common/_container.html"){ +<div class="ibox float-e-margins"> + <div class="ibox-content"> + + + <div class="form-horizontal" id="carInfoForm"> + <div class="form-group" id="provinceCode"> + <label class="col-sm-3 control-label">所在省:</label> + <div class="col-sm-9"> + <select class="form-control" id="pCode" name="pCode" onchange="TCarInfoDlg.oneChange(this)"> + <option value="">选择省</option> + @for(obj in list){ + <option value="${obj.code}">${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group" id="cityCode"> + <label class="col-sm-3 control-label">所在市:</label> + <div class="col-sm-9"> + <select class="form-control" id="cCode" name="cCode"> + <option value="">选择市</option> + </select> + </div> + </div> + <#input id="name" name="管理员姓名" type="text"/> + <#input id="phone" name="管理员手机号" type="text"/> + + + </div> +</div> + +<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="TCarInfoDlg.addSubmit()"/> + <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TCarInfoDlg.close()"/> + </div> +</div> + + </div> + + </div> +</div> +<script src="${ctxPath}/modular/system/tCity/tCity_info.js"></script> +<script> + laydate.render({ + elem: '#annualInspectionTime' + ,lang:"en" + }); + laydate.render({ + elem: '#commercialInsuranceTime' + ,lang:"en" + }); + laydate.render({ + elem: '#certifyDateA' + ,lang:"en" + }); + laydate.render({ + elem: '#transDateStart' + ,lang:"en" + }); + laydate.render({ + elem: '#transDateStop' + ,lang:"en" + }); + laydate.render({ + elem: '#certifyDateB' + ,lang:"en" + }); + laydate.render({ + elem: '#nextFixDate' + ,lang:"en" + }); + laydate.render({ + elem: '#GPSInstallDate' + ,lang:"en" + }); + laydate.render({ + elem: '#registerDate' + ,lang:"en" + }); +</script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscountAudit/TCity_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscountAudit/TCity_edit.html new file mode 100644 index 0000000..8bb70f5 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscountAudit/TCity_edit.html @@ -0,0 +1,98 @@ +@layout("/common/_container.html"){ +<div class="ibox float-e-margins"> + <div class="ibox-content"> + + <div class="form-horizontal" id="carInfoForm"> + <input hidden id="id" value="${item.id}"> + <div class="form-group" id="provinceCode"> + <label class="col-sm-3 control-label">所在省:</label> + <div class="col-sm-9"> + <select class="form-control" id="pCode" name="pCode" onchange="TCarInfoDlg.oneChange(this)"> + <option value="">选择省</option> + @for(obj in list){ + <option value="${obj.code}" ${obj.code == item.provinceCode ? 'selected=selected' : ''}>${obj.name}</option> + <option value="${obj.code}">${obj.name}</option> + @} + </select> + </div> + </div> + <div class="form-group" id="cityCode"> + <label class="col-sm-3 control-label">所在市:</label> + <div class="col-sm-9"> + <select class="form-control" id="cCode" name="cCode"> + <option value="">选择市</option> + @for(obj in list1){ + <option value="${obj.code}" ${obj.code == item.cityCode ? 'selected=selected' : ''}>${obj.name}</option> + @} + </select> + </div> + </div> + <#input id="name" name="发放数量" type="text" value="${item.name}"/> + <#input id="phone" name="管理员手机号" type="text" value="${item.phone}"/> + + + </div> + <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="TCarInfoDlg.editSubmit()"/> + <#button btnCss="danger" name="取消" id="cancel" icon="fa-eraser" clickFun="TCarInfoDlg.close()"/> + </div> + </div> + + </div> +</div> +<script src="${ctxPath}/modular/system/tCity/tCity_info.js"></script> +<script> + laydate.render({ + elem: '#annualInspectionTime' + ,lang:"en" + }); + laydate.render({ + elem: '#commercialInsuranceTime' + ,lang:"en" + }); + laydate.render({ + elem: '#certifyDateA' + ,lang:"en" + }); + laydate.render({ + elem: '#transDateStart' + ,lang:"en" + }); + laydate.render({ + elem: '#transDateStop' + ,lang:"en" + }); + laydate.render({ + + elem: '#certifyDateB' + ,lang:"en" + }); + laydate.render({ + elem: '#nextFixDate' + ,lang:"en" + }); + laydate.render({ + elem: '#GPSInstallDate' + ,lang:"en" + }); + laydate.render({ + elem: '#registerDate' + ,lang:"en" + }); +</script> +<script type="application/javascript"> + $(function() { + var companyType = $("input[name='companyType']:checked").val(); + if (1 == companyType){ + $(".companyDiv").hide(); + } else if (2 == companyType){ + $(".companyDiv").show(); + } + + TCarInfoDlg.zcServerClick(); + TCarInfoDlg.kcServerClick(); + + }); +</script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscountAudit/TDiscount.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscountAudit/TDiscount.html new file mode 100644 index 0000000..0865808 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscountAudit/TDiscount.html @@ -0,0 +1,79 @@ + @layout("/common/_container.html"){ +<div class="row"> + <div class="col-sm-12"> + <div class="ibox float-e-margins"> + + <div class="ibox-title"> + <h5>折扣管理</h5> + </div> + <div class="ibox-content"> + <div class="row row-lg"> + <div class="col-sm-12"> + <div class="row"> + <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="pCode" onchange="TCompetition.oneChange(this)"> + <option value="">全部</option> + @for(obj in list){ + <option value="${obj.code}">${obj.name}</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="cCode"> + </select> + </div> + </div> + <div class="col-sm-3"> + <#NameCon id="shopName" name="所属门店" /> + </div> + <div class="col-sm-3"> + <#NameCon id="name" name="课包名称" /> + </div> + <div class="col-sm-3"> + <#SelectCon id="type" name="折扣类型" > + <option value="">全部</option> + <option value="1">会员折扣</option> + <option value="3">限时折扣</option> + <option value="4">赠送课时</option> + </#SelectCon> + </div> + <div class="col-sm-3"> + <#button name="搜索" icon="fa-search" clickFun="TCompetition.search()"/> + <#button name="重置" icon="fa-trash" clickFun="TCompetition.resetSearch()" space="true"/> + </div> + </div> + <div class="hidden-xs" id="TCompetitionTableToolbar" role="group"> + <#button name="审核" icon="fa-plus" clickFun="TCompetition.audit()"/> + <#button name="查看详情" icon="fa-remove" clickFun="TCompetition.info()" space="true"/> + + </div> + <#table id="TCompetitionTable"/> + </div> + </div> + </div> +</div> +</div> +</div> +<script src="${ctxPath}/modular/system/tDiscountAudit/tDiscount.js"></script> +<script> + laydate.render({ + elem: '#createTime' + ,range: true + ,lang:"en" + }); +</script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscountAudit/coursePackageDiscount.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscountAudit/coursePackageDiscount.html new file mode 100644 index 0000000..eafdd81 --- /dev/null +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tDiscountAudit/coursePackageDiscount.html @@ -0,0 +1,105 @@ +@layout("/common/_container.html"){ +<div class="ibox float-e-margins"> + <div class="ibox-content"> + <div class="form-horizontal"> + <div class="row"> + <input type="hidden" id="id" value="${item.id}"> + <input type="hidden" id="coursePackagePaymentConfig" value='${coursePackagePaymentConfig}'> + <div class="form-group"> + <div class="col-sm-2"></div> + <div class="col-sm-10"> + <label class="col-sm-2 control-label">当前状态:</label> + @if(state==1){ + <div class="col-sm-4" style="margin-top: 6px;color: goldenrod"> + <span>${stateStr}</span> + </div> + @} + @if(state==3){ + <div class="col-sm-4" style="margin-top: 6px;color: red"> + <span>${stateStr}</span> + </div> + @} + + </div> + </div> + <div class="form-group"> + <div class="col-sm-2"></div> + <div class="col-sm-10"> + <label class="col-sm-2 control-label">课包名称:</label> + <div class="col-sm-4" style="margin-top: 6px;"> + <span>${item.name}</span> + </div> + </div> + </div> + <div class="form-group"> + <div class="col-sm-2"></div> + <div class="col-sm-10"> + <div class="col-sm-2"> + </div> + <div class="col-sm-6" id="classHours" style="margin-top: 6px;"> + </div> + </div> + </div> + <div class="form-group"> + <div class="col-sm-2"></div> + <div class="col-sm-10"> + <label class="col-sm-2 control-label">支付方式:</label> + <div class="col-sm-4" style="margin-top: 6px;"> + <span id="payment"></span> + </div> + </div> + </div> + <div class="form-group"> + <div class="col-sm-2"></div> + <div class="col-sm-10"> + <label class="col-sm-2 control-label">现金支付:</label> + <div class="col-sm-4" style="margin-top: 6px;"> + <span id="cashPayment"></span> + </div> + </div> + </div> + <div class="form-group"> + <div class="col-sm-2"></div> + <div class="col-sm-10"> + <label class="col-sm-2 control-label">*折扣类型:</label> + <div class="col-sm-6" id="types" style="margin-top: 6px;"> + <input type="checkbox" name="type" value="1"> 会员折扣 + <input type="checkbox" name="type" value="2"> 续课优惠 + <input type="checkbox" name="type" value="3"> 限时折扣 + <input type="checkbox" name="type" value="4"> 赠送课时 + </div> + </div> + </div> + <div id="memberDiscount"> + + </div> + <div id="renewalOffer"> + + </div> + <div id="limitedTimeDiscount"> + + </div> + <div id="complimentaryClass"> + + </div> + </div> + <div class="row btn-group-m-t"> + <div class="col-sm-10"> + <#button btnCss="danger" name="关闭" id="cancel" icon="fa-eraser" clickFun="TCarInfoDlg.close()"/> + </div> + </div> + </div> + </div> +</div> +<script src="${ctxPath}/modular/system/tDiscountAudit/coursePackageDiscount.js"></script> +<script src="${ctxPath}/modular/system/tDiscount/tDiscount_info.js"></script> + + +<script type="text/javascript"> + laydate.render({ + elem: '#classStartTime' + ,type: 'time' + ,range: true + }); +</script> +@} diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_add.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_add.html index eecc8ce..ebd2f96 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_add.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_add.html @@ -175,10 +175,10 @@ <link rel="stylesheet" href="${ctxPath}/js/elementui/index.css"> <script> laydate.render({ - elem: '#time', - range:true + elem: '#time' + ,type: 'time',format: "HH:mm" + ,range: true }); - var vue2 = new Vue({ el: '#app1', props: { diff --git a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html index 8c459a6..431c7b5 100644 --- a/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html +++ b/cloud-server-management/src/main/webapp/WEB-INF/view/system/tShop/TShop_edit.html @@ -76,10 +76,10 @@ <div class="form-group" id="cityCode"> <label class="col-sm-3 control-label">所在市:</label> <div class="col-sm-9"> - <select class="form-control" id="cCode" name="cCode" > + <select class="form-control" id="cCode" name="cCode"> <option value="">选择市</option> @for(obj in list1){ - <option value="${obj.id}" ${obj.code == item.cityCode ? 'selected=selected' : ''}>${obj.name}</option> + <option value="${obj.id}" ${item.cityCode == obj.code ? 'selected=selected' : ''}>${obj.name}</option> @} </select> </div> @@ -100,7 +100,7 @@ <!-- 创建地图容器--> <div id="container" style="height: 500px;" ></div> </div> - <#input id="time" name="营业时间" type="text" value="${time}"/>v + <#input id="time" name="营业时间" type="text" value="${time}"/> <div class="form-group"> <label class="col-sm-3 control-label">门店介绍:</label> <div class="col-sm-9"> @@ -154,10 +154,10 @@ <link rel="stylesheet" href="${ctxPath}/js/elementui/index.css"> <script> laydate.render({ - elem: '#time', - range:true + elem: '#time' + ,type: 'time',format: "HH:mm" + ,range: true }); - let id = "${item.realPicture}" let obj = [] @@ -230,6 +230,7 @@ window.onload = function(){ + console.log("${item.operatorId}") var OBJradio=document.getElementsByName("type") if("${item.operatorId}"==0){ @@ -249,7 +250,6 @@ OBJradio[i].checked=true//修改选中状态 } } - } </script> diff --git a/cloud-server-management/src/main/webapp/static/modular/system/ball/yuyue.js b/cloud-server-management/src/main/webapp/static/modular/system/ball/yuyue.js index 9403aa8..cf527c3 100644 --- a/cloud-server-management/src/main/webapp/static/modular/system/ball/yuyue.js +++ b/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(); diff --git a/cloud-server-management/src/main/webapp/static/modular/system/ball/yuyue_info.js b/cloud-server-management/src/main/webapp/static/modular/system/ball/yuyue_info.js index 9dc4393..4456b15 100644 --- a/cloud-server-management/src/main/webapp/static/modular/system/ball/yuyue_info.js +++ b/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(); +}; /** * 提交修改 */ diff --git a/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage.js b/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage.js index 413b667..e951696 100644 --- a/cloud-server-management/src/main/webapp/static/modular/system/coursePackage/coursePackage.js +++ b/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); + } + + + ) + } }; diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tDiscount/tDiscount.js b/cloud-server-management/src/main/webapp/static/modular/system/tDiscount/tDiscount.js new file mode 100644 index 0000000..95da68a --- /dev/null +++ b/cloud-server-management/src/main/webapp/static/modular/system/tDiscount/tDiscount.js @@ -0,0 +1,358 @@ +/** + * 车辆管理管理初始化 + */ +var TCompetition = { + id: "TCompetitionTable", //表格id + seItem: null, //选中的条目 + table: null, + layerIndex: -1 +}; +var language =1 +/** + * 初始化表格的列 + */ +TCompetition.initColumn = function () { + return [ + {field: 'selectItem', radio: true}, + {title: '所在省', field: 'pname', visible: true, align: 'center', valign: 'middle' + }, + {title: '所在市', field: 'cname', visible: true, align: 'center', valign: 'middle'}, + {title: '所属门店', field: 'shopName', visible: true, align: 'center', valign: 'middle' + }, + {title: '课包名称', field: 'name', visible: true, align: 'center', valign: 'middle' + }, + {title: '折扣类型', field: 'type', visible: true, align: 'center', valign: 'middle' + }, + {title: '状态', field: 'status', visible: true, align: 'center', valign: 'middle' + ,formatter:function (data) { + return{1:"上架中",2:"下架中"}[data] + } + }, + ]; +}; +function currentTime(timestamp){ + var time = timestamp + ''; + if(time.length != 13){ + timestamp = timestamp * 1000; + } + var date = new Date(timestamp);; + var Y = date.getFullYear() + '-'; + var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; + var D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + ' '; + + var h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()) + ':'; + var m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()) + ':'; + var s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds()); + var strDate = Y + M + D + h + m + s; + return strDate +} + +function currentTime1(timestamp){ + var time = timestamp + ''; + if(time.length != 13){ + timestamp = timestamp * 1000; + } + var date = new Date(timestamp);; + var Y = date.getFullYear() + '-'; + var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; + var D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + ' '; + + var h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()) + ':'; + var m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()) + ':'; + var s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds()); + var strDate = Y + M + D ; + return strDate +} +/** + * 检查是否选中 + */ +TCompetition.check = function () { + var selected = $('#' + this.id).bootstrapTable('getSelections'); + if(selected.length == 0){ + Feng.info("请先选中表格中的某一记录!"); + return false; + }else{ + TCompetition.seItem = selected[0]; + return true; + } +}; + +/** + * 点击添加车辆管理 + */ +TCompetition.openAddTCompetition = function () { + var index = layer.open({ + type: 2, + title: '添加', + area: ['100%', '100%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tCity/tCity_add' + }); + this.layerIndex = index; +}; + +/** + * 打开查看车辆管理详情 + */ +TCompetition.openTCompetitionDetail = function () { + if (this.check()) { + var index = layer.open({ + type: 2, + title:'编辑', + area: ['100%', '100%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tCity/tCity_update/' + TCompetition.seItem.id + }); + this.layerIndex = index; + } +}; + +/** + * 删除车辆管理 + */ +TCompetition.updateState = function (e) { + if (this.check()) { + var id = TCompetition.seItem.id; + var ajax = new $ax(Feng.ctxPath + "/tDiscount/updateState", function (data) { + if(data.code==200){ + Feng.success("操作成功") + }else { + Feng.error("操作失败") + } + TCompetition.table.refresh(); + }, function (data) { + Feng.error("操作失败") + TCompetition.table.refresh(); + }); + ajax.set("id",id); + ajax.set("status",e); + ajax.start(); + ; + } +}; +TCompetition.oneChange = function (e) { + console.log(111) + var oneId=$(e).val(); + var ajax = new $ax(Feng.ctxPath + "/tCompetition/onChange", function(data){ + if(data!=null){ + if(language==1){ + var content='<option value="">选择市</option>'; + }else if(language==2){ + var content='<option value="">Choose your franchisee</option>'; + }else { + var content='<option value="">Pilih franchisee Anda</option>'; + } + $.each(data, function(k,v) { + content += "<option value='"+v.code+"'>"+v.name+"</option>"; + }); + $("#cCode").empty().append(content); + } + }); + ajax.set("oneId",oneId); + ajax.start(); +} + +TCompetition.freeze = function () { + if (this.check()) { + var ajax = new $ax(Feng.ctxPath + "/tCity/freeze", function (data) { + Feng.success("冻结成功!"); + TCompetition.table.refresh(); + }, function (data) { + Feng.error("冻结失败!" + data.responseJSON.message + "!"); + }); + ajax.set("id",this.seItem.id); + ajax.start(); + } +}; +TCompetition.unfreeze = function () { + if (this.check()) { + var ajax = new $ax(Feng.ctxPath + "/tCity/unfreeze", function (data) { + Feng.success("解冻成功!"); + TCompetition.table.refresh(); + }, function (data) { + Feng.error("解冻失败!" + data.responseJSON.message + "!"); + }); + ajax.set("id",this.seItem.id); + ajax.start(); + } +}; +TCompetition.reload = function () { + if (this.check()) { + let id = this.seItem.id + var operation = function(){ + var ajax = new $ax(Feng.ctxPath + "/tCity/pwd", function (data) { + Feng.success("重置成功!"); + TCompetition.table.refresh(); + }, function (data) { + Feng.error("重置失败!" + data.responseJSON.message + "!"); + }); + ajax.set("id",id); + ajax.start(); + } + Feng.confirm("确认重置密码?重置后密码为:a123456", operation); + } + +}; + +TCompetition.carInsurance = function () { + if (this.check()) { + var index = layer.open({ + type: 2, + title: language==1?'车辆保险':(language==2?'Vehicle insurance':'Asuransi kendaraan'), + area: ['100%', '100%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/TCompetition/carInsurance?carId=' + TCompetition.seItem.id + }); + this.layerIndex = index; + } +}; +TCompetition.info = function () { + if (this.check()) { + let index = layer.open({ + type: 2, + title: '折扣详情', + area: ['100%', '100%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tDiscount/info?id=' + this.seItem.id + }); + this.layerIndex = index; + } +}; + + + +/** + * 查询车辆管理列表 + */ +TCompetition.search = function () { + var queryData = {}; + queryData['provinceCode'] = $("#pCode").val(); + queryData['cityCode'] = $("#cCode").val(); + queryData['name'] = $("#name").val(); + queryData['shopName'] = $("#shopName").val(); + queryData['type'] = $("type").val(); + TCompetition.table.refresh({query: queryData}); +}; + +TCompetition.resetSearch = function () { + $("#pCode").val(""); + $("#cCode").val(""); + $("#name").val(""); + $("#type").val(""); + $("#shopName").val(""); + TCompetition.search(); +}; + +$(function () { + var defaultColunms = TCompetition.initColumn(); + var table = new BSTable(TCompetition.id, "/tDiscount/list", defaultColunms); + table.setPaginationType("server"); + TCompetition.table = table.init(); +}); + +/** + * 下载模板 + */ +TCompetition.uploadCarModel = function () { + window.location.href = Feng.ctxPath + "/TCompetition/uploadCarModel"; +} + +var agreement = function(){ + this.init = function(){ + //模拟上传excel + $("#uploadEventBtn").unbind("click").bind("click",function(){ + $("#uploadEventFile").click(); + }); + }; +} +/** + * 导入合同 + */ +TCompetition.exporTCompetition = function () { + var uploadEventFile = $("#uploadEventFile").val(); + if(uploadEventFile == ''){ + if(language==1){ + Feng.info("请选择Excel,再上传"); + }else if(language==2){ + Feng.info("Please select Excel and upload"); + }else { + Feng.info("Silakan pilih Excel dan upload"); + } + }else if(uploadEventFile.lastIndexOf(".xls")<0){//可判断以.xls和.xlsx结尾的excel + if(language==1){ + Feng.info("只能上传Excel文件"); + }else if(language==2){ + Feng.info("Only Excel files can be uploaded"); + }else { + Feng.info("Hanya berkas Excel yang dapat diunggah"); + } + }else{ + var url = Feng.ctxPath + '/TCompetition/exporTCompetition'; + var file = document.querySelector('input[name=file]').files[0]; + var reader = new FileReader(); + if (file) { + var formData = new FormData(); + formData.append("myfile", file); + this.sendAjaxRequest(url, 'POST', formData); + } + } +} +TCompetition.sendAjaxRequest = function(url,type,data){ + $.ajax({ + url : url, + type : type, + data : data, + success : function(result) { + if(result.code==500) { + Feng.info(result.message); + }else { + if(language==1){ + Feng.success("导入成功!"); + }else if(language==2){ + Feng.success("SUCCESSFUL IMPORT!"); + }else { + Feng.success("Import berhasil!"); + } + } + TCompetition.table.refresh(); + }, + error : function() { + if(language==1){ + Feng.error("excel上传失败!"); + }else if(language==2){ + Feng.error("Uploading excel Fails. Procedure!"); + }else { + Feng.error("Gagal mengunggah excel!"); + } + }, + cache : false, + contentType : false, + processData : false + }); +}; + +var agreement; +$(function(){ + agreement = new agreement(); + agreement.init(); +}); + +/** + * 导出车辆操作 + */ +TCompetition.ouTCompetition = function () { + var operation = function() { + window.location.href = Feng.ctxPath + "/TCompetition/ouTCompetition"; + }; + if(language==1){ + Feng.confirm("是否确认导出车辆信息?", operation); + }else if(language==2){ + Feng.confirm("Are you sure to export vehicle information?", operation); + }else { + Feng.confirm("Apakah Anda pasti akan mengekspor informasi kendaraan?", operation); + } +} \ No newline at end of file diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tDiscount/tDiscount_info.js b/cloud-server-management/src/main/webapp/static/modular/system/tDiscount/tDiscount_info.js new file mode 100644 index 0000000..8360403 --- /dev/null +++ b/cloud-server-management/src/main/webapp/static/modular/system/tDiscount/tDiscount_info.js @@ -0,0 +1,320 @@ +/** + * 初始化车辆管理详情对话框 + */ +var language=1; +var TCarInfoDlg = { + tCarInfoData : {}, + validateFields: { + } +}; + +/** + * 验证数据是否为空 + */ +TCarInfoDlg.validate = function () { + $('#carInfoForm').data("bootstrapValidator").resetForm(); + $('#carInfoForm').bootstrapValidator('validate'); + return $("#carInfoForm").data('bootstrapValidator').isValid(); +}; + +/** + * 清除数据 + */ +TCarInfoDlg.clearData = function() { + this.tCarInfoData = {}; +} + +/** + * 设置对话框中的数据 + * + * @param key 数据的名称 + * @param val 数据的具体值 + */ +TCarInfoDlg.set = function(key, val) { + this.tCarInfoData[key] = (typeof val == "undefined") ? $("#" + key).val() : val; + return this; +} + +/** + * 设置对话框中的数据 + * + * @param key 数据的名称 + * @param val 数据的具体值 + */ +TCarInfoDlg.get = function(key) { + return $("#" + key).val(); +} + +/** + * 关闭此对话框 + */ +TCarInfoDlg.close = function() { + parent.layer.close(window.parent.TCompetition.layerIndex); +} + +/** + * 收集数据 + */ +TCarInfoDlg.collectData = function() { + this + .set('id') + .set('isPlatCar') + .set('companyId') + .set('franchiseeId') + .set('carColor') + .set('carModelId') + .set('carBrandId') + .set('carLicensePlate') + .set('carPhoto') + .set('drivingLicenseNumber') + .set('drivingLicensePhoto') + .set('annualInspectionTime') + .set('commercialInsuranceTime') + .set('createTime') + .set('state') + .set('addType') + .set('addObjectId') + .set('plateColor') + .set('vehicleType') + .set('ownerName') + .set('engineId') + .set('VIN') + .set('certifyDateA') + .set('fuelType') + .set('engineDisplace') + .set('certificate') + .set('transAgency') + .set('transArea') + .set('transDateStart') + .set('transDateStop') + .set('certifyDateB') + .set('fixState') + .set('nextFixDate') + .set('checkState') + .set('feePrintId') + .set('GPSBrand') + .set('GPSModel') + .set('GPSIMEI') + .set('GPSInstallDate') + .set('registerDate') + .set('commercialType'); +} + +/** + * 提交添加 + */ +TCarInfoDlg.addSubmit = function() { + + this.clearData(); + this.collectData(); + if(!this.validate()){ + return ; + } + + let pCode = $("#pCode").val() + let cCode = $("#cCode").val() + let name = $("#name").val() + let phone = $("#phone").val() + + if(pCode==''){ + Feng.info("请选择省") + return; + } + if(cCode==''){ + Feng.info("请选择市") + return; + } + if(name==''){ + Feng.info("管理员姓名不能为空") + return; + } + if(phone==''){ + Feng.info("管理员手机号不能为空") + return; + } + + //提交信息 + var ajax = new $ax(Feng.ctxPath + "/tCity/add", function(data){ + if(data=="5001"){ + Feng.error("改账号已经存在"); + }else + if(data.code == 200){ + if(language==1){ + Feng.success("添加成功!"); + }else if(language==2){ + Feng.success("Successfully added!"); + }else { + Feng.success("Sangat berhasil ditambah!"); + } + window.parent.TCompetition.table.refresh(); + TCarInfoDlg.close(); + }else{ + Feng.error(data.msg); + } + + },function(data){ + Feng.error("添加失败!" + data.responseJSON.message + "!"); + }); + ajax.set(this.tCarInfoData); + ajax.set("provinceCode",pCode); + ajax.set("cityCode",cCode); + ajax.set("name",name); + ajax.set("phone",phone); + ajax.start(); +} + +/** + * 提交修改 + */ +TCarInfoDlg.editSubmit = function() { + + this.clearData(); + this.collectData(); + if(!this.validate()){ + return ; + } + let pCode = $("#pCode").val() + let cCode = $("#cCode").val() + let name = $("#name").val() + let phone = $("#phone").val() + + if(pCode==''){ + Feng.info("请选择省") + return; + } + if(cCode==''){ + Feng.info("请选择市") + return; + } + if(name==''){ + Feng.info("管理员姓名不能为空") + return; + } + if(phone==''){ + Feng.info("管理员手机号不能为空") + return; + } + //提交信息 + var ajax = new $ax(Feng.ctxPath + "/tCity/update", function(data){ + if(data=="5001"){ + Feng.error("改账号已经存在"); + }else + if(data.code == 200){ + if(language==1){ + Feng.success("修改成功!"); + }else if(language==2){ + Feng.success("Modify successfully!"); + }else { + Feng.success("Mengubah dengan sukses!"); + } + window.parent.TCompetition.table.refresh(); + TCarInfoDlg.close(); + }else{ + Feng.error(data.msg); + } + },function(data){ + Feng.error("修改失败!" + data.responseJSON.message + "!"); + }); + ajax.set("provinceCode",pCode); + ajax.set("cityCode",cCode); + ajax.set("name",name); + ajax.set("phone",phone); + ajax.set("id",$("#id").val()); + ajax.start(); +} + +$(function() { + Feng.initValidator("carInfoForm", TCarInfoDlg.validateFields); + // 初始化图片上传 + var carPhoto = new $WebUpload("carPhoto"); + carPhoto.setUploadBarId("progressBar"); + carPhoto.init(); + var drivingLicensePhoto = new $WebUpload("drivingLicensePhoto"); + drivingLicensePhoto.setUploadBarId("progressBar"); + drivingLicensePhoto.init(); +}); + +/** + * 选择分公司后执行 + */ +TCarInfoDlg.oneChange = function (e) { + var oneId=$(e).val(); + var ajax = new $ax(Feng.ctxPath + "/tCity/onChange", function(data){ + if(data!=null){ + if(language==1){ + var content='<option value="">选择市</option>'; + }else if(language==2){ + var content='<option value="">Choose your franchisee</option>'; + }else { + var content='<option value="">Pilih franchisee Anda</option>'; + } + $.each(data, function(k,v) { + content += "<option value='"+v.code+"'>"+v.name+"</option>"; + }); + $("#cCode").empty().append(content); + } + }); + ajax.set("oneId",oneId); + ajax.start(); +} + +/** + * 类型改变执行 + * @param e + */ +TCarInfoDlg.companyTypeClick = function (e) { + if (1 == e){ + $(".companyDiv").hide(); + } else if (2 == e){ + $(".companyDiv").show(); + } +} + +/** + * 车辆品牌改变时执行 + */ +TCarInfoDlg.brandChange = function (e) { + var carBrandId=$(e).val(); + var ajax = new $ax(Feng.ctxPath + "/tCar/brandChange", function(data){ + if(data!=null){ + if(language==1){ + var content='<option value="">选择车辆类型</option>'; + }else if(language==2){ + var content='<option value="">Please select the vehicle type</option>'; + }else { + var content='<option value="">Pilih Jenis Kendaraan</option>'; + } + + $.each(data, function(k,v) { + content += "<option value='"+v.id+"'>"+v.name+"</option>"; + }); + $("#carModelId").empty().append(content); + } + }); + ajax.set("carBrandId",carBrandId); + ajax.start(); +} + +/** + * 专车服务被点击 + */ +TCarInfoDlg.zcServerClick = function () { + var serverBox1 = $('#serverBox1').prop('checked'); + if (serverBox1){ + $("#zcModelDiv").show(); + } else { + $("#zcModelDiv").hide(); + } +} + +/** + * 跨城服务被点击 + */ +TCarInfoDlg.kcServerClick = function () { + var serverBox3 = $('#serverBox3').prop('checked'); + if (serverBox3){ + $("#kcModelDiv").show(); + } else { + $("#kcModelDiv").hide(); + } +} diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tDiscountAudit/coursePackageDiscount.js b/cloud-server-management/src/main/webapp/static/modular/system/tDiscountAudit/coursePackageDiscount.js new file mode 100644 index 0000000..9b77955 --- /dev/null +++ b/cloud-server-management/src/main/webapp/static/modular/system/tDiscountAudit/coursePackageDiscount.js @@ -0,0 +1,819 @@ +/** + * 用户详情对话框(可用于添加和修改对话框) + */ +var CoursePackageDiscount = { + userInfoData: {}, + coursePackagePaymentConfig: {} +}; + + + +/** + * 关闭此对话框 + */ +CoursePackageDiscount.close = function () { + parent.layer.close(window.parent.CoursePackage.layerIndex); +}; + + +/** + * 提交修改 + */ +CoursePackageDiscount.editSubmit = function () { + //提交信息 + var ajax = new $ax(Feng.ctxPath + "/coursePackage/setCoursePackageDiscount", function (data) { + if(data.code == 200){ + Feng.success("编辑成功!"); + CoursePackageDiscount.close(); + window.parent.CoursePackage.table.refresh(); + }else{ + Feng.error(data.msg); + } + }, function (data) { + Feng.error("编辑失败!" + data.responseJSON.message + "!"); + }); + ajax.set('json', JSON.stringify(CoursePackageDiscount.coursePackagePaymentConfig)); + ajax.set('id', $('#id').val()); + ajax.start(); +}; + + + + + + +function addPrice(type){ + let index = $('#classHours').find('button[checked]').attr('index'); + if(type == 3){ + let ll = $('#limitedTimeDiscount .limitedTimeDiscount').length; + let htmlStr = + ' <div class="form-group limitedTimeDiscount" index="' + ll + '">' + + ' <div class="col-sm-2"></div>\n' + + ' <div class="col-sm-8" style="border: 1px solid; padding: 20px;">\n' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label">折扣有效期:</label>\n' + + ' <div class="col-sm-9">\n' + + ' <input class="startAndEndDay" style="width: 300px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/>' + + ' </div>\n' + + ' <div class="col-sm-1"><i class="fa fa-trash-o" style="font-size:24px;color: red;" onclick="removePrice(3, this)"></i></div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label">*折扣时间:</label>\n' + + ' <div class="col-sm-5">\n' + + ' <input class="time" style="width: 200px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/>\n' + + ' </div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label"></label>\n' + + ' <div class="col-sm-8" style="margin-top: 6px;">\n' + + ' <input type="checkbox" name="week" value="1" onclick="addPriceValue(3, this, \'weeks\')"/> 周一 ' + + ' <input type="checkbox" name="week" value="2" onclick="addPriceValue(3, this, \'weeks\')"/> 周二 ' + + ' <input type="checkbox" name="week" value="3" onclick="addPriceValue(3, this, \'weeks\')"/> 周三 ' + + ' <input type="checkbox" name="week" value="4" onclick="addPriceValue(3, this, \'weeks\')"/> 周四 ' + + ' <input type="checkbox" name="week" value="5" onclick="addPriceValue(3, this, \'weeks\')"/> 周五 ' + + ' <input type="checkbox" name="week" value="6" onclick="addPriceValue(3, this, \'weeks\')"/> 周六 ' + + ' <input type="checkbox" name="week" value="7" onclick="addPriceValue(3, this, \'weeks\')"/> 周日 ' + + ' </div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label">*现金支付:</label>\n' + + ' <div class="col-sm-4">\n' + + ' <input type="number" class="price" onblur="addPriceValue(3, this, \'cashPayment\')" min="0" placeholder="请输入折扣后支付价格" style="width: 180px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/> ¥\n' + + ' </div>\n' + + ' </div>' + + ' </div>' + + ' </div>'; + + $('#limitedTimeDiscount').append(htmlStr); + let arr = CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount; + for(let k in arr){ + if(arr[k].type == 3){ + arr[k].content.push({}) + } + } + lay('.startAndEndDay').each(function(i, e){ + laydate.render({ + elem: this + ,type: 'datetime' + ,range: true + ,done: function(value, date, endDate){ + let index = $('#classHours').find('button[checked]').attr('index'); + let obj = CoursePackageDiscount.coursePackagePaymentConfig[index]; + let ii = $(e).parent('div').parent('div').parent('div').parent('div').attr('index'); + for (let i = 0; i < obj.coursePackageDiscount.length; i++) { + if(type == obj.coursePackageDiscount[i].type){ + let jsonArray = obj.coursePackageDiscount[i].content; + for (let j = 0; j < jsonArray.length; j++) { + if(j == ii){ + let arr = value.split(" - "); + obj.coursePackageDiscount[i].content[j]['startDate'] = arr[0]; + obj.coursePackageDiscount[i].content[j]['endDate'] = arr[1]; + } + } + } + } + } + }); + }); + lay('.time').each(function(i, e){ + laydate.render({ + elem: this + ,type: 'time' + ,range: true + ,done: function(value, date, endDate){ + let index = $('#classHours').find('button[checked]').attr('index'); + let obj = CoursePackageDiscount.coursePackagePaymentConfig[index]; + let ii = $(e).parent('div').parent('div').parent('div').parent('div').attr('index'); + for (let i = 0; i < obj.coursePackageDiscount.length; i++) { + if(type == obj.coursePackageDiscount[i].type){ + let jsonArray = obj.coursePackageDiscount[i].content; + for (let j = 0; j < jsonArray.length; j++) { + if(j == ii){ + let arr = value.split(" - "); + obj.coursePackageDiscount[i].content[j]['startTime'] = arr[0]; + obj.coursePackageDiscount[i].content[j]['endTime'] = arr[1]; + } + } + } + } + } + }); + }); + } + if(type == 4){ + let ll = $('#complimentaryClass .complimentaryClass').length; + let htmlStr = + ' <div class="form-group complimentaryClass" index="' + ll + '">' + + ' <div class="col-sm-2"></div>\n' + + ' <div class="col-sm-8" style="border: 1px solid; padding: 20px;">\n' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label">*赠送有效期:</label>\n' + + ' <div class="col-sm-9">\n' + + ' <input class="startAndEndDay" style="width: 300px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/>' + + ' </div>\n' + + ' <div class="col-sm-1"><i class="fa fa-trash-o" style="font-size:24px;color: red;" onclick="removePrice(4, this)"></i></div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label">*赠送时间:</label>\n' + + ' <div class="col-sm-5">\n' + + ' <input class="time" style="width: 200px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/>\n' + + ' </div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label"></label>\n' + + ' <div class="col-sm-8" style="margin-top: 6px;">\n' + + ' <input type="checkbox" name="week" value="1" onclick="addPriceValue(4, this, \'weeks\')"/> 周一 ' + + ' <input type="checkbox" name="week" value="2" onclick="addPriceValue(4, this, \'weeks\')"/> 周二 ' + + ' <input type="checkbox" name="week" value="3" onclick="addPriceValue(4, this, \'weeks\')"/> 周三 ' + + ' <input type="checkbox" name="week" value="4" onclick="addPriceValue(4, this, \'weeks\')"/> 周四 ' + + ' <input type="checkbox" name="week" value="5" onclick="addPriceValue(4, this, \'weeks\')"/> 周五 ' + + ' <input type="checkbox" name="week" value="6" onclick="addPriceValue(4, this, \'weeks\')"/> 周六 ' + + ' <input type="checkbox" name="week" value="7" onclick="addPriceValue(4, this, \'weeks\')"/> 周日 ' + + ' </div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label">*赠送课时数:</label>\n' + + ' <div class="col-sm-4">\n' + + ' <input type="number" class="price" onblur="addPriceValue(4, this, \'hour\')" min="0" placeholder="请输入赠送课时数" style="width: 180px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/> ¥\n' + + ' </div>\n' + + ' </div>' + + ' </div>' + + ' </div>'; + $('#complimentaryClass').append(htmlStr); + let arr = CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount; + for(let k in arr){ + if(arr[k].type == 4){ + arr[k].content.push({}) + } + } + lay('.startAndEndDay').each(function(i, e){ + laydate.render({ + elem: this + ,type: 'datetime' + ,range: true + ,done: function(value, date, endDate){ + let index = $('#classHours').find('button[checked]').attr('index'); + let obj = CoursePackageDiscount.coursePackagePaymentConfig[index]; + let ii = $(e).parent('div').parent('div').parent('div').parent('div').attr('index'); + for (let i = 0; i < obj.coursePackageDiscount.length; i++) { + if(type == obj.coursePackageDiscount[i].type){ + let jsonArray = obj.coursePackageDiscount[i].content; + for (let j = 0; j < jsonArray.length; j++) { + if(j == ii){ + let arr = value.split(" - "); + obj.coursePackageDiscount[i].content[j]['startDate'] = arr[0]; + obj.coursePackageDiscount[i].content[j]['endDate'] = arr[1]; + } + } + } + } + } + }); + }); + lay('.time').each(function(i, e){ + laydate.render({ + elem: this + ,type: 'time' + ,range: true + ,done: function(value, date, endDate){ + let index = $('#classHours').find('button[checked]').attr('index'); + let obj = CoursePackageDiscount.coursePackagePaymentConfig[index]; + let ii = $(e).parent('div').parent('div').parent('div').parent('div').attr('index'); + for (let i = 0; i < obj.coursePackageDiscount.length; i++) { + if(type == obj.coursePackageDiscount[i].type){ + let jsonArray = obj.coursePackageDiscount[i].content; + for (let j = 0; j < jsonArray.length; j++) { + if(j == ii){ + let arr = value.split(" - "); + obj.coursePackageDiscount[i].content[j]['startTime'] = arr[0]; + obj.coursePackageDiscount[i].content[j]['endTime'] = arr[1]; + } + } + } + } + } + }); + }); + } +} + + +function removePrice(type, e){ + let index = $('#classHours').find('button[checked]').attr('index'); + let object = $(e).parent('div').parent('div').parent('div').parent('div'); + let ii = object.attr('index'); + let obj = CoursePackageDiscount.coursePackagePaymentConfig[index]; + for (let i = 0; i < obj.coursePackageDiscount.length; i++) { + if(type == obj.coursePackageDiscount[i].type){ + let jsonArray = null; + if(typeof obj.coursePackageDiscount[i].content == "string"){ + jsonArray = JSON.parse(obj.coursePackageDiscount[i].content); + }else{ + jsonArray = obj.coursePackageDiscount[i].content; + } + + let arr = []; + for (let j = 0; j < jsonArray.length; j++) { + if(j == ii){ + continue + } + arr.push(jsonArray[j]); + } + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount[i].content = arr; + } + } + object.remove(); +} + + +function addPriceValue(type, e, name){ + let index = $('#classHours').find('button[checked]').attr('index'); + if(type == 1){ + let obj = CoursePackageDiscount.coursePackagePaymentConfig[index]; + for (let i = 0; i < obj.coursePackageDiscount.length; i++) { + if(type == obj.coursePackageDiscount[i].type){ + let content = null; + if(typeof obj.coursePackageDiscount[i].content == "string"){ + content = JSON.parse(obj.coursePackageDiscount[i].content); + }else{ + content = obj.coursePackageDiscount[i].content; + } + content[name] = parseFloat($(e).val()); + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount[i].content = content; + } + } + } + if(type == 2){ + let obj = CoursePackageDiscount.coursePackagePaymentConfig[index]; + for (let i = 0; i < obj.coursePackageDiscount.length; i++) { + if(type == obj.coursePackageDiscount[i].type){ + let content = null; + if(typeof obj.coursePackageDiscount[i].content == "string"){ + content = JSON.parse(obj.coursePackageDiscount[i].content); + }else{ + content = obj.coursePackageDiscount[i].content; + } + content[name] = parseFloat($(e).val()); + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount[i].content = content; + } + } + } + if(type == 3){ + let obj = CoursePackageDiscount.coursePackagePaymentConfig[index]; + let ii = $(e).parent('div').parent('div').parent('div').parent('div').attr('index'); + for (let i = 0; i < obj.coursePackageDiscount.length; i++) { + if(type == obj.coursePackageDiscount[i].type){ + let jsonArray = null; + if(typeof obj.coursePackageDiscount[i].content == "string"){ + jsonArray = JSON.parse(obj.coursePackageDiscount[i].content); + }else{ + jsonArray = obj.coursePackageDiscount[i].content; + } + + for (let j = 0; j < jsonArray.length; j++) { + if(j == ii){ + if('weeks' == name){ + let weeks = jsonArray[j].weeks; + let v = parseInt($(e).val()); + if(null != weeks && typeof weeks != "undefined"){ + if(e.checked){ + weeks.push(v); + }else{ + let arr = []; + for (let k = 0; k < weeks.length; k++) { + if(weeks[k] == v){ + continue + } + arr.push(weeks[k]); + } + weeks = arr; + } + }else{ + weeks = [v]; + } + jsonArray[j].weeks = weeks; + }else{ + jsonArray[j][name] = parseFloat($(e).val()); + } + } + } + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount[i].content = jsonArray; + } + } + } + if(type == 4){ + let obj = CoursePackageDiscount.coursePackagePaymentConfig[index]; + let ii = $(e).parent('div').parent('div').parent('div').parent('div').attr('index'); + for (let i = 0; i < obj.coursePackageDiscount.length; i++) { + if(type == obj.coursePackageDiscount[i].type){ + let jsonArray = null; + if(typeof obj.coursePackageDiscount[i].content == "string"){ + jsonArray = JSON.parse(obj.coursePackageDiscount[i].content); + }else{ + jsonArray = obj.coursePackageDiscount[i].content; + } + for (let j = 0; j < jsonArray.length; j++) { + if(j == ii){ + if('weeks' == name){ + let weeks = jsonArray[j].weeks; + let v = parseInt($(e).val()); + if(null != weeks && typeof weeks != "undefined"){ + if(e.checked){ + weeks.push(v); + }else{ + let arr = []; + for (let k = 0; k < weeks.length; k++) { + if(weeks[k] == v){ + continue + } + arr.push(weeks[k]); + } + weeks = arr; + } + }else{ + weeks = [v]; + } + jsonArray[j].weeks = weeks; + }else{ + jsonArray[j][name] = parseFloat($(e).val()); + } + } + } + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount[i].content = jsonArray; + } + } + } +} + + +function selectedPperiod(e){ + $('#classHours').find('button[checked]').attr('style', 'width: 60px;height: 30px;border: none;border-radius: 5px;'); + $('#classHours').find('button[checked]').removeAttr('checked'); + if(typeof e != "undefined"){ + $(e).attr('style', 'width: 60px;height: 30px;background-color: #0086F6;border: none;border-radius: 5px;color: white;'); + $(e).attr('checked', true); + }else{ + $($('#classHours').find('button')[0]).attr('style', 'width: 60px;height: 30px;background-color: #0086F6;border: none;border-radius: 5px;color: white;'); + $($('#classHours').find('button')[0]).attr('checked', true); + } + + let index = $('#classHours').find('button[checked]').attr('index'); + let obj = CoursePackageDiscount.coursePackagePaymentConfig[index]; + $('#payment').text(obj.payment); + $('#cashPayment').text(obj.cashPayment); + + $('#memberDiscount').html(''); + $('#renewalOffer').html(''); + $('#limitedTimeDiscount').html(''); + $('#complimentaryClass').html(''); + let objv = CoursePackageDiscount.coursePackagePaymentConfig[index]; + $('input[name="type"]').each(function (i, e) { + e.checked = false; + let v = $(e).val(); + for (let i = 0; i < objv.coursePackageDiscount.length; i++) { + if(v == objv.coursePackageDiscount[i].type){ + $(e).click(); + } + } + }) +} + + + + +$(function () { + CoursePackageDiscount.coursePackagePaymentConfig = JSON.parse($('#coursePackagePaymentConfig').val()); + let htmlStr = ''; + for (let i = 0; i < CoursePackageDiscount.coursePackagePaymentConfig.length; i++) { + let obj = CoursePackageDiscount.coursePackagePaymentConfig[i]; + if(i == 0){ + htmlStr += '<button checked onclick="selectedPperiod(this)" index="' + i + '" style="width: 60px;height: 30px;background-color: #0086F6;border: none;border-radius: 5px;color: white;">' + obj.classHours + '课时</button> '; + }else{ + htmlStr += '<button onclick="selectedPperiod(this)" index="' + i + '" style="width: 60px;height: 30px;border: none;border-radius: 5px;">' + obj.classHours + '课时</button> '; + } + } + $('#classHours').html(htmlStr); + + $('input[name="type"]').click(function () { + let v = $(this).val(); + let index = $('#classHours').find('button[checked]').attr('index'); + if(this.checked && v == '1'){ + let discountMember = true; + let hh = '<div class="hr-line-dashed"></div>' + + '<h3>会员折扣</h3>\n' + + ' <div class="form-group">\n' + + ' <div class="col-sm-2"></div>'+ + ' <div class="col-sm-10">' + + ' <label class="col-sm-2 control-label">*现金支付:</label>\n' + + ' <div class="col-sm-3">\n' + + ' <input type="number" min="0" value="'; + let obj = CoursePackageDiscount.coursePackagePaymentConfig[index]; + for (let i = 0; i < obj.coursePackageDiscount.length; i++) { + if(v == obj.coursePackageDiscount[i].type){ + let jsonObject = null; + if(typeof obj.coursePackageDiscount[i].content == "string"){ + jsonObject = JSON.parse(obj.coursePackageDiscount[i].content); + }else{ + jsonObject = obj.coursePackageDiscount[i].content; + } + hh += (null == jsonObject.discountMember ? '' : jsonObject.discountMember); + discountMember = false; + } + } + hh += '" placeholder="请输入会员支付价格" onblur="addPriceValue(1, this, \'discountMember\')" style="width: 180px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/> ¥\n' + + ' </div>\n' + + ' </div>'+ + ' </div>'; + + $('#memberDiscount').html(hh); + if(discountMember){ + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount.push({ + type: 1, + content:{ + discountMember: null + } + }); + } + }else if(!this.checked && v == '1'){ + $('#memberDiscount').html(''); + let datas = CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount; + let arra = []; + for (let i = 0; i < datas.length; i++){ + if(datas[i].type == v){ + continue; + } + arra.push(datas[i]); + } + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount = arra; + } + if(this.checked && v == '2'){ + let continuingMember = true; + let hh = '<div class="hr-line-dashed"></div>' + + '<h3>续课优惠</h3>\n' + + ' <div class="form-group">\n' + + ' <div class="col-sm-2"></div>'+ + ' <div class="col-sm-10">' + + ' <label class="col-sm-2 control-label">会员续课:</label>\n' + + ' <div class="col-sm-3">\n' + + ' </div>\n' + + ' <label class="col-sm-2 control-label">用户续课:</label>\n' + + ' <div class="col-sm-3">\n' + + ' </div>\n' + + ' </div>'+ + ' </div>' + + ' <div class="form-group">\n' + + ' <div class="col-sm-2"></div>'+ + ' <div class="col-sm-10">' + + ' <label class="col-sm-2 control-label">*现金支付:</label>\n' + + ' <div class="col-sm-3">\n' + + ' <input type="number" min="0" value="'; + let obj = CoursePackageDiscount.coursePackagePaymentConfig[index]; + for (let i = 0; i < obj.coursePackageDiscount.length; i++) { + if(v == obj.coursePackageDiscount[i].type){ + let jsonObject = null; + if(typeof obj.coursePackageDiscount[i].content == "string"){ + jsonObject = JSON.parse(obj.coursePackageDiscount[i].content); + }else{ + jsonObject = obj.coursePackageDiscount[i].content; + } + hh += (null == jsonObject.continuingMember ? '' : jsonObject.continuingMember); + continuingMember = false; + } + } + hh += '" placeholder="请输入会员支付价格" onblur="addPriceValue(2, this, \'continuingMember\')" style="width: 180px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/> ¥\n' + + ' </div>\n' + + ' <label class="col-sm-2 control-label">*现金支付:</label>\n' + + ' <div class="col-sm-3">\n' + + ' <input type="number" min="0" value="'; + let obje = CoursePackageDiscount.coursePackagePaymentConfig[index]; + for (let i = 0; i < obje.coursePackageDiscount.length; i++) { + if(v == obje.coursePackageDiscount[i].type){ + let jsonObject = null; + if(typeof obje.coursePackageDiscount[i].content == "string"){ + jsonObject = JSON.parse(obje.coursePackageDiscount[i].content); + }else{ + jsonObject = obje.coursePackageDiscount[i].content; + } + hh += (null == jsonObject.continuingUser ? '' : jsonObject.continuingUser); + } + } + hh += '" placeholder="请输入用户支付价格" onblur="addPriceValue(2, this, \'continuingUser\')" style="width: 180px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/> ¥\n' + + ' </div>\n' + + ' </div>'+ + ' </div>'; + $('#renewalOffer').html(hh); + if(continuingMember){ + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount.push({ + type: 2, + content: { + continuingMember: null, + continuingUser: null + } + }) + } + }else if(!this.checked && v == '2'){ + $('#renewalOffer').html(''); + let datas = CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount; + let arra = []; + for (let i = 0; i < datas.length; i++){ + if(datas[i].type == v){ + continue; + } + arra.push(datas[i]); + } + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount = arra; + } + if(this.checked && v == '3'){ + let data_value = true; + let hh = '<div class="hr-line-dashed"></div>' + + '<span style="font-size: 16px;font-weight: 500;">限时折扣</span> <i class="fa fa-plus-circle" style="font-size:24px" onclick="addPrice(3)"></i>\n'; + let obje = CoursePackageDiscount.coursePackagePaymentConfig[index]; + for (let i = 0; i < obje.coursePackageDiscount.length; i++) { + if(v == obje.coursePackageDiscount[i].type){ + data_value = false + let jsonArray = null; + if(typeof obje.coursePackageDiscount[i].content == "string"){ + jsonArray = JSON.parse(obje.coursePackageDiscount[i].content); + }else{ + jsonArray = obje.coursePackageDiscount[i].content; + } + + for (let j = 0; j < jsonArray.length; j++) { + hh += '' + + ' <div class="form-group limitedTimeDiscount" index="' + j + '">' + + ' <div class="col-sm-2"></div>\n' + + ' <div class="col-sm-8" style="border: 1px solid; padding: 20px;">\n' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label">折扣有效期:</label>\n' + + ' <div class="col-sm-9">\n' + + ' <input class="startAndEndDay" value="' + (jsonArray[j].startDate + " - " + jsonArray[j].endDate) + '" style="width: 300px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/>' + + ' </div>\n' + + ' <div class="col-sm-1"><i class="fa fa-trash-o" style="font-size:24px;color: red;" onclick="removePrice(3, this)"></i></div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label">*折扣时间:</label>\n' + + ' <div class="col-sm-5">\n' + + ' <input class="time" value="' + jsonArray[j].startTime + " - " + jsonArray[j].endTime + '" style="width: 200px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/>\n' + + ' </div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label"></label>\n' + + ' <div class="col-sm-8" style="margin-top: 6px;">\n' + + ' <input type="checkbox" name="week" value="1"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 1){ + hh += 'checked'; + } + } + hh += '/> 周一 ' + + ' <input type="checkbox" name="week" value="2"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 2){ + hh += 'checked'; + } + } + hh += '/> 周二 ' + + ' <input type="checkbox" name="week" value="3"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 3){ + hh += 'checked'; + } + } + hh += '/> 周三 ' + + ' <input type="checkbox" name="week" value="4"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 4){ + hh += 'checked'; + } + } + hh += '/> 周四 ' + + ' <input type="checkbox" name="week" value="5"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 5){ + hh += 'checked'; + } + } + hh += '/> 周五 ' + + ' <input type="checkbox" name="week" value="6"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 6){ + hh += 'checked'; + } + } + hh += '/> 周六 ' + + ' <input type="checkbox" name="week" value="7"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 7){ + hh += 'checked'; + } + } + hh += '/> 周日 ' + + ' </div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label">*现金支付:</label>\n' + + ' <div class="col-sm-4">\n' + + ' <input type="number" min="0" value="' + jsonArray[j].cashPayment + '" onblur="addPriceValue(3, this, \'cashPayment\')" placeholder="请输入折扣后支付价格" style="width: 180px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/> ¥\n' + + ' </div>\n' + + ' </div>' + + ' </div>' + + ' </div>'; + } + + } + } + $('#limitedTimeDiscount').html(hh); + if(data_value){ + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount.push({ + type: 3, + content: [] + }) + } + }else if(!this.checked && v == '3'){ + $('#limitedTimeDiscount').html(''); + let datas = CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount; + let arra = []; + for (let i = 0; i < datas.length; i++){ + if(datas[i].type == v){ + continue; + } + arra.push(datas[i]); + } + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount = arra; + } + if(this.checked && v == '4'){ + let data_value = true; + let hh = + '<div class="hr-line-dashed"></div>' + + '<span style="font-size: 16px;font-weight: 500;">赠送课时</span> <i class="fa fa-plus-circle" style="font-size:24px" onclick="addPrice(4)"></i>\n'; + let obje = CoursePackageDiscount.coursePackagePaymentConfig[index]; + for (let i = 0; i < obje.coursePackageDiscount.length; i++) { + if (v == obje.coursePackageDiscount[i].type) { + data_value = false; + let jsonArray = null; + if(typeof obje.coursePackageDiscount[i].content == "string"){ + jsonArray = JSON.parse(obje.coursePackageDiscount[i].content); + }else{ + jsonArray = obje.coursePackageDiscount[i].content; + } + for (let j = 0; j < jsonArray.length; j++) { + hh += + ' <div class="form-group complimentaryClass" index="' + j + '">' + + ' <div class="col-sm-2"></div>\n' + + ' <div class="col-sm-8" style="border: 1px solid; padding: 20px;">\n' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label">*赠送有效期:</label>\n' + + ' <div class="col-sm-9">\n' + + ' <input class="startAndEndDay" value="' + (jsonArray[j].startDate + " - " + jsonArray[j].endDate) + '" style="width: 300px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/>' + + ' </div>\n' + + ' <div class="col-sm-1"><i class="fa fa-trash-o" style="font-size:24px;color: red;" onclick="removePrice(4, this)"></i></div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label">*赠送时间:</label>\n' + + ' <div class="col-sm-5">\n' + + ' <input class="time" value="' + jsonArray[j].startTime + " - " + jsonArray[j].endTime + '" style="width: 200px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/>\n' + + ' </div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label"></label>\n' + + ' <div class="col-sm-8" style="margin-top: 6px;">\n' + + ' <input type="checkbox" name="week" value="1"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 1){ + hh += 'checked'; + } + } + hh += '/> 周一 ' + + ' <input type="checkbox" name="week" value="2"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 2){ + hh += 'checked'; + } + } + hh += '/> 周二 ' + + ' <input type="checkbox" name="week" value="3"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 3){ + hh += 'checked'; + } + } + hh += '/> 周三 ' + + ' <input type="checkbox" name="week" value="4"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 4){ + hh += 'checked'; + } + } + hh += '/> 周四 ' + + ' <input type="checkbox" name="week" value="5"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 5){ + hh += 'checked'; + } + } + hh += '/> 周五 ' + + ' <input type="checkbox" name="week" value="6"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 6){ + hh += 'checked'; + } + } + hh += '/> 周六 ' + + ' <input type="checkbox" name="week" value="7"'; + for (let k = 0; k < jsonArray[j].weeks.length; k++) { + let w = jsonArray[j].weeks[k]; + if(w == 7){ + hh += 'checked'; + } + } + hh += '/> 周日 ' + + ' </div>\n' + + ' </div>' + + ' <div class="form-group">\n' + + ' <label class="col-sm-2 control-label">*赠送课时数:</label>\n' + + ' <div class="col-sm-4">\n' + + ' <input type="number" value="' + jsonArray[j].hour + '" onblur="addPriceValue(4, this, \'hour\')" min="0" placeholder="请输入赠送课时数" style="width: 180px;background-color: #FFFFFF;background-image: none;border: 1px solid #e5e6e7;border-radius: 1px;color: inherit;padding: 6px 12px;"/> ¥\n' + + ' </div>\n' + + ' </div>' + + ' </div>' + + ' </div>'; + } + } + } + $('#complimentaryClass').html(hh); + if(data_value){ + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount.push({ + type: 4, + content: [] + }) + } + }else if(!this.checked && v == '4'){ + $('#complimentaryClass').html(''); + let datas = CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount; + let arra = []; + for (let i = 0; i < datas.length; i++){ + if(datas[i].type == v){ + continue; + } + arra.push(datas[i]); + } + CoursePackageDiscount.coursePackagePaymentConfig[index].coursePackageDiscount = arra; + } + }) + + + selectedPperiod(); +}); diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tDiscountAudit/tCity_info.js b/cloud-server-management/src/main/webapp/static/modular/system/tDiscountAudit/tCity_info.js new file mode 100644 index 0000000..8360403 --- /dev/null +++ b/cloud-server-management/src/main/webapp/static/modular/system/tDiscountAudit/tCity_info.js @@ -0,0 +1,320 @@ +/** + * 初始化车辆管理详情对话框 + */ +var language=1; +var TCarInfoDlg = { + tCarInfoData : {}, + validateFields: { + } +}; + +/** + * 验证数据是否为空 + */ +TCarInfoDlg.validate = function () { + $('#carInfoForm').data("bootstrapValidator").resetForm(); + $('#carInfoForm').bootstrapValidator('validate'); + return $("#carInfoForm").data('bootstrapValidator').isValid(); +}; + +/** + * 清除数据 + */ +TCarInfoDlg.clearData = function() { + this.tCarInfoData = {}; +} + +/** + * 设置对话框中的数据 + * + * @param key 数据的名称 + * @param val 数据的具体值 + */ +TCarInfoDlg.set = function(key, val) { + this.tCarInfoData[key] = (typeof val == "undefined") ? $("#" + key).val() : val; + return this; +} + +/** + * 设置对话框中的数据 + * + * @param key 数据的名称 + * @param val 数据的具体值 + */ +TCarInfoDlg.get = function(key) { + return $("#" + key).val(); +} + +/** + * 关闭此对话框 + */ +TCarInfoDlg.close = function() { + parent.layer.close(window.parent.TCompetition.layerIndex); +} + +/** + * 收集数据 + */ +TCarInfoDlg.collectData = function() { + this + .set('id') + .set('isPlatCar') + .set('companyId') + .set('franchiseeId') + .set('carColor') + .set('carModelId') + .set('carBrandId') + .set('carLicensePlate') + .set('carPhoto') + .set('drivingLicenseNumber') + .set('drivingLicensePhoto') + .set('annualInspectionTime') + .set('commercialInsuranceTime') + .set('createTime') + .set('state') + .set('addType') + .set('addObjectId') + .set('plateColor') + .set('vehicleType') + .set('ownerName') + .set('engineId') + .set('VIN') + .set('certifyDateA') + .set('fuelType') + .set('engineDisplace') + .set('certificate') + .set('transAgency') + .set('transArea') + .set('transDateStart') + .set('transDateStop') + .set('certifyDateB') + .set('fixState') + .set('nextFixDate') + .set('checkState') + .set('feePrintId') + .set('GPSBrand') + .set('GPSModel') + .set('GPSIMEI') + .set('GPSInstallDate') + .set('registerDate') + .set('commercialType'); +} + +/** + * 提交添加 + */ +TCarInfoDlg.addSubmit = function() { + + this.clearData(); + this.collectData(); + if(!this.validate()){ + return ; + } + + let pCode = $("#pCode").val() + let cCode = $("#cCode").val() + let name = $("#name").val() + let phone = $("#phone").val() + + if(pCode==''){ + Feng.info("请选择省") + return; + } + if(cCode==''){ + Feng.info("请选择市") + return; + } + if(name==''){ + Feng.info("管理员姓名不能为空") + return; + } + if(phone==''){ + Feng.info("管理员手机号不能为空") + return; + } + + //提交信息 + var ajax = new $ax(Feng.ctxPath + "/tCity/add", function(data){ + if(data=="5001"){ + Feng.error("改账号已经存在"); + }else + if(data.code == 200){ + if(language==1){ + Feng.success("添加成功!"); + }else if(language==2){ + Feng.success("Successfully added!"); + }else { + Feng.success("Sangat berhasil ditambah!"); + } + window.parent.TCompetition.table.refresh(); + TCarInfoDlg.close(); + }else{ + Feng.error(data.msg); + } + + },function(data){ + Feng.error("添加失败!" + data.responseJSON.message + "!"); + }); + ajax.set(this.tCarInfoData); + ajax.set("provinceCode",pCode); + ajax.set("cityCode",cCode); + ajax.set("name",name); + ajax.set("phone",phone); + ajax.start(); +} + +/** + * 提交修改 + */ +TCarInfoDlg.editSubmit = function() { + + this.clearData(); + this.collectData(); + if(!this.validate()){ + return ; + } + let pCode = $("#pCode").val() + let cCode = $("#cCode").val() + let name = $("#name").val() + let phone = $("#phone").val() + + if(pCode==''){ + Feng.info("请选择省") + return; + } + if(cCode==''){ + Feng.info("请选择市") + return; + } + if(name==''){ + Feng.info("管理员姓名不能为空") + return; + } + if(phone==''){ + Feng.info("管理员手机号不能为空") + return; + } + //提交信息 + var ajax = new $ax(Feng.ctxPath + "/tCity/update", function(data){ + if(data=="5001"){ + Feng.error("改账号已经存在"); + }else + if(data.code == 200){ + if(language==1){ + Feng.success("修改成功!"); + }else if(language==2){ + Feng.success("Modify successfully!"); + }else { + Feng.success("Mengubah dengan sukses!"); + } + window.parent.TCompetition.table.refresh(); + TCarInfoDlg.close(); + }else{ + Feng.error(data.msg); + } + },function(data){ + Feng.error("修改失败!" + data.responseJSON.message + "!"); + }); + ajax.set("provinceCode",pCode); + ajax.set("cityCode",cCode); + ajax.set("name",name); + ajax.set("phone",phone); + ajax.set("id",$("#id").val()); + ajax.start(); +} + +$(function() { + Feng.initValidator("carInfoForm", TCarInfoDlg.validateFields); + // 初始化图片上传 + var carPhoto = new $WebUpload("carPhoto"); + carPhoto.setUploadBarId("progressBar"); + carPhoto.init(); + var drivingLicensePhoto = new $WebUpload("drivingLicensePhoto"); + drivingLicensePhoto.setUploadBarId("progressBar"); + drivingLicensePhoto.init(); +}); + +/** + * 选择分公司后执行 + */ +TCarInfoDlg.oneChange = function (e) { + var oneId=$(e).val(); + var ajax = new $ax(Feng.ctxPath + "/tCity/onChange", function(data){ + if(data!=null){ + if(language==1){ + var content='<option value="">选择市</option>'; + }else if(language==2){ + var content='<option value="">Choose your franchisee</option>'; + }else { + var content='<option value="">Pilih franchisee Anda</option>'; + } + $.each(data, function(k,v) { + content += "<option value='"+v.code+"'>"+v.name+"</option>"; + }); + $("#cCode").empty().append(content); + } + }); + ajax.set("oneId",oneId); + ajax.start(); +} + +/** + * 类型改变执行 + * @param e + */ +TCarInfoDlg.companyTypeClick = function (e) { + if (1 == e){ + $(".companyDiv").hide(); + } else if (2 == e){ + $(".companyDiv").show(); + } +} + +/** + * 车辆品牌改变时执行 + */ +TCarInfoDlg.brandChange = function (e) { + var carBrandId=$(e).val(); + var ajax = new $ax(Feng.ctxPath + "/tCar/brandChange", function(data){ + if(data!=null){ + if(language==1){ + var content='<option value="">选择车辆类型</option>'; + }else if(language==2){ + var content='<option value="">Please select the vehicle type</option>'; + }else { + var content='<option value="">Pilih Jenis Kendaraan</option>'; + } + + $.each(data, function(k,v) { + content += "<option value='"+v.id+"'>"+v.name+"</option>"; + }); + $("#carModelId").empty().append(content); + } + }); + ajax.set("carBrandId",carBrandId); + ajax.start(); +} + +/** + * 专车服务被点击 + */ +TCarInfoDlg.zcServerClick = function () { + var serverBox1 = $('#serverBox1').prop('checked'); + if (serverBox1){ + $("#zcModelDiv").show(); + } else { + $("#zcModelDiv").hide(); + } +} + +/** + * 跨城服务被点击 + */ +TCarInfoDlg.kcServerClick = function () { + var serverBox3 = $('#serverBox3').prop('checked'); + if (serverBox3){ + $("#kcModelDiv").show(); + } else { + $("#kcModelDiv").hide(); + } +} diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tDiscountAudit/tDiscount.js b/cloud-server-management/src/main/webapp/static/modular/system/tDiscountAudit/tDiscount.js new file mode 100644 index 0000000..d475168 --- /dev/null +++ b/cloud-server-management/src/main/webapp/static/modular/system/tDiscountAudit/tDiscount.js @@ -0,0 +1,433 @@ +/** + * 车辆管理管理初始化 + */ +var TCompetition = { + id: "TCompetitionTable", //表格id + seItem: null, //选中的条目 + table: null, + layerIndex: -1 +}; +var language =1 +/** + * 初始化表格的列 + */ +TCompetition.initColumn = function () { + return [ + {field: 'selectItem', radio: true}, + {title: '所在省', field: 'pname', visible: true, align: 'center', valign: 'middle' + }, + {title: '所在市', field: 'cname', visible: true, align: 'center', valign: 'middle'}, + {title: '所属门店', field: 'shopName', visible: true, align: 'center', valign: 'middle' + }, + {title: '课包名称', field: 'name', visible: true, align: 'center', valign: 'middle' + }, + {title: '折扣类型', field: 'type', visible: true, align: 'center', valign: 'middle' + ,formatter:function (data) { + return{1:"会员折扣",3:"限时折扣",4:"赠送课时"}[data] + } + }, + {title: '状态', field: 'status', visible: true, align: 'center', valign: 'middle' + ,formatter:function (data) { + return{1:"待审核",3:"未通过"}[data] + } + }, + ]; +}; +function currentTime(timestamp){ + var time = timestamp + ''; + if(time.length != 13){ + timestamp = timestamp * 1000; + } + var date = new Date(timestamp);; + var Y = date.getFullYear() + '-'; + var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; + var D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + ' '; + + var h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()) + ':'; + var m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()) + ':'; + var s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds()); + var strDate = Y + M + D + h + m + s; + return strDate +} + +function currentTime1(timestamp){ + var time = timestamp + ''; + if(time.length != 13){ + timestamp = timestamp * 1000; + } + var date = new Date(timestamp);; + var Y = date.getFullYear() + '-'; + var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'; + var D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + ' '; + + var h = (date.getHours() < 10 ? '0' + (date.getHours()) : date.getHours()) + ':'; + var m = (date.getMinutes() < 10 ? '0' + (date.getMinutes()) : date.getMinutes()) + ':'; + var s = (date.getSeconds() < 10 ? '0' + (date.getSeconds()) : date.getSeconds()); + var strDate = Y + M + D ; + return strDate +} +/** + * 检查是否选中 + */ +TCompetition.check = function () { + var selected = $('#' + this.id).bootstrapTable('getSelections'); + if(selected.length == 0){ + Feng.info("请先选中表格中的某一记录!"); + return false; + }else{ + TCompetition.seItem = selected[0]; + return true; + } +}; + +/** + * 点击添加车辆管理 + */ +TCompetition.openAddTCompetition = function () { + var index = layer.open({ + type: 2, + title: '添加', + area: ['100%', '100%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tCity/tCity_add' + }); + this.layerIndex = index; +}; + +/** + * 打开查看车辆管理详情 + */ +TCompetition.openTCompetitionDetail = function () { + if (this.check()) { + var index = layer.open({ + type: 2, + title:'编辑', + area: ['100%', '100%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tCity/tCity_update/' + TCompetition.seItem.id + }); + this.layerIndex = index; + } +}; + +/** + * 删除车辆管理 + */ +TCompetition.updateState = function (e) { + if (this.check()) { + var id = TCompetition.seItem.id; + var ajax = new $ax(Feng.ctxPath + "/TDiscount/updateState", function (data) { + if(data.code==200){ + Feng.success("操作成功") + }else { + Feng.error("操作失败") + } + TCompetition.table.refresh(); + }, function (data) { + Feng.error("操作失败") + TCompetition.table.refresh(); + }); + ajax.set("id",id); + ajax.set("status",e); + ajax.start(); + ; + } +}; +TCompetition.oneChange = function (e) { + console.log(111) + var oneId=$(e).val(); + var ajax = new $ax(Feng.ctxPath + "/tCompetition/onChange", function(data){ + if(data!=null){ + if(language==1){ + var content='<option value="">选择市</option>'; + }else if(language==2){ + var content='<option value="">Choose your franchisee</option>'; + }else { + var content='<option value="">Pilih franchisee Anda</option>'; + } + $.each(data, function(k,v) { + content += "<option value='"+v.code+"'>"+v.name+"</option>"; + }); + $("#cCode").empty().append(content); + } + }); + ajax.set("oneId",oneId); + ajax.start(); +} + +TCompetition.freeze = function () { + if (this.check()) { + var ajax = new $ax(Feng.ctxPath + "/tCity/freeze", function (data) { + Feng.success("冻结成功!"); + TCompetition.table.refresh(); + }, function (data) { + Feng.error("冻结失败!" + data.responseJSON.message + "!"); + }); + ajax.set("id",this.seItem.id); + ajax.start(); + } +}; +TCompetition.audit = function () { + 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 type="radio" name="r1" value="2" checked> 通过 <input type="radio" name="r1" value="3" > 拒绝 '+ + ' </div>\n' + + ' </div>\n' + + ' <div class="form-group">\n' + + ' <label class="col-sm-3 control-label">拒绝理由:</label>\n' + + ' <div class="col-sm-9">\n' + + ' <textarea id="text" style="width: 460px; height: 138px;"></textarea> '+ + ' </div>\n' + + ' </div>\n' + + ' </div>' + + ' </div>' + + '</div>' + , btn: ['关闭', '保存'] + , btnAlign: 'c' //按钮居中 + , shade: 0.5 //不显示遮罩 + ,load:1 + , yes: function () { + layer.closeAll(); + }, + btn2:function () { + let audit = document.querySelector('input[name="r1"]:checked').value; + let text = $("#text").val() + if(audit==3){ + if(text==''){ + Feng.info("请输入拒绝理由") + return false; + } + } + var ajax = new $ax(Feng.ctxPath + "/tDiscount/auditDiscount", function (data) { + if (data.code == 200) { + Feng.success("操作成功!"); + window.location.reload(); + window.parent.layer.closeAll(); + } else if(data=="repeat"){ + window.location.reload(); + window.parent.layer.closeAll(); + Feng.error("请勿重复操作"); + }else { + return Feng.error(data.msg); + } + }, function (data) { + Feng.error("操作失败!") + window.location.reload(); + window.parent.layer.closeAll(); + return Feng.error("操作失败!"); + }); + ajax.set("id", TCompetition.seItem.id); + ajax.set("audit", audit); + ajax.set("text", text); + ajax.start(); + layer.closeAll(); + } + }); + + this.layerIndex = index; + } +}; +TCompetition.unfreeze = function () { + if (this.check()) { + var ajax = new $ax(Feng.ctxPath + "/tCity/unfreeze", function (data) { + Feng.success("解冻成功!"); + TCompetition.table.refresh(); + }, function (data) { + Feng.error("解冻失败!" + data.responseJSON.message + "!"); + }); + ajax.set("id",this.seItem.id); + ajax.start(); + } +}; +TCompetition.info = function () { + console.log(111) + if (this.check()) { + let index = layer.open({ + type: 2, + title: '折扣详情', + area: ['100%', '100%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/tDiscount/infoOne?id=' + this.seItem.id + }); + this.layerIndex = index; + } +}; +TCompetition.reload = function () { + if (this.check()) { + let id = this.seItem.id + var operation = function(){ + var ajax = new $ax(Feng.ctxPath + "/tCity/pwd", function (data) { + Feng.success("重置成功!"); + TCompetition.table.refresh(); + }, function (data) { + Feng.error("重置失败!" + data.responseJSON.message + "!"); + }); + ajax.set("id",id); + ajax.start(); + } + Feng.confirm("确认重置密码?重置后密码为:a123456", operation); + } + +}; + +TCompetition.carInsurance = function () { + if (this.check()) { + var index = layer.open({ + type: 2, + title: language==1?'车辆保险':(language==2?'Vehicle insurance':'Asuransi kendaraan'), + area: ['100%', '100%'], //宽高 + fix: false, //不固定 + maxmin: true, + content: Feng.ctxPath + '/TCompetition/carInsurance?carId=' + TCompetition.seItem.id + }); + this.layerIndex = index; + } +}; + + + +/** + * 查询车辆管理列表 + */ +TCompetition.search = function () { + var queryData = {}; + queryData['provinceCode'] = $("#pCode").val(); + queryData['cityCode'] = $("#cCode").val(); + queryData['name'] = $("#name").val(); + queryData['shopName'] = $("#shopName").val(); + queryData['type'] = $("type").val(); + TCompetition.table.refresh({query: queryData}); +}; + +TCompetition.resetSearch = function () { + $("#pCode").val(""); + $("#cCode").val(""); + $("#name").val(""); + $("#type").val(""); + $("#shopName").val(""); + TCompetition.search(); +}; + +$(function () { + var defaultColunms = TCompetition.initColumn(); + var table = new BSTable(TCompetition.id, "/tDiscount/listAudit", defaultColunms); + table.setPaginationType("server"); + TCompetition.table = table.init(); +}); + +/** + * 下载模板 + */ +TCompetition.uploadCarModel = function () { + window.location.href = Feng.ctxPath + "/TCompetition/uploadCarModel"; +} + +var agreement = function(){ + this.init = function(){ + //模拟上传excel + $("#uploadEventBtn").unbind("click").bind("click",function(){ + $("#uploadEventFile").click(); + }); + }; +} +/** + * 导入合同 + */ +TCompetition.exporTCompetition = function () { + var uploadEventFile = $("#uploadEventFile").val(); + if(uploadEventFile == ''){ + if(language==1){ + Feng.info("请选择Excel,再上传"); + }else if(language==2){ + Feng.info("Please select Excel and upload"); + }else { + Feng.info("Silakan pilih Excel dan upload"); + } + }else if(uploadEventFile.lastIndexOf(".xls")<0){//可判断以.xls和.xlsx结尾的excel + if(language==1){ + Feng.info("只能上传Excel文件"); + }else if(language==2){ + Feng.info("Only Excel files can be uploaded"); + }else { + Feng.info("Hanya berkas Excel yang dapat diunggah"); + } + }else{ + var url = Feng.ctxPath + '/TCompetition/exporTCompetition'; + var file = document.querySelector('input[name=file]').files[0]; + var reader = new FileReader(); + if (file) { + var formData = new FormData(); + formData.append("myfile", file); + this.sendAjaxRequest(url, 'POST', formData); + } + } +} +TCompetition.sendAjaxRequest = function(url,type,data){ + $.ajax({ + url : url, + type : type, + data : data, + success : function(result) { + if(result.code==500) { + Feng.info(result.message); + }else { + if(language==1){ + Feng.success("导入成功!"); + }else if(language==2){ + Feng.success("SUCCESSFUL IMPORT!"); + }else { + Feng.success("Import berhasil!"); + } + } + TCompetition.table.refresh(); + }, + error : function() { + if(language==1){ + Feng.error("excel上传失败!"); + }else if(language==2){ + Feng.error("Uploading excel Fails. Procedure!"); + }else { + Feng.error("Gagal mengunggah excel!"); + } + }, + cache : false, + contentType : false, + processData : false + }); +}; + +var agreement; +$(function(){ + agreement = new agreement(); + agreement.init(); +}); + +/** + * 导出车辆操作 + */ +TCompetition.ouTCompetition = function () { + var operation = function() { + window.location.href = Feng.ctxPath + "/TCompetition/ouTCompetition"; + }; + if(language==1){ + Feng.confirm("是否确认导出车辆信息?", operation); + }else if(language==2){ + Feng.confirm("Are you sure to export vehicle information?", operation); + }else { + Feng.confirm("Apakah Anda pasti akan mengekspor informasi kendaraan?", operation); + } +} \ No newline at end of file diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tDiscountAudit/tDiscount_info.js b/cloud-server-management/src/main/webapp/static/modular/system/tDiscountAudit/tDiscount_info.js new file mode 100644 index 0000000..8360403 --- /dev/null +++ b/cloud-server-management/src/main/webapp/static/modular/system/tDiscountAudit/tDiscount_info.js @@ -0,0 +1,320 @@ +/** + * 初始化车辆管理详情对话框 + */ +var language=1; +var TCarInfoDlg = { + tCarInfoData : {}, + validateFields: { + } +}; + +/** + * 验证数据是否为空 + */ +TCarInfoDlg.validate = function () { + $('#carInfoForm').data("bootstrapValidator").resetForm(); + $('#carInfoForm').bootstrapValidator('validate'); + return $("#carInfoForm").data('bootstrapValidator').isValid(); +}; + +/** + * 清除数据 + */ +TCarInfoDlg.clearData = function() { + this.tCarInfoData = {}; +} + +/** + * 设置对话框中的数据 + * + * @param key 数据的名称 + * @param val 数据的具体值 + */ +TCarInfoDlg.set = function(key, val) { + this.tCarInfoData[key] = (typeof val == "undefined") ? $("#" + key).val() : val; + return this; +} + +/** + * 设置对话框中的数据 + * + * @param key 数据的名称 + * @param val 数据的具体值 + */ +TCarInfoDlg.get = function(key) { + return $("#" + key).val(); +} + +/** + * 关闭此对话框 + */ +TCarInfoDlg.close = function() { + parent.layer.close(window.parent.TCompetition.layerIndex); +} + +/** + * 收集数据 + */ +TCarInfoDlg.collectData = function() { + this + .set('id') + .set('isPlatCar') + .set('companyId') + .set('franchiseeId') + .set('carColor') + .set('carModelId') + .set('carBrandId') + .set('carLicensePlate') + .set('carPhoto') + .set('drivingLicenseNumber') + .set('drivingLicensePhoto') + .set('annualInspectionTime') + .set('commercialInsuranceTime') + .set('createTime') + .set('state') + .set('addType') + .set('addObjectId') + .set('plateColor') + .set('vehicleType') + .set('ownerName') + .set('engineId') + .set('VIN') + .set('certifyDateA') + .set('fuelType') + .set('engineDisplace') + .set('certificate') + .set('transAgency') + .set('transArea') + .set('transDateStart') + .set('transDateStop') + .set('certifyDateB') + .set('fixState') + .set('nextFixDate') + .set('checkState') + .set('feePrintId') + .set('GPSBrand') + .set('GPSModel') + .set('GPSIMEI') + .set('GPSInstallDate') + .set('registerDate') + .set('commercialType'); +} + +/** + * 提交添加 + */ +TCarInfoDlg.addSubmit = function() { + + this.clearData(); + this.collectData(); + if(!this.validate()){ + return ; + } + + let pCode = $("#pCode").val() + let cCode = $("#cCode").val() + let name = $("#name").val() + let phone = $("#phone").val() + + if(pCode==''){ + Feng.info("请选择省") + return; + } + if(cCode==''){ + Feng.info("请选择市") + return; + } + if(name==''){ + Feng.info("管理员姓名不能为空") + return; + } + if(phone==''){ + Feng.info("管理员手机号不能为空") + return; + } + + //提交信息 + var ajax = new $ax(Feng.ctxPath + "/tCity/add", function(data){ + if(data=="5001"){ + Feng.error("改账号已经存在"); + }else + if(data.code == 200){ + if(language==1){ + Feng.success("添加成功!"); + }else if(language==2){ + Feng.success("Successfully added!"); + }else { + Feng.success("Sangat berhasil ditambah!"); + } + window.parent.TCompetition.table.refresh(); + TCarInfoDlg.close(); + }else{ + Feng.error(data.msg); + } + + },function(data){ + Feng.error("添加失败!" + data.responseJSON.message + "!"); + }); + ajax.set(this.tCarInfoData); + ajax.set("provinceCode",pCode); + ajax.set("cityCode",cCode); + ajax.set("name",name); + ajax.set("phone",phone); + ajax.start(); +} + +/** + * 提交修改 + */ +TCarInfoDlg.editSubmit = function() { + + this.clearData(); + this.collectData(); + if(!this.validate()){ + return ; + } + let pCode = $("#pCode").val() + let cCode = $("#cCode").val() + let name = $("#name").val() + let phone = $("#phone").val() + + if(pCode==''){ + Feng.info("请选择省") + return; + } + if(cCode==''){ + Feng.info("请选择市") + return; + } + if(name==''){ + Feng.info("管理员姓名不能为空") + return; + } + if(phone==''){ + Feng.info("管理员手机号不能为空") + return; + } + //提交信息 + var ajax = new $ax(Feng.ctxPath + "/tCity/update", function(data){ + if(data=="5001"){ + Feng.error("改账号已经存在"); + }else + if(data.code == 200){ + if(language==1){ + Feng.success("修改成功!"); + }else if(language==2){ + Feng.success("Modify successfully!"); + }else { + Feng.success("Mengubah dengan sukses!"); + } + window.parent.TCompetition.table.refresh(); + TCarInfoDlg.close(); + }else{ + Feng.error(data.msg); + } + },function(data){ + Feng.error("修改失败!" + data.responseJSON.message + "!"); + }); + ajax.set("provinceCode",pCode); + ajax.set("cityCode",cCode); + ajax.set("name",name); + ajax.set("phone",phone); + ajax.set("id",$("#id").val()); + ajax.start(); +} + +$(function() { + Feng.initValidator("carInfoForm", TCarInfoDlg.validateFields); + // 初始化图片上传 + var carPhoto = new $WebUpload("carPhoto"); + carPhoto.setUploadBarId("progressBar"); + carPhoto.init(); + var drivingLicensePhoto = new $WebUpload("drivingLicensePhoto"); + drivingLicensePhoto.setUploadBarId("progressBar"); + drivingLicensePhoto.init(); +}); + +/** + * 选择分公司后执行 + */ +TCarInfoDlg.oneChange = function (e) { + var oneId=$(e).val(); + var ajax = new $ax(Feng.ctxPath + "/tCity/onChange", function(data){ + if(data!=null){ + if(language==1){ + var content='<option value="">选择市</option>'; + }else if(language==2){ + var content='<option value="">Choose your franchisee</option>'; + }else { + var content='<option value="">Pilih franchisee Anda</option>'; + } + $.each(data, function(k,v) { + content += "<option value='"+v.code+"'>"+v.name+"</option>"; + }); + $("#cCode").empty().append(content); + } + }); + ajax.set("oneId",oneId); + ajax.start(); +} + +/** + * 类型改变执行 + * @param e + */ +TCarInfoDlg.companyTypeClick = function (e) { + if (1 == e){ + $(".companyDiv").hide(); + } else if (2 == e){ + $(".companyDiv").show(); + } +} + +/** + * 车辆品牌改变时执行 + */ +TCarInfoDlg.brandChange = function (e) { + var carBrandId=$(e).val(); + var ajax = new $ax(Feng.ctxPath + "/tCar/brandChange", function(data){ + if(data!=null){ + if(language==1){ + var content='<option value="">选择车辆类型</option>'; + }else if(language==2){ + var content='<option value="">Please select the vehicle type</option>'; + }else { + var content='<option value="">Pilih Jenis Kendaraan</option>'; + } + + $.each(data, function(k,v) { + content += "<option value='"+v.id+"'>"+v.name+"</option>"; + }); + $("#carModelId").empty().append(content); + } + }); + ajax.set("carBrandId",carBrandId); + ajax.start(); +} + +/** + * 专车服务被点击 + */ +TCarInfoDlg.zcServerClick = function () { + var serverBox1 = $('#serverBox1').prop('checked'); + if (serverBox1){ + $("#zcModelDiv").show(); + } else { + $("#zcModelDiv").hide(); + } +} + +/** + * 跨城服务被点击 + */ +TCarInfoDlg.kcServerClick = function () { + var serverBox3 = $('#serverBox3').prop('checked'); + if (serverBox3){ + $("#kcModelDiv").show(); + } else { + $("#kcModelDiv").hide(); + } +} diff --git a/cloud-server-management/src/main/webapp/static/modular/system/tShop/tShop_info.js b/cloud-server-management/src/main/webapp/static/modular/system/tShop/tShop_info.js index 790c8fa..b85b9b0 100644 --- a/cloud-server-management/src/main/webapp/static/modular/system/tShop/tShop_info.js +++ b/cloud-server-management/src/main/webapp/static/modular/system/tShop/tShop_info.js @@ -572,6 +572,9 @@ var carPhoto = new $WebUpload("img"); carPhoto.setUploadBarId("progressBar"); carPhoto.init(); + var carPhoto = new $WebUpload("welfarePicture"); + carPhoto.setUploadBarId("progressBar"); + carPhoto.init(); var drivingLicensePhoto = new $WebUpload("drivingLicensePhoto"); drivingLicensePhoto.setUploadBarId("progressBar"); drivingLicensePhoto.init(); @@ -770,6 +773,27 @@ ajax.set("oneId",oneId); ajax.start(); } +TCarInfoDlg.oneChange1Next = function (e) { + console.log(111) + var oneId=$(e).val(); + var ajax = new $ax(Feng.ctxPath + "/tShop/onChange1", function(data){ + if(data!=null){ + if(language==1){ + var content='<option value="">选择省</option>'; + }else if(language==2){ + var content='<option value="">Choose your franchisee</option>'; + }else { + var content='<option value="">Pilih franchisee Anda</option>'; + } + $.each(data, function(k,v) { + content += "<option value='"+v.id+"'>"+v.name+"</option>"; + }); + $("#pCode").empty().append(content); + } + }); + ajax.set("oneId",e); + ajax.start(); +} TCarInfoDlg.oneChange2 = function (e) { console.log(111) var oneId=$(e).val(); diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/BallController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/BallController.java index 9494de6..ff9fa6c 100644 --- a/cloud-server-other/src/main/java/com/dsh/other/controller/BallController.java +++ b/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(); } diff --git a/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java b/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java index 5f79d70..1ed5022 100644 --- a/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java +++ b/cloud-server-other/src/main/java/com/dsh/other/controller/StoreController.java @@ -4,13 +4,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.dsh.other.entity.Store; +import com.dsh.other.entity.TBackRecord; import com.dsh.other.entity.TStoreOther; import com.dsh.other.entity.TStoreOtherConfigTrue; import com.dsh.other.feignclient.model.*; import com.dsh.other.model.*; -import com.dsh.other.service.StoreService; -import com.dsh.other.service.TStoreOtherConfigTrueService; -import com.dsh.other.service.TStoreOtherService; +import com.dsh.other.service.*; import com.dsh.other.util.GDMapGeocodingUtil; import com.dsh.other.util.ResultUtil; import com.dsh.other.util.ToolUtil; @@ -21,6 +20,7 @@ import org.springframework.web.bind.annotation.*; import java.util.*; +import java.util.stream.Collectors; @RestController @RequestMapping("") @@ -35,6 +35,9 @@ @Autowired private TStoreOtherService tStoreOtherService; + + @Autowired + private TBackRecordService backRecordService; /** * 根据城市管理员id获取门店 @@ -280,6 +283,17 @@ } + @PostMapping("/store/addBackRecord") + public void addBackRecord(@RequestBody String s){ + TBackRecord tBackRecord = new TBackRecord(); + String[] split = s.split("_"); + tBackRecord.setMoney(Double.valueOf(split[0])); + tBackRecord.setUserId(Integer.valueOf(split[1])); + tBackRecord.setTime(new Date()); + backRecordService.save(tBackRecord); + } + + @ResponseBody @@ -313,9 +327,9 @@ try { List<TStoreOtherConfigTrue> tStoreOtherConfigTrues = new ArrayList<>(); - List<TStoreOther> list = tStoreOtherService.list(new LambdaQueryWrapper<TStoreOther>().eq(TStoreOther::getStoreId, id)); + List<TStoreOther> list = tStoreOtherService.list(new LambdaQueryWrapper<TStoreOther>().eq(TStoreOther::getStoreId, id).eq(TStoreOther::getState,1)); if(list.size()>0){ - tStoreOtherConfigTrues= tStoreOtherConfigTrueService.list(new LambdaQueryWrapper<TStoreOtherConfigTrue>().eq(TStoreOtherConfigTrue::getPid, list.get(0).getId())); + tStoreOtherConfigTrues= tStoreOtherConfigTrueService.list(new LambdaQueryWrapper<TStoreOtherConfigTrue>().in(TStoreOtherConfigTrue::getPid, list.stream().map(TStoreOther::getId).collect(Collectors.toList())).eq(TStoreOtherConfigTrue::getState,1)); } return ResultUtil.success(tStoreOtherConfigTrues); }catch (Exception e){ diff --git a/cloud-server-other/src/main/java/com/dsh/other/entity/TBackRecord.java b/cloud-server-other/src/main/java/com/dsh/other/entity/TBackRecord.java new file mode 100644 index 0000000..070c69c --- /dev/null +++ b/cloud-server-other/src/main/java/com/dsh/other/entity/TBackRecord.java @@ -0,0 +1,48 @@ +package com.dsh.other.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.baomidou.mybatisplus.annotation.TableId; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.TableField; +import java.io.Serializable; +import java.util.Date; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * <p> + * 退费记录 + * </p> + * + * @author administrator + * @since 2023-10-09 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("t_back_record") +public class TBackRecord extends Model<TBackRecord> { + + private static final long serialVersionUID=1L; + + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @TableField("userId") + private Integer userId; + + private Double money; + + private Date time; + + + @Override + protected Serializable pkVal() { + return this.id; + } + +} diff --git a/cloud-server-other/src/main/java/com/dsh/other/mapper/TBackRecordMapper.java b/cloud-server-other/src/main/java/com/dsh/other/mapper/TBackRecordMapper.java new file mode 100644 index 0000000..fff3d15 --- /dev/null +++ b/cloud-server-other/src/main/java/com/dsh/other/mapper/TBackRecordMapper.java @@ -0,0 +1,17 @@ +package com.dsh.other.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.dsh.other.entity.TBackRecord; + +/** + * <p> + * 退费记录 Mapper 接口 + * </p> + * + * @author administrator + * @since 2023-10-09 + */ +public interface TBackRecordMapper extends BaseMapper<TBackRecord> { + +} diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/TBackRecordService.java b/cloud-server-other/src/main/java/com/dsh/other/service/TBackRecordService.java new file mode 100644 index 0000000..ccc0b2a --- /dev/null +++ b/cloud-server-other/src/main/java/com/dsh/other/service/TBackRecordService.java @@ -0,0 +1,16 @@ +package com.dsh.other.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.dsh.other.entity.TBackRecord; + +/** + * <p> + * 退费记录 服务类 + * </p> + * + * @author administrator + * @since 2023-10-09 + */ +public interface TBackRecordService extends IService<TBackRecord> { + +} diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java b/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java index 5bcce9e..7a6dafe 100644 --- a/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java +++ b/cloud-server-other/src/main/java/com/dsh/other/service/impl/SiteServiceImpl.java @@ -63,6 +63,9 @@ @Autowired private SiteMapper siteMapper; + @Autowired + private TBackRecordService backRecordService; + @@ -523,6 +526,13 @@ } siteBooking.setCancelUserId(uid); siteBookingService.updateById(siteBooking); + + TBackRecord tBackRecord = new TBackRecord(); + tBackRecord.setMoney(siteBooking.getPayMoney()); + tBackRecord.setUserId(siteBooking.getAppUserId()); + tBackRecord.setTime(new Date()); + backRecordService.save(tBackRecord); + } if(siteBooking.getPayType() == 2){//支付宝 Map<String, String> map = payMoneyUtil.aliRefund(siteBooking.getPayOrderNo(), siteBooking.getPayMoney().toString()); @@ -544,6 +554,13 @@ userCoupon.setStatus(1); userCouponClient.updateUserCoupon(userCoupon); } + + + TBackRecord tBackRecord = new TBackRecord(); + tBackRecord.setMoney(siteBooking.getPayMoney()); + tBackRecord.setUserId(siteBooking.getAppUserId()); + tBackRecord.setTime(new Date()); + backRecordService.save(tBackRecord); } if(siteBooking.getPayType() == 3){//玩湃币 diff --git a/cloud-server-other/src/main/java/com/dsh/other/service/impl/TBackRecordServiceImpl.java b/cloud-server-other/src/main/java/com/dsh/other/service/impl/TBackRecordServiceImpl.java new file mode 100644 index 0000000..030f540 --- /dev/null +++ b/cloud-server-other/src/main/java/com/dsh/other/service/impl/TBackRecordServiceImpl.java @@ -0,0 +1,21 @@ +package com.dsh.other.service.impl; + + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.dsh.other.entity.TBackRecord; +import com.dsh.other.mapper.TBackRecordMapper; +import com.dsh.other.service.TBackRecordService; +import org.springframework.stereotype.Service; + +/** + * <p> + * 退费记录 服务实现类 + * </p> + * + * @author administrator + * @since 2023-10-09 + */ +@Service +public class TBackRecordServiceImpl extends ServiceImpl<TBackRecordMapper, TBackRecord> implements TBackRecordService { + +} diff --git a/cloud-server-other/src/main/resources/mapper/GameMapper.xml b/cloud-server-other/src/main/resources/mapper/GameMapper.xml index fb0656a..7ba2226 100644 --- a/cloud-server-other/src/main/resources/mapper/GameMapper.xml +++ b/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> diff --git a/cloud-server-other/src/main/resources/mapper/TBackRecordMapper.xml b/cloud-server-other/src/main/resources/mapper/TBackRecordMapper.xml new file mode 100644 index 0000000..9ec6707 --- /dev/null +++ b/cloud-server-other/src/main/resources/mapper/TBackRecordMapper.xml @@ -0,0 +1,6 @@ +<?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.other.mapper.TBackRecordMapper"> + + +</mapper> -- Gitblit v1.7.1