diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..2056955da06039de93b5e9a0af3439651095cbe4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,49 @@
+######################################################################
+# Build Tools
+
+.gradle
+/build/
+!gradle/wrapper/gradle-wrapper.jar
+
+target/
+!.mvn/wrapper/maven-wrapper.jar
+
+######################################################################
+# IDE
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+idea/
+target/
+
+### JRebel ###
+rebel.xml
+
+### NetBeans ###
+nbproject/private/
+build/*
+nbbuild/
+dist/
+nbdist/
+.nb-gradle/
+
+######################################################################
+# Others
+*.log
+*.xml.versionsBackup
+*.swp
+
+!*/build/*.java
+!*/build/*.html
+!*/build/*.xml
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..8564f294c7781cbbbdb22ae5927a96f859db0054
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2018 RuoYi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/bin/clean.bat b/bin/clean.bat
new file mode 100644
index 0000000000000000000000000000000000000000..24c09741e10963dd8c7068f9ff21c952b22b7fc5
--- /dev/null
+++ b/bin/clean.bat
@@ -0,0 +1,12 @@
+@echo off
+echo.
+echo [信息] 清理工程target生成路径。
+echo.
+
+%~d0
+cd %~dp0
+
+cd ..
+call mvn clean
+
+pause
\ No newline at end of file
diff --git a/bin/package.bat b/bin/package.bat
new file mode 100644
index 0000000000000000000000000000000000000000..c693ec067499702689d496f74c089888d7840be4
--- /dev/null
+++ b/bin/package.bat
@@ -0,0 +1,12 @@
+@echo off
+echo.
+echo [信息] 打包Web工程,生成war/jar包文件。
+echo.
+
+%~d0
+cd %~dp0
+
+cd ..
+call mvn clean package -Dmaven.test.skip=true
+
+pause
\ No newline at end of file
diff --git a/bin/run.bat b/bin/run.bat
new file mode 100644
index 0000000000000000000000000000000000000000..41efbd0f3eb46221fb2c9f2f4f156ca311ae5f66
--- /dev/null
+++ b/bin/run.bat
@@ -0,0 +1,14 @@
+@echo off
+echo.
+echo [信息] 使用Jar命令运行Web工程。
+echo.
+
+cd %~dp0
+cd ../ruoyi-admin/target
+
+set JAVA_OPTS=-Xms256m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
+
+java -jar %JAVA_OPTS% ruoyi-admin.jar
+
+cd bin
+pause
\ No newline at end of file
diff --git "a/doc/\350\213\245\344\276\235\347\216\257\345\242\203\344\275\277\347\224\250\346\211\213\345\206\214.docx" "b/doc/\350\213\245\344\276\235\347\216\257\345\242\203\344\275\277\347\224\250\346\211\213\345\206\214.docx"
new file mode 100644
index 0000000000000000000000000000000000000000..9e4daef4d9be2e445419109a02eaf321cd4d537e
Binary files /dev/null and "b/doc/\350\213\245\344\276\235\347\216\257\345\242\203\344\275\277\347\224\250\346\211\213\345\206\214.docx" differ
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3f83159f39f183391e0a5cc3a291ed9e3ee2f3c3
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,283 @@
+
+
+ 4.0.0
+
+ com.ruoyi
+ ruoyi
+ 3.8.8
+
+ ruoyi
+ http://www.ruoyi.vip
+ 瀛︿俊鑰冭瘯绠$悊绯荤粺
+
+
+ 3.8.8
+ UTF-8
+ UTF-8
+ 1.8
+ 3.1.1
+ 5.3.33
+ 5.7.12
+ 1.2.23
+ 1.21
+ 3.0.0
+ 2.3.3
+ 1.4.7
+ 2.0.43
+ 6.6.1
+ 2.13.0
+ 4.1.2
+ 2.3
+ 0.9.1
+ 2.8.0
+
+
+
+
+
+
+ com.github.kuaidi100-api
+ sdk
+ 1.0.6
+
+
+ commons-httpclient
+ commons-httpclient
+ 3.1
+
+
+
+
+ org.json
+ json
+ 20160212
+
+
+
+
+ com.github.wechatpay-apiv3
+ wechatpay-apache-httpclient
+ 0.4.9
+
+
+
+
+ com.github.javen205
+ IJPay-WxPay
+ ${ijapy.version}
+
+
+
+
+ com.github.javen205
+ IJPay-AliPay
+ ${ijapy.version}
+
+
+
+ com.alipay.sdk
+ alipay-sdk-java
+ 4.10.209.ALL
+
+
+
+
+ org.springframework
+ spring-framework-bom
+ ${spring-framework.version}
+ pom
+ import
+
+
+
+
+ org.springframework.security
+ spring-security-bom
+ ${spring-security.version}
+ pom
+ import
+
+
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ 2.5.15
+ pom
+ import
+
+
+
+
+ com.alibaba
+ druid-spring-boot-starter
+ ${druid.version}
+
+
+
+
+ eu.bitwalker
+ UserAgentUtils
+ ${bitwalker.version}
+
+
+
+
+ com.github.pagehelper
+ pagehelper-spring-boot-starter
+ ${pagehelper.boot.version}
+
+
+
+
+ com.github.oshi
+ oshi-core
+ ${oshi.version}
+
+
+
+
+ io.springfox
+ springfox-boot-starter
+ ${swagger.version}
+
+
+ io.swagger
+ swagger-models
+
+
+
+
+
+
+ commons-io
+ commons-io
+ ${commons.io.version}
+
+
+
+
+ org.apache.poi
+ poi-ooxml
+ ${poi.version}
+
+
+
+
+ org.apache.velocity
+ velocity-engine-core
+ ${velocity.version}
+
+
+
+
+ com.alibaba.fastjson2
+ fastjson2
+ ${fastjson.version}
+
+
+
+
+ io.jsonwebtoken
+ jjwt
+ ${jwt.version}
+
+
+
+
+ pro.fessional
+ kaptcha
+ ${kaptcha.version}
+
+
+
+
+ com.ruoyi
+ ruoyi-quartz
+ ${ruoyi.version}
+
+
+
+
+ com.ruoyi
+ ruoyi-generator
+ ${ruoyi.version}
+
+
+
+
+ com.ruoyi
+ ruoyi-framework
+ ${ruoyi.version}
+
+
+
+
+ com.ruoyi
+ ruoyi-system
+ ${ruoyi.version}
+
+
+
+
+ com.ruoyi
+ ruoyi-common
+ ${ruoyi.version}
+
+
+
+
+
+
+ ruoyi-admin
+ ruoyi-framework
+ ruoyi-system
+ ruoyi-quartz
+ ruoyi-generator
+ ruoyi-common
+
+ pom
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.1
+
+ ${java.version}
+ ${java.version}
+ ${project.build.sourceEncoding}
+
+
+
+
+
+
+
+ public
+ aliyun nexus
+ https://maven.aliyun.com/repository/public
+
+ true
+
+
+
+
+
+
+ public
+ aliyun nexus
+ https://maven.aliyun.com/repository/public
+
+ true
+
+
+ false
+
+
+
+
+
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cc1af7480d2d9270acc16fe6c0010d673d6cf565
--- /dev/null
+++ b/ruoyi-admin/pom.xml
@@ -0,0 +1,128 @@
+
+
+
+ ruoyi
+ com.ruoyi
+ 3.8.8
+
+ 4.0.0
+ jar
+ ruoyi-admin
+
+
+ web鏈嶅姟鍏ュ彛
+
+
+
+
+ com.github.kuaidi100-api
+ sdk
+ 1.0.6
+
+
+ commons-httpclient
+ commons-httpclient
+ 3.1
+
+
+
+
+ org.json
+ json
+ 20160212
+
+
+
+
+ com.github.javen205
+ IJPay-WxPay
+ ${ijapy.version}
+
+
+
+
+ com.alipay.sdk
+ alipay-sdk-java
+ 4.40.8.ALL
+
+
+
+
+ org.springframework.boot
+ spring-boot-devtools
+ true
+
+
+
+
+ io.springfox
+ springfox-boot-starter
+
+
+
+
+ io.swagger
+ swagger-models
+ 1.6.2
+
+
+
+
+ mysql
+ mysql-connector-java
+
+
+
+
+ com.ruoyi
+ ruoyi-framework
+
+
+
+
+ com.ruoyi
+ ruoyi-quartz
+
+
+
+
+ com.ruoyi
+ ruoyi-generator
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ 2.5.15
+
+ true
+ true
+
+
+
+
+ repackage
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-war-plugin
+ 3.1.0
+
+ false
+ ${project.artifactId}
+
+
+
+ ${project.artifactId}
+
+
+
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
new file mode 100644
index 0000000000000000000000000000000000000000..3e7e86c5277571185a7ff06b32d744b51edba53a
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
@@ -0,0 +1,32 @@
+package com.ruoyi;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+/**
+ * 鍚姩绋嬪簭
+ *
+ * @author ruoyi
+ */
+@EnableScheduling
+@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
+public class RuoYiApplication
+{
+ public static void main(String[] args)
+ {
+ // System.setProperty("spring.devtools.restart.enabled", "false");
+ SpringApplication.run(RuoYiApplication.class, args);
+ System.out.println("(鈾モ棤鈥库棤)锞夛緸 瀛︿俊鑰冭瘯鍚姩鎴愬姛 醿(麓凇`醿)锞 \n" +
+ " .-------. ____ __ \n" +
+ " | _ _ \\ \\ \\ / / \n" +
+ " | ( ' ) | \\ _. / ' \n" +
+ " |(_ o _) / _( )_ .' \n" +
+ " | (_,_).' __ ___(_ o _)' \n" +
+ " | |\\ \\ | || |(_,_)' \n" +
+ " | | \\ `' /| `-' / \n" +
+ " | | \\ / \\ / \n" +
+ " ''-' `'-' `-..-' ");
+ }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java
new file mode 100644
index 0000000000000000000000000000000000000000..6de67dc76ba298f6754543d61cc16735d5bef29a
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java
@@ -0,0 +1,18 @@
+package com.ruoyi;
+
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+
+/**
+ * web瀹瑰櫒涓繘琛岄儴缃
+ *
+ * @author ruoyi
+ */
+public class RuoYiServletInitializer extends SpringBootServletInitializer
+{
+ @Override
+ protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
+ {
+ return application.sources(RuoYiApplication.class);
+ }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/common/ApiCommonController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/common/ApiCommonController.java
new file mode 100644
index 0000000000000000000000000000000000000000..adb946e87371e48fc27bae30d2b5a86de2924853
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/common/ApiCommonController.java
@@ -0,0 +1,341 @@
+package com.ruoyi.hezhi.api.common;
+
+import cn.hutool.core.lang.Snowflake;
+import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.ServiceResponseEnum;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.qiniu.QiNiuUploadUtils;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.ImgUpload;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.file.FileUtils;
+import com.ruoyi.common.utils.file.MimeTypeUtils;
+import com.ruoyi.common.utils.uuid.Seq;
+import com.ruoyi.hezhi.domain.dto.BannerDTO;
+import com.ruoyi.hezhi.domain.vo.*;
+import com.ruoyi.hezhi.service.*;
+import com.ruoyi.system.service.ISysDictDataService;
+import io.swagger.annotations.Api;
+import org.apache.commons.io.FilenameUtils;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.InputStream;
+import java.math.BigInteger;
+import java.security.MessageDigest;
+import java.util.*;
+
+/**
+ * @Author: cc
+ * @Date: 2024/4/2
+ * @Description:閫氱敤API
+ */
+@Api("閫氱敤")
+@RestController
+@RequestMapping("/api/common")
+public class ApiCommonController {
+ @Resource
+ private QiNiuUploadUtils qiNiuUploadUtils;
+
+ @Resource
+ private ITbBannerService bannerService;
+
+ @Resource
+ private ITbNewsService newsService;
+
+ @Resource
+ private ITbTrendsService tbTrendsService;
+
+ @Resource
+ private ITbCaseTypeService caseTypeService;
+
+ @Resource
+ private ITbCaseService caseService;
+
+ @Resource
+ private ITbNoticeService noticeService;
+
+ @Resource
+ private ITbTeacherService tbTeacherService;
+
+ @Resource
+ private ISysDictDataService dictDataService;
+
+ private static final String FILE_DELIMETER = ",";
+
+ /**
+ * 鑾峰彇瀛楀吀鍙傛暟鍒楄〃
+ * @param paramType 瀛楀吀绫诲瀷锛0-浼佷笟瑙勬ā锛
+ * @return 缁撴灉
+ */
+ @GetMapping("/getDictParamList")
+ public AjaxResult getDictParamList(String paramType){
+ List dictParamList = dictDataService.getDictParamList(paramType);
+ return AjaxResult.success(dictParamList);
+ }
+
+ // /**
+ // * 閫氱敤涓婁紶璇锋眰锛堟湰鍦板崟涓級
+ // */
+ // @RepeatSubmit
+ // @PostMapping("/uploadImage")
+ // public AjaxResult uploadImage(MultipartFile file){
+ // if (file.isEmpty()){
+ // throw new ServiceException(ServiceResponseEnum.UPLOAD_FILE_NOT_NULL);
+ // }
+ // try{
+ // // 鎺ュ彛杩斿洖鍙傛暟
+ // Map returnMap = new HashMap<>();
+ //
+ // // 鏂囦欢涓婁紶鍚嶇О
+ // String fileUploadName = qiNiuUploadUtils.getFileUploadName(file);
+ // // 涓婁紶锛堝帇缂╁悗鍥剧墖锛
+ // String url = qiNiuUploadUtils.uploadByte(QiNiuUploadUtils.getZipImage(file), fileUploadName);
+ // if (StringUtils.isBlank(url)){
+ // throw new ServiceException(ServiceResponseEnum.UPLOAD_FILE_FAILED);
+ // }
+ // returnMap.put("imageUrl", url);
+ // return AjaxResult.success(returnMap);
+ // }catch (Exception e){
+ // e.printStackTrace();
+ // return AjaxResult.error(Constants.EXCEPTION_MSG);
+ // }
+ // }
+
+ /**
+ * 閫氱敤涓婁紶璇锋眰锛堜竷鐗涗簯鍗曚釜锛
+ */
+ // @RepeatSubmit
+ @PostMapping("/uploadImage")
+ public AjaxResult uploadImage(MultipartFile file){
+ if (file.isEmpty()){
+ throw new ServiceException(ServiceResponseEnum.UPLOAD_FILE_NOT_NULL);
+ }
+ try{
+ String fileName = null;
+
+ // 鎺ュ彛杩斿洖鍙傛暟
+ String originalFilename = file.getOriginalFilename();
+ Map returnMap = new HashMap<>();
+
+ // 鏂囦欢鍚嶇О
+ String key = StringUtils.format("{}/{}/{}_{}.{}", "xxks", DateUtils.datePath(),
+ md5HashCode(file.getInputStream()), Seq.getId(Seq.uploadSeqType), getExtension(file));
+
+ String imagePath = new ImgUpload().upload(file.getBytes(), key);
+ if (StringUtils.isBlank(imagePath)) {
+ return AjaxResult.error("涓婁紶澶辫触");
+ }
+ returnMap.put("fileName", originalFilename);
+ returnMap.put("url", imagePath);
+ return AjaxResult.success(returnMap);
+ }catch (Exception e){
+ e.printStackTrace();
+ return AjaxResult.error(Constants.EXCEPTION_MSG);
+ }
+ }
+
+ /**
+ * java鑾峰彇鏂囦欢鐨刴d5鍊
+ * @param fis 杈撳叆娴
+ * @return 缁撴灉
+ */
+ public static String md5HashCode(InputStream fis) {
+ try {
+ //鎷垮埌涓涓狹D5杞崲鍣,濡傛灉鎯充娇鐢⊿HA-1鎴朣HA-256锛屽垯浼犲叆SHA-1,SHA-256
+ MessageDigest md = MessageDigest.getInstance("MD5");
+
+ //鍒嗗娆″皢涓涓枃浠惰鍏ワ紝瀵逛簬澶у瀷鏂囦欢鑰岃█锛屾瘮杈冩帹鑽愯繖绉嶆柟寮忥紝鍗犵敤鍐呭瓨姣旇緝灏戙
+ byte[] buffer = new byte[1024];
+ int length = -1;
+ while ((length = fis.read(buffer, 0, 1024)) != -1) {
+ md.update(buffer, 0, length);
+ }
+ fis.close();
+ //杞崲骞惰繑鍥炲寘鍚16涓厓绱犲瓧鑺傛暟缁,杩斿洖鏁板艰寖鍥翠负-128鍒127
+ byte[] md5Bytes = md.digest();
+ BigInteger bigInt = new BigInteger(1, md5Bytes);//1浠h〃缁濆鍊
+ return bigInt.toString(16);//杞崲涓16杩涘埗
+ } catch (Exception e) {
+ e.printStackTrace();
+ return "";
+ }
+ }
+
+ /**
+ * 鑾峰彇鏂囦欢鍚嶇殑鍚庣紑
+ *
+ * @param file 琛ㄥ崟鏂囦欢
+ * @return 鍚庣紑鍚
+ */
+ public static String getExtension(MultipartFile file)
+ {
+ String extension = FilenameUtils.getExtension(file.getOriginalFilename());
+ if (org.apache.commons.lang3.StringUtils.isEmpty(extension))
+ {
+ extension = MimeTypeUtils.getExtension(Objects.requireNonNull(file.getContentType()));
+ }
+ return extension;
+ }
+
+ /**
+ * 閫氱敤涓婁紶璇锋眰锛堝涓級
+ */
+ @PostMapping("/uploadFiles")
+ public AjaxResult uploadFiles(List files) throws Exception
+ {
+ try
+ {
+ // 涓婁紶鏂囦欢璺緞
+ // String filePath = RuoYiConfig.getUploadPath();
+ List urls = new ArrayList();
+ List fileNames = new ArrayList();
+ List newFileNames = new ArrayList();
+ List originalFilenames = new ArrayList();
+ for (MultipartFile file : files)
+ {
+ // 鏂囦欢涓婁紶鍚嶇О
+ String fileUploadName = qiNiuUploadUtils.getFileUploadName(file);
+ // 涓婁紶锛堝帇缂╁悗鍥剧墖锛
+ String url = qiNiuUploadUtils.uploadByte(file.getBytes(), new Snowflake(0, 0).nextIdStr() +"_"+fileUploadName);
+ if (StringUtils.isBlank(url)){
+ throw new ServiceException("涓婁紶澶辫触");
+ }
+ urls.add(url);
+ fileNames.add(fileUploadName);
+ newFileNames.add(FileUtils.getName(fileUploadName));
+ originalFilenames.add(file.getOriginalFilename());
+ }
+ AjaxResult ajax = AjaxResult.success();
+ ajax.put("urls", StringUtils.join(urls, FILE_DELIMETER));
+ ajax.put("fileNames", StringUtils.join(fileNames, FILE_DELIMETER));
+ ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER));
+ ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER));
+ return ajax;
+ }
+ catch (Exception e)
+ {
+ return AjaxResult.error(e.getMessage());
+ }
+ }
+
+
+ /**
+ * 鏌ヨ杞挱鍥鹃氱敤
+ * @return 缁撴灉
+ */
+ @GetMapping("/selectBannerList")
+ public AjaxResult selectBannerList(BannerDTO banner){
+ List result = bannerService.selectBannerListForXcxCommon(banner);
+ return AjaxResult.success(result);
+ }
+
+ /**
+ * 鏌ヨ鏂伴椈鍒楄〃
+ * @return 缁撴灉
+ */
+ @GetMapping("/selectNewsList")
+ public AjaxResult selectNewsList(){
+ List list = newsService.getNewsList();
+ return AjaxResult.success(list);
+ }
+
+ /**
+ * 鑾峰彇鏂伴椈璇︽儏
+ * @return 缁撴灉
+ */
+ @GetMapping("/selectNewsInfo")
+ public AjaxResult selectNewsInfo(@RequestParam Long id){
+ return AjaxResult.success(newsService.getDetail(id));
+ }
+
+ /**
+ * 鏌ヨ鍔ㄦ佸垪琛
+ * @return 缁撴灉
+ */
+ @GetMapping("/selectTrendsList")
+ public AjaxResult selectTrendsList(){
+ List list = tbTrendsService.getTrendsVoList();
+ return AjaxResult.success(list);
+ }
+
+ /**
+ * 鑾峰彇鍔ㄦ佽鎯
+ * @return 缁撴灉
+ */
+ @GetMapping("/selectTrendsInfo")
+ public AjaxResult selectTrendsInfo(@RequestParam Long id){
+ return AjaxResult.success(tbTrendsService.getDetail(id));
+ }
+
+ /**
+ * 鏌ヨ妗堜緥鍒嗙被鍒楄〃
+ * @return 缁撴灉
+ */
+ @GetMapping("/selectCaseTypeList")
+ public AjaxResult selectCaseTypeList(){
+ List list = caseTypeService.getCaseTypeList();
+ return AjaxResult.success(list);
+ }
+
+ /**
+ * 鏌ヨ妗堜緥鍒楄〃 by鍒嗙被
+ * @param typeId
+ * @return
+ */
+ @GetMapping("/selectCaseList")
+ public AjaxResult selectCaseList(@RequestParam Long typeId){
+ List list = caseService.selectCaseListByType(typeId);
+ return AjaxResult.success(list);
+ }
+
+ /**
+ * 鑾峰彇妗堜緥璇︽儏
+ * @return 缁撴灉
+ */
+ @GetMapping("/selectCaseInfo")
+ public AjaxResult selectCaseInfo(@RequestParam Long id){
+ return AjaxResult.success(caseService.getDetail(id));
+ }
+
+ /**
+ * 鏌ヨ鍏憡鍒楄〃
+ * @return 缁撴灉
+ */
+ @GetMapping("/selectNoticeList")
+ public AjaxResult selectNoticeList(){
+ List list = noticeService.getNoticeList();
+ return AjaxResult.success(list);
+ }
+
+ /**
+ * 鑾峰彇鍏憡璇︽儏
+ * @return 缁撴灉
+ */
+ @GetMapping("/selectNoticeInfo")
+ public AjaxResult selectNoticeInfo(@RequestParam Long id){
+ return AjaxResult.success(noticeService.getDetail(id));
+ }
+
+ /**
+ * 鏌ヨ鏁欏笀鍒楄〃
+ * @return 缁撴灉
+ */
+ @GetMapping("/selectTeacherList")
+ public AjaxResult selectTeacherList(@RequestParam Long typeId){
+ List list = tbTeacherService.selectTeacherListByType(typeId);
+ return AjaxResult.success(list);
+ }
+
+ /**
+ * 鑾峰彇鏁欏笀璇︽儏
+ * @return 缁撴灉
+ */
+ @GetMapping("/selectTeacherInfo")
+ public AjaxResult selectTeacherInfo(@RequestParam Long id){
+ return AjaxResult.success(tbTeacherService.getDetail(id));
+ }
+
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/course/ApiCourseController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/course/ApiCourseController.java
new file mode 100644
index 0000000000000000000000000000000000000000..390b6e5eb6334bc0152a4e4e49a02b9b10fd2229
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/course/ApiCourseController.java
@@ -0,0 +1,158 @@
+package com.ruoyi.hezhi.api.course;
+
+import com.ruoyi.common.annotation.RateLimiter;
+import com.ruoyi.common.annotation.RepeatSubmit;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.qiniu.QiNiuUploadUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.hezhi.domain.TbCourseChapter;
+import com.ruoyi.hezhi.domain.dto.CourseDTO;
+import com.ruoyi.hezhi.domain.dto.CourseEvaluateDTO;
+import com.ruoyi.hezhi.service.ITbCourseChapterService;
+import com.ruoyi.hezhi.service.ITbCourseEvaluateService;
+import com.ruoyi.hezhi.service.ITbCourseService;
+import io.swagger.annotations.Api;
+import org.springframework.validation.BindingResult;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author: LCL
+ * @Date: 2024/9/14
+ * @Description:璇剧▼API
+ */
+@Api("璇剧▼API")
+@RestController
+@RequestMapping("/api/course")
+public class ApiCourseController {
+
+ @Resource
+ private QiNiuUploadUtils qiNiuUploadUtils;
+ @Resource
+ private ITbCourseService courseService;
+ @Resource
+ private ITbCourseEvaluateService courseEvaluateService;
+ @Resource
+ private ITbCourseChapterService courseChapterService;
+
+
+ /**
+ * 鏌ヨ璇剧▼鍒楄〃
+ *
+ * @param params classType 璇剧▼绫诲瀷锛1-鎬濇斂绀鸿寖璇剧▼锛2-绮惧搧鍦ㄧ嚎璇剧▼锛
+ * classId 璇剧▼鍒嗙被ID
+ * beginTime 寮濮嬫椂闂
+ * endTime 缁撴潫鏃堕棿
+ * searchValue 鎼滅储璇
+ * @return success
+ */
+ @GetMapping("/getCourseList")
+ public AjaxResult getCourseList(@RequestParam Map params) {
+ List