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> courseList = courseService.getCourseList(params); + return AjaxResult.success(courseList); + } + + /** + * 鏌ヨ璇剧▼璇︽儏 + * + * @param params courseId 璇剧▼ID + * @return success + */ + @GetMapping("/getCourseInfo") + public AjaxResult getCourseInfo(@RequestParam Map params) { + if (!params.containsKey("courseId") || StringUtils.isBlank(params.get("courseId").toString())) { + return AjaxResult.error("缂哄皯courseId"); + } + // 娴忚閲+1 + courseService.addViewsNum(Long.parseLong(params.get("courseId").toString())); + Map courseInfo = courseService.getCourseInfo(params); + return AjaxResult.success(courseInfo); + } + + /** + * 鏌ヨ璇剧▼璇勪环鍒楄〃 + * + * @param params courseId 璇剧▼ID + * sort 鎺掑簭锛0鎴栦笉浼-鍊掑簭锛1-姝e簭锛 + * @return success + */ + @GetMapping("/getCourseEvaluateList") + public AjaxResult getCourseEvaluateList(@RequestParam Map params) { + List> courseEvaluateList = courseEvaluateService.getCourseEvaluateList(params); + return AjaxResult.success(courseEvaluateList); + } + + /** + * 鏌ヨ璇剧▼璇勪环璇勫垎 + * + * @param params courseId 璇剧▼ID + * @return success + */ + @GetMapping("/getCourseEvaluateScore") + public AjaxResult getCourseEvaluateScore(@RequestParam Map params) { + Map evaluateScore = courseEvaluateService.getCourseEvaluateScore(params); + return AjaxResult.success(evaluateScore); + } + + /** + * 鎻愪氦璇勪环 + * + * @param courseEvaluateDTO + * @return ok + */ + @RepeatSubmit + @RateLimiter(key = "API_submitEvaluation", time = 5, count = 50) + @PostMapping("/submitEvaluation") + public AjaxResult submitEvaluation(@RequestBody @Validated({CourseEvaluateDTO.submitEvaluation.class}) CourseEvaluateDTO courseEvaluateDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return courseEvaluateService.submitEvaluation(courseEvaluateDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鎻愪氦璇勪环寮傚父"); + } + } + + /** + * 绔嬪嵆鍙傚姞 + * + * @param courseDTO + * @return ok + */ + @RepeatSubmit + @RateLimiter(key = "API_joinNow", time = 5, count = 50) + @PostMapping("/joinNow") + public AjaxResult joinNow(@RequestBody @Validated({CourseDTO.joinNow.class}) CourseDTO courseDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return courseService.joinNow(courseDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("绔嬪嵆鍙傚姞寮傚父"); + } + } + + /** + * 鏌ヨ璇剧▼绔犺妭鍒楄〃 + * + * @param params courseId 璇剧▼ID + * @return success + */ + @GetMapping("/getCourseChapterTreeList") + public AjaxResult getCourseChapterTreeList(@RequestParam Map params) { + List chapterTreeList = courseChapterService.getCourseChapterTreeList(Long.parseLong(params.get("courseId").toString())); + return AjaxResult.success(chapterTreeList); + } + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/entity/AliPayBean.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/entity/AliPayBean.java new file mode 100644 index 0000000000000000000000000000000000000000..cc801d5791b1370bdea01759fc25f7f27a05144c --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/entity/AliPayBean.java @@ -0,0 +1,63 @@ +//package com.ruoyi.hezhi.api.entity; +// +//import lombok.Data; +//import org.springframework.beans.factory.annotation.Value; +//import org.springframework.boot.context.properties.ConfigurationProperties; +//import org.springframework.context.annotation.Configuration; +//import org.springframework.stereotype.Component; +// +///** +// * 寰俊鏀粯閰嶇疆 Bean +// * +// * @author lhgg +// * @date 2022/4/25 +// */ +//@Component +//@Data +//@Configuration +//public class AliPayBean { +// +// @Value("${alipay.appId}") +// private String appId; +// +// @Value("${alipay.charset}") +// private String charset; +// +// @Value("${alipay.format}") +// private String format; +// +// /** 绛惧悕绠楁硶 */ +// @Value("${alipay.signType}") +// private String signType; +// +// /** 绉侀挜 */ +// @Value("${alipay.privateKey}") +// private String privateKey; +// +// /** 鍏挜 */ +// @Value("${alipay.publicKey}") +// private String publicKey; +// +// /** 搴旂敤鍏挜璇佷功璺緞 */ +// @Value("${alipay.appCertPath}") +// private String appCertPath; +// +// /** 鏀粯瀹濆叕閽ヨ瘉涔﹁矾寰 */ +// @Value("${alipay.aliPayCertPath}") +// private String aliPayCertPath; +// +// /** 鏀粯瀹濇牴璇佷功璺緞 */ +// @Value("${alipay.aliPayRootCertPath}") +// private String aliPayRootCertPath; +// +// /** 鏀粯璇锋眰鍦板潃 */ +// @Value("${alipay.serverUrl}") +// private String serverUrl; +// +// @Value("${alipay.domain}") +// private String domain; +// +// @Value("${alipay.notifyUrl}") +// private String notifyUrl; +// +//} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/entity/AliPayConfig.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/entity/AliPayConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..ad22017bab32ca1521abb3611476ef810b7a0a31 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/entity/AliPayConfig.java @@ -0,0 +1,38 @@ +package com.ruoyi.hezhi.api.entity; + +import lombok.Data; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + + +@Configuration +@Data +public class AliPayConfig { + + @Value("${alipay.appPay.appId}") + private String appId; + + @Value("${alipay.appPay.url}") + private String url; + + @Value("${alipay.appPay.charset}") + private String charset; + + @Value("${alipay.appPay.format}") + private String format; + + /** 绛惧悕绠楁硶 */ + @Value("${alipay.appPay.signType}") + private String signType; + + @Value("${alipay.appPay.notifyUrl}") + private String notifyUrl; + + /** 绉侀挜 */ + @Value("${alipay.appPay.privateKey}") + private String privateKey; + + /** 鍏挜 */ + @Value("${alipay.appPay.publicKey}") + private String publicKey; +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/entity/AlipayService.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/entity/AlipayService.java new file mode 100644 index 0000000000000000000000000000000000000000..8b4175ff8cf415f8d388e75b5629b6a6b8acb514 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/entity/AlipayService.java @@ -0,0 +1,152 @@ +package com.ruoyi.hezhi.api.entity; + +import com.alipay.api.AlipayApiException; +import com.alipay.api.AlipayClient; +import com.alipay.api.AlipayConfig; +import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.domain.AlipayTradePagePayModel; +import com.alipay.api.domain.AlipayTradeRefundModel; +import com.alipay.api.request.AlipayTradePagePayRequest; +import com.alipay.api.request.AlipayTradeRefundRequest; +import com.alipay.api.response.AlipayTradePagePayResponse; +import com.alipay.api.response.AlipayTradeRefundResponse; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.hezhi.domain.TbMemberOrder; +import com.ruoyi.hezhi.service.ITbMemberOrderService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.springframework.util.ObjectUtils; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.rmi.server.ServerCloneException; +import java.util.Map; + +/** + * 鏀粯瀹濇敮浠 + * @author Wzp + */ +@Component +public class AlipayService { + + private static Logger log = LoggerFactory.getLogger(AlipayService.class); + + @Resource + private AliPayConfig aliPayConfig; + + @Resource + private ITbMemberOrderService memberOrderService; + + public AlipayClient getAlipayClient() throws AlipayApiException { + AlipayConfig alipayConfig = new AlipayConfig(); + alipayConfig.setServerUrl(aliPayConfig.getUrl());// 璁剧疆缃戝叧鍦板潃 + alipayConfig.setAppId(aliPayConfig.getAppId());// 璁剧疆搴旂敤APPID + alipayConfig.setPrivateKey(aliPayConfig.getPrivateKey());// 璁剧疆搴旂敤绉侀挜 + alipayConfig.setFormat("json");// 璁剧疆璇锋眰鏍煎紡锛屽浐瀹氬糺son + alipayConfig.setCharset(aliPayConfig.getCharset());// 璁剧疆瀛楃闆 + alipayConfig.setAlipayPublicKey(aliPayConfig.getPublicKey());// 璁剧疆鏀粯瀹濆叕閽 + alipayConfig.setSignType(aliPayConfig.getSignType());// 璁剧疆绛惧悕绫诲瀷 + return new DefaultAlipayClient(alipayConfig);// 鏋勯燾lient + } + + /** + * 鏀粯瀹濇敮浠樼敓鎴愰浠樺崟 + * @param realPay 鏀粯閲戦 + * @param paySn 鏀粯鍗曞彿 + * @param description 鎻忚堪 + * @return 缁撴灉 + */ + public String aliPaySubmit(BigDecimal realPay, String paySn, String description,Long examId,Long memberUserId) { + try { + // 鍒濆鍖朣DK + AlipayClient alipayClient = getAlipayClient(); + // 鏋勯犺姹傚弬鏁颁互璋冪敤鎺ュ彛 + AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); + AlipayTradePagePayModel model = new AlipayTradePagePayModel(); + + model.setOutTradeNo(paySn);// 璁剧疆鍟嗘埛璁㈠崟鍙 + model.setTotalAmount(realPay.toString());// 璁剧疆璁㈠崟鎬婚噾棰 + model.setSubject(description);// 璁剧疆璁㈠崟鏍囬 + model.setProductCode("FAST_INSTANT_TRADE_PAY");// 璁剧疆浜у搧鐮 + model.setQrPayMode("1");// 璁剧疆PC鎵爜鏀粯鐨勬柟寮 + model.setQrcodeWidth(100L);// 璁剧疆鍟嗘埛鑷畾涔変簩缁寸爜瀹藉害 + model.setRequestFromUrl("https://www.chsie.com.cn/payTheFees?examId="+examId+"&memberUserId="+memberUserId); + + request.setBizModel(model); + request.setNotifyUrl(aliPayConfig.getNotifyUrl()+"/api/pay/aliPayBoilerNotify"); + request.setReturnUrl("https://www.chsie.com.cn/payTheFees?examId="+examId+"&memberUserId="+memberUserId); + + AlipayTradePagePayResponse response = alipayClient.pageExecute(request, "POST"); + // 濡傛灉闇瑕佽繑鍥濭ET璇锋眰锛岃浣跨敤 + if (response.isSuccess()){ + return response.getBody(); + }else { + throw new ServerCloneException("鏀粯瀹濇敮浠樺け璐"); + } + }catch (Exception e){ + e.printStackTrace(); + throw new ServiceException("鏀粯瀹濇敮浠樺紓甯"); + } + } + + /** + * 鏀粯瀹濋娆 + * @param orderSn 璁㈠崟鍙 + * @param payment 鏀粯閲戦 + * @return 缁撴灉 + */ + public String tradeRefund(String orderSn, BigDecimal payment) { + + System.out.println("寮濮嬭皟鐢ㄦ敮浠樺疂閫娆****************"); + try { + //瀹炰緥鍖栧鎴风 + AlipayClient alipayClient = this.getAlipayClient(); + //SDK宸茬粡灏佽鎺変簡鍏叡鍙傛暟锛岃繖閲屽彧闇瑕佷紶鍏ヤ笟鍔″弬鏁般備互涓嬫柟娉曚负sdk鐨刴odel鍏ュ弬鏂瑰紡(model鍜宐iz_content鍚屾椂瀛樺湪鐨勬儏鍐典笅鍙朾iz_content)銆 + AlipayTradeRefundModel refundModel = new AlipayTradeRefundModel(); + refundModel.setOutTradeNo(orderSn); + refundModel.setRefundAmount(payment.toString()); + refundModel.setRefundReason("閫娆"); + //瀹炰緥鍖栧叿浣揂PI瀵瑰簲鐨剅equest绫,绫诲悕绉板拰鎺ュ彛鍚嶇О瀵瑰簲,褰撳墠璋冪敤鎺ュ彛鍚嶇О锛歛lipay.trade.app.pay + AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); + request.setBizModel(refundModel); + AlipayTradeRefundResponse response = alipayClient.certificateExecute(request); + + if (response.isSuccess()){ + log.info("鏀粯瀹濋娆捐皟鐢ㄦ垚鍔" + response); + return "SUCCESS"; + }else{ + log.error("鏀粯瀹濋娆捐皟鐢ㄥけ璐" + response); + return "FAIL"; + } + }catch(Exception e) { + e.printStackTrace(); + log.error("鏀粯瀹濋娆鹃敊璇紒", e.getMessage()); + return "FAIL"; + } + } + + /** + * 鏍¢獙鍥炶皟鍙傛暟 + * @param params 鍙傛暟 + * @return + */ + public String checkParams(Map params) { + // 鏌ヨ璁㈠崟鏄惁鏄湰骞冲彴鐨 + String outTradeNo = params.get("out_trade_no"); + + TbMemberOrder order = memberOrderService.selectOrderByOrderNo(outTradeNo); + if (ObjectUtils.isEmpty(order)) { + return "FAIL"; + } + // 楠岃瘉鍟嗘埛app_id + String appId = params.get("app_id"); + if(! appId.equals(aliPayConfig.getAppId())){ + log.error("app_id 閿欒"); + return "FAIL"; + } + return "success"; + } + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/entity/WxPayBean.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/entity/WxPayBean.java new file mode 100644 index 0000000000000000000000000000000000000000..58c737b2e564007f8ab0548c59151aa725c10f99 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/entity/WxPayBean.java @@ -0,0 +1,83 @@ +package com.ruoyi.hezhi.api.entity; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * 寰俊鏀粯閰嶇疆 Bean + * + * @author lhgg + * @date 2022/4/23 + */ + +@Component +@ConfigurationProperties(prefix = "wxpay") +public class WxPayBean { + + private String appId; + private String appSecret; + private String mchId; + private String partnerKey; + private String certPath; + private String domain; + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId; + } + + public String getAppSecret() { + return appSecret; + } + + public void setAppSecret(String appSecret) { + this.appSecret = appSecret; + } + + public String getMchId() { + return mchId; + } + + public void setMchId(String mchId) { + this.mchId = mchId; + } + + public String getPartnerKey() { + return partnerKey; + } + + public void setPartnerKey(String partnerKey) { + this.partnerKey = partnerKey; + } + + public String getCertPath() { + return certPath; + } + + public void setCertPath(String certPath) { + this.certPath = certPath; + } + + public String getDomain() { + return domain; + } + + public void setDomain(String domain) { + this.domain = domain; + } + + @Override + public String toString() { + return "WxPayBean{" + + "appId='" + appId + '\'' + + ", appSecret='" + appSecret + '\'' + + ", mchId='" + mchId + '\'' + + ", partnerKey='" + partnerKey + '\'' + + ", certPath='" + certPath + '\'' + + ", domain='" + domain + '\'' + + '}'; + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiApplyController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiApplyController.java new file mode 100644 index 0000000000000000000000000000000000000000..b1eefd66a78016479b0544016c99a6f8e767c1cc --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiApplyController.java @@ -0,0 +1,109 @@ +package com.ruoyi.hezhi.api.kaoshi; + +import com.ruoyi.common.annotation.RateLimiter; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.hezhi.domain.dto.ConferenceRegistrationDTO; +import com.ruoyi.hezhi.domain.dto.StudentDTO; +import com.ruoyi.hezhi.domain.dto.StudyCenterDTO; +import com.ruoyi.hezhi.service.ITbConferenceRegistrationService; +import com.ruoyi.hezhi.service.ITbExamRegistrationService; +import com.ruoyi.hezhi.service.ITbStudentService; +import com.ruoyi.hezhi.service.ITbStudyCenterService; +import io.swagger.annotations.Api; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +/** + * @Author: LCL + * @Date: 2024/10/08 + * @Description:閫氱敤API + */ +@Api("鐢宠") +@RestController +@RequestMapping("/api/apply") +public class ApiApplyController { + + @Resource + private ITbStudyCenterService studyCenterService; + @Resource + private ITbStudentService studentService; + @Resource + private ITbConferenceRegistrationService conferenceRegistrationService; + @Resource + private ITbExamRegistrationService examRegistrationService; + + + /** + * 瀛︿範涓績鍏ラ┗ + * + * @param studyCenterDTO + * @return ok + */ + @RepeatSubmit + @RateLimiter(key = "API_joinInStudyCenter", time = 5, count = 50) + @PostMapping("/joinInStudyCenter") + public AjaxResult joinInStudyCenter(@RequestBody @Validated({StudyCenterDTO.joinInStudyCenter.class}) StudyCenterDTO studyCenterDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return studyCenterService.joinInStudyCenter(studyCenterDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("瀛︿範涓績鍏ラ┗寮傚父"); + } + } + + /** + * 瀛﹀憳璁よ瘉 + * + * @param studentDTO + * @return ok + */ + @RepeatSubmit + @RateLimiter(key = "API_authenticationStudent", time = 5, count = 50) + @PostMapping("/authenticationStudent") + public AjaxResult authenticationStudent(@RequestBody @Validated({StudentDTO.authenticationStudent.class}) StudentDTO studentDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return studentService.authenticationStudent(studentDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("瀛﹀憳璁よ瘉寮傚父"); + } + } + + /** + * 鍙備細鎶ュ悕 + * + * @param conferenceRegistrationDTO + * @return ok + */ + @RepeatSubmit + @RateLimiter(key = "API_conferenceRegistration", time = 5, count = 50) + @PostMapping("/conferenceRegistration") + public AjaxResult conferenceRegistration(@RequestBody @Validated({ConferenceRegistrationDTO.conferenceRegistration.class}) ConferenceRegistrationDTO conferenceRegistrationDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return conferenceRegistrationService.conferenceRegistration(conferenceRegistrationDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鍙備細鎶ュ悕寮傚父"); + } + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiClassController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiClassController.java new file mode 100644 index 0000000000000000000000000000000000000000..37bbcc1f30a0e4d4273d3c6dc105666fc3876535 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiClassController.java @@ -0,0 +1,264 @@ +package com.ruoyi.hezhi.api.kaoshi; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.hezhi.domain.vo.DictParamVO; +import com.ruoyi.hezhi.service.*; +import com.ruoyi.system.service.ISysDictDataService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +/** + * @Author: LCL + * @Date: 2024/10/08 + * @Description:閫氱敤API + */ +@Api("鍒嗙被") +@RestController +@RequestMapping("/api/class") +public class ApiClassController { + + @Resource + private ITbCareerClassService tbCareerClassService; + @Resource + private ITbMajorClassService majorClassService; + @Resource + private ITbRegionService regionService; + @Resource + private ITbConfigService configService; + @Resource + private ITbEvaluateAgencyClassService evaluateAgencyClassService; + @Resource + private ITbStudyCenterClassService studyCenterClassService; + @Resource + private ITbContinuingEducationClassService continuingEducationClassService; + @Resource + private ISysDictDataService dictDataService; + @Resource + private ITbDownloadService downloadService; + @Resource + private ITbEnterpriseProgressService enterpriseProgressService; + + + /** + * 鑾峰彇瀛楀吀鍙傛暟鍒楄〃 + * + * @param paramType 瀛楀吀绫诲瀷锛0-浼佷笟瑙勬ā锛 + * @return 缁撴灉 + */ + @GetMapping("/getDictParamList") + public AjaxResult getDictParamList(String paramType) { + List dictParamList = dictDataService.getDictParamList(paramType); + return AjaxResult.success(dictParamList); + } + + /** + * 鑱屼笟鍒嗙被鏍戝垪琛 + * + * @return success + */ + @GetMapping("/getCareerClassTreeList") + public AjaxResult getCareerClassTreeList() { + try { + return AjaxResult.success().put("data", tbCareerClassService.selectTbCareerClassTreeList()); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鑱屼笟鍒嗙被鏍戝垪琛ㄥ紓甯"); + } + } + + /** + * 鑱屼笟鍒嗙被鍒楄〃 + * + * @param params careerId 1-鑱屼笟鎶鑳斤紝2-鑱屼笟鏁欒偛 + * @return success + */ + @GetMapping("/getCareerClassMapList") + public AjaxResult getCareerClassMapList(@RequestParam Map params) { + try { + return AjaxResult.success().put("data", tbCareerClassService.selectTbCareerClassMapList(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鑱屼笟鍒嗙被鍒楄〃寮傚父"); + } + } + + /** + * 涓撲笟鍒嗙被鍒楄〃 + * + * @param params pid + * @return success + */ + @GetMapping("/getMajorClassMapList") + public AjaxResult getMajorClassMapList(@RequestParam Map params) { + try { + return AjaxResult.success().put("data", majorClassService.selectTbMajorClassMapList(params)); + } catch (Exception e) { + e.printStackTrace(); + + return AjaxResult.error("涓撲笟鍒嗙被鍒楄〃寮傚父"); + } + } + + /** + * 涓撲笟鍒嗙被鏍戝垪琛 + * + * @return success + */ + @GetMapping("/getMajorClassTreeList") + public AjaxResult getMajorClassTreeList() { + try { + return AjaxResult.success().put("data", majorClassService.selectTbMajorClassTreeList()); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("涓撲笟鍒嗙被鍒楄〃寮傚父"); + } + } + + /** + * 琛屾斂鍖哄煙鍒楄〃 + * + * @param params pid 涓婄骇ID + * @return success + */ + @GetMapping("/getRegionList") + public AjaxResult getRegionList(@RequestParam Map params) { + try { + return AjaxResult.success().put("data", regionService.getRegionList(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("琛屾斂鍖哄煙鍒楄〃寮傚父"); + } + } + + /** + * 琛屾斂鍖哄煙鏍戝垪琛 + * + * @return success + */ + @GetMapping("/getRegionTreeList") + public AjaxResult getRegionTreeList() { + try { + return AjaxResult.success().put("data", regionService.selectTbRegionTreeList()); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("琛屾斂鍖哄煙鏍戝垪琛ㄥ紓甯"); + } + } + + /** + * 鐩稿叧璁剧疆 + * + * @param params identifying 璁剧疆鏍囪瘑 + * @return ok + */ + @GetMapping("/getConfigInfo") + public AjaxResult getConfigInfo(@RequestParam Map params) { + if (!params.containsKey("identifying") || StringUtils.isBlank(params.get("identifying").toString())) { + return AjaxResult.error("缂哄皯 identifying 璁剧疆鏍囪瘑"); + } + try { + return AjaxResult.success().put("data", configService.getLiveBroadcastInfo(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鐩稿叧璁剧疆寮傚父"); + } + } + + /** + * 璇勪环鏈烘瀯鍒嗙被鍒楄〃 + * + * @param params + * @return success + */ + @GetMapping("/getEvaluateAgencyClassMapList") + public AjaxResult getEvaluateAgencyClassMapList(@RequestParam Map params) { + try { + return AjaxResult.success().put("data", evaluateAgencyClassService.getEvaluateAgencyClassMapList(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("璇勪环鏈烘瀯鍒嗙被鍒楄〃寮傚父"); + } + } + + /** + * 瀛︿範涓績鍒嗙被鍒楄〃 + * + * @param params + * @return success + */ + @GetMapping("/getStudyCenterClassMapList") + public AjaxResult getStudyCenterClassMapList(@RequestParam Map params) { + try { + return AjaxResult.success().put("data", studyCenterClassService.getStudyCenterClassMapList(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("瀛︿範涓績鍒嗙被鍒楄〃寮傚父"); + } + } + + /** + * 缁х画鏁欒偛鍒嗙被鍒楄〃 + * + * @param params + * @return success + */ + @GetMapping("/getContinuingEducationClassMapList") + public AjaxResult getContinuingEducationClassMapList(@RequestParam Map params) { + try { + return AjaxResult.success().put("data", continuingEducationClassService.getContinuingEducationClassMapList(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("缁х画鏁欒偛鍒嗙被鍒楄〃寮傚父"); + } + } + + /** + * 鍦ㄧ嚎涓嬭浇鍒楄〃 + * + * @param pageNum 椤电爜 + * @param pageSize 姣忛〉鏁版嵁閲 + * @param params searchValue 鎼滅储璇 + * @return success + */ + @GetMapping("/getDownloadList") + public AjaxResult getDownloadList(@RequestParam(value = "pageNum", defaultValue = "1", required = false) Integer pageNum, + @RequestParam(value = "pageSize", defaultValue = "100", required = false) Integer pageSize, + @RequestParam Map params) { + try { + PageHelper.startPage(pageNum, pageSize); + List> list = downloadService.getDownloadList(params); + PageInfo> pageInfo = new PageInfo(list); + return AjaxResult.success().put("data", pageInfo); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鍦ㄧ嚎涓嬭浇鍒楄〃寮傚父"); + } + } + + + /** + * 浼佷笟鍘嗙▼鍒楄〃 + * + * @return success + */ + @GetMapping("/getEnterpriseProgressList") + public AjaxResult getEnterpriseProgressList() { + try { + return AjaxResult.success().put("data", enterpriseProgressService.getEnterpriseProgressList()); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("浼佷笟鍘嗙▼鍒楄〃寮傚父"); + } + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiExamController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiExamController.java new file mode 100644 index 0000000000000000000000000000000000000000..28fe19d0ba582135ba8f363565f772032055ad4f --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiExamController.java @@ -0,0 +1,916 @@ +package com.ruoyi.hezhi.api.kaoshi; + +import com.alibaba.fastjson2.JSONObject; +import com.ruoyi.common.annotation.RateLimiter; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.hezhi.domain.*; +import com.ruoyi.hezhi.domain.dto.*; +import com.ruoyi.hezhi.mapper.TbExamSimulateInfoMapper; +import com.ruoyi.hezhi.mapper.TbExamSubjectAnswerMapper; +import com.ruoyi.hezhi.service.*; +import io.swagger.annotations.Api; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * @Author: LCL + * @Date: 2024/10/08 + * @Description:閫氱敤API + */ +@Api("鑰冭瘯") +@RestController +@RequestMapping("/api/exam") +public class ApiExamController { + + @Resource + private ITbExamRegistrationService examRegistrationService; + @Resource + private ITbSubjectWarehouseClassService subjectWarehouseClassService; + @Resource + private ITbExamSubjectService examSubjectService; + @Resource + private ITbMemberSubjectAllService memberSubjectAllService; + @Resource + private ITbMemberSubjectCollectService memberSubjectCollectService; + @Resource + private ITbExamSubjectSimulateService examSubjectSimulateService; + @Resource + private ITbExamSimulateInfoService examSimulateInfoService;; + @Resource + private ITbMemberExamSimulateAllService memberExamSimulateAllService; + @Resource + private ITbExamService examService; + @Resource + private ITbExamSubjectFormalService examSubjectFormalService; + @Resource + private ITbExamFileService examFileService; + @Resource + private TbExamSubjectAnswerMapper examSubjectAnswerMapper; + @Resource + private TbExamSimulateInfoMapper tbExamSimulateInfoMapper; + @Resource + private ITbSubjectWarehouseClassService tbSubjectWarehouseClassService; + @Resource + private ITbExamBatchService tbExamBatchService; + + + /** + * 棰樺簱鍒楄〃 + * + * @param params searchValue 鎼滅储璇 + * @return success + */ + @GetMapping("/getSubjectWarehouseClassList") + public AjaxResult getSubjectWarehouseClassList(@RequestParam Map params) { + try { + return AjaxResult.success().put("data", subjectWarehouseClassService.getSubjectWarehouseClassList(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("棰樺簱鍒楄〃寮傚父"); + } + } + + /** + * 鑰冭瘯鎶ュ悕 + * + * @param examRegistrationDTO + * @return ok + */ + @RepeatSubmit + @RateLimiter(key = "API_examRegistration", time = 5, count = 50) + @PostMapping("/examRegistration") + public AjaxResult examRegistration(@RequestBody @Validated({ExamRegistrationDTO.examRegistration.class}) ExamRegistrationDTO examRegistrationDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return examRegistrationService.examRegistration(examRegistrationDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鑰冭瘯鎶ュ悕寮傚父"); + } + } + + /** + * 鏌ヨ鑰冭瘯鎶ュ悕璇︽儏 + * + * @param params memberUserId 鐢ㄦ埛ID + * examId 鑰冭瘯ID + * @return ok + */ + @GetMapping("/getExamRegistrationInfo") + public AjaxResult getExamRegistrationInfo(@RequestParam Map params) { + try { + return AjaxResult.success().put("data", examRegistrationService.getExamRegistrationInfo(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鏌ヨ鑰冭瘯鎶ュ悕璇︽儏寮傚父"); + } + } + + + /** + * 缁冧範缁熻 + * + * @param params memberUserId 鐢ㄦ埛ID + * majorId 涓撲笟ID + * subjectWarehouseClassId 棰樺簱鍒嗙被ID + * subjectType 棰樼洰绫诲瀷锛1-鍗曢夛紝2-澶氶夛紝3-鍒ゆ柇锛4-璁鸿堪锛 + * practiceType 缁冧範绫诲瀷锛1-椤哄簭缁冧範锛2-涓撻」缁冧範锛3-绔犺妭缁冧範锛4-闅忔満缁冧範锛 + * @return success + */ + @GetMapping("/getPracticeStatistics") + public AjaxResult getPracticeStatistics(@RequestParam Map params) { + try { + // 鍋氬鏁 + String statisticsTrue = "0"; + // 鍋氬姣斾緥 + String statisticsTrueRate = "0"; + // 鍋氶敊鏁 + String statisticsFalse = "0"; + // 鍋氶敊姣斾緥 + String statisticsFalseRate = "0"; + // 鏈仛鏁 + String statisticsUn = "0"; + // 鏈仛姣斾緥 + String statisticsUnRate = "100"; + + // 姝g‘鐜 + String accuracyRate = "0"; + + // 鍋氳繃鐨勯鐩 + String doneNum = "0"; + + // 鏌ヨ鎵鏈夐鐩 + List> list = examSubjectService.queryByParam(params); + // 棰樼洰鎬绘暟 + int allNum = list.size(); + statisticsUn = String.valueOf(allNum); + + if (params.containsKey("memberUserId") && StringUtils.isNotBlank(params.get("memberUserId").toString()) && allNum > 0) { + // 姝g‘棰樻暟锛 褰撳墠棰樼洰缂栧彿 + params.put("status", 1); + int countTrue = memberSubjectAllService.memberSubjectAllCount(params); + statisticsTrue = String.valueOf(countTrue); + statisticsTrueRate = String.valueOf(new BigDecimal(countTrue).divide(new BigDecimal(allNum), 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_EVEN)); + + // 閿欒棰樻暟锛 褰撳墠棰樼洰缂栧彿 + params.put("status", 2); + int countFalse = memberSubjectAllService.memberSubjectAllCount(params); + statisticsFalse = String.valueOf(countFalse); + statisticsFalseRate = String.valueOf(new BigDecimal(countFalse).divide(new BigDecimal(allNum), 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_EVEN)); + // 鏈仛棰樼洰 + int unNum = allNum - countTrue - countFalse; + // 宸插仛棰樼洰 + doneNum = String.valueOf(countTrue + countFalse); + + if (unNum >= 0) { + statisticsUn = String.valueOf(unNum); + statisticsUnRate = String.valueOf(new BigDecimal(statisticsUn).divide(new BigDecimal(allNum), 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_EVEN)); + } + + if (params.containsKey("practiceType") && StringUtils.isNotBlank(params.get("practiceType").toString()) && + params.containsKey("subjectWarehouseClassId") && StringUtils.isNotBlank(params.get("subjectWarehouseClassId").toString()) + ) { + TbMemberSubjectAll subjectAll = new TbMemberSubjectAll(); + subjectAll.setPracticeType(Integer.parseInt(params.get("practiceType").toString())); + subjectAll.setMemberUserId(Long.parseLong(params.get("memberUserId").toString())); + subjectAll.setSubjectWarehouseClassId(Long.parseLong(params.get("subjectWarehouseClassId").toString())); + List allList = memberSubjectAllService.selectMemberSubjectAllList(subjectAll); + int completeNum = allList.size(); + if (completeNum > 0 && countTrue > 0) { + accuracyRate = String.valueOf(new BigDecimal(countTrue).divide(new BigDecimal(completeNum), 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_EVEN)); + } + } + + } + + HashMap map = new HashMap<>(); + map.put("statisticsTrue", statisticsTrue); + map.put("statisticsTrueRate", statisticsTrueRate); + map.put("statisticsFalse", statisticsFalse); + map.put("statisticsFalseRate", statisticsFalseRate); + map.put("statisticsUn", statisticsUn); + map.put("statisticsUnRate", statisticsUnRate); + map.put("accuracyRate", accuracyRate); + map.put("doneNum", doneNum); + map.put("allNum", allNum); + return AjaxResult.success().put("data", map); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 棰樼洰搴忓彿鍒楄〃 + * + * @param params memberUserId 鐢ㄦ埛ID + * majorId 涓撲笟ID + * subjectWarehouseClassId 棰樺簱鍒嗙被ID + * subjectType 棰樼洰绫诲瀷锛1-鍗曢夛紝2-澶氶夛紝3-鍒ゆ柇锛4-璁鸿堪锛 + * practiceType 缁冧範绫诲瀷锛1-椤哄簭缁冧範锛2-涓撻」缁冧範锛3-绔犺妭缁冧範锛4-闅忔満缁冧範锛 + * searchValue 鎼滅储璇 + * @return success + */ + @GetMapping("/getExamSubjectList") + public AjaxResult getExamSubjectList(@RequestParam Map params) { + if (!params.containsKey("memberUserId") || StringUtils.isBlank(params.get("memberUserId").toString())) { + return AjaxResult.error("璇峰厛鐧诲綍"); + } + if (!params.containsKey("practiceType") || StringUtils.isBlank(params.get("practiceType").toString())) { + return AjaxResult.error("缂哄皯 practiceType 缁冧範绫诲瀷"); + } + if (!params.containsKey("courseId") || StringUtils.isBlank(params.get("courseId").toString())) { + return AjaxResult.error("缂哄皯 courseId 璇剧▼"); + } + try { + // 鏌ヨ鎵鏈夐鐩 + List> list = examSubjectService.queryByParam(params); + // 棰樼洰鎬绘暟 + int allNum = list.size(); + // 閿欒棰樻暟锛屾纭鏁帮紝 褰撳墠棰樼洰缂栧彿 + params.put("status", 1); + int countTrue = memberSubjectAllService.memberSubjectAllCount(params); + params.put("status", 2); + int countFalse = memberSubjectAllService.memberSubjectAllCount(params); + + int countNow = 1; + params.remove("status"); + TbMemberSubjectAll memberSubjectAll = memberSubjectAllService.queryMemberSubjectAllByParam(params); + + // 鍋氳繃鐨勯鐩暟 + int completeNum = 0; + if (memberSubjectAll == null) { + + } else { + // int location = memberSubjectAll.getLocation(); + //鍒濆鍖栨暟缁 + List nums = new ArrayList(); + TbMemberSubjectAll subjectAll = new TbMemberSubjectAll(); + subjectAll.setPracticeType(Integer.parseInt(params.get("practiceType").toString())); + subjectAll.setMemberUserId(Long.parseLong(params.get("memberUserId").toString())); + subjectAll.setSubjectWarehouseClassId(Long.parseLong(params.get("subjectWarehouseClassId").toString())); + List allList = memberSubjectAllService.selectMemberSubjectAllList(subjectAll); + completeNum = allList.size(); + + for (TbMemberSubjectAll MSA : allList) { + nums.add(MSA.getLocation().intValue()); + } + // 璁剧疆鏈澶у + int location = Collections.max(nums); + if (location == allNum) { + countNow = location; + } else { + countNow = location + 1; + } + + } + params.clear(); + params.put("allNum", allNum); + params.put("countTrue", countTrue); + params.put("countFalse", countFalse); + params.put("countNow", countNow); + if (allNum < 1 || completeNum < 1 || countTrue < 1) { + params.put("accuracyRate", "0"); + } else { + BigDecimal accuracyRate = new BigDecimal(countTrue).divide(new BigDecimal(completeNum), 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_EVEN); + params.put("accuracyRate", accuracyRate + ""); + } + + if (list.size() > 0) { + for (Map objectMap : list) { + long examSubjectId = Long.parseLong(objectMap.get("examSubjectId").toString()); + // 鏌ヨ绛旀鍒楄〃 + objectMap.put("subjectAnswerList", examSubjectAnswerMapper.selectAnswerList(examSubjectId, null)); + } + } + + params.put("list", list); + return AjaxResult.success().put("data", params); + } catch (Exception e) { + return AjaxResult.error("棰樼洰搴忓彿鍒楄〃寮傚父"); + } + } + + /** + * 棰樼洰璇︽儏 + * + * @param params examSubjectId 棰樼洰ID + * memberUserId 鐢ㄦ埛ID + * practiceType 缁冧範绫诲瀷锛1-椤哄簭缁冧範锛2-涓撻」缁冧範锛3-绔犺妭缁冧範锛4-闅忔満缁冧範锛5-妯℃嫙鑰冭瘯锛6-鑰冭瘯锛 + * answerShow 鏄惁杩斿洖绛旀锛0-涓嶈繑锛1-杩旓級 + * @return success + */ + @GetMapping("/getExamSubjectInfo") + public AjaxResult getExamSubjectInfo(@RequestParam Map params) { + if (!params.containsKey("examSubjectId") || StringUtils.isBlank(params.get("examSubjectId").toString())) { + return AjaxResult.error("缂哄皯 examSubjectId 棰樼洰ID"); + } + try { + return AjaxResult.success().put("data", examSubjectService.getExamSubjectInfo(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("棰樺簱璇︽儏寮傚父"); + } + } + + /** + * 鏀惰棌鎴栧彇娑堟敹钘忛鐩 + * + * @param memberSubjectCollectDTO + * @return ok + */ + @RepeatSubmit + @RateLimiter(key = "API_subjectCollectOrCancelCollect", time = 5, count = 50) + @PostMapping("/subjectCollectOrCancelCollect") + public AjaxResult subjectCollectOrCancelCollect(@RequestBody @Validated({MemberSubjectCollectDTO.subjectCollectOrCancelCollect.class}) MemberSubjectCollectDTO memberSubjectCollectDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return memberSubjectCollectService.subjectCollectOrCancelCollect(memberSubjectCollectDTO); +// return AjaxResult.success(); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鏀惰棌鎴栧彇娑堟敹钘忛鐩紓甯"); + } + } + + /** + * 涓撻」缁冧範锛堣冭瘯鏍囬锛 + * * + * @param params majorId 涓撲笟ID + * @return success + */ + @GetMapping("/getSpecialPracticeList") + public AjaxResult getSpecialPracticeList(@RequestParam Map params) { + try { + return AjaxResult.success().put("data", examSubjectService.getSpecialPracticeList(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("涓撻」缁冧範锛堣冭瘯鏍囬锛夊紓甯"); + } + } + + /** + * 棰樼洰鏁伴噺 + * * + * @param params majorId 涓撲笟ID + * @return success + */ + @GetMapping("/getPracticeListCount") + public AjaxResult getPracticeListCount(@RequestParam Map params) { + try { + return AjaxResult.success().put("data", examSubjectService.getPracticeListCount(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("涓撻」缁冧範锛堣冭瘯鏍囬锛夊紓甯"); + } + } + + /** + * 绔犺妭缁冧範锛堣冭瘯鏍囬锛 + * + * @return success + */ + @GetMapping("/getMajorPracticeList") + public AjaxResult getMajorPracticeList() { + try { + return AjaxResult.success().put("data", examSubjectService.getMajorPracticeList()); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("绔犺妭缁冧範锛堣冭瘯鏍囬锛夊紓甯"); + } + } + + /** + * 缁冧範绛旈 + * + * @param memberSubjectAllDTO + * @return ok + */ + @RepeatSubmit + @RateLimiter(key = "API_subjectPracticeAnswer", time = 5, count = 50) + @PostMapping("/subjectPracticeAnswer") + public AjaxResult subjectPracticeAnswer(@RequestBody @Validated({MemberSubjectAllDTO.subjectPracticeAnswer.class}) MemberSubjectAllDTO memberSubjectAllDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return memberSubjectAllService.subjectPracticeAnswer(memberSubjectAllDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("缁冧範绛旈寮傚父"); + } + } + + /** + * 缁冧範绛旈娓呯┖ + * + * @param memberSubjectAllDTO + * @return ok + */ +// @RepeatSubmit +// @RateLimiter(key = "API_subjectPracticeAnswerClear", time = 5, count = 50) + @PostMapping("/subjectPracticeAnswerClear") + public AjaxResult subjectPracticeAnswerClear(@RequestBody @Validated({MemberSubjectAllDTO.subjectPracticeAnswer.class}) MemberSubjectAllDTO memberSubjectAllDTO, BindingResult bindingResult) { + try { + return memberSubjectAllService.subjectPracticeAnswerClear(memberSubjectAllDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("缁冧範绛旈寮傚父"); + } + } + + /** + * 妯℃嫙鑰冭瘯涓婃鑰冭瘯鐘舵 + * + * @param params memberUserId 鐢ㄦ埛ID + * subjectWarehouseClassId 棰樺簱鍒嗙被ID + * @return success + */ + @GetMapping("/getSimulateSubjectUp") + public AjaxResult getSimulateSubjectUp(@RequestParam Map params) { + if (!params.containsKey("memberUserId") || StringUtils.isBlank(params.get("memberUserId").toString())) { + return AjaxResult.error("璇峰厛鐧诲綍"); + } + if (!params.containsKey("subjectWarehouseClassId") || StringUtils.isBlank(params.get("subjectWarehouseClassId").toString())) { + return AjaxResult.error("缂哄皯 subjectWarehouseClassId 棰樺簱鍒嗙被ID"); + } + try { + return AjaxResult.success().put("data", tbExamSimulateInfoMapper.getSimulateSubjectUp(params)); + } catch (Exception e) { + return AjaxResult.error("妯℃嫙鑰冭瘯涓婃鑰冭瘯鐘舵佸紓甯"); + } + } + + /** + * 妯℃嫙鑰冭瘯棰樼洰搴忓彿鍒楄〃 + * + * @param params memberUserId 鐢ㄦ埛ID + * subjectWarehouseClassId 棰樺簱鍒嗙被ID + * searchValue 鎼滅储璇 + * @return success + */ + @GetMapping("/getSimulateSubjectList") + public AjaxResult getSimulateSubjectList(@RequestParam Map params) { + if (!params.containsKey("memberUserId") || StringUtils.isBlank(params.get("memberUserId").toString())) { + return AjaxResult.error("璇峰厛鐧诲綍"); + } + if (!params.containsKey("courseId") || StringUtils.isBlank(params.get("courseId").toString())) { + return AjaxResult.error("缂哄皯 courseId 璇剧▼ID"); + } + try { + long courseId = Long.parseLong(params.get("courseId").toString()); + TbSubjectWarehouseClass subjectWarehouseClass = subjectWarehouseClassService.getSubjectWarehouseClass(courseId); + if (subjectWarehouseClass == null || subjectWarehouseClass.getSimulationStatus() == 0) { + return AjaxResult.error("妯℃嫙鑰冭瘯鏆傛湭寮鏀"); + } + params.put("subjectWarehouseClassId", subjectWarehouseClass.getSubjectWarehouseClassId()); + // 妯℃嫙鑰冭瘯鑰冪敓淇℃伅 + Map simulateInfo = examSimulateInfoService.getSimulateSubjectAllInfo(params); + + // 鏌ヨ鎵鏈夐鐩 + params.put("examSimulateInfoId", Long.parseLong(simulateInfo.get("examSimulateInfoId").toString())); + List> list = examSubjectSimulateService.getAllTbExamSubjectSimulate(params); + if (list == null || list.isEmpty()) { + return AjaxResult.error("妯℃嫙鑰冭瘯鏆傛湭寮鏀"); + } + // 棰樼洰鎬绘暟 + int allNum = list.size(); + + Integer examStatus = 0; + Integer passStatus = 0; + BigDecimal completeScore = new BigDecimal(0); + + TbExamSimulateInfo simulateInfoId = tbExamSimulateInfoMapper.selectTbExamSimulateInfoByExamSimulateInfoIdRetain(Long.parseLong(simulateInfo.get("examSimulateInfoId").toString())); + if (simulateInfoId != null) { + examStatus = simulateInfoId.getExamStatus(); + passStatus = simulateInfoId.getPassStatus(); + completeScore = simulateInfoId.getCompleteScore(); + } + + HashMap map = new HashMap<>(); + map.put("allNum", allNum); + map.put("simulateInfo", simulateInfo); + map.put("list", list); + + map.put("examStatus", examStatus);// 鑰冭瘯鐘舵侊紙0-鏈紑濮嬶紝1-杩涜涓紝2-宸茬粨鏉燂級 + map.put("passStatus", passStatus);// 閫氳繃鐘舵侊紙0-鏃狅紝1-閫氳繃锛2-鏈氳繃锛 + map.put("completeScore", completeScore);// 寰楀垎 + + return AjaxResult.success().put("data", map); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 妯℃嫙鑰冭瘯绛旈 + * + * @param memberExamSimulateAllDTO + * @return ok + */ + @RepeatSubmit + @RateLimiter(key = "API_subjectSimulateAnswer", time = 5, count = 50) + @PostMapping("/subjectSimulateAnswer") + public AjaxResult subjectSimulateAnswer(@RequestBody @Validated({MemberExamSimulateAllDTO.subjectSimulateAnswer.class}) MemberExamSimulateAllDTO memberExamSimulateAllDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return memberExamSimulateAllService.subjectSimulateAnswer(memberExamSimulateAllDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("妯℃嫙鑰冭瘯绛旈寮傚父"); + } + } + + /** + * 妯℃嫙鑰冭瘯鍋氶鍙嶉鍒楄〃 + * + * @param params memberUserId 鐢ㄦ埛ID + * subjectWarehouseClassId 棰樺簱鍒嗙被ID + * examSimulateInfoId 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏ID + * searchValue 鎼滅储璇 + * @return success + */ + @GetMapping("/getSimulateSubjectFeedbackList") + public AjaxResult getSimulateSubjectFeedbackList(@RequestParam Map params) { + if (!params.containsKey("memberUserId") || StringUtils.isBlank(params.get("memberUserId").toString())) { + return AjaxResult.error("璇峰厛鐧诲綍"); + } + if (!params.containsKey("courseId") || StringUtils.isBlank(params.get("courseId").toString())) { + return AjaxResult.error("缂哄皯 courseId 璇剧▼ID"); + } + if (!params.containsKey("examSimulateInfoId") || StringUtils.isBlank(params.get("examSimulateInfoId").toString())) { + return AjaxResult.error("缂哄皯 examSimulateInfoId 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏ID"); + } + try { + List> allTbExamSubjectSimulate = examSubjectSimulateService.getAllTbExamSubjectSimulate(params); + return AjaxResult.success().put("data", allTbExamSubjectSimulate); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("妯℃嫙鑰冭瘯鍋氶鍙嶉鍒楄〃寮傚父"); + } + } + + /** + * 妯℃嫙鑰冭瘯浜ゅ嵎 + * + * @param memberExamSimulateAllDTO + * @return ok + */ + @RepeatSubmit + @RateLimiter(key = "API_subjectSimulateSubmit", time = 5, count = 50) + @PostMapping("/subjectSimulateSubmit") + public AjaxResult subjectSimulateSubmit(@RequestBody @Validated({MemberExamSimulateAllDTO.subjectSimulateSubmit.class}) MemberExamSimulateAllDTO memberExamSimulateAllDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return examSimulateInfoService.subjectExamSubmit(memberExamSimulateAllDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("妯℃嫙鑰冭瘯浜ゅ嵎寮傚父"); + } + } + + /** + * 姝e紡鑰冭瘯鑰冪敓淇℃伅銆佹彁绀轰俊鎭 + * + * @param params memberUserId 鐢ㄦ埛ID + * examId 鑰冭瘯ID + * searchValue 鎼滅储璇 + * @return success + */ + @GetMapping("/getExamSubjectFormalInfo") + public AjaxResult getExamSubjectFormalInfo(@RequestParam Map params) { + if (!params.containsKey("memberUserId") || StringUtils.isBlank(params.get("memberUserId").toString())) { + return AjaxResult.error("璇峰厛鐧诲綍"); + } + if (!params.containsKey("examId") || StringUtils.isBlank(params.get("examId").toString())) { + return AjaxResult.error("缂哄皯 examId 鑰冭瘯ID"); + } + try { + long memberUserId = Long.parseLong(params.get("memberUserId").toString()); + long examId = Long.parseLong(params.get("examId").toString()); + + TbExamRegistration examRegistration = examRegistrationService.selectTbExamRegistrationByUserIdExamId(memberUserId, examId); + if (examRegistration == null) { + return AjaxResult.error("璇峰厛鎶ュ悕锛侊紒锛"); + } + TbExam exam = examService.selectTbExamByExamId(examId); + if (exam == null) { + return AjaxResult.error("鑰冭瘯淇℃伅寮傚父锛岃鑱旂郴绠$悊鍛橈紒锛侊紒"); + } else { + TbExamBatch tbExamBatch = tbExamBatchService.getByExamIdBatchIndex(exam.getExamId(), examRegistration.getExamBatchIndex()); + Date examStartTime = tbExamBatch.getExamStartTime(); + Date examEndTime = tbExamBatch.getExamEndTime(); + // 鑾峰彇褰撳墠鏃堕棿 + Date currentTime = new Date(); + + // 姣旇緝鏃堕棿 + if (currentTime.after(examEndTime)) { + return AjaxResult.error("鑰冭瘯鏃堕棿銆" + DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", tbExamBatch.getExamStartTime()) + "鑷" + DateUtils.parseDateToStr("", tbExamBatch.getExamEndTime()) + "銆戯紝鑰冭瘯宸茬粨鏉"); + } + if (currentTime.before(examStartTime)) { + return AjaxResult.error("鑰冭瘯鏃堕棿銆" + DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", tbExamBatch.getExamStartTime()) + "鑷" + DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", tbExamBatch.getExamEndTime()) + "銆戯紝鑰冭瘯鏈紑濮"); + } + } + // 姝e紡鑰冭瘯鑰冪敓鍙婅冭瘯淇℃伅 + Map simulateInfo = examSimulateInfoService.getFormalSubjectAllInfo(params); + + return AjaxResult.success(simulateInfo); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("姝e紡鑰冭瘯鑰冪敓淇℃伅銆佹彁绀轰俊鎭紓甯"); + } + } + + /** + * 姝e紡鑰冭瘯棰樼洰搴忓彿鍒楄〃锛堢偣寮濮嬬瓟棰橈級 + * + * @param params memberUserId 鐢ㄦ埛ID + * examId 鑰冭瘯ID + * isAgain 鏄惁琛ヨ冿細0-鍚︼紝1-鏄 + * examSimulateInfoId 鑰冭瘯鑰冪敓璇︽儏ID + * @return success + */ + @GetMapping("/getExamSubjectFormalList") + public AjaxResult getExamSubjectFormalList(@RequestParam Map params) { + if (!params.containsKey("memberUserId") || StringUtils.isBlank(params.get("memberUserId").toString())) { + return AjaxResult.error("璇峰厛鐧诲綍"); + } + if (!params.containsKey("examId") || StringUtils.isBlank(params.get("examId").toString())) { + return AjaxResult.error("缂哄皯 examId 鑰冭瘯ID"); + } + // if (!params.containsKey("isAgain") || StringUtils.isBlank(params.get("isAgain").toString())) { + // return AjaxResult.error("缂哄皯 isAgain 鏄惁琛ヨ"); + // } + if (!params.containsKey("examSimulateInfoId") || StringUtils.isBlank(params.get("examSimulateInfoId").toString())) { + return AjaxResult.error("缂哄皯 examSimulateInfoId 鑰冭瘯鑰冪敓璇︽儏ID"); + } + Long memberUserId = MapUtils.getLong(params, "memberUserId"); + Long examId = MapUtils.getLong(params, "examId"); + try { + TbExam exam = examService.selectTbExamByExamId(Long.parseLong(params.get("examId").toString())); + if (ObjectUtils.isEmpty(exam)) { + return AjaxResult.error("鑰冭瘯淇℃伅寮傚父锛岃鑱旂郴绠$悊鍛橈紒锛侊紒"); + } + + TbExamRegistration examRegistration = examRegistrationService.selectTbExamRegistrationByUserIdExamId(memberUserId, examId); + TbExamBatch tbExamBatch = tbExamBatchService.getByExamIdBatchIndex(exam.getExamId(), examRegistration.getExamBatchIndex()); + + Date examStartTime = tbExamBatch.getExamStartTime(); + Date examEndTime = tbExamBatch.getExamEndTime(); + // 鑾峰彇褰撳墠鏃堕棿 + Date currentTime = new Date(); + + // 姣旇緝鏃堕棿 + if (currentTime.after(examEndTime)) { + return AjaxResult.error("鑰冭瘯鏃堕棿銆" + DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", tbExamBatch.getExamStartTime()) + "鑷" + DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", tbExamBatch.getExamEndTime()) + "銆戯紝鑰冭瘯宸茬粨鏉"); + } + if (examStartTime.after(currentTime)) { + return AjaxResult.error("鑰冭瘯鏃堕棿銆" + DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", tbExamBatch.getExamStartTime()) + "鑷" + DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", tbExamBatch.getExamEndTime()) + "銆戯紝鑰冭瘯鏈紑濮"); + } + + // 鏌ヨ鎵鏈夐鐩 + List> list = examSubjectFormalService.getAllTbExamSubjectFormal(params); + if (list == null || list.isEmpty()) { + return AjaxResult.error("鑰冭瘯鏆傛湭寮鏀"); + } + // 棰樼洰鎬绘暟 + int allNum = list.size(); + + HashMap map = new HashMap<>(); + map.put("allNum", allNum); + map.put("list", list); + + return AjaxResult.success().put("data", map); + } catch (Exception e) { + return AjaxResult.error("姝e紡鑰冭瘯棰樼洰搴忓彿鍒楄〃锛堢偣寮濮嬬瓟棰橈級寮傚父"); + } + } + + /** + * 姝e紡鑰冭瘯鍋氶鍙嶉鍒楄〃 + * + * @param params memberUserId 鐢ㄦ埛ID + * examId 鑰冭瘯ID + * isAgain 鏄惁琛ヨ冿細0-鍚︼紝1-鏄 + * examSimulateInfoId 鑰冭瘯鑰冪敓璇︽儏ID + * @return success + */ + @GetMapping("/getExamSubjectFormalFeedbackList") + public AjaxResult getExamSubjectFormalFeedbackList(@RequestParam Map params) { + if (!params.containsKey("memberUserId") || StringUtils.isBlank(params.get("memberUserId").toString())) { + return AjaxResult.error("璇峰厛鐧诲綍"); + } + if (!params.containsKey("examId") || StringUtils.isBlank(params.get("examId").toString())) { + return AjaxResult.error("缂哄皯 examId 鑰冭瘯ID"); + } + // if (!params.containsKey("isAgain") || StringUtils.isBlank(params.get("isAgain").toString())) { + // return AjaxResult.error("缂哄皯 isAgain 鏄惁琛ヨ"); + // } + if (!params.containsKey("examSimulateInfoId") || StringUtils.isBlank(params.get("examSimulateInfoId").toString())) { + return AjaxResult.error("缂哄皯 examSimulateInfoId 鑰冭瘯鑰冪敓璇︽儏ID"); + } + try { + return AjaxResult.success().put("data", examSubjectFormalService.getAllTbExamSubjectFormal(params)); + } catch (Exception e) { + return AjaxResult.error("姝e紡鑰冭瘯鍋氶鍙嶉鍒楄〃寮傚父"); + } + } + + /** + * 姝e紡鑰冭瘯鐐瑰嚮纭畾寮濮嬬瓟棰 + * + * @param memberExamSimulateAllDTO + * @return ok + */ + @RepeatSubmit + @RateLimiter(key = "API_subjectFormalClickOK", time = 5, count = 50) + @PostMapping("/subjectFormalClickOK") + public AjaxResult subjectFormalClickOK(@RequestBody @Validated({MemberExamSimulateAllDTO.subjectFormalClickOK.class}) MemberExamSimulateAllDTO memberExamSimulateAllDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return memberExamSimulateAllService.subjectFormalClickOK(memberExamSimulateAllDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("姝e紡鑰冭瘯鐐瑰嚮纭畾寮濮嬬瓟棰樺紓甯"); + } + } + + /** + * 姝e紡鑰冭瘯绛旈 + * + * @param memberExamSimulateAllDTO + * @return ok + */ + @RateLimiter(key = "API_subjectFormalAnswer", time = 5, count = 50) + @PostMapping("/subjectFormalAnswer") + public AjaxResult subjectFormalAnswer(@RequestBody @Validated({MemberExamSimulateAllDTO.subjectFormalAnswer.class}) MemberExamSimulateAllDTO memberExamSimulateAllDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return memberExamSimulateAllService.subjectFormalAnswer(memberExamSimulateAllDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("姝e紡鑰冭瘯绛旈寮傚父"); + } + } + + /** + * 姝e紡鑰冭瘯浜ゅ嵎 + * + * @param memberExamSimulateAllDTO + * @return ok + */ + @RepeatSubmit + @RateLimiter(key = "API_subjectFormalSubmit", time = 5, count = 50) + @PostMapping("/subjectFormalSubmit") + public AjaxResult subjectFormalSubmit(@RequestBody @Validated({MemberExamSimulateAllDTO.subjectFormalSubmit.class}) MemberExamSimulateAllDTO memberExamSimulateAllDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return examSimulateInfoService.subjectExamSubmit(memberExamSimulateAllDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("姝e紡鑰冭瘯浜ゅ嵎寮傚父"); + } + } + + /** + * 姝e紡鑰冭瘯琛ヨ + * + * @param memberExamSimulateAllDTO + * @return ok + */ + @RepeatSubmit + @RateLimiter(key = "API_subjectFormalAgain", time = 5, count = 50) + @PostMapping("/subjectFormalAgain") + public AjaxResult subjectFormalAgain(@RequestBody @Validated({MemberExamSimulateAllDTO.subjectFormalAgain.class}) MemberExamSimulateAllDTO memberExamSimulateAllDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return examSimulateInfoService.subjectFormalAgain(memberExamSimulateAllDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("姝e紡鑰冭瘯琛ヨ冨紓甯"); + } + } + + /** + * 姝e紡鑰冭瘯鎷嶆憚 + * + * @param examFileDTO + * @return ok + */ + @RepeatSubmit + @RateLimiter(key = "API_subjectFormalPhotograph", time = 5, count = 50) + @PostMapping("/subjectFormalPhotograph") + public AjaxResult subjectFormalPhotograph(@RequestBody @Validated({ExamFileDTO.subjectFormalAgain.class}) ExamFileDTO examFileDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return examFileService.subjectFormalPhotograph(examFileDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("姝e紡鑰冭瘯鎷嶆憚寮傚父"); + } + } + + /** + * 鎶ュ悕鑰冭瘯鍗冲皢寮濮嬪脊绐楀垪琛 + * + * @param params memberUserId 鐢ㄦ埛ID + * @return success + */ + @GetMapping("/getStartNowPopupList") + public AjaxResult getStartNowPopupList(@RequestParam Map params) { + try { + return AjaxResult.success().put("data", examRegistrationService.getStartNowPopupList(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鎶ュ悕鑰冭瘯鍗冲皢寮濮嬪脊绐楀垪琛ㄥ紓甯"); + } + } + + /** + * 閿欓鏈垪琛 + * + * @param pageNum 椤电爜 + * @param pageSize 姣忛〉鏁版嵁閲 + * @param params type 閫氱煡绫诲瀷锛0-閫氱煡鍏憡锛1-涓撻涓撴爮锛2-鏀跨瓥瑙h锛3-濯掍綋鑱氱劍锛4-鏁欒偛璇勮锛 + * typeTwo 鏍规嵁type浜岀骇绫诲瀷锛坱ype=1锛1-涓撻涓撴爮1,2-涓撻涓撴爮2,3-涓撻涓撴爮3锛 + * publisherType 0-鎬婚儴瀛︿範涓績閫氱煡锛1-鍦版柟瀛︿範涓績閫氱煡 + * searchValue 鎼滅储璇 + * @return success + */ + // @GetMapping("/getNoticeList") + // public AjaxResult getNoticeList(@RequestParam(value = "pageNum", defaultValue = "1", required = false) Integer pageNum, + // @RequestParam(value = "pageSize", defaultValue = "100", required = false) Integer pageSize, + // @RequestParam Map params) { + // try { + // PageHelper.startPage(pageNum, pageSize); + // List> list = noticeService.getPCNoticeList(params); + // PageInfo> pageInfo = new PageInfo(list); + // return AjaxResult.success().put("data", pageInfo); + // } catch (Exception e) { + // e.printStackTrace(); + // return AjaxResult.error("閿欓鏈垪琛ㄥ紓甯"); + // } + // } + + /** + * 鑾峰彇鑰冭瘯鎶ュ悕琛 + * @param type 1-鍑嗚冭瘉锛4-璇佷功锛10-鎶ュ悕琛紝11-鎴愮哗鍗 + * @param memberUserId 鐢ㄦ埛ID + * @param examRegistrationId 鑰冭瘯鎶ュ悕ID + * @return 缁撴灉 + */ + @GetMapping("/getReportFormView") + public AjaxResult getReportFormView(@RequestParam(required = false) Long type, + @RequestParam(required = false) Long memberUserId, + @RequestParam(required = false) Long examRegistrationId){ + if (null == type || null == memberUserId || null == examRegistrationId){ + throw new ServiceException("鍙傛暟閿欒"); + } + JSONObject reportFormView = examRegistrationService.getReportFormView(type, memberUserId, examRegistrationId); + return AjaxResult.success(reportFormView); + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiListController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiListController.java new file mode 100644 index 0000000000000000000000000000000000000000..40499ac9d4c6189c1bbec1c19d7a0d4ab0e0bf36 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiListController.java @@ -0,0 +1,128 @@ +package com.ruoyi.hezhi.api.kaoshi; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.hezhi.service.*; +import com.ruoyi.system.service.ISysDictDataService; +import io.swagger.annotations.Api; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.Map; + +/** + * @Author: LCL + * @Date: 2024/10/08 + * @Description:閫氱敤API + */ +@Api("List") +@RestController +@RequestMapping("/api/list") +public class ApiListController { + + @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 teacherService; + @Resource + private ISysDictDataService dictDataService; + @Resource + private ITbCareerClassService tbCareerClassService; + @Resource + private ITbExamNoticeService examNoticeService; + @Resource + private ITbCooperatePartnerService cooperatePartnerService; + @Resource + private ITbAuthorizeHonorService authorizeHonorService; + @Resource + private ITbMajorClassService majorClassService; + @Resource + private ITbRegionService regionService; + @Resource + private ITbLiveBroadcastService liveBroadcastService; + @Resource + private ITbConfigService configService; + @Resource + private ITbStudyCenterService studyCenterService; + @Resource + private ITbEvaluateAgencyService evaluateAgencyService; + @Resource + private ITbContinuingEducationClassService continuingEducationClassService; + @Resource + private ITbConferenceNoticeService conferenceNoticeService; + @Resource + private ITbConferencePeopleService conferencePeopleService; + @Resource + private ITbConferenceRegistrationService conferenceRegistrationService; + @Resource + private ITbExamService examService; + @Resource + private ITbMemberJoinService memberJoinService; + + + /** + * 璇勪环鏈烘瀯鍒楄〃 + * + * @param params searchValue 鎼滅储璇 + * evaluateAgencyClassId 璇勪环鏈烘瀯鍒嗙被ID锛0鎴栦笉浼犳煡鍏ㄩ儴锛 + * @return success + */ + @GetMapping("/getEvaluateAgencyList") + public AjaxResult getEvaluateAgencyList(@RequestParam Map params) { + try { + return AjaxResult.success().put("data", evaluateAgencyService.getEvaluateAgencyList(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("璇勪环鏈烘瀯鍒楄〃寮傚父"); + } + } + + /** + * 鑱屼笟鍒嗙被鍒楄〃 + * + * @param params careerId 1-鑱屼笟鎶鑳斤紝2-鑱屼笟鏁欒偛 + * @return success + */ + @GetMapping("/getCareerClassMapList") + public AjaxResult getCareerClassMapList(@RequestParam Map params) { + try { + params.put("careerId", 1); + params.put("level", 2); + return AjaxResult.success().put("data", tbCareerClassService.selectTbCareerClassMapList(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鑱屼笟鍒嗙被鍒楄〃寮傚父"); + } + } + + /** + * 瀛︿範涓績鍒楄〃 + * + * @param params searchValue 鎼滅储璇 + * studyCenterClassId 瀛︿範涓績鍒嗙被ID锛0鎴栦笉浼犳煡鍏ㄩ儴锛 + * @return success + */ + @GetMapping("/getStudyCenterList") + public AjaxResult getStudyCenterList(@RequestParam Map params) { + try { + return AjaxResult.success().put("data", studyCenterService.getStudyCenterList(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("瀛︿範涓績鍒楄〃寮傚父"); + } + } + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiLoginController.java new file mode 100644 index 0000000000000000000000000000000000000000..cc2809221e59e9c59715fadb33a05ff7cc668c53 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiLoginController.java @@ -0,0 +1,354 @@ +package com.ruoyi.hezhi.api.kaoshi; + +import cn.hutool.extra.qrcode.QrCodeUtil; +import cn.hutool.extra.qrcode.QrConfig; +import com.alibaba.fastjson2.JSONObject; +import com.google.code.kaptcha.Producer; +import com.ruoyi.common.annotation.RateLimiter; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.sign.Base64; +import com.ruoyi.common.utils.txy.TencentSmsCodeUtils; +import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.common.weixin.config.WeiXinPayConfig; +import com.ruoyi.hezhi.domain.dto.MemberUserLoginDTO; +import com.ruoyi.hezhi.domain.dto.SmsCodeDTO; +import com.ruoyi.hezhi.domain.dto.StudentDTO; +import com.ruoyi.hezhi.service.ITbSmsCodeService; +import com.ruoyi.hezhi.service.ITbStudentService; +import io.swagger.annotations.Api; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.FastByteArrayOutputStream; +import org.springframework.validation.BindingResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.concurrent.TimeUnit; + +/** + * @Author: LCL + * @Date: 2024/10/08 + * @Description:閫氱敤API + */ +@Api("鐧诲綍") +@RestController +@RequestMapping("/api/login") +public class ApiLoginController { + + private static final Logger log = LoggerFactory.getLogger(ApiLoginController.class); + + @Resource + private RedisCache redisCache; + @Resource(name = "captchaProducer") + private Producer captchaProducer; + @Resource(name = "captchaProducerMath") + private Producer captchaProducerMath; + @Resource + private ITbStudentService studentService; + @Resource + private ITbSmsCodeService smsCodeService; + @Resource + private WeiXinPayConfig weiXinPayConfig; + @Resource + ITbStudentService tbStudentService; + + + /** + * 鍙戦侀獙璇佺爜 + * + * @param smsCodeDTO 鍙傛暟 + * @return 缁撴灉 + */ + @RepeatSubmit + @RateLimiter(key = "API_sendSmsCode") + @PostMapping("/sendSmsCode") + public AjaxResult sendSmsCode(@RequestBody @Validated({SmsCodeDTO.sendSmsCode.class}) SmsCodeDTO smsCodeDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + // 鐢熸垚楠岃瘉鐮 + String smsCode = IdUtils.buildNumberCode(6); +// TencentSmsCodeUtils tencentSmsCodeUtils = new TencentSmsCodeUtils(); +// String result = tencentSmsCodeUtils.sendSmsCode(smsCodeDTO.getPhone(), smsCode); + String result = "SUCCESS"; + if ("SUCCESS".equals(result)) { + return smsCodeService.sendSmsCodeInsert(smsCodeDTO.getPhone(), smsCode, smsCodeDTO.getType()); + } + return AjaxResult.error(); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鍙戦侀獙璇佺爜寮傚父"); + } + } + + /** + * 鐢熸垚鍥剧墖楠岃瘉鐮 + */ + @GetMapping("/getCaptchaImage") + public AjaxResult getCaptchaImage() { + // 淇濆瓨楠岃瘉鐮佷俊鎭 + String uuid = IdUtils.simpleUUID(); + String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid; + + String capStr = null, code = null; + BufferedImage image = null; + + // 鐢熸垚楠岃瘉鐮 + capStr = code = captchaProducer.createText(); + image = captchaProducer.createImage(capStr); + + if (image == null) { + return AjaxResult.error("楠岃瘉鐮佺敓鎴愬紓甯"); + } + + redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES); + + // 杞崲娴佷俊鎭啓鍑 + FastByteArrayOutputStream os = new FastByteArrayOutputStream(); + try { + ImageIO.write(image, "jpg", os); + } catch (IOException e) { + return AjaxResult.error(e.getMessage()); + } + + HashMap map = new HashMap<>(); + map.put("uuid", uuid); + map.put("img", Base64.encode(os.toByteArray())); + return AjaxResult.success(map); + } + + /** + * 鎵爜鐧婚檰杞 + * @param studentDTO 鍙傛暟 + * @return 缁撴灉 + */ + @RateLimiter(key = "API_userCodeLogin") + @PostMapping("/userCodeLogin") + public AjaxResult userCodeLogin(@RequestBody @Validated({StudentDTO.userCodeLogin.class}) StudentDTO studentDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + return studentService.userCodeLogin(studentDTO); + } + + /** + * 鎵嬫満鍙风櫥褰 + * + * @param studentDTO 鍙傛暟 + * @return 缁撴灉 + */ + @RepeatSubmit + @RateLimiter(key = "API_userPhoneLogin") + @PostMapping("/userPhoneLogin") + public AjaxResult userPhoneLogin(@RequestBody @Validated({StudentDTO.userPhoneLogin.class}) StudentDTO studentDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return studentService.userPhoneLogin(studentDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鎵嬫満鍙风櫥褰曞紓甯"); + } + } + + /** + * 韬唤璇佸彿鐮佺櫥褰 + * + * @param studentDTO 鍙傛暟 + * @return 缁撴灉 + */ + @RepeatSubmit + @RateLimiter(key = "API_userIdentityCardLogin") + @PostMapping("/userIdentityCardLogin") + public AjaxResult userIdentityCardLogin(@RequestBody @Validated({StudentDTO.userIdentityCardLogin.class}) StudentDTO studentDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return studentService.userIdentityCardLogin(studentDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鎵嬫満鍙风櫥褰曞紓甯"); + } + } + + /** + * 鎵惧洖瀵嗙爜 + * + * @param studentDTO 鍙傛暟 + * @return 缁撴灉 + */ + @RepeatSubmit + @RateLimiter(key = "API_userRetrievePassword", time = 5, count = 50) + @PostMapping("/userRetrievePassword") + public AjaxResult userRetrievePassword(@RequestBody @Validated({StudentDTO.userRetrievePassword.class}) StudentDTO studentDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return studentService.userRetrievePassword(studentDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鎵惧洖瀵嗙爜寮傚父"); + } + } + + /** + * 寰俊鐧诲綍浜岀淮鐮 + * + * @param + * @return 缁撴灉 + */ + @GetMapping("/wxLoginQRCode") + public AjaxResult wxLoginQRCode() { + System.out.println("____________________--wxLogin"); + + //redirect_url鏄洖璋冨湴鍧 娉ㄦ剰瑕佽浆鎹㈡垚UrlEncode鏍煎紡 + String redirectUrl = null; + try { + redirectUrl = URLEncoder.encode("https://web.xuexin.com/wxCallback","UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + //鏋勯犱簩缁寸爜閾炬帴鍦板潃 + String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+weiXinPayConfig.getAppIdLogin()+"&redirect_uri="+redirectUrl+"&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"; + + QrConfig config = new QrConfig(300, 300); + // 璁剧疆杈硅窛锛屾棦浜岀淮鐮佸拰鑳屾櫙涔嬮棿鐨勮竟璺 + config.setMargin(3); + // 璁剧疆鍓嶆櫙鑹诧紝鏃簩缁寸爜棰滆壊锛堥粦鑹诧級 + config.setForeColor(Color.black); + // 璁剧疆鑳屾櫙鑹诧紙鐏拌壊锛 + config.setBackColor(Color.white); + // 鐢熸垚浜岀淮鐮佸埌鏂囦欢锛屼篃鍙互鍒版祦 + BufferedImage image = QrCodeUtil.generate(url, config); + + //灏唍ewImage鍐欏叆瀛楄妭鏁扮粍杈撳嚭娴 + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try { + ImageIO.write(image, "jpg", baos ); + } catch (IOException e) { + e.printStackTrace(); + } + // 鑾峰彇瀛楄妭鏁扮粍 + byte[] data = baos.toByteArray(); + String base64String = java.util.Base64.getEncoder().encodeToString(data); + HashMap map = new HashMap<>(); + map.put("qrcodeUrlBase64", base64String); + + return AjaxResult.success(map); + } + + /** + * 寰俊鐧诲綍浜岀淮鐮 鐧诲綍 + * + * @param + * @return 缁撴灉 + */ + // @GetMapping("/callback") + // public AjaxResult callback(String code, String state) { + // // 鑾峰彇code鍊硷紝鎷跨潃 code 璇锋眰寰俊鍥哄畾鍦板潃锛屽緱鍒 accsess_token 鍜 openId + // String baseAccessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token" + + // "?appid=%s" + + // "&secret=%s" + + // "&code=%s" + + // "&grant_type=authorization_code"; + // String accessTokenUrl = String.format(baseAccessTokenUrl, + // weiXinPayConfig.getAppIdLogin(), + // weiXinPayConfig.getAppSecretLogin(), + // code); + // String result = restTemplate.getForObject(accessTokenUrl, String.class); + // HashMap hashMap = JSON.parseObject(result, HashMap.class); + // String accessToken = hashMap.get("access_token"); + // String openid = hashMap.get("openid"); + // log.info("token锛歿}锛宱penid锛歿}", accessToken, openid); + // + // // 鏌ヨ鏁版嵁搴撳綋鍓嶇敤鐢ㄦ埛鏄惁鏇剧粡浣跨敤杩囧井淇$櫥褰 + // TbStudent tbStudent = studentService.selectTbStudentByOpenId(openid); + // if (tbStudent == null) { + // log.info("鏂扮敤鎴锋敞鍐"); + // //璁块棶寰俊鐨勮祫婧愭湇鍔″櫒锛岃幏鍙栫敤鎴蜂俊鎭 + // String baseUserInfoUrl = "https://api.weixin.qq.com/sns/userinfo" + + // "?access_token=%s" + + // "&openid=%s"; + // String userInfoUrl = String.format(baseUserInfoUrl, accessToken, openid); + // String resultUserInfo = null; + // resultUserInfo = restTemplate.getForObject(userInfoUrl, String.class); + // + // log.info("鐢ㄦ埛淇℃伅锛歿}", resultUserInfo); + // //瑙f瀽json + // HashMap mapUserInfo = JSON.parseObject(resultUserInfo, HashMap.class); + // // 鑾峰彇寰俊鍚 + // String nickname = (String) mapUserInfo.get("nickname"); + // // 鑾峰彇澶村儚 + // String headimgurl = (String) mapUserInfo.get("headimgurl"); + // //鍚戞暟鎹簱涓彃鍏ヤ竴鏉¤褰 + // TbStudent student = new TbStudent(); + // student.setNickName(nickname); + // student.setOpenid(openid); + // student.setHeadPortrait(headimgurl); + // studentService.insertTbStudent(student); + // } + // HashMap map = new HashMap<>(); + // map.put("tbStudent", studentService.selectTbStudentByOpenId(openid)); + // return AjaxResult.success(map); + // } + + + /** + * 灏忕▼搴忔巿鏉冪櫥褰 + * + * @param memberUserLoginDTO 鍙傛暟 + * @return 缁撴灉 + */ + @RepeatSubmit + @PostMapping("/memberUserLogin") + public AjaxResult memberUserLogin(@RequestBody @Validated({MemberUserLoginDTO.MemberUserLogin.class}) MemberUserLoginDTO memberUserLoginDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + + JSONObject jsonObject = tbStudentService.memberUserLogin(memberUserLoginDTO); + return AjaxResult.success(jsonObject); + } + + /** + * 灏忕▼搴忔敞鍐 + * + * @param memberUserLoginDTO 鍙傛暟 + * @return 缁撴灉 + */ + @RepeatSubmit + @PostMapping("/memberUserRegister") + public AjaxResult memberUserRegister(@RequestBody @Validated({MemberUserLoginDTO.MemberUserRegister.class}) MemberUserLoginDTO memberUserLoginDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + + JSONObject jsonObject = tbStudentService.memberUserRegister(memberUserLoginDTO); + return AjaxResult.success(jsonObject); + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiMemberUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiMemberUserController.java new file mode 100644 index 0000000000000000000000000000000000000000..0da9528846d11610aedcd262240bd80ec80e6053 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiMemberUserController.java @@ -0,0 +1,730 @@ +package com.ruoyi.hezhi.api.kaoshi; + + +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson2.JSONArray; +import com.alibaba.fastjson2.JSONObject; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.annotation.RateLimiter; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.enums.Kd100StateEnum; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.kd100.Kd100Util; +import com.ruoyi.hezhi.domain.TbExpressKdCode; +import com.ruoyi.hezhi.domain.TbMemberAddress; +import com.ruoyi.hezhi.domain.TbStudent; +import com.ruoyi.hezhi.domain.dto.*; +import com.ruoyi.hezhi.service.*; +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.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +/** + * @Author: LCL + * @Date: 2024/10/08 + * @Description:閫氱敤API + */ +@Api("鐢ㄦ埛") +@RestController +@RequestMapping("/api/memberUser") +public class ApiMemberUserController extends BaseController { + + @Resource + private RedisCache redisCache; + @Resource + private ITbStudentService studentService; + @Resource + private ITbMemberAddressService memberAddressService; + @Resource + private ITbMemberSignService memberSignService; + @Resource + private ITbMemberScoreService memberScoreService; + @Resource + private ITbMemberSubjectCollectService memberSubjectCollectService; + @Resource + private ITbExamRegistrationService examRegistrationService; + @Resource + private ITbSmsCodeService smsCodeService; + @Resource + private ITbMemberOrderService memberOrderService; + @Resource + private ITbExpressKdCodeService expressKdCodeService; + @Resource + private ITbMemberMajorService memberMajorService; + @Resource + private ITbTeacherAuthenticationService tbTeacherAuthenticationService; + @Resource + private Kd100Util kd100Util; + + + /** + * 鐢ㄦ埛璇︽儏 + * + * @param params memberUserId 鐢ㄦ埛ID + * @return success + */ + @GetMapping("/getStudentUserInfo") + public AjaxResult getStudentUserInfo(@RequestParam Map params) { + // if (!params.containsKey("memberUserId") || StringUtils.isBlank(params.get("memberUserId").toString())) { + // return AjaxResult.error("缂哄皯 memberUserId 鐢ㄦ埛ID"); + // } + try { + if (!params.containsKey("memberUserId") || StringUtils.isBlank(params.get("memberUserId").toString())) { + return AjaxResult.success().put("data", null); + } + return AjaxResult.success().put("data", studentService.selectTbStudentByStudentId(Long.valueOf(params.get("memberUserId").toString()))); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鐢ㄦ埛璇︽儏寮傚父"); + } + } + + /** + * 鐢ㄦ埛淇敼涓汉璧勬枡 + * + * @param studentDTO 鍙傛暟 + * @return 缁撴灉 + */ + @RepeatSubmit + @RateLimiter(key = "API_updateMemberInfo", time = 5, count = 50) + @PostMapping("/updateMemberInfo") + public AjaxResult updateMemberInfo(@RequestBody @Validated({StudentDTO.updateMemberInfo.class}) StudentDTO studentDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return studentService.updateMemberInfo(studentDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鐢ㄦ埛淇敼涓汉璧勬枡寮傚父"); + } + } + + /** + * 鍦板潃绠$悊鍒楄〃 + * + * @param pageNum 椤电爜 + * @param pageSize 姣忛〉鏁版嵁閲 + * @param params memberUserId 鐢ㄦ埛ID + * @return success + */ + @GetMapping("/getMemberAddressList") + public AjaxResult getMemberAddressList(@RequestParam(value = "pageNum", defaultValue = "1", required = false) Integer pageNum, + @RequestParam(value = "pageSize", defaultValue = "100", required = false) Integer pageSize, + @RequestParam Map params) { + try { + PageHelper.startPage(pageNum, pageSize); + List> list = memberAddressService.getMemberAddressList(params); + PageInfo> pageInfo = new PageInfo(list); + return AjaxResult.success().put("data", pageInfo); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鍦板潃绠$悊鍒楄〃寮傚父"); + } + } + + /** + * 鏂板鍦板潃 + * + * @param memberAddressDTO 鍙傛暟 + * @return 缁撴灉 + */ + @RepeatSubmit + @RateLimiter(key = "API_addMemberAddress", time = 5, count = 50) + @PostMapping("/addMemberAddress") + public AjaxResult addMemberAddress(@RequestBody @Validated({MemberAddressDTO.addMemberAddress.class}) MemberAddressDTO memberAddressDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return memberAddressService.userRetrievePassword(memberAddressDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鏂板鍦板潃寮傚父"); + } + } + + /** + * 鏌ヨ鍦板潃鍒楄〃 + * + * @param tbMemberAddress 鍙傛暟 + * @return 缁撴灉 + */ + @GetMapping("/addressList") + public TableDataInfo addressList(TbMemberAddress tbMemberAddress) + { + startPage(); + List list = memberAddressService.selectTbMemberAddressList(tbMemberAddress); + return getDataTable(list); + } + + + + /** + * 鍦板潃绠$悊璇︽儏 + * + * @param params memberAddressId 鐢ㄦ埛鍦板潃ID + * @return success + */ + @GetMapping("/getMemberAddressInfo") + public AjaxResult getMemberAddressInfo(@RequestParam Map params) { + if (!params.containsKey("memberAddressId") || StringUtils.isBlank(params.get("memberAddressId").toString())) { + return AjaxResult.error("缂哄皯 memberAddressId 鍦板潃ID"); + } + try { + return AjaxResult.success().put("data", memberAddressService.getMemberAddressInfo(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鍦板潃绠$悊璇︽儏寮傚父"); + } + } + + /** + * 淇敼鍦板潃 + * + * @param memberAddressDTO 鍙傛暟 + * @return 缁撴灉 + */ + @RepeatSubmit + @RateLimiter(key = "API_updateMemberAddress", time = 5, count = 50) + @PostMapping("/updateMemberAddress") + public AjaxResult updateMemberAddress(@RequestBody @Validated({MemberAddressDTO.updateMemberAddress.class}) MemberAddressDTO memberAddressDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return memberAddressService.updateMemberAddress(memberAddressDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("淇敼鍦板潃寮傚父"); + } + } + + /** + * 鍒犻櫎鍦板潃 + * + * @param memberAddressDTO 鍙傛暟 + * @return 缁撴灉 + */ + @RepeatSubmit + @RateLimiter(key = "API_deleteMemberAddress", time = 5, count = 50) + @PostMapping("/deleteMemberAddress") + public AjaxResult deleteMemberAddress(@RequestBody @Validated({MemberAddressDTO.deleteMemberAddress.class}) MemberAddressDTO memberAddressDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return memberAddressService.deleteMemberAddress(memberAddressDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鍒犻櫎鍦板潃寮傚父"); + } + } + + /** + * 鐢ㄦ埛绛惧埌寮圭獥 + * + * @param params memberUserId 鐢ㄦ埛ID + * @return success + */ + @GetMapping("/getMemberSignPopup") + public AjaxResult getMemberSignPopup(@RequestParam Map params) { + try { + return AjaxResult.success().put("data", memberSignService.getMemberSignPopup(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鐢ㄦ埛绛惧埌寮圭獥寮傚父"); + } + } + + /** + * 鐢ㄦ埛绛惧埌 + * + * @param memberSignDTO 鍙傛暟 + * @return 缁撴灉 + */ + @RepeatSubmit + @RateLimiter(key = "API_memberSignDay", time = 5, count = 50) + @PostMapping("/memberSignDay") + public AjaxResult memberSignDay(@RequestBody @Validated({MemberSignDTO.memberSignDay.class}) MemberSignDTO memberSignDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return memberSignService.memberSignDay(memberSignDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鐢ㄦ埛绛惧埌寮傚父"); + } + } + + /** + * 鎴戠殑绉垎鍒楄〃 + * + * @param pageNum 椤电爜 + * @param pageSize 姣忛〉鏁版嵁閲 + * @param params memberUserId 鐢ㄦ埛ID + * incomeExpenses 鏀跺叆鏀嚭锛0鎴栫┖-鍏ㄩ儴锛1-鏀跺叆锛2-鏀嚭锛 + * @return success + */ + @GetMapping("/getMemberScoreList") + public AjaxResult getMemberScoreList(@RequestParam(value = "pageNum", defaultValue = "1", required = false) Integer pageNum, + @RequestParam(value = "pageSize", defaultValue = "100", required = false) Integer pageSize, + @RequestParam Map params) { + try { + PageHelper.startPage(pageNum, pageSize); + List> list = memberScoreService.getMemberScoreList(params); + PageInfo> pageInfo = new PageInfo(list); + return AjaxResult.success().put("data", pageInfo); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鎴戠殑绉垎鍒楄〃寮傚父"); + } + } + + /** + * 鐢ㄦ埛绉垎 + * + * @param params memberUserId 鐢ㄦ埛ID + * @return success + */ + @GetMapping("/getMemberSign") + public AjaxResult getMemberSign(@RequestParam Map params) { + try { + return AjaxResult.success().put("data", memberScoreService.getMemberScore(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鐢ㄦ埛绉垎寮傚父"); + } + } + + /** + * 棰樼洰鏀惰棌鍒楄〃 + * + * @param pageNum 椤电爜 + * @param pageSize 姣忛〉鏁版嵁閲 + * @param params memberUserId 鐢ㄦ埛ID + * subjectWarehouseClassId 棰樺簱鍒嗙被ID + * searchValue 鎼滅储璇 + * @return success + */ + @GetMapping("/getMemberSubjectCollectList") + public AjaxResult getMemberSubjectCollectList(@RequestParam(value = "pageNum", defaultValue = "1", required = false) Integer pageNum, + @RequestParam(value = "pageSize", defaultValue = "100", required = false) Integer pageSize, + @RequestParam Map params) { + try { + PageHelper.startPage(pageNum, pageSize); + List> list = memberSubjectCollectService.getMemberSubjectCollectList(params); + PageInfo> pageInfo = new PageInfo(list); + return AjaxResult.success().put("data", pageInfo); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("棰樼洰鏀惰棌鍒楄〃寮傚父"); + } + } + + /** + * 鎴戠殑鑰冭瘯鍒楄〃 + * + * @param pageNum 椤电爜 + * @param pageSize 姣忛〉鏁版嵁閲 + * @param params memberUserId 鐢ㄦ埛ID + * examStatus锛1-宸叉姤鍚嶏紝2-寰呭紑鑰冿紝3-寮鑰冧腑锛4-宸茬粨鏉燂紝5-棰嗗彇璇佷功锛 + * @return success + */ + @GetMapping("/getMemberExamList") + public AjaxResult getMemberExamList(@RequestParam(value = "pageNum", defaultValue = "1", required = false) Integer pageNum, + @RequestParam(value = "pageSize", defaultValue = "100", required = false) Integer pageSize, + @RequestParam Map params) { + try { + PageHelper.startPage(pageNum, pageSize); + List> list = examRegistrationService.getMemberExamList(params); + PageInfo> pageInfo = new PageInfo(list); + return AjaxResult.success().put("data", pageInfo); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鎴戠殑鑰冭瘯鍒楄〃寮傚父"); + } + } + + /** + * 鎴戠殑鑰冭瘯鍒楄〃鏁伴噺 + * + * @param params memberUserId 鐢ㄦ埛ID + * examStatus锛1-宸叉姤鍚嶏紝2-寰呭紑鑰冿紝3-寮鑰冧腑锛4-宸茬粨鏉燂紝5-棰嗗彇璇佷功锛 + * @return success + */ + @GetMapping("/getMemberExamListNum") + public AjaxResult getMemberExamListNum(@RequestParam Map params) { + try { + int numOne = 0; + int numTwo = 0; + int numThree = 0; + int numFour = 0; + int numFive = 0; + + if (params.containsKey("memberUserId") && StringUtils.isNotBlank(params.get("memberUserId").toString())) { + HashMap hashMap = new HashMap<>(); + hashMap.put("memberUserId", params.get("memberUserId").toString()); + + hashMap.put("examStatus", 1); + numOne = examRegistrationService.getMemberExamList(hashMap).size(); + + hashMap.put("examStatus", 2); + numTwo = examRegistrationService.getMemberExamList(hashMap).size(); + + hashMap.put("examStatus", 3); + numThree = examRegistrationService.getMemberExamList(hashMap).size(); + + hashMap.put("examStatus", 4); + numFour = examRegistrationService.getMemberExamList(hashMap).size(); + + hashMap.put("examStatus", 5); + numFive = examRegistrationService.getMemberExamList(hashMap).size(); + } + + HashMap map = new HashMap<>(); + map.put("numOne", numOne); + map.put("numTwo", numTwo); + map.put("numThree", numThree); + map.put("numFour", numFour); + map.put("numFive", numFive); + + return AjaxResult.success().put("data", map); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鎴戠殑鑰冭瘯鍒楄〃鏁伴噺寮傚父"); + } + } + + /** + * 鎴戠殑鑰冭瘯璇︽儏 + * + * @param params examRegistrationId 鎶ュ悕ID + * @return success + */ + @GetMapping("/getMemberExamInfo") + public AjaxResult getMemberExamInfo(@RequestParam Map params) { + if (!params.containsKey("examRegistrationId") || StringUtils.isBlank(params.get("examRegistrationId").toString())) { + return AjaxResult.error("缂哄皯 examRegistrationId 鎶ュ悕ID"); + } + try { + return AjaxResult.success().put("data", examRegistrationService.getMemberExamInfo(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鎴戠殑鑰冭瘯璇︽儏寮傚父"); + } + } + + /** + * 鐭俊楠岃瘉鐮侀獙璇 + * + * @param params phone 鎵嬫満鍙 + * smsCode 楠岃瘉鐮 + * type 绫诲瀷锛0-榛樿锛1-鎵嬫満鍙风櫥褰曪紝2-淇敼涓汉璧勬枡锛3-鑰冭瘯鎶ュ悕锛 + * @return success + */ + @GetMapping("/checkPhoneSmsCode") + public AjaxResult checkPhoneSmsCode(@RequestParam Map params) { + if (!params.containsKey("phone") || StringUtils.isBlank(params.get("phone").toString())) { + return AjaxResult.error("缂哄皯 phone 鎵嬫満鍙"); + } + if (!params.containsKey("smsCode") || StringUtils.isBlank(params.get("smsCode").toString())) { + return AjaxResult.error("缂哄皯 smsCode 楠岃瘉鐮"); + } + if (!params.containsKey("type") || StringUtils.isBlank(params.get("type").toString())) { + return AjaxResult.error("缂哄皯 type 绫诲瀷"); + } + try { + String phone = params.get("phone").toString(); + String smsCode = params.get("smsCode").toString(); + int type = Integer.parseInt(params.get("type").toString()); + return smsCodeService.checkPhoneSmsCode(phone, smsCode, type); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鐭俊楠岃瘉鐮侀獙璇佸紓甯"); + } + } + + /** + * 鎴戠殑璁㈠崟鍒楄〃 + * + * @param pageNum 椤电爜 + * @param pageSize 姣忛〉鏁版嵁閲 + * @param params memberUserId 鐢ㄦ埛ID + * orderType 璁㈠崟绫诲瀷锛1-浼氬憳璐癸紝2-鑰冭瘯锛 + * @return success + */ + @GetMapping("/getMemberOrderList") + public AjaxResult getMemberOrderList(@RequestParam(value = "pageNum", defaultValue = "1", required = false) Integer pageNum, + @RequestParam(value = "pageSize", defaultValue = "100", required = false) Integer pageSize, + @RequestParam Map params) { + try { + PageHelper.startPage(pageNum, pageSize); + List> list = memberOrderService.getMemberOrderList(params); + PageInfo> pageInfo = new PageInfo(list); + return AjaxResult.success().put("data", pageInfo); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鎴戠殑璁㈠崟鍒楄〃寮傚父"); + } + } + + /** + * 瀛︿範璁″垝-鎴戠殑璇句欢 + * + * @param pageNum 椤电爜 + * @param pageSize 姣忛〉鏁版嵁閲 + * @param params memberUserId 鐢ㄦ埛ID + * searchValue 鎼滅储璇 + * @return success + */ + @GetMapping("/getMemberCoursewareList") + public AjaxResult getMemberCoursewareList(@RequestParam(value = "pageNum", defaultValue = "1", required = false) Integer pageNum, + @RequestParam(value = "pageSize", defaultValue = "100", required = false) Integer pageSize, + @RequestParam Map params) { + try { + PageHelper.startPage(pageNum, pageSize); + List> list = examRegistrationService.getMemberCoursewareList(params); + PageInfo> pageInfo = new PageInfo(list); + return AjaxResult.success().put("data", pageInfo); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("瀛︿範璁″垝-鎴戠殑璇句欢寮傚父"); + } + } + + /** + * 鎴戠殑鎶ュ悕琛ㄣ佸噯鑰冭瘉銆佽瘉涔 + * + * @param params memberUserId 鐢ㄦ埛ID + * @return success + */ + @GetMapping("/getMemberCertificateMore") + public AjaxResult getMemberCertificateMore(@RequestParam Map params) { + try { + return AjaxResult.success().put("data", examRegistrationService.getMemberCertificateMore(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鎴戠殑鎶ュ悕琛ㄣ佸噯鑰冭瘉銆佽瘉涔﹀紓甯"); + } + } + + /** + * 濉啓璇佷功鏀惰揣淇℃伅 + * + * @param postAddressDTO 鍙傛暟 + * @return 缁撴灉 + */ + @RepeatSubmit + @RateLimiter(key = "API_submitCertificateGoodsInfo", time = 5, count = 50) + @PostMapping("/submitCertificateGoodsInfo") + public AjaxResult submitCertificateGoodsInfo(@RequestBody @Validated({PostAddressDTO.submitCertificateGoodsInfo.class}) PostAddressDTO postAddressDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return examRegistrationService.submitCertificateGoodsInfo(postAddressDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("濉啓璇佷功鏀惰揣淇℃伅寮傚父"); + } + } + + /** + * 鏌ョ湅蹇掍俊鎭 + * + * @param params memberUserId 鐢ㄦ埛ID + * examRegistrationId 鎶ュ悕ID + * + * @return success + */ + @GetMapping("/getExpressInfo") + public AjaxResult getExpressInfo(@RequestParam Map params) { + try { + Map certificateMore = examRegistrationService.getMemberCertificateMore(params); + if (certificateMore != null) { + String shippingLogo = "https://www.ems.com.cn/img/logo-38.caaf481a.svg"; + List> expressList = new ArrayList<>(); + String state = ""; + int certificateStatus = Integer.parseInt(certificateMore.get("certificateStatus").toString()); + if (certificateStatus == 2) { + // 宸插彂璐 + // 鏌ヨ蹇 + TbExpressKdCode expressKdCode = expressKdCodeService.selectTbExpressKdCodeByCode(certificateMore.get("shippingMark").toString()); + shippingLogo = expressKdCode.getLogo(); + + String shippingMark = certificateMore.get("shippingMark").toString(); + String shippingCode = certificateMore.get("shippingCode").toString(); + String contactPhone = certificateMore.get("contactPhone").toString(); + String shippingPollToken = certificateMore.get("shippingPollToken").toString(); + // 宸插彂璐,鍏堟煡redis,1涓皬鏃惰繃鏈熸椂闂达紝鍥犱负api鍗婂皬鏃跺唴鏌ュ浜嗕細閿佸崟 + JSONObject expressJsonData = null; + String redisKey = "kd:" + shippingMark+shippingCode+contactPhone; + if (redisCache.hasKey(redisKey)) { + //鏌ュ嚭缂撳瓨涓殑鏁版嵁 + String cachedData = redisCache.getCacheObject(redisKey); + if (StringUtils.isNotBlank(cachedData)) { + expressJsonData = JSONObject.parseObject(cachedData); + // 鍙互娣诲姞鏃ュ織璁板綍 + logger.info("浠嶳edis缂撳瓨鑾峰彇蹇掓暟鎹紝key: {}", redisKey); + } + }else{ + expressJsonData = kd100Util.getExpressJsonData(shippingMark, shippingCode, contactPhone, shippingPollToken); + // 濡傛灉鎺ュ彛杩斿洖鏁版嵁鏈夋晥锛屽瓨鍏edis + if (expressJsonData != null && !expressJsonData.isEmpty()) { + //鍏堝垽鏂け璐ョ殑鎯呭喌鐩存帴杩斿洖 + Boolean result = expressJsonData.getBoolean("result"); + if (result!=null&&!result){ + String message = expressJsonData.getString("message"); + return AjaxResult.error(message); + } + // 娌℃湁澶辫触鍒欒缃紦瀛樿繃鏈熸椂闂达紙1灏忔椂锛夛紝鏍规嵁涓氬姟闇姹傝皟鏁 + int expireTime = 3600; // 鍗曚綅锛氱 + redisCache.setCacheObject(redisKey, expressJsonData.toJSONString(), expireTime, TimeUnit.SECONDS); + // 鍙互娣诲姞鏃ュ織璁板綍 + logger.info("灏嗗揩閫掓暟鎹瓨鍏edis缂撳瓨锛宬ey: {}", redisKey); + } + } + JSONArray data = expressJsonData.getJSONArray("data"); + state = expressJsonData.getString("state"); + + for (int i = 0; i < data.size(); i++) { + JSONObject jsonObject = data.getJSONObject(i); + + HashMap map = new HashMap<>(); + map.put("time", jsonObject.getString("time")); + map.put("context", jsonObject.getString("context")); + String statusCode = jsonObject.getString("statusCode"); + map.put("status", Kd100StateEnum.getKd100StateEnum(statusCode).getInfo()); + map.put("statusCode", statusCode); + expressList.add(map); + } + } + + certificateMore.put("shippingLogo", shippingLogo); + certificateMore.put("expressList", expressList); + certificateMore.put("state", state); + + } + return AjaxResult.success().put("data", certificateMore); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鎴戠殑鎶ュ悕琛ㄣ佸噯鑰冭瘉銆佽瘉涔﹀紓甯"); + } + } + + /** + * 鐢ㄦ埛鏂板棰樺簱涓撲笟 + * + * @param memberMajorDTO 鍙傛暟 + * @return 缁撴灉 + */ + @PostMapping("/insertMemberMajor") + public AjaxResult insertMemberMajor(@RequestBody @Validated({MemberMajorDTO.insertMemberMajor.class}) MemberMajorDTO memberMajorDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return memberMajorService.insertMemberMajor(memberMajorDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鐢ㄦ埛鏂板棰樺簱涓撲笟寮傚父"); + } + } + + /** + * 鐢ㄦ埛鏂板棰樺簱涓撲笟鍒楄〃 + * + * @param params memberUserId 鐢ㄦ埛ID + * @return success + */ + @GetMapping("/getMemberMajorList") + public AjaxResult getMemberMajorList(@RequestParam Map params) { + if (!params.containsKey("memberUserId") || StringUtils.isBlank(params.get("memberUserId").toString())) { + return AjaxResult.error("璇峰厛鐧诲綍"); + } + try { + return AjaxResult.success().put("data", memberMajorService.getMemberMajorList(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鐢ㄦ埛鏂板棰樺簱涓撲笟鍒楄〃寮傚父"); + } + } + + /** + * 鎻愪氦鍚嶅笀璁よ瘉 + * @param teacherAuthenticationDTO 鍙傛暟 + * @return 缁撴灉 + */ + @RepeatSubmit + @PostMapping("/submitTeacherAuthentication") + public AjaxResult submitTeacherAuthentication(@RequestBody @Validated TeacherAuthenticationDTO teacherAuthenticationDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + + int i = tbTeacherAuthenticationService.submitTeacherAuthentication(teacherAuthenticationDTO); + return AjaxResult.toAjax(i); + } + + //淇敼瀵嗙爜 + @Log(title = "瀛﹀憳", businessType = BusinessType.UPDATE) + @PostMapping("/editPassword") + public AjaxResult editPassword(@RequestBody TbStudent tbStudent) + { + if (ObjectUtil.isNull(tbStudent)||tbStudent.getStudentId()==null){ + return AjaxResult.error("璇锋眰鍙傛暟寮傚父"); + } +// if (StringUtils.isBlank(tbStudent.getOldPassword())){ +// return AjaxResult.error("鏃у瘑鐮佷笉鑳戒负绌"); +// } + if (org.apache.commons.lang3.StringUtils.isBlank(tbStudent.getPassword())){ + return AjaxResult.error("鏂板瘑鐮佷笉鑳戒负绌"); + } + return AjaxResult.toAjax(studentService.editPassword(tbStudent)); + } + + /** + * 鑾峰彇鏁欏笀璇︾粏淇℃伅 + */ + @GetMapping(value = "/getTeacherInfo/{phone}") + public AjaxResult getTeacherInfo(@PathVariable("phone") String phone) + { + return AjaxResult.success(tbTeacherAuthenticationService.selectTbTeacherAuthenticationByPhone(phone)); + } + + + //鏌ヨ鐢ㄦ埛鏄惁鏈夎鍗曞緟鏀粯 + @GetMapping("/havaOrderToPay") + public AjaxResult havaOrderToPay(Long memberUserId){ + return examRegistrationService.havaOrderToPay(memberUserId); + } + + + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiPCController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiPCController.java new file mode 100644 index 0000000000000000000000000000000000000000..347323604c153ed48f8c767dcf51c5552c2c675d --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiPCController.java @@ -0,0 +1,876 @@ +package com.ruoyi.hezhi.api.kaoshi; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.ruoyi.common.annotation.RateLimiter; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.hezhi.domain.TbConferenceNotice; +import com.ruoyi.hezhi.domain.TbContinuingEducationClass; +import com.ruoyi.hezhi.domain.dto.DelHistoricalRecordsDTO; +import com.ruoyi.hezhi.domain.dto.MemberDiscussDTO; +import com.ruoyi.hezhi.domain.dto.MemberJoinDTO; +import com.ruoyi.hezhi.domain.vo.CareerExamListVO; +import com.ruoyi.hezhi.domain.vo.CourseListVO; +import com.ruoyi.hezhi.domain.vo.NoticeVO; +import com.ruoyi.hezhi.domain.vo.StudyCenterVO; +import com.ruoyi.hezhi.service.*; +import com.ruoyi.hezhi.service.impl.TbCourseServiceImpl; +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.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Author: LCL + * @Date: 2024/10/08 + * @Description:閫氱敤API + */ +@Api("PC") +@RestController +@RequestMapping("/api/pc") +public class ApiPCController { + + @Resource + private ITbNoticeService noticeService; + @Resource + private ITbTeacherService teacherService; + @Resource + private ITbExamNoticeService examNoticeService; + @Resource + private ITbCooperatePartnerService cooperatePartnerService; + @Resource + private ITbAuthorizeHonorService authorizeHonorService; + @Resource + private ITbMajorClassService majorClassService; + @Resource + private ITbLiveBroadcastService liveBroadcastService; + @Resource + private ITbStudyCenterService studyCenterService; + @Resource + private ITbEvaluateAgencyService evaluateAgencyService; + @Resource + private ITbContinuingEducationClassService continuingEducationClassService; + @Resource + private ITbConferenceNoticeService conferenceNoticeService; + @Resource + private ITbConferencePeopleService conferencePeopleService; + @Resource + private ITbConferenceRegistrationService conferenceRegistrationService; + @Resource + private ITbExamService examService; + @Resource + private ITbMemberJoinService memberJoinService; + @Resource + private ITbMemberDiscussService memberDiscussService; + @Resource + private ITbContinuingEducationClassService tbContinuingEducationClassService; + @Resource + private TbCourseServiceImpl tbCourseService; + + + /** + * 鏌ヨ鍏憡鍒楄〃 + * + * @return 缁撴灉 + */ + @GetMapping("/selectNoticeList") + public AjaxResult selectNoticeList() { + List list = noticeService.getNoticeList(); + return AjaxResult.success(list); + } + + /** + * 鍏憡鍒楄〃 + * + * @param pageNum 椤电爜 + * @param pageSize 姣忛〉鏁版嵁閲 + * @param params type 閫氱煡绫诲瀷锛0-閫氱煡鍏憡锛1-涓撻涓撴爮锛2-鏀跨瓥瑙h锛3-濯掍綋鑱氱劍锛4-鏁欒偛璇勮锛 + * typeTwo 鏍规嵁type浜岀骇绫诲瀷锛坱ype=1锛1-涓撻涓撴爮1,2-涓撻涓撴爮2,3-涓撻涓撴爮3锛 + * publisherType 0-鎬婚儴瀛︿範涓績閫氱煡锛1-鍦版柟瀛︿範涓績閫氱煡 + * searchValue 鎼滅储璇 + * @return success + */ + @GetMapping("/getNoticeList") + public AjaxResult getNoticeList(@RequestParam(value = "pageNum", defaultValue = "1", required = false) Integer pageNum, + @RequestParam(value = "pageSize", defaultValue = "100", required = false) Integer pageSize, + @RequestParam Map params) { + try { + PageHelper.startPage(pageNum, pageSize); + List> list = noticeService.getPCNoticeList(params); + PageInfo> pageInfo = new PageInfo(list); + return AjaxResult.success().put("data", pageInfo); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鍏憡鍒楄〃寮傚父"); + } + } + + /** + * 鍏憡璇︽儏 + * + * @param params noticeId 鍏憡ID + * @return ok + */ + @GetMapping("/getNoticeInfo") + public AjaxResult getNoticeInfo(@RequestParam Map params) { + if (!params.containsKey("noticeId") || StringUtils.isBlank(params.get("noticeId").toString())) { + return AjaxResult.error("缂哄皯 noticeId 鍏憡ID"); + } + try { + // 娴忚閲+1 + noticeService.addViewsNum(Long.parseLong(params.get("noticeId").toString())); + return AjaxResult.success().put("data", noticeService.getNoticeInfo(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鍏憡璇︽儏寮傚父"); + } + } + + /** + * 鑰冭瘯閫氱煡鍒楄〃 + * + * @param pageNum 椤电爜 + * @param pageSize 姣忛〉鏁版嵁閲 + * @return success + */ + @GetMapping("/getExamNoticeList") + public AjaxResult getExamNoticeList(@RequestParam(value = "pageNum", defaultValue = "1", required = false) Integer pageNum, + @RequestParam(value = "pageSize", defaultValue = "100", required = false) Integer pageSize, + @RequestParam Map params) { + try { + PageHelper.startPage(pageNum, pageSize); + List> list = examNoticeService.getExamNoticeList(params); + PageInfo> pageInfo = new PageInfo(list); + return AjaxResult.success().put("data", pageInfo); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鑰冭瘯閫氱煡鍒楄〃寮傚父"); + } + } + + /** + * 鑰冭瘯閫氱煡璇︽儏 + * + * @param params examNoticeId 鑰冭瘯閫氱煡ID + * @return ok + */ + @GetMapping("/getExamNoticeInfo") + public AjaxResult getExamNoticeInfo(@RequestParam Map params) { + //鍒ゆ柇闈炵┖闈瀗ull + if (StringUtils.isNull(params.get("examNoticeId"))&&StringUtils.isNull(params.get("examId"))){ + return AjaxResult.error("缂哄皯 examNoticeId 鑰冭瘯閫氱煡ID 鎴栬 examId 鑰冭瘯id"); + } + /* if (!params.containsKey("examNoticeId") || StringUtils.isBlank(params.get("examNoticeId").toString())) { + return AjaxResult.error("缂哄皯 examNoticeId 鑰冭瘯閫氱煡ID"); + }*/ + try { + return AjaxResult.success().put("data", examNoticeService.getExamNoticeInfo(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 鍚堜綔浼欎即鍒楄〃 + * + * @param pageNum 椤电爜 + * @param pageSize 姣忛〉鏁版嵁閲 + * @return success + */ + @GetMapping("/getCooperatePartnerList") + public AjaxResult getCooperatePartnerList(@RequestParam(value = "pageNum", defaultValue = "1", required = false) Integer pageNum, + @RequestParam(value = "pageSize", defaultValue = "100", required = false) Integer pageSize, + @RequestParam Map params) { + try { + PageHelper.startPage(pageNum, pageSize); + List> list = cooperatePartnerService.getCooperatePartnerList(params); + PageInfo> pageInfo = new PageInfo(list); + return AjaxResult.success().put("data", pageInfo); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鍚堜綔浼欎即鍒楄〃寮傚父"); + } + } + + /** + * 鎺堟潈鍙婅崳瑾夊垪琛 + * + * @param pageNum 椤电爜 + * @param pageSize 姣忛〉鏁版嵁閲 + * @return success + */ + @GetMapping("/getAuthorizeHonorList") + public AjaxResult getAuthorizeHonorList(@RequestParam(value = "pageNum", defaultValue = "1", required = false) Integer pageNum, + @RequestParam(value = "pageSize", defaultValue = "100", required = false) Integer pageSize, + @RequestParam Map params) { + try { + PageHelper.startPage(pageNum, pageSize); + List> list = authorizeHonorService.getAuthorizeHonorList(params); + PageInfo> pageInfo = new PageInfo(list); + return AjaxResult.success().put("data", pageInfo); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鎺堟潈鍙婅崳瑾夊垪琛ㄥ紓甯"); + } + } + + /** + * 鑾峰彇鐩存挱鏈烘瀯鍒楄〃 + * @return 缁撴灉 + */ + @GetMapping("/getLiveBroadcastEvaluateAgencyList") + public AjaxResult getLiveBroadcastEvaluateAgencyList(){ + List> liveBroadcastEvaluateAgencyList = liveBroadcastService.getLiveBroadcastEvaluateAgencyList(); + return AjaxResult.success(liveBroadcastEvaluateAgencyList); + } + + /** + * 鐩存挱棰勫憡鍒楄〃 + * + * @param pageNum 椤电爜 + * @param pageSize 姣忛〉鏁版嵁閲 + * @param params majorId 涓撲笟ID锛0鎴栦笉浼犳煡鍏ㄩ儴锛 + * teacherId 鑰佸笀ID锛0鎴栦笉浼犳煡鍏ㄩ儴锛 + * type 1-棣栭〉锛2-鏇村 + * searchValue 鎼滅储璇 + * @return success + */ + @GetMapping("/getLiveBroadcastList") + public AjaxResult getLiveBroadcastList(@RequestParam(value = "pageNum", defaultValue = "1", required = false) Integer pageNum, + @RequestParam(value = "pageSize", defaultValue = "100", required = false) Integer pageSize, + @RequestParam Map params) { + try { + PageHelper.startPage(pageNum, pageSize); + List> list = liveBroadcastService.getLiveBroadcastList(params); + PageInfo> pageInfo = new PageInfo(list); + return AjaxResult.success().put("data", pageInfo); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鐩存挱棰勫憡鍒楄〃寮傚父"); + } + } + + /** + * 鐩存挱棰勫憡璇︽儏 + * + * @param params liveBroadcastId 鐩存挱ID + * @return ok + */ + @GetMapping("/getLiveBroadcastInfo") + public AjaxResult getLiveBroadcastInfo(@RequestParam Map params) { + if (!params.containsKey("liveBroadcastId") || StringUtils.isBlank(params.get("liveBroadcastId").toString())) { + return AjaxResult.error("缂哄皯 liveBroadcastId 鐩存挱ID"); + } + try { + return AjaxResult.success().put("data", liveBroadcastService.getLiveBroadcastInfo(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鐩存挱棰勫憡璇︽儏寮傚父"); + } + } + + /** + * 甯堣祫鍥㈤槦鍒楄〃 + * + * @param pageNum 椤电爜 + * @param pageSize 姣忛〉鏁版嵁閲 + * @param params searchValue 鎼滅储璇 + * majorId 涓撲笟ID + * @return success + */ + @GetMapping("/getTeacherList") + public AjaxResult getTeacherList(@RequestParam(value = "pageNum", defaultValue = "1", required = false) Integer pageNum, + @RequestParam(value = "pageSize", defaultValue = "100", required = false) Integer pageSize, + @RequestParam Map params) { + try { + PageHelper.startPage(pageNum, pageSize); + List> list = teacherService.getTeacherList(params); + PageInfo> pageInfo = new PageInfo(list); + return AjaxResult.success().put("data", pageInfo); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("甯堣祫鍥㈤槦鍒楄〃寮傚父"); + } + } + + /** + * 瀛︿範涓績鍒楄〃 + * + * @param pageNum 椤电爜 + * @param pageSize 姣忛〉鏁版嵁閲 + * @param params searchValue 鎼滅储璇 + * isRecommend 鎺ㄨ崘锛0鎴栦笉浼-姝e父锛1-鎺ㄨ崘锛 + * studyCenterClassId 瀛︿範涓績鍒嗙被ID锛0鎴栦笉浼犳煡鍏ㄩ儴锛 + * @return success + */ + @GetMapping("/getStudyCenterList") + public AjaxResult getStudyCenterList(@RequestParam(value = "pageNum", defaultValue = "1", required = false) Integer pageNum, + @RequestParam(value = "pageSize", defaultValue = "100", required = false) Integer pageSize, + @RequestParam Map params) { + try { + PageHelper.startPage(pageNum, pageSize); + List> list = studyCenterService.getStudyCenterList(params); + PageInfo> pageInfo = new PageInfo(list); + return AjaxResult.success().put("data", pageInfo); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("瀛︿範涓績鍒楄〃寮傚父"); + } + } + + /** + * 瀛︿範涓績璇︽儏 + * + * @param params studyCenterId 瀛︿範涓績ID + * @return success + */ + @GetMapping("/getStudyCenterInfo") + public AjaxResult getStudyCenterInfo(@RequestParam Map params) { + if (!params.containsKey("studyCenterId") || StringUtils.isBlank(params.get("studyCenterId").toString())) { + return AjaxResult.error("缂哄皯 studyCenterId 瀛︿範涓績ID"); + } + try { + return AjaxResult.success().put("data", studyCenterService.getStudyCenterInfo(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("瀛︿範涓績璇︽儏寮傚父"); + } + } + + /** + * 鑾峰彇鏈夋帹鑽愯绋嬬殑璇勪环鏈烘瀯鍒楄〃 + * + * @return 缁撴灉 + */ + @GetMapping("/getEvaluateAgencyListHasCourse") + public AjaxResult getEvaluateAgencyListHasCourse(@RequestParam Map params) { + List> evaluateAgencyListHasCourse = evaluateAgencyService.getEvaluateAgencyListHasCourse(params); + return AjaxResult.success(evaluateAgencyListHasCourse); + } + + /** + * 鑾峰彇瀛︿範涓績 鏈烘瀯鍒楄〃 + * + * @return 缁撴灉 + */ + @GetMapping("/getContinuingEducationClassList") + public AjaxResult getContinuingEducationClassList() { + List allContinuingEducationClassList = tbContinuingEducationClassService.getAllContinuingEducationClassList(); + return AjaxResult.success(allContinuingEducationClassList); + } + + /** + * 鑾峰彇瀛︿範涓績 缁х画鏁欒偛鍒嗙被 + * + * @param studyCenterId 瀛︿範涓績ID + * @return 缁撴灉 + */ + @GetMapping("/getStudyCenterEvaluateAgencyList") + public AjaxResult getStudyCenterEvaluateAgencyList(Long studyCenterId) { + List> studyCenterEvaluateAgencyList = studyCenterService.getStudyCenterEvaluateAgencyList(studyCenterId); + return AjaxResult.success(studyCenterEvaluateAgencyList); + } + + /** + * 鑾峰彇瀛︿範涓績 璇剧▼鍒楄〃 + * + * @param studyCenterId 瀛︿範涓績ID + * @return 缁撴灉 + */ + @GetMapping("/getStudyCenterCourseList") + public AjaxResult getStudyCenterCourseList(@RequestParam(defaultValue = "1") Integer pageNum, + @RequestParam(defaultValue = "10") Integer pageSize, + Long studyCenterId, + Long evaluateAgencyId) { + PageInfo> studyCenterEvaluateAgencyList = studyCenterService.getStudyCenterCourseList(pageNum, pageSize, studyCenterId, evaluateAgencyId); + return AjaxResult.success(studyCenterEvaluateAgencyList); + } + + /** + * 璇勪环鏈烘瀯鍒楄〃 + * + * @param pageNum 椤电爜 + * @param pageSize 姣忛〉鏁版嵁閲 + * @param params searchValue 鎼滅储璇 + * evaluateAgencyClassId 璇勪环鏈烘瀯鍒嗙被ID锛0鎴栦笉浼犳煡鍏ㄩ儴锛 + * @return success + */ + @GetMapping("/getEvaluateAgencyList") + public AjaxResult getEvaluateAgencyList(@RequestParam(value = "pageNum", defaultValue = "1", required = false) Integer pageNum, + @RequestParam(value = "pageSize", defaultValue = "100", required = false) Integer pageSize, + @RequestParam Map params) { + try { + PageHelper.startPage(pageNum, pageSize); + List> list = evaluateAgencyService.getEvaluateAgencyList(params); + PageInfo> pageInfo = new PageInfo(list); + return AjaxResult.success().put("data", pageInfo); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("璇勪环鏈烘瀯鍒楄〃寮傚父"); + } + } + + /** + * 璇勪环鏈烘瀯璇︽儏 + * + * @param params evaluateAgencyId 璇勪环鏈烘瀯ID + * @return ok + */ + @GetMapping("/getEvaluateAgencyInfo") + public AjaxResult getEvaluateAgencyInfo(@RequestParam Map params) { + if (!params.containsKey("evaluateAgencyId") || StringUtils.isBlank(params.get("evaluateAgencyId").toString())) { + return AjaxResult.error("缂哄皯 evaluateAgencyId 璇勪环鏈烘瀯ID"); + } + try { + return AjaxResult.success().put("data", evaluateAgencyService.getEvaluateAgencyInfo(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("璇勪环鏈烘瀯璇︽儏寮傚父"); + } + } + + /** + * 涓撲笟璇剧▼鍒楄〃 + * + * @param pageNum 椤电爜 + * @param pageSize 姣忛〉鏁版嵁閲 + * @param params searchValue 鎼滅储璇 + * majorId 涓撲笟鍒嗙被ID锛0鎴栦笉浼犳煡鍏ㄩ儴锛 + * careerId 鑱屼笟鍒嗙被ID锛0鎴栦笉浼犳煡鍏ㄩ儴锛 + * isRecommend 鎺ㄨ崘锛0鎴栦笉浼犳煡鍏ㄩ儴锛1-鎺ㄨ崘锛 + * @return success + */ + @GetMapping("/getMajorCourseList") + public AjaxResult getMajorCourseList(@RequestParam(value = "pageNum", defaultValue = "1", required = false) Integer pageNum, + @RequestParam(value = "pageSize", defaultValue = "100", required = false) Integer pageSize, + @RequestParam Map params) { + try { + PageHelper.startPage(pageNum, pageSize); + List> list = majorClassService.getMajorCourseList(params); + PageInfo> pageInfo = new PageInfo(list); + return AjaxResult.success().put("data", pageInfo); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("涓撲笟璇剧▼鍒楄〃寮傚父"); + } + } + + /** + * 鑾峰彇鏈烘瀯涓撲笟鍒嗙被 + * + * @param evaluateAgencyId 鏈烘瀯ID + * @return 缁撴灉 + */ + @GetMapping("/getEvaluateAgencyMajorClass") + public AjaxResult getEvaluateAgencyMajorClass(Long evaluateAgencyId) { + List> evaluateAgencyMajorClass = majorClassService.getEvaluateAgencyMajorClass(evaluateAgencyId); + return AjaxResult.success(evaluateAgencyMajorClass); + } + + /** + * 涓撲笟璇剧▼璇︽儏 + * + * @param params courseId 璇剧▼ID + * @return ok + */ + @GetMapping("/getMajorCourseInfo") + public AjaxResult getMajorCourseInfo(@RequestParam Map params) { + if (!params.containsKey("courseId") || StringUtils.isBlank(params.get("courseId").toString())) { + return AjaxResult.error("缂哄皯 courseId 璇剧▼ID"); + } + try { + return AjaxResult.success().put("data", majorClassService.getMajorCourseInfo(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("涓撲笟璇剧▼璇︽儏寮傚父"); + } + } + + /** + * 涓撲笟璇剧▼瑙嗛鍒楄〃 + * + * @param params courseId 璇剧▼ID + * @return ok + */ + @GetMapping("/getMajorCourseVideoList") + public AjaxResult getMajorCourseVideoList(@RequestParam Map params) { + if (!params.containsKey("courseId") || StringUtils.isBlank(params.get("courseId").toString())) { + return AjaxResult.error("缂哄皯 courseId 璇剧▼ID"); + } + try { + return AjaxResult.success().put("data", majorClassService.getMajorCourseVideoList(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("涓撲笟璇剧▼瑙嗛鍒楄〃寮傚父"); + } + } + + /** + * 缁х画鏁欒偛鍒楄〃 + * + * @param pageNum 椤电爜 + * @param pageSize 姣忛〉鏁版嵁閲 + * @param params searchValue 鎼滅储璇 + * continuingEducationClassId 缁х画鏁欒偛鍒嗙被ID锛0鎴栦笉浼犳煡鍏ㄩ儴锛 + * isRecommend 鎺ㄨ崘锛0鎴栦笉浼犳煡鍏ㄩ儴锛1-鎺ㄨ崘锛 + * @return success + */ + @GetMapping("/getContinuingEducationList") + public AjaxResult getContinuingEducationList(@RequestParam(value = "pageNum", defaultValue = "1", required = false) Integer pageNum, + @RequestParam(value = "pageSize", defaultValue = "100", required = false) Integer pageSize, + @RequestParam Map params) { + try { + PageHelper.startPage(pageNum, pageSize); + List> list = continuingEducationClassService.getContinuingEducationList(params); + PageInfo> pageInfo = new PageInfo(list); + return AjaxResult.success().put("data", pageInfo); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("缁х画鏁欒偛鍒楄〃寮傚父"); + } + } + + /** + * 璇剧▼甯堣祫鍒楄〃 + * + * @param pageNum 椤电爜 + * @param pageSize 姣忛〉鏁版嵁閲 + * @param params searchValue 鎼滅储璇 + * majorId 涓撲笟鍒嗙被ID锛0鎴栦笉浼犳煡鍏ㄩ儴锛 + * teacherId 鑰佸笀ID锛0鎴栦笉浼犳煡鍏ㄩ儴锛 + * @return success + */ + @GetMapping("/getCourseTeacherList") + public AjaxResult getCourseTeacherList(@RequestParam(value = "pageNum", defaultValue = "1", required = false) Integer pageNum, + @RequestParam(value = "pageSize", defaultValue = "100", required = false) Integer pageSize, + @RequestParam Map params) { + try { + PageHelper.startPage(pageNum, pageSize); + List> list = majorClassService.getCourseTeacherList(params); + PageInfo> pageInfo = new PageInfo(list); + return AjaxResult.success().put("data", pageInfo); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("璇剧▼甯堣祫鍒楄〃寮傚父"); + } + } + + /** + * 鑰佸笀璇︽儏 + * + * @param params teacherId 鑰佸笀ID + * @return ok + */ + @GetMapping("/getTeacherInfo") + public AjaxResult getTeacherInfo(@RequestParam Map params) { + if (!params.containsKey("teacherId") || StringUtils.isBlank(params.get("teacherId").toString())) { + return AjaxResult.error("缂哄皯 teacherId 鑰佸笀ID"); + } + try { + return AjaxResult.success().put("data", teacherService.getTeacherInfo(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鑰佸笀璇︽儏寮傚父"); + } + } + + /** + * 鏁板瓧鏁欒偛澶т細閫氱煡鍒楄〃 + * + * @param pageNum 椤电爜 + * @param pageSize 姣忛〉鏁版嵁閲 + * @param params searchValue 鎼滅储璇 + * type 绫诲瀷锛0鎴栦笉浼犳煡鍏ㄩ儴锛1-鍏憡锛2-鏂板獟浣撴姤閬擄紝3-浼氳锛-3-寰鏈熶細璁級 + * @return success + */ + @GetMapping("/getConferenceNoticeList") + public AjaxResult getConferenceNoticeList(@RequestParam(value = "pageNum", defaultValue = "1", required = false) Integer pageNum, + @RequestParam(value = "pageSize", defaultValue = "100", required = false) Integer pageSize, + @RequestParam Map params) { + try { + PageHelper.startPage(pageNum, pageSize); + List> list = conferenceNoticeService.getCourseTeacherList(params); + PageInfo> pageInfo = new PageInfo(list); + return AjaxResult.success().put("data", pageInfo); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鏁板瓧鏁欒偛澶т細閫氱煡鍒楄〃寮傚父"); + } + } + + /** + * 鏁板瓧鏁欒偛澶т細閫氱煡璇︽儏 + * + * @param params conferenceNoticeId 鏁板瓧鏁欒偛澶т細閫氱煡ID + * @return ok + */ + @GetMapping("/getConferenceNoticeInfo") + public AjaxResult getConferenceNoticeInfo(@RequestParam Map params) { + if (!params.containsKey("conferenceNoticeId") || StringUtils.isBlank(params.get("conferenceNoticeId").toString())) { + return AjaxResult.error("缂哄皯 conferenceNoticeId 鏁板瓧鏁欒偛澶т細閫氱煡ID"); + } + try { + return AjaxResult.success().put("data", conferenceNoticeService.getConferenceNoticeInfo(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鏁板瓧鏁欒偛澶т細閫氱煡璇︽儏寮傚父"); + } + } + + /** + * 鍙備細鍢夊鍒楄〃 + * + * @param params + * @return success + */ + @GetMapping("/getConferencePeopleList") + public AjaxResult getConferencePeopleList(@RequestParam Map params) { + try { + TbConferenceNotice conferenceNotice = conferenceNoticeService.selectTbConferenceNoticeByNew(); + if (conferenceNotice != null) { + params.put("conferenceNoticeId", conferenceNotice.getConferenceNoticeId()); + } else { + params.put("conferenceNoticeId", 0); + } + List> list = conferencePeopleService.getConferencePeopleList(params); + return AjaxResult.success().put("data", list); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鍙備細鍢夊鍒楄〃寮傚父"); + } + } + + /** + * 鍙備細鎶ュ悕璇︽儏 + * + * @param params memberUserId 鐢ㄦ埛ID + * @return ok + */ + @GetMapping("/getConferenceRegistrationInfo") + public AjaxResult getConferenceRegistrationInfo(@RequestParam Map params) { + if (!params.containsKey("memberUserId") || StringUtils.isBlank(params.get("memberUserId").toString())) { + return AjaxResult.error("璇峰厛鐧诲綍"); + } + try { + return AjaxResult.success().put("data", conferenceRegistrationService.getConferenceRegistrationInfo(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鍙備細鎶ュ悕璇︽儏寮傚父"); + } + } + + /** + * 鑱屼笟鑰冭瘯鍒楄〃 + * + * @param pageNum 椤电爜 + * @param pageSize 姣忛〉鏁版嵁閲 + * @param params careerId 鑱屼笟ID + * majorId 涓撲笟ID + * searchValue 鎼滅储璇 + * @return success + */ + @GetMapping("/getCareerExamList") + public AjaxResult getCareerExamList(@RequestParam(value = "pageNum", defaultValue = "1", required = false) Integer pageNum, + @RequestParam(value = "pageSize", defaultValue = "100", required = false) Integer pageSize, + @RequestParam Map params) { + try { + PageHelper.startPage(pageNum, pageSize); + List list = examService.getCareerExamList(params); + PageInfo> pageInfo = new PageInfo(list); + return AjaxResult.success().put("data", pageInfo); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鑱屼笟鑰冭瘯鍒楄〃寮傚父"); + } + } + + /** + * 鏍规嵁鏈烘瀯id鏌ヨ璇剧▼鍒楄〃 + * + * @param evaluateAgencyId 鏈烘瀯id + * @return success + */ + @GetMapping("/getCourseListByEvaluateAgency") + public AjaxResult getCourseListByEvaluateAgency(@RequestParam(required = false) Long evaluateAgencyId) { + if (null == evaluateAgencyId){ + return AjaxResult.success().put("data", new ArrayList<>()); + } + List list = examService.getCourseListByEvaluateAgency(evaluateAgencyId); + return AjaxResult.success().put("data", list); + } + + /** + * 鏍规嵁璇剧▼id鏌ヨ瀛︿範涓績 + * + * @param courseId 璇剧▼id + * @return success + */ + @GetMapping("/getStudyListByCourse") + public AjaxResult getStudyListByCourse(@RequestParam(required = false) Long courseId) { + if (null == courseId){ + return AjaxResult.success().put("data", new ArrayList<>()); + } + List list = examService.getStudyListByCourse(courseId); + return AjaxResult.success().put("data", list); + } + + + /** + * 鑱屼笟鑰冭瘯璇︽儏 + * + * @param params examId 鑰冭瘯ID + * @return ok + */ + @GetMapping("/getCareerExamInfo") + public AjaxResult getCareerExamInfo(@RequestParam Map params) { + if (!params.containsKey("examId") || StringUtils.isBlank(params.get("examId").toString())) { + return AjaxResult.error("缂哄皯 examId 鑰冭瘯ID"); + } + try { + return AjaxResult.success().put("data", examService.getCareerExamInfo(params)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鑱屼笟鑰冭瘯璇︽儏寮傚父"); + } + } + + /** + * 绔嬪嵆鍙傚姞 + * + * @param memberJoinDTO + * @return ok + */ + @RepeatSubmit + @RateLimiter(key = "API_joinNow", time = 5, count = 50) + @PostMapping("/joinNow") + public AjaxResult joinNow(@RequestBody @Validated({MemberJoinDTO.joinNow.class}) MemberJoinDTO memberJoinDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return memberJoinService.joinNow(memberJoinDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("绔嬪嵆鍙傚姞寮傚父"); + } + } + + /** + * 鐢ㄦ埛璁ㄨ鍒楄〃 + * + * @param pageNum 椤电爜 + * @param pageSize 姣忛〉鏁版嵁閲 + * @param params liveBroadcastId 鐩存挱ID + * sort (0-浠庢柊鍒拌侊紝1-浠庤佸埌鏂) + * searchValue 鎼滅储璇 + * @return success + */ + @GetMapping("/getMemberDiscussList") + public AjaxResult getMemberDiscussList(@RequestParam(value = "pageNum", defaultValue = "1", required = false) Integer pageNum, + @RequestParam(value = "pageSize", defaultValue = "100", required = false) Integer pageSize, + @RequestParam Map params) { + try { + PageHelper.startPage(pageNum, pageSize); + List> list = memberDiscussService.getMemberDiscussList(params); + PageInfo> pageInfo = new PageInfo(list); + return AjaxResult.success().put("data", pageInfo); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鐢ㄦ埛璁ㄨ鍒楄〃寮傚父"); + } + } + + /** + * 鍙戝竷璁ㄨ淇℃伅 + * + * @param memberDiscussDTO + * @return ok + */ + @RepeatSubmit + @RateLimiter(key = "API_releaseMemberDiscuss", time = 5, count = 50) + @PostMapping("/releaseMemberDiscuss") + public AjaxResult releaseMemberDiscuss(@RequestBody @Validated({MemberDiscussDTO.releaseMemberDiscuss.class}) MemberDiscussDTO memberDiscussDTO, BindingResult bindingResult) { + // 鍙傛暟鏍¢獙 + if (bindingResult.hasErrors()) { + return AjaxResult.allParameterErrors(bindingResult); + } + try { + return memberDiscussService.releaseMemberDiscuss(memberDiscussDTO); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鍙戝竷璁ㄨ淇℃伅寮傚父"); + } + } + + /** + * 鏍规嵁璇剧▼绫诲瀷鑾峰彇鏈烘瀯鍒楄〃 + * + * @param classType 1-鑱屼笟鑰冭瘯锛2-鑱屼笟鎶鑳 + * @return 缁撴灉 + */ + @GetMapping("/getEvaluateAgencyListByClassType") + public AjaxResult getEvaluateAgencyListByClassType(Integer classType) { + List> evaluateAgencyListByClassType = evaluateAgencyService.getEvaluateAgencyListByClassType(classType); + return AjaxResult.success(evaluateAgencyListByClassType); + } + + /** + * 鑾峰彇璇剧▼鍚嶇О鍒楄〃 + * @param pageNum 椤电爜 + * @param pageSize 姣忛〉灞曠ず鏁伴噺 + * @param searchValue 鎼滅储鍊 + * @return 缁撴灉 + */ + @GetMapping("/getCourseNameListForInput") + public AjaxResult getCourseNameListForInput(@RequestParam(defaultValue = "1") Integer pageNum, + @RequestParam(defaultValue = "10") Integer pageSize, + @RequestParam(required = false) String searchValue, + @RequestParam(required = false) Long memberUserId) { + PageInfo> courseNameListForInput = tbCourseService.getCourseNameListForInput(pageNum, pageSize, searchValue,memberUserId); + return AjaxResult.success(courseNameListForInput); + } + + + /** + * 鐑悳 + * @return 缁撴灉 + */ + @GetMapping("/getHotSearch") + public AjaxResult getHotSearch(@RequestParam(required = false) Integer size) { + List hotSearch = tbCourseService.getHotSearch(size); + return AjaxResult.success(hotSearch); + } + + + /** + * 鎼滅储鍘嗗彶璁板綍 + * @param memberUserId 鐢ㄦ埛id + * @param size 鏁伴噺 + * @return 缁撴灉 + */ + @GetMapping("/getHistoricalRecords") + public AjaxResult getHistoricalRecords(@RequestParam Long memberUserId,@RequestParam(required = false) Integer size) { + List historicalRecords = tbCourseService.getHistoricalRecords(memberUserId,size); + return AjaxResult.success(historicalRecords); + } + + + /** + * 鍒犻櫎鍘嗗彶璁板綍 + * @return 缁撴灉 + */ + @PostMapping("/delHistoricalRecords") + public AjaxResult delHistoricalRecords(@RequestBody DelHistoricalRecordsDTO dto) { + return AjaxResult.toAjax(tbCourseService.delHistoricalRecords(dto)); + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiPayController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiPayController.java new file mode 100644 index 0000000000000000000000000000000000000000..5ae3e7fc3870e166a9dc8dea7c34b30b998aed2e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiPayController.java @@ -0,0 +1,307 @@ +package com.ruoyi.hezhi.api.kaoshi; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson2.JSONObject; +import com.alipay.api.internal.util.AlipaySignature; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.weixin.config.WeiXinPayConfig; +import com.ruoyi.common.weixin.utils.WeiXinPayV3Utils; +import com.ruoyi.hezhi.api.entity.AliPayConfig; +import com.ruoyi.hezhi.api.entity.AlipayService; +import com.ruoyi.hezhi.domain.TbExamRegistration; +import com.ruoyi.hezhi.domain.TbMemberOrder; +import com.ruoyi.hezhi.domain.dto.ExamPayInfoDto; +import com.ruoyi.hezhi.service.ITbExamRegistrationService; +import com.ruoyi.hezhi.service.ITbMemberOrderService; +import com.ruoyi.hezhi.service.IWxPayService; +import io.swagger.annotations.Api; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.ObjectUtils; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +/** + * 鏀粯 + */ +@Api("鏀粯") +@RestController +@RequestMapping("/api/pay") +public class ApiPayController { + + private static final Logger log = LoggerFactory.getLogger(ApiPayController.class); + @Resource + private ITbMemberOrderService memberOrderService; + + @Resource + private WeiXinPayV3Utils weiXinPayV3Utils; + + @Resource + private AliPayConfig aliPayConfig; + @Resource + private AlipayService alipayService; + @Resource + private WeiXinPayConfig weiXinPayConfig; + @Resource + private IWxPayService wxPayService; + @Resource + private ITbExamRegistrationService examRegistrationService; + + /** + * alipay鎵爜鏀粯 + */ + @GetMapping("/aliPayScanCode") + public AjaxResult aliPayScanCode(String orderNo) { + //todo 妫娴嬭冭瘯鎶ュ悕鏃堕棿鏄惁杩囦簡锛堟敮浠樺疂锛夈愬緟娴嬭瘯銆 + if (StrUtil.isBlank(orderNo)) { + return AjaxResult.error("鍙傛暟閿欒"); + } + ExamPayInfoDto examPayInfoDto = memberOrderService.selectExamPayInfoByOrderNo(orderNo); + if(examPayInfoDto!=null&&examPayInfoDto.getIsExpired()==1){ + return AjaxResult.error("鑰冭瘯鎶ュ悕鏃堕棿宸茶繃锛岃閲嶆柊鎶ュ悕"); + } + TbMemberOrder order = memberOrderService.selectOrderByOrderNo(orderNo); + if (ObjectUtils.isEmpty(order)) { + return AjaxResult.error("鍙傛暟閿欒"); + } + JSONObject result = new JSONObject(); + + BigDecimal payPrice = order.getPayPrice(); + + if (payPrice.compareTo(BigDecimal.ZERO) < 1){ + // 鏃犻渶鏀粯 + result.put("isNeedPay", 0); + memberOrderService.orderPayNotify(order.getOrderNo(), 2); + }else { + // 闇瑕佹敮浠 + result.put("isNeedPay", 1); + log.info("鏀粯瀹濋涓嬪崟锛屽晢鎴疯鍗曞彿锛歿}", orderNo); + try { + TbExamRegistration tbExamRegistration = examRegistrationService.selectTbExamRegistrationByExamRegistrationIdFahuo(order.getDataId()); + if (ObjectUtil.isNull(tbExamRegistration)) { + return AjaxResult.error("鑾峰彇鎶ュ悕淇℃伅澶辫触锛屼笅鍗曞け璐"); + } + String payInfo = alipayService.aliPaySubmit(order.getPayPrice(), order.getOrderNo(), order.getOrderName(),tbExamRegistration.getExamId(),tbExamRegistration.getMemberUserId()); + result.put("payInfo", payInfo); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("涓嬪崟澶辫触"); + } + } + return AjaxResult.success(result); + } + + /*** + * 鑾峰彇寰俊鏀粯浜岀淮鐮 + * @param orderNo 璁㈠崟鍙 + * @return 缁撴灉 + */ + @GetMapping("/createNativePayParam") + public AjaxResult createNativePayParam(String orderNo) { + //todo 妫娴嬭冭瘯鎶ュ悕鏃堕棿鏄惁杩囦簡锛堝井淇★級銆愬緟娴嬭瘯銆 + if (StrUtil.isBlank(orderNo)) { + throw new ServiceException("鍙傛暟閿欒"); + } + ExamPayInfoDto examPayInfoDto = memberOrderService.selectExamPayInfoByOrderNo(orderNo); + if(examPayInfoDto!=null&&examPayInfoDto.getIsExpired()==1){ + return AjaxResult.error("鑰冭瘯鎶ュ悕鏃堕棿宸茶繃锛岃閲嶆柊鎶ュ悕"); + } + TbMemberOrder order = memberOrderService.selectOrderByOrderNo(orderNo); + if (ObjectUtils.isEmpty(order)) { + throw new ServiceException("璁㈠崟閿欒"); + } + + BigDecimal payPrice = order.getPayPrice(); + + if(payPrice.compareTo(BigDecimal.ZERO) < 1) { + // 鏃犻渶鏀粯 + JSONObject data = new JSONObject(); + data.put("isNeedPay", 0); + memberOrderService.orderPayNotify(orderNo, 1); + return AjaxResult.success(data); + }else { + JSONObject amount = new JSONObject(); + //鍗曚綅涓轰汉姘戝竵锛堝垎锛 + amount.put("total", order.getPayPrice().multiply(new BigDecimal("100")).intValue()); + amount.put("currency", "CNY"); + + JSONObject postData = new JSONObject(); + postData.put("appid", weiXinPayConfig.getAppId()); + postData.put("mchid", weiXinPayConfig.getMchId()); + postData.put("description", order.getRemarks()); + postData.put("out_trade_no", orderNo); + postData.put("notify_url", weiXinPayConfig.getNotifyUrl()); + postData.put("amount", amount); + + log.info("NATIVE涓嬪崟-鍙傛暟 => {}", postData.toJSONString()); + + // 鍙戦佽姹 + JSONObject result = weiXinPayV3Utils.sendPost("https://api.mch.weixin.qq.com/v3/pay/transactions/native", postData); + log.info("NATIVE涓嬪崟-缁撴灉 => {}", postData.toJSONString()); + if (result.containsKey("code_url")) { + // 鏀粯浜岀淮鐮 + HashMap map = new HashMap<>(); + map.put("codeUrl", result.getString("code_url")); + map.put("isNeedPay", 1); + return AjaxResult.success(map); + } else { + log.error("NATIVE涓嬪崟璋冭捣澶辫触 <{}> 鍙傛暟锛歿}锛岀粨鏋滐細{}", DateUtils.getTime(), postData.toJSONString(), result.toJSONString()); + throw new ServiceException("NATIVE涓嬪崟璋冭捣澶辫触"); + } + } + } + + /** + * 寰俊鏀粯浜岀淮鐮佹敮浠樺洖璋 + * + * @param httpServletRequest 璇锋眰 + * @param httpServletResponse 鍝嶅簲 + */ + @ResponseBody + @PostMapping("/createNativePayParamNotify") + public String createNativePayParamNotify(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { + log.info("寰俊鏀粯浜岀淮鐮佹敮浠樺洖璋 ->" + httpServletRequest); + String code = "FAIL"; + String message = ""; + try { + /// 瑙f瀽鍥炶皟鍙傛暟 + JSONObject callbackData = weiXinPayV3Utils.getNotifyDate(httpServletRequest); + if (ObjectUtil.isNotEmpty(callbackData)) { + log.info("鏀粯鍥炶皟鍙傛暟 ->" + callbackData.toJSONString()); + if (callbackData.containsKey("trade_state") && "SUCCESS".equals(callbackData.get("trade_state"))) { + // 鏀粯鎴愬姛 + String orderNo = callbackData.getString("out_trade_no"); + + String msg = ""; + try { + msg = memberOrderService.orderPayNotify(orderNo, 1); + } catch (Exception e) { + e.printStackTrace(); + msg = "FAIL"; + } + + if ("SUCCESS".equals(msg)) { + code = "SUCCESS"; + } else { + message = "鍟嗘埛涓氬姟澶勭悊寮傚父"; + } + + } else { + message = "鍥炶皟鍙傛暟寮傚父"; + } + } else { + message = "鍥炶皟鍙傛暟瑙f瀽寮傚父"; + } + } catch (Exception e) { + e.printStackTrace(); + log.error("寰俊鏀粯鍥炶皟锛岃В鏋愬紓甯"); + message = "鍥炶皟鍙傛暟瑙f瀽寮傚父"; + } + // 鍝嶅簲鎶ユ枃 + JSONObject returnJson = new JSONObject(); + returnJson.put("code", code); + returnJson.put("message", message); + return returnJson.toJSONString(); + } + + /** + * 鏀粯瀹濇敮浠樺洖璋-瀛︿俊鑰冭瘯鏀粯 + * @param httpServletRequest 璇锋眰 + * @param httpServletResponse 鍝嶅簲 + */ + @PostMapping("/aliPayBoilerNotify") + @ResponseBody + public String aliPayBoilerNotify(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse){ + try { + //鑾峰彇鏀粯瀹漃OST杩囨潵鍙嶉淇℃伅 + //鑾峰彇鏀粯瀹漃OST杩囨潵鍙嶉淇℃伅锛屽皢寮傛閫氱煡涓敹鍒扮殑寰呴獙璇佹墍鏈夊弬鏁伴兘瀛樻斁鍒癿ap涓 + Map< String , String > params = new HashMap< String , String >(); + Map requestParams = httpServletRequest.getParameterMap(); + for(Iterator iter = requestParams.keySet().iterator(); iter.hasNext();){ + String name = (String)iter.next(); + String[] values = (String [])requestParams.get(name); + String valueStr = ""; + for(int i = 0;i < values.length;i ++ ){ + valueStr = (i==values.length-1)?valueStr + values [i]:valueStr + values[i] + ","; + } + //涔辩爜瑙e喅锛岃繖娈典唬鐮佸湪鍑虹幇涔辩爜鏃朵娇鐢ㄣ + //valueStr = new String(valueStr.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8); + params.put (name,valueStr); + } + log.error("鏀粯瀹濇敮浠樺洖璋-瀛︿俊鑰冭瘯鏀粯 <{}> 璁㈠崟鍙傛暟 <{}> ", DateUtils.getTime(), params); + boolean flag = AlipaySignature.rsaCheckV1 (params, aliPayConfig.getPublicKey(), "UTF-8","RSA2"); + if (flag){ + // 瀵规敮浠樼粨鏋滀腑鐨勪笟鍔¤繘琛岄獙璇 + String s = alipayService.checkParams(params); + if (s.equals("success")){ + log.error("鏀粯瀹濇敮浠樺洖璋-瀛︿俊鑰冭瘯鏀粯 <{}> 绛惧悕璁よ瘉鎴愬姛 <{}> ", DateUtils.getTime(), params); + String orderNo = params.get("out_trade_no"); + // 涓氬姟澶勭悊 + String msg = ""; + try { + msg = memberOrderService.orderPayNotify(orderNo, 2); + }catch (Exception e){ + log.error("鏀粯瀹濇敮浠樺洖璋-瀛︿俊鑰冭瘯鏀粯<{}> 璁㈠崟鍙 <{}> 璁㈠崟澶勭悊寮傚父", DateUtils.getTime(), orderNo); + msg = "FAIL"; + } + if(msg.equals("SUCCESS")){ + return "success"; + }else{ + return "fail"; + } + }else{ + log.error("鏀粯瀹濇敮浠樺洖璋-瀛︿俊鑰冭瘯鏀粯 <{}> 绛惧悕璁よ瘉澶辫触 <{}> ", DateUtils.getTime(), params); + return "fail"; + } + }else{ + log.error("鏀粯瀹濇敮浠樺洖璋-瀛︿俊鑰冭瘯鏀粯 <{}> 瑙e瘑澶辫触 <{}> ", DateUtils.getTime(), params); + return "fail"; + } + } catch (Exception e) { + e.printStackTrace(); + return "fail"; + } + } + + /** + * 鏌ヨ璁㈠崟鐘舵 + * + * @param orderNo 璁㈠崟缂栧彿 + * @return ok + */ + @GetMapping("/getOrderStatus") + public AjaxResult getOrderStatus(String orderNo) { + try { + return AjaxResult.success().put("data", memberOrderService.selectOrderByOrderNo(orderNo)); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("鏌ヨ璁㈠崟鐘舵佸紓甯"); + } + } + + @GetMapping("/test") + public AjaxResult test(){ + + String s = memberOrderService.orderPayNotify("1870522601479000064", 1); + return AjaxResult.success(); + } + + /** + * 鍒涘缓璁㈠崟鏀粯 + */ + @GetMapping("/createWxOrder") + public AjaxResult createWxOrder(@RequestParam String orderNo) { + return AjaxResult.success(wxPayService.createOrder(orderNo)); + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiTestController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiTestController.java new file mode 100644 index 0000000000000000000000000000000000000000..078d5dc998a8a8fded29cfd1c579fe36158423e1 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiTestController.java @@ -0,0 +1,232 @@ +package com.ruoyi.hezhi.api.kaoshi; + +import cn.hutool.extra.qrcode.QrCodeUtil; +import cn.hutool.extra.qrcode.QrConfig; +import com.aspose.words.Document; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.asPose.AsposeUtil; +import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.common.weixin.config.WeiXinPayConfig; +import com.ruoyi.hezhi.domain.TbMemberOrder; +import com.ruoyi.hezhi.service.*; +import io.swagger.annotations.Api; +import org.springframework.data.repository.init.ResourceReader; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.imageio.ImageIO; +import javax.servlet.http.HttpServletResponse; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.math.BigDecimal; +import java.net.URLEncoder; +import java.util.Base64; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * @Author: LCL + * @Date: 2024/10/08 + * @Description:閫氱敤API + */ +@Api("娴嬭瘯") +@RestController +@RequestMapping("/api/test") +public class ApiTestController { + + @Resource + private ITbStudyCenterService studyCenterService; + @Resource + private ITbStudentService studentService; + @Resource + private ITbConferenceRegistrationService conferenceRegistrationService; + @Resource + private ITbExamRegistrationService examRegistrationService; + @Resource + private ITbMemberOrderService memberOrderService; + @Resource + private WeiXinPayConfig weiXinPayConfig; + + + /** + * test1 + * + * @return success + */ + @GetMapping("/test1") + public AjaxResult test1(Long memberUserId, Long examRegistrationId, BigDecimal price) { + try { + TbMemberOrder memberOrder = new TbMemberOrder(); + memberOrder.setOrderNo(DateUtils.parseDateToStr(DateUtils.YYYYMMDDHHMMSSSSS,new Date())); + memberOrder.setMemberUserId(memberUserId); + memberOrder.setDataId(examRegistrationId); + memberOrder.setPayPrice(price); + memberOrder.setOrderType(2); + memberOrder.setPayType(0); + memberOrder.setPayStatus(0); + memberOrder.setRemarks("鑰冭瘯鎶ュ悕璐"); + memberOrderService.insertTbMemberOrder(memberOrder); + return AjaxResult.success(); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("test1寮傚父"); + } + } + + /** + * test2 + * + * @return success + */ + @GetMapping("/test2") + public AjaxResult test2(HttpServletResponse response) { + try { + System.out.println("____________________--wxLogin"); + + //redirect_url鏄洖璋冨湴鍧 娉ㄦ剰瑕佽浆鎹㈡垚UrlEncode鏍煎紡 + String redirectUrl = URLEncoder.encode("https://web.xuexin.com/wxCallback","UTF-8"); + //鏋勯犱簩缁寸爜閾炬帴鍦板潃 + String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+weiXinPayConfig.getAppIdLogin()+"&redirect_uri="+redirectUrl+"&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"; + //鐢熸垚鐨勪簩缁寸爜锛屾壂鎻忓悗璺宠浆涓婇潰鐨勫湴鍧 + // response.setContentType("image/png"); + // QrCodeUtil.generate(url,300,300,"jpg", response.getOutputStream()); + + // 鏍规嵁瀹為檯闇姹傚~鍐 淇濆瓨鏂囦欢璺緞 + // String filePath = "E:\\java\\椤圭洰\\IDEA\\瀛︿俊鑰冭瘯\\鍥剧墖" + IdUtil.simpleUUID() + ".png"; + // 鐢熸垚浜岀淮鐮佸浘鐗囧苟淇濆瓨鍒版湰鍦 + // QrCodeUtil.generate(url, 300, 300, FileUtil.file(filePath)); + + + QrConfig config = new QrConfig(300, 300); + // 璁剧疆杈硅窛锛屾棦浜岀淮鐮佸拰鑳屾櫙涔嬮棿鐨勮竟璺 + config.setMargin(3); + // 璁剧疆鍓嶆櫙鑹诧紝鏃簩缁寸爜棰滆壊锛堥潚鑹诧級 + config.setForeColor(Color.BLUE); + // 璁剧疆鑳屾櫙鑹诧紙鐏拌壊锛 + config.setBackColor(Color.gray); + // 鐢熸垚浜岀淮鐮佸埌鏂囦欢锛屼篃鍙互鍒版祦 + BufferedImage image = QrCodeUtil.generate(url, config); + + //灏唍ewImage鍐欏叆瀛楄妭鏁扮粍杈撳嚭娴 + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try { + ImageIO.write(image, "jpg", baos ); + } catch (IOException e) { + e.printStackTrace(); + } + // 鑾峰彇瀛楄妭鏁扮粍 + byte[] data = baos.toByteArray(); + String base64String = Base64.getEncoder().encodeToString(data); + HashMap map = new HashMap<>(); + map.put("qrcodeUrlBase64", base64String); + + return AjaxResult.success(map); + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error("test2寮傚父"); + } + } + + /** + * 寰俊鐧诲綍浜岀淮鐮 + * + * @param + * @return 缁撴灉 + */ + @GetMapping("/wxLoginQRCode") + public AjaxResult wxLoginQRCode() { + // 寰俊寮鏀惧钩鍙版巿鏉僢aseUrl锛屽浐瀹氱殑鍦板潃 + String baseUrl = "https://open.weixin.qq.com/connect/qrconnect" + + "?appid=%s" + + "&redirect_uri=%s" + + "&response_type=code" + + "&scope=snsapi_login" + + "&state=%s" + + "#wechat_redirect"; + // 鍥炶皟鍦板潃 + String redirectUrl = weiXinPayConfig.getRedirectUrl(); //鑾峰彇涓氬姟鏈嶅姟鍣ㄩ噸瀹氬悜鍦板潃 + try { + redirectUrl = URLEncoder.encode(redirectUrl, "UTF-8"); //url缂栫爜 + } catch (UnsupportedEncodingException e) { + throw new ServiceException(e.getMessage()); + } + // 闃叉csrf鏀诲嚮锛堣法绔欒姹備吉閫犳敾鍑伙級 + String state = IdUtils.randomUUID().replaceAll("-", "");//涓鑸儏鍐典笅浼氫娇鐢ㄤ竴涓殢鏈烘暟 + //鐢熸垚qrcodeUrl + String qrcodeUrl = String.format( + baseUrl, + weiXinPayConfig.getAppIdLogin(), + redirectUrl, + state); + HashMap map = new HashMap<>(); + map.put("qrcodeUrl", qrcodeUrl); + return AjaxResult.success(map); + } + + public static void main(String[] args) { + + + + } + + /** + * 娓叉煋doc + * @param stream + * @param saveUrl + * @param paramMap + * @param watermark + * @param flag + */ + public static void test(InputStream stream, String saveUrl, Map paramMap, String watermark, Boolean flag){ +// Map paramMap = new HashMap<>(); +// paramMap.put("$濮撳悕$", "褰簬鏅"); +// paramMap.put("$鎬у埆$", "鐢"); +// paramMap.put("$鏇剧敤鍚$", "鍒樺痉鍗"); +// paramMap.put("$姘戞棌$", "姹夋棌"); +// paramMap.put("$韬唤璇佸彿$", "411111111111111111"); +// paramMap.put("$鍑虹敓骞$", "2002"); +// paramMap.put("$鍑虹敓鏈$", "11"); +// paramMap.put("$鍑虹敓鏃$", "13"); +// paramMap.put("$鐢熸簮绫诲瀷$", "娌冲崡"); +// paramMap.put("$绫嶈疮$", "娌冲崡"); +// paramMap.put("$鏀挎不闈㈣矊$", "缇や紬"); +// paramMap.put("$钃濆簳璇佷欢鐓$", "$pic:https://image.xnszz.com/IMG_787_443@FjG6j3N87NSxvu29laajrnE33VBN.jpg"); +// paramMap.put("$瀛﹀巻$", "纭曞+"); +// paramMap.put("$涓撲笟$", "璁$畻鏈虹瀛︿笌鎶鏈"); +// paramMap.put("$鎵鍦ㄥ鏍$", "閮戝窞杞诲伐涓氬ぇ瀛"); +// paramMap.put("$鍏ュ骞翠唤$", "2019"); +// paramMap.put("$鑱旂郴鏂瑰紡$", "18595927131"); +// paramMap.put("$閫氫俊鍦板潃$", "娌冲崡鐪侀儜宸炲競閲戞按鍖哄ぉ浼﹁矾9鍙烽櫌"); +// paramMap.put("$閭紪$", "450000"); +// paramMap.put("$鑱旂郴鐢佃瘽$", "18595927131"); +// paramMap.put("$鐢靛瓙閭$", "wny1123@163.com"); +// paramMap.put("$鏈烘瀯鍚嶇О$", "宸ヤ笟鍜屼俊鎭寲閮ㄦ暀鑲蹭笌鑰冭瘯涓績"); +// paramMap.put("$鑱屼笟鍚嶇О$", "楂樼骇缃戠粶涓庝俊鎭畨鍏ㄥ伐绋嬪笀"); +// paramMap.put("$鎶ュ悕鎵规$", "202407"); +// paramMap.put("$瀛︿範涓績$", "娌冲崡鐪佹暟瀛楀晢鍔′腑蹇"); +// paramMap.put("$鏈烘瀯浠g爜$", "91410183MA9NBKTX3U"); +// paramMap.put("$骞$", "2024"); +// paramMap.put("$鏈$", "12"); +// paramMap.put("$鏃$", "16"); +// paramMap.put("$韬唤璇佹闈$", "$pic:http://www.chsie.com.cn/img/logo.34210b2b.png"); +// paramMap.put("$韬唤璇佸弽闈$", "$pic:http://www.chsie.com.cn/img/logo.34210b2b.png"); + + InputStream inputStream = ResourceReader.class.getClassLoader().getResourceAsStream("reportForm/瀛︿俊鑰冭瘯鍗锋姤鍚嶈〃锛堟柊锛.docx"); + Document nodes = AsposeUtil.replace4Doc( + inputStream, + "C:\\Users\\lenovo\\Desktop\\鏂板缓 Microsoft Word 鏂囨。.docx", + paramMap, + "0", + false); + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiWeiXinController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiWeiXinController.java new file mode 100644 index 0000000000000000000000000000000000000000..3a214a9ee8a2b9d1378424eb2f414c87a7ee84f6 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/api/kaoshi/ApiWeiXinController.java @@ -0,0 +1,227 @@ +package com.ruoyi.hezhi.api.kaoshi; + +import com.alibaba.fastjson2.JSONObject; +import com.kuaidi100.sdk.response.SubscribeResp; +import com.kuaidi100.sdk.utils.SignUtils; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.kd100.Kd100Util; +import com.ruoyi.common.weixin.message.MessageUtil; +import com.ruoyi.common.weixin.utils.WeiXinGzhUtils; +import com.ruoyi.hezhi.domain.TbExamRegistration; +import com.ruoyi.hezhi.mapper.TbExamRegistrationMapper; +import io.swagger.annotations.Api; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +/** + * 寰俊鐩稿叧鎺ュ彛 + */ +@Api("寰俊") +@RestController +@RequestMapping("/api/weiXin") +public class ApiWeiXinController { + + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Resource + private WeiXinGzhUtils weiXinGzhUtils; + + @Resource + private RedisCache redisCache; + + @Resource + private Kd100Util kd100Util; + + @Resource + private TbExamRegistrationMapper tbExamRegistrationMapper; + + /** + * 鑾峰彇寰俊鎺堟潈鐧诲綍浜岀淮鐮 + * @return 缁撴灉 + */ + @RepeatSubmit + @GetMapping("/getWeiXinQrCode") + public AjaxResult getWeiXinQrCode(){ + JSONObject qrCodeByTicket = weiXinGzhUtils.getQrCodeByTicket(); + System.out.println(qrCodeByTicket); + return AjaxResult.success(qrCodeByTicket); + } + + /** + * 鎺ュ彈寰俊閫氱煡 + * @param request 璇锋眰 + * @return 缁撴灉 + * @throws Exception + */ + @RequestMapping(value = "/notifyMsg") + @ResponseBody + public String checkSign (HttpServletRequest request, HttpServletResponse response){ + // 璁剧疆缂栫爜鏍煎紡 + response.setCharacterEncoding("utf-8"); + // 妫楠屾秷鎭槸鍚︿粠寰俊鏈嶅姟鍣ㄥ彂鍑 + // 绛惧悕 + String signature = request.getParameter("signature"); + // 鏃堕棿鎴 + String timestamp = request.getParameter("timestamp"); + // 闅忔満鏁 + String nonce = request.getParameter("nonce"); + // 闅忔満瀛楃涓 + String echostr = request.getParameter("echostr"); + // 鍔犲瘑绫诲瀷 + String encryptType = request.getParameter("encrypt_type"); + if (StringUtils.isBlank(echostr)){ + echostr = "SUCCESS"; + } + + logger.info("寮濮嬫牎楠屾娆℃秷鎭槸鍚︽潵鑷井淇℃湇鍔″櫒锛宲aram-> \nsignature:{},\ntimestamp:{},\nnonce:{},\nechostr:{}", + signature, timestamp, nonce, echostr); + if (weiXinGzhUtils.checkSignature(signature, timestamp, nonce)) { + String result = ""; + try { + InputStream inStream = request.getInputStream(); + ByteArrayOutputStream outSteam = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + int len = 0; + while ((len = inStream.read(buffer)) != -1) { + outSteam.write(buffer, 0, len); + } + outSteam.close(); + inStream.close(); + result = outSteam.toString("UTF-8"); + logger.info("callBackMap 鎺ユ敹寰俊鍙傛暟 鍘熸枃 -> {}", result); + // 鑾峰彇鐨勫洖璋冩秷鎭 + if (StringUtils.isNotBlank(result)){ + + Map callBackMap = weiXinGzhUtils.xmlToMap(result); + // 寮鍙戣呭井淇″彿 + String toUserName = callBackMap.get("ToUserName"); + // 鍙戦佹柟璐﹀彿(涓涓狾penID) + String fromUserName = callBackMap.get("FromUserName"); + // 鎺ユ敹娑堟伅绫诲瀷: 鏅氭秷鎭(text)銆佷簨浠舵帹閫 + String msgType = callBackMap.get("MsgType"); + logger.info("callBackMap 鎺ユ敹寰俊鍙傛暟 杞崲 -> {}锛屽紑鍙戣呰处鍙 ToUserName -> {}锛屽彂閫佹柟璐﹀彿 FromUserName -> {}锛屾帴鏀舵秷鎭被鍨 MsgType -> {}", callBackMap, toUserName, fromUserName, msgType); + + // 鍏紬鍙峰洖澶嶇殑娑堟伅 + String message =null; + if (StringUtils.isNotBlank(fromUserName)){ + if ("event".equals(msgType)){ + // uuid + String eventKey = callBackMap.get("EventKey"); + // 浜嬩欢绫诲瀷 + String event = callBackMap.get("Event"); + + String uuid = ""; + + if ("SCAN".equals(event)){ + uuid = eventKey; + logger.info("鎺ユ敹鍒颁簨浠 鎵爜 FromUserName -> {}", fromUserName); + } + if ("subscribe".equals(event)){ + if (StringUtils.isNotBlank(eventKey) && eventKey.startsWith("qrscene")){ + logger.info("鎺ユ敹鍒颁簨浠 鎵爜鍏虫敞 FromUserName -> {}", fromUserName); + String[] split = eventKey.split("_"); + uuid = split[1]; + } + } + + if (StringUtils.isNotBlank(uuid)){ + + // 璁剧疆uuid缂撳瓨 + String redisKey = CacheConstants.CODE_LOGIN_TOKEN_KEY + uuid; + if (!redisCache.hasKey(redisKey)){ + redisCache.setCacheObject(redisKey, fromUserName, 300, TimeUnit.SECONDS); + } + + //鍥炲鏂囨湰鍐呭 + message = MessageUtil.replyContent(fromUserName, toUserName, "浣犲ソ"); + + if (StringUtils.isNotBlank(message)){ + return message; + } + + } + } + } + } + }catch (Exception e){ + e.printStackTrace(); + return "FAIL"; + } + // 澶勭悊鐢ㄦ埛鍏虫敞鍏紬鍙 + return echostr; + }else { + logger.info("鏍¢獙澶辫触锛宲aram-> \nsignature:{},\ntimestamp:{},\nnonce:{},\nechostr:{}", + signature, timestamp, nonce, echostr); + return "FAIL"; + } + } + + /** + * 鎺ユ敹蹇100涓嬪崟鍥炶皟 + * @return 缁撴灉 + */ + @PostMapping("/kuaiDiCallBack") + public SubscribeResp kuaiDiCallBack(HttpServletRequest request){ + + String param = request.getParameter("param"); + String sign = request.getParameter("sign"); + //寤鸿璁板綍涓涓嬭繖涓洖璋冪殑鍐呭锛屾柟渚垮嚭闂鍚庡弻鏂规帓鏌ラ棶棰 + logger.debug("蹇100璁㈤槄鎺ㄩ佸洖璋冪粨鏋渱{}|{}",param,sign); + //璁㈤槄鏃朵紶鐨剆alt,娌℃湁鍙互蹇界暐 + String salt = System.currentTimeMillis() +kd100Util.getKey()+kd100Util.getSecret(); + String ourSign = SignUtils.sign(param + salt); + SubscribeResp subscribeResp = new SubscribeResp(); + subscribeResp.setResult(Boolean.TRUE); + subscribeResp.setReturnCode("200"); + subscribeResp.setMessage("鎴愬姛"); + //鍔犲瘑濡傛灉鐩哥瓑锛屽睘浜庡揩閫100鎺ㄩ侊紱鍚﹀垯鍙互蹇界暐鎺夊綋鍓嶈姹 + if (ourSign.equals(sign)){ + //TODO 涓氬姟澶勭悊 + + JSONObject result = JSONObject.parseObject(param); + if ("200".equals(result.getString("status"))){ + + String kuaidicom = result.getString("kuaidicom");//蹇掑叕鍙哥紪鍙 + String kuaidinum = result.getString("kuaidinum");//蹇掑崟鍙 + JSONObject data = result.getJSONObject("data"); + String orderId = data.getString("orderId"); + Integer status = data.getInteger("status"); + + TbExamRegistration tbExamRegistration = tbExamRegistrationMapper.getByShippingOrderId(orderId); + if (ObjectUtils.isNotEmpty(tbExamRegistration)){ + + tbExamRegistration.setShippingStatus(status.toString()); + tbExamRegistration.setShippingMark(kuaidicom); + tbExamRegistration.setShippingCode(kuaidinum); + if (status == 0){ + tbExamRegistration.setCertificateStatus(2); + tbExamRegistration.setConsignAt(DateUtils.getTime()); + } + if (status == 13){ + tbExamRegistration.setCertificateStatus(3); + } + tbExamRegistrationMapper.updateTbExamRegistration(tbExamRegistration); + } + } + + return subscribeResp; + } + return null; + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbAuthorizeHonorController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbAuthorizeHonorController.java new file mode 100644 index 0000000000000000000000000000000000000000..747e69205a0879b0557a7a791fed0374756c1c91 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbAuthorizeHonorController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbAuthorizeHonor; +import com.ruoyi.hezhi.service.ITbAuthorizeHonorService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鎺堟潈鑽h獕Controller + * + * @author ruoyi + * @date 2024-10-16 + */ +@RestController +@RequestMapping("/hezhi/authorizeHonor") +public class TbAuthorizeHonorController extends BaseController +{ + @Autowired + private ITbAuthorizeHonorService tbAuthorizeHonorService; + + /** + * 鏌ヨ鎺堟潈鑽h獕鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:authorizeHonor:list')") + @GetMapping("/list") + public TableDataInfo list(TbAuthorizeHonor tbAuthorizeHonor) + { + startPage(); + List list = tbAuthorizeHonorService.selectTbAuthorizeHonorList(tbAuthorizeHonor); + return getDataTable(list); + } + + /** + * 瀵煎嚭鎺堟潈鑽h獕鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:authorizeHonor:export')") + @Log(title = "鎺堟潈鑽h獕", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbAuthorizeHonor tbAuthorizeHonor) + { + List list = tbAuthorizeHonorService.selectTbAuthorizeHonorList(tbAuthorizeHonor); + ExcelUtil util = new ExcelUtil(TbAuthorizeHonor.class); + util.exportExcel(response, list, "鎺堟潈鑽h獕鏁版嵁"); + } + + /** + * 鑾峰彇鎺堟潈鑽h獕璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:authorizeHonor:query')") + @GetMapping(value = "/{authorizeHonorId}") + public AjaxResult getInfo(@PathVariable("authorizeHonorId") Long authorizeHonorId) + { + return success(tbAuthorizeHonorService.selectTbAuthorizeHonorByAuthorizeHonorId(authorizeHonorId)); + } + + /** + * 鏂板鎺堟潈鑽h獕 + */ + @PreAuthorize("@ss.hasPermi('hezhi:authorizeHonor:add')") + @Log(title = "鎺堟潈鑽h獕", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbAuthorizeHonor tbAuthorizeHonor) + { + return toAjax(tbAuthorizeHonorService.insertTbAuthorizeHonor(tbAuthorizeHonor)); + } + + /** + * 淇敼鎺堟潈鑽h獕 + */ + @PreAuthorize("@ss.hasPermi('hezhi:authorizeHonor:edit')") + @Log(title = "鎺堟潈鑽h獕", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbAuthorizeHonor tbAuthorizeHonor) + { + return toAjax(tbAuthorizeHonorService.updateTbAuthorizeHonor(tbAuthorizeHonor)); + } + + /** + * 鍒犻櫎鎺堟潈鑽h獕 + */ + @PreAuthorize("@ss.hasPermi('hezhi:authorizeHonor:remove')") + @Log(title = "鎺堟潈鑽h獕", businessType = BusinessType.DELETE) + @DeleteMapping("/{authorizeHonorIds}") + public AjaxResult remove(@PathVariable Long[] authorizeHonorIds) + { + return toAjax(tbAuthorizeHonorService.deleteTbAuthorizeHonorByAuthorizeHonorIds(authorizeHonorIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbBannerController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbBannerController.java new file mode 100644 index 0000000000000000000000000000000000000000..a138de1251c0ca656a15822ee8632e7b8b2c4c81 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbBannerController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbBanner; +import com.ruoyi.hezhi.service.ITbBannerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 杞挱鍥綜ontroller + * + * @author CC + * @date 2024-03-12 + */ +@RestController +@RequestMapping("/hezhi/banner") +public class TbBannerController extends BaseController +{ + @Autowired + private ITbBannerService tbBannerService; + + /** + * 鏌ヨ杞挱鍥惧垪琛 + */ + @PreAuthorize("@ss.hasPermi('hezhi:banner:list')") + @GetMapping("/list") + public TableDataInfo list(TbBanner tbBanner) + { + startPage(); + List list = tbBannerService.selectTbBannerList(tbBanner); + return getDataTable(list); + } + + /** + * 瀵煎嚭杞挱鍥惧垪琛 + */ + @PreAuthorize("@ss.hasPermi('hezhi:banner:export')") + @Log(title = "杞挱鍥", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbBanner tbBanner) + { + List list = tbBannerService.selectTbBannerList(tbBanner); + ExcelUtil util = new ExcelUtil(TbBanner.class); + util.exportExcel(response, list, "杞挱鍥炬暟鎹"); + } + + /** + * 鑾峰彇杞挱鍥捐缁嗕俊鎭 + */ + @PreAuthorize("@ss.hasPermi('hezhi:banner:query')") + @GetMapping(value = "/{bannerId}") + public AjaxResult getInfo(@PathVariable("bannerId") String bannerId) + { + return success(tbBannerService.selectTbBannerByBannerId(bannerId)); + } + + /** + * 鏂板杞挱鍥 + */ + @PreAuthorize("@ss.hasPermi('hezhi:banner:add')") + @Log(title = "杞挱鍥", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbBanner tbBanner) + { + return toAjax(tbBannerService.insertTbBanner(tbBanner)); + } + + /** + * 淇敼杞挱鍥 + */ + @PreAuthorize("@ss.hasPermi('hezhi:banner:edit')") + @Log(title = "杞挱鍥", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbBanner tbBanner) + { + return toAjax(tbBannerService.updateTbBanner(tbBanner)); + } + + /** + * 鍒犻櫎杞挱鍥 + */ + @PreAuthorize("@ss.hasPermi('hezhi:banner:remove')") + @Log(title = "杞挱鍥", businessType = BusinessType.DELETE) + @DeleteMapping("/{bannerIds}") + public AjaxResult remove(@PathVariable String[] bannerIds) + { + return toAjax(tbBannerService.deleteTbBannerByBannerIds(bannerIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbCareerClassController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbCareerClassController.java new file mode 100644 index 0000000000000000000000000000000000000000..37fe4e7f5610da7e5256d1b5e7687991562a75e5 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbCareerClassController.java @@ -0,0 +1,105 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbCareerClass; +import com.ruoyi.hezhi.service.ITbCareerClassService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鑱屼笟鍒嗙被Controller + * + * @author ruoyi + * @date 2024-10-10 + */ +@RestController +@RequestMapping("/hezhi/careerClass") +public class TbCareerClassController extends BaseController +{ + @Autowired + private ITbCareerClassService tbCareerClassService; + + /** + * 鏌ヨ鑱屼笟鍒嗙被鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:careerClass:list')") + @GetMapping("/list") + public AjaxResult list(TbCareerClass tbCareerClass) + { + List list = tbCareerClassService.selectTbCareerClassList(tbCareerClass); + return success(list); + } + + /** + * 瀵煎嚭鑱屼笟鍒嗙被鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:careerClass:export')") + @Log(title = "鑱屼笟鍒嗙被", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbCareerClass tbCareerClass) + { + List list = tbCareerClassService.selectTbCareerClassList(tbCareerClass); + ExcelUtil util = new ExcelUtil(TbCareerClass.class); + util.exportExcel(response, list, "鑱屼笟鍒嗙被鏁版嵁"); + } + + /** + * 鑾峰彇鑱屼笟鍒嗙被璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:careerClass:query')") + @GetMapping(value = "/{careerId}") + public AjaxResult getInfo(@PathVariable("careerId") Long careerId) + { + return success(tbCareerClassService.selectTbCareerClassByCareerId(careerId)); + } + + /** + * 鏂板鑱屼笟鍒嗙被 + */ + @PreAuthorize("@ss.hasPermi('hezhi:careerClass:add')") + @Log(title = "鑱屼笟鍒嗙被", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbCareerClass tbCareerClass) + { + if (tbCareerClass.getPid() == 0) { + tbCareerClass.setLevel(0); + } else { + TbCareerClass tbCareerClassUp = tbCareerClassService.selectTbCareerClassByCareerId(tbCareerClass.getPid()); + if (tbCareerClassUp != null) { + tbCareerClass.setLevel(tbCareerClassUp.getLevel() + 1); + } + } + tbCareerClass.setType(0); + return toAjax(tbCareerClassService.insertTbCareerClass(tbCareerClass)); + } + + /** + * 淇敼鑱屼笟鍒嗙被 + */ + @PreAuthorize("@ss.hasPermi('hezhi:careerClass:edit')") + @Log(title = "鑱屼笟鍒嗙被", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbCareerClass tbCareerClass) + { + return toAjax(tbCareerClassService.updateTbCareerClass(tbCareerClass)); + } + + /** + * 鍒犻櫎鑱屼笟鍒嗙被 + */ + @PreAuthorize("@ss.hasPermi('hezhi:careerClass:remove')") + @Log(title = "鑱屼笟鍒嗙被", businessType = BusinessType.DELETE) + @DeleteMapping("/{careerIds}") + public AjaxResult remove(@PathVariable Long[] careerIds) + { + return toAjax(tbCareerClassService.deleteTbCareerClassByCareerIds(careerIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbCaseController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbCaseController.java new file mode 100644 index 0000000000000000000000000000000000000000..4fda44171c219535304e8dd40039b86bfd74225a --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbCaseController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbCase; +import com.ruoyi.hezhi.service.ITbCaseService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 妗堜緥Controller + * + * @author ruoyi + * @date 2024-09-14 + */ +@RestController +@RequestMapping("/hezhi/case") +public class TbCaseController extends BaseController +{ + @Autowired + private ITbCaseService tbCaseService; + + /** + * 鏌ヨ妗堜緥鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:case:list')") + @GetMapping("/list") + public TableDataInfo list(TbCase tbCase) + { + startPage(); + List list = tbCaseService.selectTbCaseList(tbCase); + return getDataTable(list); + } + + /** + * 瀵煎嚭妗堜緥鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:case:export')") + @Log(title = "妗堜緥", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbCase tbCase) + { + List list = tbCaseService.selectTbCaseList(tbCase); + ExcelUtil util = new ExcelUtil(TbCase.class); + util.exportExcel(response, list, "妗堜緥鏁版嵁"); + } + + /** + * 鑾峰彇妗堜緥璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:case:query')") + @GetMapping(value = "/{caseId}") + public AjaxResult getInfo(@PathVariable("caseId") Long caseId) + { + return success(tbCaseService.selectTbCaseByCaseId(caseId)); + } + + /** + * 鏂板妗堜緥 + */ + @PreAuthorize("@ss.hasPermi('hezhi:case:add')") + @Log(title = "妗堜緥", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbCase tbCase) + { + return toAjax(tbCaseService.insertTbCase(tbCase)); + } + + /** + * 淇敼妗堜緥 + */ + @PreAuthorize("@ss.hasPermi('hezhi:case:edit')") + @Log(title = "妗堜緥", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbCase tbCase) + { + return toAjax(tbCaseService.updateTbCase(tbCase)); + } + + /** + * 鍒犻櫎妗堜緥 + */ + @PreAuthorize("@ss.hasPermi('hezhi:case:remove')") + @Log(title = "妗堜緥", businessType = BusinessType.DELETE) + @DeleteMapping("/{caseIds}") + public AjaxResult remove(@PathVariable Long[] caseIds) + { + return toAjax(tbCaseService.deleteTbCaseByCaseIds(caseIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbCaseTypeController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbCaseTypeController.java new file mode 100644 index 0000000000000000000000000000000000000000..8e429f11bc5a462429b642773ade8ff0387b07b8 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbCaseTypeController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbCaseType; +import com.ruoyi.hezhi.service.ITbCaseTypeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 妗堜緥绫诲瀷Controller + * + * @author ruoyi + * @date 2024-09-14 + */ +@RestController +@RequestMapping("/hezhi/caseType") +public class TbCaseTypeController extends BaseController +{ + @Autowired + private ITbCaseTypeService tbCaseTypeService; + + /** + * 鏌ヨ妗堜緥绫诲瀷鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:caseType:list')") + @GetMapping("/list") + public TableDataInfo list(TbCaseType tbCaseType) + { + startPage(); + List list = tbCaseTypeService.selectTbCaseTypeList(tbCaseType); + return getDataTable(list); + } + + /** + * 瀵煎嚭妗堜緥绫诲瀷鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:caseType:export')") + @Log(title = "妗堜緥绫诲瀷", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbCaseType tbCaseType) + { + List list = tbCaseTypeService.selectTbCaseTypeList(tbCaseType); + ExcelUtil util = new ExcelUtil(TbCaseType.class); + util.exportExcel(response, list, "妗堜緥绫诲瀷鏁版嵁"); + } + + /** + * 鑾峰彇妗堜緥绫诲瀷璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:caseType:query')") + @GetMapping(value = "/{caseTypeId}") + public AjaxResult getInfo(@PathVariable("caseTypeId") Long caseTypeId) + { + return success(tbCaseTypeService.selectTbCaseTypeByCaseTypeId(caseTypeId)); + } + + /** + * 鏂板妗堜緥绫诲瀷 + */ + @PreAuthorize("@ss.hasPermi('hezhi:caseType:add')") + @Log(title = "妗堜緥绫诲瀷", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbCaseType tbCaseType) + { + return toAjax(tbCaseTypeService.insertTbCaseType(tbCaseType)); + } + + /** + * 淇敼妗堜緥绫诲瀷 + */ + @PreAuthorize("@ss.hasPermi('hezhi:caseType:edit')") + @Log(title = "妗堜緥绫诲瀷", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbCaseType tbCaseType) + { + return toAjax(tbCaseTypeService.updateTbCaseType(tbCaseType)); + } + + /** + * 鍒犻櫎妗堜緥绫诲瀷 + */ + @PreAuthorize("@ss.hasPermi('hezhi:caseType:remove')") + @Log(title = "妗堜緥绫诲瀷", businessType = BusinessType.DELETE) + @DeleteMapping("/{caseTypeIds}") + public AjaxResult remove(@PathVariable Long[] caseTypeIds) + { + return toAjax(tbCaseTypeService.deleteTbCaseTypeByCaseTypeIds(caseTypeIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbConferenceNoticeController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbConferenceNoticeController.java new file mode 100644 index 0000000000000000000000000000000000000000..2d7eb47e94f2f33b5dcbd9fc19974e92309841fb --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbConferenceNoticeController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbConferenceNotice; +import com.ruoyi.hezhi.service.ITbConferenceNoticeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鏁板瓧鏁欒偛澶т細閫氱煡Controller + * + * @author ruoyi + * @date 2024-10-29 + */ +@RestController +@RequestMapping("/hezhi/conferenceNotice") +public class TbConferenceNoticeController extends BaseController +{ + @Autowired + private ITbConferenceNoticeService tbConferenceNoticeService; + + /** + * 鏌ヨ鏁板瓧鏁欒偛澶т細閫氱煡鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:conferenceNotice:list')") + @GetMapping("/list") + public TableDataInfo list(TbConferenceNotice tbConferenceNotice) + { + startPage(); + List list = tbConferenceNoticeService.selectTbConferenceNoticeList(tbConferenceNotice); + return getDataTable(list); + } + + /** + * 瀵煎嚭鏁板瓧鏁欒偛澶т細閫氱煡鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:conferenceNotice:export')") + @Log(title = "鏁板瓧鏁欒偛澶т細閫氱煡", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbConferenceNotice tbConferenceNotice) + { + List list = tbConferenceNoticeService.selectTbConferenceNoticeList(tbConferenceNotice); + ExcelUtil util = new ExcelUtil(TbConferenceNotice.class); + util.exportExcel(response, list, "鏁板瓧鏁欒偛澶т細閫氱煡鏁版嵁"); + } + + /** + * 鑾峰彇鏁板瓧鏁欒偛澶т細閫氱煡璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:conferenceNotice:query')") + @GetMapping(value = "/{conferenceNoticeId}") + public AjaxResult getInfo(@PathVariable("conferenceNoticeId") Long conferenceNoticeId) + { + return success(tbConferenceNoticeService.selectTbConferenceNoticeByConferenceNoticeId(conferenceNoticeId)); + } + + /** + * 鏂板鏁板瓧鏁欒偛澶т細閫氱煡 + */ + @PreAuthorize("@ss.hasPermi('hezhi:conferenceNotice:add')") + @Log(title = "鏁板瓧鏁欒偛澶т細閫氱煡", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbConferenceNotice tbConferenceNotice) + { + return toAjax(tbConferenceNoticeService.insertTbConferenceNotice(tbConferenceNotice)); + } + + /** + * 淇敼鏁板瓧鏁欒偛澶т細閫氱煡 + */ + @PreAuthorize("@ss.hasPermi('hezhi:conferenceNotice:edit')") + @Log(title = "鏁板瓧鏁欒偛澶т細閫氱煡", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbConferenceNotice tbConferenceNotice) + { + return toAjax(tbConferenceNoticeService.updateTbConferenceNotice(tbConferenceNotice)); + } + + /** + * 鍒犻櫎鏁板瓧鏁欒偛澶т細閫氱煡 + */ + @PreAuthorize("@ss.hasPermi('hezhi:conferenceNotice:remove')") + @Log(title = "鏁板瓧鏁欒偛澶т細閫氱煡", businessType = BusinessType.DELETE) + @DeleteMapping("/{conferenceNoticeIds}") + public AjaxResult remove(@PathVariable Long[] conferenceNoticeIds) + { + return toAjax(tbConferenceNoticeService.deleteTbConferenceNoticeByConferenceNoticeIds(conferenceNoticeIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbConferencePeopleController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbConferencePeopleController.java new file mode 100644 index 0000000000000000000000000000000000000000..54139add9ee82254b2bc871587cac5ae014a7aeb --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbConferencePeopleController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbConferencePeople; +import com.ruoyi.hezhi.service.ITbConferencePeopleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鏁板瓧鏁欒偛澶т細鍙備細鍢夊Controller + * + * @author ruoyi + * @date 2024-10-29 + */ +@RestController +@RequestMapping("/hezhi/conferencePeople") +public class TbConferencePeopleController extends BaseController +{ + @Autowired + private ITbConferencePeopleService tbConferencePeopleService; + + /** + * 鏌ヨ鏁板瓧鏁欒偛澶т細鍙備細鍢夊鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:conferencePeople:list')") + @GetMapping("/list") + public TableDataInfo list(TbConferencePeople tbConferencePeople) + { + startPage(); + List list = tbConferencePeopleService.selectTbConferencePeopleList(tbConferencePeople); + return getDataTable(list); + } + + /** + * 瀵煎嚭鏁板瓧鏁欒偛澶т細鍙備細鍢夊鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:conferencePeople:export')") + @Log(title = "鏁板瓧鏁欒偛澶т細鍙備細鍢夊", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbConferencePeople tbConferencePeople) + { + List list = tbConferencePeopleService.selectTbConferencePeopleList(tbConferencePeople); + ExcelUtil util = new ExcelUtil(TbConferencePeople.class); + util.exportExcel(response, list, "鏁板瓧鏁欒偛澶т細鍙備細鍢夊鏁版嵁"); + } + + /** + * 鑾峰彇鏁板瓧鏁欒偛澶т細鍙備細鍢夊璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:conferencePeople:query')") + @GetMapping(value = "/{conferencePeopleId}") + public AjaxResult getInfo(@PathVariable("conferencePeopleId") Long conferencePeopleId) + { + return success(tbConferencePeopleService.selectTbConferencePeopleByConferencePeopleId(conferencePeopleId)); + } + + /** + * 鏂板鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + */ + @PreAuthorize("@ss.hasPermi('hezhi:conferencePeople:add')") + @Log(title = "鏁板瓧鏁欒偛澶т細鍙備細鍢夊", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbConferencePeople tbConferencePeople) + { + return toAjax(tbConferencePeopleService.insertTbConferencePeople(tbConferencePeople)); + } + + /** + * 淇敼鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + */ + @PreAuthorize("@ss.hasPermi('hezhi:conferencePeople:edit')") + @Log(title = "鏁板瓧鏁欒偛澶т細鍙備細鍢夊", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbConferencePeople tbConferencePeople) + { + return toAjax(tbConferencePeopleService.updateTbConferencePeople(tbConferencePeople)); + } + + /** + * 鍒犻櫎鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + */ + @PreAuthorize("@ss.hasPermi('hezhi:conferencePeople:remove')") + @Log(title = "鏁板瓧鏁欒偛澶т細鍙備細鍢夊", businessType = BusinessType.DELETE) + @DeleteMapping("/{conferencePeopleIds}") + public AjaxResult remove(@PathVariable Long[] conferencePeopleIds) + { + return toAjax(tbConferencePeopleService.deleteTbConferencePeopleByConferencePeopleIds(conferencePeopleIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbConferenceRegistrationController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbConferenceRegistrationController.java new file mode 100644 index 0000000000000000000000000000000000000000..ca4602acdd27a8c9759ebedd3e170ba1021791f6 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbConferenceRegistrationController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbConferenceRegistration; +import com.ruoyi.hezhi.service.ITbConferenceRegistrationService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鍙備細鎶ュ悕Controller + * + * @author ruoyi + * @date 2024-10-28 + */ +@RestController +@RequestMapping("/hezhi/conferenceRegistration") +public class TbConferenceRegistrationController extends BaseController +{ + @Autowired + private ITbConferenceRegistrationService tbConferenceRegistrationService; + + /** + * 鏌ヨ鍙備細鎶ュ悕鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:conferenceRegistration:list')") + @GetMapping("/list") + public TableDataInfo list(TbConferenceRegistration tbConferenceRegistration) + { + startPage(); + List list = tbConferenceRegistrationService.selectTbConferenceRegistrationList(tbConferenceRegistration); + return getDataTable(list); + } + + /** + * 瀵煎嚭鍙備細鎶ュ悕鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:conferenceRegistration:export')") + @Log(title = "鍙備細鎶ュ悕", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbConferenceRegistration tbConferenceRegistration) + { + List list = tbConferenceRegistrationService.selectTbConferenceRegistrationList(tbConferenceRegistration); + ExcelUtil util = new ExcelUtil(TbConferenceRegistration.class); + util.exportExcel(response, list, "鍙備細鎶ュ悕鏁版嵁"); + } + + /** + * 鑾峰彇鍙備細鎶ュ悕璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:conferenceRegistration:query')") + @GetMapping(value = "/{conferenceRegistrationId}") + public AjaxResult getInfo(@PathVariable("conferenceRegistrationId") Long conferenceRegistrationId) + { + return success(tbConferenceRegistrationService.selectTbConferenceRegistrationByConferenceRegistrationId(conferenceRegistrationId)); + } + + /** + * 鏂板鍙備細鎶ュ悕 + */ + @PreAuthorize("@ss.hasPermi('hezhi:conferenceRegistration:add')") + @Log(title = "鍙備細鎶ュ悕", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbConferenceRegistration tbConferenceRegistration) + { + return toAjax(tbConferenceRegistrationService.insertTbConferenceRegistration(tbConferenceRegistration)); + } + + /** + * 淇敼鍙備細鎶ュ悕 + */ + @PreAuthorize("@ss.hasPermi('hezhi:conferenceRegistration:edit')") + @Log(title = "鍙備細鎶ュ悕", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbConferenceRegistration tbConferenceRegistration) + { + return toAjax(tbConferenceRegistrationService.updateTbConferenceRegistration(tbConferenceRegistration)); + } + + /** + * 鍒犻櫎鍙備細鎶ュ悕 + */ + @PreAuthorize("@ss.hasPermi('hezhi:conferenceRegistration:remove')") + @Log(title = "鍙備細鎶ュ悕", businessType = BusinessType.DELETE) + @DeleteMapping("/{conferenceRegistrationIds}") + public AjaxResult remove(@PathVariable Long[] conferenceRegistrationIds) + { + return toAjax(tbConferenceRegistrationService.deleteTbConferenceRegistrationByConferenceRegistrationIds(conferenceRegistrationIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbConfigController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbConfigController.java new file mode 100644 index 0000000000000000000000000000000000000000..ca3456e9309a900a488059a79f72b89c248c8da1 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbConfigController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbConfig; +import com.ruoyi.hezhi.service.ITbConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鐩稿叧璁剧疆Controller + * + * @author ruoyi + * @date 2024-10-22 + */ +@RestController +@RequestMapping("/hezhi/config") +public class TbConfigController extends BaseController +{ + @Autowired + private ITbConfigService tbConfigService; + + /** + * 鏌ヨ鐩稿叧璁剧疆鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:config:list')") + @GetMapping("/list") + public TableDataInfo list(TbConfig tbConfig) + { + startPage(); + List list = tbConfigService.selectTbConfigList(tbConfig); + return getDataTable(list); + } + + /** + * 瀵煎嚭鐩稿叧璁剧疆鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:config:export')") + @Log(title = "鐩稿叧璁剧疆", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbConfig tbConfig) + { + List list = tbConfigService.selectTbConfigList(tbConfig); + ExcelUtil util = new ExcelUtil(TbConfig.class); + util.exportExcel(response, list, "鐩稿叧璁剧疆鏁版嵁"); + } + + /** + * 鑾峰彇鐩稿叧璁剧疆璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:config:query')") + @GetMapping(value = "/{configId}") + public AjaxResult getInfo(@PathVariable("configId") Long configId) + { + return success(tbConfigService.selectTbConfigByConfigId(configId)); + } + + /** + * 鏂板鐩稿叧璁剧疆 + */ + @PreAuthorize("@ss.hasPermi('hezhi:config:add')") + @Log(title = "鐩稿叧璁剧疆", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbConfig tbConfig) + { + return toAjax(tbConfigService.insertTbConfig(tbConfig)); + } + + /** + * 淇敼鐩稿叧璁剧疆 + */ + @PreAuthorize("@ss.hasPermi('hezhi:config:edit')") + @Log(title = "鐩稿叧璁剧疆", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbConfig tbConfig) + { + return toAjax(tbConfigService.updateTbConfig(tbConfig)); + } + + /** + * 鍒犻櫎鐩稿叧璁剧疆 + */ + @PreAuthorize("@ss.hasPermi('hezhi:config:remove')") + @Log(title = "鐩稿叧璁剧疆", businessType = BusinessType.DELETE) + @DeleteMapping("/{configIds}") + public AjaxResult remove(@PathVariable Long[] configIds) + { + return toAjax(tbConfigService.deleteTbConfigByConfigIds(configIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbContinuingEducationClassController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbContinuingEducationClassController.java new file mode 100644 index 0000000000000000000000000000000000000000..75bfc6c8d4abc42628eecb07e1a9f2f2fd637d79 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbContinuingEducationClassController.java @@ -0,0 +1,109 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbContinuingEducationClass; +import com.ruoyi.hezhi.service.ITbContinuingEducationClassService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 缁х画鏁欒偛鍒嗙被Controller + * + * @author ruoyi + * @date 2024-10-23 + */ +@RestController +@RequestMapping("/hezhi/continuingEducationClass") +public class TbContinuingEducationClassController extends BaseController +{ + @Autowired + private ITbContinuingEducationClassService tbContinuingEducationClassService; + + /** + * 鏌ヨ缁х画鏁欒偛鍒嗙被鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:continuingEducationClass:list')") + @GetMapping("/list") + public TableDataInfo list(TbContinuingEducationClass tbContinuingEducationClass) + { + startPage(); + List list = tbContinuingEducationClassService.selectTbContinuingEducationClassList(tbContinuingEducationClass); + return getDataTable(list); + } + + /** + * 瀵煎嚭缁х画鏁欒偛鍒嗙被鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:continuingEducationClass:export')") + @Log(title = "缁х画鏁欒偛鍒嗙被", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbContinuingEducationClass tbContinuingEducationClass) + { + List list = tbContinuingEducationClassService.selectTbContinuingEducationClassList(tbContinuingEducationClass); + ExcelUtil util = new ExcelUtil(TbContinuingEducationClass.class); + util.exportExcel(response, list, "缁х画鏁欒偛鍒嗙被鏁版嵁"); + } + + /** + * 鑾峰彇缁х画鏁欒偛鍒嗙被璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:continuingEducationClass:query')") + @GetMapping(value = "/{continuingEducationClassId}") + public AjaxResult getInfo(@PathVariable("continuingEducationClassId") Long continuingEducationClassId) + { + return success(tbContinuingEducationClassService.selectTbContinuingEducationClassByContinuingEducationClassId(continuingEducationClassId)); + } + + /** + * 鏂板缁х画鏁欒偛鍒嗙被 + */ + @PreAuthorize("@ss.hasPermi('hezhi:continuingEducationClass:add')") + @Log(title = "缁х画鏁欒偛鍒嗙被", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbContinuingEducationClass tbContinuingEducationClass) + { + return toAjax(tbContinuingEducationClassService.insertTbContinuingEducationClass(tbContinuingEducationClass)); + } + + /** + * 淇敼缁х画鏁欒偛鍒嗙被 + */ + @PreAuthorize("@ss.hasPermi('hezhi:continuingEducationClass:edit')") + @Log(title = "缁х画鏁欒偛鍒嗙被", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbContinuingEducationClass tbContinuingEducationClass) + { + return toAjax(tbContinuingEducationClassService.updateTbContinuingEducationClass(tbContinuingEducationClass)); + } + + /** + * 鍒犻櫎缁х画鏁欒偛鍒嗙被 + */ + @PreAuthorize("@ss.hasPermi('hezhi:continuingEducationClass:remove')") + @Log(title = "缁х画鏁欒偛鍒嗙被", businessType = BusinessType.DELETE) + @DeleteMapping("/{continuingEducationClassIds}") + public AjaxResult remove(@PathVariable Long[] continuingEducationClassIds) + { + return toAjax(tbContinuingEducationClassService.deleteTbContinuingEducationClassByContinuingEducationClassIds(continuingEducationClassIds)); + } + + /** + * 鑾峰彇缁х画鏁欒偛鍒嗙被鍒楄〃 + * @return 缁撴灉 + */ + @GetMapping("/getAllContinuingEducationClassList") + public AjaxResult getAllContinuingEducationClassList(){ + List allContinuingEducationClassList = tbContinuingEducationClassService.getAllContinuingEducationClassList(); + return AjaxResult.success(allContinuingEducationClassList); + } + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbCooperatePartnerController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbCooperatePartnerController.java new file mode 100644 index 0000000000000000000000000000000000000000..540e857676b4113c51bfa25228af98fb50a22f47 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbCooperatePartnerController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbCooperatePartner; +import com.ruoyi.hezhi.service.ITbCooperatePartnerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鍚堜綔浼欎即Controller + * + * @author ruoyi + * @date 2024-10-16 + */ +@RestController +@RequestMapping("/hezhi/cooperatePartner") +public class TbCooperatePartnerController extends BaseController +{ + @Autowired + private ITbCooperatePartnerService tbCooperatePartnerService; + + /** + * 鏌ヨ鍚堜綔浼欎即鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:cooperatePartner:list')") + @GetMapping("/list") + public TableDataInfo list(TbCooperatePartner tbCooperatePartner) + { + startPage(); + List list = tbCooperatePartnerService.selectTbCooperatePartnerList(tbCooperatePartner); + return getDataTable(list); + } + + /** + * 瀵煎嚭鍚堜綔浼欎即鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:cooperatePartner:export')") + @Log(title = "鍚堜綔浼欎即", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbCooperatePartner tbCooperatePartner) + { + List list = tbCooperatePartnerService.selectTbCooperatePartnerList(tbCooperatePartner); + ExcelUtil util = new ExcelUtil(TbCooperatePartner.class); + util.exportExcel(response, list, "鍚堜綔浼欎即鏁版嵁"); + } + + /** + * 鑾峰彇鍚堜綔浼欎即璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:cooperatePartner:query')") + @GetMapping(value = "/{cooperatePartnerId}") + public AjaxResult getInfo(@PathVariable("cooperatePartnerId") Long cooperatePartnerId) + { + return success(tbCooperatePartnerService.selectTbCooperatePartnerByCooperatePartnerId(cooperatePartnerId)); + } + + /** + * 鏂板鍚堜綔浼欎即 + */ + @PreAuthorize("@ss.hasPermi('hezhi:cooperatePartner:add')") + @Log(title = "鍚堜綔浼欎即", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbCooperatePartner tbCooperatePartner) + { + return toAjax(tbCooperatePartnerService.insertTbCooperatePartner(tbCooperatePartner)); + } + + /** + * 淇敼鍚堜綔浼欎即 + */ + @PreAuthorize("@ss.hasPermi('hezhi:cooperatePartner:edit')") + @Log(title = "鍚堜綔浼欎即", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbCooperatePartner tbCooperatePartner) + { + return toAjax(tbCooperatePartnerService.updateTbCooperatePartner(tbCooperatePartner)); + } + + /** + * 鍒犻櫎鍚堜綔浼欎即 + */ + @PreAuthorize("@ss.hasPermi('hezhi:cooperatePartner:remove')") + @Log(title = "鍚堜綔浼欎即", businessType = BusinessType.DELETE) + @DeleteMapping("/{cooperatePartnerIds}") + public AjaxResult remove(@PathVariable Long[] cooperatePartnerIds) + { + return toAjax(tbCooperatePartnerService.deleteTbCooperatePartnerByCooperatePartnerIds(cooperatePartnerIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbCourseChapterController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbCourseChapterController.java new file mode 100644 index 0000000000000000000000000000000000000000..f2daba602cb798bdb88794b56f4907ea2167224c --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbCourseChapterController.java @@ -0,0 +1,103 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbCourseChapter; +import com.ruoyi.hezhi.service.ITbCourseChapterService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 璇剧▼绔犺妭Controller + * + * @author ruoyi + * @date 2024-09-14 + */ +@RestController +@RequestMapping("/hezhi/courseChapter") +public class TbCourseChapterController extends BaseController +{ + @Autowired + private ITbCourseChapterService tbCourseChapterService; + + /** + * 鏌ヨ璇剧▼绔犺妭鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:courseChapter:list')") + @GetMapping("/list") + public AjaxResult list(TbCourseChapter tbCourseChapter) + { + List list = tbCourseChapterService.selectTbCourseChapterList(tbCourseChapter); + return success(list); + } + + /** + * 瀵煎嚭璇剧▼绔犺妭鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:courseChapter:export')") + @Log(title = "璇剧▼绔犺妭", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbCourseChapter tbCourseChapter) + { + List list = tbCourseChapterService.selectTbCourseChapterList(tbCourseChapter); + ExcelUtil util = new ExcelUtil(TbCourseChapter.class); + util.exportExcel(response, list, "璇剧▼绔犺妭鏁版嵁"); + } + + /** + * 鑾峰彇璇剧▼绔犺妭璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:courseChapter:query')") + @GetMapping(value = "/{chapterId}") + public AjaxResult getInfo(@PathVariable("chapterId") Long chapterId) + { + return success(tbCourseChapterService.selectTbCourseChapterByChapterId(chapterId)); + } + + /** + * 鏂板璇剧▼绔犺妭 + */ + @PreAuthorize("@ss.hasPermi('hezhi:courseChapter:add')") + @Log(title = "璇剧▼绔犺妭", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbCourseChapter tbCourseChapter) + { + if (tbCourseChapter.getPid() == 0) { + tbCourseChapter.setType(1); + } else { + tbCourseChapter.setType(2); + tbCourseChapter.setLevel(1); + tbCourseChapter.setIsVideo(1); + } + return toAjax(tbCourseChapterService.insertTbCourseChapter(tbCourseChapter)); + } + + /** + * 淇敼璇剧▼绔犺妭 + */ + @PreAuthorize("@ss.hasPermi('hezhi:courseChapter:edit')") + @Log(title = "璇剧▼绔犺妭", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbCourseChapter tbCourseChapter) + { + return toAjax(tbCourseChapterService.updateTbCourseChapter(tbCourseChapter)); + } + + /** + * 鍒犻櫎璇剧▼绔犺妭 + */ + @PreAuthorize("@ss.hasPermi('hezhi:courseChapter:remove')") + @Log(title = "璇剧▼绔犺妭", businessType = BusinessType.DELETE) + @DeleteMapping("/{chapterIds}") + public AjaxResult remove(@PathVariable Long[] chapterIds) + { + return toAjax(tbCourseChapterService.deleteTbCourseChapterByChapterIds(chapterIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbCourseController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbCourseController.java new file mode 100644 index 0000000000000000000000000000000000000000..ba23660a70ae0527b0fb88850adba279f99dc271 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbCourseController.java @@ -0,0 +1,146 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbCourse; +import com.ruoyi.hezhi.domain.TbTypeCourse; +import com.ruoyi.hezhi.domain.vo.CaseTypeVO; +import com.ruoyi.hezhi.service.ITbCaseTypeService; +import com.ruoyi.hezhi.service.ITbCourseService; +import com.ruoyi.hezhi.service.ITbTypeCourseService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 璇剧▼Controller + * + * @author ruoyi + * @date 2024-09-14 + */ +@RestController +@RequestMapping("/hezhi/course") +public class TbCourseController extends BaseController +{ + @Autowired + private ITbCourseService tbCourseService; + @Autowired + private ITbTypeCourseService tbTypeCourseService; + @Autowired + private ITbCaseTypeService tbCaseTypeService; + + /** + * 鏌ヨ璇剧▼鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:course:list')") + @GetMapping("/list") + public TableDataInfo list(TbCourse tbCourse) + { + startPage(); + List list = tbCourseService.selectTbCourseList(tbCourse); + return getDataTable(list); + } + + /** + * 瀵煎嚭璇剧▼鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:course:export')") + @Log(title = "璇剧▼", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbCourse tbCourse) + { + List list = tbCourseService.selectTbCourseList(tbCourse); + ExcelUtil util = new ExcelUtil(TbCourse.class); + util.exportExcel(response, list, "璇剧▼鏁版嵁"); + } + + /** + * 鑾峰彇璇剧▼璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:course:query')") + @GetMapping(value = "/{courseId}") + public AjaxResult getInfo(@PathVariable("courseId") Long courseId) + { + AjaxResult ajax = AjaxResult.success(); + // 鍏ㄩ儴鍒嗙被list + List allList = tbCaseTypeService.getCaseTypeList(); + TbCourse tbCourse = tbCourseService.selectTbCourseByCourseId(courseId); + ajax.put("classList", allList); + if (tbCourse != null) { + ajax.put(AjaxResult.DATA_TAG, tbCourse); + +// TbTypeCourse tbTypeCourse = new TbTypeCourse(); +// tbTypeCourse.setCourseId(courseId); +// List typeCourseList = tbTypeCourseService.selectTbTypeCourseList(tbTypeCourse); + +// ajax.put("classIds", typeCourseList.stream().map(TbTypeCourse::getCaseTypeId).collect(Collectors.toList())); + } + return ajax; + + // return success(tbCourseService.selectTbCourseByCourseId(courseId)); + } + + /** + * 鏂板璇剧▼ + */ + @PreAuthorize("@ss.hasPermi('hezhi:course:add')") + @Log(title = "璇剧▼", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbCourse tbCourse) + { + if (tbCourse.getMajorId() == null) { + return AjaxResult.error("璇烽夋嫨璇剧▼鍒嗙被"); + } + tbCourse.setViewsNum(0); + tbCourseService.insertTbCourse(tbCourse); + Long[] longs = {tbCourse.getMajorId()}; + tbTypeCourseService.batchInsertTbTypeCourse(longs, tbCourse.getCourseId()); + + return AjaxResult.success(); + } + + /** + * 淇敼璇剧▼ + */ + @PreAuthorize("@ss.hasPermi('hezhi:course:edit')") + @Log(title = "璇剧▼", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbCourse tbCourse) + { + if (tbCourse.getMajorId() == null) { + return AjaxResult.error("璇烽夋嫨璇剧▼鍒嗙被"); + } + tbTypeCourseService.deleteTbTypeCourseByCourseId(tbCourse.getCourseId()); + Long[] longs = {tbCourse.getMajorId()}; + tbTypeCourseService.batchInsertTbTypeCourse(longs, tbCourse.getCourseId()); + return toAjax(tbCourseService.updateTbCourse(tbCourse)); + } + + /** + * 鍒犻櫎璇剧▼ + */ + @PreAuthorize("@ss.hasPermi('hezhi:course:remove')") + @Log(title = "璇剧▼", businessType = BusinessType.DELETE) + @DeleteMapping("/{courseIds}") + public AjaxResult remove(@PathVariable Long[] courseIds) + { + return toAjax(tbCourseService.deleteTbCourseByCourseIds(courseIds)); + } + + /** + * 鎵鏈夎绋嬪垪琛 + * @return + */ + @GetMapping("/getAllCourseList") + public AjaxResult getAllCourseList() { + return AjaxResult.success(tbCourseService.getAllCourseList()); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbCourseEvaluateController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbCourseEvaluateController.java new file mode 100644 index 0000000000000000000000000000000000000000..542885d00c55c28ed466ae2ab9ea1473618400c5 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbCourseEvaluateController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbCourseEvaluate; +import com.ruoyi.hezhi.service.ITbCourseEvaluateService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 璇剧▼璇勪环Controller + * + * @author ruoyi + * @date 2024-09-14 + */ +@RestController +@RequestMapping("/hezhi/courseEvaluate") +public class TbCourseEvaluateController extends BaseController +{ + @Autowired + private ITbCourseEvaluateService tbCourseEvaluateService; + + /** + * 鏌ヨ璇剧▼璇勪环鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:courseEvaluate:list')") + @GetMapping("/list") + public TableDataInfo list(TbCourseEvaluate tbCourseEvaluate) + { + startPage(); + List list = tbCourseEvaluateService.selectTbCourseEvaluateList(tbCourseEvaluate); + return getDataTable(list); + } + + /** + * 瀵煎嚭璇剧▼璇勪环鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:courseEvaluate:export')") + @Log(title = "璇剧▼璇勪环", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbCourseEvaluate tbCourseEvaluate) + { + List list = tbCourseEvaluateService.selectTbCourseEvaluateList(tbCourseEvaluate); + ExcelUtil util = new ExcelUtil(TbCourseEvaluate.class); + util.exportExcel(response, list, "璇剧▼璇勪环鏁版嵁"); + } + + /** + * 鑾峰彇璇剧▼璇勪环璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:courseEvaluate:query')") + @GetMapping(value = "/{courseEvaluateId}") + public AjaxResult getInfo(@PathVariable("courseEvaluateId") Long courseEvaluateId) + { + return success(tbCourseEvaluateService.selectTbCourseEvaluateByCourseEvaluateId(courseEvaluateId)); + } + + /** + * 鏂板璇剧▼璇勪环 + */ + @PreAuthorize("@ss.hasPermi('hezhi:courseEvaluate:add')") + @Log(title = "璇剧▼璇勪环", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbCourseEvaluate tbCourseEvaluate) + { + return toAjax(tbCourseEvaluateService.insertTbCourseEvaluate(tbCourseEvaluate)); + } + + /** + * 淇敼璇剧▼璇勪环 + */ + @PreAuthorize("@ss.hasPermi('hezhi:courseEvaluate:edit')") + @Log(title = "璇剧▼璇勪环", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbCourseEvaluate tbCourseEvaluate) + { + return toAjax(tbCourseEvaluateService.updateTbCourseEvaluate(tbCourseEvaluate)); + } + + /** + * 鍒犻櫎璇剧▼璇勪环 + */ + @PreAuthorize("@ss.hasPermi('hezhi:courseEvaluate:remove')") + @Log(title = "璇剧▼璇勪环", businessType = BusinessType.DELETE) + @DeleteMapping("/{courseEvaluateIds}") + public AjaxResult remove(@PathVariable Long[] courseEvaluateIds) + { + return toAjax(tbCourseEvaluateService.deleteTbCourseEvaluateByCourseEvaluateIds(courseEvaluateIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbDownloadController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbDownloadController.java new file mode 100644 index 0000000000000000000000000000000000000000..9a71d97819e153e4d3478579f41ed08f8f4547cf --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbDownloadController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbDownload; +import com.ruoyi.hezhi.service.ITbDownloadService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鍦ㄧ嚎涓嬭浇Controller + * + * @author ruoyi + * @date 2024-10-30 + */ +@RestController +@RequestMapping("/hezhi/download") +public class TbDownloadController extends BaseController +{ + @Autowired + private ITbDownloadService tbDownloadService; + + /** + * 鏌ヨ鍦ㄧ嚎涓嬭浇鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:download:list')") + @GetMapping("/list") + public TableDataInfo list(TbDownload tbDownload) + { + startPage(); + List list = tbDownloadService.selectTbDownloadList(tbDownload); + return getDataTable(list); + } + + /** + * 瀵煎嚭鍦ㄧ嚎涓嬭浇鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:download:export')") + @Log(title = "鍦ㄧ嚎涓嬭浇", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbDownload tbDownload) + { + List list = tbDownloadService.selectTbDownloadList(tbDownload); + ExcelUtil util = new ExcelUtil(TbDownload.class); + util.exportExcel(response, list, "鍦ㄧ嚎涓嬭浇鏁版嵁"); + } + + /** + * 鑾峰彇鍦ㄧ嚎涓嬭浇璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:download:query')") + @GetMapping(value = "/{downloadId}") + public AjaxResult getInfo(@PathVariable("downloadId") Long downloadId) + { + return success(tbDownloadService.selectTbDownloadByDownloadId(downloadId)); + } + + /** + * 鏂板鍦ㄧ嚎涓嬭浇 + */ + @PreAuthorize("@ss.hasPermi('hezhi:download:add')") + @Log(title = "鍦ㄧ嚎涓嬭浇", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbDownload tbDownload) + { + return toAjax(tbDownloadService.insertTbDownload(tbDownload)); + } + + /** + * 淇敼鍦ㄧ嚎涓嬭浇 + */ + @PreAuthorize("@ss.hasPermi('hezhi:download:edit')") + @Log(title = "鍦ㄧ嚎涓嬭浇", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbDownload tbDownload) + { + return toAjax(tbDownloadService.updateTbDownload(tbDownload)); + } + + /** + * 鍒犻櫎鍦ㄧ嚎涓嬭浇 + */ + @PreAuthorize("@ss.hasPermi('hezhi:download:remove')") + @Log(title = "鍦ㄧ嚎涓嬭浇", businessType = BusinessType.DELETE) + @DeleteMapping("/{downloadIds}") + public AjaxResult remove(@PathVariable Long[] downloadIds) + { + return toAjax(tbDownloadService.deleteTbDownloadByDownloadIds(downloadIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbEnterpriseProgressController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbEnterpriseProgressController.java new file mode 100644 index 0000000000000000000000000000000000000000..aa8f4ef9a46f605e1c2dee05e26d478e475d0753 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbEnterpriseProgressController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbEnterpriseProgress; +import com.ruoyi.hezhi.service.ITbEnterpriseProgressService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 浼佷笟鍘嗙▼Controller + * + * @author ruoyi + * @date 2024-11-21 + */ +@RestController +@RequestMapping("/hezhi/enterpriseProgress") +public class TbEnterpriseProgressController extends BaseController +{ + @Autowired + private ITbEnterpriseProgressService tbEnterpriseProgressService; + + /** + * 鏌ヨ浼佷笟鍘嗙▼鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:enterpriseProgress:list')") + @GetMapping("/list") + public TableDataInfo list(TbEnterpriseProgress tbEnterpriseProgress) + { + startPage(); + List list = tbEnterpriseProgressService.selectTbEnterpriseProgressList(tbEnterpriseProgress); + return getDataTable(list); + } + + /** + * 瀵煎嚭浼佷笟鍘嗙▼鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:enterpriseProgress:export')") + @Log(title = "浼佷笟鍘嗙▼", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbEnterpriseProgress tbEnterpriseProgress) + { + List list = tbEnterpriseProgressService.selectTbEnterpriseProgressList(tbEnterpriseProgress); + ExcelUtil util = new ExcelUtil(TbEnterpriseProgress.class); + util.exportExcel(response, list, "浼佷笟鍘嗙▼鏁版嵁"); + } + + /** + * 鑾峰彇浼佷笟鍘嗙▼璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:enterpriseProgress:query')") + @GetMapping(value = "/{enterpriseProgressId}") + public AjaxResult getInfo(@PathVariable("enterpriseProgressId") Long enterpriseProgressId) + { + return success(tbEnterpriseProgressService.selectTbEnterpriseProgressByEnterpriseProgressId(enterpriseProgressId)); + } + + /** + * 鏂板浼佷笟鍘嗙▼ + */ + @PreAuthorize("@ss.hasPermi('hezhi:enterpriseProgress:add')") + @Log(title = "浼佷笟鍘嗙▼", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbEnterpriseProgress tbEnterpriseProgress) + { + return toAjax(tbEnterpriseProgressService.insertTbEnterpriseProgress(tbEnterpriseProgress)); + } + + /** + * 淇敼浼佷笟鍘嗙▼ + */ + @PreAuthorize("@ss.hasPermi('hezhi:enterpriseProgress:edit')") + @Log(title = "浼佷笟鍘嗙▼", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbEnterpriseProgress tbEnterpriseProgress) + { + return toAjax(tbEnterpriseProgressService.updateTbEnterpriseProgress(tbEnterpriseProgress)); + } + + /** + * 鍒犻櫎浼佷笟鍘嗙▼ + */ + @PreAuthorize("@ss.hasPermi('hezhi:enterpriseProgress:remove')") + @Log(title = "浼佷笟鍘嗙▼", businessType = BusinessType.DELETE) + @DeleteMapping("/{enterpriseProgressIds}") + public AjaxResult remove(@PathVariable Long[] enterpriseProgressIds) + { + return toAjax(tbEnterpriseProgressService.deleteTbEnterpriseProgressByEnterpriseProgressIds(enterpriseProgressIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbEvaluateAgencyClassController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbEvaluateAgencyClassController.java new file mode 100644 index 0000000000000000000000000000000000000000..e188e69b7e38f6ab72e6b94e38f06601859e3f39 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbEvaluateAgencyClassController.java @@ -0,0 +1,109 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbEvaluateAgencyClass; +import com.ruoyi.hezhi.service.ITbEvaluateAgencyClassService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 璇勪环鏈烘瀯鍒嗙被Controller + * + * @author ruoyi + * @date 2024-10-23 + */ +@RestController +@RequestMapping("/hezhi/evaluateAgencyClass") +public class TbEvaluateAgencyClassController extends BaseController +{ + @Autowired + private ITbEvaluateAgencyClassService tbEvaluateAgencyClassService; + + /** + * 鏌ヨ璇勪环鏈烘瀯鍒嗙被鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:evaluateAgencyClass:list')") + @GetMapping("/list") + public TableDataInfo list(TbEvaluateAgencyClass tbEvaluateAgencyClass) + { + startPage(); + List list = tbEvaluateAgencyClassService.selectTbEvaluateAgencyClassList(tbEvaluateAgencyClass); + return getDataTable(list); + } + + /** + * 瀵煎嚭璇勪环鏈烘瀯鍒嗙被鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:evaluateAgencyClass:export')") + @Log(title = "璇勪环鏈烘瀯鍒嗙被", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbEvaluateAgencyClass tbEvaluateAgencyClass) + { + List list = tbEvaluateAgencyClassService.selectTbEvaluateAgencyClassList(tbEvaluateAgencyClass); + ExcelUtil util = new ExcelUtil(TbEvaluateAgencyClass.class); + util.exportExcel(response, list, "璇勪环鏈烘瀯鍒嗙被鏁版嵁"); + } + + /** + * 鑾峰彇璇勪环鏈烘瀯鍒嗙被璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:evaluateAgencyClass:query')") + @GetMapping(value = "/{evaluateAgencyClassId}") + public AjaxResult getInfo(@PathVariable("evaluateAgencyClassId") Long evaluateAgencyClassId) + { + return success(tbEvaluateAgencyClassService.selectTbEvaluateAgencyClassByEvaluateAgencyClassId(evaluateAgencyClassId)); + } + + /** + * 鏂板璇勪环鏈烘瀯鍒嗙被 + */ + @PreAuthorize("@ss.hasPermi('hezhi:evaluateAgencyClass:add')") + @Log(title = "璇勪环鏈烘瀯鍒嗙被", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbEvaluateAgencyClass tbEvaluateAgencyClass) + { + return toAjax(tbEvaluateAgencyClassService.insertTbEvaluateAgencyClass(tbEvaluateAgencyClass)); + } + + /** + * 淇敼璇勪环鏈烘瀯鍒嗙被 + */ + @PreAuthorize("@ss.hasPermi('hezhi:evaluateAgencyClass:edit')") + @Log(title = "璇勪环鏈烘瀯鍒嗙被", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbEvaluateAgencyClass tbEvaluateAgencyClass) + { + return toAjax(tbEvaluateAgencyClassService.updateTbEvaluateAgencyClass(tbEvaluateAgencyClass)); + } + + /** + * 鍒犻櫎璇勪环鏈烘瀯鍒嗙被 + */ + @PreAuthorize("@ss.hasPermi('hezhi:evaluateAgencyClass:remove')") + @Log(title = "璇勪环鏈烘瀯鍒嗙被", businessType = BusinessType.DELETE) + @DeleteMapping("/{evaluateAgencyClassIds}") + public AjaxResult remove(@PathVariable Long[] evaluateAgencyClassIds) + { + return toAjax(tbEvaluateAgencyClassService.deleteTbEvaluateAgencyClassByEvaluateAgencyClassIds(evaluateAgencyClassIds)); + } + + /** + * 鎵鏈夎瘎浠锋満鏋勫垎绫诲垪琛 + * @return + */ + @GetMapping("/getAllEvaluateAgencyClassList") + public AjaxResult getAllEvaluateAgencyClassList() { + TbEvaluateAgencyClass evaluateAgencyClass = new TbEvaluateAgencyClass(); + evaluateAgencyClass.setDelFlag(0); + return AjaxResult.success(tbEvaluateAgencyClassService.selectTbEvaluateAgencyClassList(evaluateAgencyClass)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbEvaluateAgencyController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbEvaluateAgencyController.java new file mode 100644 index 0000000000000000000000000000000000000000..d10da635c26c992876741d4e1bdd96b08e397ff2 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbEvaluateAgencyController.java @@ -0,0 +1,109 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbEvaluateAgency; +import com.ruoyi.hezhi.domain.vo.EvaluateAgencyVO; +import com.ruoyi.hezhi.service.ITbEvaluateAgencyService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 璇勪环鏈烘瀯Controller + * + * @author ruoyi + * @date 2024-10-23 + */ +@RestController +@RequestMapping("/hezhi/evaluateAgency") +public class TbEvaluateAgencyController extends BaseController +{ + @Autowired + private ITbEvaluateAgencyService tbEvaluateAgencyService; + + /** + * 鏌ヨ璇勪环鏈烘瀯鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:evaluateAgency:list')") + @GetMapping("/list") + public TableDataInfo list(TbEvaluateAgency tbEvaluateAgency) + { + startPage(); + List list = tbEvaluateAgencyService.selectTbEvaluateAgencyList(tbEvaluateAgency); + return getDataTable(list); + } + + /** + * 瀵煎嚭璇勪环鏈烘瀯鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:evaluateAgency:export')") + @Log(title = "璇勪环鏈烘瀯", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbEvaluateAgency tbEvaluateAgency) + { + List list = tbEvaluateAgencyService.selectTbEvaluateAgencyList(tbEvaluateAgency); + ExcelUtil util = new ExcelUtil(TbEvaluateAgency.class); + util.exportExcel(response, list, "璇勪环鏈烘瀯鏁版嵁"); + } + + /** + * 鑾峰彇璇勪环鏈烘瀯璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:evaluateAgency:query')") + @GetMapping(value = "/{evaluateAgencyId}") + public AjaxResult getInfo(@PathVariable("evaluateAgencyId") Long evaluateAgencyId) + { + return success(tbEvaluateAgencyService.selectTbEvaluateAgencyByEvaluateAgencyId(evaluateAgencyId)); + } + + /** + * 鏂板璇勪环鏈烘瀯 + */ + @PreAuthorize("@ss.hasPermi('hezhi:evaluateAgency:add')") + @Log(title = "璇勪环鏈烘瀯", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbEvaluateAgency tbEvaluateAgency) + { + return toAjax(tbEvaluateAgencyService.insertTbEvaluateAgency(tbEvaluateAgency)); + } + + /** + * 淇敼璇勪环鏈烘瀯 + */ + @PreAuthorize("@ss.hasPermi('hezhi:evaluateAgency:edit')") + @Log(title = "璇勪环鏈烘瀯", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbEvaluateAgency tbEvaluateAgency) + { + return toAjax(tbEvaluateAgencyService.updateTbEvaluateAgency(tbEvaluateAgency)); + } + + /** + * 鍒犻櫎璇勪环鏈烘瀯 + */ + @PreAuthorize("@ss.hasPermi('hezhi:evaluateAgency:remove')") + @Log(title = "璇勪环鏈烘瀯", businessType = BusinessType.DELETE) + @DeleteMapping("/{evaluateAgencyIds}") + public AjaxResult remove(@PathVariable Long[] evaluateAgencyIds) + { + return toAjax(tbEvaluateAgencyService.deleteTbEvaluateAgencyByEvaluateAgencyIds(evaluateAgencyIds)); + } + + /** + * 鑾峰彇绛涢夊垪琛 + * @return 缁撴灉 + */ + @GetMapping("/getSelectList") + public AjaxResult getSelectList(){ + List selectList = tbEvaluateAgencyService.getSelectList(); + return AjaxResult.success(selectList); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamBatchController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamBatchController.java new file mode 100644 index 0000000000000000000000000000000000000000..38f678aefc7ca330e7f4a2e6887f6c51c78b5b76 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamBatchController.java @@ -0,0 +1,104 @@ +package com.ruoyi.hezhi.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.hezhi.domain.TbExamBatch; +import com.ruoyi.hezhi.service.ITbExamBatchService; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 鑰冭瘯鎵规Controller + * + * @author ruoyi + * @date 2024-12-21 + */ +@RestController +@RequestMapping("/hezhi/hezhi") +public class TbExamBatchController extends BaseController +{ + @Autowired + private ITbExamBatchService tbExamBatchService; + + /** + * 鏌ヨ鑰冭瘯鎵规鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:hezhi:list')") + @GetMapping("/list") + public TableDataInfo list(TbExamBatch tbExamBatch) + { + startPage(); + List list = tbExamBatchService.selectTbExamBatchList(tbExamBatch); + return getDataTable(list); + } + + /** + * 瀵煎嚭鑰冭瘯鎵规鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:hezhi:export')") + @Log(title = "鑰冭瘯鎵规", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbExamBatch tbExamBatch) + { + List list = tbExamBatchService.selectTbExamBatchList(tbExamBatch); + ExcelUtil util = new ExcelUtil(TbExamBatch.class); + util.exportExcel(response, list, "鑰冭瘯鎵规鏁版嵁"); + } + + /** + * 鑾峰彇鑰冭瘯鎵规璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:hezhi:query')") + @GetMapping(value = "/{examBatchId}") + public AjaxResult getInfo(@PathVariable("examBatchId") Long examBatchId) + { + return success(tbExamBatchService.selectTbExamBatchByExamBatchId(examBatchId)); + } + + /** + * 鏂板鑰冭瘯鎵规 + */ + @PreAuthorize("@ss.hasPermi('hezhi:hezhi:add')") + @Log(title = "鑰冭瘯鎵规", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbExamBatch tbExamBatch) + { + return toAjax(tbExamBatchService.insertTbExamBatch(tbExamBatch)); + } + + /** + * 淇敼鑰冭瘯鎵规 + */ + @PreAuthorize("@ss.hasPermi('hezhi:hezhi:edit')") + @Log(title = "鑰冭瘯鎵规", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbExamBatch tbExamBatch) + { + return toAjax(tbExamBatchService.updateTbExamBatch(tbExamBatch)); + } + + /** + * 鍒犻櫎鑰冭瘯鎵规 + */ + @PreAuthorize("@ss.hasPermi('hezhi:hezhi:remove')") + @Log(title = "鑰冭瘯鎵规", businessType = BusinessType.DELETE) + @DeleteMapping("/{examBatchIds}") + public AjaxResult remove(@PathVariable Long[] examBatchIds) + { + return toAjax(tbExamBatchService.deleteTbExamBatchByExamBatchIds(examBatchIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamController.java new file mode 100644 index 0000000000000000000000000000000000000000..c04f06cdafb019da8b20b60e07a1b85ee2e39350 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamController.java @@ -0,0 +1,165 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbExam; +import com.ruoyi.hezhi.service.ITbExamService; +import com.ruoyi.hezhi.service.ITbExamSubjectFormalService; +import com.ruoyi.hezhi.service.ITbExamSubjectService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 鑰冭瘯Controller + * + * @author ruoyi + * @date 2024-11-12 + */ +@RestController +@RequestMapping("/hezhi/exam") +public class TbExamController extends BaseController +{ + @Autowired + private ITbExamService tbExamService; + @Autowired + private ITbExamSubjectService tbExamSubjectService; + @Autowired + private ITbExamSubjectFormalService tbExamSubjectFormalService; + + /** + * 鏌ヨ鑰冭瘯鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:exam:list')") + @GetMapping("/list") + public TableDataInfo list(TbExam tbExam) + { + startPage(); + List list = tbExamService.selectTbExamList(tbExam); + return getDataTable(list); + } + + /** + * 瀵煎嚭鑰冭瘯鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:exam:export')") + @Log(title = "鑰冭瘯", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbExam tbExam) + { + List list = tbExamService.selectTbExamList(tbExam); + ExcelUtil util = new ExcelUtil(TbExam.class); + util.exportExcel(response, list, "鑰冭瘯鏁版嵁"); + } + + /** + * 鑾峰彇鑰冭瘯璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:exam:query')") + @GetMapping(value = "/{examId}") + public AjaxResult getInfo(@PathVariable("examId") Long examId) + { + return success(tbExamService.selectTbExamByExamId(examId)); + } + + /** + * 鏂板鑰冭瘯 + */ + @PreAuthorize("@ss.hasPermi('hezhi:exam:add')") + @Log(title = "鑰冭瘯", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbExam tbExam) + { + return toAjax(tbExamService.insertTbExam(tbExam)); + } + + /** + * 淇敼鑰冭瘯 + */ + @PreAuthorize("@ss.hasPermi('hezhi:exam:edit')") + @Log(title = "鑰冭瘯", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbExam tbExam) + { + return toAjax(tbExamService.updateTbExam(tbExam)); + } + + /** + * 鍒犻櫎鑰冭瘯 + */ + @PreAuthorize("@ss.hasPermi('hezhi:exam:remove')") + @Log(title = "鑰冭瘯", businessType = BusinessType.DELETE) + @DeleteMapping("/{examIds}") + public AjaxResult remove(@PathVariable Long[] examIds) + { + return toAjax(tbExamService.deleteTbExamByExamIds(examIds)); + } + + /** + * 淇敼鑰冭瘯璁剧疆 + */ + @Transactional(rollbackFor = Exception.class) + @PreAuthorize("@ss.hasPermi('hezhi:exam:edit')") + @Log(title = "淇敼鑰冭瘯璁剧疆", businessType = BusinessType.UPDATE) + @PostMapping("/updateExamConfig") + public AjaxResult updateExamConfig(@RequestBody TbExam tbExam) + { + HashMap map = new HashMap<>(); + map.put("examId", tbExam.getExamId()); + map.put("level", tbExam.getLevel()); + map.put("examType", '0'); + Map examSubjectNum = tbExamSubjectService.getExamSubjectNum(map); + + int singleSelectNum = Integer.parseInt(examSubjectNum.get("singleSelectNum").toString()); + int manySelectNum = Integer.parseInt(examSubjectNum.get("manySelectNum").toString()); + int judgeNum = Integer.parseInt(examSubjectNum.get("judgeNum").toString()); + int discussNum = Integer.parseInt(examSubjectNum.get("discussNum").toString()); + + if (tbExam.getSingleSelectNum() > singleSelectNum) { + return AjaxResult.error("鍗曢夊彧鏈夈" + singleSelectNum + "銆戦锛岃鍏堟坊鍔犺冻澶熼鐩紒锛侊紒"); + } + if (tbExam.getManySelectNum() > manySelectNum) { + return AjaxResult.error("澶氶夊彧鏈夈" + manySelectNum + "銆戦锛岃鍏堟坊鍔犺冻澶熼鐩紒锛侊紒"); + } + if (tbExam.getJudgeNum() > judgeNum) { + return AjaxResult.error("鍒ゆ柇鍙湁銆" + judgeNum + "銆戦锛岃鍏堟坊鍔犺冻澶熼鐩紒锛侊紒"); + } + if (tbExam.getDiscussNum() > discussNum) { + return AjaxResult.error("璁鸿堪鍙湁銆" + discussNum + "銆戦锛岃鍏堟坊鍔犺冻澶熼鐩紒锛侊紒"); + } + + BigDecimal singleSelectScoreTotal = tbExam.getSingleSelectScore().multiply(new BigDecimal(tbExam.getSingleSelectNum())); + BigDecimal manySelectScoreTotal = tbExam.getManySelectScore().multiply(new BigDecimal(tbExam.getManySelectNum())); + BigDecimal judgeScoreTotal = tbExam.getJudgeScore().multiply(new BigDecimal(tbExam.getJudgeNum())); + BigDecimal discussScoreTotal = tbExam.getDiscussScore().multiply(new BigDecimal(tbExam.getDiscussNum())); + BigDecimal totalScore = singleSelectScoreTotal.add(manySelectScoreTotal).add(judgeScoreTotal).add(discussScoreTotal); + tbExam.setTotalScore(totalScore); + + // 閲嶆柊璁剧疆鑰冭瘯棰 + tbExamSubjectFormalService.batchInsertTbExamSubjectFormalBy(tbExam); + + return toAjax(tbExamService.updateTbExam(tbExam)); + } + + /** + * 鎵鏈夎冭瘯鍒楄〃 + * @return + */ + @GetMapping("/getAllExamList") + public AjaxResult getAllExamList() { + TbExam exam = new TbExam(); + exam.setDelFlag(0); + return AjaxResult.success(tbExamService.selectTbExamList(exam)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamFileController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamFileController.java new file mode 100644 index 0000000000000000000000000000000000000000..bff2825d0e684b2b42428e7398ab9c224f524fca --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamFileController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbExamFile; +import com.ruoyi.hezhi.service.ITbExamFileService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鑰冭瘯鎷嶆憚鏂囦欢Controller + * + * @author ruoyi + * @date 2024-11-14 + */ +@RestController +@RequestMapping("/hezhi/examFile") +public class TbExamFileController extends BaseController +{ + @Autowired + private ITbExamFileService tbExamFileService; + + /** + * 鏌ヨ鑰冭瘯鎷嶆憚鏂囦欢鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examFile:list')") + @GetMapping("/list") + public TableDataInfo list(TbExamFile tbExamFile) + { + startPage(); + List list = tbExamFileService.selectTbExamFileList(tbExamFile); + return getDataTable(list); + } + + /** + * 瀵煎嚭鑰冭瘯鎷嶆憚鏂囦欢鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examFile:export')") + @Log(title = "鑰冭瘯鎷嶆憚鏂囦欢", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbExamFile tbExamFile) + { + List list = tbExamFileService.selectTbExamFileList(tbExamFile); + ExcelUtil util = new ExcelUtil(TbExamFile.class); + util.exportExcel(response, list, "鑰冭瘯鎷嶆憚鏂囦欢鏁版嵁"); + } + + /** + * 鑾峰彇鑰冭瘯鎷嶆憚鏂囦欢璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examFile:query')") + @GetMapping(value = "/{examFileId}") + public AjaxResult getInfo(@PathVariable("examFileId") Long examFileId) + { + return success(tbExamFileService.selectTbExamFileByExamFileId(examFileId)); + } + + /** + * 鏂板鑰冭瘯鎷嶆憚鏂囦欢 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examFile:add')") + @Log(title = "鑰冭瘯鎷嶆憚鏂囦欢", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbExamFile tbExamFile) + { + return toAjax(tbExamFileService.insertTbExamFile(tbExamFile)); + } + + /** + * 淇敼鑰冭瘯鎷嶆憚鏂囦欢 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examFile:edit')") + @Log(title = "鑰冭瘯鎷嶆憚鏂囦欢", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbExamFile tbExamFile) + { + return toAjax(tbExamFileService.updateTbExamFile(tbExamFile)); + } + + /** + * 鍒犻櫎鑰冭瘯鎷嶆憚鏂囦欢 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examFile:remove')") + @Log(title = "鑰冭瘯鎷嶆憚鏂囦欢", businessType = BusinessType.DELETE) + @DeleteMapping("/{examFileIds}") + public AjaxResult remove(@PathVariable Long[] examFileIds) + { + return toAjax(tbExamFileService.deleteTbExamFileByExamFileIds(examFileIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamNoticeController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamNoticeController.java new file mode 100644 index 0000000000000000000000000000000000000000..d08d96a7eee176d0b92417d56f71ab3116dfecc5 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamNoticeController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbExamNotice; +import com.ruoyi.hezhi.service.ITbExamNoticeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鑰冭瘯閫氱煡Controller + * + * @author ruoyi + * @date 2024-10-16 + */ +@RestController +@RequestMapping("/hezhi/examNotice") +public class TbExamNoticeController extends BaseController +{ + @Autowired + private ITbExamNoticeService tbExamNoticeService; + + /** + * 鏌ヨ鑰冭瘯閫氱煡鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examNotice:list')") + @GetMapping("/list") + public TableDataInfo list(TbExamNotice tbExamNotice) + { + startPage(); + List list = tbExamNoticeService.selectTbExamNoticeList(tbExamNotice); + return getDataTable(list); + } + + /** + * 瀵煎嚭鑰冭瘯閫氱煡鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examNotice:export')") + @Log(title = "鑰冭瘯閫氱煡", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbExamNotice tbExamNotice) + { + List list = tbExamNoticeService.selectTbExamNoticeList(tbExamNotice); + ExcelUtil util = new ExcelUtil(TbExamNotice.class); + util.exportExcel(response, list, "鑰冭瘯閫氱煡鏁版嵁"); + } + + /** + * 鑾峰彇鑰冭瘯閫氱煡璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examNotice:query')") + @GetMapping(value = "/{examNoticeId}") + public AjaxResult getInfo(@PathVariable("examNoticeId") Long examNoticeId) + { + return success(tbExamNoticeService.selectTbExamNoticeByExamNoticeId(examNoticeId)); + } + + /** + * 鏂板鑰冭瘯閫氱煡 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examNotice:add')") + @Log(title = "鑰冭瘯閫氱煡", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbExamNotice tbExamNotice) + { + return toAjax(tbExamNoticeService.insertTbExamNotice(tbExamNotice)); + } + + /** + * 淇敼鑰冭瘯閫氱煡 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examNotice:edit')") + @Log(title = "鑰冭瘯閫氱煡", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbExamNotice tbExamNotice) + { + return toAjax(tbExamNoticeService.updateTbExamNotice(tbExamNotice)); + } + + /** + * 鍒犻櫎鑰冭瘯閫氱煡 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examNotice:remove')") + @Log(title = "鑰冭瘯閫氱煡", businessType = BusinessType.DELETE) + @DeleteMapping("/{examNoticeIds}") + public AjaxResult remove(@PathVariable Long[] examNoticeIds) + { + return toAjax(tbExamNoticeService.deleteTbExamNoticeByExamNoticeIds(examNoticeIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamRegistrationController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamRegistrationController.java new file mode 100644 index 0000000000000000000000000000000000000000..2398e76cb80a8c076c1f84a51762def893520754 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamRegistrationController.java @@ -0,0 +1,155 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbExamRegistration; +import com.ruoyi.hezhi.domain.vo.TbExamRegistrationVO; +import com.ruoyi.hezhi.domain.vo.TopicImportTemplateVO; +import com.ruoyi.hezhi.service.ITbExamRegistrationService; +import com.ruoyi.hezhi.util.ImportTemplateUtil; +import io.swagger.v3.oas.annotations.Operation; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.repository.init.ResourceReader; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.List; +import java.util.Map; + +/** + * 鑰冭瘯鎶ュ悕Controller + * + * @author ruoyi + * @date 2024-11-05 + */ +@RestController +@RequestMapping("/hezhi/examRegistration") +public class TbExamRegistrationController extends BaseController +{ + @Autowired + private ITbExamRegistrationService tbExamRegistrationService; + + /** + * 鏌ヨ鑰冭瘯鎶ュ悕鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examRegistration:list')") + @GetMapping("/list") + public TableDataInfo list(TbExamRegistration tbExamRegistration) + { + startPage(); + List list = tbExamRegistrationService.selectTbExamRegistrationList(tbExamRegistration); + return getDataTable(list); + } + + /** + * 瀵煎嚭鑰冭瘯鎶ュ悕鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examRegistration:export')") + @Log(title = "鑰冭瘯鎶ュ悕", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbExamRegistration tbExamRegistration) + { + List list = tbExamRegistrationService.selectTbExamRegistrationList(tbExamRegistration); + ExcelUtil util = new ExcelUtil(TbExamRegistration.class); + util.exportExcel(response, list, "鑰冭瘯鎶ュ悕鏁版嵁"); + } + + /** + * 鑾峰彇鑰冭瘯鎶ュ悕璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examRegistration:query')") + @GetMapping(value = "/{examRegistrationId}") + public AjaxResult getInfo(@PathVariable("examRegistrationId") Long examRegistrationId) + { + return success(tbExamRegistrationService.selectTbExamRegistrationByExamRegistrationId(examRegistrationId)); + } + + /** + * 鑾峰彇璇佷功鍙戣揣璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examRegistration:query')") + @GetMapping(value = "/fahuo/{examRegistrationId}") + public AjaxResult getFahuoInfo(@PathVariable("examRegistrationId") Long examRegistrationId) + { + return success(tbExamRegistrationService.selectTbExamRegistrationByExamRegistrationIdFahuo(examRegistrationId)); + } + + /** + * 鏂板鑰冭瘯鎶ュ悕 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examRegistration:add')") + @Log(title = "鑰冭瘯鎶ュ悕", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbExamRegistration tbExamRegistration) + { + try{ + return toAjax(tbExamRegistrationService.insertTbExamRegistration(tbExamRegistration)); + }catch (ServiceException e){ + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 淇敼鑰冭瘯鎶ュ悕 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examRegistration:edit')") + @Log(title = "鑰冭瘯鎶ュ悕", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbExamRegistration tbExamRegistration) + { + return toAjax(tbExamRegistrationService.updateTbExamRegistration(tbExamRegistration)); + } + + /** + * 鍒犻櫎鑰冭瘯鎶ュ悕 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examRegistration:remove')") + @Log(title = "鑰冭瘯鎶ュ悕", businessType = BusinessType.DELETE) + @DeleteMapping("/{examRegistrationIds}") + public AjaxResult remove(@PathVariable Long[] examRegistrationIds) + { + return toAjax(tbExamRegistrationService.deleteTbExamRegistrationByExamRegistrationIds(examRegistrationIds)); + } + + /** + * 璇佷功鍙戣揣 + * @return 缁撴灉 + */ + @Log(title = "璇佷功鍙戣揣", businessType = BusinessType.UPDATE) + @PostMapping("/certificateSend") + public AjaxResult certificateSend(@RequestBody TbExamRegistration tbExamRegistration){ + return toAjax(tbExamRegistrationService.certificateSend(tbExamRegistration)); + } + + /** + * 涓嬭浇瀵煎叆妯℃澘 + * + * @param response response + */ + @PostMapping("/importTemplate") + public void importTemplate(HttpServletResponse response) { + ImportTemplateUtil.downloadTemplate(response, TbExamRegistrationVO.class, "鑰冭瘯鎶ュ悕瀵煎叆妯℃澘"); + } + + /** + * 瀵煎叆鑰冭瘯鎶ュ悕 + */ + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file) throws Exception { + List list = new ExcelUtil(TbExamRegistrationVO.class) + .importExcel(file.getInputStream()); + return AjaxResult.success(tbExamRegistrationService.importData(list)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamSimulateInfoController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamSimulateInfoController.java new file mode 100644 index 0000000000000000000000000000000000000000..ab3871e0d792029ec3d44f6069f371729d7adecc --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamSimulateInfoController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbExamSimulateInfo; +import com.ruoyi.hezhi.service.ITbExamSimulateInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏Controller + * + * @author ruoyi + * @date 2024-11-11 + */ +@RestController +@RequestMapping("/hezhi/examSimulateInfo") +public class TbExamSimulateInfoController extends BaseController +{ + @Autowired + private ITbExamSimulateInfoService tbExamSimulateInfoService; + + /** + * 鏌ヨ鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSimulateInfo:list')") + @GetMapping("/list") + public TableDataInfo list(TbExamSimulateInfo tbExamSimulateInfo) + { + startPage(); + List list = tbExamSimulateInfoService.selectTbExamSimulateInfoList(tbExamSimulateInfo); + return getDataTable(list); + } + + /** + * 瀵煎嚭鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSimulateInfo:export')") + @Log(title = "鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbExamSimulateInfo tbExamSimulateInfo) + { + List list = tbExamSimulateInfoService.selectTbExamSimulateInfoList(tbExamSimulateInfo); + ExcelUtil util = new ExcelUtil(TbExamSimulateInfo.class); + util.exportExcel(response, list, "鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏鏁版嵁"); + } + + /** + * 鑾峰彇鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSimulateInfo:query')") + @GetMapping(value = "/{examSimulateInfoId}") + public AjaxResult getInfo(@PathVariable("examSimulateInfoId") Long examSimulateInfoId) + { + return success(tbExamSimulateInfoService.selectTbExamSimulateInfoByExamSimulateInfoId(examSimulateInfoId)); + } + + /** + * 鏂板鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSimulateInfo:add')") + @Log(title = "鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbExamSimulateInfo tbExamSimulateInfo) + { + return toAjax(tbExamSimulateInfoService.insertTbExamSimulateInfo(tbExamSimulateInfo)); + } + + /** + * 淇敼鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSimulateInfo:edit')") + @Log(title = "鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbExamSimulateInfo tbExamSimulateInfo) + { + return toAjax(tbExamSimulateInfoService.updateTbExamSimulateInfo(tbExamSimulateInfo)); + } + + /** + * 鍒犻櫎鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSimulateInfo:remove')") + @Log(title = "鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏", businessType = BusinessType.DELETE) + @DeleteMapping("/{examSimulateInfoIds}") + public AjaxResult remove(@PathVariable Long[] examSimulateInfoIds) + { + return toAjax(tbExamSimulateInfoService.deleteTbExamSimulateInfoByExamSimulateInfoIds(examSimulateInfoIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamSubjectAnswerController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamSubjectAnswerController.java new file mode 100644 index 0000000000000000000000000000000000000000..647e1c44e4b361adf7cf1cbdc1bee94f4138e0f7 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamSubjectAnswerController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbExamSubjectAnswer; +import com.ruoyi.hezhi.service.ITbExamSubjectAnswerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鑰冭瘯棰樼洰绛旀閫夐」Controller + * + * @author ruoyi + * @date 2024-11-04 + */ +@RestController +@RequestMapping("/hezhi/examSubjectAnswer") +public class TbExamSubjectAnswerController extends BaseController +{ + @Autowired + private ITbExamSubjectAnswerService tbExamSubjectAnswerService; + + /** + * 鏌ヨ鑰冭瘯棰樼洰绛旀閫夐」鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSubjectAnswer:list')") + @GetMapping("/list") + public TableDataInfo list(TbExamSubjectAnswer tbExamSubjectAnswer) + { + startPage(); + List list = tbExamSubjectAnswerService.selectTbExamSubjectAnswerList(tbExamSubjectAnswer); + return getDataTable(list); + } + + /** + * 瀵煎嚭鑰冭瘯棰樼洰绛旀閫夐」鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSubjectAnswer:export')") + @Log(title = "鑰冭瘯棰樼洰绛旀閫夐」", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbExamSubjectAnswer tbExamSubjectAnswer) + { + List list = tbExamSubjectAnswerService.selectTbExamSubjectAnswerList(tbExamSubjectAnswer); + ExcelUtil util = new ExcelUtil(TbExamSubjectAnswer.class); + util.exportExcel(response, list, "鑰冭瘯棰樼洰绛旀閫夐」鏁版嵁"); + } + + /** + * 鑾峰彇鑰冭瘯棰樼洰绛旀閫夐」璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSubjectAnswer:query')") + @GetMapping(value = "/{examSubjectAnswerId}") + public AjaxResult getInfo(@PathVariable("examSubjectAnswerId") Long examSubjectAnswerId) + { + return success(tbExamSubjectAnswerService.selectTbExamSubjectAnswerByExamSubjectAnswerId(examSubjectAnswerId)); + } + + /** + * 鏂板鑰冭瘯棰樼洰绛旀閫夐」 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSubjectAnswer:add')") + @Log(title = "鑰冭瘯棰樼洰绛旀閫夐」", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbExamSubjectAnswer tbExamSubjectAnswer) + { + return toAjax(tbExamSubjectAnswerService.insertTbExamSubjectAnswer(tbExamSubjectAnswer)); + } + + /** + * 淇敼鑰冭瘯棰樼洰绛旀閫夐」 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSubjectAnswer:edit')") + @Log(title = "鑰冭瘯棰樼洰绛旀閫夐」", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbExamSubjectAnswer tbExamSubjectAnswer) + { + return toAjax(tbExamSubjectAnswerService.updateTbExamSubjectAnswer(tbExamSubjectAnswer)); + } + + /** + * 鍒犻櫎鑰冭瘯棰樼洰绛旀閫夐」 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSubjectAnswer:remove')") + @Log(title = "鑰冭瘯棰樼洰绛旀閫夐」", businessType = BusinessType.DELETE) + @DeleteMapping("/{examSubjectAnswerIds}") + public AjaxResult remove(@PathVariable Long[] examSubjectAnswerIds) + { + return toAjax(tbExamSubjectAnswerService.deleteTbExamSubjectAnswerByExamSubjectAnswerIds(examSubjectAnswerIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamSubjectController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamSubjectController.java new file mode 100644 index 0000000000000000000000000000000000000000..e3ea5515bec75cea57886de3d3b1ad5852a79f43 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamSubjectController.java @@ -0,0 +1,329 @@ +package com.ruoyi.hezhi.controller; + +import cn.hutool.core.io.resource.ResourceUtil; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.hezhi.domain.TbExamSubject; +import com.ruoyi.hezhi.domain.TbExamSubjectAnswer; +import com.ruoyi.hezhi.domain.vo.TopicImportTemplateVO; +import com.ruoyi.hezhi.service.ITbExamSubjectAnswerService; +import com.ruoyi.hezhi.service.ITbExamSubjectService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.repository.init.ResourceReader; +import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.net.URL; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * 鑰冭瘯棰樼洰Controller + * + * @author ruoyi + * @date 2024-11-04 + */ +@RestController +@RequestMapping("/hezhi/examSubject") +public class TbExamSubjectController extends BaseController +{ + @Autowired + private ITbExamSubjectService tbExamSubjectService; + + @Autowired + private ITbExamSubjectAnswerService tbExamSubjectAnswerService; + + // 鏈湴鏂囦欢璺緞 + private static final String FILE_PATH = "/reportForm/鑰冭瘯棰樼洰瀵煎叆妯℃澘.xlsx"; // 鏇挎崲涓哄疄闄呯殑鏂囦欢璺緞 + + /** + * 鏌ヨ鑰冭瘯棰樼洰鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSubject:list')") + @GetMapping("/list") + public TableDataInfo list(TbExamSubject tbExamSubject) + { + startPage(); + List list = tbExamSubjectService.selectTbExamSubjectList(tbExamSubject); + return getDataTable(list); + } + + /** + * 瀵煎嚭鑰冭瘯棰樼洰鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSubject:export')") + @Log(title = "鑰冭瘯棰樼洰", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbExamSubject tbExamSubject) + { + List list = tbExamSubjectService.selectTbExamSubjectList(tbExamSubject); + ExcelUtil util = new ExcelUtil(TbExamSubject.class); + util.exportExcel(response, list, "鑰冭瘯棰樼洰鏁版嵁"); + } + + /** + * 鑾峰彇鑰冭瘯棰樼洰璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSubject:query')") + @GetMapping(value = "/{examSubjectId}") + public AjaxResult getInfo(@PathVariable("examSubjectId") Long examSubjectId) + { + TbExamSubject tbExamSubject = tbExamSubjectService.selectTbExamSubjectByExamSubjectId(examSubjectId); + if (tbExamSubject != null) { + tbExamSubject.setExamSubjectAnswerList(tbExamSubjectAnswerService.selectTbExamSubjectAnswerListBy(tbExamSubject.getExamSubjectNo())); + } + return success(tbExamSubject); + } + + /** + * 鏂板鑰冭瘯棰樼洰 + */ + @RepeatSubmit + @Transactional(rollbackFor = Exception.class) + @PreAuthorize("@ss.hasPermi('hezhi:examSubject:add')") + @Log(title = "鏂板鑰冭瘯棰樼洰", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbExamSubject tbExamSubject) + { + List examSubjectAnswerList = tbExamSubject.getExamSubjectAnswerList(); + if (tbExamSubject.getSubjectType() == 1 || tbExamSubject.getSubjectType() == 2) { + if (examSubjectAnswerList.size() < 2) { + return AjaxResult.error("閫夐」鏁拌澶т簬1"); + } + + // 姝g‘閫夐」鏁伴噺 + long answerCount = examSubjectAnswerList.stream().filter(p ->p.getIsAnswer().equals(1)).count(); + if (tbExamSubject.getSubjectType() == 1 && answerCount != 1) { + return AjaxResult.error("璇疯缃1涓崟閫夋纭夐」鏁"); + } + if (tbExamSubject.getSubjectType() == 2 && answerCount < 2) { + return AjaxResult.error("璇疯缃涓閫夋纭夐」鏁"); + } + + } + if (tbExamSubject.getSubjectType() == 4) { + if (examSubjectAnswerList.isEmpty()) { + return AjaxResult.error("璁鸿堪棰樺尮閰嶅叧閿瘝鏁拌澶т簬涓鏉"); + } + } + String examSubjectNo = IdUtils.fastSimpleUUID(); + tbExamSubject.setExamSubjectNo(examSubjectNo); + tbExamSubjectService.insertTbExamSubject(tbExamSubject); + + if (!examSubjectAnswerList.isEmpty()) { + Date nowDate = DateUtils.getNowDate(); + for (TbExamSubjectAnswer subjectAnswer : examSubjectAnswerList) { + subjectAnswer.setExamSubjectId(tbExamSubject.getExamSubjectId()); + subjectAnswer.setExamSubjectNo(examSubjectNo); + subjectAnswer.setSubjectType(tbExamSubject.getSubjectType()); + if (tbExamSubject.getSubjectType() == 4) { + subjectAnswer.setIsAnswer(1); + } + subjectAnswer.setCreateTime(nowDate); + } + tbExamSubjectAnswerService.batchInsertTbExamSubjectAnswer(examSubjectAnswerList); + } + + if (tbExamSubject.getSubjectType() != 3) { + Map answerMap = tbExamSubjectAnswerService.selectAnswerIdsAndAnswer(tbExamSubject.getExamSubjectId(), null); + if (answerMap != null) { + TbExamSubject updateExamSubject = new TbExamSubject(); + updateExamSubject.setExamSubjectId(tbExamSubject.getExamSubjectId()); + updateExamSubject.setAnswerIds(answerMap.get("answerIds").toString()); + if (tbExamSubject.getSubjectType() == 4) { + updateExamSubject.setAnswer(answerMap.get("answerNames").toString()); + } else { + updateExamSubject.setAnswer(answerMap.get("answers").toString()); + } + tbExamSubjectService.updateTbExamSubject(updateExamSubject); + } + } + + if (tbExamSubject.getSubjectType() == 3) { + List judgeSubjectAnswerList = new ArrayList<>(); + TbExamSubjectAnswer subjectAnswerA = new TbExamSubjectAnswer(); + subjectAnswerA.setExamSubjectId(tbExamSubject.getExamSubjectId()); + subjectAnswerA.setExamSubjectNo(examSubjectNo); + subjectAnswerA.setSubjectType(tbExamSubject.getSubjectType()); + subjectAnswerA.setSubjectOption("A"); + subjectAnswerA.setSubjectName("姝g‘"); + if ("姝g‘".equals(tbExamSubject.getAnswer())) { + subjectAnswerA.setIsAnswer(1); + } else { + subjectAnswerA.setIsAnswer(0); + } + judgeSubjectAnswerList.add(subjectAnswerA); + + TbExamSubjectAnswer subjectAnswerB = new TbExamSubjectAnswer(); + subjectAnswerB.setExamSubjectId(tbExamSubject.getExamSubjectId()); + subjectAnswerB.setExamSubjectNo(examSubjectNo); + subjectAnswerB.setSubjectType(tbExamSubject.getSubjectType()); + subjectAnswerB.setSubjectOption("B"); + subjectAnswerB.setSubjectName("閿欒"); + if ("閿欒".equals(tbExamSubject.getAnswer())) { + subjectAnswerB.setIsAnswer(1); + } else { + subjectAnswerB.setIsAnswer(0); + } + judgeSubjectAnswerList.add(subjectAnswerB); + tbExamSubjectAnswerService.batchInsertTbExamSubjectAnswer(judgeSubjectAnswerList); + } + + return AjaxResult.success(); + } + + /** + * 淇敼鑰冭瘯棰樼洰 + */ + @RepeatSubmit + @Transactional(rollbackFor = Exception.class) + @PreAuthorize("@ss.hasPermi('hezhi:examSubject:edit')") + @Log(title = "淇敼鑰冭瘯棰樼洰", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbExamSubject tbExamSubject) + { + TbExamSubject examSubject = tbExamSubjectService.selectTbExamSubjectByExamSubjectId(tbExamSubject.getExamSubjectId()); + if (examSubject == null) { + return AjaxResult.error("鑰冭瘯棰樼洰寮傚父"); + } + + List examSubjectAnswerList = tbExamSubject.getExamSubjectAnswerList(); + if (tbExamSubject.getSubjectType() == 1 || tbExamSubject.getSubjectType() == 2) { + if (examSubjectAnswerList.size() < 2) { + return AjaxResult.error("閫夐」鏁拌澶т簬1"); + } + + // 姝g‘閫夐」鏁伴噺 + long answerCount = examSubjectAnswerList.stream().filter(p ->p.getIsAnswer().equals(1)).count(); + if (tbExamSubject.getSubjectType() == 1 && answerCount != 1) { + return AjaxResult.error("璇疯缃1涓崟閫夋纭夐」鏁"); + } + if (tbExamSubject.getSubjectType() == 2 && answerCount < 2) { + return AjaxResult.error("璇疯缃涓閫夋纭夐」鏁"); + } + + } + if (tbExamSubject.getSubjectType() == 4) { + if (examSubjectAnswerList.isEmpty()) { + return AjaxResult.error("璁鸿堪棰樺尮閰嶅叧閿瘝鏁拌澶т簬涓鏉"); + } + } + + // 鍒犻櫎閲嶆柊娣诲姞 + tbExamSubjectAnswerService.batchDeleteTbExamSubjectAnswerByExamSubjectNo(examSubject.getExamSubjectNo()); + if (!examSubjectAnswerList.isEmpty()) { + Date nowDate = DateUtils.getNowDate(); + for (TbExamSubjectAnswer subjectAnswer : examSubjectAnswerList) { + subjectAnswer.setExamSubjectId(tbExamSubject.getExamSubjectId()); + subjectAnswer.setExamSubjectNo(examSubject.getExamSubjectNo()); + subjectAnswer.setSubjectType(tbExamSubject.getSubjectType()); + if (tbExamSubject.getSubjectType() == 4) { + subjectAnswer.setIsAnswer(1); + } + subjectAnswer.setCreateTime(nowDate); + } + } + + if (tbExamSubject.getSubjectType() != 3) { + Map answerMap = tbExamSubjectAnswerService.selectAnswerIdsAndAnswer(tbExamSubject.getExamSubjectId(), null); + if (answerMap != null) { + tbExamSubject.setExamSubjectId(tbExamSubject.getExamSubjectId()); + tbExamSubject.setAnswerIds(answerMap.get("answerIds").toString()); + if (tbExamSubject.getSubjectType() == 4) { + tbExamSubject.setAnswer(answerMap.get("answerNames").toString()); + } else { + tbExamSubject.setAnswer(answerMap.get("answers").toString()); + } + } + } + + if (tbExamSubject.getSubjectType() == 3) { + List judgeSubjectAnswerList = new ArrayList<>(); + TbExamSubjectAnswer subjectAnswerA = new TbExamSubjectAnswer(); + subjectAnswerA.setExamSubjectId(tbExamSubject.getExamSubjectId()); + subjectAnswerA.setExamSubjectNo(examSubject.getExamSubjectNo()); + subjectAnswerA.setSubjectType(tbExamSubject.getSubjectType()); + subjectAnswerA.setSubjectOption("A"); + subjectAnswerA.setSubjectName("姝g‘"); + if ("姝g‘".equals(tbExamSubject.getAnswer())) { + subjectAnswerA.setIsAnswer(1); + } else { + subjectAnswerA.setIsAnswer(0); + } + judgeSubjectAnswerList.add(subjectAnswerA); + + TbExamSubjectAnswer subjectAnswerB = new TbExamSubjectAnswer(); + subjectAnswerB.setExamSubjectId(tbExamSubject.getExamSubjectId()); + subjectAnswerB.setExamSubjectNo(examSubject.getExamSubjectNo()); + subjectAnswerB.setSubjectType(tbExamSubject.getSubjectType()); + subjectAnswerB.setSubjectOption("B"); + subjectAnswerB.setSubjectName("閿欒"); + if ("閿欒".equals(tbExamSubject.getAnswer())) { + subjectAnswerB.setIsAnswer(1); + } else { + subjectAnswerB.setIsAnswer(0); + } + judgeSubjectAnswerList.add(subjectAnswerB); + tbExamSubjectAnswerService.batchInsertTbExamSubjectAnswer(judgeSubjectAnswerList); + }else { + tbExamSubjectAnswerService.batchInsertTbExamSubjectAnswer(examSubjectAnswerList); + } + + tbExamSubjectService.updateTbExamSubject(tbExamSubject); + return AjaxResult.success(); + } + + /** + * 鍒犻櫎鑰冭瘯棰樼洰 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSubject:remove')") + @Log(title = "鑰冭瘯棰樼洰", businessType = BusinessType.DELETE) + @DeleteMapping("/{examSubjectIds}") + public AjaxResult remove(@PathVariable Long[] examSubjectIds) + { + return toAjax(tbExamSubjectService.deleteTbExamSubjectByExamSubjectIds(examSubjectIds)); + } + + /** + * 涓嬭浇瀵煎叆妯℃澘 + * + * @param response response + */ + @PostMapping("/importTemplate") + public void importTemplate(HttpServletResponse response) throws Exception { + + tbExamSubjectService.importTemplate(response); + + } + + /** + * 瀵煎叆鑰冭瘯棰樼洰 + */ + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file) throws Exception { + ExcelUtil util = new ExcelUtil(TopicImportTemplateVO.class); + List list = util.importExcel(file.getInputStream()); + String username = SecurityUtils.getUsername(); + String message= tbExamSubjectService.importData(list,username); + return AjaxResult.success(message); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamSubjectFormalController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamSubjectFormalController.java new file mode 100644 index 0000000000000000000000000000000000000000..027b30bf4fa9156ca8fabffbf7511997c8b810e9 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamSubjectFormalController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbExamSubjectFormal; +import com.ruoyi.hezhi.service.ITbExamSubjectFormalService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 姝e紡鑰冭瘯棰樼洰Controller + * + * @author ruoyi + * @date 2024-11-13 + */ +@RestController +@RequestMapping("/hezhi/examSubjectFormal") +public class TbExamSubjectFormalController extends BaseController +{ + @Autowired + private ITbExamSubjectFormalService tbExamSubjectFormalService; + + /** + * 鏌ヨ姝e紡鑰冭瘯棰樼洰鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSubjectFormal:list')") + @GetMapping("/list") + public TableDataInfo list(TbExamSubjectFormal tbExamSubjectFormal) + { + startPage(); + List list = tbExamSubjectFormalService.selectTbExamSubjectFormalList(tbExamSubjectFormal); + return getDataTable(list); + } + + /** + * 瀵煎嚭姝e紡鑰冭瘯棰樼洰鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSubjectFormal:export')") + @Log(title = "姝e紡鑰冭瘯棰樼洰", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbExamSubjectFormal tbExamSubjectFormal) + { + List list = tbExamSubjectFormalService.selectTbExamSubjectFormalList(tbExamSubjectFormal); + ExcelUtil util = new ExcelUtil(TbExamSubjectFormal.class); + util.exportExcel(response, list, "姝e紡鑰冭瘯棰樼洰鏁版嵁"); + } + + /** + * 鑾峰彇姝e紡鑰冭瘯棰樼洰璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSubjectFormal:query')") + @GetMapping(value = "/{examSubjectFormalId}") + public AjaxResult getInfo(@PathVariable("examSubjectFormalId") Long examSubjectFormalId) + { + return success(tbExamSubjectFormalService.selectTbExamSubjectFormalByExamSubjectFormalId(examSubjectFormalId)); + } + + /** + * 鏂板姝e紡鑰冭瘯棰樼洰 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSubjectFormal:add')") + @Log(title = "姝e紡鑰冭瘯棰樼洰", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbExamSubjectFormal tbExamSubjectFormal) + { + return toAjax(tbExamSubjectFormalService.insertTbExamSubjectFormal(tbExamSubjectFormal)); + } + + /** + * 淇敼姝e紡鑰冭瘯棰樼洰 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSubjectFormal:edit')") + @Log(title = "姝e紡鑰冭瘯棰樼洰", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbExamSubjectFormal tbExamSubjectFormal) + { + return toAjax(tbExamSubjectFormalService.updateTbExamSubjectFormal(tbExamSubjectFormal)); + } + + /** + * 鍒犻櫎姝e紡鑰冭瘯棰樼洰 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSubjectFormal:remove')") + @Log(title = "姝e紡鑰冭瘯棰樼洰", businessType = BusinessType.DELETE) + @DeleteMapping("/{examSubjectFormalIds}") + public AjaxResult remove(@PathVariable Long[] examSubjectFormalIds) + { + return toAjax(tbExamSubjectFormalService.deleteTbExamSubjectFormalByExamSubjectFormalIds(examSubjectFormalIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamSubjectSimulateController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamSubjectSimulateController.java new file mode 100644 index 0000000000000000000000000000000000000000..00324cee9f2c76d7987b1342b9720c97eebab715 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExamSubjectSimulateController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbExamSubjectSimulate; +import com.ruoyi.hezhi.service.ITbExamSubjectSimulateService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 妯℃嫙鑰冭瘯棰樼洰Controller + * + * @author ruoyi + * @date 2024-11-08 + */ +@RestController +@RequestMapping("/hezhi/examSubjectSimulate") +public class TbExamSubjectSimulateController extends BaseController +{ + @Autowired + private ITbExamSubjectSimulateService tbExamSubjectSimulateService; + + /** + * 鏌ヨ妯℃嫙鑰冭瘯棰樼洰鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSubjectSimulate:list')") + @GetMapping("/list") + public TableDataInfo list(TbExamSubjectSimulate tbExamSubjectSimulate) + { + startPage(); + List list = tbExamSubjectSimulateService.selectTbExamSubjectSimulateList(tbExamSubjectSimulate); + return getDataTable(list); + } + + /** + * 瀵煎嚭妯℃嫙鑰冭瘯棰樼洰鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSubjectSimulate:export')") + @Log(title = "妯℃嫙鑰冭瘯棰樼洰", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbExamSubjectSimulate tbExamSubjectSimulate) + { + List list = tbExamSubjectSimulateService.selectTbExamSubjectSimulateList(tbExamSubjectSimulate); + ExcelUtil util = new ExcelUtil(TbExamSubjectSimulate.class); + util.exportExcel(response, list, "妯℃嫙鑰冭瘯棰樼洰鏁版嵁"); + } + + /** + * 鑾峰彇妯℃嫙鑰冭瘯棰樼洰璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSubjectSimulate:query')") + @GetMapping(value = "/{examSubjectSimulateId}") + public AjaxResult getInfo(@PathVariable("examSubjectSimulateId") Long examSubjectSimulateId) + { + return success(tbExamSubjectSimulateService.selectTbExamSubjectSimulateByExamSubjectSimulateId(examSubjectSimulateId)); + } + + /** + * 鏂板妯℃嫙鑰冭瘯棰樼洰 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSubjectSimulate:add')") + @Log(title = "妯℃嫙鑰冭瘯棰樼洰", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbExamSubjectSimulate tbExamSubjectSimulate) + { + return toAjax(tbExamSubjectSimulateService.insertTbExamSubjectSimulate(tbExamSubjectSimulate)); + } + + /** + * 淇敼妯℃嫙鑰冭瘯棰樼洰 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSubjectSimulate:edit')") + @Log(title = "妯℃嫙鑰冭瘯棰樼洰", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbExamSubjectSimulate tbExamSubjectSimulate) + { + return toAjax(tbExamSubjectSimulateService.updateTbExamSubjectSimulate(tbExamSubjectSimulate)); + } + + /** + * 鍒犻櫎妯℃嫙鑰冭瘯棰樼洰 + */ + @PreAuthorize("@ss.hasPermi('hezhi:examSubjectSimulate:remove')") + @Log(title = "妯℃嫙鑰冭瘯棰樼洰", businessType = BusinessType.DELETE) + @DeleteMapping("/{examSubjectSimulateIds}") + public AjaxResult remove(@PathVariable Long[] examSubjectSimulateIds) + { + return toAjax(tbExamSubjectSimulateService.deleteTbExamSubjectSimulateByExamSubjectSimulateIds(examSubjectSimulateIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExpressKdCodeController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExpressKdCodeController.java new file mode 100644 index 0000000000000000000000000000000000000000..3d55e89b852bd00611b82bad8752f520f9d8e537 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbExpressKdCodeController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbExpressKdCode; +import com.ruoyi.hezhi.service.ITbExpressKdCodeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 蹇掔紪鐮丆ontroller + * + * @author ruoyi + * @date 2024-11-20 + */ +@RestController +@RequestMapping("/hezhi/expressKdCode") +public class TbExpressKdCodeController extends BaseController +{ + @Autowired + private ITbExpressKdCodeService tbExpressKdCodeService; + + /** + * 鏌ヨ蹇掔紪鐮佸垪琛 + */ + @PreAuthorize("@ss.hasPermi('hezhi:expressKdCode:list')") + @GetMapping("/list") + public TableDataInfo list(TbExpressKdCode tbExpressKdCode) + { + startPage(); + List list = tbExpressKdCodeService.selectTbExpressKdCodeList(tbExpressKdCode); + return getDataTable(list); + } + + /** + * 瀵煎嚭蹇掔紪鐮佸垪琛 + */ + @PreAuthorize("@ss.hasPermi('hezhi:expressKdCode:export')") + @Log(title = "蹇掔紪鐮", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbExpressKdCode tbExpressKdCode) + { + List list = tbExpressKdCodeService.selectTbExpressKdCodeList(tbExpressKdCode); + ExcelUtil util = new ExcelUtil(TbExpressKdCode.class); + util.exportExcel(response, list, "蹇掔紪鐮佹暟鎹"); + } + + /** + * 鑾峰彇蹇掔紪鐮佽缁嗕俊鎭 + */ + @PreAuthorize("@ss.hasPermi('hezhi:expressKdCode:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(tbExpressKdCodeService.selectTbExpressKdCodeById(id)); + } + + /** + * 鏂板蹇掔紪鐮 + */ + @PreAuthorize("@ss.hasPermi('hezhi:expressKdCode:add')") + @Log(title = "蹇掔紪鐮", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbExpressKdCode tbExpressKdCode) + { + return toAjax(tbExpressKdCodeService.insertTbExpressKdCode(tbExpressKdCode)); + } + + /** + * 淇敼蹇掔紪鐮 + */ + @PreAuthorize("@ss.hasPermi('hezhi:expressKdCode:edit')") + @Log(title = "蹇掔紪鐮", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbExpressKdCode tbExpressKdCode) + { + return toAjax(tbExpressKdCodeService.updateTbExpressKdCode(tbExpressKdCode)); + } + + /** + * 鍒犻櫎蹇掔紪鐮 + */ + @PreAuthorize("@ss.hasPermi('hezhi:expressKdCode:remove')") + @Log(title = "蹇掔紪鐮", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(tbExpressKdCodeService.deleteTbExpressKdCodeByIds(ids)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbLinkController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbLinkController.java new file mode 100644 index 0000000000000000000000000000000000000000..da4ed565d543c8c543d521e008f6ecee98631ac9 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbLinkController.java @@ -0,0 +1,120 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbLink; +import com.ruoyi.hezhi.service.ITbLinkService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 璧勬簮鍏宠仈Controller + * + * @author ruoyi + * @date 2024-10-22 + */ +@RestController +@RequestMapping("/hezhi/link") +public class TbLinkController extends BaseController +{ + @Autowired + private ITbLinkService tbLinkService; + + /** + * 鏌ヨ璧勬簮鍏宠仈鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:link:list')") + @GetMapping("/list") + public TableDataInfo list(TbLink tbLink) + { + startPage(); + List list = tbLinkService.selectTbLinkList(tbLink); + return getDataTable(list); + } + + /** + * 瀵煎嚭璧勬簮鍏宠仈鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:link:export')") + @Log(title = "璧勬簮鍏宠仈", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbLink tbLink) + { + List list = tbLinkService.selectTbLinkList(tbLink); + ExcelUtil util = new ExcelUtil(TbLink.class); + util.exportExcel(response, list, "璧勬簮鍏宠仈鏁版嵁"); + } + + /** + * 鑾峰彇璧勬簮鍏宠仈璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:link:query')") + @GetMapping(value = "/{linkId}") + public AjaxResult getInfo(@PathVariable("linkId") Long linkId) + { + return success(tbLinkService.selectTbLinkByLinkId(linkId)); + } + + /** + * 鏂板璧勬簮鍏宠仈 + */ + @PreAuthorize("@ss.hasPermi('hezhi:link:add')") + @Log(title = "璧勬簮鍏宠仈", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbLink tbLink) + { + return toAjax(tbLinkService.insertTbLink(tbLink)); + } + + /** + * 淇敼璧勬簮鍏宠仈 + */ + @PreAuthorize("@ss.hasPermi('hezhi:link:edit')") + @Log(title = "璧勬簮鍏宠仈", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbLink tbLink) + { + return toAjax(tbLinkService.updateTbLink(tbLink)); + } + + /** + * 鍒犻櫎璧勬簮鍏宠仈 + */ + @PreAuthorize("@ss.hasPermi('hezhi:link:remove')") + @Log(title = "璧勬簮鍏宠仈", businessType = BusinessType.DELETE) + @DeleteMapping("/{linkIds}") + public AjaxResult remove(@PathVariable Long[] linkIds) + { + return toAjax(tbLinkService.deleteTbLinkByLinkIds(linkIds)); + } + + /** + * 鏌ヨ璇勪环鏈烘瀯涓庤绋嬪叧鑱斿垪琛 + */ + @GetMapping("/listLinkEvaluateAgencyCourse") + public TableDataInfo listLinkEvaluateAgencyCourse(TbLink tbLink) + { + startPage(); + List list = tbLinkService.listLinkEvaluateAgencyCourse(tbLink); + return getDataTable(list); + } + + /** + * 鏌ヨ鐩存挱涓庤佸笀鍏宠仈鍒楄〃 + */ + @GetMapping("/listLinkLiveBroadcastTeacher") + public TableDataInfo listLinkLiveBroadcastTeacher(TbLink tbLink) + { + startPage(); + List list = tbLinkService.listLinkLiveBroadcastTeacher(tbLink); + return getDataTable(list); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbLiveBroadcastController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbLiveBroadcastController.java new file mode 100644 index 0000000000000000000000000000000000000000..9a37382d03ee7d3249125f77fa9eca8684ab6767 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbLiveBroadcastController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbLiveBroadcast; +import com.ruoyi.hezhi.service.ITbLiveBroadcastService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鐩存挱Controller + * + * @author ruoyi + * @date 2024-10-22 + */ +@RestController +@RequestMapping("/hezhi/liveBroadcast") +public class TbLiveBroadcastController extends BaseController +{ + @Autowired + private ITbLiveBroadcastService tbLiveBroadcastService; + + /** + * 鏌ヨ鐩存挱鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:liveBroadcast:list')") + @GetMapping("/list") + public TableDataInfo list(TbLiveBroadcast tbLiveBroadcast) + { + startPage(); + List list = tbLiveBroadcastService.selectTbLiveBroadcastList(tbLiveBroadcast); + return getDataTable(list); + } + + /** + * 瀵煎嚭鐩存挱鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:liveBroadcast:export')") + @Log(title = "鐩存挱", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbLiveBroadcast tbLiveBroadcast) + { + List list = tbLiveBroadcastService.selectTbLiveBroadcastList(tbLiveBroadcast); + ExcelUtil util = new ExcelUtil(TbLiveBroadcast.class); + util.exportExcel(response, list, "鐩存挱鏁版嵁"); + } + + /** + * 鑾峰彇鐩存挱璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:liveBroadcast:query')") + @GetMapping(value = "/{liveBroadcastId}") + public AjaxResult getInfo(@PathVariable("liveBroadcastId") Long liveBroadcastId) + { + return success(tbLiveBroadcastService.selectTbLiveBroadcastByLiveBroadcastId(liveBroadcastId)); + } + + /** + * 鏂板鐩存挱 + */ + @PreAuthorize("@ss.hasPermi('hezhi:liveBroadcast:add')") + @Log(title = "鐩存挱", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbLiveBroadcast tbLiveBroadcast) + { + return toAjax(tbLiveBroadcastService.insertTbLiveBroadcast(tbLiveBroadcast)); + } + + /** + * 淇敼鐩存挱 + */ + @PreAuthorize("@ss.hasPermi('hezhi:liveBroadcast:edit')") + @Log(title = "鐩存挱", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbLiveBroadcast tbLiveBroadcast) + { + return toAjax(tbLiveBroadcastService.updateTbLiveBroadcast(tbLiveBroadcast)); + } + + /** + * 鍒犻櫎鐩存挱 + */ + @PreAuthorize("@ss.hasPermi('hezhi:liveBroadcast:remove')") + @Log(title = "鐩存挱", businessType = BusinessType.DELETE) + @DeleteMapping("/{liveBroadcastIds}") + public AjaxResult remove(@PathVariable Long[] liveBroadcastIds) + { + return toAjax(tbLiveBroadcastService.deleteTbLiveBroadcastByLiveBroadcastIds(liveBroadcastIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMajorClassController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMajorClassController.java new file mode 100644 index 0000000000000000000000000000000000000000..201cec01bf9325f767909c6d7341ad5651c2ca7d --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMajorClassController.java @@ -0,0 +1,107 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbMajorClass; +import com.ruoyi.hezhi.service.ITbMajorClassService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 涓撲笟鍒嗙被Controller + * + * @author ruoyi + * @date 2024-10-16 + */ +@RestController +@RequestMapping("/hezhi/majorClass") +public class TbMajorClassController extends BaseController +{ + @Autowired + private ITbMajorClassService tbMajorClassService; + + /** + * 鏌ヨ涓撲笟鍒嗙被鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:majorClass:list')") + @GetMapping("/list") + public TableDataInfo list(TbMajorClass tbMajorClass) + { + startPage(); + List list = tbMajorClassService.selectTbMajorClassList(tbMajorClass); + return getDataTable(list); + } + + /** + * 瀵煎嚭涓撲笟鍒嗙被鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:majorClass:export')") + @Log(title = "涓撲笟鍒嗙被", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbMajorClass tbMajorClass) + { + List list = tbMajorClassService.selectTbMajorClassList(tbMajorClass); + ExcelUtil util = new ExcelUtil(TbMajorClass.class); + util.exportExcel(response, list, "涓撲笟鍒嗙被鏁版嵁"); + } + + /** + * 鑾峰彇涓撲笟鍒嗙被璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:majorClass:query')") + @GetMapping(value = "/{majorId}") + public AjaxResult getInfo(@PathVariable("majorId") Long majorId) + { + return success(tbMajorClassService.selectTbMajorClassByMajorId(majorId)); + } + + /** + * 鏂板涓撲笟鍒嗙被 + */ + @PreAuthorize("@ss.hasPermi('hezhi:majorClass:add')") + @Log(title = "涓撲笟鍒嗙被", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbMajorClass tbMajorClass) + { + return toAjax(tbMajorClassService.insertTbMajorClass(tbMajorClass)); + } + + /** + * 淇敼涓撲笟鍒嗙被 + */ + @PreAuthorize("@ss.hasPermi('hezhi:majorClass:edit')") + @Log(title = "涓撲笟鍒嗙被", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbMajorClass tbMajorClass) + { + return toAjax(tbMajorClassService.updateTbMajorClass(tbMajorClass)); + } + + /** + * 鍒犻櫎涓撲笟鍒嗙被 + */ + @PreAuthorize("@ss.hasPermi('hezhi:majorClass:remove')") + @Log(title = "涓撲笟鍒嗙被", businessType = BusinessType.DELETE) + @DeleteMapping("/{majorIds}") + public AjaxResult remove(@PathVariable Long[] majorIds) + { + return toAjax(tbMajorClassService.deleteTbMajorClassByMajorIds(majorIds)); + } + + /** + * 鏌ヨ涓撲笟鍒嗙被鍒楄〃-涓嬫媺妗嗘爲鍒楄〃 + */ + @GetMapping("/getAllMajorClassList") + public AjaxResult getAllMajorClassList() + { + return AjaxResult.success(tbMajorClassService.getAllMajorClassList()); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberAddressController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberAddressController.java new file mode 100644 index 0000000000000000000000000000000000000000..dc9b05d6961433542510d51fac9d34c8bfe4233c --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberAddressController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbMemberAddress; +import com.ruoyi.hezhi.service.ITbMemberAddressService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鐢ㄦ埛鍦板潃Controller + * + * @author ruoyi + * @date 2024-10-30 + */ +@RestController +@RequestMapping("/hezhi/memberAddress") +public class TbMemberAddressController extends BaseController +{ + @Autowired + private ITbMemberAddressService tbMemberAddressService; + + /** + * 鏌ヨ鐢ㄦ埛鍦板潃鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberAddress:list')") + @GetMapping("/list") + public TableDataInfo list(TbMemberAddress tbMemberAddress) + { + startPage(); + List list = tbMemberAddressService.selectTbMemberAddressList(tbMemberAddress); + return getDataTable(list); + } + + /** + * 瀵煎嚭鐢ㄦ埛鍦板潃鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberAddress:export')") + @Log(title = "鐢ㄦ埛鍦板潃", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbMemberAddress tbMemberAddress) + { + List list = tbMemberAddressService.selectTbMemberAddressList(tbMemberAddress); + ExcelUtil util = new ExcelUtil(TbMemberAddress.class); + util.exportExcel(response, list, "鐢ㄦ埛鍦板潃鏁版嵁"); + } + + /** + * 鑾峰彇鐢ㄦ埛鍦板潃璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberAddress:query')") + @GetMapping(value = "/{memberAddressId}") + public AjaxResult getInfo(@PathVariable("memberAddressId") Long memberAddressId) + { + return success(tbMemberAddressService.selectTbMemberAddressByMemberAddressId(memberAddressId)); + } + + /** + * 鏂板鐢ㄦ埛鍦板潃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberAddress:add')") + @Log(title = "鐢ㄦ埛鍦板潃", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbMemberAddress tbMemberAddress) + { + return toAjax(tbMemberAddressService.insertTbMemberAddress(tbMemberAddress)); + } + + /** + * 淇敼鐢ㄦ埛鍦板潃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberAddress:edit')") + @Log(title = "鐢ㄦ埛鍦板潃", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbMemberAddress tbMemberAddress) + { + return toAjax(tbMemberAddressService.updateTbMemberAddress(tbMemberAddress)); + } + + /** + * 鍒犻櫎鐢ㄦ埛鍦板潃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberAddress:remove')") + @Log(title = "鐢ㄦ埛鍦板潃", businessType = BusinessType.DELETE) + @DeleteMapping("/{memberAddressIds}") + public AjaxResult remove(@PathVariable Long[] memberAddressIds) + { + return toAjax(tbMemberAddressService.deleteTbMemberAddressByMemberAddressIds(memberAddressIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberDiscussController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberDiscussController.java new file mode 100644 index 0000000000000000000000000000000000000000..4877e4c063cc14aeb57c6084c9c06d1c7828a8b8 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberDiscussController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbMemberDiscuss; +import com.ruoyi.hezhi.service.ITbMemberDiscussService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鐢ㄦ埛璁ㄨController + * + * @author ruoyi + * @date 2024-11-19 + */ +@RestController +@RequestMapping("/hezhi/memberDiscuss") +public class TbMemberDiscussController extends BaseController +{ + @Autowired + private ITbMemberDiscussService tbMemberDiscussService; + + /** + * 鏌ヨ鐢ㄦ埛璁ㄨ鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberDiscuss:list')") + @GetMapping("/list") + public TableDataInfo list(TbMemberDiscuss tbMemberDiscuss) + { + startPage(); + List list = tbMemberDiscussService.selectTbMemberDiscussList(tbMemberDiscuss); + return getDataTable(list); + } + + /** + * 瀵煎嚭鐢ㄦ埛璁ㄨ鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberDiscuss:export')") + @Log(title = "鐢ㄦ埛璁ㄨ", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbMemberDiscuss tbMemberDiscuss) + { + List list = tbMemberDiscussService.selectTbMemberDiscussList(tbMemberDiscuss); + ExcelUtil util = new ExcelUtil(TbMemberDiscuss.class); + util.exportExcel(response, list, "鐢ㄦ埛璁ㄨ鏁版嵁"); + } + + /** + * 鑾峰彇鐢ㄦ埛璁ㄨ璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberDiscuss:query')") + @GetMapping(value = "/{memberDiscussId}") + public AjaxResult getInfo(@PathVariable("memberDiscussId") Long memberDiscussId) + { + return success(tbMemberDiscussService.selectTbMemberDiscussByMemberDiscussId(memberDiscussId)); + } + + /** + * 鏂板鐢ㄦ埛璁ㄨ + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberDiscuss:add')") + @Log(title = "鐢ㄦ埛璁ㄨ", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbMemberDiscuss tbMemberDiscuss) + { + return toAjax(tbMemberDiscussService.insertTbMemberDiscuss(tbMemberDiscuss)); + } + + /** + * 淇敼鐢ㄦ埛璁ㄨ + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberDiscuss:edit')") + @Log(title = "鐢ㄦ埛璁ㄨ", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbMemberDiscuss tbMemberDiscuss) + { + return toAjax(tbMemberDiscussService.updateTbMemberDiscuss(tbMemberDiscuss)); + } + + /** + * 鍒犻櫎鐢ㄦ埛璁ㄨ + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberDiscuss:remove')") + @Log(title = "鐢ㄦ埛璁ㄨ", businessType = BusinessType.DELETE) + @DeleteMapping("/{memberDiscussIds}") + public AjaxResult remove(@PathVariable Long[] memberDiscussIds) + { + return toAjax(tbMemberDiscussService.deleteTbMemberDiscussByMemberDiscussIds(memberDiscussIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberExamSimulateAllController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberExamSimulateAllController.java new file mode 100644 index 0000000000000000000000000000000000000000..22270ba5c8a462b8911bc029f75a4130ffdece5f --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberExamSimulateAllController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbMemberExamSimulateAll; +import com.ruoyi.hezhi.service.ITbMemberExamSimulateAllService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛塁ontroller + * + * @author ruoyi + * @date 2024-11-11 + */ +@RestController +@RequestMapping("/hezhi/memberExamSimulateAll") +public class TbMemberExamSimulateAllController extends BaseController +{ + @Autowired + private ITbMemberExamSimulateAllService tbMemberExamSimulateAllService; + + /** + * 鏌ヨ鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛夊垪琛 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberExamSimulateAll:list')") + @GetMapping("/list") + public TableDataInfo list(TbMemberExamSimulateAll tbMemberExamSimulateAll) + { + startPage(); + List list = tbMemberExamSimulateAllService.selectTbMemberExamSimulateAllList(tbMemberExamSimulateAll); + return getDataTable(list); + } + + /** + * 瀵煎嚭鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛夊垪琛 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberExamSimulateAll:export')") + @Log(title = "鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbMemberExamSimulateAll tbMemberExamSimulateAll) + { + List list = tbMemberExamSimulateAllService.selectTbMemberExamSimulateAllList(tbMemberExamSimulateAll); + ExcelUtil util = new ExcelUtil(TbMemberExamSimulateAll.class); + util.exportExcel(response, list, "鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛夋暟鎹"); + } + + /** + * 鑾峰彇鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛夎缁嗕俊鎭 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberExamSimulateAll:query')") + @GetMapping(value = "/{memberExamSimulateAllId}") + public AjaxResult getInfo(@PathVariable("memberExamSimulateAllId") Long memberExamSimulateAllId) + { + return success(tbMemberExamSimulateAllService.selectTbMemberExamSimulateAllByMemberExamSimulateAllId(memberExamSimulateAllId)); + } + + /** + * 鏂板鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberExamSimulateAll:add')") + @Log(title = "鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbMemberExamSimulateAll tbMemberExamSimulateAll) + { + return toAjax(tbMemberExamSimulateAllService.insertTbMemberExamSimulateAll(tbMemberExamSimulateAll)); + } + + /** + * 淇敼鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberExamSimulateAll:edit')") + @Log(title = "鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbMemberExamSimulateAll tbMemberExamSimulateAll) + { + return toAjax(tbMemberExamSimulateAllService.updateTbMemberExamSimulateAll(tbMemberExamSimulateAll)); + } + + /** + * 鍒犻櫎鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberExamSimulateAll:remove')") + @Log(title = "鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛", businessType = BusinessType.DELETE) + @DeleteMapping("/{memberExamSimulateAllIds}") + public AjaxResult remove(@PathVariable Long[] memberExamSimulateAllIds) + { + return toAjax(tbMemberExamSimulateAllService.deleteTbMemberExamSimulateAllByMemberExamSimulateAllIds(memberExamSimulateAllIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberJoinController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberJoinController.java new file mode 100644 index 0000000000000000000000000000000000000000..45edf6e578374cfb4d04e5b275080b68f7b5824e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberJoinController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbMemberJoin; +import com.ruoyi.hezhi.service.ITbMemberJoinService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鐢ㄦ埛鍙備笌Controller + * + * @author ruoyi + * @date 2024-11-15 + */ +@RestController +@RequestMapping("/hezhi/memberJoin") +public class TbMemberJoinController extends BaseController +{ + @Autowired + private ITbMemberJoinService tbMemberJoinService; + + /** + * 鏌ヨ鐢ㄦ埛鍙備笌鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberJoin:list')") + @GetMapping("/list") + public TableDataInfo list(TbMemberJoin tbMemberJoin) + { + startPage(); + List list = tbMemberJoinService.selectTbMemberJoinList(tbMemberJoin); + return getDataTable(list); + } + + /** + * 瀵煎嚭鐢ㄦ埛鍙備笌鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberJoin:export')") + @Log(title = "鐢ㄦ埛鍙備笌", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbMemberJoin tbMemberJoin) + { + List list = tbMemberJoinService.selectTbMemberJoinList(tbMemberJoin); + ExcelUtil util = new ExcelUtil(TbMemberJoin.class); + util.exportExcel(response, list, "鐢ㄦ埛鍙備笌鏁版嵁"); + } + + /** + * 鑾峰彇鐢ㄦ埛鍙備笌璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberJoin:query')") + @GetMapping(value = "/{memberJoinId}") + public AjaxResult getInfo(@PathVariable("memberJoinId") Long memberJoinId) + { + return success(tbMemberJoinService.selectTbMemberJoinByMemberJoinId(memberJoinId)); + } + + /** + * 鏂板鐢ㄦ埛鍙備笌 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberJoin:add')") + @Log(title = "鐢ㄦ埛鍙備笌", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbMemberJoin tbMemberJoin) + { + return toAjax(tbMemberJoinService.insertTbMemberJoin(tbMemberJoin)); + } + + /** + * 淇敼鐢ㄦ埛鍙備笌 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberJoin:edit')") + @Log(title = "鐢ㄦ埛鍙備笌", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbMemberJoin tbMemberJoin) + { + return toAjax(tbMemberJoinService.updateTbMemberJoin(tbMemberJoin)); + } + + /** + * 鍒犻櫎鐢ㄦ埛鍙備笌 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberJoin:remove')") + @Log(title = "鐢ㄦ埛鍙備笌", businessType = BusinessType.DELETE) + @DeleteMapping("/{memberJoinIds}") + public AjaxResult remove(@PathVariable Long[] memberJoinIds) + { + return toAjax(tbMemberJoinService.deleteTbMemberJoinByMemberJoinIds(memberJoinIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberMajorController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberMajorController.java new file mode 100644 index 0000000000000000000000000000000000000000..d5b8bf4eed3b78cfa4c72781c00e405c05635a6b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberMajorController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbMemberMajor; +import com.ruoyi.hezhi.service.ITbMemberMajorService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鐢ㄦ埛棰樺簱涓撲笟Controller + * + * @author ruoyi + * @date 2024-11-29 + */ +@RestController +@RequestMapping("/hezhi/memberMajor") +public class TbMemberMajorController extends BaseController +{ + @Autowired + private ITbMemberMajorService tbMemberMajorService; + + /** + * 鏌ヨ鐢ㄦ埛棰樺簱涓撲笟鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberMajor:list')") + @GetMapping("/list") + public TableDataInfo list(TbMemberMajor tbMemberMajor) + { + startPage(); + List list = tbMemberMajorService.selectTbMemberMajorList(tbMemberMajor); + return getDataTable(list); + } + + /** + * 瀵煎嚭鐢ㄦ埛棰樺簱涓撲笟鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberMajor:export')") + @Log(title = "鐢ㄦ埛棰樺簱涓撲笟", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbMemberMajor tbMemberMajor) + { + List list = tbMemberMajorService.selectTbMemberMajorList(tbMemberMajor); + ExcelUtil util = new ExcelUtil(TbMemberMajor.class); + util.exportExcel(response, list, "鐢ㄦ埛棰樺簱涓撲笟鏁版嵁"); + } + + /** + * 鑾峰彇鐢ㄦ埛棰樺簱涓撲笟璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberMajor:query')") + @GetMapping(value = "/{memberMajorId}") + public AjaxResult getInfo(@PathVariable("memberMajorId") Long memberMajorId) + { + return success(tbMemberMajorService.selectTbMemberMajorByMemberMajorId(memberMajorId)); + } + + /** + * 鏂板鐢ㄦ埛棰樺簱涓撲笟 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberMajor:add')") + @Log(title = "鐢ㄦ埛棰樺簱涓撲笟", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbMemberMajor tbMemberMajor) + { + return toAjax(tbMemberMajorService.insertTbMemberMajor(tbMemberMajor)); + } + + /** + * 淇敼鐢ㄦ埛棰樺簱涓撲笟 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberMajor:edit')") + @Log(title = "鐢ㄦ埛棰樺簱涓撲笟", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbMemberMajor tbMemberMajor) + { + return toAjax(tbMemberMajorService.updateTbMemberMajor(tbMemberMajor)); + } + + /** + * 鍒犻櫎鐢ㄦ埛棰樺簱涓撲笟 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberMajor:remove')") + @Log(title = "鐢ㄦ埛棰樺簱涓撲笟", businessType = BusinessType.DELETE) + @DeleteMapping("/{memberMajorIds}") + public AjaxResult remove(@PathVariable Long[] memberMajorIds) + { + return toAjax(tbMemberMajorService.deleteTbMemberMajorByMemberMajorIds(memberMajorIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberOrderController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberOrderController.java new file mode 100644 index 0000000000000000000000000000000000000000..e10688ed493d5cae376b59ba99eb975a9ad3280b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberOrderController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbMemberOrder; +import com.ruoyi.hezhi.service.ITbMemberOrderService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 浼氬憳璁㈠崟淇℃伅Controller + * + * @author ruoyi + * @date 2024-11-18 + */ +@RestController +@RequestMapping("/hezhi/memberOrder") +public class TbMemberOrderController extends BaseController +{ + @Autowired + private ITbMemberOrderService tbMemberOrderService; + + /** + * 鏌ヨ浼氬憳璁㈠崟淇℃伅鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberOrder:list')") + @GetMapping("/list") + public TableDataInfo list(TbMemberOrder tbMemberOrder) + { + startPage(); + List list = tbMemberOrderService.selectTbMemberOrderList(tbMemberOrder); + return getDataTable(list); + } + + /** + * 瀵煎嚭浼氬憳璁㈠崟淇℃伅鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberOrder:export')") + @Log(title = "浼氬憳璁㈠崟淇℃伅", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbMemberOrder tbMemberOrder) + { + List list = tbMemberOrderService.selectTbMemberOrderList(tbMemberOrder); + ExcelUtil util = new ExcelUtil(TbMemberOrder.class); + util.exportExcel(response, list, "浼氬憳璁㈠崟淇℃伅鏁版嵁"); + } + + /** + * 鑾峰彇浼氬憳璁㈠崟淇℃伅璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberOrder:query')") + @GetMapping(value = "/{orderId}") + public AjaxResult getInfo(@PathVariable("orderId") Long orderId) + { + return success(tbMemberOrderService.selectTbMemberOrderByOrderId(orderId)); + } + + /** + * 鏂板浼氬憳璁㈠崟淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberOrder:add')") + @Log(title = "浼氬憳璁㈠崟淇℃伅", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbMemberOrder tbMemberOrder) + { + return toAjax(tbMemberOrderService.insertTbMemberOrder(tbMemberOrder)); + } + + /** + * 淇敼浼氬憳璁㈠崟淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberOrder:edit')") + @Log(title = "浼氬憳璁㈠崟淇℃伅", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbMemberOrder tbMemberOrder) + { + return toAjax(tbMemberOrderService.updateTbMemberOrder(tbMemberOrder)); + } + + /** + * 鍒犻櫎浼氬憳璁㈠崟淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberOrder:remove')") + @Log(title = "浼氬憳璁㈠崟淇℃伅", businessType = BusinessType.DELETE) + @DeleteMapping("/{orderIds}") + public AjaxResult remove(@PathVariable Long[] orderIds) + { + return toAjax(tbMemberOrderService.deleteTbMemberOrderByOrderIds(orderIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberScoreController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberScoreController.java new file mode 100644 index 0000000000000000000000000000000000000000..437ea580fda13049ceaac76ce98d1aeb15e7c4da --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberScoreController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbMemberScore; +import com.ruoyi.hezhi.service.ITbMemberScoreService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鐢ㄦ埛绉垎璇︽儏Controller + * + * @author ruoyi + * @date 2024-10-31 + */ +@RestController +@RequestMapping("/hezhi/memberScore") +public class TbMemberScoreController extends BaseController +{ + @Autowired + private ITbMemberScoreService tbMemberScoreService; + + /** + * 鏌ヨ鐢ㄦ埛绉垎璇︽儏鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberScore:list')") + @GetMapping("/list") + public TableDataInfo list(TbMemberScore tbMemberScore) + { + startPage(); + List list = tbMemberScoreService.selectTbMemberScoreList(tbMemberScore); + return getDataTable(list); + } + + /** + * 瀵煎嚭鐢ㄦ埛绉垎璇︽儏鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberScore:export')") + @Log(title = "鐢ㄦ埛绉垎璇︽儏", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbMemberScore tbMemberScore) + { + List list = tbMemberScoreService.selectTbMemberScoreList(tbMemberScore); + ExcelUtil util = new ExcelUtil(TbMemberScore.class); + util.exportExcel(response, list, "鐢ㄦ埛绉垎璇︽儏鏁版嵁"); + } + + /** + * 鑾峰彇鐢ㄦ埛绉垎璇︽儏璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberScore:query')") + @GetMapping(value = "/{memberScoreId}") + public AjaxResult getInfo(@PathVariable("memberScoreId") Long memberScoreId) + { + return success(tbMemberScoreService.selectTbMemberScoreByMemberScoreId(memberScoreId)); + } + + /** + * 鏂板鐢ㄦ埛绉垎璇︽儏 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberScore:add')") + @Log(title = "鐢ㄦ埛绉垎璇︽儏", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbMemberScore tbMemberScore) + { + return toAjax(tbMemberScoreService.insertTbMemberScore(tbMemberScore)); + } + + /** + * 淇敼鐢ㄦ埛绉垎璇︽儏 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberScore:edit')") + @Log(title = "鐢ㄦ埛绉垎璇︽儏", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbMemberScore tbMemberScore) + { + return toAjax(tbMemberScoreService.updateTbMemberScore(tbMemberScore)); + } + + /** + * 鍒犻櫎鐢ㄦ埛绉垎璇︽儏 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberScore:remove')") + @Log(title = "鐢ㄦ埛绉垎璇︽儏", businessType = BusinessType.DELETE) + @DeleteMapping("/{memberScoreIds}") + public AjaxResult remove(@PathVariable Long[] memberScoreIds) + { + return toAjax(tbMemberScoreService.deleteTbMemberScoreByMemberScoreIds(memberScoreIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberSignController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberSignController.java new file mode 100644 index 0000000000000000000000000000000000000000..068d84308236ed634b6b14ad22caffe2dec604bb --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberSignController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbMemberSign; +import com.ruoyi.hezhi.service.ITbMemberSignService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鐢ㄦ埛绛惧埌Controller + * + * @author ruoyi + * @date 2024-10-31 + */ +@RestController +@RequestMapping("/hezhi/memberSign") +public class TbMemberSignController extends BaseController +{ + @Autowired + private ITbMemberSignService tbMemberSignService; + + /** + * 鏌ヨ鐢ㄦ埛绛惧埌鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberSign:list')") + @GetMapping("/list") + public TableDataInfo list(TbMemberSign tbMemberSign) + { + startPage(); + List list = tbMemberSignService.selectTbMemberSignList(tbMemberSign); + return getDataTable(list); + } + + /** + * 瀵煎嚭鐢ㄦ埛绛惧埌鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberSign:export')") + @Log(title = "鐢ㄦ埛绛惧埌", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbMemberSign tbMemberSign) + { + List list = tbMemberSignService.selectTbMemberSignList(tbMemberSign); + ExcelUtil util = new ExcelUtil(TbMemberSign.class); + util.exportExcel(response, list, "鐢ㄦ埛绛惧埌鏁版嵁"); + } + + /** + * 鑾峰彇鐢ㄦ埛绛惧埌璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberSign:query')") + @GetMapping(value = "/{memberSignId}") + public AjaxResult getInfo(@PathVariable("memberSignId") Long memberSignId) + { + return success(tbMemberSignService.selectTbMemberSignByMemberSignId(memberSignId)); + } + + /** + * 鏂板鐢ㄦ埛绛惧埌 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberSign:add')") + @Log(title = "鐢ㄦ埛绛惧埌", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbMemberSign tbMemberSign) + { + return toAjax(tbMemberSignService.insertTbMemberSign(tbMemberSign)); + } + + /** + * 淇敼鐢ㄦ埛绛惧埌 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberSign:edit')") + @Log(title = "鐢ㄦ埛绛惧埌", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbMemberSign tbMemberSign) + { + return toAjax(tbMemberSignService.updateTbMemberSign(tbMemberSign)); + } + + /** + * 鍒犻櫎鐢ㄦ埛绛惧埌 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberSign:remove')") + @Log(title = "鐢ㄦ埛绛惧埌", businessType = BusinessType.DELETE) + @DeleteMapping("/{memberSignIds}") + public AjaxResult remove(@PathVariable Long[] memberSignIds) + { + return toAjax(tbMemberSignService.deleteTbMemberSignByMemberSignIds(memberSignIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberSubjectAllController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberSubjectAllController.java new file mode 100644 index 0000000000000000000000000000000000000000..90d55c404bd3f8672e02c0ef8c5c4c2c808e9b01 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberSubjectAllController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbMemberSubjectAll; +import com.ruoyi.hezhi.service.ITbMemberSubjectAllService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鎴戠殑棰樼洰Controller + * + * @author ruoyi + * @date 2024-11-06 + */ +@RestController +@RequestMapping("/hezhi/memberSubjectAll") +public class TbMemberSubjectAllController extends BaseController +{ + @Autowired + private ITbMemberSubjectAllService tbMemberSubjectAllService; + + /** + * 鏌ヨ鎴戠殑棰樼洰鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberSubjectAll:list')") + @GetMapping("/list") + public TableDataInfo list(TbMemberSubjectAll tbMemberSubjectAll) + { + startPage(); + List list = tbMemberSubjectAllService.selectTbMemberSubjectAllList(tbMemberSubjectAll); + return getDataTable(list); + } + + /** + * 瀵煎嚭鎴戠殑棰樼洰鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberSubjectAll:export')") + @Log(title = "鎴戠殑棰樼洰", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbMemberSubjectAll tbMemberSubjectAll) + { + List list = tbMemberSubjectAllService.selectTbMemberSubjectAllList(tbMemberSubjectAll); + ExcelUtil util = new ExcelUtil(TbMemberSubjectAll.class); + util.exportExcel(response, list, "鎴戠殑棰樼洰鏁版嵁"); + } + + /** + * 鑾峰彇鎴戠殑棰樼洰璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberSubjectAll:query')") + @GetMapping(value = "/{memberSubjectAllId}") + public AjaxResult getInfo(@PathVariable("memberSubjectAllId") Long memberSubjectAllId) + { + return success(tbMemberSubjectAllService.selectTbMemberSubjectAllByMemberSubjectAllId(memberSubjectAllId)); + } + + /** + * 鏂板鎴戠殑棰樼洰 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberSubjectAll:add')") + @Log(title = "鎴戠殑棰樼洰", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbMemberSubjectAll tbMemberSubjectAll) + { + return toAjax(tbMemberSubjectAllService.insertTbMemberSubjectAll(tbMemberSubjectAll)); + } + + /** + * 淇敼鎴戠殑棰樼洰 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberSubjectAll:edit')") + @Log(title = "鎴戠殑棰樼洰", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbMemberSubjectAll tbMemberSubjectAll) + { + return toAjax(tbMemberSubjectAllService.updateTbMemberSubjectAll(tbMemberSubjectAll)); + } + + /** + * 鍒犻櫎鎴戠殑棰樼洰 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberSubjectAll:remove')") + @Log(title = "鎴戠殑棰樼洰", businessType = BusinessType.DELETE) + @DeleteMapping("/{memberSubjectAllIds}") + public AjaxResult remove(@PathVariable Long[] memberSubjectAllIds) + { + return toAjax(tbMemberSubjectAllService.deleteTbMemberSubjectAllByMemberSubjectAllIds(memberSubjectAllIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberSubjectCollectController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberSubjectCollectController.java new file mode 100644 index 0000000000000000000000000000000000000000..bb5f7a9977b106bd63e486532bd5a4bf38c936f7 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberSubjectCollectController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbMemberSubjectCollect; +import com.ruoyi.hezhi.service.ITbMemberSubjectCollectService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鎴戠殑鏀惰棌棰樼洰Controller + * + * @author ruoyi + * @date 2024-11-07 + */ +@RestController +@RequestMapping("/hezhi/memberSubjectCollect") +public class TbMemberSubjectCollectController extends BaseController +{ + @Autowired + private ITbMemberSubjectCollectService tbMemberSubjectCollectService; + + /** + * 鏌ヨ鎴戠殑鏀惰棌棰樼洰鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberSubjectCollect:list')") + @GetMapping("/list") + public TableDataInfo list(TbMemberSubjectCollect tbMemberSubjectCollect) + { + startPage(); + List list = tbMemberSubjectCollectService.selectTbMemberSubjectCollectList(tbMemberSubjectCollect); + return getDataTable(list); + } + + /** + * 瀵煎嚭鎴戠殑鏀惰棌棰樼洰鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberSubjectCollect:export')") + @Log(title = "鎴戠殑鏀惰棌棰樼洰", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbMemberSubjectCollect tbMemberSubjectCollect) + { + List list = tbMemberSubjectCollectService.selectTbMemberSubjectCollectList(tbMemberSubjectCollect); + ExcelUtil util = new ExcelUtil(TbMemberSubjectCollect.class); + util.exportExcel(response, list, "鎴戠殑鏀惰棌棰樼洰鏁版嵁"); + } + + /** + * 鑾峰彇鎴戠殑鏀惰棌棰樼洰璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberSubjectCollect:query')") + @GetMapping(value = "/{memberSubjectCollectId}") + public AjaxResult getInfo(@PathVariable("memberSubjectCollectId") Long memberSubjectCollectId) + { + return success(tbMemberSubjectCollectService.selectTbMemberSubjectCollectByMemberSubjectCollectId(memberSubjectCollectId)); + } + + /** + * 鏂板鎴戠殑鏀惰棌棰樼洰 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberSubjectCollect:add')") + @Log(title = "鎴戠殑鏀惰棌棰樼洰", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbMemberSubjectCollect tbMemberSubjectCollect) + { + return toAjax(tbMemberSubjectCollectService.insertTbMemberSubjectCollect(tbMemberSubjectCollect)); + } + + /** + * 淇敼鎴戠殑鏀惰棌棰樼洰 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberSubjectCollect:edit')") + @Log(title = "鎴戠殑鏀惰棌棰樼洰", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbMemberSubjectCollect tbMemberSubjectCollect) + { + return toAjax(tbMemberSubjectCollectService.updateTbMemberSubjectCollect(tbMemberSubjectCollect)); + } + + /** + * 鍒犻櫎鎴戠殑鏀惰棌棰樼洰 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberSubjectCollect:remove')") + @Log(title = "鎴戠殑鏀惰棌棰樼洰", businessType = BusinessType.DELETE) + @DeleteMapping("/{memberSubjectCollectIds}") + public AjaxResult remove(@PathVariable Long[] memberSubjectCollectIds) + { + return toAjax(tbMemberSubjectCollectService.deleteTbMemberSubjectCollectByMemberSubjectCollectIds(memberSubjectCollectIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberSubjectWrongController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberSubjectWrongController.java new file mode 100644 index 0000000000000000000000000000000000000000..9692a096a52a8a47faa2fe9796834311a6ff5c03 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbMemberSubjectWrongController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbMemberSubjectWrong; +import com.ruoyi.hezhi.service.ITbMemberSubjectWrongService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鎴戠殑閿欓Controller + * + * @author ruoyi + * @date 2024-11-07 + */ +@RestController +@RequestMapping("/hezhi/memberSubjectWrong") +public class TbMemberSubjectWrongController extends BaseController +{ + @Autowired + private ITbMemberSubjectWrongService tbMemberSubjectWrongService; + + /** + * 鏌ヨ鎴戠殑閿欓鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberSubjectWrong:list')") + @GetMapping("/list") + public TableDataInfo list(TbMemberSubjectWrong tbMemberSubjectWrong) + { + startPage(); + List list = tbMemberSubjectWrongService.selectTbMemberSubjectWrongList(tbMemberSubjectWrong); + return getDataTable(list); + } + + /** + * 瀵煎嚭鎴戠殑閿欓鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberSubjectWrong:export')") + @Log(title = "鎴戠殑閿欓", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbMemberSubjectWrong tbMemberSubjectWrong) + { + List list = tbMemberSubjectWrongService.selectTbMemberSubjectWrongList(tbMemberSubjectWrong); + ExcelUtil util = new ExcelUtil(TbMemberSubjectWrong.class); + util.exportExcel(response, list, "鎴戠殑閿欓鏁版嵁"); + } + + /** + * 鑾峰彇鎴戠殑閿欓璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberSubjectWrong:query')") + @GetMapping(value = "/{memberSubjectWrongId}") + public AjaxResult getInfo(@PathVariable("memberSubjectWrongId") Long memberSubjectWrongId) + { + return success(tbMemberSubjectWrongService.selectTbMemberSubjectWrongByMemberSubjectWrongId(memberSubjectWrongId)); + } + + /** + * 鏂板鎴戠殑閿欓 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberSubjectWrong:add')") + @Log(title = "鎴戠殑閿欓", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbMemberSubjectWrong tbMemberSubjectWrong) + { + return toAjax(tbMemberSubjectWrongService.insertTbMemberSubjectWrong(tbMemberSubjectWrong)); + } + + /** + * 淇敼鎴戠殑閿欓 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberSubjectWrong:edit')") + @Log(title = "鎴戠殑閿欓", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbMemberSubjectWrong tbMemberSubjectWrong) + { + return toAjax(tbMemberSubjectWrongService.updateTbMemberSubjectWrong(tbMemberSubjectWrong)); + } + + /** + * 鍒犻櫎鎴戠殑閿欓 + */ + @PreAuthorize("@ss.hasPermi('hezhi:memberSubjectWrong:remove')") + @Log(title = "鎴戠殑閿欓", businessType = BusinessType.DELETE) + @DeleteMapping("/{memberSubjectWrongIds}") + public AjaxResult remove(@PathVariable Long[] memberSubjectWrongIds) + { + return toAjax(tbMemberSubjectWrongService.deleteTbMemberSubjectWrongByMemberSubjectWrongIds(memberSubjectWrongIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbNewsController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbNewsController.java new file mode 100644 index 0000000000000000000000000000000000000000..d65a533818fed3f5f6bb841cb2c9c544d03c810e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbNewsController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbNews; +import com.ruoyi.hezhi.service.ITbNewsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鏂伴椈鍜ㄨController + * + * @author ruoyi + * @date 2024-09-14 + */ +@RestController +@RequestMapping("/hezhi/news") +public class TbNewsController extends BaseController +{ + @Autowired + private ITbNewsService tbNewsService; + + /** + * 鏌ヨ鏂伴椈鍜ㄨ鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:news:list')") + @GetMapping("/list") + public TableDataInfo list(TbNews tbNews) + { + startPage(); + List list = tbNewsService.selectTbNewsList(tbNews); + return getDataTable(list); + } + + /** + * 瀵煎嚭鏂伴椈鍜ㄨ鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:news:export')") + @Log(title = "鏂伴椈鍜ㄨ", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbNews tbNews) + { + List list = tbNewsService.selectTbNewsList(tbNews); + ExcelUtil util = new ExcelUtil(TbNews.class); + util.exportExcel(response, list, "鏂伴椈鍜ㄨ鏁版嵁"); + } + + /** + * 鑾峰彇鏂伴椈鍜ㄨ璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:news:query')") + @GetMapping(value = "/{newsId}") + public AjaxResult getInfo(@PathVariable("newsId") Long newsId) + { + return success(tbNewsService.selectTbNewsByNewsId(newsId)); + } + + /** + * 鏂板鏂伴椈鍜ㄨ + */ + @PreAuthorize("@ss.hasPermi('hezhi:news:add')") + @Log(title = "鏂伴椈鍜ㄨ", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbNews tbNews) + { + return toAjax(tbNewsService.insertTbNews(tbNews)); + } + + /** + * 淇敼鏂伴椈鍜ㄨ + */ + @PreAuthorize("@ss.hasPermi('hezhi:news:edit')") + @Log(title = "鏂伴椈鍜ㄨ", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbNews tbNews) + { + return toAjax(tbNewsService.updateTbNews(tbNews)); + } + + /** + * 鍒犻櫎鏂伴椈鍜ㄨ + */ + @PreAuthorize("@ss.hasPermi('hezhi:news:remove')") + @Log(title = "鏂伴椈鍜ㄨ", businessType = BusinessType.DELETE) + @DeleteMapping("/{newsIds}") + public AjaxResult remove(@PathVariable Long[] newsIds) + { + return toAjax(tbNewsService.deleteTbNewsByNewsIds(newsIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbNoticeController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbNoticeController.java new file mode 100644 index 0000000000000000000000000000000000000000..52bd9a66978c875b3fca9160ec31a5ad84d4f41a --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbNoticeController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbNotice; +import com.ruoyi.hezhi.service.ITbNoticeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 閫氱煡鍏憡Controller + * + * @author ruoyi + * @date 2024-09-14 + */ +@RestController +@RequestMapping("/hezhi/notice") +public class TbNoticeController extends BaseController +{ + @Autowired + private ITbNoticeService tbNoticeService; + + /** + * 鏌ヨ閫氱煡鍏憡鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:notice:list')") + @GetMapping("/list") + public TableDataInfo list(TbNotice tbNotice) + { + startPage(); + List list = tbNoticeService.selectTbNoticeList(tbNotice); + return getDataTable(list); + } + + /** + * 瀵煎嚭閫氱煡鍏憡鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:notice:export')") + @Log(title = "閫氱煡鍏憡", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbNotice tbNotice) + { + List list = tbNoticeService.selectTbNoticeList(tbNotice); + ExcelUtil util = new ExcelUtil(TbNotice.class); + util.exportExcel(response, list, "閫氱煡鍏憡鏁版嵁"); + } + + /** + * 鑾峰彇閫氱煡鍏憡璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:notice:query')") + @GetMapping(value = "/{noticeId}") + public AjaxResult getInfo(@PathVariable("noticeId") Long noticeId) + { + return success(tbNoticeService.selectTbNoticeByNoticeId(noticeId)); + } + + /** + * 鏂板閫氱煡鍏憡 + */ + @PreAuthorize("@ss.hasPermi('hezhi:notice:add')") + @Log(title = "閫氱煡鍏憡", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbNotice tbNotice) + { + return toAjax(tbNoticeService.insertTbNotice(tbNotice)); + } + + /** + * 淇敼閫氱煡鍏憡 + */ + @PreAuthorize("@ss.hasPermi('hezhi:notice:edit')") + @Log(title = "閫氱煡鍏憡", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbNotice tbNotice) + { + return toAjax(tbNoticeService.updateTbNotice(tbNotice)); + } + + /** + * 鍒犻櫎閫氱煡鍏憡 + */ + @PreAuthorize("@ss.hasPermi('hezhi:notice:remove')") + @Log(title = "閫氱煡鍏憡", businessType = BusinessType.DELETE) + @DeleteMapping("/{noticeIds}") + public AjaxResult remove(@PathVariable Long[] noticeIds) + { + return toAjax(tbNoticeService.deleteTbNoticeByNoticeIds(noticeIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbPostAddressController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbPostAddressController.java new file mode 100644 index 0000000000000000000000000000000000000000..2e34e5e0434a45a05ac6f91b4aa8aeca0255b6a8 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbPostAddressController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbPostAddress; +import com.ruoyi.hezhi.service.ITbPostAddressService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 閭瘎鍦板潃Controller + * + * @author ruoyi + * @date 2024-11-20 + */ +@RestController +@RequestMapping("/hezhi/postAddress") +public class TbPostAddressController extends BaseController +{ + @Autowired + private ITbPostAddressService tbPostAddressService; + + /** + * 鏌ヨ閭瘎鍦板潃鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:postAddress:list')") + @GetMapping("/list") + public TableDataInfo list(TbPostAddress tbPostAddress) + { + startPage(); + List list = tbPostAddressService.selectTbPostAddressList(tbPostAddress); + return getDataTable(list); + } + + /** + * 瀵煎嚭閭瘎鍦板潃鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:postAddress:export')") + @Log(title = "閭瘎鍦板潃", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbPostAddress tbPostAddress) + { + List list = tbPostAddressService.selectTbPostAddressList(tbPostAddress); + ExcelUtil util = new ExcelUtil(TbPostAddress.class); + util.exportExcel(response, list, "閭瘎鍦板潃鏁版嵁"); + } + + /** + * 鑾峰彇閭瘎鍦板潃璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:postAddress:query')") + @GetMapping(value = "/{postAddressId}") + public AjaxResult getInfo(@PathVariable("postAddressId") Long postAddressId) + { + return success(tbPostAddressService.selectTbPostAddressByPostAddressId(postAddressId)); + } + + /** + * 鏂板閭瘎鍦板潃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:postAddress:add')") + @Log(title = "閭瘎鍦板潃", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbPostAddress tbPostAddress) + { + return toAjax(tbPostAddressService.insertTbPostAddress(tbPostAddress)); + } + + /** + * 淇敼閭瘎鍦板潃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:postAddress:edit')") + @Log(title = "閭瘎鍦板潃", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbPostAddress tbPostAddress) + { + return toAjax(tbPostAddressService.updateTbPostAddress(tbPostAddress)); + } + + /** + * 鍒犻櫎閭瘎鍦板潃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:postAddress:remove')") + @Log(title = "閭瘎鍦板潃", businessType = BusinessType.DELETE) + @DeleteMapping("/{postAddressIds}") + public AjaxResult remove(@PathVariable Long[] postAddressIds) + { + return toAjax(tbPostAddressService.deleteTbPostAddressByPostAddressIds(postAddressIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbRegionController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbRegionController.java new file mode 100644 index 0000000000000000000000000000000000000000..0e25dbbfa1501115ae9d49bcc37205289fe57ffa --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbRegionController.java @@ -0,0 +1,121 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbRegion; +import com.ruoyi.hezhi.service.ITbRegionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.List; + +/** + * 琛屾斂鍖哄煙Controller + * + * @author ruoyi + * @date 2024-10-21 + */ +@RestController +@RequestMapping("/hezhi/region") +public class TbRegionController extends BaseController +{ + @Autowired + private ITbRegionService tbRegionService; + + /** + * 鏌ヨ琛屾斂鍖哄煙鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:region:list')") + @GetMapping("/list") + public AjaxResult list(TbRegion tbRegion) + { + List list = tbRegionService.selectTbRegionList(tbRegion); + return success(list); + } + + /** + * 瀵煎嚭琛屾斂鍖哄煙鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:region:export')") + @Log(title = "琛屾斂鍖哄煙", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbRegion tbRegion) + { + List list = tbRegionService.selectTbRegionList(tbRegion); + ExcelUtil util = new ExcelUtil(TbRegion.class); + util.exportExcel(response, list, "琛屾斂鍖哄煙鏁版嵁"); + } + + /** + * 鑾峰彇琛屾斂鍖哄煙璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:region:query')") + @GetMapping(value = "/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + return success(tbRegionService.selectTbRegionById(id)); + } + + /** + * 鏂板琛屾斂鍖哄煙 + */ + @PreAuthorize("@ss.hasPermi('hezhi:region:add')") + @Log(title = "琛屾斂鍖哄煙", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbRegion tbRegion) + { + return toAjax(tbRegionService.insertTbRegion(tbRegion)); + } + + /** + * 淇敼琛屾斂鍖哄煙 + */ + @PreAuthorize("@ss.hasPermi('hezhi:region:edit')") + @Log(title = "琛屾斂鍖哄煙", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbRegion tbRegion) + { + return toAjax(tbRegionService.updateTbRegion(tbRegion)); + } + + /** + * 鍒犻櫎琛屾斂鍖哄煙 + */ + @PreAuthorize("@ss.hasPermi('hezhi:region:remove')") + @Log(title = "琛屾斂鍖哄煙", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public AjaxResult remove(@PathVariable Long[] ids) + { + return toAjax(tbRegionService.deleteTbRegionByIds(ids)); + } + + /** + * 鑾峰彇鐪 + * @return + */ + @GetMapping("/getProvince") + public AjaxResult getProvince() { + HashMap map = new HashMap<>(); + List list = tbRegionService.selectRegionProvinceList(); + map.put("data",list); + return AjaxResult.success(map); + } + + /** + * 鏍规嵁ID鑾峰彇甯傛垨鍖猴紙鍘匡級 + * @return + */ + @GetMapping("/getCityOrArea") + public AjaxResult getCityOrArea(Integer id) { + HashMap map = new HashMap<>(); + List list = tbRegionService.selectRegionCityOrAreaList(id); + map.put("data",list); + return AjaxResult.success(map); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbSmsCodeController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbSmsCodeController.java new file mode 100644 index 0000000000000000000000000000000000000000..0a4bd5ef5a56dcaa9e6852a76bf68f62806dd21e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbSmsCodeController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbSmsCode; +import com.ruoyi.hezhi.service.ITbSmsCodeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鐭俊楠岃瘉鐮丆ontroller + * + * @author ruoyi + * @date 2024-11-06 + */ +@RestController +@RequestMapping("/hezhi/smsCode") +public class TbSmsCodeController extends BaseController +{ + @Autowired + private ITbSmsCodeService tbSmsCodeService; + + /** + * 鏌ヨ鐭俊楠岃瘉鐮佸垪琛 + */ + @PreAuthorize("@ss.hasPermi('hezhi:smsCode:list')") + @GetMapping("/list") + public TableDataInfo list(TbSmsCode tbSmsCode) + { + startPage(); + List list = tbSmsCodeService.selectTbSmsCodeList(tbSmsCode); + return getDataTable(list); + } + + /** + * 瀵煎嚭鐭俊楠岃瘉鐮佸垪琛 + */ + @PreAuthorize("@ss.hasPermi('hezhi:smsCode:export')") + @Log(title = "鐭俊楠岃瘉鐮", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbSmsCode tbSmsCode) + { + List list = tbSmsCodeService.selectTbSmsCodeList(tbSmsCode); + ExcelUtil util = new ExcelUtil(TbSmsCode.class); + util.exportExcel(response, list, "鐭俊楠岃瘉鐮佹暟鎹"); + } + + /** + * 鑾峰彇鐭俊楠岃瘉鐮佽缁嗕俊鎭 + */ + @PreAuthorize("@ss.hasPermi('hezhi:smsCode:query')") + @GetMapping(value = "/{smsCodeId}") + public AjaxResult getInfo(@PathVariable("smsCodeId") Long smsCodeId) + { + return success(tbSmsCodeService.selectTbSmsCodeBySmsCodeId(smsCodeId)); + } + + /** + * 鏂板鐭俊楠岃瘉鐮 + */ + @PreAuthorize("@ss.hasPermi('hezhi:smsCode:add')") + @Log(title = "鐭俊楠岃瘉鐮", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbSmsCode tbSmsCode) + { + return toAjax(tbSmsCodeService.insertTbSmsCode(tbSmsCode)); + } + + /** + * 淇敼鐭俊楠岃瘉鐮 + */ + @PreAuthorize("@ss.hasPermi('hezhi:smsCode:edit')") + @Log(title = "鐭俊楠岃瘉鐮", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbSmsCode tbSmsCode) + { + return toAjax(tbSmsCodeService.updateTbSmsCode(tbSmsCode)); + } + + /** + * 鍒犻櫎鐭俊楠岃瘉鐮 + */ + @PreAuthorize("@ss.hasPermi('hezhi:smsCode:remove')") + @Log(title = "鐭俊楠岃瘉鐮", businessType = BusinessType.DELETE) + @DeleteMapping("/{smsCodeIds}") + public AjaxResult remove(@PathVariable Long[] smsCodeIds) + { + return toAjax(tbSmsCodeService.deleteTbSmsCodeBySmsCodeIds(smsCodeIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbStudentController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbStudentController.java new file mode 100644 index 0000000000000000000000000000000000000000..010f807f405422feb05bc4653be4c23559c52853 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbStudentController.java @@ -0,0 +1,126 @@ +package com.ruoyi.hezhi.controller; + +import cn.hutool.core.util.ObjectUtil; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbStudent; +import com.ruoyi.hezhi.domain.dto.ImportStudentDTO; +import com.ruoyi.hezhi.service.ITbStudentService; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.List; + +/** + * 瀛﹀憳Controller + * + * @author ruoyi + * @date 2024-10-21 + */ +@RestController +@RequestMapping("/hezhi/student") +public class TbStudentController extends BaseController +{ + @Autowired + private ITbStudentService tbStudentService; + + /** + * 鏌ヨ瀛﹀憳鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:student:list')") + @GetMapping("/list") + public TableDataInfo list(TbStudent tbStudent) + { + startPage(); + List list = tbStudentService.selectTbStudentList(tbStudent); + return getDataTable(list); + } + + /** + * 瀵煎嚭瀛﹀憳鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:student:export')") + @Log(title = "瀛﹀憳", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbStudent tbStudent) + { + List list = tbStudentService.selectTbStudentList(tbStudent); + ExcelUtil util = new ExcelUtil(TbStudent.class); + util.exportExcel(response, list, "瀛﹀憳鏁版嵁"); + } + + @Log(title = "瀛﹀憳鍒楄〃", businessType = BusinessType.IMPORT) + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file) throws Exception + { + ExcelUtil util = new ExcelUtil(ImportStudentDTO.class); + List userList = util.importExcel(file.getInputStream()); + String message = tbStudentService.importUser(userList); + return AjaxResult.success(message); + } + + @PostMapping("/importTemplate") + public void importTemplate(HttpServletResponse response) + { + List list = new ArrayList<>(); + ExcelUtil util = new ExcelUtil(ImportStudentDTO.class); + util.exportExcel(response, list, "瀛﹀憳鏁版嵁"); + } + + /** + * 鑾峰彇瀛﹀憳璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:student:query')") + @GetMapping(value = "/{studentId}") + public AjaxResult getInfo(@PathVariable("studentId") Long studentId) + { + return success(tbStudentService.selectTbStudentByStudentId(studentId)); + } + + /** + * 鏂板瀛﹀憳 + */ + @PreAuthorize("@ss.hasPermi('hezhi:student:add')") + @Log(title = "瀛﹀憳", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbStudent tbStudent) + { + try{ + return toAjax(tbStudentService.insertTbStudent(tbStudent)); + } catch (ServiceException e) { + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 淇敼瀛﹀憳 + */ + @PreAuthorize("@ss.hasPermi('hezhi:student:edit')") + @Log(title = "瀛﹀憳", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbStudent tbStudent) + { + return toAjax(tbStudentService.updateTbStudent(tbStudent)); + } + + /** + * 鍒犻櫎瀛﹀憳 + */ + @PreAuthorize("@ss.hasPermi('hezhi:student:remove')") + @Log(title = "瀛﹀憳", businessType = BusinessType.DELETE) + @DeleteMapping("/{studentIds}") + public AjaxResult remove(@PathVariable Long[] studentIds) + { + return toAjax(tbStudentService.deleteTbStudentByStudentIds(studentIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbStudyCenterClassController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbStudyCenterClassController.java new file mode 100644 index 0000000000000000000000000000000000000000..73a513cf711de929e0c3a4598cf7e648243d5f1b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbStudyCenterClassController.java @@ -0,0 +1,109 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbStudyCenterClass; +import com.ruoyi.hezhi.service.ITbStudyCenterClassService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 瀛︿範涓績鍒嗙被Controller + * + * @author ruoyi + * @date 2024-10-23 + */ +@RestController +@RequestMapping("/hezhi/studyCenterClass") +public class TbStudyCenterClassController extends BaseController +{ + @Autowired + private ITbStudyCenterClassService tbStudyCenterClassService; + + /** + * 鏌ヨ瀛︿範涓績鍒嗙被鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:studyCenterClass:list')") + @GetMapping("/list") + public TableDataInfo list(TbStudyCenterClass tbStudyCenterClass) + { + startPage(); + List list = tbStudyCenterClassService.selectTbStudyCenterClassList(tbStudyCenterClass); + return getDataTable(list); + } + + /** + * 瀵煎嚭瀛︿範涓績鍒嗙被鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:studyCenterClass:export')") + @Log(title = "瀛︿範涓績鍒嗙被", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbStudyCenterClass tbStudyCenterClass) + { + List list = tbStudyCenterClassService.selectTbStudyCenterClassList(tbStudyCenterClass); + ExcelUtil util = new ExcelUtil(TbStudyCenterClass.class); + util.exportExcel(response, list, "瀛︿範涓績鍒嗙被鏁版嵁"); + } + + /** + * 鑾峰彇瀛︿範涓績鍒嗙被璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:studyCenterClass:query')") + @GetMapping(value = "/{studyCenterClassId}") + public AjaxResult getInfo(@PathVariable("studyCenterClassId") Long studyCenterClassId) + { + return success(tbStudyCenterClassService.selectTbStudyCenterClassByStudyCenterClassId(studyCenterClassId)); + } + + /** + * 鏂板瀛︿範涓績鍒嗙被 + */ + @PreAuthorize("@ss.hasPermi('hezhi:studyCenterClass:add')") + @Log(title = "瀛︿範涓績鍒嗙被", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbStudyCenterClass tbStudyCenterClass) + { + return toAjax(tbStudyCenterClassService.insertTbStudyCenterClass(tbStudyCenterClass)); + } + + /** + * 淇敼瀛︿範涓績鍒嗙被 + */ + @PreAuthorize("@ss.hasPermi('hezhi:studyCenterClass:edit')") + @Log(title = "瀛︿範涓績鍒嗙被", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbStudyCenterClass tbStudyCenterClass) + { + return toAjax(tbStudyCenterClassService.updateTbStudyCenterClass(tbStudyCenterClass)); + } + + /** + * 鍒犻櫎瀛︿範涓績鍒嗙被 + */ + @PreAuthorize("@ss.hasPermi('hezhi:studyCenterClass:remove')") + @Log(title = "瀛︿範涓績鍒嗙被", businessType = BusinessType.DELETE) + @DeleteMapping("/{studyCenterClassIds}") + public AjaxResult remove(@PathVariable Long[] studyCenterClassIds) + { + return toAjax(tbStudyCenterClassService.deleteTbStudyCenterClassByStudyCenterClassIds(studyCenterClassIds)); + } + + /** + * 鎵鏈夊涔犱腑蹇冨垎绫诲垪琛 + * @return + */ + @GetMapping("/getAllStudyCenterClassList") + public AjaxResult getAllStudyCenterClassList() { + TbStudyCenterClass studyCenterClass = new TbStudyCenterClass(); + studyCenterClass.setDelFlag(0); + return AjaxResult.success(tbStudyCenterClassService.selectTbStudyCenterClassList(studyCenterClass)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbStudyCenterController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbStudyCenterController.java new file mode 100644 index 0000000000000000000000000000000000000000..d0d6d2811e96dfb660074ae646683311b4a85383 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbStudyCenterController.java @@ -0,0 +1,109 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbStudyCenter; +import com.ruoyi.hezhi.domain.vo.StudyCenterVO; +import com.ruoyi.hezhi.service.ITbStudyCenterService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 瀛︿範涓績Controller + * + * @author ruoyi + * @date 2024-10-21 + */ +@RestController +@RequestMapping("/hezhi/studyCenter") +public class TbStudyCenterController extends BaseController +{ + @Autowired + private ITbStudyCenterService tbStudyCenterService; + + /** + * 鏌ヨ瀛︿範涓績鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:studyCenter:list')") + @GetMapping("/list") + public TableDataInfo list(TbStudyCenter tbStudyCenter) + { + startPage(); + List list = tbStudyCenterService.selectTbStudyCenterList(tbStudyCenter); + return getDataTable(list); + } + + /** + * 瀵煎嚭瀛︿範涓績鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:studyCenter:export')") + @Log(title = "瀛︿範涓績", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbStudyCenter tbStudyCenter) + { + List list = tbStudyCenterService.selectTbStudyCenterList(tbStudyCenter); + ExcelUtil util = new ExcelUtil(TbStudyCenter.class); + util.exportExcel(response, list, "瀛︿範涓績鏁版嵁"); + } + + /** + * 鑾峰彇瀛︿範涓績璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:studyCenter:query')") + @GetMapping(value = "/{studyCenterId}") + public AjaxResult getInfo(@PathVariable("studyCenterId") Long studyCenterId) + { + return success(tbStudyCenterService.selectTbStudyCenterByStudyCenterId(studyCenterId)); + } + + /** + * 鏂板瀛︿範涓績 + */ + @PreAuthorize("@ss.hasPermi('hezhi:studyCenter:add')") + @Log(title = "瀛︿範涓績", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbStudyCenter tbStudyCenter) + { + return toAjax(tbStudyCenterService.insertTbStudyCenter(tbStudyCenter)); + } + + /** + * 淇敼瀛︿範涓績 + */ + @PreAuthorize("@ss.hasPermi('hezhi:studyCenter:edit')") + @Log(title = "瀛︿範涓績", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbStudyCenter tbStudyCenter) + { + return toAjax(tbStudyCenterService.updateTbStudyCenter(tbStudyCenter)); + } + + /** + * 鍒犻櫎瀛︿範涓績 + */ + @PreAuthorize("@ss.hasPermi('hezhi:studyCenter:remove')") + @Log(title = "瀛︿範涓績", businessType = BusinessType.DELETE) + @DeleteMapping("/{studyCenterIds}") + public AjaxResult remove(@PathVariable Long[] studyCenterIds) + { + return toAjax(tbStudyCenterService.deleteTbStudyCenterByStudyCenterIds(studyCenterIds)); + } + + /** + * 鑾峰彇瀛︿範涓績鍒楄〃 + * @return 缁撴灉 + */ + @GetMapping("/getAllStudyCenterList") + public AjaxResult getAllStudyCenterList(){ + List studyCenterVOList = tbStudyCenterService.getAllStudyCenterList(); + return AjaxResult.success(studyCenterVOList); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbStudyCenterFileController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbStudyCenterFileController.java new file mode 100644 index 0000000000000000000000000000000000000000..b4363dac13cfbbbe73337c28ecaf98155b5708be --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbStudyCenterFileController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbStudyCenterFile; +import com.ruoyi.hezhi.service.ITbStudyCenterFileService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 瀛︿範涓績鏂囦欢Controller + * + * @author ruoyi + * @date 2024-11-18 + */ +@RestController +@RequestMapping("/hezhi/studyCenterFile") +public class TbStudyCenterFileController extends BaseController +{ + @Autowired + private ITbStudyCenterFileService tbStudyCenterFileService; + + /** + * 鏌ヨ瀛︿範涓績鏂囦欢鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:studyCenterFile:list')") + @GetMapping("/list") + public TableDataInfo list(TbStudyCenterFile tbStudyCenterFile) + { + startPage(); + List list = tbStudyCenterFileService.selectTbStudyCenterFileList(tbStudyCenterFile); + return getDataTable(list); + } + + /** + * 瀵煎嚭瀛︿範涓績鏂囦欢鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:studyCenterFile:export')") + @Log(title = "瀛︿範涓績鏂囦欢", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbStudyCenterFile tbStudyCenterFile) + { + List list = tbStudyCenterFileService.selectTbStudyCenterFileList(tbStudyCenterFile); + ExcelUtil util = new ExcelUtil(TbStudyCenterFile.class); + util.exportExcel(response, list, "瀛︿範涓績鏂囦欢鏁版嵁"); + } + + /** + * 鑾峰彇瀛︿範涓績鏂囦欢璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:studyCenterFile:query')") + @GetMapping(value = "/{studyCenterFileId}") + public AjaxResult getInfo(@PathVariable("studyCenterFileId") Long studyCenterFileId) + { + return success(tbStudyCenterFileService.selectTbStudyCenterFileByStudyCenterFileId(studyCenterFileId)); + } + + /** + * 鏂板瀛︿範涓績鏂囦欢 + */ + @PreAuthorize("@ss.hasPermi('hezhi:studyCenterFile:add')") + @Log(title = "瀛︿範涓績鏂囦欢", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbStudyCenterFile tbStudyCenterFile) + { + return toAjax(tbStudyCenterFileService.insertTbStudyCenterFile(tbStudyCenterFile)); + } + + /** + * 淇敼瀛︿範涓績鏂囦欢 + */ + @PreAuthorize("@ss.hasPermi('hezhi:studyCenterFile:edit')") + @Log(title = "瀛︿範涓績鏂囦欢", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbStudyCenterFile tbStudyCenterFile) + { + return toAjax(tbStudyCenterFileService.updateTbStudyCenterFile(tbStudyCenterFile)); + } + + /** + * 鍒犻櫎瀛︿範涓績鏂囦欢 + */ + @PreAuthorize("@ss.hasPermi('hezhi:studyCenterFile:remove')") + @Log(title = "瀛︿範涓績鏂囦欢", businessType = BusinessType.DELETE) + @DeleteMapping("/{studyCenterFileIds}") + public AjaxResult remove(@PathVariable Long[] studyCenterFileIds) + { + return toAjax(tbStudyCenterFileService.deleteTbStudyCenterFileByStudyCenterFileIds(studyCenterFileIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbSubjectWarehouseClassController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbSubjectWarehouseClassController.java new file mode 100644 index 0000000000000000000000000000000000000000..6b2915799d30664f8b42405a91d04e8e7084bfd9 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbSubjectWarehouseClassController.java @@ -0,0 +1,181 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbSubjectWarehouseClass; +import com.ruoyi.hezhi.service.ITbExamSubjectService; +import com.ruoyi.hezhi.service.ITbExamSubjectSimulateService; +import com.ruoyi.hezhi.service.ITbSubjectWarehouseClassService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 棰樺簱鍒嗙被Controller + * + * @author ruoyi + * @date 2024-11-06 + */ +@RestController +@RequestMapping("/hezhi/subjectWarehouseClass") +public class TbSubjectWarehouseClassController extends BaseController +{ + @Autowired + private ITbSubjectWarehouseClassService tbSubjectWarehouseClassService; + @Autowired + private ITbExamSubjectService tbExamSubjectService; + @Autowired + private ITbExamSubjectSimulateService tbExamSubjectSimulateService; + + /** + * 鏌ヨ棰樺簱鍒嗙被鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:subjectWarehouseClass:list')") + @GetMapping("/list") + public TableDataInfo list(TbSubjectWarehouseClass tbSubjectWarehouseClass) + { + startPage(); + List list = tbSubjectWarehouseClassService.selectTbSubjectWarehouseClassList(tbSubjectWarehouseClass); + return getDataTable(list); + } + + /** + * 瀵煎嚭棰樺簱鍒嗙被鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:subjectWarehouseClass:export')") + @Log(title = "棰樺簱鍒嗙被", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbSubjectWarehouseClass tbSubjectWarehouseClass) + { + List list = tbSubjectWarehouseClassService.selectTbSubjectWarehouseClassList(tbSubjectWarehouseClass); + ExcelUtil util = new ExcelUtil(TbSubjectWarehouseClass.class); + util.exportExcel(response, list, "棰樺簱鍒嗙被鏁版嵁"); + } + + /** + * 鑾峰彇棰樺簱鍒嗙被璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:subjectWarehouseClass:query')") + @GetMapping(value = "/{subjectWarehouseClassId}") + public AjaxResult getInfo(@PathVariable("subjectWarehouseClassId") Long subjectWarehouseClassId) + { + return success(tbSubjectWarehouseClassService.selectTbSubjectWarehouseClassBySubjectWarehouseClassId(subjectWarehouseClassId)); + } + + /** + * 鏂板棰樺簱鍒嗙被 + */ + @PreAuthorize("@ss.hasPermi('hezhi:subjectWarehouseClass:add')") + @Log(title = "棰樺簱鍒嗙被", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbSubjectWarehouseClass tbSubjectWarehouseClass) + { + return toAjax(tbSubjectWarehouseClassService.insertTbSubjectWarehouseClass(tbSubjectWarehouseClass)); + } + + /** + * 淇敼棰樺簱鍒嗙被 + */ + @PreAuthorize("@ss.hasPermi('hezhi:subjectWarehouseClass:edit')") + @Log(title = "棰樺簱鍒嗙被", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbSubjectWarehouseClass tbSubjectWarehouseClass) + { + return toAjax(tbSubjectWarehouseClassService.updateTbSubjectWarehouseClass(tbSubjectWarehouseClass)); + } + + /** + * 鍒犻櫎棰樺簱鍒嗙被 + */ + @PreAuthorize("@ss.hasPermi('hezhi:subjectWarehouseClass:remove')") + @Log(title = "棰樺簱鍒嗙被", businessType = BusinessType.DELETE) + @DeleteMapping("/{subjectWarehouseClassIds}") + public AjaxResult remove(@PathVariable Long[] subjectWarehouseClassIds) + { + return toAjax(tbSubjectWarehouseClassService.deleteTbSubjectWarehouseClassBySubjectWarehouseClassIds(subjectWarehouseClassIds)); + } + + /** + * 鏌ヨ棰樺簱鍒嗙被鍒楄〃 + */ + @GetMapping("/getSubjectWarehouseClassList") + public AjaxResult getSubjectWarehouseClassList(TbSubjectWarehouseClass tbSubjectWarehouseClass) + { + tbSubjectWarehouseClass.setDelFlag(0); + return AjaxResult.success(tbSubjectWarehouseClassService.selectTbSubjectWarehouseClassList(tbSubjectWarehouseClass)); + } + + /** + * 淇敼妯℃嫙鑰冭瘯鐘舵 + */ + @PutMapping("/setSimulationStatus") + public AjaxResult setSimulationStatus(@RequestBody TbSubjectWarehouseClass tbSubjectWarehouseClass) + { + return toAjax(tbSubjectWarehouseClassService.updateTbSubjectWarehouseClass(tbSubjectWarehouseClass)); + } + + /** + * 淇敼妯℃嫙鑰冭瘯璁剧疆 + */ + @Transactional(rollbackFor = Exception.class) + @PreAuthorize("@ss.hasPermi('hezhi:subjectWarehouseClass:edit')") + @Log(title = "淇敼妯℃嫙鑰冭瘯璁剧疆", businessType = BusinessType.UPDATE) + @PostMapping("/updateSimulateExam") + public AjaxResult updateSimulateExam(@RequestBody TbSubjectWarehouseClass tbSubjectWarehouseClass) + { + HashMap map = new HashMap<>(); + map.put("subjectWarehouseClassId", tbSubjectWarehouseClass.getSubjectWarehouseClassId()); + map.put("examType", '1'); + Map examSubjectNum = tbExamSubjectService.getExamSubjectNum(map); + int singleSelectNum = Integer.parseInt(examSubjectNum.get("singleSelectNum").toString()); + int manySelectNum = Integer.parseInt(examSubjectNum.get("manySelectNum").toString()); + int judgeNum = Integer.parseInt(examSubjectNum.get("judgeNum").toString()); + int discussNum = Integer.parseInt(examSubjectNum.get("discussNum").toString()); + + if (tbSubjectWarehouseClass.getSingleSelectNum() > singleSelectNum) { + return AjaxResult.error(tbSubjectWarehouseClass.getName() + "鍗曢夊彧鏈夈" + singleSelectNum + "銆戦锛岃鍏堟坊鍔犺冻澶熼鐩紒锛侊紒"); + } + if (tbSubjectWarehouseClass.getManySelectNum() > manySelectNum) { + return AjaxResult.error(tbSubjectWarehouseClass.getName() + "澶氶夊彧鏈夈" + manySelectNum + "銆戦锛岃鍏堟坊鍔犺冻澶熼鐩紒锛侊紒"); + } + if (tbSubjectWarehouseClass.getJudgeNum() > judgeNum) { + return AjaxResult.error(tbSubjectWarehouseClass.getName() + "鍒ゆ柇鍙湁銆" + judgeNum + "銆戦锛岃鍏堟坊鍔犺冻澶熼鐩紒锛侊紒"); + } + if (tbSubjectWarehouseClass.getDiscussNum() > discussNum) { + return AjaxResult.error(tbSubjectWarehouseClass.getName() + "璁鸿堪鍙湁銆" + discussNum + "銆戦锛岃鍏堟坊鍔犺冻澶熼鐩紒锛侊紒"); + } + + BigDecimal singleSelectScoreTotal = tbSubjectWarehouseClass.getSingleSelectScore().multiply(new BigDecimal(tbSubjectWarehouseClass.getSingleSelectNum())); + BigDecimal manySelectScoreTotal = tbSubjectWarehouseClass.getManySelectScore().multiply(new BigDecimal(tbSubjectWarehouseClass.getManySelectNum())); + BigDecimal judgeScoreTotal = tbSubjectWarehouseClass.getJudgeScore().multiply(new BigDecimal(tbSubjectWarehouseClass.getJudgeNum())); + BigDecimal discussScoreTotal = tbSubjectWarehouseClass.getDiscussScore().multiply(new BigDecimal(tbSubjectWarehouseClass.getDiscussNum())); + BigDecimal totalScore = singleSelectScoreTotal.add(manySelectScoreTotal).add(judgeScoreTotal).add(discussScoreTotal); + tbSubjectWarehouseClass.setTotalScore(totalScore); + + // 閲嶆柊璁剧疆妯℃嫙鑰冭瘯棰 + tbExamSubjectSimulateService.batchInsertTbExamSubjectSimulateBy(tbSubjectWarehouseClass); + + return toAjax(tbSubjectWarehouseClassService.updateTbSubjectWarehouseClass(tbSubjectWarehouseClass)); + } + + /** + * 鑾峰彇妯℃嫙鑰冭瘯鍒楄〃 + * @return 缁撴灉 + */ + @GetMapping("/getAllSubjectWarehouseCalssList") + public AjaxResult getAllSubjectWarehouseCalssList(){ + List allSubjectWarehouseCalssList = tbSubjectWarehouseClassService.getAllSubjectWarehouseCalssList(); + return AjaxResult.success(allSubjectWarehouseCalssList); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbTeacherAuthenticationController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbTeacherAuthenticationController.java new file mode 100644 index 0000000000000000000000000000000000000000..d8c3f0cf7a2adbfb63d9565429aba996aacbc736 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbTeacherAuthenticationController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbTeacherAuthentication; +import com.ruoyi.hezhi.service.ITbTeacherAuthenticationService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鍚嶅笀璁よ瘉Controller + * + * @author ruoyi + * @date 2024-12-13 + */ +@RestController +@RequestMapping("/hezhi/tbTeacherAuthentication") +public class TbTeacherAuthenticationController extends BaseController +{ + @Autowired + private ITbTeacherAuthenticationService tbTeacherAuthenticationService; + + /** + * 鏌ヨ鍚嶅笀璁よ瘉鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:tbTeacherAuthentication:list')") + @GetMapping("/list") + public TableDataInfo list(TbTeacherAuthentication tbTeacherAuthentication) + { + startPage(); + List list = tbTeacherAuthenticationService.selectTbTeacherAuthenticationList(tbTeacherAuthentication); + return getDataTable(list); + } + + /** + * 瀵煎嚭鍚嶅笀璁よ瘉鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:tbTeacherAuthentication:export')") + @Log(title = "鍚嶅笀璁よ瘉", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbTeacherAuthentication tbTeacherAuthentication) + { + List list = tbTeacherAuthenticationService.selectTbTeacherAuthenticationList(tbTeacherAuthentication); + ExcelUtil util = new ExcelUtil(TbTeacherAuthentication.class); + util.exportExcel(response, list, "鍚嶅笀璁よ瘉鏁版嵁"); + } + + /** + * 鑾峰彇鍚嶅笀璁よ瘉璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:tbTeacherAuthentication:query')") + @GetMapping(value = "/{teacherAuthenticationId}") + public AjaxResult getInfo(@PathVariable("teacherAuthenticationId") Long teacherAuthenticationId) + { + return success(tbTeacherAuthenticationService.selectTbTeacherAuthenticationByTeacherAuthenticationId(teacherAuthenticationId)); + } + + /** + * 鏂板鍚嶅笀璁よ瘉 + */ + @PreAuthorize("@ss.hasPermi('hezhi:tbTeacherAuthentication:add')") + @Log(title = "鍚嶅笀璁よ瘉", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbTeacherAuthentication tbTeacherAuthentication) + { + return toAjax(tbTeacherAuthenticationService.insertTbTeacherAuthentication(tbTeacherAuthentication)); + } + + /** + * 淇敼鍚嶅笀璁よ瘉 + */ + @PreAuthorize("@ss.hasPermi('hezhi:tbTeacherAuthentication:edit')") + @Log(title = "鍚嶅笀璁よ瘉", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbTeacherAuthentication tbTeacherAuthentication) + { + return toAjax(tbTeacherAuthenticationService.updateTbTeacherAuthentication(tbTeacherAuthentication)); + } + + /** + * 鍒犻櫎鍚嶅笀璁よ瘉 + */ + @PreAuthorize("@ss.hasPermi('hezhi:tbTeacherAuthentication:remove')") + @Log(title = "鍚嶅笀璁よ瘉", businessType = BusinessType.DELETE) + @DeleteMapping("/{teacherAuthenticationIds}") + public AjaxResult remove(@PathVariable Long[] teacherAuthenticationIds) + { + return toAjax(tbTeacherAuthenticationService.deleteTbTeacherAuthenticationByTeacherAuthenticationIds(teacherAuthenticationIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbTeacherController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbTeacherController.java new file mode 100644 index 0000000000000000000000000000000000000000..a77284c239f36ab30c22a68cf89a677c4fce3669 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbTeacherController.java @@ -0,0 +1,109 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbTeacher; +import com.ruoyi.hezhi.service.ITbTeacherService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鏁欏笀Controller + * + * @author ruoyi + * @date 2024-09-14 + */ +@RestController +@RequestMapping("/hezhi/teacher") +public class TbTeacherController extends BaseController +{ + @Autowired + private ITbTeacherService tbTeacherService; + + /** + * 鏌ヨ鏁欏笀鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:teacher:list')") + @GetMapping("/list") + public TableDataInfo list(TbTeacher tbTeacher) + { + startPage(); + List list = tbTeacherService.selectTbTeacherList(tbTeacher); + return getDataTable(list); + } + + /** + * 瀵煎嚭鏁欏笀鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:teacher:export')") + @Log(title = "鏁欏笀", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbTeacher tbTeacher) + { + List list = tbTeacherService.selectTbTeacherList(tbTeacher); + ExcelUtil util = new ExcelUtil(TbTeacher.class); + util.exportExcel(response, list, "鏁欏笀鏁版嵁"); + } + + /** + * 鑾峰彇鏁欏笀璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:teacher:query')") + @GetMapping(value = "/{teacherId}") + public AjaxResult getInfo(@PathVariable("teacherId") Long teacherId) + { + return success(tbTeacherService.selectTbTeacherByTeacherId(teacherId)); + } + + /** + * 鏂板鏁欏笀 + */ + @PreAuthorize("@ss.hasPermi('hezhi:teacher:add')") + @Log(title = "鏁欏笀", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbTeacher tbTeacher) + { + return toAjax(tbTeacherService.insertTbTeacher(tbTeacher)); + } + + /** + * 淇敼鏁欏笀 + */ + @PreAuthorize("@ss.hasPermi('hezhi:teacher:edit')") + @Log(title = "鏁欏笀", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbTeacher tbTeacher) + { + return toAjax(tbTeacherService.updateTbTeacher(tbTeacher)); + } + + /** + * 鍒犻櫎鏁欏笀 + */ + @PreAuthorize("@ss.hasPermi('hezhi:teacher:remove')") + @Log(title = "鏁欏笀", businessType = BusinessType.DELETE) + @DeleteMapping("/{teacherIds}") + public AjaxResult remove(@PathVariable Long[] teacherIds) + { + return toAjax(tbTeacherService.deleteTbTeacherByTeacherIds(teacherIds)); + } + + /** + * 鎵鏈夋暀甯堝垪琛 + * @return + */ + @GetMapping("/getAllTeacherList") + public AjaxResult getAllTeacherList() { + TbTeacher tbTeacher = new TbTeacher(); + tbTeacher.setDelFlag(0); + return AjaxResult.success(tbTeacherService.selectTbTeacherList(tbTeacher)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbTeacherCourseController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbTeacherCourseController.java new file mode 100644 index 0000000000000000000000000000000000000000..3eafdc6f76c7ea4f676e6acdaa1b3f52a24e9bf1 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbTeacherCourseController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbTeacherCourse; +import com.ruoyi.hezhi.service.ITbTeacherCourseService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鑰佸笀璇剧▼鍏宠仈Controller + * + * @author ruoyi + * @date 2024-09-14 + */ +@RestController +@RequestMapping("/hezhi/teacherCourse") +public class TbTeacherCourseController extends BaseController +{ + @Autowired + private ITbTeacherCourseService tbTeacherCourseService; + + /** + * 鏌ヨ鑰佸笀璇剧▼鍏宠仈鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:teacherCourse:list')") + @GetMapping("/list") + public TableDataInfo list(TbTeacherCourse tbTeacherCourse) + { + startPage(); + List list = tbTeacherCourseService.selectTbTeacherCourseList(tbTeacherCourse); + return getDataTable(list); + } + + /** + * 瀵煎嚭鑰佸笀璇剧▼鍏宠仈鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:teacherCourse:export')") + @Log(title = "鑰佸笀璇剧▼鍏宠仈", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbTeacherCourse tbTeacherCourse) + { + List list = tbTeacherCourseService.selectTbTeacherCourseList(tbTeacherCourse); + ExcelUtil util = new ExcelUtil(TbTeacherCourse.class); + util.exportExcel(response, list, "鑰佸笀璇剧▼鍏宠仈鏁版嵁"); + } + + /** + * 鑾峰彇鑰佸笀璇剧▼鍏宠仈璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:teacherCourse:query')") + @GetMapping(value = "/{teacherCourseId}") + public AjaxResult getInfo(@PathVariable("teacherCourseId") Long teacherCourseId) + { + return success(tbTeacherCourseService.selectTbTeacherCourseByTeacherCourseId(teacherCourseId)); + } + + /** + * 鏂板鑰佸笀璇剧▼鍏宠仈 + */ + @PreAuthorize("@ss.hasPermi('hezhi:teacherCourse:add')") + @Log(title = "鑰佸笀璇剧▼鍏宠仈", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbTeacherCourse tbTeacherCourse) + { + return toAjax(tbTeacherCourseService.insertTbTeacherCourse(tbTeacherCourse)); + } + + /** + * 淇敼鑰佸笀璇剧▼鍏宠仈 + */ + @PreAuthorize("@ss.hasPermi('hezhi:teacherCourse:edit')") + @Log(title = "鑰佸笀璇剧▼鍏宠仈", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbTeacherCourse tbTeacherCourse) + { + return toAjax(tbTeacherCourseService.updateTbTeacherCourse(tbTeacherCourse)); + } + + /** + * 鍒犻櫎鑰佸笀璇剧▼鍏宠仈 + */ + @PreAuthorize("@ss.hasPermi('hezhi:teacherCourse:remove')") + @Log(title = "鑰佸笀璇剧▼鍏宠仈", businessType = BusinessType.DELETE) + @DeleteMapping("/{teacherCourseIds}") + public AjaxResult remove(@PathVariable Long[] teacherCourseIds) + { + return toAjax(tbTeacherCourseService.deleteTbTeacherCourseByTeacherCourseIds(teacherCourseIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbTrendsController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbTrendsController.java new file mode 100644 index 0000000000000000000000000000000000000000..7cee02b26919baf1138b2dccce16ca28e9bc5e6a --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbTrendsController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbTrends; +import com.ruoyi.hezhi.service.ITbTrendsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 闄㈠唴鍔ㄦ丆ontroller + * + * @author ruoyi + * @date 2024-09-14 + */ +@RestController +@RequestMapping("/hezhi/trends") +public class TbTrendsController extends BaseController +{ + @Autowired + private ITbTrendsService tbTrendsService; + + /** + * 鏌ヨ闄㈠唴鍔ㄦ佸垪琛 + */ + @PreAuthorize("@ss.hasPermi('hezhi:trends:list')") + @GetMapping("/list") + public TableDataInfo list(TbTrends tbTrends) + { + startPage(); + List list = tbTrendsService.selectTbTrendsList(tbTrends); + return getDataTable(list); + } + + /** + * 瀵煎嚭闄㈠唴鍔ㄦ佸垪琛 + */ + @PreAuthorize("@ss.hasPermi('hezhi:trends:export')") + @Log(title = "闄㈠唴鍔ㄦ", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbTrends tbTrends) + { + List list = tbTrendsService.selectTbTrendsList(tbTrends); + ExcelUtil util = new ExcelUtil(TbTrends.class); + util.exportExcel(response, list, "闄㈠唴鍔ㄦ佹暟鎹"); + } + + /** + * 鑾峰彇闄㈠唴鍔ㄦ佽缁嗕俊鎭 + */ + @PreAuthorize("@ss.hasPermi('hezhi:trends:query')") + @GetMapping(value = "/{trendsId}") + public AjaxResult getInfo(@PathVariable("trendsId") Long trendsId) + { + return success(tbTrendsService.selectTbTrendsByTrendsId(trendsId)); + } + + /** + * 鏂板闄㈠唴鍔ㄦ + */ + @PreAuthorize("@ss.hasPermi('hezhi:trends:add')") + @Log(title = "闄㈠唴鍔ㄦ", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbTrends tbTrends) + { + return toAjax(tbTrendsService.insertTbTrends(tbTrends)); + } + + /** + * 淇敼闄㈠唴鍔ㄦ + */ + @PreAuthorize("@ss.hasPermi('hezhi:trends:edit')") + @Log(title = "闄㈠唴鍔ㄦ", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbTrends tbTrends) + { + return toAjax(tbTrendsService.updateTbTrends(tbTrends)); + } + + /** + * 鍒犻櫎闄㈠唴鍔ㄦ + */ + @PreAuthorize("@ss.hasPermi('hezhi:trends:remove')") + @Log(title = "闄㈠唴鍔ㄦ", businessType = BusinessType.DELETE) + @DeleteMapping("/{trendsIds}") + public AjaxResult remove(@PathVariable Long[] trendsIds) + { + return toAjax(tbTrendsService.deleteTbTrendsByTrendsIds(trendsIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbTypeCourseController.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbTypeCourseController.java new file mode 100644 index 0000000000000000000000000000000000000000..2848f291316ef59dce9fd1acb09c4d4651d6a2d9 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/controller/TbTypeCourseController.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.controller; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.hezhi.domain.TbTypeCourse; +import com.ruoyi.hezhi.service.ITbTypeCourseService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 绫诲瀷璇剧▼鍏宠仈Controller + * + * @author ruoyi + * @date 2024-09-19 + */ +@RestController +@RequestMapping("/hezhi/typeCourse") +public class TbTypeCourseController extends BaseController +{ + @Autowired + private ITbTypeCourseService tbTypeCourseService; + + /** + * 鏌ヨ绫诲瀷璇剧▼鍏宠仈鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:typeCourse:list')") + @GetMapping("/list") + public TableDataInfo list(TbTypeCourse tbTypeCourse) + { + startPage(); + List list = tbTypeCourseService.selectTbTypeCourseList(tbTypeCourse); + return getDataTable(list); + } + + /** + * 瀵煎嚭绫诲瀷璇剧▼鍏宠仈鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('hezhi:typeCourse:export')") + @Log(title = "绫诲瀷璇剧▼鍏宠仈", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, TbTypeCourse tbTypeCourse) + { + List list = tbTypeCourseService.selectTbTypeCourseList(tbTypeCourse); + ExcelUtil util = new ExcelUtil(TbTypeCourse.class); + util.exportExcel(response, list, "绫诲瀷璇剧▼鍏宠仈鏁版嵁"); + } + + /** + * 鑾峰彇绫诲瀷璇剧▼鍏宠仈璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('hezhi:typeCourse:query')") + @GetMapping(value = "/{typeCourseId}") + public AjaxResult getInfo(@PathVariable("typeCourseId") Long typeCourseId) + { + return success(tbTypeCourseService.selectTbTypeCourseByTypeCourseId(typeCourseId)); + } + + /** + * 鏂板绫诲瀷璇剧▼鍏宠仈 + */ + @PreAuthorize("@ss.hasPermi('hezhi:typeCourse:add')") + @Log(title = "绫诲瀷璇剧▼鍏宠仈", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody TbTypeCourse tbTypeCourse) + { + return toAjax(tbTypeCourseService.insertTbTypeCourse(tbTypeCourse)); + } + + /** + * 淇敼绫诲瀷璇剧▼鍏宠仈 + */ + @PreAuthorize("@ss.hasPermi('hezhi:typeCourse:edit')") + @Log(title = "绫诲瀷璇剧▼鍏宠仈", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody TbTypeCourse tbTypeCourse) + { + return toAjax(tbTypeCourseService.updateTbTypeCourse(tbTypeCourse)); + } + + /** + * 鍒犻櫎绫诲瀷璇剧▼鍏宠仈 + */ + @PreAuthorize("@ss.hasPermi('hezhi:typeCourse:remove')") + @Log(title = "绫诲瀷璇剧▼鍏宠仈", businessType = BusinessType.DELETE) + @DeleteMapping("/{typeCourseIds}") + public AjaxResult remove(@PathVariable Long[] typeCourseIds) + { + return toAjax(tbTypeCourseService.deleteTbTypeCourseByTypeCourseIds(typeCourseIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/scheduledTask/ScheduledTaskService.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/scheduledTask/ScheduledTaskService.java new file mode 100644 index 0000000000000000000000000000000000000000..bd9985227650e69697e63778da0b0d6ce7054702 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/scheduledTask/ScheduledTaskService.java @@ -0,0 +1,46 @@ +package com.ruoyi.hezhi.scheduledTask; + +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.service.ITbMemberOrderService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * 瀹氭椂浠诲姟鏈嶅姟 + */ +@Component +public class ScheduledTaskService { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Resource + private ITbMemberOrderService tbMemberOrderService; + + @Resource + private RedisCache redisCache; + + @Transactional(rollbackFor =Exception.class) + public void orderCancelTask(String redisKey) { + try { + // redis閿 + redisCache.setCacheObject(redisKey, 0); + // 鍒犻櫎杩囦簡鎶ュ悕鏃堕棿骞朵笖鏈敮浠樼殑璁㈠崟 + tbMemberOrderService.deleteExamCantPayOrder(); + }catch(Exception e){ + e.printStackTrace(); + logger.error(DateUtils.getNowDate()+"->瀹氭椂浠诲姟鎵ц寮傚父锛"+"璁㈠崟瓒呮椂鏈敮浠樺彇娑"); + }finally { + logger.info(DateUtils.getNowDate()+"->瀹氭椂浠诲姟鎵ц缁撴潫锛"+"璁㈠崟瓒呮椂鏈敮浠樺彇娑"); + // 閲婃斁閿 + redisCache.deleteObject(redisKey); + } + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/hezhi/scheduledTask/ScheduledTaskUtils.java b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/scheduledTask/ScheduledTaskUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..93dc84150ae58e63d5d302c9f0f74a178b9c4968 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/hezhi/scheduledTask/ScheduledTaskUtils.java @@ -0,0 +1,57 @@ +package com.ruoyi.hezhi.scheduledTask; + +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.DateUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.Date; + +/** + * 璁㈠崟瀹氭椂浠诲姟 + */ +@Component +public class ScheduledTaskUtils { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + + + private static final String ORDER_CANCEL_LOCK = "ORDER_CANCEL_LOCK"; + + + + @Resource + private ScheduledTaskService scheduledTaskService; + + @Resource + private RedisCache redisCache; + + + + + + + /** + * 璁㈠崟瓒呮椂鏈敮浠樺彇娑 + * 姣忓垎閽熸墽琛屼竴娆 + */ + @Scheduled(cron = "0 0/1 * * * ?") + public void orderCancelTask(){ + Date nowDate = DateUtils.getNowDate(); + if(!redisCache.hasKey(ORDER_CANCEL_LOCK)){ + // 鎵ц浠诲姟 + logger.info("瀹氭椂浠诲姟: 鑰冭瘯璁㈠崟瓒呮椂鏈敮浠樺彇娑 浠诲姟寮濮嬫墽琛 {}", nowDate); + scheduledTaskService.orderCancelTask(ORDER_CANCEL_LOCK); + }else{ + logger.info("瀹氭椂浠诲姟: 鑰冭瘯璁㈠崟瓒呮椂鏈敮浠樺彇娑 閫鍥瀧" + ORDER_CANCEL_LOCK + ":{}}", nowDate); + } + + } + + + +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/AppBeanInjector.java b/ruoyi-admin/src/main/java/com/ruoyi/web/AppBeanInjector.java new file mode 100644 index 0000000000000000000000000000000000000000..8d8c1048c2fb53640610d37ed34c5aad0216f098 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/AppBeanInjector.java @@ -0,0 +1,21 @@ +package com.ruoyi.web; + +import com.ruoyi.common.utils.kd100.Kd100Util; +import com.ruoyi.web.controller.utils.SpringContextUtil; + +/** + * 鍔熻兘锛 + * + * @author锛歀CL + * @create锛2019/6/13/013 16:43 + */ + +public abstract class AppBeanInjector { + + public static final Kd100Util kd100Util; + + static { + kd100Util = (Kd100Util) SpringContextUtil.getBean("kd100Util"); + + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java new file mode 100644 index 0000000000000000000000000000000000000000..9ff5d08d4e1157412b0b900f324a1924a85cf26c --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java @@ -0,0 +1,95 @@ +package com.ruoyi.web.controller.common; + +import com.google.code.kaptcha.Producer; +import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.sign.Base64; +import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.system.service.ISysConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.FastByteArrayOutputStream; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.imageio.ImageIO; +import javax.servlet.http.HttpServletResponse; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.concurrent.TimeUnit; + +/** + * 楠岃瘉鐮佹搷浣滃鐞 + * + * @author ruoyi + */ +@RestController +public class CaptchaController +{ + @Resource(name = "captchaProducer") + private Producer captchaProducer; + + @Resource(name = "captchaProducerMath") + private Producer captchaProducerMath; + + @Autowired + private RedisCache redisCache; + + @Autowired + private ISysConfigService configService; + /** + * 鐢熸垚楠岃瘉鐮 + */ + @GetMapping("/captchaImage") + public AjaxResult getCode(HttpServletResponse response) throws IOException + { + AjaxResult ajax = AjaxResult.success(); + boolean captchaEnabled = configService.selectCaptchaEnabled(); + ajax.put("captchaEnabled", captchaEnabled); + if (!captchaEnabled) + { + return ajax; + } + + // 淇濆瓨楠岃瘉鐮佷俊鎭 + String uuid = IdUtils.simpleUUID(); + String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid; + + String capStr = null, code = null; + BufferedImage image = null; + + // 鐢熸垚楠岃瘉鐮 + String captchaType = RuoYiConfig.getCaptchaType(); + if ("math".equals(captchaType)) + { + String capText = captchaProducerMath.createText(); + capStr = capText.substring(0, capText.lastIndexOf("@")); + code = capText.substring(capText.lastIndexOf("@") + 1); + image = captchaProducerMath.createImage(capStr); + } + else if ("char".equals(captchaType)) + { + capStr = code = captchaProducer.createText(); + image = captchaProducer.createImage(capStr); + } + + redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES); + // 杞崲娴佷俊鎭啓鍑 + FastByteArrayOutputStream os = new FastByteArrayOutputStream(); + try + { + ImageIO.write(image, "jpg", os); + } + catch (IOException e) + { + return AjaxResult.error(e.getMessage()); + } + + ajax.put("uuid", uuid); + ajax.put("img", Base64.encode(os.toByteArray())); + return ajax; + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java new file mode 100644 index 0000000000000000000000000000000000000000..70b5a00ea12e7a87bb46eeb8c994b2b7b2ac7cd6 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java @@ -0,0 +1,247 @@ +package com.ruoyi.web.controller.common; + +import cn.hutool.core.lang.Snowflake; +import com.ruoyi.common.config.RuoYiConfig; +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.framework.config.ServerConfig; +import org.apache.commons.io.FilenameUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.InputStream; +import java.math.BigInteger; +import java.security.MessageDigest; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * 閫氱敤璇锋眰澶勭悊 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/common") +public class CommonController { + private static final Logger log = LoggerFactory.getLogger(CommonController.class); + + @Autowired + private ServerConfig serverConfig; + + private static final String FILE_DELIMETER = ","; + + @Resource + private QiNiuUploadUtils qiNiuUploadUtils; + + /** + * 閫氱敤涓嬭浇璇锋眰 + * + * @param fileName 鏂囦欢鍚嶇О + * @param delete 鏄惁鍒犻櫎 + */ + @GetMapping("/download") + public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request) { + try { + if (!FileUtils.checkAllowDownload(fileName)) { + throw new Exception(StringUtils.format("鏂囦欢鍚嶇О({})闈炴硶锛屼笉鍏佽涓嬭浇銆 ", fileName)); + } + String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1); + String filePath = RuoYiConfig.getDownloadPath() + fileName; + + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + FileUtils.setAttachmentResponseHeader(response, realFileName); + FileUtils.writeBytes(filePath, response.getOutputStream()); + if (delete) { + FileUtils.deleteFile(filePath); + } + } catch (Exception e) { + log.error("涓嬭浇鏂囦欢澶辫触", e); + } + } + + // /** + // * 閫氱敤涓婁紶璇锋眰锛堟湰鍦板崟涓級 + // */ + // @PostMapping("/upload") + // public AjaxResult uploadFile(MultipartFile file) throws Exception + // { + // try + // { + // // 鏂囦欢涓婁紶鍚嶇О + // String fileUploadName = qiNiuUploadUtils.getFileUploadName(file); + // // 涓婁紶 + // String url = qiNiuUploadUtils.uploadByte(file.getBytes(), new Snowflake(0, 0).nextIdStr() +"_"+fileUploadName); + // if (StringUtils.isBlank(url)){ + // return AjaxResult.error("涓婁紶澶辫触"); + // } + // + // AjaxResult ajax = AjaxResult.success(); + // ajax.put("url", url); + // ajax.put("fileName", fileUploadName); + // ajax.put("newFileName", FileUtils.getName(fileUploadName)); + // ajax.put("originalFilename", file.getOriginalFilename()); + // ajax.put("uid", fileUploadName.substring(0, fileUploadName.indexOf("."))); + // return ajax; + // } + // catch (Exception e) + // { + // return AjaxResult.error(e.getMessage()); + // } + // } + + /** + * 閫氱敤涓婁紶璇锋眰锛堜竷鐗涗簯鍗曚釜锛 + */ + @PostMapping("/upload") + public AjaxResult uploadFile(MultipartFile file) throws Exception { + if (file.isEmpty()) { + throw new ServiceException(ServiceResponseEnum.UPLOAD_FILE_NOT_NULL); + } + String fileName = null; + try { + String originalFilename = file.getOriginalFilename(); + if (StringUtils.isNotEmpty(originalFilename)) { + originalFilename = originalFilename.substring(0, originalFilename.lastIndexOf(".")); + } + // 鏂囦欢鍚嶇О + fileName = StringUtils.format("{}/{}/{}_{}/{}.{}", "xxks", DateUtils.datePath(), + md5HashCode(file.getInputStream()), Seq.getId(Seq.uploadSeqType), originalFilename, getExtension(file)); + String imagePath = new ImgUpload().upload(file.getBytes(), + fileName); + // String imagePath = new ImgUpload().upload(QiNiuUploadUtils.getZipImage(file), + // fileName); + if (StringUtils.isBlank(imagePath)) { + return AjaxResult.error("涓婁紶澶辫触"); + } + AjaxResult ajax = AjaxResult.success(); + ajax.put("fileName", fileName); + ajax.put("url", imagePath); + return ajax; + } catch (Exception e) { + e.printStackTrace(); + return AjaxResult.error(e.getMessage()); + } + } + + /** + * 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("/uploads") + 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()); + } + } + + /** + * 鏈湴璧勬簮閫氱敤涓嬭浇 + */ + @GetMapping("/download/resource") + public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response) + throws Exception { + try { + if (!FileUtils.checkAllowDownload(resource)) { + throw new Exception(StringUtils.format("璧勬簮鏂囦欢({})闈炴硶锛屼笉鍏佽涓嬭浇銆 ", resource)); + } + // 鏈湴璧勬簮璺緞 + String localPath = RuoYiConfig.getProfile(); + // 鏁版嵁搴撹祫婧愬湴鍧 + String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX); + // 涓嬭浇鍚嶇О + String downloadName = StringUtils.substringAfterLast(downloadPath, "/"); + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + FileUtils.setAttachmentResponseHeader(response, downloadName); + FileUtils.writeBytes(downloadPath, response.getOutputStream()); + } catch (Exception e) { + log.error("涓嬭浇鏂囦欢澶辫触", e); + } + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java new file mode 100644 index 0000000000000000000000000000000000000000..e7d79f796a1c84aaed655376bc09e0ed64f41dcf --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java @@ -0,0 +1,111 @@ +package com.ruoyi.web.controller.monitor; + +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.SysCache; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisCallback; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.*; + +/** + * 缂撳瓨鐩戞帶 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/monitor/cache") +public class CacheController +{ + @Autowired + private RedisTemplate redisTemplate; + + private final static List caches = new ArrayList(); + { + caches.add(new SysCache(CacheConstants.LOGIN_TOKEN_KEY, "鐢ㄦ埛淇℃伅")); + caches.add(new SysCache(CacheConstants.SYS_CONFIG_KEY, "閰嶇疆淇℃伅")); + caches.add(new SysCache(CacheConstants.SYS_DICT_KEY, "鏁版嵁瀛楀吀")); + caches.add(new SysCache(CacheConstants.CAPTCHA_CODE_KEY, "楠岃瘉鐮")); + caches.add(new SysCache(CacheConstants.REPEAT_SUBMIT_KEY, "闃查噸鎻愪氦")); + caches.add(new SysCache(CacheConstants.RATE_LIMIT_KEY, "闄愭祦澶勭悊")); + caches.add(new SysCache(CacheConstants.PWD_ERR_CNT_KEY, "瀵嗙爜閿欒娆℃暟")); + } + + @PreAuthorize("@ss.hasPermi('monitor:cache:list')") + @GetMapping() + public AjaxResult getInfo() throws Exception + { + Properties info = (Properties) redisTemplate.execute((RedisCallback) connection -> connection.info()); + Properties commandStats = (Properties) redisTemplate.execute((RedisCallback) connection -> connection.info("commandstats")); + Object dbSize = redisTemplate.execute((RedisCallback) connection -> connection.dbSize()); + + Map result = new HashMap<>(3); + result.put("info", info); + result.put("dbSize", dbSize); + + List> pieList = new ArrayList<>(); + commandStats.stringPropertyNames().forEach(key -> { + Map data = new HashMap<>(2); + String property = commandStats.getProperty(key); + data.put("name", StringUtils.removeStart(key, "cmdstat_")); + data.put("value", StringUtils.substringBetween(property, "calls=", ",usec")); + pieList.add(data); + }); + result.put("commandStats", pieList); + return AjaxResult.success(result); + } + + @PreAuthorize("@ss.hasPermi('monitor:cache:list')") + @GetMapping("/getNames") + public AjaxResult cache() + { + return AjaxResult.success(caches); + } + + @PreAuthorize("@ss.hasPermi('monitor:cache:list')") + @GetMapping("/getKeys/{cacheName}") + public AjaxResult getCacheKeys(@PathVariable String cacheName) + { + Set cacheKeys = redisTemplate.keys(cacheName + "*"); + return AjaxResult.success(new TreeSet<>(cacheKeys)); + } + + @PreAuthorize("@ss.hasPermi('monitor:cache:list')") + @GetMapping("/getValue/{cacheName}/{cacheKey}") + public AjaxResult getCacheValue(@PathVariable String cacheName, @PathVariable String cacheKey) + { + String cacheValue = redisTemplate.opsForValue().get(cacheKey); + SysCache sysCache = new SysCache(cacheName, cacheKey, cacheValue); + return AjaxResult.success(sysCache); + } + + @PreAuthorize("@ss.hasPermi('monitor:cache:list')") + @DeleteMapping("/clearCacheName/{cacheName}") + public AjaxResult clearCacheName(@PathVariable String cacheName) + { + Collection cacheKeys = redisTemplate.keys(cacheName + "*"); + redisTemplate.delete(cacheKeys); + return AjaxResult.success(); + } + + @PreAuthorize("@ss.hasPermi('monitor:cache:list')") + @DeleteMapping("/clearCacheKey/{cacheKey}") + public AjaxResult clearCacheKey(@PathVariable String cacheKey) + { + redisTemplate.delete(cacheKey); + return AjaxResult.success(); + } + + @PreAuthorize("@ss.hasPermi('monitor:cache:list')") + @DeleteMapping("/clearCacheAll") + public AjaxResult clearCacheAll() + { + Collection cacheKeys = redisTemplate.keys("*"); + redisTemplate.delete(cacheKeys); + return AjaxResult.success(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/ServerController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/ServerController.java new file mode 100644 index 0000000000000000000000000000000000000000..c9dbcbe463667f9b93bc51891e9ece6067c1d115 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/ServerController.java @@ -0,0 +1,27 @@ +package com.ruoyi.web.controller.monitor; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.framework.web.domain.Server; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 鏈嶅姟鍣ㄧ洃鎺 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/monitor/server") +public class ServerController +{ + @PreAuthorize("@ss.hasPermi('monitor:server:list')") + @GetMapping() + public AjaxResult getInfo() throws Exception + { + Server server = new Server(); + server.copyTo(); + return AjaxResult.success(server); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java new file mode 100644 index 0000000000000000000000000000000000000000..aa0085410b58b3214410d25df781598ed3a57f5d --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java @@ -0,0 +1,78 @@ +package com.ruoyi.web.controller.monitor; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.framework.web.service.SysPasswordService; +import com.ruoyi.system.domain.SysLogininfor; +import com.ruoyi.system.service.ISysLogininforService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 绯荤粺璁块棶璁板綍 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/monitor/logininfor") +public class SysLogininforController extends BaseController +{ + @Autowired + private ISysLogininforService logininforService; + + @Autowired + private SysPasswordService passwordService; + + @PreAuthorize("@ss.hasPermi('monitor:logininfor:list')") + @GetMapping("/list") + public TableDataInfo list(SysLogininfor logininfor) + { + startPage(); + List list = logininforService.selectLogininforList(logininfor); + return getDataTable(list); + } + + @Log(title = "鐧诲綍鏃ュ織", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('monitor:logininfor:export')") + @PostMapping("/export") + public void export(HttpServletResponse response, SysLogininfor logininfor) + { + List list = logininforService.selectLogininforList(logininfor); + ExcelUtil util = new ExcelUtil(SysLogininfor.class); + util.exportExcel(response, list, "鐧诲綍鏃ュ織"); + } + + @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')") + @Log(title = "鐧诲綍鏃ュ織", businessType = BusinessType.DELETE) + @DeleteMapping("/{infoIds}") + public AjaxResult remove(@PathVariable Long[] infoIds) + { + return toAjax(logininforService.deleteLogininforByIds(infoIds)); + } + + @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')") + @Log(title = "鐧诲綍鏃ュ織", businessType = BusinessType.CLEAN) + @DeleteMapping("/clean") + public AjaxResult clean() + { + logininforService.cleanLogininfor(); + return success(); + } + + @PreAuthorize("@ss.hasPermi('monitor:logininfor:unlock')") + @Log(title = "璐︽埛瑙i攣", businessType = BusinessType.OTHER) + @GetMapping("/unlock/{userName}") + public AjaxResult unlock(@PathVariable("userName") String userName) + { + passwordService.clearLoginRecordCache(userName); + return success(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java new file mode 100644 index 0000000000000000000000000000000000000000..7e0534d983766a741dbb831536bcafeb21e11043 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java @@ -0,0 +1,65 @@ +package com.ruoyi.web.controller.monitor; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.domain.SysOperLog; +import com.ruoyi.system.service.ISysOperLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鎿嶄綔鏃ュ織璁板綍 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/monitor/operlog") +public class SysOperlogController extends BaseController +{ + @Autowired + private ISysOperLogService operLogService; + + @PreAuthorize("@ss.hasPermi('monitor:operlog:list')") + @GetMapping("/list") + public TableDataInfo list(SysOperLog operLog) + { + startPage(); + List list = operLogService.selectOperLogList(operLog); + return getDataTable(list); + } + + @Log(title = "鎿嶄綔鏃ュ織", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('monitor:operlog:export')") + @PostMapping("/export") + public void export(HttpServletResponse response, SysOperLog operLog) + { + List list = operLogService.selectOperLogList(operLog); + ExcelUtil util = new ExcelUtil(SysOperLog.class); + util.exportExcel(response, list, "鎿嶄綔鏃ュ織"); + } + + @Log(title = "鎿嶄綔鏃ュ織", businessType = BusinessType.DELETE) + @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')") + @DeleteMapping("/{operIds}") + public AjaxResult remove(@PathVariable Long[] operIds) + { + return toAjax(operLogService.deleteOperLogByIds(operIds)); + } + + @Log(title = "鎿嶄綔鏃ュ織", businessType = BusinessType.CLEAN) + @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')") + @DeleteMapping("/clean") + public AjaxResult clean() + { + operLogService.cleanOperLog(); + return success(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java new file mode 100644 index 0000000000000000000000000000000000000000..a0704c9a982ec46ad53cd7dbcdf63ba5cd3c5c0e --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java @@ -0,0 +1,80 @@ +package com.ruoyi.web.controller.monitor; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.SysUserOnline; +import com.ruoyi.system.service.ISysUserOnlineService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +/** + * 鍦ㄧ嚎鐢ㄦ埛鐩戞帶 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/monitor/online") +public class SysUserOnlineController extends BaseController +{ + @Autowired + private ISysUserOnlineService userOnlineService; + + @Autowired + private RedisCache redisCache; + + @PreAuthorize("@ss.hasPermi('monitor:online:list')") + @GetMapping("/list") + public TableDataInfo list(String ipaddr, String userName) + { + Collection keys = redisCache.keys(CacheConstants.LOGIN_TOKEN_KEY + "*"); + List userOnlineList = new ArrayList(); + for (String key : keys) + { + LoginUser user = redisCache.getCacheObject(key); + if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) + { + userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user)); + } + else if (StringUtils.isNotEmpty(ipaddr)) + { + userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user)); + } + else if (StringUtils.isNotEmpty(userName) && StringUtils.isNotNull(user.getUser())) + { + userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user)); + } + else + { + userOnlineList.add(userOnlineService.loginUserToUserOnline(user)); + } + } + Collections.reverse(userOnlineList); + userOnlineList.removeAll(Collections.singleton(null)); + return getDataTable(userOnlineList); + } + + /** + * 寮洪鐢ㄦ埛 + */ + @PreAuthorize("@ss.hasPermi('monitor:online:forceLogout')") + @Log(title = "鍦ㄧ嚎鐢ㄦ埛", businessType = BusinessType.FORCE) + @DeleteMapping("/{tokenId}") + public AjaxResult forceLogout(@PathVariable String tokenId) + { + redisCache.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId); + return success(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java new file mode 100644 index 0000000000000000000000000000000000000000..835c9d05ddc88c53e1573f9083947b887723ee75 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java @@ -0,0 +1,127 @@ +package com.ruoyi.web.controller.system; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.domain.SysConfig; +import com.ruoyi.system.service.ISysConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鍙傛暟閰嶇疆 淇℃伅鎿嶄綔澶勭悊 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/system/config") +public class SysConfigController extends BaseController +{ + @Autowired + private ISysConfigService configService; + + /** + * 鑾峰彇鍙傛暟閰嶇疆鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('system:config:list')") + @GetMapping("/list") + public TableDataInfo list(SysConfig config) + { + startPage(); + List list = configService.selectConfigList(config); + return getDataTable(list); + } + + @Log(title = "鍙傛暟绠$悊", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:config:export')") + @PostMapping("/export") + public void export(HttpServletResponse response, SysConfig config) + { + List list = configService.selectConfigList(config); + ExcelUtil util = new ExcelUtil(SysConfig.class); + util.exportExcel(response, list, "鍙傛暟鏁版嵁"); + } + + /** + * 鏍规嵁鍙傛暟缂栧彿鑾峰彇璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('system:config:query')") + @GetMapping(value = "/{configId}") + public AjaxResult getInfo(@PathVariable Long configId) + { + return success(configService.selectConfigById(configId)); + } + + /** + * 鏍规嵁鍙傛暟閿悕鏌ヨ鍙傛暟鍊 + */ + @GetMapping(value = "/configKey/{configKey}") + public AjaxResult getConfigKey(@PathVariable String configKey) + { + return success(configService.selectConfigByKey(configKey)); + } + + /** + * 鏂板鍙傛暟閰嶇疆 + */ + @PreAuthorize("@ss.hasPermi('system:config:add')") + @Log(title = "鍙傛暟绠$悊", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysConfig config) + { + if (!configService.checkConfigKeyUnique(config)) + { + return error("鏂板鍙傛暟'" + config.getConfigName() + "'澶辫触锛屽弬鏁伴敭鍚嶅凡瀛樺湪"); + } + config.setCreateBy(getUsername()); + return toAjax(configService.insertConfig(config)); + } + + /** + * 淇敼鍙傛暟閰嶇疆 + */ + @PreAuthorize("@ss.hasPermi('system:config:edit')") + @Log(title = "鍙傛暟绠$悊", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysConfig config) + { + if (!configService.checkConfigKeyUnique(config)) + { + return error("淇敼鍙傛暟'" + config.getConfigName() + "'澶辫触锛屽弬鏁伴敭鍚嶅凡瀛樺湪"); + } + config.setUpdateBy(getUsername()); + return toAjax(configService.updateConfig(config)); + } + + /** + * 鍒犻櫎鍙傛暟閰嶇疆 + */ + @PreAuthorize("@ss.hasPermi('system:config:remove')") + @Log(title = "鍙傛暟绠$悊", businessType = BusinessType.DELETE) + @DeleteMapping("/{configIds}") + public AjaxResult remove(@PathVariable Long[] configIds) + { + configService.deleteConfigByIds(configIds); + return success(); + } + + /** + * 鍒锋柊鍙傛暟缂撳瓨 + */ + @PreAuthorize("@ss.hasPermi('system:config:remove')") + @Log(title = "鍙傛暟绠$悊", businessType = BusinessType.CLEAN) + @DeleteMapping("/refreshCache") + public AjaxResult refreshCache() + { + configService.resetConfigCache(); + return success(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java new file mode 100644 index 0000000000000000000000000000000000000000..426caf6ac44e8dff16f748dbfd6bc1ea9abb69b8 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java @@ -0,0 +1,126 @@ +package com.ruoyi.web.controller.system; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysDept; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.service.ISysDeptService; +import org.apache.commons.lang3.ArrayUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 閮ㄩ棬淇℃伅 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/system/dept") +public class SysDeptController extends BaseController +{ + @Autowired + private ISysDeptService deptService; + + /** + * 鑾峰彇閮ㄩ棬鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('system:dept:list')") + @GetMapping("/list") + public AjaxResult list(SysDept dept) + { + List depts = deptService.selectDeptList(dept); + return success(depts); + } + + /** + * 鏌ヨ閮ㄩ棬鍒楄〃锛堟帓闄よ妭鐐癸級 + */ + @PreAuthorize("@ss.hasPermi('system:dept:list')") + @GetMapping("/list/exclude/{deptId}") + public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId) + { + List depts = deptService.selectDeptList(new SysDept()); + depts.removeIf(d -> d.getDeptId().intValue() == deptId || ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), deptId + "")); + return success(depts); + } + + /** + * 鏍规嵁閮ㄩ棬缂栧彿鑾峰彇璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('system:dept:query')") + @GetMapping(value = "/{deptId}") + public AjaxResult getInfo(@PathVariable Long deptId) + { + deptService.checkDeptDataScope(deptId); + return success(deptService.selectDeptById(deptId)); + } + + /** + * 鏂板閮ㄩ棬 + */ + @PreAuthorize("@ss.hasPermi('system:dept:add')") + @Log(title = "閮ㄩ棬绠$悊", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysDept dept) + { + if (!deptService.checkDeptNameUnique(dept)) + { + return error("鏂板閮ㄩ棬'" + dept.getDeptName() + "'澶辫触锛岄儴闂ㄥ悕绉板凡瀛樺湪"); + } + dept.setCreateBy(getUsername()); + return toAjax(deptService.insertDept(dept)); + } + + /** + * 淇敼閮ㄩ棬 + */ + @PreAuthorize("@ss.hasPermi('system:dept:edit')") + @Log(title = "閮ㄩ棬绠$悊", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysDept dept) + { + Long deptId = dept.getDeptId(); + deptService.checkDeptDataScope(deptId); + if (!deptService.checkDeptNameUnique(dept)) + { + return error("淇敼閮ㄩ棬'" + dept.getDeptName() + "'澶辫触锛岄儴闂ㄥ悕绉板凡瀛樺湪"); + } + else if (dept.getParentId().equals(deptId)) + { + return error("淇敼閮ㄩ棬'" + dept.getDeptName() + "'澶辫触锛屼笂绾ч儴闂ㄤ笉鑳芥槸鑷繁"); + } + else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) && deptService.selectNormalChildrenDeptById(deptId) > 0) + { + return error("璇ラ儴闂ㄥ寘鍚湭鍋滅敤鐨勫瓙閮ㄩ棬锛"); + } + dept.setUpdateBy(getUsername()); + return toAjax(deptService.updateDept(dept)); + } + + /** + * 鍒犻櫎閮ㄩ棬 + */ + @PreAuthorize("@ss.hasPermi('system:dept:remove')") + @Log(title = "閮ㄩ棬绠$悊", businessType = BusinessType.DELETE) + @DeleteMapping("/{deptId}") + public AjaxResult remove(@PathVariable Long deptId) + { + if (deptService.hasChildByDeptId(deptId)) + { + return warn("瀛樺湪涓嬬骇閮ㄩ棬,涓嶅厑璁稿垹闄"); + } + if (deptService.checkDeptExistUser(deptId)) + { + return warn("閮ㄩ棬瀛樺湪鐢ㄦ埛,涓嶅厑璁稿垹闄"); + } + deptService.checkDeptDataScope(deptId); + return toAjax(deptService.deleteDeptById(deptId)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java new file mode 100644 index 0000000000000000000000000000000000000000..8d20c44dcac6c3fb8679040c5088c4f62dd5ea30 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java @@ -0,0 +1,115 @@ +package com.ruoyi.web.controller.system; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysDictData; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.service.ISysDictDataService; +import com.ruoyi.system.service.ISysDictTypeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.ArrayList; +import java.util.List; + +/** + * 鏁版嵁瀛楀吀淇℃伅 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/system/dict/data") +public class SysDictDataController extends BaseController +{ + @Autowired + private ISysDictDataService dictDataService; + + @Autowired + private ISysDictTypeService dictTypeService; + + @PreAuthorize("@ss.hasPermi('system:dict:list')") + @GetMapping("/list") + public TableDataInfo list(SysDictData dictData) + { + startPage(); + List list = dictDataService.selectDictDataList(dictData); + return getDataTable(list); + } + + @Log(title = "瀛楀吀鏁版嵁", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:dict:export')") + @PostMapping("/export") + public void export(HttpServletResponse response, SysDictData dictData) + { + List list = dictDataService.selectDictDataList(dictData); + ExcelUtil util = new ExcelUtil(SysDictData.class); + util.exportExcel(response, list, "瀛楀吀鏁版嵁"); + } + + /** + * 鏌ヨ瀛楀吀鏁版嵁璇︾粏 + */ + @PreAuthorize("@ss.hasPermi('system:dict:query')") + @GetMapping(value = "/{dictCode}") + public AjaxResult getInfo(@PathVariable Long dictCode) + { + return success(dictDataService.selectDictDataById(dictCode)); + } + + /** + * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁淇℃伅 + */ + @GetMapping(value = "/type/{dictType}") + public AjaxResult dictType(@PathVariable String dictType) + { + List data = dictTypeService.selectDictDataByType(dictType); + if (StringUtils.isNull(data)) + { + data = new ArrayList(); + } + return success(data); + } + + /** + * 鏂板瀛楀吀绫诲瀷 + */ + @PreAuthorize("@ss.hasPermi('system:dict:add')") + @Log(title = "瀛楀吀鏁版嵁", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysDictData dict) + { + dict.setCreateBy(getUsername()); + return toAjax(dictDataService.insertDictData(dict)); + } + + /** + * 淇敼淇濆瓨瀛楀吀绫诲瀷 + */ + @PreAuthorize("@ss.hasPermi('system:dict:edit')") + @Log(title = "瀛楀吀鏁版嵁", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysDictData dict) + { + dict.setUpdateBy(getUsername()); + return toAjax(dictDataService.updateDictData(dict)); + } + + /** + * 鍒犻櫎瀛楀吀绫诲瀷 + */ + @PreAuthorize("@ss.hasPermi('system:dict:remove')") + @Log(title = "瀛楀吀绫诲瀷", businessType = BusinessType.DELETE) + @DeleteMapping("/{dictCodes}") + public AjaxResult remove(@PathVariable Long[] dictCodes) + { + dictDataService.deleteDictDataByIds(dictCodes); + return success(); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java new file mode 100644 index 0000000000000000000000000000000000000000..baa65368a9f2886d09d99774d20785c82919c794 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java @@ -0,0 +1,125 @@ +package com.ruoyi.web.controller.system; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysDictType; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.service.ISysDictTypeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 鏁版嵁瀛楀吀淇℃伅 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/system/dict/type") +public class SysDictTypeController extends BaseController +{ + @Autowired + private ISysDictTypeService dictTypeService; + + @PreAuthorize("@ss.hasPermi('system:dict:list')") + @GetMapping("/list") + public TableDataInfo list(SysDictType dictType) + { + startPage(); + List list = dictTypeService.selectDictTypeList(dictType); + return getDataTable(list); + } + + @Log(title = "瀛楀吀绫诲瀷", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:dict:export')") + @PostMapping("/export") + public void export(HttpServletResponse response, SysDictType dictType) + { + List list = dictTypeService.selectDictTypeList(dictType); + ExcelUtil util = new ExcelUtil(SysDictType.class); + util.exportExcel(response, list, "瀛楀吀绫诲瀷"); + } + + /** + * 鏌ヨ瀛楀吀绫诲瀷璇︾粏 + */ + @PreAuthorize("@ss.hasPermi('system:dict:query')") + @GetMapping(value = "/{dictId}") + public AjaxResult getInfo(@PathVariable Long dictId) + { + return success(dictTypeService.selectDictTypeById(dictId)); + } + + /** + * 鏂板瀛楀吀绫诲瀷 + */ + @PreAuthorize("@ss.hasPermi('system:dict:add')") + @Log(title = "瀛楀吀绫诲瀷", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysDictType dict) + { + if (!dictTypeService.checkDictTypeUnique(dict)) + { + return error("鏂板瀛楀吀'" + dict.getDictName() + "'澶辫触锛屽瓧鍏哥被鍨嬪凡瀛樺湪"); + } + dict.setCreateBy(getUsername()); + return toAjax(dictTypeService.insertDictType(dict)); + } + + /** + * 淇敼瀛楀吀绫诲瀷 + */ + @PreAuthorize("@ss.hasPermi('system:dict:edit')") + @Log(title = "瀛楀吀绫诲瀷", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysDictType dict) + { + if (!dictTypeService.checkDictTypeUnique(dict)) + { + return error("淇敼瀛楀吀'" + dict.getDictName() + "'澶辫触锛屽瓧鍏哥被鍨嬪凡瀛樺湪"); + } + dict.setUpdateBy(getUsername()); + return toAjax(dictTypeService.updateDictType(dict)); + } + + /** + * 鍒犻櫎瀛楀吀绫诲瀷 + */ + @PreAuthorize("@ss.hasPermi('system:dict:remove')") + @Log(title = "瀛楀吀绫诲瀷", businessType = BusinessType.DELETE) + @DeleteMapping("/{dictIds}") + public AjaxResult remove(@PathVariable Long[] dictIds) + { + dictTypeService.deleteDictTypeByIds(dictIds); + return success(); + } + + /** + * 鍒锋柊瀛楀吀缂撳瓨 + */ + @PreAuthorize("@ss.hasPermi('system:dict:remove')") + @Log(title = "瀛楀吀绫诲瀷", businessType = BusinessType.CLEAN) + @DeleteMapping("/refreshCache") + public AjaxResult refreshCache() + { + dictTypeService.resetDictCache(); + return success(); + } + + /** + * 鑾峰彇瀛楀吀閫夋嫨妗嗗垪琛 + */ + @GetMapping("/optionselect") + public AjaxResult optionselect() + { + List dictTypes = dictTypeService.selectDictTypeAll(); + return success(dictTypes); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java new file mode 100644 index 0000000000000000000000000000000000000000..e79be5540fae0de75abb9c1acb4f9c082cfb7a08 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java @@ -0,0 +1,29 @@ +package com.ruoyi.web.controller.system; + +import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.utils.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 棣栭〉 + * + * @author ruoyi + */ +@RestController +public class SysIndexController +{ + /** 绯荤粺鍩虹閰嶇疆 */ + @Autowired + private RuoYiConfig ruoyiConfig; + + /** + * 璁块棶棣栭〉锛屾彁绀鸿 + */ + @RequestMapping("/") + public String index() + { + return StringUtils.format("娆㈣繋浣跨敤{}鍚庡彴绠$悊妗嗘灦锛屽綋鍓嶇増鏈細v{}锛岃閫氳繃鍓嶇鍦板潃璁块棶銆", ruoyiConfig.getName(), ruoyiConfig.getVersion()); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java new file mode 100644 index 0000000000000000000000000000000000000000..6f603119dfc0f7ea1ba306aeef63d9d543888bcc --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java @@ -0,0 +1,87 @@ +package com.ruoyi.web.controller.system; + +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysMenu; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.model.LoginBody; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.framework.web.service.SysLoginService; +import com.ruoyi.framework.web.service.SysPermissionService; +import com.ruoyi.system.service.ISysMenuService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.Set; + +/** + * 鐧诲綍楠岃瘉 + * + * @author ruoyi + */ +@RestController +public class SysLoginController +{ + @Autowired + private SysLoginService loginService; + + @Autowired + private ISysMenuService menuService; + + @Autowired + private SysPermissionService permissionService; + + /** + * 鐧诲綍鏂规硶 + * + * @param loginBody 鐧诲綍淇℃伅 + * @return 缁撴灉 + */ + @PostMapping("/login") + public AjaxResult login(@RequestBody LoginBody loginBody) + { + AjaxResult ajax = AjaxResult.success(); + // 鐢熸垚浠ょ墝 + String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(), + loginBody.getUuid()); + ajax.put(Constants.TOKEN, token); + return ajax; + } + + /** + * 鑾峰彇鐢ㄦ埛淇℃伅 + * + * @return 鐢ㄦ埛淇℃伅 + */ + @GetMapping("getInfo") + public AjaxResult getInfo() + { + SysUser user = SecurityUtils.getLoginUser().getUser(); + // 瑙掕壊闆嗗悎 + Set roles = permissionService.getRolePermission(user); + // 鏉冮檺闆嗗悎 + Set permissions = permissionService.getMenuPermission(user); + AjaxResult ajax = AjaxResult.success(); + ajax.put("user", user); + ajax.put("roles", roles); + ajax.put("permissions", permissions); + return ajax; + } + + /** + * 鑾峰彇璺敱淇℃伅 + * + * @return 璺敱淇℃伅 + */ + @GetMapping("getRouters") + public AjaxResult getRouters() + { + Long userId = SecurityUtils.getUserId(); + List menus = menuService.selectMenuTreeByUserId(userId); + return AjaxResult.success(menuService.buildMenus(menus)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java new file mode 100644 index 0000000000000000000000000000000000000000..fb36be67e50e2a6b62cac916d155fa8e7cfd866a --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java @@ -0,0 +1,136 @@ +package com.ruoyi.web.controller.system; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysMenu; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.service.ISysMenuService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 鑿滃崟淇℃伅 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/system/menu") +public class SysMenuController extends BaseController +{ + @Autowired + private ISysMenuService menuService; + + /** + * 鑾峰彇鑿滃崟鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('system:menu:list')") + @GetMapping("/list") + public AjaxResult list(SysMenu menu) + { + List menus = menuService.selectMenuList(menu, getUserId()); + return success(menus); + } + + /** + * 鏍规嵁鑿滃崟缂栧彿鑾峰彇璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('system:menu:query')") + @GetMapping(value = "/{menuId}") + public AjaxResult getInfo(@PathVariable Long menuId) + { + return success(menuService.selectMenuById(menuId)); + } + + /** + * 鑾峰彇鑿滃崟涓嬫媺鏍戝垪琛 + */ + @GetMapping("/treeselect") + public AjaxResult treeselect(SysMenu menu) + { + List menus = menuService.selectMenuList(menu, getUserId()); + return success(menuService.buildMenuTreeSelect(menus)); + } + + /** + * 鍔犺浇瀵瑰簲瑙掕壊鑿滃崟鍒楄〃鏍 + */ + @GetMapping(value = "/roleMenuTreeselect/{roleId}") + public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId) + { + List menus = menuService.selectMenuList(getUserId()); + AjaxResult ajax = AjaxResult.success(); + ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId)); + ajax.put("menus", menuService.buildMenuTreeSelect(menus)); + return ajax; + } + + /** + * 鏂板鑿滃崟 + */ + @PreAuthorize("@ss.hasPermi('system:menu:add')") + @Log(title = "鑿滃崟绠$悊", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysMenu menu) + { + if (!menuService.checkMenuNameUnique(menu)) + { + return error("鏂板鑿滃崟'" + menu.getMenuName() + "'澶辫触锛岃彍鍗曞悕绉板凡瀛樺湪"); + } + else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) + { + return error("鏂板鑿滃崟'" + menu.getMenuName() + "'澶辫触锛屽湴鍧蹇呴』浠ttp(s)://寮澶"); + } + menu.setCreateBy(getUsername()); + return toAjax(menuService.insertMenu(menu)); + } + + /** + * 淇敼鑿滃崟 + */ + @PreAuthorize("@ss.hasPermi('system:menu:edit')") + @Log(title = "鑿滃崟绠$悊", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysMenu menu) + { + if (!menuService.checkMenuNameUnique(menu)) + { + return error("淇敼鑿滃崟'" + menu.getMenuName() + "'澶辫触锛岃彍鍗曞悕绉板凡瀛樺湪"); + } + else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) + { + return error("淇敼鑿滃崟'" + menu.getMenuName() + "'澶辫触锛屽湴鍧蹇呴』浠ttp(s)://寮澶"); + } + else if (menu.getMenuId().equals(menu.getParentId())) + { + return error("淇敼鑿滃崟'" + menu.getMenuName() + "'澶辫触锛屼笂绾ц彍鍗曚笉鑳介夋嫨鑷繁"); + } + menu.setUpdateBy(getUsername()); + return toAjax(menuService.updateMenu(menu)); + } + + /** + * 鍒犻櫎鑿滃崟 + */ + @PreAuthorize("@ss.hasPermi('system:menu:remove')") + @Log(title = "鑿滃崟绠$悊", businessType = BusinessType.DELETE) + @DeleteMapping("/{menuId}") + public AjaxResult remove(@PathVariable("menuId") Long menuId) + { + if (menuService.hasChildByMenuId(menuId)) + { + return warn("瀛樺湪瀛愯彍鍗,涓嶅厑璁稿垹闄"); + } + if (menuService.checkMenuExistRole(menuId)) + { + return warn("鑿滃崟宸插垎閰,涓嶅厑璁稿垹闄"); + } + return toAjax(menuService.deleteMenuById(menuId)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java new file mode 100644 index 0000000000000000000000000000000000000000..d93cc566432dc5c870eab38030b02a4b850bd28b --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java @@ -0,0 +1,85 @@ +package com.ruoyi.web.controller.system; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.system.domain.SysNotice; +import com.ruoyi.system.service.ISysNoticeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 鍏憡 淇℃伅鎿嶄綔澶勭悊 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/system/notice") +public class SysNoticeController extends BaseController +{ + @Autowired + private ISysNoticeService noticeService; + + /** + * 鑾峰彇閫氱煡鍏憡鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('system:notice:list')") + @GetMapping("/list") + public TableDataInfo list(SysNotice notice) + { + startPage(); + List list = noticeService.selectNoticeList(notice); + return getDataTable(list); + } + + /** + * 鏍规嵁閫氱煡鍏憡缂栧彿鑾峰彇璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('system:notice:query')") + @GetMapping(value = "/{noticeId}") + public AjaxResult getInfo(@PathVariable Long noticeId) + { + return success(noticeService.selectNoticeById(noticeId)); + } + + /** + * 鏂板閫氱煡鍏憡 + */ + @PreAuthorize("@ss.hasPermi('system:notice:add')") + @Log(title = "閫氱煡鍏憡", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysNotice notice) + { + notice.setCreateBy(getUsername()); + return toAjax(noticeService.insertNotice(notice)); + } + + /** + * 淇敼閫氱煡鍏憡 + */ + @PreAuthorize("@ss.hasPermi('system:notice:edit')") + @Log(title = "閫氱煡鍏憡", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysNotice notice) + { + notice.setUpdateBy(getUsername()); + return toAjax(noticeService.updateNotice(notice)); + } + + /** + * 鍒犻櫎閫氱煡鍏憡 + */ + @PreAuthorize("@ss.hasPermi('system:notice:remove')") + @Log(title = "閫氱煡鍏憡", businessType = BusinessType.DELETE) + @DeleteMapping("/{noticeIds}") + public AjaxResult remove(@PathVariable Long[] noticeIds) + { + return toAjax(noticeService.deleteNoticeByIds(noticeIds)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java new file mode 100644 index 0000000000000000000000000000000000000000..27b7a26c5b4ece65d5694af42ec2ef7a0db2daf2 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java @@ -0,0 +1,123 @@ +package com.ruoyi.web.controller.system; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.domain.SysPost; +import com.ruoyi.system.service.ISysPostService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 宀椾綅淇℃伅鎿嶄綔澶勭悊 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/system/post") +public class SysPostController extends BaseController +{ + @Autowired + private ISysPostService postService; + + /** + * 鑾峰彇宀椾綅鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('system:post:list')") + @GetMapping("/list") + public TableDataInfo list(SysPost post) + { + startPage(); + List list = postService.selectPostList(post); + return getDataTable(list); + } + + @Log(title = "宀椾綅绠$悊", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:post:export')") + @PostMapping("/export") + public void export(HttpServletResponse response, SysPost post) + { + List list = postService.selectPostList(post); + ExcelUtil util = new ExcelUtil(SysPost.class); + util.exportExcel(response, list, "宀椾綅鏁版嵁"); + } + + /** + * 鏍规嵁宀椾綅缂栧彿鑾峰彇璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('system:post:query')") + @GetMapping(value = "/{postId}") + public AjaxResult getInfo(@PathVariable Long postId) + { + return success(postService.selectPostById(postId)); + } + + /** + * 鏂板宀椾綅 + */ + @PreAuthorize("@ss.hasPermi('system:post:add')") + @Log(title = "宀椾綅绠$悊", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysPost post) + { + if (!postService.checkPostNameUnique(post)) + { + return error("鏂板宀椾綅'" + post.getPostName() + "'澶辫触锛屽矖浣嶅悕绉板凡瀛樺湪"); + } + else if (!postService.checkPostCodeUnique(post)) + { + return error("鏂板宀椾綅'" + post.getPostName() + "'澶辫触锛屽矖浣嶇紪鐮佸凡瀛樺湪"); + } + post.setCreateBy(getUsername()); + return toAjax(postService.insertPost(post)); + } + + /** + * 淇敼宀椾綅 + */ + @PreAuthorize("@ss.hasPermi('system:post:edit')") + @Log(title = "宀椾綅绠$悊", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysPost post) + { + if (!postService.checkPostNameUnique(post)) + { + return error("淇敼宀椾綅'" + post.getPostName() + "'澶辫触锛屽矖浣嶅悕绉板凡瀛樺湪"); + } + else if (!postService.checkPostCodeUnique(post)) + { + return error("淇敼宀椾綅'" + post.getPostName() + "'澶辫触锛屽矖浣嶇紪鐮佸凡瀛樺湪"); + } + post.setUpdateBy(getUsername()); + return toAjax(postService.updatePost(post)); + } + + /** + * 鍒犻櫎宀椾綅 + */ + @PreAuthorize("@ss.hasPermi('system:post:remove')") + @Log(title = "宀椾綅绠$悊", businessType = BusinessType.DELETE) + @DeleteMapping("/{postIds}") + public AjaxResult remove(@PathVariable Long[] postIds) + { + return toAjax(postService.deletePostByIds(postIds)); + } + + /** + * 鑾峰彇宀椾綅閫夋嫨妗嗗垪琛 + */ + @GetMapping("/optionselect") + public AjaxResult optionselect() + { + List posts = postService.selectPostAll(); + return success(posts); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java new file mode 100644 index 0000000000000000000000000000000000000000..92f5e65548b4c9bffb26475f78b59f9e07c0bc14 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java @@ -0,0 +1,143 @@ +package com.ruoyi.web.controller.system; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.enums.ServiceResponseEnum; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.qiniu.QiNiuUploadUtils; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.framework.web.service.TokenService; +import com.ruoyi.system.service.ISysUserService; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; + +/** + * 涓汉淇℃伅 涓氬姟澶勭悊 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/system/user/profile") +public class SysProfileController extends BaseController +{ + @Resource + private ISysUserService userService; + + @Resource + private TokenService tokenService; + + @Resource + private QiNiuUploadUtils qiNiuUploadUtils; + + + /** + * 涓汉淇℃伅 + */ + @GetMapping + public AjaxResult profile() + { + LoginUser loginUser = getLoginUser(); + SysUser user = loginUser.getUser(); + AjaxResult ajax = AjaxResult.success(user); + ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername())); + ajax.put("postGroup", userService.selectUserPostGroup(loginUser.getUsername())); + return ajax; + } + + /** + * 淇敼鐢ㄦ埛 + */ + @Log(title = "涓汉淇℃伅", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult updateProfile(@RequestBody SysUser user) + { + LoginUser loginUser = getLoginUser(); + SysUser currentUser = loginUser.getUser(); + currentUser.setNickName(user.getNickName()); + currentUser.setEmail(user.getEmail()); + currentUser.setPhonenumber(user.getPhonenumber()); + currentUser.setSex(user.getSex()); + if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(currentUser)) + { + return error("淇敼鐢ㄦ埛'" + loginUser.getUsername() + "'澶辫触锛屾墜鏈哄彿鐮佸凡瀛樺湪"); + } + if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(currentUser)) + { + return error("淇敼鐢ㄦ埛'" + loginUser.getUsername() + "'澶辫触锛岄偖绠辫处鍙峰凡瀛樺湪"); + } + if (userService.updateUserProfile(currentUser) > 0) + { + // 鏇存柊缂撳瓨鐢ㄦ埛淇℃伅 + tokenService.setLoginUser(loginUser); + return success(); + } + return error("淇敼涓汉淇℃伅寮傚父锛岃鑱旂郴绠$悊鍛"); + } + + /** + * 閲嶇疆瀵嗙爜 + */ + @Log(title = "涓汉淇℃伅", businessType = BusinessType.UPDATE) + @PutMapping("/updatePwd") + public AjaxResult updatePwd(String oldPassword, String newPassword) + { + LoginUser loginUser = getLoginUser(); + String userName = loginUser.getUsername(); + String password = loginUser.getPassword(); + if (!SecurityUtils.matchesPassword(oldPassword, password)) + { + return error("淇敼瀵嗙爜澶辫触锛屾棫瀵嗙爜閿欒"); + } + if (SecurityUtils.matchesPassword(newPassword, password)) + { + return error("鏂板瘑鐮佷笉鑳戒笌鏃у瘑鐮佺浉鍚"); + } + newPassword = SecurityUtils.encryptPassword(newPassword); + if (userService.resetUserPwd(userName, newPassword) > 0) + { + // 鏇存柊缂撳瓨鐢ㄦ埛瀵嗙爜 + loginUser.getUser().setPassword(newPassword); + tokenService.setLoginUser(loginUser); + return success(); + } + return error("淇敼瀵嗙爜寮傚父锛岃鑱旂郴绠$悊鍛"); + } + + /** + * 澶村儚涓婁紶 + */ + @Log(title = "鐢ㄦ埛澶村儚", businessType = BusinessType.UPDATE) + @PostMapping("/avatar") + public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) throws Exception + { + if (!file.isEmpty()) + { + LoginUser loginUser = getLoginUser(); + //String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION); + // 鏂囦欢涓婁紶鍚嶇О + String fileUploadName = qiNiuUploadUtils.getFileUploadName(file); + // 涓婁紶锛堝帇缂╁悗鍥剧墖锛 + String avatar = qiNiuUploadUtils.uploadByte(QiNiuUploadUtils.getZipImage(file), fileUploadName); + if (StringUtils.isBlank(avatar)){ + throw new ServiceException(ServiceResponseEnum.UPLOAD_FILE_FAILED); + } + if (userService.updateUserAvatar(loginUser.getUsername(), avatar)) + { + AjaxResult ajax = AjaxResult.success(); + ajax.put("imgUrl", avatar); + // 鏇存柊缂撳瓨鐢ㄦ埛澶村儚 + loginUser.getUser().setAvatar(avatar); + tokenService.setLoginUser(loginUser); + return ajax; + } + } + return error("涓婁紶鍥剧墖寮傚父锛岃鑱旂郴绠$悊鍛"); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java new file mode 100644 index 0000000000000000000000000000000000000000..4c2cc7c668d0ad642cb329d8386e5895e9fb6228 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java @@ -0,0 +1,38 @@ +package com.ruoyi.web.controller.system; + +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.model.RegisterBody; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.framework.web.service.SysRegisterService; +import com.ruoyi.system.service.ISysConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +/** + * 娉ㄥ唽楠岃瘉 + * + * @author ruoyi + */ +@RestController +public class SysRegisterController extends BaseController +{ + @Autowired + private SysRegisterService registerService; + + @Autowired + private ISysConfigService configService; + + @PostMapping("/register") + public AjaxResult register(@RequestBody RegisterBody user) + { + if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser")))) + { + return error("褰撳墠绯荤粺娌℃湁寮鍚敞鍐屽姛鑳斤紒"); + } + String msg = registerService.register(user); + return StringUtils.isEmpty(msg) ? success() : error(msg); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java new file mode 100644 index 0000000000000000000000000000000000000000..28d4eb6df121dd86d4765d2e3be423c3053444a2 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java @@ -0,0 +1,256 @@ +package com.ruoyi.web.controller.system; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysDept; +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.framework.web.service.SysPermissionService; +import com.ruoyi.framework.web.service.TokenService; +import com.ruoyi.system.domain.SysUserRole; +import com.ruoyi.system.service.ISysDeptService; +import com.ruoyi.system.service.ISysRoleService; +import com.ruoyi.system.service.ISysUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + +/** + * 瑙掕壊淇℃伅 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/system/role") +public class SysRoleController extends BaseController +{ + @Autowired + private ISysRoleService roleService; + + @Autowired + private TokenService tokenService; + + @Autowired + private SysPermissionService permissionService; + + @Autowired + private ISysUserService userService; + + @Autowired + private ISysDeptService deptService; + + @PreAuthorize("@ss.hasPermi('system:role:list')") + @GetMapping("/list") + public TableDataInfo list(SysRole role) + { + startPage(); + List list = roleService.selectRoleList(role); + return getDataTable(list); + } + + @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:role:export')") + @PostMapping("/export") + public void export(HttpServletResponse response, SysRole role) + { + List list = roleService.selectRoleList(role); + ExcelUtil util = new ExcelUtil(SysRole.class); + util.exportExcel(response, list, "瑙掕壊鏁版嵁"); + } + + /** + * 鏍规嵁瑙掕壊缂栧彿鑾峰彇璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('system:role:query')") + @GetMapping(value = "/{roleId}") + public AjaxResult getInfo(@PathVariable Long roleId) + { + roleService.checkRoleDataScope(roleId); + return success(roleService.selectRoleById(roleId)); + } + + /** + * 鏂板瑙掕壊 + */ + @PreAuthorize("@ss.hasPermi('system:role:add')") + @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysRole role) + { + if (!roleService.checkRoleNameUnique(role)) + { + return error("鏂板瑙掕壊'" + role.getRoleName() + "'澶辫触锛岃鑹插悕绉板凡瀛樺湪"); + } + else if (!roleService.checkRoleKeyUnique(role)) + { + return error("鏂板瑙掕壊'" + role.getRoleName() + "'澶辫触锛岃鑹叉潈闄愬凡瀛樺湪"); + } + role.setCreateBy(getUsername()); + return toAjax(roleService.insertRole(role)); + + } + + /** + * 淇敼淇濆瓨瑙掕壊 + */ + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysRole role) + { + roleService.checkRoleAllowed(role); + roleService.checkRoleDataScope(role.getRoleId()); + if (!roleService.checkRoleNameUnique(role)) + { + return error("淇敼瑙掕壊'" + role.getRoleName() + "'澶辫触锛岃鑹插悕绉板凡瀛樺湪"); + } + else if (!roleService.checkRoleKeyUnique(role)) + { + return error("淇敼瑙掕壊'" + role.getRoleName() + "'澶辫触锛岃鑹叉潈闄愬凡瀛樺湪"); + } + role.setUpdateBy(getUsername()); + + if (roleService.updateRole(role) > 0) + { + // 鏇存柊缂撳瓨鐢ㄦ埛鏉冮檺 + LoginUser loginUser = getLoginUser(); + if (StringUtils.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin()) + { + loginUser.setPermissions(permissionService.getMenuPermission(loginUser.getUser())); + loginUser.setUser(userService.selectUserByUserName(loginUser.getUser().getUserName())); + tokenService.setLoginUser(loginUser); + } + return success(); + } + return error("淇敼瑙掕壊'" + role.getRoleName() + "'澶辫触锛岃鑱旂郴绠$悊鍛"); + } + + /** + * 淇敼淇濆瓨鏁版嵁鏉冮檺 + */ + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.UPDATE) + @PutMapping("/dataScope") + public AjaxResult dataScope(@RequestBody SysRole role) + { + roleService.checkRoleAllowed(role); + roleService.checkRoleDataScope(role.getRoleId()); + return toAjax(roleService.authDataScope(role)); + } + + /** + * 鐘舵佷慨鏀 + */ + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.UPDATE) + @PutMapping("/changeStatus") + public AjaxResult changeStatus(@RequestBody SysRole role) + { + roleService.checkRoleAllowed(role); + roleService.checkRoleDataScope(role.getRoleId()); + role.setUpdateBy(getUsername()); + return toAjax(roleService.updateRoleStatus(role)); + } + + /** + * 鍒犻櫎瑙掕壊 + */ + @PreAuthorize("@ss.hasPermi('system:role:remove')") + @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.DELETE) + @DeleteMapping("/{roleIds}") + public AjaxResult remove(@PathVariable Long[] roleIds) + { + return toAjax(roleService.deleteRoleByIds(roleIds)); + } + + /** + * 鑾峰彇瑙掕壊閫夋嫨妗嗗垪琛 + */ + @PreAuthorize("@ss.hasPermi('system:role:query')") + @GetMapping("/optionselect") + public AjaxResult optionselect() + { + return success(roleService.selectRoleAll()); + } + + /** + * 鏌ヨ宸插垎閰嶇敤鎴疯鑹插垪琛 + */ + @PreAuthorize("@ss.hasPermi('system:role:list')") + @GetMapping("/authUser/allocatedList") + public TableDataInfo allocatedList(SysUser user) + { + startPage(); + List list = userService.selectAllocatedList(user); + return getDataTable(list); + } + + /** + * 鏌ヨ鏈垎閰嶇敤鎴疯鑹插垪琛 + */ + @PreAuthorize("@ss.hasPermi('system:role:list')") + @GetMapping("/authUser/unallocatedList") + public TableDataInfo unallocatedList(SysUser user) + { + startPage(); + List list = userService.selectUnallocatedList(user); + return getDataTable(list); + } + + /** + * 鍙栨秷鎺堟潈鐢ㄦ埛 + */ + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.GRANT) + @PutMapping("/authUser/cancel") + public AjaxResult cancelAuthUser(@RequestBody SysUserRole userRole) + { + return toAjax(roleService.deleteAuthUser(userRole)); + } + + /** + * 鎵归噺鍙栨秷鎺堟潈鐢ㄦ埛 + */ + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.GRANT) + @PutMapping("/authUser/cancelAll") + public AjaxResult cancelAuthUserAll(Long roleId, Long[] userIds) + { + return toAjax(roleService.deleteAuthUsers(roleId, userIds)); + } + + /** + * 鎵归噺閫夋嫨鐢ㄦ埛鎺堟潈 + */ + @PreAuthorize("@ss.hasPermi('system:role:edit')") + @Log(title = "瑙掕壊绠$悊", businessType = BusinessType.GRANT) + @PutMapping("/authUser/selectAll") + public AjaxResult selectAuthUserAll(Long roleId, Long[] userIds) + { + roleService.checkRoleDataScope(roleId); + return toAjax(roleService.insertAuthUsers(roleId, userIds)); + } + + /** + * 鑾峰彇瀵瑰簲瑙掕壊閮ㄩ棬鏍戝垪琛 + */ + @PreAuthorize("@ss.hasPermi('system:role:query')") + @GetMapping(value = "/deptTree/{roleId}") + public AjaxResult deptTree(@PathVariable("roleId") Long roleId) + { + AjaxResult ajax = AjaxResult.success(); + ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId)); + ajax.put("depts", deptService.selectDeptTreeList(new SysDept())); + return ajax; + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java new file mode 100644 index 0000000000000000000000000000000000000000..f0d55f19a31022158c208b7c3b2ec78ef3c10cde --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java @@ -0,0 +1,250 @@ +package com.ruoyi.web.controller.system; + +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.entity.SysDept; +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.service.ISysDeptService; +import com.ruoyi.system.service.ISysPostService; +import com.ruoyi.system.service.ISysRoleService; +import com.ruoyi.system.service.ISysUserService; +import org.apache.commons.lang3.ArrayUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 鐢ㄦ埛淇℃伅 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/system/user") +public class SysUserController extends BaseController +{ + @Autowired + private ISysUserService userService; + + @Autowired + private ISysRoleService roleService; + + @Autowired + private ISysDeptService deptService; + + @Autowired + private ISysPostService postService; + + /** + * 鑾峰彇鐢ㄦ埛鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('system:user:list')") + @GetMapping("/list") + public TableDataInfo list(SysUser user) + { + startPage(); + List list = userService.selectUserList(user); + return getDataTable(list); + } + + @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.EXPORT) + @PreAuthorize("@ss.hasPermi('system:user:export')") + @PostMapping("/export") + public void export(HttpServletResponse response, SysUser user) + { + List list = userService.selectUserList(user); + ExcelUtil util = new ExcelUtil(SysUser.class); + util.exportExcel(response, list, "鐢ㄦ埛鏁版嵁"); + } + + @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.IMPORT) + @PreAuthorize("@ss.hasPermi('system:user:import')") + @PostMapping("/importData") + public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception + { + ExcelUtil util = new ExcelUtil(SysUser.class); + List userList = util.importExcel(file.getInputStream()); + String operName = getUsername(); + String message = userService.importUser(userList, updateSupport, operName); + return success(message); + } + + @PostMapping("/importTemplate") + public void importTemplate(HttpServletResponse response) + { + ExcelUtil util = new ExcelUtil(SysUser.class); + util.importTemplateExcel(response, "鐢ㄦ埛鏁版嵁"); + } + + /** + * 鏍规嵁鐢ㄦ埛缂栧彿鑾峰彇璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('system:user:query')") + @GetMapping(value = { "/", "/{userId}" }) + public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId) + { + userService.checkUserDataScope(userId); + AjaxResult ajax = AjaxResult.success(); + List roles = roleService.selectRoleAll(); + ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())); + ajax.put("posts", postService.selectPostAll()); + if (StringUtils.isNotNull(userId)) + { + SysUser sysUser = userService.selectUserById(userId); + ajax.put(AjaxResult.DATA_TAG, sysUser); + ajax.put("postIds", postService.selectPostListByUserId(userId)); + ajax.put("roleIds", sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList())); + } + return ajax; + } + + /** + * 鏂板鐢ㄦ埛 + */ + @PreAuthorize("@ss.hasPermi('system:user:add')") + @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@Validated @RequestBody SysUser user) + { + deptService.checkDeptDataScope(user.getDeptId()); + roleService.checkRoleDataScope(user.getRoleIds()); + if (!userService.checkUserNameUnique(user)) + { + return error("鏂板鐢ㄦ埛'" + user.getUserName() + "'澶辫触锛岀櫥褰曡处鍙峰凡瀛樺湪"); + } + else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) + { + return error("鏂板鐢ㄦ埛'" + user.getUserName() + "'澶辫触锛屾墜鏈哄彿鐮佸凡瀛樺湪"); + } + else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user)) + { + return error("鏂板鐢ㄦ埛'" + user.getUserName() + "'澶辫触锛岄偖绠辫处鍙峰凡瀛樺湪"); + } + user.setCreateBy(getUsername()); + user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); + return toAjax(userService.insertUser(user)); + } + + /** + * 淇敼鐢ㄦ埛 + */ + @PreAuthorize("@ss.hasPermi('system:user:edit')") + @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@Validated @RequestBody SysUser user) + { + userService.checkUserAllowed(user); + userService.checkUserDataScope(user.getUserId()); + deptService.checkDeptDataScope(user.getDeptId()); + roleService.checkRoleDataScope(user.getRoleIds()); + if (!userService.checkUserNameUnique(user)) + { + return error("淇敼鐢ㄦ埛'" + user.getUserName() + "'澶辫触锛岀櫥褰曡处鍙峰凡瀛樺湪"); + } + else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) + { + return error("淇敼鐢ㄦ埛'" + user.getUserName() + "'澶辫触锛屾墜鏈哄彿鐮佸凡瀛樺湪"); + } + else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user)) + { + return error("淇敼鐢ㄦ埛'" + user.getUserName() + "'澶辫触锛岄偖绠辫处鍙峰凡瀛樺湪"); + } + user.setUpdateBy(getUsername()); + return toAjax(userService.updateUser(user)); + } + + /** + * 鍒犻櫎鐢ㄦ埛 + */ + @PreAuthorize("@ss.hasPermi('system:user:remove')") + @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.DELETE) + @DeleteMapping("/{userIds}") + public AjaxResult remove(@PathVariable Long[] userIds) + { + if (ArrayUtils.contains(userIds, getUserId())) + { + return error("褰撳墠鐢ㄦ埛涓嶈兘鍒犻櫎"); + } + return toAjax(userService.deleteUserByIds(userIds)); + } + + /** + * 閲嶇疆瀵嗙爜 + */ + @PreAuthorize("@ss.hasPermi('system:user:resetPwd')") + @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.UPDATE) + @PutMapping("/resetPwd") + public AjaxResult resetPwd(@RequestBody SysUser user) + { + userService.checkUserAllowed(user); + userService.checkUserDataScope(user.getUserId()); + user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); + user.setUpdateBy(getUsername()); + return toAjax(userService.resetPwd(user)); + } + + /** + * 鐘舵佷慨鏀 + */ + @PreAuthorize("@ss.hasPermi('system:user:edit')") + @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.UPDATE) + @PutMapping("/changeStatus") + public AjaxResult changeStatus(@RequestBody SysUser user) + { + userService.checkUserAllowed(user); + userService.checkUserDataScope(user.getUserId()); + user.setUpdateBy(getUsername()); + return toAjax(userService.updateUserStatus(user)); + } + + /** + * 鏍规嵁鐢ㄦ埛缂栧彿鑾峰彇鎺堟潈瑙掕壊 + */ + @PreAuthorize("@ss.hasPermi('system:user:query')") + @GetMapping("/authRole/{userId}") + public AjaxResult authRole(@PathVariable("userId") Long userId) + { + AjaxResult ajax = AjaxResult.success(); + SysUser user = userService.selectUserById(userId); + List roles = roleService.selectRolesByUserId(userId); + ajax.put("user", user); + ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())); + return ajax; + } + + /** + * 鐢ㄦ埛鎺堟潈瑙掕壊 + */ + @PreAuthorize("@ss.hasPermi('system:user:edit')") + @Log(title = "鐢ㄦ埛绠$悊", businessType = BusinessType.GRANT) + @PutMapping("/authRole") + public AjaxResult insertAuthRole(Long userId, Long[] roleIds) + { + userService.checkUserDataScope(userId); + roleService.checkRoleDataScope(roleIds); + userService.insertUserAuth(userId, roleIds); + return success(); + } + + /** + * 鑾峰彇閮ㄩ棬鏍戝垪琛 + */ + @PreAuthorize("@ss.hasPermi('system:user:list')") + @GetMapping("/deptTree") + public AjaxResult deptTree(SysDept dept) + { + return success(deptService.selectDeptTreeList(dept)); + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java new file mode 100644 index 0000000000000000000000000000000000000000..465507ba7d65e222e548f24c30b214f103b79cf3 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java @@ -0,0 +1,172 @@ +package com.ruoyi.web.controller.tool; + +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.utils.StringUtils; +import io.swagger.annotations.*; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * swagger 鐢ㄦ埛娴嬭瘯鏂规硶 + * + * @author ruoyi + */ +@Api("鐢ㄦ埛淇℃伅绠$悊") +@RestController +@RequestMapping("/test/user") +public class TestController extends BaseController +{ + private final static Map users = new LinkedHashMap(); + { + users.put(1, new UserEntity(1, "admin", "admin123", "15888888888")); + users.put(2, new UserEntity(2, "ry", "admin123", "15666666666")); + } + + @ApiOperation("鑾峰彇鐢ㄦ埛鍒楄〃") + @GetMapping("/list") + public R> userList() + { + List userList = new ArrayList(users.values()); + return R.ok(userList); + } + + @ApiOperation("鑾峰彇鐢ㄦ埛璇︾粏") + @ApiImplicitParam(name = "userId", value = "鐢ㄦ埛ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class) + @GetMapping("/{userId}") + public R getUser(@PathVariable Integer userId) + { + if (!users.isEmpty() && users.containsKey(userId)) + { + return R.ok(users.get(userId)); + } + else + { + return R.fail("鐢ㄦ埛涓嶅瓨鍦"); + } + } + + @ApiOperation("鏂板鐢ㄦ埛") + @ApiImplicitParams({ + @ApiImplicitParam(name = "userId", value = "鐢ㄦ埛id", dataType = "Integer", dataTypeClass = Integer.class), + @ApiImplicitParam(name = "username", value = "鐢ㄦ埛鍚嶇О", dataType = "String", dataTypeClass = String.class), + @ApiImplicitParam(name = "password", value = "鐢ㄦ埛瀵嗙爜", dataType = "String", dataTypeClass = String.class), + @ApiImplicitParam(name = "mobile", value = "鐢ㄦ埛鎵嬫満", dataType = "String", dataTypeClass = String.class) + }) + @PostMapping("/save") + public R save(UserEntity user) + { + if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId())) + { + return R.fail("鐢ㄦ埛ID涓嶈兘涓虹┖"); + } + users.put(user.getUserId(), user); + return R.ok(); + } + + @ApiOperation("鏇存柊鐢ㄦ埛") + @PutMapping("/update") + public R update(@RequestBody UserEntity user) + { + if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId())) + { + return R.fail("鐢ㄦ埛ID涓嶈兘涓虹┖"); + } + if (users.isEmpty() || !users.containsKey(user.getUserId())) + { + return R.fail("鐢ㄦ埛涓嶅瓨鍦"); + } + users.remove(user.getUserId()); + users.put(user.getUserId(), user); + return R.ok(); + } + + @ApiOperation("鍒犻櫎鐢ㄦ埛淇℃伅") + @ApiImplicitParam(name = "userId", value = "鐢ㄦ埛ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class) + @DeleteMapping("/{userId}") + public R delete(@PathVariable Integer userId) + { + if (!users.isEmpty() && users.containsKey(userId)) + { + users.remove(userId); + return R.ok(); + } + else + { + return R.fail("鐢ㄦ埛涓嶅瓨鍦"); + } + } +} + +@ApiModel(value = "UserEntity", description = "鐢ㄦ埛瀹炰綋") +class UserEntity +{ + @ApiModelProperty("鐢ㄦ埛ID") + private Integer userId; + + @ApiModelProperty("鐢ㄦ埛鍚嶇О") + private String username; + + @ApiModelProperty("鐢ㄦ埛瀵嗙爜") + private String password; + + @ApiModelProperty("鐢ㄦ埛鎵嬫満") + private String mobile; + + public UserEntity() + { + + } + + public UserEntity(Integer userId, String username, String password, String mobile) + { + this.userId = userId; + this.username = username; + this.password = password; + this.mobile = mobile; + } + + public Integer getUserId() + { + return userId; + } + + public void setUserId(Integer userId) + { + this.userId = userId; + } + + public String getUsername() + { + return username; + } + + public void setUsername(String username) + { + this.username = username; + } + + public String getPassword() + { + return password; + } + + public void setPassword(String password) + { + this.password = password; + } + + public String getMobile() + { + return mobile; + } + + public void setMobile(String mobile) + { + this.mobile = mobile; + } +} diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/utils/FBSStringUtil.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/utils/FBSStringUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..6b5999a9bc649c4886d997a9b06820f3e5d2fdf0 --- /dev/null +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/utils/FBSStringUtil.java @@ -0,0 +1,40 @@ +package com.ruoyi.web.controller.utils; + +import org.apache.commons.lang3.StringUtils; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 鍔熻兘锛 + * + * @author锛歀CL + * @create锛2022-03-03 + */ +public class FBSStringUtil extends StringUtils { + + //姝e垯琛ㄨ揪寮 鍖归厤 {N} N:鏁板瓧 + private static final Pattern pattern = Pattern.compile("\\{(\\d+)\\}"); + + public static String format(String string,Object... args){ + if(string==null){ + return null; + } + Matcher matcher = pattern.matcher(string); + //鍒ゆ柇鏄惁鎵惧埌闇瑕佹浛鎹㈢殑 + if(!matcher.find()){ + return string; + } + StringBuffer stringBuffer = new StringBuffer(); + //鐢变簬宸茬粡璋冪敤浜.find()鏂规硶 涓嬫爣宸茬粡鎸姩 鍥犳 闇瑕佸厛鎵ц 鍐嶅垽鏂 浣跨敤 do while + do{ + int i = Integer.parseInt(matcher.group(1)); + //鍒ゆ柇鍗犱綅绗︽槸鍚﹀ぇ浜0 骞朵笖 鏄惁鍦 鏇挎崲鐨勬暟缁勪腑鏈夊 + if(i>=0&&i securitySchemes() + { + List apiKeyList = new ArrayList(); + apiKeyList.add(new ApiKey("Authorization", "Authorization", In.HEADER.toValue())); + return apiKeyList; + } + + /** + * 瀹夊叏涓婁笅鏂 + */ + private List securityContexts() + { + List securityContexts = new ArrayList<>(); + securityContexts.add( + SecurityContext.builder() + .securityReferences(defaultAuth()) + .operationSelector(o -> o.requestMappingPattern().matches("/.*")) + .build()); + return securityContexts; + } + + /** + * 榛樿鐨勫畨鍏ㄤ笂寮曠敤 + */ + private List defaultAuth() + { + AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); + AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; + authorizationScopes[0] = authorizationScope; + List securityReferences = new ArrayList<>(); + securityReferences.add(new SecurityReference("Authorization", authorizationScopes)); + return securityReferences; + } + + /** + * 娣诲姞鎽樿淇℃伅 + */ + private ApiInfo apiInfo() + { + // 鐢ˋpiInfoBuilder杩涜瀹氬埗 + return new ApiInfoBuilder() + // 璁剧疆鏍囬 + .title("鏍囬锛氬淇¤冭瘯绠$悊绯荤粺_鎺ュ彛鏂囨。") + // 鎻忚堪 + .description("鎻忚堪锛氱敤浜庣鐞嗛泦鍥㈡棗涓嬪叕鍙哥殑浜哄憳淇℃伅,鍏蜂綋鍖呮嫭XXX,XXX妯″潡...") + // 浣滆呬俊鎭 + .contact(new Contact(ruoyiConfig.getName(), null, null)) + // 鐗堟湰 + .version("鐗堟湰鍙:" + ruoyiConfig.getVersion()) + .build(); + } +} diff --git a/ruoyi-admin/src/main/resources/META-INF/spring-devtools.properties b/ruoyi-admin/src/main/resources/META-INF/spring-devtools.properties new file mode 100644 index 0000000000000000000000000000000000000000..37e7b5806ee4a61e35699d6f114f906efad2e500 --- /dev/null +++ b/ruoyi-admin/src/main/resources/META-INF/spring-devtools.properties @@ -0,0 +1 @@ +restart.include.json=/com.alibaba.fastjson2.*.jar \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/aliCert/alipayCertPublicKey_RSA2.crt b/ruoyi-admin/src/main/resources/aliCert/alipayCertPublicKey_RSA2.crt new file mode 100644 index 0000000000000000000000000000000000000000..9b19da2017642dc54bce677d863d1c9fd0e3f28b --- /dev/null +++ b/ruoyi-admin/src/main/resources/aliCert/alipayCertPublicKey_RSA2.crt @@ -0,0 +1,43 @@ +-----BEGIN CERTIFICATE----- +MIIDsjCCApqgAwIBAgIQICQSEy+twawoVzjNOmqevzANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE +BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs +YXNzIDIgUjEwHhcNMjQxMjEzMDMxNzU3WhcNMjkxMjEyMDMxNzU3WjCBkjELMAkGA1UEBhMCQ04x +LTArBgNVBAoMJOWtpuS/oeaVmeiCsuenkeaKgOmDkeW3nuaciemZkOWFrOWPuDEPMA0GA1UECwwG +QWxpcGF5MUMwQQYDVQQDDDrmlK/ku5jlrp0o5Lit5Zu9Kee9kee7nOaKgOacr+aciemZkOWFrOWP +uC0yMDg4MjYwMjkyODQxOTYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt3J80qwy +5S4Q/VPY15P9VZq9tCFZ/A3yC3/yLUA51im65vmxa/E8E+MDaTnZLntigrlkO9kIKNsrT22MSPE5 +Oiz0uCC7nSBbbC1VEfLqivRWwWM9/dHqoYNBtjCr2tU325KAZT6GsLQVM43ha/IVTg4saY/I7N7V +HppspEex+vR3LAk9cCzjRmYr2zY/Coaxltu+2UpFSXrYjI28snV7yUUhiHLxurqLByjiJ0YO/j7i +2mpl4NvQ7lmpqRpIFePdI+0/jXTdaLiyrw6VfbCjybS7XfyTOxzIKy0SEEklCsRqkKs9sDuk5gsT +zORZrzk5yKB1wmGJRxpWpFujpJilHwIDAQABoxIwEDAOBgNVHQ8BAf8EBAMCA/gwDQYJKoZIhvcN +AQELBQADggEBAHuC+y5xpPYR/e70u0X9bDQTmqlPsnDWM3o/ADvHXGrSdV/v+XNZq95ADSkL2dVP +sOzlDSjDFFfuZEMkb614DgQR6qyubDV8/dQPd0yDclsHYcFsnbqsVDj9H7BFo8+kGIVW08qi6VyX +sa7SEPfX+K6xlj1HriecaO/dpSwNz91UqO8pYG8t3XX6i8LH9QZJIL0QbrSEjwVeqOZsYGubT2+h +FsNcnWaLZHQhxzzIk7ZARQT3jxUEVXnsGEetksQu8sIXS1I1cgqCjwZV9jHgRlEjbkHK90bGOjIh +U3RXTKH51VPiS/fKCx2ylFi5sAlLo81WFtJIT0e3kP+QF/6rgV0= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIE4jCCAsqgAwIBAgIIYsSr5bKAMl8wDQYJKoZIhvcNAQELBQAwejELMAkGA1UEBhMCQ04xFjAU +BgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEw +LwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMy +MjE0MzQxNVoXDTM3MTEyNjE0MzQxNVowgYIxCzAJBgNVBAYTAkNOMRYwFAYDVQQKDA1BbnQgRmlu +YW5jaWFsMSAwHgYDVQQLDBdDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTE5MDcGA1UEAwwwQW50IEZp +bmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBDbGFzcyAyIFIxMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAsLMfYaoRoPRbmDcAfXPCmKf43pWRN5yTXa/KJWO0l+mrgQvs89bA +NEvbDUxlkGwycwtwi5DgBuBgVhLliXu+R9CYgr2dXs8D8Hx/gsggDcyGPLmVrDOnL+dyeauheARZ +fA3du60fwEwwbGcVIpIxPa/4n3IS/ElxQa6DNgqxh8J9Xwh7qMGl0JK9+bALuxf7B541Gr4p0WEN +G8fhgjBV4w4ut9eQLOoa1eddOUSZcy46Z7allwowwgt7b5VFfx/P1iKJ3LzBMgkCK7GZ2kiLrL7R +iqV+h482J7hkJD+ardoc6LnrHO/hIZymDxok+VH9fVeUdQa29IZKrIDVj65THQIDAQABo2MwYTAf +BgNVHSMEGDAWgBRfdLQEwE8HWurlsdsio4dBspzhATAdBgNVHQ4EFgQUSqHkYINtUSAtDPnS8Xoy +oP9p7qEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIB +AIQ8TzFy4bVIVb8+WhHKCkKNPcJe2EZuIcqvRoi727lZTJOfYy/JzLtckyZYfEI8J0lasZ29wkTt +a1IjSo+a6XdhudU4ONVBrL70U8Kzntplw/6TBNbLFpp7taRALjUgbCOk4EoBMbeCL0GiYYsTS0mw +7xdySzmGQku4GTyqutIGPQwKxSj9iSFw1FCZqr4VP4tyXzMUgc52SzagA6i7AyLedd3tbS6lnR5B +L+W9Kx9hwT8L7WANAxQzv/jGldeuSLN8bsTxlOYlsdjmIGu/C9OWblPYGpjQQIRyvs4Cc/mNhrh+ +14EQgwuemIIFDLOgcD+iISoN8CqegelNcJndFw1PDN6LkVoiHz9p7jzsge8RKay/QW6C03KNDpWZ +EUCgCUdfHfo8xKeR+LL1cfn24HKJmZt8L/aeRZwZ1jwePXFRVtiXELvgJuM/tJDIFj2KD337iV64 +fWcKQ/ydDVGqfDZAdcU4hQdsrPWENwPTQPfVPq2NNLMyIH9+WKx9Ed6/WzeZmIy5ZWpX1TtTolo6 +OJXQFeItMAjHxW/ZSZTok5IS3FuRhExturaInnzjYpx50a6kS34c5+c8hYq7sAtZ/CNLZmBnBCFD +aMQqT8xFZJ5uolUaSeXxg7JFY1QsYp5RKvj4SjFwCGKJ2+hPPe9UyyltxOidNtxjaknOCeBHytOr +-----END CERTIFICATE----- diff --git a/ruoyi-admin/src/main/resources/aliCert/alipayRootCert.crt b/ruoyi-admin/src/main/resources/aliCert/alipayRootCert.crt new file mode 100644 index 0000000000000000000000000000000000000000..76417c538f5305efe694e9b7ae4dd978045be20f --- /dev/null +++ b/ruoyi-admin/src/main/resources/aliCert/alipayRootCert.crt @@ -0,0 +1,88 @@ +-----BEGIN CERTIFICATE----- +MIIBszCCAVegAwIBAgIIaeL+wBcKxnswDAYIKoEcz1UBg3UFADAuMQswCQYDVQQG +EwJDTjEOMAwGA1UECgwFTlJDQUMxDzANBgNVBAMMBlJPT1RDQTAeFw0xMjA3MTQw +MzExNTlaFw00MjA3MDcwMzExNTlaMC4xCzAJBgNVBAYTAkNOMQ4wDAYDVQQKDAVO +UkNBQzEPMA0GA1UEAwwGUk9PVENBMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE +MPCca6pmgcchsTf2UnBeL9rtp4nw+itk1Kzrmbnqo05lUwkwlWK+4OIrtFdAqnRT +V7Q9v1htkv42TsIutzd126NdMFswHwYDVR0jBBgwFoAUTDKxl9kzG8SmBcHG5Yti +W/CXdlgwDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFEwysZfZ +MxvEpgXBxuWLYlvwl3ZYMAwGCCqBHM9VAYN1BQADSAAwRQIgG1bSLeOXp3oB8H7b +53W+CKOPl2PknmWEq/lMhtn25HkCIQDaHDgWxWFtnCrBjH16/W3Ezn7/U/Vjo5xI +pDoiVhsLwg== +-----END CERTIFICATE----- + +-----BEGIN CERTIFICATE----- +MIIF0zCCA7ugAwIBAgIIH8+hjWpIDREwDQYJKoZIhvcNAQELBQAwejELMAkGA1UE +BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmlj +YXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMyMTEzNDg0MFoXDTM4MDIyODEzNDg0 +MFowejELMAkGA1UEBhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNV +BAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5j +aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEAtytTRcBNuur5h8xuxnlKJetT65cHGemGi8oD+beHFPTk +rUTlFt9Xn7fAVGo6QSsPb9uGLpUFGEdGmbsQ2q9cV4P89qkH04VzIPwT7AywJdt2 +xAvMs+MgHFJzOYfL1QkdOOVO7NwKxH8IvlQgFabWomWk2Ei9WfUyxFjVO1LVh0Bp +dRBeWLMkdudx0tl3+21t1apnReFNQ5nfX29xeSxIhesaMHDZFViO/DXDNW2BcTs6 +vSWKyJ4YIIIzStumD8K1xMsoaZBMDxg4itjWFaKRgNuPiIn4kjDY3kC66Sl/6yTl +YUz8AybbEsICZzssdZh7jcNb1VRfk79lgAprm/Ktl+mgrU1gaMGP1OE25JCbqli1 +Pbw/BpPynyP9+XulE+2mxFwTYhKAwpDIDKuYsFUXuo8t261pCovI1CXFzAQM2w7H +DtA2nOXSW6q0jGDJ5+WauH+K8ZSvA6x4sFo4u0KNCx0ROTBpLif6GTngqo3sj+98 +SZiMNLFMQoQkjkdN5Q5g9N6CFZPVZ6QpO0JcIc7S1le/g9z5iBKnifrKxy0TQjtG +PsDwc8ubPnRm/F82RReCoyNyx63indpgFfhN7+KxUIQ9cOwwTvemmor0A+ZQamRe +9LMuiEfEaWUDK+6O0Gl8lO571uI5onYdN1VIgOmwFbe+D8TcuzVjIZ/zvHrAGUcC +AwEAAaNdMFswCwYDVR0PBAQDAgEGMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFF90 +tATATwda6uWx2yKjh0GynOEBMB8GA1UdIwQYMBaAFF90tATATwda6uWx2yKjh0Gy +nOEBMA0GCSqGSIb3DQEBCwUAA4ICAQCVYaOtqOLIpsrEikE5lb+UARNSFJg6tpkf +tJ2U8QF/DejemEHx5IClQu6ajxjtu0Aie4/3UnIXop8nH/Q57l+Wyt9T7N2WPiNq +JSlYKYbJpPF8LXbuKYG3BTFTdOVFIeRe2NUyYh/xs6bXGr4WKTXb3qBmzR02FSy3 +IODQw5Q6zpXj8prYqFHYsOvGCEc1CwJaSaYwRhTkFedJUxiyhyB5GQwoFfExCVHW +05ZFCAVYFldCJvUzfzrWubN6wX0DD2dwultgmldOn/W/n8at52mpPNvIdbZb2F41 +T0YZeoWnCJrYXjq/32oc1cmifIHqySnyMnavi75DxPCdZsCOpSAT4j4lAQRGsfgI +kkLPGQieMfNNkMCKh7qjwdXAVtdqhf0RVtFILH3OyEodlk1HYXqX5iE5wlaKzDop +PKwf2Q3BErq1xChYGGVS+dEvyXc/2nIBlt7uLWKp4XFjqekKbaGaLJdjYP5b2s7N +1dM0MXQ/f8XoXKBkJNzEiM3hfsU6DOREgMc1DIsFKxfuMwX3EkVQM1If8ghb6x5Y +jXayv+NLbidOSzk4vl5QwngO/JYFMkoc6i9LNwEaEtR9PhnrdubxmrtM+RjfBm02 +77q3dSWFESFQ4QxYWew4pHE0DpWbWy/iMIKQ6UZ5RLvB8GEcgt8ON7BBJeMc+Dyi +kT9qhqn+lw== +-----END CERTIFICATE----- + +-----BEGIN CERTIFICATE----- +MIICiDCCAgygAwIBAgIIQX76UsB/30owDAYIKoZIzj0EAwMFADB6MQswCQYDVQQG +EwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UECwwXQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNpYWwgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgRTEwHhcNMTkwNDI4MTYyMDQ0WhcNNDkwNDIwMTYyMDQ0 +WjB6MQswCQYDVQQGEwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UE +CwwXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNp +YWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRTEwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAASCCRa94QI0vR5Up9Yr9HEupz6hSoyjySYqo7v837KnmjveUIUNiuC9pWAU +WP3jwLX3HkzeiNdeg22a0IZPoSUCpasufiLAnfXh6NInLiWBrjLJXDSGaY7vaokt +rpZvAdmjXTBbMAsGA1UdDwQEAwIBBjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBRZ +4ZTgDpksHL2qcpkFkxD2zVd16TAfBgNVHSMEGDAWgBRZ4ZTgDpksHL2qcpkFkxD2 +zVd16TAMBggqhkjOPQQDAwUAA2gAMGUCMQD4IoqT2hTUn0jt7oXLdMJ8q4vLp6sg +wHfPiOr9gxreb+e6Oidwd2LDnC4OUqCWiF8CMAzwKs4SnDJYcMLf2vpkbuVE4dTH +Rglz+HGcTLWsFs4KxLsq7MuU+vJTBUeDJeDjdA== +-----END CERTIFICATE----- + +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIUEMdk6dVgOEIS2cCP0Q43P90Ps5YwDQYJKoZIhvcNAQEF +BQAwajELMAkGA1UEBhMCQ04xEzARBgNVBAoMCmlUcnVzQ2hpbmExHDAaBgNVBAsM +E0NoaW5hIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMMH2lUcnVzQ2hpbmEgQ2xhc3Mg +MiBSb290IENBIC0gRzMwHhcNMTMwNDE4MDkzNjU2WhcNMzMwNDE4MDkzNjU2WjBq +MQswCQYDVQQGEwJDTjETMBEGA1UECgwKaVRydXNDaGluYTEcMBoGA1UECwwTQ2hp +bmEgVHJ1c3QgTmV0d29yazEoMCYGA1UEAwwfaVRydXNDaGluYSBDbGFzcyAyIFJv +b3QgQ0EgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOPPShpV +nJbMqqCw6Bz1kehnoPst9pkr0V9idOwU2oyS47/HjJXk9Rd5a9xfwkPO88trUpz5 +4GmmwspDXjVFu9L0eFaRuH3KMha1Ak01citbF7cQLJlS7XI+tpkTGHEY5pt3EsQg +wykfZl/A1jrnSkspMS997r2Gim54cwz+mTMgDRhZsKK/lbOeBPpWtcFizjXYCqhw +WktvQfZBYi6o4sHCshnOswi4yV1p+LuFcQ2ciYdWvULh1eZhLxHbGXyznYHi0dGN +z+I9H8aXxqAQfHVhbdHNzi77hCxFjOy+hHrGsyzjrd2swVQ2iUWP8BfEQqGLqM1g +KgWKYfcTGdbPB1MCAwEAAaNjMGEwHQYDVR0OBBYEFG/oAMxTVe7y0+408CTAK8hA +uTyRMB8GA1UdIwQYMBaAFG/oAMxTVe7y0+408CTAK8hAuTyRMA8GA1UdEwEB/wQF +MAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBLnUTfW7hp +emMbuUGCk7RBswzOT83bDM6824EkUnf+X0iKS95SUNGeeSWK2o/3ALJo5hi7GZr3 +U8eLaWAcYizfO99UXMRBPw5PRR+gXGEronGUugLpxsjuynoLQu8GQAeysSXKbN1I +UugDo9u8igJORYA+5ms0s5sCUySqbQ2R5z/GoceyI9LdxIVa1RjVX8pYOj8JFwtn +DJN3ftSFvNMYwRuILKuqUYSHc2GPYiHVflDh5nDymCMOQFcFG3WsEuB+EYQPFgIU +1DHmdZcz7Llx8UOZXX2JupWCYzK1XhJb+r4hK5ncf/w8qGtYlmyJpxk3hr1TfUJX +Yf4Zr0fJsGuv +-----END CERTIFICATE----- \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/aliCert/appCertPublicKey_2021004113615190.crt b/ruoyi-admin/src/main/resources/aliCert/appCertPublicKey_2021004113615190.crt new file mode 100644 index 0000000000000000000000000000000000000000..93b83eda9908655b1e62c77618e832a7d0a9b86b --- /dev/null +++ b/ruoyi-admin/src/main/resources/aliCert/appCertPublicKey_2021004113615190.crt @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIIEhTCCA22gAwIBAgIQICMJBG3tZg+aadGeFYdIKDANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE +BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs +YXNzIDEgUjEwHhcNMjMwOTA0MDc1MjMwWhcNMjgwOTAyMDc1MjMwWjBNMQswCQYDVQQGEwJDTjES +MBAGA1UECgwJ5byg5biM6IuxMQ8wDQYDVQQLDAZBbGlwYXkxGTAXBgNVBAMMEDIwODgyMjIzOTM1 +NzY1MTkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCikwaX8tVdScrawVRl2ZE5Dx5S +RlK5T3Du+MYu7GhZFeKqLixxkDo6QhDaeWaFkyB23d3l0HcVwa8VDKiimjvzh+bUFcgQRAsRWQsG +kAgihRVqFnNc6oYhgFO/D9rb9fpbVqb0GahGH1NyqwqUXpnpYE5TDlkzWTgYR/jFsNQuDxeaBhZe +n2WV/Rx8j25haRoDr+pE5Ip2vEAhM8/NdzelyS8QI9sSVeMXKk7aHKZlD7ZI+49e9gtDq3SAbH7Y +U9pyYMaAawEyqOmqMv1MfmwwG3e/qy/M9cZ44ls/V+TQWQ8+Q6W3hHTPERxickjJn/fAbhZPBakQ +6ikT70DKc4IvAgMBAAGjggEpMIIBJTAfBgNVHSMEGDAWgBRxB+IEYRbk5fJl6zEPyeD0PJrVkTAd +BgNVHQ4EFgQU7dxP1lZ83DAfPz6oubAuhuLp2eowQAYDVR0gBDkwNzA1BgdggRwBbgEBMCowKAYI +KwYBBQUHAgEWHGh0dHA6Ly9jYS5hbGlwYXkuY29tL2Nwcy5wZGYwDgYDVR0PAQH/BAQDAgbAMC8G +A1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jYS5hbGlwYXkuY29tL2NybDgxLmNybDBgBggrBgEFBQcB +AQRUMFIwKAYIKwYBBQUHMAKGHGh0dHA6Ly9jYS5hbGlwYXkuY29tL2NhNi5jZXIwJgYIKwYBBQUH +MAGGGmh0dHA6Ly9jYS5hbGlwYXkuY29tOjgzNDAvMA0GCSqGSIb3DQEBCwUAA4IBAQDNG6/9a4yA +49EnjH318hGu5us0ZPExWtMKoSc95wvznOA2mPVxOaGA90HdqprY2sGmZfavP9EXp1a69dJO8A/0 +2yBCZiimZy1VWy376SZCuMlQyI0MiyXsnen/kOVZW26WmtbD3/DAJ5KBSCOWzfUWpNKnMdY2rTJ9 +RFwMW6XQANifCp5fW254yhEQdPDCKr2EP8w53EP0WMaBmTM+09YDMwZHVQJ8SLlQnfCZC1p3Xhi5 +qKpcfFxixG9Tmv2vXBWTpxANcY+xWFzdyZwUa4nNh03BATdqSDUQYXG0oVcpAi50dED7WGVuIfki +sq/c9jwk6Blffb8MpSU9ZNlaq8M6 +-----END CERTIFICATE----- \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/aliCert/appCertPublicKey_2021004196635048.crt b/ruoyi-admin/src/main/resources/aliCert/appCertPublicKey_2021004196635048.crt new file mode 100644 index 0000000000000000000000000000000000000000..8469a4e67a5c6f0bb20ce4b40f8bac021e7e13a8 --- /dev/null +++ b/ruoyi-admin/src/main/resources/aliCert/appCertPublicKey_2021004196635048.crt @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIIEoDCCA4igAwIBAgIQICQSE/BGTb8mkoup1IALlzANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE +BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs +YXNzIDEgUjEwHhcNMjQxMjEzMDMxNzU1WhcNMjkxMjEyMDMxNzU1WjBoMQswCQYDVQQGEwJDTjEt +MCsGA1UECgwk5a2m5L+h5pWZ6IKy56eR5oqA6YOR5bee5pyJ6ZmQ5YWs5Y+4MQ8wDQYDVQQLDAZB +bGlwYXkxGTAXBgNVBAMMEDIwODgyNjAyOTI4NDE5NjMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQDMoXZ6YHYjO+WiIat0oRApgo8Yx4NPN0JJ21jPf6QKM1R+jB4Dv46BqfSApptZSwyJ +2yveGyda6Ub3DeTx/PwZxOfFylbolh8JcL4kzD31qyQmHArcTcbdA1UUIN34j8asVUbZp1YAP+gx +JIQSWUNOo0UiKp0G7+C6B/5PT0y4GREIuzApxfTdoKO5+SVwhJilzxQIeAOL4+uSLN5eLMu0ceKC +sXkDNePoGqOuZpkRZKZX0KQ51yEDw8z8I1mEo4AC9g86pxqLbCt610xBMZxDk2zZ/gEDBo0i+1qI +BE2Rs/ORk/X4OBpIXPXlaS2c0PG9uKBaJagwcSFyhFYzKV+bAgMBAAGjggEpMIIBJTAfBgNVHSME +GDAWgBRxB+IEYRbk5fJl6zEPyeD0PJrVkTAdBgNVHQ4EFgQUh9vF60mC7h6QIejnA5f5usmBV7sw +QAYDVR0gBDkwNzA1BgdggRwBbgEBMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9jYS5hbGlwYXkuY29t +L2Nwcy5wZGYwDgYDVR0PAQH/BAQDAgbAMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly9jYS5hbGlw +YXkuY29tL2NybDk2LmNybDBgBggrBgEFBQcBAQRUMFIwKAYIKwYBBQUHMAKGHGh0dHA6Ly9jYS5h +bGlwYXkuY29tL2NhNi5jZXIwJgYIKwYBBQUHMAGGGmh0dHA6Ly9jYS5hbGlwYXkuY29tOjgzNDAv +MA0GCSqGSIb3DQEBCwUAA4IBAQAON+Ajlp0QU9NqAK4jSfndw7VcElKEgATBBMS34E2IhntN1Gcm +fAboxuQ6Y/vx805V9L4E1MI6GqOubSUPVBb5POZP0Ya98kaX9VURd5UDMsM+ePkMSboMxsEccbbc +IQq1SxMdxGA9FoHvuuDnAY2/9GIMf0CRiPCQIZKInC8i/QwUllysOjwMfiZCWTrni96yup8ADJJ4 +KIe+F6PJ0T+6AwMELpl2TECvUnRnYj8henl1n8rGsa4VfoPxGWuR3yxFlEPJe47TIqxbZRabslb1 +tDacXmErRLlE4CLdOicMMnrwpQ7/csMC3xaZLsVr9E9LNJx75P/5Ygmwa4QNQ5Ql +-----END CERTIFICATE----- \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/apiclient_cert.p12 b/ruoyi-admin/src/main/resources/apiclient_cert.p12 new file mode 100644 index 0000000000000000000000000000000000000000..fd402e9bc5e85c87ee9558f9dba7e984e776ce53 Binary files /dev/null and b/ruoyi-admin/src/main/resources/apiclient_cert.p12 differ diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml new file mode 100644 index 0000000000000000000000000000000000000000..94920309b97fe5611320bb23d656fae971851a38 --- /dev/null +++ b/ruoyi-admin/src/main/resources/application-druid.yml @@ -0,0 +1,65 @@ +# 鏁版嵁婧愰厤缃 +spring: + datasource: + type: com.alibaba.druid.pool.DruidDataSource + driverClassName: com.mysql.cj.jdbc.Driver + druid: + # 涓诲簱鏁版嵁婧 + master: +# 姝e紡 + url: jdbc:mysql://bj-cynosdbmysql-grp-n5eqi41m.sql.tencentcdb.com:21430/xuexinkaoshi_db?useUnicode=true&allowMultiQueries=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + username: xuexinkaoshi + password: F6rX&N9ms2xWeTx@6QWtrEn + # 浠庡簱鏁版嵁婧 + slave: + # 浠庢暟鎹簮寮鍏/榛樿鍏抽棴 + enabled: false + url: + username: + password: + # 鍒濆杩炴帴鏁 + initialSize: 10 + # 鏈灏忚繛鎺ユ睜鏁伴噺 + minIdle: 10 + # 鏈澶ц繛鎺ユ睜鏁伴噺 + maxActive: 200 + # 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂 + maxWait: 6000 + # 閰嶇疆杩炴帴瓒呮椂鏃堕棿 + connectTimeout: 30000 + # 閰嶇疆缃戠粶瓒呮椂鏃堕棿 + socketTimeout: 60000 + # 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣 + timeBetweenEvictionRunsMillis: 60000 + # 閰嶇疆涓涓繛鎺ュ湪姹犱腑鏈灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 + minEvictableIdleTimeMillis: 300000 + # 閰嶇疆涓涓繛鎺ュ湪姹犱腑鏈澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 + maxEvictableIdleTimeMillis: 900000 + # 閰嶇疆妫娴嬭繛鎺ユ槸鍚︽湁鏁 + validationQuery: SELECT 1 + removeAbandoned: true # 寮鍚硠婕忚繛鎺ュ洖鏀 + removeAbandonedTimeout: 120 # 鎵ц瓒呰繃120绉掓湭鍏抽棴鐨勮繛鎺ヨ涓烘硠婕 + logAbandoned: true # 璁板綍娉勬紡鍫嗘爤锛屽畾浣嶆湭鍏抽棴杩炴帴鐨勪唬鐮佷綅缃 + testWhileIdle: true + testOnBorrow: false + testOnReturn: false + webStatFilter: + enabled: true + statViewServlet: + enabled: true + # 璁剧疆鐧藉悕鍗曪紝涓嶅~鍒欏厑璁告墍鏈夎闂 + allow: + url-pattern: /druid/* + # 鎺у埗鍙扮鐞嗙敤鎴峰悕鍜屽瘑鐮 + login-username: ruoyi + login-password: 123456 + filter: + stat: + enabled: true + # 鎱QL璁板綍 + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: true + wall: + config: + multi-statement-allow: true diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..d1b1d2af3ed62e5857369214b6a29554604e2645 --- /dev/null +++ b/ruoyi-admin/src/main/resources/application.yml @@ -0,0 +1,284 @@ +# 椤圭洰鐩稿叧閰嶇疆 +ruoyi: + # 鍚嶇О + name: RuoYi + # 鐗堟湰 + version: 3.8.8 + # 鐗堟潈骞翠唤 + copyrightYear: 2024 + # 鏂囦欢璺緞 绀轰緥锛 Windows閰嶇疆D:/ruoyi/uploadPath锛孡inux閰嶇疆 /home/ruoyi/uploadPath锛 + profile: E:\java\椤圭洰\IDEA\瀛︿俊鑰冭瘯\uploadPath + # 鑾峰彇ip鍦板潃寮鍏 + addressEnabled: false + # 楠岃瘉鐮佺被鍨 math 鏁板瓧璁$畻 char 瀛楃楠岃瘉 + captchaType: math + +# 寮鍙戠幆澧冮厤缃 +server: + # 鏈嶅姟鍣ㄧ殑HTTP绔彛锛岄粯璁や负8080 + port: 8080 + servlet: + # 搴旂敤鐨勮闂矾寰 + context-path: / + tomcat: + # tomcat鐨刄RI缂栫爜 + uri-encoding: UTF-8 + # 杩炴帴鏁版弧鍚庣殑鎺掗槦鏁帮紝榛樿涓100 + accept-count: 1000 + threads: + # tomcat鏈澶х嚎绋嬫暟锛岄粯璁や负200 + max: 800 + # Tomcat鍚姩鍒濆鍖栫殑绾跨▼鏁帮紝榛樿鍊10 + min-spare: 100 + +# 鏃ュ織閰嶇疆 +logging: + level: + com.ruoyi: debug + org.springframework: warn + +# 鐢ㄦ埛閰嶇疆 +user: + password: + # 瀵嗙爜鏈澶ч敊璇鏁 + maxRetryCount: 5 + # 瀵嗙爜閿佸畾鏃堕棿锛堥粯璁10鍒嗛挓锛 + lockTime: 10 + +# Spring閰嶇疆 +spring: + # 璧勬簮淇℃伅 + messages: + # 鍥介檯鍖栬祫婧愭枃浠惰矾寰 + basename: i18n/messages + profiles: + active: druid + # 鏂囦欢涓婁紶 + servlet: + multipart: + # 鍗曚釜鏂囦欢澶у皬 + max-file-size: 100MB + # 璁剧疆鎬讳笂浼犵殑鏂囦欢澶у皬 + max-request-size: 100MB + # 鏈嶅姟妯″潡 + devtools: + restart: + # 鐑儴缃插紑鍏 + enabled: true + # redis 閰嶇疆 + redis: + # 鍦板潃 + host: localhost + # 绔彛锛岄粯璁や负6379 + port: 6379 + # 鏁版嵁搴撶储寮 + database: 0 + # 瀵嗙爜 + password: + # 杩炴帴瓒呮椂鏃堕棿 + timeout: 10s + lettuce: + pool: + # 杩炴帴姹犱腑鐨勬渶灏忕┖闂茶繛鎺 + min-idle: 0 + # 杩炴帴姹犱腑鐨勬渶澶х┖闂茶繛鎺 + max-idle: 8 + # 杩炴帴姹犵殑鏈澶ф暟鎹簱杩炴帴鏁 + max-active: 8 + # #杩炴帴姹犳渶澶ч樆濉炵瓑寰呮椂闂达紙浣跨敤璐熷艰〃绀烘病鏈夐檺鍒讹級 + max-wait: -1ms + +# token閰嶇疆 +token: + # 浠ょ墝鑷畾涔夋爣璇 + header: Authorization + # 浠ょ墝瀵嗛挜 + secret: 5edwP5lcsS26Pr0vzNbd0sud2WOcNCR5 + # 浠ょ墝鏈夋晥鏈燂紙榛樿30鍒嗛挓锛 + expireTime: 180 + +# MyBatis閰嶇疆 +mybatis: + # 鎼滅储鎸囧畾鍖呭埆鍚 + typeAliasesPackage: com.ruoyi.**.domain + # 閰嶇疆mapper鐨勬壂鎻忥紝鎵惧埌鎵鏈夌殑mapper.xml鏄犲皠鏂囦欢 + mapperLocations: classpath*:mapper/**/*Mapper.xml + # 鍔犺浇鍏ㄥ眬鐨勯厤缃枃浠 + configLocation: classpath:mybatis/mybatis-config.xml + +# PageHelper鍒嗛〉鎻掍欢 +pagehelper: + helperDialect: mysql + supportMethodsArguments: true + params: count=countSql + +# Swagger閰嶇疆 +swagger: + # 鏄惁寮鍚痵wagger + enabled: true + # 璇锋眰鍓嶇紑 + pathMapping: /dev-api + +# 闃叉XSS鏀诲嚮 +xss: + # 杩囨护寮鍏 + enabled: true + # 鎺掗櫎閾炬帴锛堝涓敤閫楀彿鍒嗛殧锛 + excludes: /system/notice + # 鍖归厤閾炬帴 + urlPatterns: /system/*,/monitor/*,/tool/* + +# 涓冪墰浜 +qiNiu: + accessKey: XfYrjoMYsmwr_mRgGVDvDh9A-CAm3qpA2OqqHNyO + secretKey: tWJjsaYPBBACuyw8CfaF9h2BRUziuje_zwrz4GyE + bucketName: xiaoniu666666 + baseUrl: https://image.xnszz.com/ + # 纾佺洏锛氬浘鐗囨枃浠跺す鍦板潃 + imgFolderUrl: /usr/local/hezhi/imgFile + # 纾佺洏:鏂囦欢璁块棶鍦板潃 + localBaseUrl: https://jxjykcsz.hnzj.edu.cn/imgFile/ + + # 寰俊鏀粯 +wxpay: + # 鍏紬鍙凤紝灏忕▼搴忔垨App 搴旂敤缂栧彿 + appId: wx8de56186c26a6a76 + # appSecret 鏄 appId 瀵瑰簲鐨勬帴鍙e瘑鐮侊紝寰俊鍏紬鍙锋巿鏉冭幏鍙栫敤鎴 openId 鏃朵娇鐢 + appSecret: 4778276c6b80b6e6745f37e04f11d991 + # 寰俊鏀粯鍟嗘埛鍙 + mchId: 1626255991 + # API 瀵嗛挜 v2 + partnerKey: ZX3wMtpyFRJqhZQJ46jFwg2zJwJ922fp + # apiclient_cert.p1 璇佷功璺緞锛屽湪寰俊鍟嗘埛鍚庡彴涓嬭浇 v3 浣跨敤 + certPath: /home/haet/cert/apiclient_key.p12 + # 澶栫綉璁块棶椤圭洰鐨勫煙鍚嶏紝鏀粯閫氱煡涓細浣跨敤 + domain: https://web.haet.org.cn/interface + +# 鏀粯瀹濇敮浠 +#alipay: +# # 搴旂敤缂栧彿 +# appId: 2021004123609429 +# # 缂栫爜鏍煎紡 +# charset: utf-8 +# # 璇锋眰 +# format: json +# # 绛惧悕绠楁硶 +# signType: RSA2 +# # 绉侀挜 +# privateKey: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCSjl5ZiGHVYW5TA7tU2CMpX8ym/1wfY9CtElhF4hK95zluBausc0L7FsVq5SfIA2t9oEzAyslzIOfLS84WMT8BBFkoInP3DWWN5Vv+wRqdOG+A29n5HCpgjDvfsPen9VkKnBBlIYUKtxBX2mygprfw8vhsSygyp45CXJqNwNYmS4wmWJNfw90H62pu31z+8SF+K8rsdyokaMPzSbh9r+7d53cj/iQJ9UZyvX72tAlEPCeGbcMEVVz3lwyOnn3Xw9b4fGtQ+mi/snoe/jng3GJojerW0S253gHiW7ZeZZjeTf9nDzzDqtUXRfQVxdSKouwMGGBmTNUdfhWpLq9252EVAgMBAAECggEAE5ydn5mSjf1lyBIdxXLO8cByIH7XkxPGXwKvcVqZa3Q/yStVF9Ssx/D6Jh3YPvnGLp9+5eW9I3zpx9izEWExry8nxyklH5BZYK2qq+KnbxaYRUQmXSGZwiXB9WM3IPDCI5tSzlW3+gEZXMhL9QuaXdIF0GgWTwEBFnxR6lo9zg3mKJ7xkgZpU/4jgbk+zsbbEFb7h6IlZbsPjNCp+sgqeBurCrPTf2g82YY/il/lqL88S/nP1D0l6S7xrCC7M1dVnq3wE02ZhSMJd97taJk+OnFSgPZuUaqUUtrCzXgVjcKHJIvI9jMa4gl5J8oiRL4BMzSVLO1fZN2F15dpoTRk2QKBgQDJJoRY5KI0y/YhdMyevojKgJBVYnQKDmy5jFu9Z7xkFUD0qYCVSNK8NB4SfQV4pydP6pX30wdK98/xS8RHZ6PvvSWR1rDg+SRZpvu6jlOmCiP5eIAHaLYW3T3biQInh4mheGinnc0hWLyUtXJuvIpkvVytADMx6MhSPBF2eLSYewKBgQC6hNjGzN18uosa3CkHdeTt3sfkCTvIdbc7CXSkaAfSd6wUpz5EV1tHWNyxScSD3iZiZy4lCgtlH6/ngSIKaq35Y0jf3QTKxnsExQ+Yf5XJ+xARLXu686l3JomE4+Y+jVnLqChvnAbjLLDckPpOiz3k21IUJnLzagsYdGAIdeDfrwKBgQCLWQSMdG8udjGfgcOTIVmwN5pFnHvYz59gdyzCrM+k4dhq5dXvFVDwEobWtgeJSvr/8PpNgcLmm4BRn/Rspw65sWYKfxlv8QjOltCCr8ChIRtE4saG23JxqnkE0ghNDCc7VifiHn6R4GBcAMsyjaiuG0TNkHrm02WbGoPad8pcawKBgQCq8Ju3vwPyjwhz6nhT1RGli7qI3ImE05XFLopPLuSUWIdGOmyPt7v5LJC+jsviyxNEtimNWqJM4HiXZDrtbw3Y9MxSFr6QlM0j9vKvIacHAOidxaCTG0Mh5xi7yR44D9XPF2NPvqB1TX0d+GTe3TAxcWvM+dv6CCL5G5bzygz5EwKBgGR7rl5LEhHi1ATXFnvKP+CGRmS+M3XtHjrbHmrX0UO20JRR9HVF0lGvOWTe8uVT0FE2U5etVR4mZLyPah2HhMaiY3j2Y8BcRo4aegHltJgb/NubtQ37stJStKadiQ+XgIksxuLRph6tk4RP6iswwdKLOj0XtO/P0Hn6UlLt0zb4 +# # 鍏挜 +# publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAko5eWYhh1WFuUwO7VNgjKV/Mpv9cH2PQrRJYReISvec5bgWrrHNC+xbFauUnyANrfaBMwMrJcyDny0vOFjE/AQRZKCJz9w1ljeVb/sEanThvgNvZ+RwqYIw737D3p/VZCpwQZSGFCrcQV9psoKa38PL4bEsoMqeOQlyajcDWJkuMJliTX8PdB+tqbt9c/vEhfivK7HcqJGjD80m4fa/u3ed3I/4kCfVGcr1+9rQJRDwnhm3DBFVc95cMjp5918PW+HxrUPpov7J6Hv454NxiaI3q1tEtud4B4lu2XmWY3k3/Zw88w6rVF0X0FcXUiqLsDBhgZkzVHX4VqS6vdudhFQIDAQAB +# # 搴旂敤鍏挜璇佷功 +## appCertPath: appCertPath +## # 鏀粯瀹濆叕閽ヨ瘉涔 +## aliPayCertPath: aliPayCertPath +## # 鏀粯瀹濇牴璇佷功 +## aliPayRootCertPath: aliPayRootCertPath +# # 搴旂敤鍏挜璇佷功璺緞 +# appCertPath: E:\java\椤圭洰\IDEA\瀛︿俊鑰冭瘯\瀛︿俊鑰冭瘯javaSVN\ruoyi-admin\src\main\resources\aliCert\appCertPublicKey_2021004113615190.crt +# # 鏀粯瀹濆叕閽ヨ瘉涔﹁矾寰 +# aliPayCertPath: E:\java\椤圭洰\IDEA\瀛︿俊鑰冭瘯\瀛︿俊鑰冭瘯javaSVN\ruoyi-admin\src\main\resources\aliCert\alipayCertPublicKey_RSA2.crt +# # 鏀粯瀹濇牴璇佷功璺緞 +# aliPayRootCertPath: E:\java\椤圭洰\IDEA\瀛︿俊鑰冭瘯\瀛︿俊鑰冭瘯javaSVN\ruoyi-admin\src\main\resources\aliCert\alipayRootCert.crt +# # 鏀粯瀹濇敮浠樼綉鍏筹紝娌欑鐜鏃惰缃负 https://openapi.alipaydev.com/gateway.do +# # 浣跨敤姝e紡鐜鏃惰缃负 https://openapi.alipay.com/gateway.do +# serverUrl: https://openapi.alipaydev.com/gateway.do +# # 澶栫綉璁块棶椤圭洰鐨勫煙鍚嶏紝鏀粯閫氱煡涓細浣跨敤 +# domain: https://web.haet.org.cn/interface +# notifyUrl: https://web.haet.org.cn/interface + +# 寰俊鍙傛暟閰嶇疆 +wx: + gzh: + # 灏忕▼搴廼d + appId: wx5049d19335c00bd7 + # 灏忕▼搴忓瘑閽 + appSecret: 6c55fb745574171e443b0f7db52f7465 + token: NWpe3CC9Pefg0ymu + encodingAESKey: 8lsn9B4HDu2D9hzxIrL7ShrTsSPWyupb2TxaqONR8Uy + xcx: + # 灏忕▼搴廼d + appId: wx8de56186c26a6a76 + # 灏忕▼搴忓瘑閽 + appSecret: af6b5009cdaebc647c5d6327ad25e848 + # 榛樿澶村儚 + avatarUrl: https://image.xnszz.com/2024/04/16/6098aa849b0cb029031dd2544b2a4cef_20240416225245A003.png + # 榛樿鏄电О + nickName: "寰俊鐢ㄦ埛" + + + miniProgram: + # 灏忕▼搴廼d + appId: wx8de56186c26a6a76 + # 灏忕▼搴忓瘑閽 + appSecret: 4778276c6b80b6e6745f37e04f11d991 + # 灏忕▼搴忕爜璺宠浆椤甸潰 + wxPath: pages/index/index?higherUserId= + # 浜岀淮鐮佽烦杞 + qrCodeLink: https://server.xuexin.com/miniprogram/ + # 灏忕▼搴忓彂璐 + deliveryUrl: https://api.weixin.qq.com/wxa/sec/order/upload_shipping_info?access_token= + + pay: + # 灏忕▼搴廼d + appId: wx8de56186c26a6a76 + # 灏忕▼搴忓晢鎴峰彿 + mchId: 1676393913 + # api璇佷功搴忓垪鍙 + mchSerialNum: 6DF5A667D3924D6F33A5537A739309041B6B7693 + # apiV3瀵嗛挜 + apiV3Key: yFRJqhZQJ45wrwg2zJwokb40P7Yn2123 + # 寰俊鏀粯鍥炶皟閫氱煡鍩熷悕 + notifyUrl: https://server.chsie.com.cn/api/pay/createNativePayParamNotify + # 鏀粯瀹濇敮浠樺洖璋冮氱煡鍩熷悕 + notifyZfbUrl: https://server.chsie.com.cn/api/pay/aliPayBoilerNotify + # 鍟嗗搧鎻忚堪 + description: 瀛︿俊鑰冭瘯 + # 璇佷功瀵嗛挜 + apiClientKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCYx8UTdItOSLGNZF/wBP2DWe6iF33l+80X+MQZtTYyAhfWu2HblnOm+LN9yc/S/Jyft5LbWj58/4jk1idPzXoDoYWf5UcyyCXXVTIZhuS7zuwsaVL6jdrdHxTeeu+LkSiJGKDrw10M8M0Utf2LQxdCIel/yZY59iOSPcF5sMfhpMgmMFB7LbDfStNHFku4IW/iIV+FzOI/NVaTwN2MXpgdSVnJnhV+HuHchqW+yA2fONaLgglQyNn748onSH/zzEQFYezkHgi1z8J7gxfK8HG83Bjj62ybL3LPhpe9cnB7J+suc1a+8EjFcMDiM9HH1NFbF947OoaVUU6NwZOfVB/tAgMBAAECggEBAJJuHcAY2o+scqhexOjKD6S+JE6tD1jHLvpDzsgI+6mQggKoVBFfsPcetQHh1FOXFBKsoo+kffHWBQG3E7ST7tbeD7GB0eylEkfBeyQmOsKaf5fNVt+X6GY4rQrTbxYoiV5lAY8WDvAhN54bE6hPJFKZKC/3KQnilJNMp0wYGGt1xdMtFmLn0nzhA4TYX6UWUaAV8T1e4gRjkUVCdTRTF4RqJQISzXsXCMh/UkbYNno/hxHHvur5Nd9QzXVzEoieRmrkVHWtbL1+hUnvi2JthRefRfdXESax2rWeqRumOQzxpkjymMBFngc8ze9lQlHtgw2nFaa4U4DlJVCKk8YQXAECgYEAyB+pphD7geNIV98TEFH5Rbh9WSgQrw2K6crUjbY6HFFmbgRRoHKMaHqCMeb7cOmDTlQzDQPr2w8Wa+rNIcCfS/y5ZprGdOOAn8JEIXpRFJrEyYHyGwKd2zNkXUVx9mXlQp1bQLbTTlOI5GSuB54zUeLGK8i/MLHu2q4NTvfjGQECgYEAw3Af+poh2/QiNG8/Sr/6nO363LRGlcTpCiPWn66oMOOcnpHrIT9YqqBFh0MxcN/9P7r92IrLn0fwE6XaprfXSJZQiQRhKE3A6zhq0G+/iM1yngCdt8Wf1Kf9/lHn7ksxokBSCcCiTlAhyXTdgoAyckOww1VJ1iiJWnB6Sqir+u0CgYBVpn+ETMZn+++NdDMDjCIEvgYf727cjQ5EK4Q3NqO+VPRi58RLyFrhqHUqiHJbDAYfsxe6XVBHjDiLbY3oATnsWri6+kkv4+K7/XgNX/1ttSO+HriQ6NjI5UDyTnONAmVR0mko1Faxsjzni1OUfRf31vf760owvCa/PzkA8EUpAQKBgBQ065mFhiqvuzmgpvKbltXS5TUcjo+9pDqgKfionksvvWnHvH/bhNdfatDpaZs6DX0hYE2bTCJT1cayR0ElkOS4ZetEwKbiIygu1Rxn8W27kDY16hiuHjBmjiRVY52HuMIF1HWdrSpbrqKdqqlrh8u4o/YOQ2wZFNp89qfxeJahAoGAD8etps+mEO6GJesJclzGBwvbLAzQjHqniLuRzZgoOOI7Fe5lOjXguFUVlUj+l8NujlzF7SvMWOg/y+DZfOX25OoRG0vmtxsEHNPSzlvBXuF3DCkEDv51lcxWB0LH6RG/0lAguFR3HBAO0xybYdExzh/Ng6f1jpxJ/G1+1sdOLHg= + + login: + appId: wx8de56186c26a6a76 + appSecret: 4778276c6b80b6e6745f37e04f11d991 + redirectUrl: https://web.xuexin.com/ + +# 鏀粯瀹濆弬鏁拌缃 +alipay: + appPay: + # app搴旂敤id + appId: 2021005106641404 + # 鏀粯璇锋眰鍦板潃 + url: https://openapi.alipay.com/gateway.do + # 缂栫爜鏍煎紡 + charset: utf-8 + # 璇锋眰 + format: json + # 绛惧悕绠楁硶 + signType: RSA2 + # 鍥炶皟鍦板潃 +# notifyUrl: http://tdj58s.natappfree.cc + notifyUrl: https://server.chsie.com.cn + # 绉侀挜 + privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCn8XBvCUuPU4rcYr+9wd4K07JhDA3rlfGYDkhajXpgpCRLb9TBZFxNodhcpD3n2BJh/PPzB7koGNTHvJ8qBjdxF5GcS2LXYXG6Zlq7uCZg1bZG2FkQV/EZo5Su7DOit5UQjInhE4mLJbb+wfCRt3bnMP7IUwYmdOWnQj2JKuowYbS+3n8VpVlDpR3gJNdjChRY6gko6048oC7+shk05Z+a9nEsQdTQMG8kMkfTCczKuq0xFGon7rlUJJFc1XE7HJGc9Dz4rg/ECAeQlF+Etw00x9MgZaiIP1gNx0HBtAcb2J3xSBs2ElNjzfw/r5p3cPOgaxUUnH3apW4t1pg8Q0kVAgMBAAECggEAYLLVASoB9rGsp764FmOVHPjNobFWJoq8g8fdgz4o85IvT7xBbWUC/LQupxDukBrKYt9J+2o8A0lg4uzJXGId9CEU90A01jzGRgR/Q80BVApZnKsfhRiNuyyEBL/97zfzPYceMJmWPadmmYNDqDNR5EZCvUeIqAXw4YBzfBJYq6fylGuKkskyY/ZxMhNCFddNSQkjlrpG/OIGl/m9G0l6fK1dK7KyKkkXfSSfUOvqfY9avh4ZGO23/rU5F8BxUicxXuIAUrXcb3Ovf227CBa4OrK+PzafIN5Zl6qxHuNBk/BuguM+Qz5TR5tIpMC9BTN1uTC1COZxnTFmwvtm0h17AQKBgQD+x966x1PsVuGV1Zpy1Cu/NOjsohvhEhW4cu+N4+n5vG7f8UNUlFphhUQMatSNnQK7PkIHltFolFkp9uE3950trnpUhGCyKnbNOEV27+ULGZkGH6dOI44VFJSiaewNWCqfMtOE8iyYCTktfq3JcmuZIk/fxEy7y0s6TLWxPY/+QQKBgQCovy9fCx9iZsxbRN/bxL7fpMPCEwvgCoh8U3Z5EtYQtH06srqC1Qp505MqTqu+J4MYMcJtX7Myvyz7UfGjcDqU+UKvAhAHc9wzLhv4UKQsHhtiihwnvw3ZPgcftyntyf0mR6Ox8rNemfK/ADncpedhsWX5kX9KhpH2P+NyLo991QKBgBbU8HfKfxHR41tbDgE2VElJQ4pZKKhtx3aFDkSn5QLVSRZWd5MvzD2rBKMcO7oJFQKUnLQzZsa5bJgfIKW0UeiTFzFVv5iXx5eycD8tVlg9TgJHeeW9t/DZrEw1s8qqWP91PZFPZoGlafNSw94mm8/YTFIgNEQr/qzVzP56JtpBAoGBAIpGD0UsUg1J+w6Ww3DMKTQNSTOQc9ykBO8LXTscyjhqDWu55McsVyc4zZCPYn+w1OVQcOc60hY1PWC65uxsHDTSg2fwor3YnIl7sQOq4Lwd94apcSTIk0p+X0wHxN3K9BsX/PTl0UElmRoVz1QUxiLxQIReSxYAaz6DX5bCvGX5AoGAQIlajiB2hUOZrRltLiyPmXoRXGpyLBRas1iw8o81wBJWKatHeWZNTdWIEzuISzx9Qh6tdgthD33dwk6+mUHK51ewS/Cuh71ZlNw4kS1n7KUl0vxDTcVs2d+sFcZyveBo1Kj08QXh/QqywindKGsakPJg56JmVwjvp0GLmS/BdOA= + # 鍏挜 + publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt3J80qwy5S4Q/VPY15P9VZq9tCFZ/A3yC3/yLUA51im65vmxa/E8E+MDaTnZLntigrlkO9kIKNsrT22MSPE5Oiz0uCC7nSBbbC1VEfLqivRWwWM9/dHqoYNBtjCr2tU325KAZT6GsLQVM43ha/IVTg4saY/I7N7VHppspEex+vR3LAk9cCzjRmYr2zY/Coaxltu+2UpFSXrYjI28snV7yUUhiHLxurqLByjiJ0YO/j7i2mpl4NvQ7lmpqRpIFePdI+0/jXTdaLiyrw6VfbCjybS7XfyTOxzIKy0SEEklCsRqkKs9sDuk5gsTzORZrzk5yKB1wmGJRxpWpFujpJilHwIDAQAB + +kd100: + key: RncCaiLs1957 + customer: BCC428E7B772C34C996F2C4E881BCEBE + secret: be06bf9fba63415d9938277073c9e3e9 + userid: 50c79287f332460fa92812069c3ffec3 + check: RncCaiLs1957 + +# 鑵捐鐭俊楠岃瘉鐮 +tencentSmsCode: + secretId: AKIDcEgyrdCZkjU1KUTElDYhfS2a3LdrunYM + secretKey: kHfsujKi5GEyVqytb7RYR7ZnoocDbmnd + # 鐭俊搴旂敤ID + sdkAppId: 1400630743 + # 鐭俊绛惧悕鍐呭 + signName: 灏忕墰绉戞妧 + # 妯℃澘 ID + templateId: 2411208 + # 鎵嬫満楠岃瘉鐮佽繃鏈熸椂闂达紙鍒嗛挓锛 + smsCodeExpire: 5 \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/banner.txt b/ruoyi-admin/src/main/resources/banner.txt new file mode 100644 index 0000000000000000000000000000000000000000..0931cb84428b04a15f637865d9c9c00f5a408419 --- /dev/null +++ b/ruoyi-admin/src/main/resources/banner.txt @@ -0,0 +1,24 @@ +Application Version: ${ruoyi.version} +Spring Boot Version: ${spring-boot.version} +//////////////////////////////////////////////////////////////////// +// _ooOoo_ // +// o8888888o // +// 88" . "88 // +// (| ^_^ |) // +// O\ = /O // +// ____/`---'\____ // +// .' \\| |// `. // +// / \\||| : |||// \ // +// / _||||| -:- |||||- \ // +// | | \\\ - /// | | // +// | \_| ''\---/'' | | // +// \ .-\__ `-` ___/-. / // +// ___`. .' /--.--\ `. . ___ // +// ."" '< `.___\_<|>_/___.' >'"". // +// | | : `- \`.;`\ _ /`;.`/ - ` : | | // +// \ \ `-. \_ __\ /__ _/ .-` / / // +// ========`-.____`-.___\_____/___.-`____.-'======== // +// `=---=' // +// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // +// 浣涚淇濅綉 姘镐笉瀹曟満 姘告棤BUG // +//////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/i18n/messages.properties b/ruoyi-admin/src/main/resources/i18n/messages.properties new file mode 100644 index 0000000000000000000000000000000000000000..93de0055b88777639f269935b652207b53c9078a --- /dev/null +++ b/ruoyi-admin/src/main/resources/i18n/messages.properties @@ -0,0 +1,38 @@ +#閿欒娑堟伅 +not.null=* 蹇呴』濉啓 +user.jcaptcha.error=楠岃瘉鐮侀敊璇 +user.jcaptcha.expire=楠岃瘉鐮佸凡澶辨晥 +user.not.exists=鐢ㄦ埛涓嶅瓨鍦/瀵嗙爜閿欒 +user.password.not.match=鐢ㄦ埛涓嶅瓨鍦/瀵嗙爜閿欒 +user.password.retry.limit.count=瀵嗙爜杈撳叆閿欒{0}娆 +user.password.retry.limit.exceed=瀵嗙爜杈撳叆閿欒{0}娆★紝甯愭埛閿佸畾{1}鍒嗛挓 +user.password.delete=瀵逛笉璧凤紝鎮ㄧ殑璐﹀彿宸茶鍒犻櫎 +user.blocked=鐢ㄦ埛宸插皝绂侊紝璇疯仈绯荤鐞嗗憳 +role.blocked=瑙掕壊宸插皝绂侊紝璇疯仈绯荤鐞嗗憳 +login.blocked=寰堥仐鎲撅紝璁块棶IP宸茶鍒楀叆绯荤粺榛戝悕鍗 +user.logout.success=閫鍑烘垚鍔 + +length.not.valid=闀垮害蹇呴』鍦▄min}鍒皗max}涓瓧绗︿箣闂 + +user.username.not.valid=* 2鍒20涓眽瀛椼佸瓧姣嶃佹暟瀛楁垨涓嬪垝绾跨粍鎴愶紝涓斿繀椤讳互闈炴暟瀛楀紑澶 +user.password.not.valid=* 5-50涓瓧绗 + +user.email.not.valid=閭鏍煎紡閿欒 +user.mobile.phone.number.not.valid=鎵嬫満鍙锋牸寮忛敊璇 +user.login.success=鐧诲綍鎴愬姛 +user.register.success=娉ㄥ唽鎴愬姛 +user.notfound=璇烽噸鏂扮櫥褰 +user.forcelogout=绠$悊鍛樺己鍒堕鍑猴紝璇烽噸鏂扮櫥褰 +user.unknown.error=鏈煡閿欒锛岃閲嶆柊鐧诲綍 + +##鏂囦欢涓婁紶娑堟伅 +upload.exceed.maxSize=涓婁紶鐨勬枃浠跺ぇ灏忚秴鍑洪檺鍒剁殑鏂囦欢澶у皬锛
鍏佽鐨勬枃浠舵渶澶уぇ灏忔槸锛歿0}MB锛 +upload.filename.exceed.length=涓婁紶鐨勬枃浠跺悕鏈闀縶0}涓瓧绗 + +##鏉冮檺 +no.permission=鎮ㄦ病鏈夋暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄 [{0}] +no.create.permission=鎮ㄦ病鏈夊垱寤烘暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄 [{0}] +no.update.permission=鎮ㄦ病鏈変慨鏀规暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄 [{0}] +no.delete.permission=鎮ㄦ病鏈夊垹闄ゆ暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄 [{0}] +no.export.permission=鎮ㄦ病鏈夊鍑烘暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄 [{0}] +no.view.permission=鎮ㄦ病鏈夋煡鐪嬫暟鎹殑鏉冮檺锛岃鑱旂郴绠$悊鍛樻坊鍔犳潈闄 [{0}] diff --git a/ruoyi-admin/src/main/resources/logback.xml b/ruoyi-admin/src/main/resources/logback.xml new file mode 100644 index 0000000000000000000000000000000000000000..a360583fa4424fe5b8b88b39eca0a5aa203e7064 --- /dev/null +++ b/ruoyi-admin/src/main/resources/logback.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/sys-info.log + + + + ${log.path}/sys-info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/sys-error.log + + + + ${log.path}/sys-error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + ${log.path}/sys-user.log + + + ${log.path}/sys-user.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml b/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml new file mode 100644 index 0000000000000000000000000000000000000000..ac47c038e041f2435bdd4975c0ce7225c6b21b28 --- /dev/null +++ b/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + diff --git "a/ruoyi-admin/src/main/resources/reportForm/\345\255\246\344\277\241\345\207\206\350\200\203\350\257\201.docx" "b/ruoyi-admin/src/main/resources/reportForm/\345\255\246\344\277\241\345\207\206\350\200\203\350\257\201.docx" new file mode 100644 index 0000000000000000000000000000000000000000..be31f44283233d8c0dc041726281a9bfd3297d25 Binary files /dev/null and "b/ruoyi-admin/src/main/resources/reportForm/\345\255\246\344\277\241\345\207\206\350\200\203\350\257\201.docx" differ diff --git "a/ruoyi-admin/src/main/resources/reportForm/\345\255\246\344\277\241\350\200\203\350\257\225\345\215\267\346\212\245\345\220\215\350\241\250\357\274\210\346\226\260\357\274\211.docx" "b/ruoyi-admin/src/main/resources/reportForm/\345\255\246\344\277\241\350\200\203\350\257\225\345\215\267\346\212\245\345\220\215\350\241\250\357\274\210\346\226\260\357\274\211.docx" new file mode 100644 index 0000000000000000000000000000000000000000..ec76fc9499142c7ba5b9a2b594e800d7b127bbc1 Binary files /dev/null and "b/ruoyi-admin/src/main/resources/reportForm/\345\255\246\344\277\241\350\200\203\350\257\225\345\215\267\346\212\245\345\220\215\350\241\250\357\274\210\346\226\260\357\274\211.docx" differ diff --git "a/ruoyi-admin/src/main/resources/reportForm/\346\210\220\347\273\251\345\215\225.docx" "b/ruoyi-admin/src/main/resources/reportForm/\346\210\220\347\273\251\345\215\225.docx" new file mode 100644 index 0000000000000000000000000000000000000000..f6c5ae78bea449b8d41b65efb2ca78bce745e31c Binary files /dev/null and "b/ruoyi-admin/src/main/resources/reportForm/\346\210\220\347\273\251\345\215\225.docx" differ diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..6974d4149af4f416d58246a10879ba944bdb0125 --- /dev/null +++ b/ruoyi-common/pom.xml @@ -0,0 +1,206 @@ + + + + ruoyi + com.ruoyi + 3.8.8 + + 4.0.0 + + ruoyi-common + + + common閫氱敤宸ュ叿 + + + + + + com.alipay.sdk + alipay-sdk-java + 4.10.209.ALL + + + + + com.github.wechatpay-apiv3 + wechatpay-apache-httpclient + 0.4.9 + + + + + org.springframework + spring-context-support + + + + + org.springframework + spring-web + + + + + org.springframework.boot + spring-boot-starter-security + + + + + com.github.pagehelper + pagehelper-spring-boot-starter + + + + + org.springframework.boot + spring-boot-starter-validation + + + + + org.apache.commons + commons-lang3 + + + + + com.fasterxml.jackson.core + jackson-databind + + + + + com.alibaba.fastjson2 + fastjson2 + + + + + commons-io + commons-io + + + + + org.apache.poi + poi-ooxml + + + + + org.yaml + snakeyaml + + + + + io.jsonwebtoken + jjwt + + + + + javax.xml.bind + jaxb-api + + + + + org.springframework.boot + spring-boot-starter-data-redis + + + + + org.apache.commons + commons-pool2 + + + + + eu.bitwalker + UserAgentUtils + + + + + javax.servlet + javax.servlet-api + + + + + org.projectlombok + lombok + 1.18.24 + + + + + com.qiniu + qiniu-java-sdk + [7.13.0, 7.13.99] + + + + + + net.coobird + thumbnailator + 0.4.8 + + + + cn.hutool + hutool-all + 5.8.16 + + + + + com.freewayso + image-combiner + 2.6.9 + + + org.jdom + jdom2 + 2.0.6 + + + + com.aspose + aspose-words + 23.4 + jdk17 + system + C:/Users/71960/.m2/repository/com/aspose/aspose-words/23.4/aspose-words-23.4-jdk17.jar + + + + com.github.kuaidi100-api + sdk + 1.0.15 + + + com.github.kuaidi100-api + sdk + + + com.tencentcloudapi + tencentcloud-sdk-java-sms + 3.1.1179 + + + org.apache.tomcat.embed + tomcat-embed-core + + + + + + diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Anonymous.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Anonymous.java new file mode 100644 index 0000000000000000000000000000000000000000..e81a8b8221221c5e3b35879643f4e21d44d43c5b --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Anonymous.java @@ -0,0 +1,15 @@ +package com.ruoyi.common.annotation; + +import java.lang.annotation.*; + +/** + * 鍖垮悕璁块棶涓嶉壌鏉冩敞瑙 + * + * @author ruoyi + */ +@Target({ ElementType.METHOD, ElementType.TYPE }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Anonymous +{ +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java new file mode 100644 index 0000000000000000000000000000000000000000..5bdc9a47d1cc5a2706b8d7406efbf6a4c3628516 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataScope.java @@ -0,0 +1,29 @@ +package com.ruoyi.common.annotation; + +import java.lang.annotation.*; + +/** + * 鏁版嵁鏉冮檺杩囨护娉ㄨВ + * + * @author ruoyi + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DataScope +{ + /** + * 閮ㄩ棬琛ㄧ殑鍒悕 + */ + public String deptAlias() default ""; + + /** + * 鐢ㄦ埛琛ㄧ殑鍒悕 + */ + public String userAlias() default ""; + + /** + * 鏉冮檺瀛楃锛堢敤浜庡涓鑹插尮閰嶇鍚堣姹傜殑鏉冮檺锛夐粯璁ゆ牴鎹潈闄愭敞瑙ss鑾峰彇锛屽涓潈闄愮敤閫楀彿鍒嗛殧寮鏉 + */ + public String permission() default ""; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java new file mode 100644 index 0000000000000000000000000000000000000000..5287cd23a5fc14d91c3764f4fa3cfc1ffb32753d --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/DataSource.java @@ -0,0 +1,24 @@ +package com.ruoyi.common.annotation; + +import com.ruoyi.common.enums.DataSourceType; + +import java.lang.annotation.*; + +/** + * 鑷畾涔夊鏁版嵁婧愬垏鎹㈡敞瑙 + * + * 浼樺厛绾э細鍏堟柟娉曪紝鍚庣被锛屽鏋滄柟娉曡鐩栦簡绫讳笂鐨勬暟鎹簮绫诲瀷锛屼互鏂规硶鐨勪负鍑嗭紝鍚﹀垯浠ョ被涓婄殑涓哄噯 + * + * @author ruoyi + */ +@Target({ ElementType.METHOD, ElementType.TYPE }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@Inherited +public @interface DataSource +{ + /** + * 鍒囨崲鏁版嵁婧愬悕绉 + */ + public DataSourceType value() default DataSourceType.MASTER; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java new file mode 100644 index 0000000000000000000000000000000000000000..a185b878815381177b2476052f6e04684c42cae7 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excel.java @@ -0,0 +1,193 @@ +package com.ruoyi.common.annotation; + +import com.ruoyi.common.utils.poi.ExcelHandlerAdapter; +import org.apache.poi.ss.usermodel.HorizontalAlignment; +import org.apache.poi.ss.usermodel.IndexedColors; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.math.BigDecimal; + +/** + * 鑷畾涔夊鍑篍xcel鏁版嵁娉ㄨВ + * + * @author ruoyi + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface Excel +{ + /** + * 瀵煎嚭鏃跺湪excel涓帓搴 + */ + public int sort() default Integer.MAX_VALUE; + + /** + * 瀵煎嚭鍒癊xcel涓殑鍚嶅瓧. + */ + public String name() default ""; + + /** + * 鏃ユ湡鏍煎紡, 濡: yyyy-MM-dd + */ + public String dateFormat() default ""; + + /** + * 濡傛灉鏄瓧鍏哥被鍨嬶紝璇疯缃瓧鍏哥殑type鍊 (濡: sys_user_sex) + */ + public String dictType() default ""; + + /** + * 璇诲彇鍐呭杞〃杈惧紡 (濡: 0=鐢,1=濂,2=鏈煡) + */ + public String readConverterExp() default ""; + + /** + * 鍒嗛殧绗︼紝璇诲彇瀛楃涓茬粍鍐呭 + */ + public String separator() default ","; + + /** + * BigDecimal 绮惧害 榛樿:-1(榛樿涓嶅紑鍚疊igDecimal鏍煎紡鍖) + */ + public int scale() default -1; + + /** + * BigDecimal 鑸嶅叆瑙勫垯 榛樿:BigDecimal.ROUND_HALF_EVEN + */ + public int roundingMode() default BigDecimal.ROUND_HALF_EVEN; + + /** + * 瀵煎嚭鏃跺湪excel涓瘡涓垪鐨勯珮搴 + */ + public double height() default 14; + + /** + * 瀵煎嚭鏃跺湪excel涓瘡涓垪鐨勫搴 + */ + public double width() default 16; + + /** + * 鏂囧瓧鍚庣紑,濡% 90 鍙樻垚90% + */ + public String suffix() default ""; + + /** + * 褰撳间负绌烘椂,瀛楁鐨勯粯璁ゅ + */ + public String defaultValue() default ""; + + /** + * 鎻愮ず淇℃伅 + */ + public String prompt() default ""; + + /** + * 璁剧疆鍙兘閫夋嫨涓嶈兘杈撳叆鐨勫垪鍐呭. + */ + public String[] combo() default {}; + + /** + * 鏄惁浠庡瓧鍏歌鏁版嵁鍒癱ombo,榛樿涓嶈鍙,濡傝鍙栭渶瑕佽缃甦ictType娉ㄨВ. + */ + public boolean comboReadDict() default false; + + /** + * 鏄惁闇瑕佺旱鍚戝悎骞跺崟鍏冩牸,搴斿闇姹:鍚湁list闆嗗悎鍗曞厓鏍) + */ + public boolean needMerge() default false; + + /** + * 鏄惁瀵煎嚭鏁版嵁,搴斿闇姹:鏈夋椂鎴戜滑闇瑕佸鍑轰竴浠芥ā鏉,杩欐槸鏍囬闇瑕佷絾鍐呭闇瑕佺敤鎴锋墜宸ュ~鍐. + */ + public boolean isExport() default true; + + /** + * 鍙︿竴涓被涓殑灞炴у悕绉,鏀寔澶氱骇鑾峰彇,浠ュ皬鏁扮偣闅斿紑 + */ + public String targetAttr() default ""; + + /** + * 鏄惁鑷姩缁熻鏁版嵁,鍦ㄦ渶鍚庤拷鍔犱竴琛岀粺璁℃暟鎹诲拰 + */ + public boolean isStatistics() default false; + + /** + * 瀵煎嚭绫诲瀷锛0鏁板瓧 1瀛楃涓 2鍥剧墖锛 + */ + public ColumnType cellType() default ColumnType.STRING; + + /** + * 瀵煎嚭鍒楀ご鑳屾櫙棰滆壊 + */ + public IndexedColors headerBackgroundColor() default IndexedColors.GREY_50_PERCENT; + + /** + * 瀵煎嚭鍒楀ご瀛椾綋棰滆壊 + */ + public IndexedColors headerColor() default IndexedColors.WHITE; + + /** + * 瀵煎嚭鍗曞厓鏍艰儗鏅鑹 + */ + public IndexedColors backgroundColor() default IndexedColors.WHITE; + + /** + * 瀵煎嚭鍗曞厓鏍煎瓧浣撻鑹 + */ + public IndexedColors color() default IndexedColors.BLACK; + + /** + * 瀵煎嚭瀛楁瀵归綈鏂瑰紡 + */ + public HorizontalAlignment align() default HorizontalAlignment.CENTER; + + /** + * 鑷畾涔夋暟鎹鐞嗗櫒 + */ + public Class handler() default ExcelHandlerAdapter.class; + + /** + * 鑷畾涔夋暟鎹鐞嗗櫒鍙傛暟 + */ + public String[] args() default {}; + + /** + * 瀛楁绫诲瀷锛0锛氬鍑哄鍏ワ紱1锛氫粎瀵煎嚭锛2锛氫粎瀵煎叆锛 + */ + Type type() default Type.ALL; + + public enum Type + { + ALL(0), EXPORT(1), IMPORT(2); + private final int value; + + Type(int value) + { + this.value = value; + } + + public int value() + { + return this.value; + } + } + + public enum ColumnType + { + NUMERIC(0), STRING(1), IMAGE(2), TEXT(3); + private final int value; + + ColumnType(int value) + { + this.value = value; + } + + public int value() + { + return this.value; + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excels.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excels.java new file mode 100644 index 0000000000000000000000000000000000000000..1f1cc81bfa5d8116c390659fd090f0ac5db57eee --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Excels.java @@ -0,0 +1,18 @@ +package com.ruoyi.common.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * Excel娉ㄨВ闆 + * + * @author ruoyi + */ +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface Excels +{ + public Excel[] value(); +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java new file mode 100644 index 0000000000000000000000000000000000000000..d7c3e04ffa0adab8234b25cd0cf8eb78d2fc27ab --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Log.java @@ -0,0 +1,48 @@ +package com.ruoyi.common.annotation; + +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.enums.OperatorType; + +import java.lang.annotation.*; + +/** + * 鑷畾涔夋搷浣滄棩蹇楄褰曟敞瑙 + * + * @author ruoyi + * + */ +@Target({ ElementType.PARAMETER, ElementType.METHOD }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface Log +{ + /** + * 妯″潡 + */ + public String title() default ""; + + /** + * 鍔熻兘 + */ + public BusinessType businessType() default BusinessType.OTHER; + + /** + * 鎿嶄綔浜虹被鍒 + */ + public OperatorType operatorType() default OperatorType.MANAGE; + + /** + * 鏄惁淇濆瓨璇锋眰鐨勫弬鏁 + */ + public boolean isSaveRequestData() default true; + + /** + * 鏄惁淇濆瓨鍝嶅簲鐨勫弬鏁 + */ + public boolean isSaveResponseData() default true; + + /** + * 鎺掗櫎鎸囧畾鐨勮姹傚弬鏁 + */ + public String[] excludeParamNames() default {}; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RateLimiter.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RateLimiter.java new file mode 100644 index 0000000000000000000000000000000000000000..4209d5806763859d5dc66c0764b1ad58fd44bd57 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RateLimiter.java @@ -0,0 +1,37 @@ +package com.ruoyi.common.annotation; + +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.enums.LimitType; + +import java.lang.annotation.*; + +/** + * 闄愭祦娉ㄨВ + * + * @author ruoyi + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RateLimiter +{ + /** + * 闄愭祦key + */ + public String key() default CacheConstants.RATE_LIMIT_KEY; + + /** + * 闄愭祦鏃堕棿,鍗曚綅绉 + */ + public int time() default 60; + + /** + * 闄愭祦娆℃暟 + */ + public int count() default 100; + + /** + * 闄愭祦绫诲瀷 + */ + public LimitType limitType() default LimitType.DEFAULT; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RepeatSubmit.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RepeatSubmit.java new file mode 100644 index 0000000000000000000000000000000000000000..6cdacf6a00fd92bd3f6078f2babc6e5ff81a99a1 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/RepeatSubmit.java @@ -0,0 +1,26 @@ +package com.ruoyi.common.annotation; + +import java.lang.annotation.*; + +/** + * 鑷畾涔夋敞瑙i槻姝㈣〃鍗曢噸澶嶆彁浜 + * + * @author ruoyi + * + */ +@Inherited +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface RepeatSubmit +{ + /** + * 闂撮殧鏃堕棿(ms)锛屽皬浜庢鏃堕棿瑙嗕负閲嶅鎻愪氦 + */ + public int interval() default 5000; + + /** + * 鎻愮ず娑堟伅 + */ + public String message() default "涓嶅厑璁搁噸澶嶆彁浜わ紝璇风◢鍊欏啀璇"; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Sensitive.java b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Sensitive.java new file mode 100644 index 0000000000000000000000000000000000000000..bc8b8a17102f7422a9df5d5daecbcb52bb80e67d --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/annotation/Sensitive.java @@ -0,0 +1,25 @@ +package com.ruoyi.common.annotation; + +import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.ruoyi.common.config.serializer.SensitiveJsonSerializer; +import com.ruoyi.common.enums.DesensitizedType; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 鏁版嵁鑴辨晱娉ㄨВ + * + * @author ruoyi + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +@JacksonAnnotationsInside +@JsonSerialize(using = SensitiveJsonSerializer.class) +public @interface Sensitive +{ + DesensitizedType desensitizedType(); +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..72a262e1484e1b72c5dafa7313890f9e2a01c6cf --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/RuoYiConfig.java @@ -0,0 +1,130 @@ +package com.ruoyi.common.config; + +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * 璇诲彇椤圭洰鐩稿叧閰嶇疆 + * + * @author ruoyi + */ +@Component +@ConfigurationProperties(prefix = "ruoyi") +public class RuoYiConfig +{ + /** 椤圭洰鍚嶇О */ + private String name; + + /** 鐗堟湰 */ + private String version; + + /** 鐗堟潈骞翠唤 */ + private String copyrightYear; + + /** 涓婁紶璺緞 */ + private static String profile; + + /** 鑾峰彇鍦板潃寮鍏 */ + private static boolean addressEnabled; + + /** 楠岃瘉鐮佺被鍨 */ + private static String captchaType; + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + public String getVersion() + { + return version; + } + + public void setVersion(String version) + { + this.version = version; + } + + public String getCopyrightYear() + { + return copyrightYear; + } + + public void setCopyrightYear(String copyrightYear) + { + this.copyrightYear = copyrightYear; + } + + public static String getProfile() + { + return profile; + } + + public void setProfile(String profile) + { + RuoYiConfig.profile = profile; + } + + public static boolean isAddressEnabled() + { + return addressEnabled; + } + + public void setAddressEnabled(boolean addressEnabled) + { + RuoYiConfig.addressEnabled = addressEnabled; + } + + public static String getCaptchaType() { + return captchaType; + } + + public void setCaptchaType(String captchaType) { + RuoYiConfig.captchaType = captchaType; + } + + /** + * 鑾峰彇瀵煎叆涓婁紶璺緞 + */ + public static String getImportPath() + { + return getProfile() + "/import"; + } + + /** + * 鑾峰彇澶村儚涓婁紶璺緞 + */ + public static String getAvatarPath() + { + return getProfile() + "/avatar"; + } + + /** + * 鑾峰彇涓嬭浇璺緞 + */ + public static String getDownloadPath() + { + return getProfile() + "/download/"; + } + + /** + * 鑾峰彇涓婁紶璺緞 + */ + public static String getUploadPath() + { + return getProfile() + "/upload"; + } + + /** + * 鑾峰彇鏀粯浜岀淮鐮佸浘鐗囪矾寰 + */ + public static String getPayQRCodePath() + { + return getProfile() + "/qrCode"; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/config/serializer/SensitiveJsonSerializer.java b/ruoyi-common/src/main/java/com/ruoyi/common/config/serializer/SensitiveJsonSerializer.java new file mode 100644 index 0000000000000000000000000000000000000000..7e541e1ed56aed180ad24d434bb0409dfcb065b3 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/config/serializer/SensitiveJsonSerializer.java @@ -0,0 +1,68 @@ +package com.ruoyi.common.config.serializer; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.BeanProperty; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.ContextualSerializer; +import com.ruoyi.common.annotation.Sensitive; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.enums.DesensitizedType; +import com.ruoyi.common.utils.SecurityUtils; + +import java.io.IOException; +import java.util.Objects; + +/** + * 鏁版嵁鑴辨晱搴忓垪鍖栬繃婊 + * + * @author ruoyi + */ +public class SensitiveJsonSerializer extends JsonSerializer implements ContextualSerializer +{ + private DesensitizedType desensitizedType; + + @Override + public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException + { + if (desensitization()) + { + gen.writeString(desensitizedType.desensitizer().apply(value)); + } + else + { + gen.writeString(value); + } + } + + @Override + public JsonSerializer createContextual(SerializerProvider prov, BeanProperty property) + throws JsonMappingException + { + Sensitive annotation = property.getAnnotation(Sensitive.class); + if (Objects.nonNull(annotation) && Objects.equals(String.class, property.getType().getRawClass())) + { + this.desensitizedType = annotation.desensitizedType(); + return this; + } + return prov.findValueSerializer(property.getType(), property); + } + + /** + * 鏄惁闇瑕佽劚鏁忓鐞 + */ + private boolean desensitization() + { + try + { + LoginUser securityUser = SecurityUtils.getLoginUser(); + // 绠$悊鍛樹笉鑴辨晱 + return !securityUser.getUser().isAdmin(); + } + catch (Exception e) + { + return true; + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java new file mode 100644 index 0000000000000000000000000000000000000000..d8fa1d18a2e37ce358d558eb701f1e9ab73ca887 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java @@ -0,0 +1,79 @@ +package com.ruoyi.common.constant; + +/** + * 缂撳瓨鐨刱ey 甯搁噺 + * + * @author ruoyi + */ +public class CacheConstants +{ + /** + * 鐧诲綍鐢ㄦ埛 redis key + */ + public static final String LOGIN_TOKEN_KEY = "login_tokens:"; + + /** + * 楠岃瘉鐮 redis key + */ + public static final String CAPTCHA_CODE_KEY = "captcha_codes:"; + + /** + * 鍙傛暟绠$悊 cache key + */ + public static final String SYS_CONFIG_KEY = "sys_config:"; + + /** + * 瀛楀吀绠$悊 cache key + */ + public static final String SYS_DICT_KEY = "sys_dict:"; + + /** + * 闃查噸鎻愪氦 redis key + */ + public static final String REPEAT_SUBMIT_KEY = "repeat_submit:"; + + /** + * 闄愭祦 redis key + */ + public static final String RATE_LIMIT_KEY = "rate_limit:"; + + /** + * 鐧诲綍璐︽埛瀵嗙爜閿欒娆℃暟 redis key + */ + public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:"; + + /** + * 鍏紬鍙蜂护鐗 redis key + */ + public static final String GZH_ACCESS_TOKEN_KEY = "gzh_access_token:"; + + /** + * PC鐧诲綍鐢ㄦ埛 redis key + */ + public static final String PC_LOGIN_TOKEN_KEY = "PC_login_token:"; + + /** + * PC鎵爜鐧诲綍鐢ㄦ埛 redis key + */ + public static final String CODE_LOGIN_TOKEN_KEY = "code_login_token:"; + + /** + * 鐧诲綍浜岀淮鐮佽繃鏈熸爣璁 + */ + public static final String CODE_LOGIN_EXPIRE_KEY = "code_login_token:"; + + /** + * 灏忕▼搴忎护鐗 redis key + */ + public static final String XCX_MEMBER_ACCESS_TOKEN_KEY = "xcx_member_access_token:"; + + /** + * 璇剧▼鎼滅储鍘嗗彶璁板綍 redis key + */ + public static final String COURSE_SEARCH_HISTORY_KEY = "course_search_history:"; + + /** + * 璇剧▼鐑悳 redis key + */ + public static final String COURSE_HOT_SEARCH_KEY = "course_hot_search:"; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java new file mode 100644 index 0000000000000000000000000000000000000000..a53d0e8b2a1deda6fe6efb382f7df2ffc3187ac3 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java @@ -0,0 +1,201 @@ +package com.ruoyi.common.constant; + +import io.jsonwebtoken.Claims; + +import java.util.Locale; + +/** + * 閫氱敤甯搁噺淇℃伅 + * + * @author ruoyi + */ +public class Constants +{ + /** + * UTF-8 瀛楃闆 + */ + public static final String UTF8 = "UTF-8"; + + /** + * GBK 瀛楃闆 + */ + public static final String GBK = "GBK"; + + /** + * 绯荤粺璇█ + */ + public static final Locale DEFAULT_LOCALE = Locale.SIMPLIFIED_CHINESE; + + /** + * www涓诲煙 + */ + public static final String WWW = "www."; + + /** + * http璇锋眰 + */ + public static final String HTTP = "http://"; + + /** + * https璇锋眰 + */ + public static final String HTTPS = "https://"; + + /** + * 閫氱敤鎴愬姛鏍囪瘑 + */ + public static final String SUCCESS = "0"; + + /** + * 閫氱敤澶辫触鏍囪瘑 + */ + public static final String FAIL = "1"; + + /** + * 鐧诲綍鎴愬姛 + */ + public static final String LOGIN_SUCCESS = "Success"; + + /** + * 娉ㄩ攢 + */ + public static final String LOGOUT = "Logout"; + + /** + * 娉ㄥ唽 + */ + public static final String REGISTER = "Register"; + + /** + * 鐧诲綍澶辫触 + */ + public static final String LOGIN_FAIL = "Error"; + + /** + * 鎵鏈夋潈闄愭爣璇 + */ + public static final String ALL_PERMISSION = "*:*:*"; + + /** + * 绠$悊鍛樿鑹叉潈闄愭爣璇 + */ + public static final String SUPER_ADMIN = "admin"; + + /** + * 瑙掕壊鏉冮檺鍒嗛殧绗 + */ + public static final String ROLE_DELIMETER = ","; + + /** + * 鏉冮檺鏍囪瘑鍒嗛殧绗 + */ + public static final String PERMISSION_DELIMETER = ","; + + /** + * 楠岃瘉鐮佹湁鏁堟湡锛堝垎閽燂級 + */ + public static final Integer CAPTCHA_EXPIRATION = 2; + + /** + * 浠ょ墝 + */ + public static final String TOKEN = "token"; + + /** + * 浠ょ墝鍓嶇紑 + */ + public static final String TOKEN_PREFIX = "Bearer "; + + /** + * 浠ょ墝鍓嶇紑 + */ + public static final String LOGIN_USER_KEY = "login_user_key"; + + /** + * 鐢ㄦ埛ID + */ + public static final String JWT_USERID = "userid"; + + /** + * 鐢ㄦ埛鍚嶇О + */ + public static final String JWT_USERNAME = Claims.SUBJECT; + + /** + * 鐢ㄦ埛澶村儚 + */ + public static final String JWT_AVATAR = "avatar"; + + /** + * 鍒涘缓鏃堕棿 + */ + public static final String JWT_CREATED = "created"; + + /** + * 鐢ㄦ埛鏉冮檺 + */ + public static final String JWT_AUTHORITIES = "authorities"; + + /** + * 璧勬簮鏄犲皠璺緞 鍓嶇紑 + */ + public static final String RESOURCE_PREFIX = "/profile"; + + /** + * RMI 杩滅▼鏂规硶璋冪敤 + */ + public static final String LOOKUP_RMI = "rmi:"; + + /** + * LDAP 杩滅▼鏂规硶璋冪敤 + */ + public static final String LOOKUP_LDAP = "ldap:"; + + /** + * LDAPS 杩滅▼鏂规硶璋冪敤 + */ + public static final String LOOKUP_LDAPS = "ldaps:"; + + /** + * 鑷姩璇嗗埆json瀵硅薄鐧藉悕鍗曢厤缃紙浠呭厑璁歌В鏋愮殑鍖呭悕锛岃寖鍥磋秺灏忚秺瀹夊叏锛 + */ + public static final String[] JSON_WHITELIST_STR = { "org.springframework", "com.ruoyi" }; + + /** + * 瀹氭椂浠诲姟鐧藉悕鍗曢厤缃紙浠呭厑璁歌闂殑鍖呭悕锛屽鍏朵粬闇瑕佸彲浠ヨ嚜琛屾坊鍔狅級 + */ + public static final String[] JOB_WHITELIST_STR = { "com.ruoyi.quartz.task" }; + + /** + * 瀹氭椂浠诲姟杩濊鐨勫瓧绗 + */ + public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml", + "org.springframework", "org.apache", "com.ruoyi.common.utils.file", "com.ruoyi.common.config", "com.ruoyi.generator" }; + + /** + * 涓氬姟寮傚父娑堟伅 + */ + public static final String EXCEPTION_MSG = "fail"; + + /** + * 缂撳瓨澶 + */ + public static final String REDIS_PREFIX = "hezhi:"; + + /** + * 甯哥敤鏁板瓧甯搁噺 + */ + public static final Integer ZERO = 0; + public static final Integer ONE = 1; + public static final Integer TWO = 2; + public static final Integer THREE = 3; + public static final Integer FOUR = 4; + public static final Integer FIVE = 5; + public static final Integer SIX = 6; + public static final Integer SEVEN = 7; + public static final Integer EIGHT = 8; + public static final Integer NINE = 9; + public static final Integer TEN = 10; + public static final Integer TWELVE = 12; + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java new file mode 100644 index 0000000000000000000000000000000000000000..7d899d4964882b2e3e90a5452a4cc2a6711264ae --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/GenConstants.java @@ -0,0 +1,117 @@ +package com.ruoyi.common.constant; + +/** + * 浠g爜鐢熸垚閫氱敤甯搁噺 + * + * @author ruoyi + */ +public class GenConstants +{ + /** 鍗曡〃锛堝鍒犳敼鏌ワ級 */ + public static final String TPL_CRUD = "crud"; + + /** 鏍戣〃锛堝鍒犳敼鏌ワ級 */ + public static final String TPL_TREE = "tree"; + + /** 涓诲瓙琛紙澧炲垹鏀规煡锛 */ + public static final String TPL_SUB = "sub"; + + /** 鏍戠紪鐮佸瓧娈 */ + public static final String TREE_CODE = "treeCode"; + + /** 鏍戠埗缂栫爜瀛楁 */ + public static final String TREE_PARENT_CODE = "treeParentCode"; + + /** 鏍戝悕绉板瓧娈 */ + public static final String TREE_NAME = "treeName"; + + /** 涓婄骇鑿滃崟ID瀛楁 */ + public static final String PARENT_MENU_ID = "parentMenuId"; + + /** 涓婄骇鑿滃崟鍚嶇О瀛楁 */ + public static final String PARENT_MENU_NAME = "parentMenuName"; + + /** 鏁版嵁搴撳瓧绗︿覆绫诲瀷 */ + public static final String[] COLUMNTYPE_STR = { "char", "varchar", "nvarchar", "varchar2" }; + + /** 鏁版嵁搴撴枃鏈被鍨 */ + public static final String[] COLUMNTYPE_TEXT = { "tinytext", "text", "mediumtext", "longtext" }; + + /** 鏁版嵁搴撴椂闂寸被鍨 */ + public static final String[] COLUMNTYPE_TIME = { "datetime", "time", "date", "timestamp" }; + + /** 鏁版嵁搴撴暟瀛楃被鍨 */ + public static final String[] COLUMNTYPE_NUMBER = { "tinyint", "smallint", "mediumint", "int", "number", "integer", + "bit", "bigint", "float", "double", "decimal" }; + + /** 椤甸潰涓嶉渶瑕佺紪杈戝瓧娈 */ + public static final String[] COLUMNNAME_NOT_EDIT = { "id", "create_by", "create_time", "del_flag" }; + + /** 椤甸潰涓嶉渶瑕佹樉绀虹殑鍒楄〃瀛楁 */ + public static final String[] COLUMNNAME_NOT_LIST = { "id", "create_by", "create_time", "del_flag", "update_by", + "update_time" }; + + /** 椤甸潰涓嶉渶瑕佹煡璇㈠瓧娈 */ + public static final String[] COLUMNNAME_NOT_QUERY = { "id", "create_by", "create_time", "del_flag", "update_by", + "update_time", "remark" }; + + /** Entity鍩虹被瀛楁 */ + public static final String[] BASE_ENTITY = { "createBy", "createTime", "updateBy", "updateTime", "remark" }; + + /** Tree鍩虹被瀛楁 */ + public static final String[] TREE_ENTITY = { "parentName", "parentId", "orderNum", "ancestors", "children" }; + + /** 鏂囨湰妗 */ + public static final String HTML_INPUT = "input"; + + /** 鏂囨湰鍩 */ + public static final String HTML_TEXTAREA = "textarea"; + + /** 涓嬫媺妗 */ + public static final String HTML_SELECT = "select"; + + /** 鍗曢夋 */ + public static final String HTML_RADIO = "radio"; + + /** 澶嶉夋 */ + public static final String HTML_CHECKBOX = "checkbox"; + + /** 鏃ユ湡鎺т欢 */ + public static final String HTML_DATETIME = "datetime"; + + /** 鍥剧墖涓婁紶鎺т欢 */ + public static final String HTML_IMAGE_UPLOAD = "imageUpload"; + + /** 鏂囦欢涓婁紶鎺т欢 */ + public static final String HTML_FILE_UPLOAD = "fileUpload"; + + /** 瀵屾枃鏈帶浠 */ + public static final String HTML_EDITOR = "editor"; + + /** 瀛楃涓茬被鍨 */ + public static final String TYPE_STRING = "String"; + + /** 鏁村瀷 */ + public static final String TYPE_INTEGER = "Integer"; + + /** 闀挎暣鍨 */ + public static final String TYPE_LONG = "Long"; + + /** 娴偣鍨 */ + public static final String TYPE_DOUBLE = "Double"; + + /** 楂樼簿搴﹁绠楃被鍨 */ + public static final String TYPE_BIGDECIMAL = "BigDecimal"; + + /** 鏃堕棿绫诲瀷 */ + public static final String TYPE_DATE = "Date"; + + /** 妯$硦鏌ヨ */ + public static final String QUERY_LIKE = "LIKE"; + + /** 鐩哥瓑鏌ヨ */ + public static final String QUERY_EQ = "EQ"; + + /** 闇瑕 */ + public static final String REQUIRE = "1"; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/HttpStatus.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/HttpStatus.java new file mode 100644 index 0000000000000000000000000000000000000000..a983c77ece3f2b1f8bdb0136c084aaa9782215fe --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/HttpStatus.java @@ -0,0 +1,94 @@ +package com.ruoyi.common.constant; + +/** + * 杩斿洖鐘舵佺爜 + * + * @author ruoyi + */ +public class HttpStatus +{ + /** + * 鎿嶄綔鎴愬姛 + */ + public static final int SUCCESS = 200; + + /** + * 瀵硅薄鍒涘缓鎴愬姛 + */ + public static final int CREATED = 201; + + /** + * 璇锋眰宸茬粡琚帴鍙 + */ + public static final int ACCEPTED = 202; + + /** + * 鎿嶄綔宸茬粡鎵ц鎴愬姛锛屼絾鏄病鏈夎繑鍥炴暟鎹 + */ + public static final int NO_CONTENT = 204; + + /** + * 璧勬簮宸茶绉婚櫎 + */ + public static final int MOVED_PERM = 301; + + /** + * 閲嶅畾鍚 + */ + public static final int SEE_OTHER = 303; + + /** + * 璧勬簮娌℃湁琚慨鏀 + */ + public static final int NOT_MODIFIED = 304; + + /** + * 鍙傛暟鍒楄〃閿欒锛堢己灏戯紝鏍煎紡涓嶅尮閰嶏級 + */ + public static final int BAD_REQUEST = 400; + + /** + * 鏈巿鏉 + */ + public static final int UNAUTHORIZED = 401; + + /** + * 璁块棶鍙楅檺锛屾巿鏉冭繃鏈 + */ + public static final int FORBIDDEN = 403; + + /** + * 璧勬簮锛屾湇鍔℃湭鎵惧埌 + */ + public static final int NOT_FOUND = 404; + + /** + * 涓嶅厑璁哥殑http鏂规硶 + */ + public static final int BAD_METHOD = 405; + + /** + * 璧勬簮鍐茬獊锛屾垨鑰呰祫婧愯閿 + */ + public static final int CONFLICT = 409; + + /** + * 涓嶆敮鎸佺殑鏁版嵁锛屽獟浣撶被鍨 + */ + public static final int UNSUPPORTED_TYPE = 415; + + /** + * 绯荤粺鍐呴儴閿欒 + */ + public static final int ERROR = 500; + + /** + * 鎺ュ彛鏈疄鐜 + */ + public static final int NOT_IMPLEMENTED = 501; + + /** + * 绯荤粺璀﹀憡娑堟伅 + */ + public static final int WARN = 601; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/ScheduleConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/ScheduleConstants.java new file mode 100644 index 0000000000000000000000000000000000000000..62ad81545b42892d37a89dee5e1f7cc3b13f2067 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/ScheduleConstants.java @@ -0,0 +1,50 @@ +package com.ruoyi.common.constant; + +/** + * 浠诲姟璋冨害閫氱敤甯搁噺 + * + * @author ruoyi + */ +public class ScheduleConstants +{ + public static final String TASK_CLASS_NAME = "TASK_CLASS_NAME"; + + /** 鎵ц鐩爣key */ + public static final String TASK_PROPERTIES = "TASK_PROPERTIES"; + + /** 榛樿 */ + public static final String MISFIRE_DEFAULT = "0"; + + /** 绔嬪嵆瑙﹀彂鎵ц */ + public static final String MISFIRE_IGNORE_MISFIRES = "1"; + + /** 瑙﹀彂涓娆℃墽琛 */ + public static final String MISFIRE_FIRE_AND_PROCEED = "2"; + + /** 涓嶈Е鍙戠珛鍗虫墽琛 */ + public static final String MISFIRE_DO_NOTHING = "3"; + + public enum Status + { + /** + * 姝e父 + */ + NORMAL("0"), + /** + * 鏆傚仠 + */ + PAUSE("1"); + + private String value; + + private Status(String value) + { + this.value = value; + } + + public String getValue() + { + return value; + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java new file mode 100644 index 0000000000000000000000000000000000000000..96b149c159724a3e64cdf388b152a83c0034c48d --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/UserConstants.java @@ -0,0 +1,78 @@ +package com.ruoyi.common.constant; + +/** + * 鐢ㄦ埛甯搁噺淇℃伅 + * + * @author ruoyi + */ +public class UserConstants +{ + /** + * 骞冲彴鍐呯郴缁熺敤鎴风殑鍞竴鏍囧織 + */ + public static final String SYS_USER = "SYS_USER"; + + /** 姝e父鐘舵 */ + public static final String NORMAL = "0"; + + /** 寮傚父鐘舵 */ + public static final String EXCEPTION = "1"; + + /** 鐢ㄦ埛灏佺鐘舵 */ + public static final String USER_DISABLE = "1"; + + /** 瑙掕壊灏佺鐘舵 */ + public static final String ROLE_DISABLE = "1"; + + /** 閮ㄩ棬姝e父鐘舵 */ + public static final String DEPT_NORMAL = "0"; + + /** 閮ㄩ棬鍋滅敤鐘舵 */ + public static final String DEPT_DISABLE = "1"; + + /** 瀛楀吀姝e父鐘舵 */ + public static final String DICT_NORMAL = "0"; + + /** 鏄惁涓虹郴缁熼粯璁わ紙鏄級 */ + public static final String YES = "Y"; + + /** 鏄惁鑿滃崟澶栭摼锛堟槸锛 */ + public static final String YES_FRAME = "0"; + + /** 鏄惁鑿滃崟澶栭摼锛堝惁锛 */ + public static final String NO_FRAME = "1"; + + /** 鑿滃崟绫诲瀷锛堢洰褰曪級 */ + public static final String TYPE_DIR = "M"; + + /** 鑿滃崟绫诲瀷锛堣彍鍗曪級 */ + public static final String TYPE_MENU = "C"; + + /** 鑿滃崟绫诲瀷锛堟寜閽級 */ + public static final String TYPE_BUTTON = "F"; + + /** Layout缁勪欢鏍囪瘑 */ + public final static String LAYOUT = "Layout"; + + /** ParentView缁勪欢鏍囪瘑 */ + public final static String PARENT_VIEW = "ParentView"; + + /** InnerLink缁勪欢鏍囪瘑 */ + public final static String INNER_LINK = "InnerLink"; + + /** 鏍¢獙鏄惁鍞竴鐨勮繑鍥炴爣璇 */ + public final static boolean UNIQUE = true; + public final static boolean NOT_UNIQUE = false; + + /** + * 鐢ㄦ埛鍚嶉暱搴﹂檺鍒 + */ + public static final int USERNAME_MIN_LENGTH = 2; + public static final int USERNAME_MAX_LENGTH = 20; + + /** + * 瀵嗙爜闀垮害闄愬埗 + */ + public static final int PASSWORD_MIN_LENGTH = 5; + public static final int PASSWORD_MAX_LENGTH = 20; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java new file mode 100644 index 0000000000000000000000000000000000000000..e54939a7e7fa9a4b8177ef81e458d551e96a567e --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/controller/BaseController.java @@ -0,0 +1,203 @@ +package com.ruoyi.common.core.controller; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.ruoyi.common.constant.HttpStatus; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.core.page.PageDomain; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.page.TableSupport; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.PageUtils; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.sql.SqlUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.InitBinder; + +import java.beans.PropertyEditorSupport; +import java.util.Date; +import java.util.List; + +/** + * web灞傞氱敤鏁版嵁澶勭悊 + * + * @author ruoyi + */ +public class BaseController +{ + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + /** + * 灏嗗墠鍙颁紶閫掕繃鏉ョ殑鏃ユ湡鏍煎紡鐨勫瓧绗︿覆锛岃嚜鍔ㄨ浆鍖栦负Date绫诲瀷 + */ + @InitBinder + public void initBinder(WebDataBinder binder) + { + // Date 绫诲瀷杞崲 + binder.registerCustomEditor(Date.class, new PropertyEditorSupport() + { + @Override + public void setAsText(String text) + { + setValue(DateUtils.parseDate(text)); + } + }); + } + + /** + * 璁剧疆璇锋眰鍒嗛〉鏁版嵁 + */ + protected void startPage() + { + PageUtils.startPage(); + } + + /** + * 璁剧疆璇锋眰鎺掑簭鏁版嵁 + */ + protected void startOrderBy() + { + PageDomain pageDomain = TableSupport.buildPageRequest(); + if (StringUtils.isNotEmpty(pageDomain.getOrderBy())) + { + String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy()); + PageHelper.orderBy(orderBy); + } + } + + /** + * 娓呯悊鍒嗛〉鐨勭嚎绋嬪彉閲 + */ + protected void clearPage() + { + PageUtils.clearPage(); + } + + /** + * 鍝嶅簲璇锋眰鍒嗛〉鏁版嵁 + */ + @SuppressWarnings({ "rawtypes", "unchecked" }) + protected TableDataInfo getDataTable(List list) + { + TableDataInfo rspData = new TableDataInfo(); + rspData.setCode(HttpStatus.SUCCESS); + rspData.setMsg("鏌ヨ鎴愬姛"); + rspData.setRows(list); + rspData.setTotal(new PageInfo(list).getTotal()); + return rspData; + } + + /** + * 杩斿洖鎴愬姛 + */ + public AjaxResult success() + { + return AjaxResult.success(); + } + + /** + * 杩斿洖澶辫触娑堟伅 + */ + public AjaxResult error() + { + return AjaxResult.error(); + } + + /** + * 杩斿洖鎴愬姛娑堟伅 + */ + public AjaxResult success(String message) + { + return AjaxResult.success(message); + } + + /** + * 杩斿洖鎴愬姛娑堟伅 + */ + public AjaxResult success(Object data) + { + return AjaxResult.success(data); + } + + /** + * 杩斿洖澶辫触娑堟伅 + */ + public AjaxResult error(String message) + { + return AjaxResult.error(message); + } + + /** + * 杩斿洖璀﹀憡娑堟伅 + */ + public AjaxResult warn(String message) + { + return AjaxResult.warn(message); + } + + /** + * 鍝嶅簲杩斿洖缁撴灉 + * + * @param rows 褰卞搷琛屾暟 + * @return 鎿嶄綔缁撴灉 + */ + protected AjaxResult toAjax(int rows) + { + return rows > 0 ? AjaxResult.success() : AjaxResult.error(); + } + + /** + * 鍝嶅簲杩斿洖缁撴灉 + * + * @param result 缁撴灉 + * @return 鎿嶄綔缁撴灉 + */ + protected AjaxResult toAjax(boolean result) + { + return result ? success() : error(); + } + + /** + * 椤甸潰璺宠浆 + */ + public String redirect(String url) + { + return StringUtils.format("redirect:{}", url); + } + + /** + * 鑾峰彇鐢ㄦ埛缂撳瓨淇℃伅 + */ + public LoginUser getLoginUser() + { + return SecurityUtils.getLoginUser(); + } + + /** + * 鑾峰彇鐧诲綍鐢ㄦ埛id + */ + public Long getUserId() + { + return getLoginUser().getUserId(); + } + + /** + * 鑾峰彇鐧诲綍閮ㄩ棬id + */ + public Long getDeptId() + { + return getLoginUser().getDeptId(); + } + + /** + * 鑾峰彇鐧诲綍鐢ㄦ埛鍚 + */ + public String getUsername() + { + return getLoginUser().getUsername(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java new file mode 100644 index 0000000000000000000000000000000000000000..8f54fd87fc91cc019faa80979acdc0f3f6636fbf --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/AjaxResult.java @@ -0,0 +1,247 @@ +package com.ruoyi.common.core.domain; + +import com.ruoyi.common.constant.HttpStatus; +import com.ruoyi.common.utils.StringUtils; +import org.springframework.context.support.DefaultMessageSourceResolvable; +import org.springframework.validation.BindingResult; +import org.springframework.validation.ObjectError; + +import java.util.HashMap; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * 鎿嶄綔娑堟伅鎻愰啋 + * + * @author ruoyi + */ +public class AjaxResult extends HashMap +{ + private static final long serialVersionUID = 1L; + + /** 鐘舵佺爜 */ + public static final String CODE_TAG = "code"; + + /** 杩斿洖鍐呭 */ + public static final String MSG_TAG = "msg"; + + /** 鏁版嵁瀵硅薄 */ + public static final String DATA_TAG = "data"; + + /** + * 鍒濆鍖栦竴涓柊鍒涘缓鐨 AjaxResult 瀵硅薄锛屼娇鍏惰〃绀轰竴涓┖娑堟伅銆 + */ + public AjaxResult() + { + } + + /** + * 鍒濆鍖栦竴涓柊鍒涘缓鐨 AjaxResult 瀵硅薄 + * + * @param code 鐘舵佺爜 + * @param msg 杩斿洖鍐呭 + */ + public AjaxResult(int code, String msg) + { + super.put(CODE_TAG, code); + super.put(MSG_TAG, msg); + } + + /** + * 鍒濆鍖栦竴涓柊鍒涘缓鐨 AjaxResult 瀵硅薄 + * + * @param code 鐘舵佺爜 + * @param msg 杩斿洖鍐呭 + * @param data 鏁版嵁瀵硅薄 + */ + public AjaxResult(int code, String msg, Object data) + { + super.put(CODE_TAG, code); + super.put(MSG_TAG, msg); + if (StringUtils.isNotNull(data)) + { + super.put(DATA_TAG, data); + } + } + + /** + * 杩斿洖鎴愬姛娑堟伅 + * + * @return 鎴愬姛娑堟伅 + */ + public static AjaxResult success() + { + return AjaxResult.success("鎿嶄綔鎴愬姛"); + } + + /** + * 杩斿洖鎴愬姛鏁版嵁 + * + * @return 鎴愬姛娑堟伅 + */ + public static AjaxResult success(Object data) + { + return AjaxResult.success("鎿嶄綔鎴愬姛", data); + } + + /** + * 杩斿洖鎴愬姛娑堟伅 + * + * @param msg 杩斿洖鍐呭 + * @return 鎴愬姛娑堟伅 + */ + public static AjaxResult success(String msg) + { + return AjaxResult.success(msg, null); + } + + /** + * 杩斿洖鎴愬姛娑堟伅 + * + * @param msg 杩斿洖鍐呭 + * @param data 鏁版嵁瀵硅薄 + * @return 鎴愬姛娑堟伅 + */ + public static AjaxResult success(String msg, Object data) + { + return new AjaxResult(HttpStatus.SUCCESS, msg, data); + } + + /** + * 杩斿洖璀﹀憡娑堟伅 + * + * @param msg 杩斿洖鍐呭 + * @return 璀﹀憡娑堟伅 + */ + public static AjaxResult warn(String msg) + { + return AjaxResult.warn(msg, null); + } + + /** + * 杩斿洖璀﹀憡娑堟伅 + * + * @param msg 杩斿洖鍐呭 + * @param data 鏁版嵁瀵硅薄 + * @return 璀﹀憡娑堟伅 + */ + public static AjaxResult warn(String msg, Object data) + { + return new AjaxResult(HttpStatus.WARN, msg, data); + } + + /** + * 杩斿洖閿欒娑堟伅 + * + * @return 閿欒娑堟伅 + */ + public static AjaxResult error() + { + return AjaxResult.error("鎿嶄綔澶辫触"); + } + + /** + * 杩斿洖閿欒娑堟伅 + * + * @param msg 杩斿洖鍐呭 + * @return 閿欒娑堟伅 + */ + public static AjaxResult error(String msg) + { + return AjaxResult.error(msg, null); + } + + /** + * 杩斿洖閿欒娑堟伅 + * + * @param msg 杩斿洖鍐呭 + * @param data 鏁版嵁瀵硅薄 + * @return 閿欒娑堟伅 + */ + public static AjaxResult error(String msg, Object data) + { + return new AjaxResult(HttpStatus.ERROR, msg, data); + } + + /** + * 杩斿洖閿欒娑堟伅 + * + * @param code 鐘舵佺爜 + * @param msg 杩斿洖鍐呭 + * @return 閿欒娑堟伅 + */ + public static AjaxResult error(int code, String msg) + { + return new AjaxResult(code, msg, null); + } + + /** + * 鏄惁涓烘垚鍔熸秷鎭 + * + * @return 缁撴灉 + */ + public boolean isSuccess() + { + return Objects.equals(HttpStatus.SUCCESS, this.get(CODE_TAG)); + } + + /** + * 鏄惁涓鸿鍛婃秷鎭 + * + * @return 缁撴灉 + */ + public boolean isWarn() + { + return Objects.equals(HttpStatus.WARN, this.get(CODE_TAG)); + } + + /** + * 鏄惁涓洪敊璇秷鎭 + * + * @return 缁撴灉 + */ + public boolean isError() + { + return Objects.equals(HttpStatus.ERROR, this.get(CODE_TAG)); + } + + /** + * 鏂逛究閾惧紡璋冪敤 + * + * @param key 閿 + * @param value 鍊 + * @return 鏁版嵁瀵硅薄 + */ + @Override + public AjaxResult put(String key, Object value) + { + super.put(key, value); + return this; + } + + /** + * 杩斿洖鎿嶄綔娑堟伅 + * @param row 琛 + * @return 缁撴灉 + */ + public static AjaxResult toAjax(int row){ + return row > 0 ? AjaxResult.success("鎿嶄綔鎴愬姛") : AjaxResult.error("鎿嶄綔澶辫触"); + } + + /** + * 鍙傛暟鏍¢獙 + * @param bindingResult 鍙傛暟鏍¢獙瀵硅薄 + * @return 缁撴灉 + */ + public static AjaxResult allParameterErrors(BindingResult bindingResult){ + String errorStr = ""; + List allErrors = bindingResult.getAllErrors(); + if (!allErrors.isEmpty()){ + errorStr = allErrors.stream() + .map(DefaultMessageSourceResolvable::getDefaultMessage) + .collect(Collectors.toList()).toString(); + } + return AjaxResult.error(errorStr.replace("[","").replace("]","")); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java new file mode 100644 index 0000000000000000000000000000000000000000..f9a22b655ec110fc8bb737c4c17638cc3796cccf --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/BaseEntity.java @@ -0,0 +1,120 @@ +package com.ruoyi.common.core.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.ruoyi.common.annotation.Excel; + +import java.io.Serializable; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +/** + * Entity鍩虹被 + * + * @author ruoyi + */ +public class BaseEntity implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 鎼滅储鍊 */ + @JsonIgnore + private String searchValue; + + /** 鍒涘缓鑰 */ + private String createBy; + + /** 鍒涘缓鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** 鏇存柊鑰 */ + private String updateBy; + + /** 鏇存柊鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + /** 澶囨敞 */ + private String remark; + + /** 璇锋眰鍙傛暟 */ + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private Map params; + + public String getSearchValue() + { + return searchValue; + } + + public void setSearchValue(String searchValue) + { + this.searchValue = searchValue; + } + + public String getCreateBy() + { + return createBy; + } + + public void setCreateBy(String createBy) + { + this.createBy = createBy; + } + + public Date getCreateTime() + { + return createTime; + } + + public void setCreateTime(Date createTime) + { + this.createTime = createTime; + } + + public String getUpdateBy() + { + return updateBy; + } + + public void setUpdateBy(String updateBy) + { + this.updateBy = updateBy; + } + + public Date getUpdateTime() + { + return updateTime; + } + + public void setUpdateTime(Date updateTime) + { + this.updateTime = updateTime; + } + + public String getRemark() + { + return remark; + } + + public void setRemark(String remark) + { + this.remark = remark; + } + + public Map getParams() + { + if (params == null) + { + params = new HashMap<>(); + } + return params; + } + + public void setParams(Map params) + { + this.params = params; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/R.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/R.java new file mode 100644 index 0000000000000000000000000000000000000000..ff939c3e58835803c21340b8bacebac21aeca388 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/R.java @@ -0,0 +1,116 @@ +package com.ruoyi.common.core.domain; + +import com.ruoyi.common.constant.HttpStatus; + +import java.io.Serializable; + +/** + * 鍝嶅簲淇℃伅涓讳綋 + * + * @author ruoyi + */ +public class R implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 鎴愬姛 */ + public static final int SUCCESS = HttpStatus.SUCCESS; + + /** 澶辫触 */ + public static final int FAIL = HttpStatus.ERROR; + + private int code; + + private String msg; + + private T data; + + public static R ok() + { + return restResult(null, SUCCESS, "鎿嶄綔鎴愬姛"); + } + + public static R ok(T data) + { + return restResult(data, SUCCESS, "鎿嶄綔鎴愬姛"); + } + + public static R ok(T data, String msg) + { + return restResult(data, SUCCESS, msg); + } + + public static R fail() + { + return restResult(null, FAIL, "鎿嶄綔澶辫触"); + } + + public static R fail(String msg) + { + return restResult(null, FAIL, msg); + } + + public static R fail(T data) + { + return restResult(data, FAIL, "鎿嶄綔澶辫触"); + } + + public static R fail(T data, String msg) + { + return restResult(data, FAIL, msg); + } + + public static R fail(int code, String msg) + { + return restResult(null, code, msg); + } + + private static R restResult(T data, int code, String msg) + { + R apiResult = new R<>(); + apiResult.setCode(code); + apiResult.setData(data); + apiResult.setMsg(msg); + return apiResult; + } + + public int getCode() + { + return code; + } + + public void setCode(int code) + { + this.code = code; + } + + public String getMsg() + { + return msg; + } + + public void setMsg(String msg) + { + this.msg = msg; + } + + public T getData() + { + return data; + } + + public void setData(T data) + { + this.data = data; + } + + public static Boolean isError(R ret) + { + return !isSuccess(ret); + } + + public static Boolean isSuccess(R ret) + { + return R.SUCCESS == ret.getCode(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeEntity.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeEntity.java new file mode 100644 index 0000000000000000000000000000000000000000..a180a18c59353522f3ee3a60ba1a8d05c8b23090 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeEntity.java @@ -0,0 +1,79 @@ +package com.ruoyi.common.core.domain; + +import java.util.ArrayList; +import java.util.List; + +/** + * Tree鍩虹被 + * + * @author ruoyi + */ +public class TreeEntity extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鐖惰彍鍗曞悕绉 */ + private String parentName; + + /** 鐖惰彍鍗旾D */ + private Long parentId; + + /** 鏄剧ず椤哄簭 */ + private Integer orderNum; + + /** 绁栫骇鍒楄〃 */ + private String ancestors; + + /** 瀛愰儴闂 */ + private List children = new ArrayList<>(); + + public String getParentName() + { + return parentName; + } + + public void setParentName(String parentName) + { + this.parentName = parentName; + } + + public Long getParentId() + { + return parentId; + } + + public void setParentId(Long parentId) + { + this.parentId = parentId; + } + + public Integer getOrderNum() + { + return orderNum; + } + + public void setOrderNum(Integer orderNum) + { + this.orderNum = orderNum; + } + + public String getAncestors() + { + return ancestors; + } + + public void setAncestors(String ancestors) + { + this.ancestors = ancestors; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java new file mode 100644 index 0000000000000000000000000000000000000000..04a341185386759d2ca22fd32905215c0232e1d1 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/TreeSelect.java @@ -0,0 +1,78 @@ +package com.ruoyi.common.core.domain; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.ruoyi.common.core.domain.entity.SysDept; +import com.ruoyi.common.core.domain.entity.SysMenu; + +import java.io.Serializable; +import java.util.List; +import java.util.stream.Collectors; + +/** + * Treeselect鏍戠粨鏋勫疄浣撶被 + * + * @author ruoyi + */ +public class TreeSelect implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 鑺傜偣ID */ + private Long id; + + /** 鑺傜偣鍚嶇О */ + private String label; + + /** 瀛愯妭鐐 */ + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private List children; + + public TreeSelect() + { + + } + + public TreeSelect(SysDept dept) + { + this.id = dept.getDeptId(); + this.label = dept.getDeptName(); + this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + public TreeSelect(SysMenu menu) + { + this.id = menu.getMenuId(); + this.label = menu.getMenuName(); + this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + public Long getId() + { + return id; + } + + public void setId(Long id) + { + this.id = id; + } + + public String getLabel() + { + return label; + } + + public void setLabel(String label) + { + this.label = label; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java new file mode 100644 index 0000000000000000000000000000000000000000..e8c76bdbdec9718944e9cfd18c02802c733ed0cf --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDept.java @@ -0,0 +1,204 @@ +package com.ruoyi.common.core.domain.entity; + +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.util.ArrayList; +import java.util.List; + +/** + * 閮ㄩ棬琛 sys_dept + * + * @author ruoyi + */ +public class SysDept extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 閮ㄩ棬ID */ + private Long deptId; + + /** 鐖堕儴闂↖D */ + private Long parentId; + + /** 绁栫骇鍒楄〃 */ + private String ancestors; + + /** 閮ㄩ棬鍚嶇О */ + private String deptName; + + /** 鏄剧ず椤哄簭 */ + private Integer orderNum; + + /** 璐熻矗浜 */ + private String leader; + + /** 鑱旂郴鐢佃瘽 */ + private String phone; + + /** 閭 */ + private String email; + + /** 閮ㄩ棬鐘舵:0姝e父,1鍋滅敤 */ + private String status; + + /** 鍒犻櫎鏍囧織锛0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛 */ + private String delFlag; + + /** 鐖堕儴闂ㄥ悕绉 */ + private String parentName; + + /** 瀛愰儴闂 */ + private List children = new ArrayList(); + + public Long getDeptId() + { + return deptId; + } + + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + public Long getParentId() + { + return parentId; + } + + public void setParentId(Long parentId) + { + this.parentId = parentId; + } + + public String getAncestors() + { + return ancestors; + } + + public void setAncestors(String ancestors) + { + this.ancestors = ancestors; + } + + @NotBlank(message = "閮ㄩ棬鍚嶇О涓嶈兘涓虹┖") + @Size(min = 0, max = 30, message = "閮ㄩ棬鍚嶇О闀垮害涓嶈兘瓒呰繃30涓瓧绗") + public String getDeptName() + { + return deptName; + } + + public void setDeptName(String deptName) + { + this.deptName = deptName; + } + + @NotNull(message = "鏄剧ず椤哄簭涓嶈兘涓虹┖") + public Integer getOrderNum() + { + return orderNum; + } + + public void setOrderNum(Integer orderNum) + { + this.orderNum = orderNum; + } + + public String getLeader() + { + return leader; + } + + public void setLeader(String leader) + { + this.leader = leader; + } + + @Size(min = 0, max = 11, message = "鑱旂郴鐢佃瘽闀垮害涓嶈兘瓒呰繃11涓瓧绗") + public String getPhone() + { + return phone; + } + + public void setPhone(String phone) + { + this.phone = phone; + } + + @Email(message = "閭鏍煎紡涓嶆纭") + @Size(min = 0, max = 50, message = "閭闀垮害涓嶈兘瓒呰繃50涓瓧绗") + public String getEmail() + { + return email; + } + + public void setEmail(String email) + { + this.email = email; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getDelFlag() + { + return delFlag; + } + + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getParentName() + { + return parentName; + } + + public void setParentName(String parentName) + { + this.parentName = parentName; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("deptId", getDeptId()) + .append("parentId", getParentId()) + .append("ancestors", getAncestors()) + .append("deptName", getDeptName()) + .append("orderNum", getOrderNum()) + .append("leader", getLeader()) + .append("phone", getPhone()) + .append("email", getEmail()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .toString(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java new file mode 100644 index 0000000000000000000000000000000000000000..fdf304d72230d721ac66af348e2926552ca09591 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictData.java @@ -0,0 +1,177 @@ +package com.ruoyi.common.core.domain.entity; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +/** + * 瀛楀吀鏁版嵁琛 sys_dict_data + * + * @author ruoyi + */ +public class SysDictData extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 瀛楀吀缂栫爜 */ + @Excel(name = "瀛楀吀缂栫爜", cellType = ColumnType.NUMERIC) + private Long dictCode; + + /** 瀛楀吀鎺掑簭 */ + @Excel(name = "瀛楀吀鎺掑簭", cellType = ColumnType.NUMERIC) + private Long dictSort; + + /** 瀛楀吀鏍囩 */ + @Excel(name = "瀛楀吀鏍囩") + private String dictLabel; + + /** 瀛楀吀閿 */ + @Excel(name = "瀛楀吀閿") + private String dictValue; + + /** 瀛楀吀绫诲瀷 */ + @Excel(name = "瀛楀吀绫诲瀷") + private String dictType; + + /** 鏍峰紡灞炴э紙鍏朵粬鏍峰紡鎵╁睍锛 */ + private String cssClass; + + /** 琛ㄦ牸瀛楀吀鏍峰紡 */ + private String listClass; + + /** 鏄惁榛樿锛圷鏄 N鍚︼級 */ + @Excel(name = "鏄惁榛樿", readConverterExp = "Y=鏄,N=鍚") + private String isDefault; + + /** 鐘舵侊紙0姝e父 1鍋滅敤锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=姝e父,1=鍋滅敤") + private String status; + + public Long getDictCode() + { + return dictCode; + } + + public void setDictCode(Long dictCode) + { + this.dictCode = dictCode; + } + + public Long getDictSort() + { + return dictSort; + } + + public void setDictSort(Long dictSort) + { + this.dictSort = dictSort; + } + + @NotBlank(message = "瀛楀吀鏍囩涓嶈兘涓虹┖") + @Size(min = 0, max = 100, message = "瀛楀吀鏍囩闀垮害涓嶈兘瓒呰繃100涓瓧绗") + public String getDictLabel() + { + return dictLabel; + } + + public void setDictLabel(String dictLabel) + { + this.dictLabel = dictLabel; + } + + @NotBlank(message = "瀛楀吀閿间笉鑳戒负绌") + @Size(min = 0, max = 100, message = "瀛楀吀閿奸暱搴︿笉鑳借秴杩100涓瓧绗") + public String getDictValue() + { + return dictValue; + } + + public void setDictValue(String dictValue) + { + this.dictValue = dictValue; + } + + @NotBlank(message = "瀛楀吀绫诲瀷涓嶈兘涓虹┖") + @Size(min = 0, max = 100, message = "瀛楀吀绫诲瀷闀垮害涓嶈兘瓒呰繃100涓瓧绗") + public String getDictType() + { + return dictType; + } + + public void setDictType(String dictType) + { + this.dictType = dictType; + } + + @Size(min = 0, max = 100, message = "鏍峰紡灞炴ч暱搴︿笉鑳借秴杩100涓瓧绗") + public String getCssClass() + { + return cssClass; + } + + public void setCssClass(String cssClass) + { + this.cssClass = cssClass; + } + + public String getListClass() + { + return listClass; + } + + public void setListClass(String listClass) + { + this.listClass = listClass; + } + + public boolean getDefault() + { + return UserConstants.YES.equals(this.isDefault); + } + + public String getIsDefault() + { + return isDefault; + } + + public void setIsDefault(String isDefault) + { + this.isDefault = isDefault; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("dictCode", getDictCode()) + .append("dictSort", getDictSort()) + .append("dictLabel", getDictLabel()) + .append("dictValue", getDictValue()) + .append("dictType", getDictType()) + .append("cssClass", getCssClass()) + .append("listClass", getListClass()) + .append("isDefault", getIsDefault()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java new file mode 100644 index 0000000000000000000000000000000000000000..30149ee7b5d66cb0c76d4688589c3d95f4bf5c2c --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysDictType.java @@ -0,0 +1,97 @@ +package com.ruoyi.common.core.domain.entity; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; + +/** + * 瀛楀吀绫诲瀷琛 sys_dict_type + * + * @author ruoyi + */ +public class SysDictType extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 瀛楀吀涓婚敭 */ + @Excel(name = "瀛楀吀涓婚敭", cellType = ColumnType.NUMERIC) + private Long dictId; + + /** 瀛楀吀鍚嶇О */ + @Excel(name = "瀛楀吀鍚嶇О") + private String dictName; + + /** 瀛楀吀绫诲瀷 */ + @Excel(name = "瀛楀吀绫诲瀷") + private String dictType; + + /** 鐘舵侊紙0姝e父 1鍋滅敤锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=姝e父,1=鍋滅敤") + private String status; + + public Long getDictId() + { + return dictId; + } + + public void setDictId(Long dictId) + { + this.dictId = dictId; + } + + @NotBlank(message = "瀛楀吀鍚嶇О涓嶈兘涓虹┖") + @Size(min = 0, max = 100, message = "瀛楀吀绫诲瀷鍚嶇О闀垮害涓嶈兘瓒呰繃100涓瓧绗") + public String getDictName() + { + return dictName; + } + + public void setDictName(String dictName) + { + this.dictName = dictName; + } + + @NotBlank(message = "瀛楀吀绫诲瀷涓嶈兘涓虹┖") + @Size(min = 0, max = 100, message = "瀛楀吀绫诲瀷绫诲瀷闀垮害涓嶈兘瓒呰繃100涓瓧绗") + @Pattern(regexp = "^[a-z][a-z0-9_]*$", message = "瀛楀吀绫诲瀷蹇呴』浠ュ瓧姣嶅紑澶达紝涓斿彧鑳戒负锛堝皬鍐欏瓧姣嶏紝鏁板瓧锛屼笅婊戠嚎锛") + public String getDictType() + { + return dictType; + } + + public void setDictType(String dictType) + { + this.dictType = dictType; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("dictId", getDictId()) + .append("dictName", getDictName()) + .append("dictType", getDictType()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java new file mode 100644 index 0000000000000000000000000000000000000000..6ad816e45d888f48c0c1cfc9133a88dd88037184 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java @@ -0,0 +1,275 @@ +package com.ruoyi.common.core.domain.entity; + +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.util.ArrayList; +import java.util.List; + +/** + * 鑿滃崟鏉冮檺琛 sys_menu + * + * @author ruoyi + */ +public class SysMenu extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鑿滃崟ID */ + private Long menuId; + + /** 鑿滃崟鍚嶇О */ + private String menuName; + + /** 鐖惰彍鍗曞悕绉 */ + private String parentName; + + /** 鐖惰彍鍗旾D */ + private Long parentId; + + /** 鏄剧ず椤哄簭 */ + private Integer orderNum; + + /** 璺敱鍦板潃 */ + private String path; + + /** 缁勪欢璺緞 */ + private String component; + + /** 璺敱鍙傛暟 */ + private String query; + + /** 璺敱鍚嶇О锛岄粯璁ゅ拰璺敱鍦板潃鐩稿悓鐨勯┘宄版牸寮忥紙娉ㄦ剰锛氬洜涓簐ue3鐗堟湰鐨剅outer浼氬垹闄ゅ悕绉扮浉鍚岃矾鐢憋紝涓洪伩鍏嶅悕瀛楃殑鍐茬獊锛岀壒娈婃儏鍐靛彲浠ヨ嚜瀹氫箟锛 */ + private String routeName; + + /** 鏄惁涓哄閾撅紙0鏄 1鍚︼級 */ + private String isFrame; + + /** 鏄惁缂撳瓨锛0缂撳瓨 1涓嶇紦瀛橈級 */ + private String isCache; + + /** 绫诲瀷锛圡鐩綍 C鑿滃崟 F鎸夐挳锛 */ + private String menuType; + + /** 鏄剧ず鐘舵侊紙0鏄剧ず 1闅愯棌锛 */ + private String visible; + + /** 鑿滃崟鐘舵侊紙0姝e父 1鍋滅敤锛 */ + private String status; + + /** 鏉冮檺瀛楃涓 */ + private String perms; + + /** 鑿滃崟鍥炬爣 */ + private String icon; + + /** 瀛愯彍鍗 */ + private List children = new ArrayList(); + + public Long getMenuId() + { + return menuId; + } + + public void setMenuId(Long menuId) + { + this.menuId = menuId; + } + + @NotBlank(message = "鑿滃崟鍚嶇О涓嶈兘涓虹┖") + @Size(min = 0, max = 50, message = "鑿滃崟鍚嶇О闀垮害涓嶈兘瓒呰繃50涓瓧绗") + public String getMenuName() + { + return menuName; + } + + public void setMenuName(String menuName) + { + this.menuName = menuName; + } + + public String getParentName() + { + return parentName; + } + + public void setParentName(String parentName) + { + this.parentName = parentName; + } + + public Long getParentId() + { + return parentId; + } + + public void setParentId(Long parentId) + { + this.parentId = parentId; + } + + @NotNull(message = "鏄剧ず椤哄簭涓嶈兘涓虹┖") + public Integer getOrderNum() + { + return orderNum; + } + + public void setOrderNum(Integer orderNum) + { + this.orderNum = orderNum; + } + + @Size(min = 0, max = 200, message = "璺敱鍦板潃涓嶈兘瓒呰繃200涓瓧绗") + public String getPath() + { + return path; + } + + public void setPath(String path) + { + this.path = path; + } + + @Size(min = 0, max = 200, message = "缁勪欢璺緞涓嶈兘瓒呰繃255涓瓧绗") + public String getComponent() + { + return component; + } + + public void setComponent(String component) + { + this.component = component; + } + + public String getQuery() + { + return query; + } + + public void setQuery(String query) + { + this.query = query; + } + + public String getRouteName() + { + return routeName; + } + + public void setRouteName(String routeName) + { + this.routeName = routeName; + } + + public String getIsFrame() + { + return isFrame; + } + + public void setIsFrame(String isFrame) + { + this.isFrame = isFrame; + } + + public String getIsCache() + { + return isCache; + } + + public void setIsCache(String isCache) + { + this.isCache = isCache; + } + + @NotBlank(message = "鑿滃崟绫诲瀷涓嶈兘涓虹┖") + public String getMenuType() + { + return menuType; + } + + public void setMenuType(String menuType) + { + this.menuType = menuType; + } + + public String getVisible() + { + return visible; + } + + public void setVisible(String visible) + { + this.visible = visible; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + @Size(min = 0, max = 100, message = "鏉冮檺鏍囪瘑闀垮害涓嶈兘瓒呰繃100涓瓧绗") + public String getPerms() + { + return perms; + } + + public void setPerms(String perms) + { + this.perms = perms; + } + + public String getIcon() + { + return icon; + } + + public void setIcon(String icon) + { + this.icon = icon; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("menuId", getMenuId()) + .append("menuName", getMenuName()) + .append("parentId", getParentId()) + .append("orderNum", getOrderNum()) + .append("path", getPath()) + .append("component", getComponent()) + .append("query", getQuery()) + .append("routeName", getRouteName()) + .append("isFrame", getIsFrame()) + .append("IsCache", getIsCache()) + .append("menuType", getMenuType()) + .append("visible", getVisible()) + .append("status ", getStatus()) + .append("perms", getPerms()) + .append("icon", getIcon()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java new file mode 100644 index 0000000000000000000000000000000000000000..559f55f8c237ba84095f8366ed81eee55e936e81 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java @@ -0,0 +1,242 @@ +package com.ruoyi.common.core.domain.entity; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; +import java.util.Set; + +/** + * 瑙掕壊琛 sys_role + * + * @author ruoyi + */ +public class SysRole extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 瑙掕壊ID */ + @Excel(name = "瑙掕壊搴忓彿", cellType = ColumnType.NUMERIC) + private Long roleId; + + /** 瑙掕壊鍚嶇О */ + @Excel(name = "瑙掕壊鍚嶇О") + private String roleName; + + /** 瑙掕壊鏉冮檺 */ + @Excel(name = "瑙掕壊鏉冮檺") + private String roleKey; + + /** 瑙掕壊鎺掑簭 */ + @Excel(name = "瑙掕壊鎺掑簭") + private Integer roleSort; + + /** 鏁版嵁鑼冨洿锛1锛氭墍鏈夋暟鎹潈闄愶紱2锛氳嚜瀹氫箟鏁版嵁鏉冮檺锛3锛氭湰閮ㄩ棬鏁版嵁鏉冮檺锛4锛氭湰閮ㄩ棬鍙婁互涓嬫暟鎹潈闄愶紱5锛氫粎鏈汉鏁版嵁鏉冮檺锛 */ + @Excel(name = "鏁版嵁鑼冨洿", readConverterExp = "1=鎵鏈夋暟鎹潈闄,2=鑷畾涔夋暟鎹潈闄,3=鏈儴闂ㄦ暟鎹潈闄,4=鏈儴闂ㄥ強浠ヤ笅鏁版嵁鏉冮檺,5=浠呮湰浜烘暟鎹潈闄") + private String dataScope; + + /** 鑿滃崟鏍戦夋嫨椤规槸鍚﹀叧鑱旀樉绀猴紙 0锛氱埗瀛愪笉浜掔浉鍏宠仈鏄剧ず 1锛氱埗瀛愪簰鐩稿叧鑱旀樉绀猴級 */ + private boolean menuCheckStrictly; + + /** 閮ㄩ棬鏍戦夋嫨椤规槸鍚﹀叧鑱旀樉绀猴紙0锛氱埗瀛愪笉浜掔浉鍏宠仈鏄剧ず 1锛氱埗瀛愪簰鐩稿叧鑱旀樉绀 锛 */ + private boolean deptCheckStrictly; + + /** 瑙掕壊鐘舵侊紙0姝e父 1鍋滅敤锛 */ + @Excel(name = "瑙掕壊鐘舵", readConverterExp = "0=姝e父,1=鍋滅敤") + private String status; + + /** 鍒犻櫎鏍囧織锛0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛 */ + private String delFlag; + + /** 鐢ㄦ埛鏄惁瀛樺湪姝よ鑹叉爣璇 榛樿涓嶅瓨鍦 */ + private boolean flag = false; + + /** 鑿滃崟缁 */ + private Long[] menuIds; + + /** 閮ㄩ棬缁勶紙鏁版嵁鏉冮檺锛 */ + private Long[] deptIds; + + /** 瑙掕壊鑿滃崟鏉冮檺 */ + private Set permissions; + + public SysRole() + { + + } + + public SysRole(Long roleId) + { + this.roleId = roleId; + } + + public Long getRoleId() + { + return roleId; + } + + public void setRoleId(Long roleId) + { + this.roleId = roleId; + } + + public boolean isAdmin() + { + return isAdmin(this.roleId); + } + + public static boolean isAdmin(Long roleId) + { + return roleId != null && 1L == roleId; + } + + @NotBlank(message = "瑙掕壊鍚嶇О涓嶈兘涓虹┖") + @Size(min = 0, max = 30, message = "瑙掕壊鍚嶇О闀垮害涓嶈兘瓒呰繃30涓瓧绗") + public String getRoleName() + { + return roleName; + } + + public void setRoleName(String roleName) + { + this.roleName = roleName; + } + + @NotBlank(message = "鏉冮檺瀛楃涓嶈兘涓虹┖") + @Size(min = 0, max = 100, message = "鏉冮檺瀛楃闀垮害涓嶈兘瓒呰繃100涓瓧绗") + public String getRoleKey() + { + return roleKey; + } + + public void setRoleKey(String roleKey) + { + this.roleKey = roleKey; + } + + @NotNull(message = "鏄剧ず椤哄簭涓嶈兘涓虹┖") + public Integer getRoleSort() + { + return roleSort; + } + + public void setRoleSort(Integer roleSort) + { + this.roleSort = roleSort; + } + + public String getDataScope() + { + return dataScope; + } + + public void setDataScope(String dataScope) + { + this.dataScope = dataScope; + } + + public boolean isMenuCheckStrictly() + { + return menuCheckStrictly; + } + + public void setMenuCheckStrictly(boolean menuCheckStrictly) + { + this.menuCheckStrictly = menuCheckStrictly; + } + + public boolean isDeptCheckStrictly() + { + return deptCheckStrictly; + } + + public void setDeptCheckStrictly(boolean deptCheckStrictly) + { + this.deptCheckStrictly = deptCheckStrictly; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getDelFlag() + { + return delFlag; + } + + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public boolean isFlag() + { + return flag; + } + + public void setFlag(boolean flag) + { + this.flag = flag; + } + + public Long[] getMenuIds() + { + return menuIds; + } + + public void setMenuIds(Long[] menuIds) + { + this.menuIds = menuIds; + } + + public Long[] getDeptIds() + { + return deptIds; + } + + public void setDeptIds(Long[] deptIds) + { + this.deptIds = deptIds; + } + + public Set getPermissions() + { + return permissions; + } + + public void setPermissions(Set permissions) + { + this.permissions = permissions; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("roleId", getRoleId()) + .append("roleName", getRoleName()) + .append("roleKey", getRoleKey()) + .append("roleSort", getRoleSort()) + .append("dataScope", getDataScope()) + .append("menuCheckStrictly", isMenuCheckStrictly()) + .append("deptCheckStrictly", isDeptCheckStrictly()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java new file mode 100644 index 0000000000000000000000000000000000000000..52f10198407f1fad0a64f79a74b865faaa7a1cee --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java @@ -0,0 +1,354 @@ +package com.ruoyi.common.core.domain.entity; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; +import com.ruoyi.common.annotation.Excel.Type; +import com.ruoyi.common.annotation.Excels; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.xss.Xss; +import lombok.Getter; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.util.Date; +import java.util.List; + +/** + * 鐢ㄦ埛瀵硅薄 sys_user + * + * @author ruoyi + */ +public class SysUser extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鐢ㄦ埛ID */ + @Excel(name = "鐢ㄦ埛搴忓彿", type = Type.EXPORT, cellType = ColumnType.NUMERIC, prompt = "鐢ㄦ埛缂栧彿") + private Long userId; + + /** 閮ㄩ棬ID */ + @Excel(name = "閮ㄩ棬缂栧彿", type = Type.IMPORT) + private Long deptId; + + /** 鏈烘瀯ID */ + @Excel(name = "鏈烘瀯ID", type = Type.IMPORT) + private Long evaluateAgencyId; + + /** 瀛︿範涓績ID */ + @Excel(name = "瀛︿範涓績ID", type = Type.IMPORT) + private Long studyCenterId; + + /** 鐢ㄦ埛璐﹀彿 */ + @Excel(name = "鐧诲綍鍚嶇О") + private String userName; + + /** 鐢ㄦ埛鏄电О */ + @Excel(name = "鐢ㄦ埛鍚嶇О") + private String nickName; + + /** 鐢ㄦ埛閭 */ + @Excel(name = "鐢ㄦ埛閭") + private String email; + + /** 鎵嬫満鍙风爜 */ + @Excel(name = "鎵嬫満鍙风爜", cellType = ColumnType.TEXT) + private String phonenumber; + + /** 鐢ㄦ埛鎬у埆 */ + @Excel(name = "鐢ㄦ埛鎬у埆", readConverterExp = "0=鐢,1=濂,2=鏈煡") + private String sex; + + /** 鐢ㄦ埛澶村儚 */ + private String avatar; + + /** 瀵嗙爜 */ + private String password; + + /** 甯愬彿鐘舵侊紙0姝e父 1鍋滅敤锛 */ + @Excel(name = "甯愬彿鐘舵", readConverterExp = "0=姝e父,1=鍋滅敤") + private String status; + + /** 鍒犻櫎鏍囧織锛0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛 */ + private String delFlag; + + /** 鏈鍚庣櫥褰旾P */ + @Excel(name = "鏈鍚庣櫥褰旾P", type = Type.EXPORT) + private String loginIp; + + /** 鏈鍚庣櫥褰曟椂闂 */ + @Excel(name = "鏈鍚庣櫥褰曟椂闂", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT) + private Date loginDate; + + /** 閮ㄩ棬瀵硅薄 */ + @Excels({ + @Excel(name = "閮ㄩ棬鍚嶇О", targetAttr = "deptName", type = Type.EXPORT), + @Excel(name = "閮ㄩ棬璐熻矗浜", targetAttr = "leader", type = Type.EXPORT) + }) + private SysDept dept; + + /** 瑙掕壊瀵硅薄 */ + private List roles; + + /** 瑙掕壊缁 */ + private Long[] roleIds; + + /** 宀椾綅缁 */ + private Long[] postIds; + + /** 瑙掕壊ID */ + private Long roleId; + + public SysUser() + { + + } + + public SysUser(Long userId) + { + this.userId = userId; + } + + public Long getUserId() + { + return userId; + } + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public boolean isAdmin() + { + return isAdmin(this.userId); + } + + public static boolean isAdmin(Long userId) + { + return userId != null && 1L == userId; + } + + public Long getDeptId() + { + return deptId; + } + + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + public Long getEvaluateAgencyId() + { + return evaluateAgencyId; + } + + public void setEvaluateAgencyId(Long evaluateAgencyId) { + this.evaluateAgencyId = evaluateAgencyId; + } + + public Long getStudyCenterId() + { + return studyCenterId; + } + + public void setStudyCenterId(Long studyCenterId) { + this.studyCenterId = studyCenterId; + } + + @Xss(message = "鐢ㄦ埛鏄电О涓嶈兘鍖呭惈鑴氭湰瀛楃") + @Size(min = 0, max = 30, message = "鐢ㄦ埛鏄电О闀垮害涓嶈兘瓒呰繃30涓瓧绗") + public String getNickName() + { + return nickName; + } + + public void setNickName(String nickName) + { + this.nickName = nickName; + } + + @Xss(message = "鐢ㄦ埛璐﹀彿涓嶈兘鍖呭惈鑴氭湰瀛楃") + @NotBlank(message = "鐢ㄦ埛璐﹀彿涓嶈兘涓虹┖") + @Size(min = 0, max = 30, message = "鐢ㄦ埛璐﹀彿闀垮害涓嶈兘瓒呰繃30涓瓧绗") + public String getUserName() + { + return userName; + } + + public void setUserName(String userName) + { + this.userName = userName; + } + + @Email(message = "閭鏍煎紡涓嶆纭") + @Size(min = 0, max = 50, message = "閭闀垮害涓嶈兘瓒呰繃50涓瓧绗") + public String getEmail() + { + return email; + } + + public void setEmail(String email) + { + this.email = email; + } + + @Size(min = 0, max = 11, message = "鎵嬫満鍙风爜闀垮害涓嶈兘瓒呰繃11涓瓧绗") + public String getPhonenumber() + { + return phonenumber; + } + + public void setPhonenumber(String phonenumber) + { + this.phonenumber = phonenumber; + } + + public String getSex() + { + return sex; + } + + public void setSex(String sex) + { + this.sex = sex; + } + + public String getAvatar() + { + return avatar; + } + + public void setAvatar(String avatar) + { + this.avatar = avatar; + } + + public String getPassword() + { + return password; + } + + public void setPassword(String password) + { + this.password = password; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getDelFlag() + { + return delFlag; + } + + public void setDelFlag(String delFlag) + { + this.delFlag = delFlag; + } + + public String getLoginIp() + { + return loginIp; + } + + public void setLoginIp(String loginIp) + { + this.loginIp = loginIp; + } + + public Date getLoginDate() + { + return loginDate; + } + + public void setLoginDate(Date loginDate) + { + this.loginDate = loginDate; + } + + public SysDept getDept() + { + return dept; + } + + public void setDept(SysDept dept) + { + this.dept = dept; + } + + public List getRoles() + { + return roles; + } + + public void setRoles(List roles) + { + this.roles = roles; + } + + public Long[] getRoleIds() + { + return roleIds; + } + + public void setRoleIds(Long[] roleIds) + { + this.roleIds = roleIds; + } + + public Long[] getPostIds() + { + return postIds; + } + + public void setPostIds(Long[] postIds) + { + this.postIds = postIds; + } + + public Long getRoleId() + { + return roleId; + } + + public void setRoleId(Long roleId) + { + this.roleId = roleId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("deptId", getDeptId()) + .append("userName", getUserName()) + .append("nickName", getNickName()) + .append("email", getEmail()) + .append("phonenumber", getPhonenumber()) + .append("sex", getSex()) + .append("avatar", getAvatar()) + .append("password", getPassword()) + .append("status", getStatus()) + .append("delFlag", getDelFlag()) + .append("loginIp", getLoginIp()) + .append("loginDate", getLoginDate()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .append("dept", getDept()) + .toString(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java new file mode 100644 index 0000000000000000000000000000000000000000..b5bc8c8e2fcb25591305b45f21fd93ee3c315b2c --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginBody.java @@ -0,0 +1,69 @@ +package com.ruoyi.common.core.domain.model; + +/** + * 鐢ㄦ埛鐧诲綍瀵硅薄 + * + * @author ruoyi + */ +public class LoginBody +{ + /** + * 鐢ㄦ埛鍚 + */ + private String username; + + /** + * 鐢ㄦ埛瀵嗙爜 + */ + private String password; + + /** + * 楠岃瘉鐮 + */ + private String code; + + /** + * 鍞竴鏍囪瘑 + */ + private String uuid; + + public String getUsername() + { + return username; + } + + public void setUsername(String username) + { + this.username = username; + } + + public String getPassword() + { + return password; + } + + public void setPassword(String password) + { + this.password = password; + } + + public String getCode() + { + return code; + } + + public void setCode(String code) + { + this.code = code; + } + + public String getUuid() + { + return uuid; + } + + public void setUuid(String uuid) + { + this.uuid = uuid; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java new file mode 100644 index 0000000000000000000000000000000000000000..9d483e50b6a5a4986a4cc4f7ef7ddbc4675939ed --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/LoginUser.java @@ -0,0 +1,295 @@ +package com.ruoyi.common.core.domain.model; + +import com.alibaba.fastjson2.annotation.JSONField; +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import java.util.Collection; +import java.util.Set; + +/** + * 鐧诲綍鐢ㄦ埛韬唤鏉冮檺 + * + * @author ruoyi + */ +public class LoginUser implements UserDetails +{ + private static final long serialVersionUID = 1L; + + /** + * 鐢ㄦ埛ID + */ + private Long userId; + + /** + * 閮ㄩ棬ID + */ + private Long deptId; + + /** + * 鏈烘瀯ID + */ + private Long evaluateAgencyId; + + /** + * 瀛︿範涓績ID + */ + private Long studyCenterId; + + /** + * 鐢ㄦ埛鍞竴鏍囪瘑 + */ + private String token; + + /** + * 鐧诲綍鏃堕棿 + */ + private Long loginTime; + + /** + * 杩囨湡鏃堕棿 + */ + private Long expireTime; + + /** + * 鐧诲綍IP鍦板潃 + */ + private String ipaddr; + + /** + * 鐧诲綍鍦扮偣 + */ + private String loginLocation; + + /** + * 娴忚鍣ㄧ被鍨 + */ + private String browser; + + /** + * 鎿嶄綔绯荤粺 + */ + private String os; + + /** + * 鏉冮檺鍒楄〃 + */ + private Set permissions; + + /** + * 鐢ㄦ埛淇℃伅 + */ + private SysUser user; + + public LoginUser() + { + } + + public LoginUser(SysUser user, Set permissions) + { + this.user = user; + this.permissions = permissions; + } + + public LoginUser(Long userId, Long deptId, Long evaluateAgencyId, Long studyCenterId, SysUser user, Set permissions) + { + this.userId = userId; + this.deptId = deptId; + this.evaluateAgencyId = evaluateAgencyId; + this.studyCenterId = studyCenterId; + this.user = user; + this.permissions = permissions; + } + + public Long getUserId() + { + return userId; + } + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getDeptId() + { + return deptId; + } + + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + public Long getEvaluateAgencyId() { + return evaluateAgencyId; + } + + public void setEvaluateAgencyId(Long evaluateAgencyId) { + this.evaluateAgencyId = evaluateAgencyId; + } + + public Long getStudyCenterId() { + return studyCenterId; + } + + public void setStudyCenterId(Long studyCenterId) { + this.studyCenterId = studyCenterId; + } + + public String getToken() + { + return token; + } + + public void setToken(String token) + { + this.token = token; + } + + @JSONField(serialize = false) + @Override + public String getPassword() + { + return user.getPassword(); + } + + @Override + public String getUsername() + { + return user.getUserName(); + } + + /** + * 璐︽埛鏄惁鏈繃鏈,杩囨湡鏃犳硶楠岃瘉 + */ + @JSONField(serialize = false) + @Override + public boolean isAccountNonExpired() + { + return true; + } + + /** + * 鎸囧畾鐢ㄦ埛鏄惁瑙i攣,閿佸畾鐨勭敤鎴锋棤娉曡繘琛岃韩浠介獙璇 + * + * @return + */ + @JSONField(serialize = false) + @Override + public boolean isAccountNonLocked() + { + return true; + } + + /** + * 鎸囩ず鏄惁宸茶繃鏈熺殑鐢ㄦ埛鐨勫嚟鎹(瀵嗙爜),杩囨湡鐨勫嚟鎹槻姝㈣璇 + * + * @return + */ + @JSONField(serialize = false) + @Override + public boolean isCredentialsNonExpired() + { + return true; + } + + /** + * 鏄惁鍙敤 ,绂佺敤鐨勭敤鎴蜂笉鑳借韩浠介獙璇 + * + * @return + */ + @JSONField(serialize = false) + @Override + public boolean isEnabled() + { + return true; + } + + public Long getLoginTime() + { + return loginTime; + } + + public void setLoginTime(Long loginTime) + { + this.loginTime = loginTime; + } + + public String getIpaddr() + { + return ipaddr; + } + + public void setIpaddr(String ipaddr) + { + this.ipaddr = ipaddr; + } + + public String getLoginLocation() + { + return loginLocation; + } + + public void setLoginLocation(String loginLocation) + { + this.loginLocation = loginLocation; + } + + public String getBrowser() + { + return browser; + } + + public void setBrowser(String browser) + { + this.browser = browser; + } + + public String getOs() + { + return os; + } + + public void setOs(String os) + { + this.os = os; + } + + public Long getExpireTime() + { + return expireTime; + } + + public void setExpireTime(Long expireTime) + { + this.expireTime = expireTime; + } + + public Set getPermissions() + { + return permissions; + } + + public void setPermissions(Set permissions) + { + this.permissions = permissions; + } + + public SysUser getUser() + { + return user; + } + + public void setUser(SysUser user) + { + this.user = user; + } + + @Override + public Collection getAuthorities() + { + return null; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/RegisterBody.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/RegisterBody.java new file mode 100644 index 0000000000000000000000000000000000000000..868a1fc520430cac797c15d9b80252d741a62ccb --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/model/RegisterBody.java @@ -0,0 +1,11 @@ +package com.ruoyi.common.core.domain.model; + +/** + * 鐢ㄦ埛娉ㄥ唽瀵硅薄 + * + * @author ruoyi + */ +public class RegisterBody extends LoginBody +{ + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/PageDomain.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/PageDomain.java new file mode 100644 index 0000000000000000000000000000000000000000..8966cb4c4e0edf7847cbde0cf5e5788391067cda --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/PageDomain.java @@ -0,0 +1,101 @@ +package com.ruoyi.common.core.page; + +import com.ruoyi.common.utils.StringUtils; + +/** + * 鍒嗛〉鏁版嵁 + * + * @author ruoyi + */ +public class PageDomain +{ + /** 褰撳墠璁板綍璧峰绱㈠紩 */ + private Integer pageNum; + + /** 姣忛〉鏄剧ず璁板綍鏁 */ + private Integer pageSize; + + /** 鎺掑簭鍒 */ + private String orderByColumn; + + /** 鎺掑簭鐨勬柟鍚慸esc鎴栬卆sc */ + private String isAsc = "asc"; + + /** 鍒嗛〉鍙傛暟鍚堢悊鍖 */ + private Boolean reasonable = true; + + public String getOrderBy() + { + if (StringUtils.isEmpty(orderByColumn)) + { + return ""; + } + return StringUtils.toUnderScoreCase(orderByColumn) + " " + isAsc; + } + + public Integer getPageNum() + { + return pageNum; + } + + public void setPageNum(Integer pageNum) + { + this.pageNum = pageNum; + } + + public Integer getPageSize() + { + return pageSize; + } + + public void setPageSize(Integer pageSize) + { + this.pageSize = pageSize; + } + + public String getOrderByColumn() + { + return orderByColumn; + } + + public void setOrderByColumn(String orderByColumn) + { + this.orderByColumn = orderByColumn; + } + + public String getIsAsc() + { + return isAsc; + } + + public void setIsAsc(String isAsc) + { + if (StringUtils.isNotEmpty(isAsc)) + { + // 鍏煎鍓嶇鎺掑簭绫诲瀷 + if ("ascending".equals(isAsc)) + { + isAsc = "asc"; + } + else if ("descending".equals(isAsc)) + { + isAsc = "desc"; + } + this.isAsc = isAsc; + } + } + + public Boolean getReasonable() + { + if (StringUtils.isNull(reasonable)) + { + return Boolean.TRUE; + } + return reasonable; + } + + public void setReasonable(Boolean reasonable) + { + this.reasonable = reasonable; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java new file mode 100644 index 0000000000000000000000000000000000000000..847685ba41234576f3d0cc0b01fc0f1e76bc460a --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableDataInfo.java @@ -0,0 +1,85 @@ +package com.ruoyi.common.core.page; + +import java.io.Serializable; +import java.util.List; + +/** + * 琛ㄦ牸鍒嗛〉鏁版嵁瀵硅薄 + * + * @author ruoyi + */ +public class TableDataInfo implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 鎬昏褰曟暟 */ + private long total; + + /** 鍒楄〃鏁版嵁 */ + private List rows; + + /** 娑堟伅鐘舵佺爜 */ + private int code; + + /** 娑堟伅鍐呭 */ + private String msg; + + /** + * 琛ㄦ牸鏁版嵁瀵硅薄 + */ + public TableDataInfo() + { + } + + /** + * 鍒嗛〉 + * + * @param list 鍒楄〃鏁版嵁 + * @param total 鎬昏褰曟暟 + */ + public TableDataInfo(List list, int total) + { + this.rows = list; + this.total = total; + } + + public long getTotal() + { + return total; + } + + public void setTotal(long total) + { + this.total = total; + } + + public List getRows() + { + return rows; + } + + public void setRows(List rows) + { + this.rows = rows; + } + + public int getCode() + { + return code; + } + + public void setCode(int code) + { + this.code = code; + } + + public String getMsg() + { + return msg; + } + + public void setMsg(String msg) + { + this.msg = msg; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableSupport.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableSupport.java new file mode 100644 index 0000000000000000000000000000000000000000..a120c3002e441bd0acf8a1b4af7f622760624f84 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/page/TableSupport.java @@ -0,0 +1,56 @@ +package com.ruoyi.common.core.page; + +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.utils.ServletUtils; + +/** + * 琛ㄦ牸鏁版嵁澶勭悊 + * + * @author ruoyi + */ +public class TableSupport +{ + /** + * 褰撳墠璁板綍璧峰绱㈠紩 + */ + public static final String PAGE_NUM = "pageNum"; + + /** + * 姣忛〉鏄剧ず璁板綍鏁 + */ + public static final String PAGE_SIZE = "pageSize"; + + /** + * 鎺掑簭鍒 + */ + public static final String ORDER_BY_COLUMN = "orderByColumn"; + + /** + * 鎺掑簭鐨勬柟鍚 "desc" 鎴栬 "asc". + */ + public static final String IS_ASC = "isAsc"; + + /** + * 鍒嗛〉鍙傛暟鍚堢悊鍖 + */ + public static final String REASONABLE = "reasonable"; + + /** + * 灏佽鍒嗛〉瀵硅薄 + */ + public static PageDomain getPageDomain() + { + PageDomain pageDomain = new PageDomain(); + pageDomain.setPageNum(Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1)); + pageDomain.setPageSize(Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10)); + pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN)); + pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC)); + pageDomain.setReasonable(ServletUtils.getParameterToBool(REASONABLE)); + return pageDomain; + } + + public static PageDomain buildPageRequest() + { + return getPageDomain(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java new file mode 100644 index 0000000000000000000000000000000000000000..676486df9e5565a627a12980cb26a9d37a58f88d --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/redis/RedisCache.java @@ -0,0 +1,265 @@ +package com.ruoyi.common.core.redis; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.BoundSetOperations; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ValueOperations; +import org.springframework.stereotype.Component; + +import java.util.*; +import java.util.concurrent.TimeUnit; + +/** + * spring redis 宸ュ叿绫 + * + * @author ruoyi + **/ +@SuppressWarnings(value = { "unchecked", "rawtypes" }) +@Component +public class RedisCache +{ + @Autowired + public RedisTemplate redisTemplate; + + /** + * 缂撳瓨鍩烘湰鐨勫璞★紝Integer銆丼tring銆佸疄浣撶被绛 + * + * @param key 缂撳瓨鐨勯敭鍊 + * @param value 缂撳瓨鐨勫 + */ + public void setCacheObject(final String key, final T value) + { + redisTemplate.opsForValue().set(key, value); + } + + /** + * 缂撳瓨鍩烘湰鐨勫璞★紝Integer銆丼tring銆佸疄浣撶被绛 + * + * @param key 缂撳瓨鐨勯敭鍊 + * @param value 缂撳瓨鐨勫 + * @param timeout 鏃堕棿 + * @param timeUnit 鏃堕棿棰楃矑搴 + */ + public void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit) + { + redisTemplate.opsForValue().set(key, value, timeout, timeUnit); + } + + /** + * 璁剧疆鏈夋晥鏃堕棿 + * + * @param key Redis閿 + * @param timeout 瓒呮椂鏃堕棿 + * @return true=璁剧疆鎴愬姛锛沠alse=璁剧疆澶辫触 + */ + public boolean expire(final String key, final long timeout) + { + return expire(key, timeout, TimeUnit.SECONDS); + } + + /** + * 璁剧疆鏈夋晥鏃堕棿 + * + * @param key Redis閿 + * @param timeout 瓒呮椂鏃堕棿 + * @param unit 鏃堕棿鍗曚綅 + * @return true=璁剧疆鎴愬姛锛沠alse=璁剧疆澶辫触 + */ + public boolean expire(final String key, final long timeout, final TimeUnit unit) + { + return redisTemplate.expire(key, timeout, unit); + } + + /** + * 鑾峰彇鏈夋晥鏃堕棿 + * + * @param key Redis閿 + * @return 鏈夋晥鏃堕棿 + */ + public long getExpire(final String key) + { + return redisTemplate.getExpire(key); + } + + /** + * 鍒ゆ柇 key鏄惁瀛樺湪 + * + * @param key 閿 + * @return true 瀛樺湪 false涓嶅瓨鍦 + */ + public Boolean hasKey(String key) + { + return redisTemplate.hasKey(key); + } + + /** + * 鑾峰緱缂撳瓨鐨勫熀鏈璞° + * + * @param key 缂撳瓨閿 + * @return 缂撳瓨閿煎搴旂殑鏁版嵁 + */ + public T getCacheObject(final String key) + { + ValueOperations operation = redisTemplate.opsForValue(); + return operation.get(key); + } + + /** + * 鍒犻櫎鍗曚釜瀵硅薄 + * + * @param key + */ + public boolean deleteObject(final String key) + { + return redisTemplate.delete(key); + } + + /** + * 鍒犻櫎闆嗗悎瀵硅薄 + * + * @param collection 澶氫釜瀵硅薄 + * @return + */ + public boolean deleteObject(final Collection collection) + { + return redisTemplate.delete(collection) > 0; + } + + /** + * 缂撳瓨List鏁版嵁 + * + * @param key 缂撳瓨鐨勯敭鍊 + * @param dataList 寰呯紦瀛樼殑List鏁版嵁 + * @return 缂撳瓨鐨勫璞 + */ + public long setCacheList(final String key, final List dataList) + { + Long count = redisTemplate.opsForList().rightPushAll(key, dataList); + return count == null ? 0 : count; + } + + /** + * 鑾峰緱缂撳瓨鐨刲ist瀵硅薄 + * + * @param key 缂撳瓨鐨勯敭鍊 + * @return 缂撳瓨閿煎搴旂殑鏁版嵁 + */ + public List getCacheList(final String key) + { + return redisTemplate.opsForList().range(key, 0, -1); + } + + /** + * 缂撳瓨Set + * + * @param key 缂撳瓨閿 + * @param dataSet 缂撳瓨鐨勬暟鎹 + * @return 缂撳瓨鏁版嵁鐨勫璞 + */ + public BoundSetOperations setCacheSet(final String key, final Set dataSet) + { + BoundSetOperations setOperation = redisTemplate.boundSetOps(key); + Iterator it = dataSet.iterator(); + while (it.hasNext()) + { + setOperation.add(it.next()); + } + return setOperation; + } + + /** + * 鑾峰緱缂撳瓨鐨剆et + * + * @param key + * @return + */ + public Set getCacheSet(final String key) + { + return redisTemplate.opsForSet().members(key); + } + + /** + * 缂撳瓨Map + * + * @param key + * @param dataMap + */ + public void setCacheMap(final String key, final Map dataMap) + { + if (dataMap != null) { + redisTemplate.opsForHash().putAll(key, dataMap); + } + } + + /** + * 鑾峰緱缂撳瓨鐨凪ap + * + * @param key + * @return + */ + public Map getCacheMap(final String key) + { + return redisTemplate.opsForHash().entries(key); + } + + /** + * 寰Hash涓瓨鍏ユ暟鎹 + * + * @param key Redis閿 + * @param hKey Hash閿 + * @param value 鍊 + */ + public void setCacheMapValue(final String key, final String hKey, final T value) + { + redisTemplate.opsForHash().put(key, hKey, value); + } + + /** + * 鑾峰彇Hash涓殑鏁版嵁 + * + * @param key Redis閿 + * @param hKey Hash閿 + * @return Hash涓殑瀵硅薄 + */ + public T getCacheMapValue(final String key, final String hKey) + { + HashOperations opsForHash = redisTemplate.opsForHash(); + return opsForHash.get(key, hKey); + } + + /** + * 鑾峰彇澶氫釜Hash涓殑鏁版嵁 + * + * @param key Redis閿 + * @param hKeys Hash閿泦鍚 + * @return Hash瀵硅薄闆嗗悎 + */ + public List getMultiCacheMapValue(final String key, final Collection hKeys) + { + return redisTemplate.opsForHash().multiGet(key, hKeys); + } + + /** + * 鍒犻櫎Hash涓殑鏌愭潯鏁版嵁 + * + * @param key Redis閿 + * @param hKey Hash閿 + * @return 鏄惁鎴愬姛 + */ + public boolean deleteCacheMapValue(final String key, final String hKey) + { + return redisTemplate.opsForHash().delete(key, hKey) > 0; + } + + /** + * 鑾峰緱缂撳瓨鐨勫熀鏈璞″垪琛 + * + * @param pattern 瀛楃涓插墠缂 + * @return 瀵硅薄鍒楄〃 + */ + public Collection keys(final String pattern) + { + return redisTemplate.keys(pattern); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/text/CharsetKit.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/text/CharsetKit.java new file mode 100644 index 0000000000000000000000000000000000000000..aaf8bedce72839c404f867819edfdaf1404a2207 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/text/CharsetKit.java @@ -0,0 +1,87 @@ +package com.ruoyi.common.core.text; + +import com.ruoyi.common.utils.StringUtils; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + +/** + * 瀛楃闆嗗伐鍏风被 + * + * @author ruoyi + */ +public class CharsetKit +{ + /** ISO-8859-1 */ + public static final String ISO_8859_1 = "ISO-8859-1"; + /** UTF-8 */ + public static final String UTF_8 = "UTF-8"; + /** GBK */ + public static final String GBK = "GBK"; + + /** ISO-8859-1 */ + public static final Charset CHARSET_ISO_8859_1 = Charset.forName(ISO_8859_1); + /** UTF-8 */ + public static final Charset CHARSET_UTF_8 = Charset.forName(UTF_8); + /** GBK */ + public static final Charset CHARSET_GBK = Charset.forName(GBK); + + /** + * 杞崲涓篊harset瀵硅薄 + * + * @param charset 瀛楃闆嗭紝涓虹┖鍒欒繑鍥為粯璁ゅ瓧绗﹂泦 + * @return Charset + */ + public static Charset charset(String charset) + { + return StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset); + } + + /** + * 杞崲瀛楃涓茬殑瀛楃闆嗙紪鐮 + * + * @param source 瀛楃涓 + * @param srcCharset 婧愬瓧绗﹂泦锛岄粯璁SO-8859-1 + * @param destCharset 鐩爣瀛楃闆嗭紝榛樿UTF-8 + * @return 杞崲鍚庣殑瀛楃闆 + */ + public static String convert(String source, String srcCharset, String destCharset) + { + return convert(source, Charset.forName(srcCharset), Charset.forName(destCharset)); + } + + /** + * 杞崲瀛楃涓茬殑瀛楃闆嗙紪鐮 + * + * @param source 瀛楃涓 + * @param srcCharset 婧愬瓧绗﹂泦锛岄粯璁SO-8859-1 + * @param destCharset 鐩爣瀛楃闆嗭紝榛樿UTF-8 + * @return 杞崲鍚庣殑瀛楃闆 + */ + public static String convert(String source, Charset srcCharset, Charset destCharset) + { + if (null == srcCharset) + { + srcCharset = StandardCharsets.ISO_8859_1; + } + + if (null == destCharset) + { + destCharset = StandardCharsets.UTF_8; + } + + if (StringUtils.isEmpty(source) || srcCharset.equals(destCharset)) + { + return source; + } + return new String(source.getBytes(srcCharset), destCharset); + } + + /** + * @return 绯荤粺瀛楃闆嗙紪鐮 + */ + public static String systemCharset() + { + return Charset.defaultCharset().name(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/text/Convert.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/text/Convert.java new file mode 100644 index 0000000000000000000000000000000000000000..ede9c2f3ef84a27087971a5339e3197d8149e897 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/text/Convert.java @@ -0,0 +1,1011 @@ +package com.ruoyi.common.core.text; + +import com.ruoyi.common.utils.StringUtils; +import org.apache.commons.lang3.ArrayUtils; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.RoundingMode; +import java.nio.ByteBuffer; +import java.nio.charset.Charset; +import java.text.NumberFormat; +import java.util.Set; + +/** + * 绫诲瀷杞崲鍣 + * + * @author ruoyi + */ +public class Convert +{ + /** + * 杞崲涓哄瓧绗︿覆
+ * 濡傛灉缁欏畾鐨勫间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊 + * @return 缁撴灉 + */ + public static String toStr(Object value, String defaultValue) + { + if (null == value) + { + return defaultValue; + } + if (value instanceof String) + { + return (String) value; + } + return value.toString(); + } + + /** + * 杞崲涓哄瓧绗︿覆
+ * 濡傛灉缁欏畾鐨勫间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊null
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static String toStr(Object value) + { + return toStr(value, null); + } + + /** + * 杞崲涓哄瓧绗
+ * 濡傛灉缁欏畾鐨勫间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊 + * @return 缁撴灉 + */ + public static Character toChar(Object value, Character defaultValue) + { + if (null == value) + { + return defaultValue; + } + if (value instanceof Character) + { + return (Character) value; + } + + final String valueStr = toStr(value, null); + return StringUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0); + } + + /** + * 杞崲涓哄瓧绗
+ * 濡傛灉缁欏畾鐨勫间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊null
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Character toChar(Object value) + { + return toChar(value, null); + } + + /** + * 杞崲涓篵yte
+ * 濡傛灉缁欏畾鐨勫间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊 + * @return 缁撴灉 + */ + public static Byte toByte(Object value, Byte defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Byte) + { + return (Byte) value; + } + if (value instanceof Number) + { + return ((Number) value).byteValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Byte.parseByte(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 杞崲涓篵yte
+ * 濡傛灉缁欏畾鐨勫间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊null
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Byte toByte(Object value) + { + return toByte(value, null); + } + + /** + * 杞崲涓篠hort
+ * 濡傛灉缁欏畾鐨勫间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊 + * @return 缁撴灉 + */ + public static Short toShort(Object value, Short defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Short) + { + return (Short) value; + } + if (value instanceof Number) + { + return ((Number) value).shortValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Short.parseShort(valueStr.trim()); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 杞崲涓篠hort
+ * 濡傛灉缁欏畾鐨勫间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊null
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Short toShort(Object value) + { + return toShort(value, null); + } + + /** + * 杞崲涓篘umber
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊 + * @return 缁撴灉 + */ + public static Number toNumber(Object value, Number defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Number) + { + return (Number) value; + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return NumberFormat.getInstance().parse(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 杞崲涓篘umber
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊null
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Number toNumber(Object value) + { + return toNumber(value, null); + } + + /** + * 杞崲涓篿nt
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊 + * @return 缁撴灉 + */ + public static Integer toInt(Object value, Integer defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Integer) + { + return (Integer) value; + } + if (value instanceof Number) + { + return ((Number) value).intValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Integer.parseInt(valueStr.trim()); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 杞崲涓篿nt
+ * 濡傛灉缁欏畾鐨勫间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊null
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Integer toInt(Object value) + { + return toInt(value, null); + } + + /** + * 杞崲涓篒nteger鏁扮粍
+ * + * @param str 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Integer[] toIntArray(String str) + { + return toIntArray(",", str); + } + + /** + * 杞崲涓篖ong鏁扮粍
+ * + * @param str 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Long[] toLongArray(String str) + { + return toLongArray(",", str); + } + + /** + * 杞崲涓篒nteger鏁扮粍
+ * + * @param split 鍒嗛殧绗 + * @param split 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Integer[] toIntArray(String split, String str) + { + if (StringUtils.isEmpty(str)) + { + return new Integer[] {}; + } + String[] arr = str.split(split); + final Integer[] ints = new Integer[arr.length]; + for (int i = 0; i < arr.length; i++) + { + final Integer v = toInt(arr[i], 0); + ints[i] = v; + } + return ints; + } + + /** + * 杞崲涓篖ong鏁扮粍
+ * + * @param split 鍒嗛殧绗 + * @param str 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Long[] toLongArray(String split, String str) + { + if (StringUtils.isEmpty(str)) + { + return new Long[] {}; + } + String[] arr = str.split(split); + final Long[] longs = new Long[arr.length]; + for (int i = 0; i < arr.length; i++) + { + final Long v = toLong(arr[i], null); + longs[i] = v; + } + return longs; + } + + /** + * 杞崲涓篠tring鏁扮粍
+ * + * @param str 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static String[] toStrArray(String str) + { + if (StringUtils.isEmpty(str)) + { + return new String[] {}; + } + return toStrArray(",", str); + } + + /** + * 杞崲涓篠tring鏁扮粍
+ * + * @param split 鍒嗛殧绗 + * @param split 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static String[] toStrArray(String split, String str) + { + return str.split(split); + } + + /** + * 杞崲涓簂ong
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊 + * @return 缁撴灉 + */ + public static Long toLong(Object value, Long defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Long) + { + return (Long) value; + } + if (value instanceof Number) + { + return ((Number) value).longValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + // 鏀寔绉戝璁℃暟娉 + return new BigDecimal(valueStr.trim()).longValue(); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 杞崲涓簂ong
+ * 濡傛灉缁欏畾鐨勫间负null锛屾垨鑰呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊null
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Long toLong(Object value) + { + return toLong(value, null); + } + + /** + * 杞崲涓篸ouble
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊 + * @return 缁撴灉 + */ + public static Double toDouble(Object value, Double defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Double) + { + return (Double) value; + } + if (value instanceof Number) + { + return ((Number) value).doubleValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + // 鏀寔绉戝璁℃暟娉 + return new BigDecimal(valueStr.trim()).doubleValue(); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 杞崲涓篸ouble
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊null
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Double toDouble(Object value) + { + return toDouble(value, null); + } + + /** + * 杞崲涓篎loat
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊 + * @return 缁撴灉 + */ + public static Float toFloat(Object value, Float defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Float) + { + return (Float) value; + } + if (value instanceof Number) + { + return ((Number) value).floatValue(); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Float.parseFloat(valueStr.trim()); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 杞崲涓篎loat
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊null
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Float toFloat(Object value) + { + return toFloat(value, null); + } + + /** + * 杞崲涓篵oolean
+ * String鏀寔鐨勫间负锛歵rue銆乫alse銆亂es銆乷k銆乶o锛1,0 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊 + * @return 缁撴灉 + */ + public static Boolean toBool(Object value, Boolean defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof Boolean) + { + return (Boolean) value; + } + String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + valueStr = valueStr.trim().toLowerCase(); + switch (valueStr) + { + case "true": + case "yes": + case "ok": + case "1": + return true; + case "false": + case "no": + case "0": + return false; + default: + return defaultValue; + } + } + + /** + * 杞崲涓篵oolean
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊null
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static Boolean toBool(Object value) + { + return toBool(value, null); + } + + /** + * 杞崲涓篍num瀵硅薄
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * + * @param clazz Enum鐨凜lass + * @param value 鍊 + * @param defaultValue 榛樿鍊 + * @return Enum + */ + public static > E toEnum(Class clazz, Object value, E defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (clazz.isAssignableFrom(value.getClass())) + { + @SuppressWarnings("unchecked") + E myE = (E) value; + return myE; + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return Enum.valueOf(clazz, valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 杞崲涓篍num瀵硅薄
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊null
+ * + * @param clazz Enum鐨凜lass + * @param value 鍊 + * @return Enum + */ + public static > E toEnum(Class clazz, Object value) + { + return toEnum(clazz, value, null); + } + + /** + * 杞崲涓築igInteger
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊 + * @return 缁撴灉 + */ + public static BigInteger toBigInteger(Object value, BigInteger defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof BigInteger) + { + return (BigInteger) value; + } + if (value instanceof Long) + { + return BigInteger.valueOf((Long) value); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return new BigInteger(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 杞崲涓築igInteger
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊null
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static BigInteger toBigInteger(Object value) + { + return toBigInteger(value, null); + } + + /** + * 杞崲涓築igDecimal
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @param defaultValue 杞崲閿欒鏃剁殑榛樿鍊 + * @return 缁撴灉 + */ + public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue) + { + if (value == null) + { + return defaultValue; + } + if (value instanceof BigDecimal) + { + return (BigDecimal) value; + } + if (value instanceof Long) + { + return new BigDecimal((Long) value); + } + if (value instanceof Double) + { + return BigDecimal.valueOf((Double) value); + } + if (value instanceof Integer) + { + return new BigDecimal((Integer) value); + } + final String valueStr = toStr(value, null); + if (StringUtils.isEmpty(valueStr)) + { + return defaultValue; + } + try + { + return new BigDecimal(valueStr); + } + catch (Exception e) + { + return defaultValue; + } + } + + /** + * 杞崲涓築igDecimal
+ * 濡傛灉缁欏畾鐨勫间负绌猴紝鎴栬呰浆鎹㈠け璐ワ紝杩斿洖榛樿鍊
+ * 杞崲澶辫触涓嶄細鎶ラ敊 + * + * @param value 琚浆鎹㈢殑鍊 + * @return 缁撴灉 + */ + public static BigDecimal toBigDecimal(Object value) + { + return toBigDecimal(value, null); + } + + /** + * 灏嗗璞¤浆涓哄瓧绗︿覆
+ * 1銆丅yte鏁扮粍鍜孊yteBuffer浼氳杞崲涓哄搴斿瓧绗︿覆鐨勬暟缁 2銆佸璞℃暟缁勪細璋冪敤Arrays.toString鏂规硶 + * + * @param obj 瀵硅薄 + * @return 瀛楃涓 + */ + public static String utf8Str(Object obj) + { + return str(obj, CharsetKit.CHARSET_UTF_8); + } + + /** + * 灏嗗璞¤浆涓哄瓧绗︿覆
+ * 1銆丅yte鏁扮粍鍜孊yteBuffer浼氳杞崲涓哄搴斿瓧绗︿覆鐨勬暟缁 2銆佸璞℃暟缁勪細璋冪敤Arrays.toString鏂规硶 + * + * @param obj 瀵硅薄 + * @param charsetName 瀛楃闆 + * @return 瀛楃涓 + */ + public static String str(Object obj, String charsetName) + { + return str(obj, Charset.forName(charsetName)); + } + + /** + * 灏嗗璞¤浆涓哄瓧绗︿覆
+ * 1銆丅yte鏁扮粍鍜孊yteBuffer浼氳杞崲涓哄搴斿瓧绗︿覆鐨勬暟缁 2銆佸璞℃暟缁勪細璋冪敤Arrays.toString鏂规硶 + * + * @param obj 瀵硅薄 + * @param charset 瀛楃闆 + * @return 瀛楃涓 + */ + public static String str(Object obj, Charset charset) + { + if (null == obj) + { + return null; + } + + if (obj instanceof String) + { + return (String) obj; + } + else if (obj instanceof byte[]) + { + return str((byte[]) obj, charset); + } + else if (obj instanceof Byte[]) + { + byte[] bytes = ArrayUtils.toPrimitive((Byte[]) obj); + return str(bytes, charset); + } + else if (obj instanceof ByteBuffer) + { + return str((ByteBuffer) obj, charset); + } + return obj.toString(); + } + + /** + * 灏哹yte鏁扮粍杞负瀛楃涓 + * + * @param bytes byte鏁扮粍 + * @param charset 瀛楃闆 + * @return 瀛楃涓 + */ + public static String str(byte[] bytes, String charset) + { + return str(bytes, StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset)); + } + + /** + * 瑙g爜瀛楄妭鐮 + * + * @param data 瀛楃涓 + * @param charset 瀛楃闆嗭紝濡傛灉姝ゅ瓧娈典负绌猴紝鍒欒В鐮佺殑缁撴灉鍙栧喅浜庡钩鍙 + * @return 瑙g爜鍚庣殑瀛楃涓 + */ + public static String str(byte[] data, Charset charset) + { + if (data == null) + { + return null; + } + + if (null == charset) + { + return new String(data); + } + return new String(data, charset); + } + + /** + * 灏嗙紪鐮佺殑byteBuffer鏁版嵁杞崲涓哄瓧绗︿覆 + * + * @param data 鏁版嵁 + * @param charset 瀛楃闆嗭紝濡傛灉涓虹┖浣跨敤褰撳墠绯荤粺瀛楃闆 + * @return 瀛楃涓 + */ + public static String str(ByteBuffer data, String charset) + { + if (data == null) + { + return null; + } + + return str(data, Charset.forName(charset)); + } + + /** + * 灏嗙紪鐮佺殑byteBuffer鏁版嵁杞崲涓哄瓧绗︿覆 + * + * @param data 鏁版嵁 + * @param charset 瀛楃闆嗭紝濡傛灉涓虹┖浣跨敤褰撳墠绯荤粺瀛楃闆 + * @return 瀛楃涓 + */ + public static String str(ByteBuffer data, Charset charset) + { + if (null == charset) + { + charset = Charset.defaultCharset(); + } + return charset.decode(data).toString(); + } + + // ----------------------------------------------------------------------- 鍏ㄨ鍗婅杞崲 + /** + * 鍗婅杞叏瑙 + * + * @param input String. + * @return 鍏ㄨ瀛楃涓. + */ + public static String toSBC(String input) + { + return toSBC(input, null); + } + + /** + * 鍗婅杞叏瑙 + * + * @param input String + * @param notConvertSet 涓嶆浛鎹㈢殑瀛楃闆嗗悎 + * @return 鍏ㄨ瀛楃涓. + */ + public static String toSBC(String input, Set notConvertSet) + { + char[] c = input.toCharArray(); + for (int i = 0; i < c.length; i++) + { + if (null != notConvertSet && notConvertSet.contains(c[i])) + { + // 璺宠繃涓嶆浛鎹㈢殑瀛楃 + continue; + } + + if (c[i] == ' ') + { + c[i] = '\u3000'; + } + else if (c[i] < '\177') + { + c[i] = (char) (c[i] + 65248); + + } + } + return new String(c); + } + + /** + * 鍏ㄨ杞崐瑙 + * + * @param input String. + * @return 鍗婅瀛楃涓 + */ + public static String toDBC(String input) + { + return toDBC(input, null); + } + + /** + * 鏇挎崲鍏ㄨ涓哄崐瑙 + * + * @param text 鏂囨湰 + * @param notConvertSet 涓嶆浛鎹㈢殑瀛楃闆嗗悎 + * @return 鏇挎崲鍚庣殑瀛楃 + */ + public static String toDBC(String text, Set notConvertSet) + { + char[] c = text.toCharArray(); + for (int i = 0; i < c.length; i++) + { + if (null != notConvertSet && notConvertSet.contains(c[i])) + { + // 璺宠繃涓嶆浛鎹㈢殑瀛楃 + continue; + } + + if (c[i] == '\u3000') + { + c[i] = ' '; + } + else if (c[i] > '\uFF00' && c[i] < '\uFF5F') + { + c[i] = (char) (c[i] - 65248); + } + } + String returnString = new String(c); + + return returnString; + } + + /** + * 鏁板瓧閲戦澶у啓杞崲 鍏堝啓涓畬鏁寸殑鐒跺悗灏嗗闆舵嬀鏇挎崲鎴愰浂 + * + * @param n 鏁板瓧 + * @return 涓枃澶у啓鏁板瓧 + */ + public static String digitUppercase(double n) + { + String[] fraction = { "瑙", "鍒" }; + String[] digit = { "闆", "澹", "璐", "鍙", "鑲", "浼", "闄", "鏌", "鎹", "鐜" }; + String[][] unit = { { "鍏", "涓", "浜" }, { "", "鎷", "浣", "浠" } }; + + String head = n < 0 ? "璐" : ""; + n = Math.abs(n); + + String s = ""; + for (int i = 0; i < fraction.length; i++) + { + // 浼樺寲double璁$畻绮惧害涓㈠け闂 + BigDecimal nNum = new BigDecimal(n); + BigDecimal decimal = new BigDecimal(10); + BigDecimal scale = nNum.multiply(decimal).setScale(2, RoundingMode.HALF_EVEN); + double d = scale.doubleValue(); + s += (digit[(int) (Math.floor(d * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(闆.)+", ""); + } + if (s.length() < 1) + { + s = "鏁"; + } + int integerPart = (int) Math.floor(n); + + for (int i = 0; i < unit[0].length && integerPart > 0; i++) + { + String p = ""; + for (int j = 0; j < unit[1].length && n > 0; j++) + { + p = digit[integerPart % 10] + unit[1][j] + p; + integerPart = integerPart / 10; + } + s = p.replaceAll("(闆.)*闆$", "").replaceAll("^$", "闆") + unit[0][i] + s; + } + return head + s.replaceAll("(闆.)*闆跺厓", "鍏").replaceFirst("(闆.)+", "").replaceAll("(闆.)+", "闆").replaceAll("^鏁$", "闆跺厓鏁"); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/text/StrFormatter.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/text/StrFormatter.java new file mode 100644 index 0000000000000000000000000000000000000000..c78ac776db9944295f3634be2e1122472bfc346e --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/text/StrFormatter.java @@ -0,0 +1,92 @@ +package com.ruoyi.common.core.text; + +import com.ruoyi.common.utils.StringUtils; + +/** + * 瀛楃涓叉牸寮忓寲 + * + * @author ruoyi + */ +public class StrFormatter +{ + public static final String EMPTY_JSON = "{}"; + public static final char C_BACKSLASH = '\\'; + public static final char C_DELIM_START = '{'; + public static final char C_DELIM_END = '}'; + + /** + * 鏍煎紡鍖栧瓧绗︿覆
+ * 姝ゆ柟娉曞彧鏄畝鍗曞皢鍗犱綅绗 {} 鎸夌収椤哄簭鏇挎崲涓哄弬鏁
+ * 濡傛灉鎯宠緭鍑 {} 浣跨敤 \\杞箟 { 鍗冲彲锛屽鏋滄兂杈撳嚭 {} 涔嬪墠鐨 \ 浣跨敤鍙岃浆涔夌 \\\\ 鍗冲彲
+ * 渚嬶細
+ * 閫氬父浣跨敤锛歠ormat("this is {} for {}", "a", "b") -> this is a for b
+ * 杞箟{}锛 format("this is \\{} for {}", "a", "b") -> this is \{} for a
+ * 杞箟\锛 format("this is \\\\{} for {}", "a", "b") -> this is \a for b
+ * + * @param strPattern 瀛楃涓叉ā鏉 + * @param argArray 鍙傛暟鍒楄〃 + * @return 缁撴灉 + */ + public static String format(final String strPattern, final Object... argArray) + { + if (StringUtils.isEmpty(strPattern) || StringUtils.isEmpty(argArray)) + { + return strPattern; + } + final int strPatternLength = strPattern.length(); + + // 鍒濆鍖栧畾涔夊ソ鐨勯暱搴︿互鑾峰緱鏇村ソ鐨勬ц兘 + StringBuilder sbuf = new StringBuilder(strPatternLength + 50); + + int handledPosition = 0; + int delimIndex;// 鍗犱綅绗︽墍鍦ㄤ綅缃 + for (int argIndex = 0; argIndex < argArray.length; argIndex++) + { + delimIndex = strPattern.indexOf(EMPTY_JSON, handledPosition); + if (delimIndex == -1) + { + if (handledPosition == 0) + { + return strPattern; + } + else + { // 瀛楃涓叉ā鏉垮墿浣欓儴鍒嗕笉鍐嶅寘鍚崰浣嶇锛屽姞鍏ュ墿浣欓儴鍒嗗悗杩斿洖缁撴灉 + sbuf.append(strPattern, handledPosition, strPatternLength); + return sbuf.toString(); + } + } + else + { + if (delimIndex > 0 && strPattern.charAt(delimIndex - 1) == C_BACKSLASH) + { + if (delimIndex > 1 && strPattern.charAt(delimIndex - 2) == C_BACKSLASH) + { + // 杞箟绗︿箣鍓嶈繕鏈変竴涓浆涔夌锛屽崰浣嶇渚濇棫鏈夋晥 + sbuf.append(strPattern, handledPosition, delimIndex - 1); + sbuf.append(Convert.utf8Str(argArray[argIndex])); + handledPosition = delimIndex + 2; + } + else + { + // 鍗犱綅绗﹁杞箟 + argIndex--; + sbuf.append(strPattern, handledPosition, delimIndex - 1); + sbuf.append(C_DELIM_START); + handledPosition = delimIndex + 1; + } + } + else + { + // 姝e父鍗犱綅绗 + sbuf.append(strPattern, handledPosition, delimIndex); + sbuf.append(Convert.utf8Str(argArray[argIndex])); + handledPosition = delimIndex + 2; + } + } + } + // 鍔犲叆鏈鍚庝竴涓崰浣嶇鍚庢墍鏈夌殑瀛楃 + sbuf.append(strPattern, handledPosition, strPattern.length()); + + return sbuf.toString(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessStatus.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessStatus.java new file mode 100644 index 0000000000000000000000000000000000000000..10b7306fe9ba89d6ed4ed19c9647ddc421bfeb28 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessStatus.java @@ -0,0 +1,20 @@ +package com.ruoyi.common.enums; + +/** + * 鎿嶄綔鐘舵 + * + * @author ruoyi + * + */ +public enum BusinessStatus +{ + /** + * 鎴愬姛 + */ + SUCCESS, + + /** + * 澶辫触 + */ + FAIL, +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessType.java new file mode 100644 index 0000000000000000000000000000000000000000..2e17c4a5d210eb930468412673a9b408ed61a787 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/BusinessType.java @@ -0,0 +1,59 @@ +package com.ruoyi.common.enums; + +/** + * 涓氬姟鎿嶄綔绫诲瀷 + * + * @author ruoyi + */ +public enum BusinessType +{ + /** + * 鍏跺畠 + */ + OTHER, + + /** + * 鏂板 + */ + INSERT, + + /** + * 淇敼 + */ + UPDATE, + + /** + * 鍒犻櫎 + */ + DELETE, + + /** + * 鎺堟潈 + */ + GRANT, + + /** + * 瀵煎嚭 + */ + EXPORT, + + /** + * 瀵煎叆 + */ + IMPORT, + + /** + * 寮洪 + */ + FORCE, + + /** + * 鐢熸垚浠g爜 + */ + GENCODE, + + /** + * 娓呯┖鏁版嵁 + */ + CLEAN, +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java new file mode 100644 index 0000000000000000000000000000000000000000..0d945be54936e8449d7b46f205bfa2269e15a33f --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/DataSourceType.java @@ -0,0 +1,19 @@ +package com.ruoyi.common.enums; + +/** + * 鏁版嵁婧 + * + * @author ruoyi + */ +public enum DataSourceType +{ + /** + * 涓诲簱 + */ + MASTER, + + /** + * 浠庡簱 + */ + SLAVE +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/DesensitizedType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/DesensitizedType.java new file mode 100644 index 0000000000000000000000000000000000000000..45444d965178b3f999bbb6e9d819665107aeb118 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/DesensitizedType.java @@ -0,0 +1,60 @@ +package com.ruoyi.common.enums; + +import com.ruoyi.common.utils.DesensitizedUtil; + +import java.util.function.Function; + +/** + * 鑴辨晱绫诲瀷 + * + * @author ruoyi + */ +public enum DesensitizedType +{ + /** + * 濮撳悕锛岀2浣嶆槦鍙锋浛鎹 + */ + USERNAME(s -> s.replaceAll("(\\S)\\S(\\S*)", "$1*$2")), + + /** + * 瀵嗙爜锛屽叏閮ㄥ瓧绗﹂兘鐢*浠f浛 + */ + PASSWORD(DesensitizedUtil::password), + + /** + * 韬唤璇侊紝涓棿10浣嶆槦鍙锋浛鎹 + */ + ID_CARD(s -> s.replaceAll("(\\d{4})\\d{10}(\\d{4})", "$1** **** ****$2")), + + /** + * 鎵嬫満鍙凤紝涓棿4浣嶆槦鍙锋浛鎹 + */ + PHONE(s -> s.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2")), + + /** + * 鐢靛瓙閭锛屼粎鏄剧ず绗竴涓瓧姣嶅拰@鍚庨潰鐨勫湴鍧鏄剧ず锛屽叾浠栨槦鍙锋浛鎹 + */ + EMAIL(s -> s.replaceAll("(^.)[^@]*(@.*$)", "$1****$2")), + + /** + * 閾惰鍗″彿锛屼繚鐣欐渶鍚4浣嶏紝鍏朵粬鏄熷彿鏇挎崲 + */ + BANK_CARD(s -> s.replaceAll("\\d{15}(\\d{3})", "**** **** **** **** $1")), + + /** + * 杞︾墝鍙风爜锛屽寘鍚櫘閫氳溅杈嗐佹柊鑳芥簮杞﹁締 + */ + CAR_LICENSE(DesensitizedUtil::carLicense); + + private final Function desensitizer; + + DesensitizedType(Function desensitizer) + { + this.desensitizer = desensitizer; + } + + public Function desensitizer() + { + return desensitizer; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/HttpMethod.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/HttpMethod.java new file mode 100644 index 0000000000000000000000000000000000000000..fc9f7ad595a0b5b0be7d437eb0f81da8940a9fb7 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/HttpMethod.java @@ -0,0 +1,37 @@ +package com.ruoyi.common.enums; + +import org.springframework.lang.Nullable; + +import java.util.HashMap; +import java.util.Map; + +/** + * 璇锋眰鏂瑰紡 + * + * @author ruoyi + */ +public enum HttpMethod +{ + GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE; + + private static final Map mappings = new HashMap<>(16); + + static + { + for (HttpMethod httpMethod : values()) + { + mappings.put(httpMethod.name(), httpMethod); + } + } + + @Nullable + public static HttpMethod resolve(@Nullable String method) + { + return (method != null ? mappings.get(method) : null); + } + + public boolean matches(String method) + { + return (this == resolve(method)); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/Kd100StateEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/Kd100StateEnum.java new file mode 100644 index 0000000000000000000000000000000000000000..2c36faa589d50359f3df0fc2a2bd77c8dcebb646 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/Kd100StateEnum.java @@ -0,0 +1,71 @@ +package com.ruoyi.common.enums; + +import lombok.Getter; + +import java.util.Arrays; + +/** + * 楂樼骇鐗╂祦鐘舵 + */ +@Getter +public enum Kd100StateEnum +{ + KDLJ("1", "蹇欢鎻戒欢"), + YJXKJD("101", "宸茬粡涓嬪揩浠跺崟"), + DKDGSLS("102", "寰呭揩閫掑叕鍙告徑鏀"), + KDGSYJLS("103", "蹇掑叕鍙稿凡缁忔徑鏀"), + KJZTZ("0", "蹇欢鍦ㄩ斾腑"), + KJDDSJRCS("1001", "蹇欢鍒拌揪鏀朵欢浜哄煄甯"), + KJCYYSGCZ("1002", "蹇欢澶勪簬杩愯緭杩囩▼涓"), + KJFWWDXDSJDZ("1003", "蹇欢鍙戝線鍒版柊鐨勬敹浠跺湴鍧"), + KJZZPSZ("5", "蹇欢姝e湪娲句欢"), + KJYJTDDKDGHZKDYZ("501", "蹇欢宸茬粡鎶曢掑埌蹇掓煖鎴栬呭揩閫掗┛绔"), + KJYQS("3", "蹇欢宸茬鏀"), + SJRZCQS("301", "鏀朵欢浜烘甯哥鏀"), + KJXSPSYC("302", "蹇欢鏄剧ず娲句欢寮傚父锛屼絾鍚庣画姝e父绛炬敹"), + KJYBDQ("303", "蹇欢宸茶浠g"), + KJYCKDGHZYZQCQS("304", "蹇欢宸蹭粠蹇掓煖鎴栬呴┛绔欏彇鍑虹鏀"), + KJZCYFHFHRDTZ("6", "蹇欢姝e浜庤繑鍥炲彂璐т汉鐨勯斾腑"), + CKJDYTQ("4", "姝ゅ揩浠跺崟宸查绛"), + CKJDYCX("401", "姝ゅ揩浠跺崟宸叉挙閿"), + SJJRJQKJ("14", "鏀朵欢浜烘嫆绛惧揩浠"), + KJZGQTKDGSYJ("7", "蹇欢杞粰鍏朵粬蹇掑叕鍙搁偖瀵"), + KJCZYN("2", "蹇欢瀛樺湪鐤戦毦"), + KJCSJPJHWQS("201", "蹇欢闀挎椂闂存淳浠跺悗鏈鏀"), + KJCSJMYPJHQS("202", "蹇欢闀挎椂闂存病鏈夋淳浠舵垨绛炬敹"), + SJRFQJSKDDFHFQR("203", "鏀朵欢浜哄彂璧锋嫆鏀跺揩閫掞紝寰呭彂璐ф柟纭"), + KJPJSYDYCQK("204", "蹇欢娲句欢鏃堕亣鍒板紓甯告儏鍐"), + KJZKDGHZYZCSSJWQ("205", "蹇欢鍦ㄥ揩閫掓煖鎴栬呴┛绔欓暱鏃堕棿鏈彇"), + WFLXDSJR("206", "鏃犳硶鑱旂郴鍒版敹浠朵汉"), + CCKDGSDFWQFW("207", "瓒呭嚭蹇掑叕鍙哥殑鏈嶅姟鍖鸿寖鍥"), + KJZLZWDDMYPS("208", "蹇欢婊炵暀鍦ㄧ綉鐐癸紝娌℃湁娲鹃"), + KJPS("209", "蹇欢鐮存崯"), + JJRSQCXJJ("210", "瀵勪欢浜虹敵璇锋挙閿瀵勪欢"), + KJQG("8", "蹇欢娓呭叧"), + KJDDQG("10", "蹇欢绛夊緟娓呭叧"), + KJZZQGLCZ("11", "蹇欢姝e湪娓呭叧娴佺▼涓"), + KJYWCQGLC("12", "蹇欢宸插畬鎴愭竻鍏虫祦绋"), + HWZQGGCZCXYC("13", "璐х墿鍦ㄦ竻鍏宠繃绋嬩腑鍑虹幇寮傚父"), + SJRJQKJ1("14", "鏀朵欢浜烘嫆绛惧揩浠"); + + private final String code; + private final String info; + + Kd100StateEnum(String code, String info) + { + this.code = code; + this.info = info; + } + + /** + * 妫绱㈤珮绾х墿娴佸兼灇涓 + */ + public static Kd100StateEnum getKd100StateEnum(String code){ + Kd100StateEnum[] values = Kd100StateEnum.values(); + return Arrays.stream(values) + .filter(item -> item.getCode().equals(code)) + .findFirst() + .orElse(null); + } + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/LimitType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/LimitType.java new file mode 100644 index 0000000000000000000000000000000000000000..c609fd8ace91a817d9736605a186f2ecc3ade92c --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/LimitType.java @@ -0,0 +1,20 @@ +package com.ruoyi.common.enums; + +/** + * 闄愭祦绫诲瀷 + * + * @author ruoyi + */ + +public enum LimitType +{ + /** + * 榛樿绛栫暐鍏ㄥ眬闄愭祦 + */ + DEFAULT, + + /** + * 鏍规嵁璇锋眰鑰匢P杩涜闄愭祦 + */ + IP +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/OperatorType.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/OperatorType.java new file mode 100644 index 0000000000000000000000000000000000000000..bdd143c1cbd91b36741cf940b3887c33dadcf9f4 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/OperatorType.java @@ -0,0 +1,24 @@ +package com.ruoyi.common.enums; + +/** + * 鎿嶄綔浜虹被鍒 + * + * @author ruoyi + */ +public enum OperatorType +{ + /** + * 鍏跺畠 + */ + OTHER, + + /** + * 鍚庡彴鐢ㄦ埛 + */ + MANAGE, + + /** + * 鎵嬫満绔敤鎴 + */ + MOBILE +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/ServiceResponseEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/ServiceResponseEnum.java new file mode 100644 index 0000000000000000000000000000000000000000..6f04fe930d8908a39648c7e63509903e0af0d5ee --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/ServiceResponseEnum.java @@ -0,0 +1,54 @@ +package com.ruoyi.common.enums; + +import lombok.Getter; + +/** + * API閿欒淇℃伅 + */ +@Getter +public enum ServiceResponseEnum +{ + CAPTCHA_EXPIRE("楠岃瘉鐮佸け鏁", 500), + CAPTCHA_ERROR("楠岃瘉鐮侀敊璇", 500), + SMSCODE_ERROR("鐭俊楠岃瘉鐮侀敊璇", 500), + + NO_AUTH_OPERATION("鏃犳潈闄愭搷浣", 500), + PARAM_EXCEPTION("鍙傛暟寮傚父", 500), + + MINIPROGRAM_AUTHORIZE_ERR("寰俊鎺堟潈澶辫触", 500), + MINIPROGRAM_AUTHORIZE_PHONE_ERR("鎺堟潈鎵嬫満鍙峰け璐", 500), + MEMBER_USER_FREEZE("姝よ处鍙疯鍐荤粨", 500), + + DICT_TYPE_NULL("鏈煡璇㈠埌瀛楀吀淇℃伅", 500), + DICT_TYPE_STOP_USE("瀛楀吀宸插仠鐢", 500), + + + UPLOAD_FILE_NOT_NULL("涓婁紶鏂囦欢涓嶈兘涓虹┖", 500), + UPLOAD_FILE_FAILED("鏂囦欢涓婁紶澶辫触", 500), + + + + + + SMS_CODE_TIME_OUT("鐭俊楠岃瘉鐮佽秴鏃/涓嶅瓨鍦",500), + SMS_CODE_TIME_ERROR("鐭俊楠岃瘉鐮侀敊璇",500), + + + + + ; + + + /** 娑堟伅 */ + private final String msg; + + /** 閿欒鐮 */ + private final Integer code; + + ServiceResponseEnum(String msg, Integer code) + { + this.msg = msg; + this.code = code; + } + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/UserStatus.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/UserStatus.java new file mode 100644 index 0000000000000000000000000000000000000000..d7ff44a9884c3ebfae260389ed12feb9679a4bae --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/UserStatus.java @@ -0,0 +1,30 @@ +package com.ruoyi.common.enums; + +/** + * 鐢ㄦ埛鐘舵 + * + * @author ruoyi + */ +public enum UserStatus +{ + OK("0", "姝e父"), DISABLE("1", "鍋滅敤"), DELETED("2", "鍒犻櫎"); + + private final String code; + private final String info; + + UserStatus(String code, String info) + { + this.code = code; + this.info = info; + } + + public String getCode() + { + return code; + } + + public String getInfo() + { + return info; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/AesException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/AesException.java new file mode 100644 index 0000000000000000000000000000000000000000..ef0006aa56814d73bf4747f691ec73a24406044e --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/AesException.java @@ -0,0 +1,59 @@ +package com.ruoyi.common.exception; + +@SuppressWarnings("serial") +public class AesException extends Exception { + + public final static int OK = 0; + public final static int ValidateSignatureError = -40001; + public final static int ParseXmlError = -40002; + public final static int ComputeSignatureError = -40003; + public final static int IllegalAesKey = -40004; + public final static int ValidateAppidError = -40005; + public final static int EncryptAESError = -40006; + public final static int DecryptAESError = -40007; + public final static int IllegalBuffer = -40008; + //public final static int EncodeBase64Error = -40009; + //public final static int DecodeBase64Error = -40010; + //public final static int GenReturnXmlError = -40011; + + private int code; + + private static String getMessage(int code) { + switch (code) { + case ValidateSignatureError: + return "绛惧悕楠岃瘉閿欒"; + case ParseXmlError: + return "xml瑙f瀽澶辫触"; + case ComputeSignatureError: + return "sha鍔犲瘑鐢熸垚绛惧悕澶辫触"; + case IllegalAesKey: + return "SymmetricKey闈炴硶"; + case ValidateAppidError: + return "appid鏍¢獙澶辫触"; + case EncryptAESError: + return "aes鍔犲瘑澶辫触"; + case DecryptAESError: + return "aes瑙e瘑澶辫触"; + case IllegalBuffer: + return "瑙e瘑鍚庡緱鍒扮殑buffer闈炴硶"; +// case EncodeBase64Error: +// return "base64鍔犲瘑閿欒"; +// case DecodeBase64Error: +// return "base64瑙e瘑閿欒"; +// case GenReturnXmlError: +// return "xml鐢熸垚澶辫触"; + default: + return null; // cannot be + } + } + + public int getCode() { + return code; + } + + public AesException(int code) { + super(getMessage(code)); + this.code = code; + } + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/DemoModeException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/DemoModeException.java new file mode 100644 index 0000000000000000000000000000000000000000..f6ad2ab49745be8a51eaa5ce72718ae2c373a8cb --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/DemoModeException.java @@ -0,0 +1,15 @@ +package com.ruoyi.common.exception; + +/** + * 婕旂ず妯″紡寮傚父 + * + * @author ruoyi + */ +public class DemoModeException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + public DemoModeException() + { + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/GlobalException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/GlobalException.java new file mode 100644 index 0000000000000000000000000000000000000000..81a71b5d339ad6c588caac0b95c193116ba1f7c2 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/GlobalException.java @@ -0,0 +1,58 @@ +package com.ruoyi.common.exception; + +/** + * 鍏ㄥ眬寮傚父 + * + * @author ruoyi + */ +public class GlobalException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + /** + * 閿欒鎻愮ず + */ + private String message; + + /** + * 閿欒鏄庣粏锛屽唴閮ㄨ皟璇曢敊璇 + * + * 鍜 {@link CommonResult#getDetailMessage()} 涓鑷寸殑璁捐 + */ + private String detailMessage; + + /** + * 绌烘瀯閫犳柟娉曪紝閬垮厤鍙嶅簭鍒楀寲闂 + */ + public GlobalException() + { + } + + public GlobalException(String message) + { + this.message = message; + } + + public String getDetailMessage() + { + return detailMessage; + } + + public GlobalException setDetailMessage(String detailMessage) + { + this.detailMessage = detailMessage; + return this; + } + + @Override + public String getMessage() + { + return message; + } + + public GlobalException setMessage(String message) + { + this.message = message; + return this; + } +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/ServiceException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/ServiceException.java new file mode 100644 index 0000000000000000000000000000000000000000..40cf83abcab09bf87328cdf5417b9b31ddee997d --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/ServiceException.java @@ -0,0 +1,83 @@ +package com.ruoyi.common.exception; + +import com.ruoyi.common.enums.ServiceResponseEnum; + +/** + * 涓氬姟寮傚父 + * + * @author ruoyi + */ +public final class ServiceException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + /** + * 閿欒鐮 + */ + private Integer code; + + /** + * 閿欒鎻愮ず + */ + private String message; + + /** + * 閿欒鏄庣粏锛屽唴閮ㄨ皟璇曢敊璇 + * + * 鍜 {@link CommonResult#getDetailMessage()} 涓鑷寸殑璁捐 + */ + private String detailMessage; + + /** + * 绌烘瀯閫犳柟娉曪紝閬垮厤鍙嶅簭鍒楀寲闂 + */ + public ServiceException() + { + } + + public ServiceException(String message) + { + this.message = message; + } + + public ServiceException(String message, Integer code) + { + this.message = message; + this.code = code; + } + + public ServiceException(ServiceResponseEnum serviceResponseEnum) + { + this.message = serviceResponseEnum.getMsg(); + this.code = serviceResponseEnum.getCode(); + } + + + public String getDetailMessage() + { + return detailMessage; + } + + @Override + public String getMessage() + { + return message; + } + + public Integer getCode() + { + return code; + } + + public ServiceException setMessage(String message) + { + this.message = message; + return this; + } + + public ServiceException setDetailMessage(String detailMessage) + { + this.detailMessage = detailMessage; + return this; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/UtilException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/UtilException.java new file mode 100644 index 0000000000000000000000000000000000000000..980fa465e866e4c0b67bdb77f065d31e1f246e8f --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/UtilException.java @@ -0,0 +1,26 @@ +package com.ruoyi.common.exception; + +/** + * 宸ュ叿绫诲紓甯 + * + * @author ruoyi + */ +public class UtilException extends RuntimeException +{ + private static final long serialVersionUID = 8247610319171014183L; + + public UtilException(Throwable e) + { + super(e.getMessage(), e); + } + + public UtilException(String message) + { + super(message); + } + + public UtilException(String message, Throwable throwable) + { + super(message, throwable); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/base/BaseException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/base/BaseException.java new file mode 100644 index 0000000000000000000000000000000000000000..b55d72e185608246f9d9bd8766a314f04a864c78 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/base/BaseException.java @@ -0,0 +1,97 @@ +package com.ruoyi.common.exception.base; + +import com.ruoyi.common.utils.MessageUtils; +import com.ruoyi.common.utils.StringUtils; + +/** + * 鍩虹寮傚父 + * + * @author ruoyi + */ +public class BaseException extends RuntimeException +{ + private static final long serialVersionUID = 1L; + + /** + * 鎵灞炴ā鍧 + */ + private String module; + + /** + * 閿欒鐮 + */ + private String code; + + /** + * 閿欒鐮佸搴旂殑鍙傛暟 + */ + private Object[] args; + + /** + * 閿欒娑堟伅 + */ + private String defaultMessage; + + public BaseException(String module, String code, Object[] args, String defaultMessage) + { + this.module = module; + this.code = code; + this.args = args; + this.defaultMessage = defaultMessage; + } + + public BaseException(String module, String code, Object[] args) + { + this(module, code, args, null); + } + + public BaseException(String module, String defaultMessage) + { + this(module, null, null, defaultMessage); + } + + public BaseException(String code, Object[] args) + { + this(null, code, args, null); + } + + public BaseException(String defaultMessage) + { + this(null, null, null, defaultMessage); + } + + @Override + public String getMessage() + { + String message = null; + if (!StringUtils.isEmpty(code)) + { + message = MessageUtils.message(code, args); + } + if (message == null) + { + message = defaultMessage; + } + return message; + } + + public String getModule() + { + return module; + } + + public String getCode() + { + return code; + } + + public Object[] getArgs() + { + return args; + } + + public String getDefaultMessage() + { + return defaultMessage; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileException.java new file mode 100644 index 0000000000000000000000000000000000000000..871f09b528b423650aa807a8e8e0ae9656933d44 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileException.java @@ -0,0 +1,19 @@ +package com.ruoyi.common.exception.file; + +import com.ruoyi.common.exception.base.BaseException; + +/** + * 鏂囦欢淇℃伅寮傚父绫 + * + * @author ruoyi + */ +public class FileException extends BaseException +{ + private static final long serialVersionUID = 1L; + + public FileException(String code, Object[] args) + { + super("file", code, args, null); + } + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileNameLengthLimitExceededException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileNameLengthLimitExceededException.java new file mode 100644 index 0000000000000000000000000000000000000000..70e0ec9b1dfd5a521aa8cb77d64c99ecef12a3e7 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileNameLengthLimitExceededException.java @@ -0,0 +1,16 @@ +package com.ruoyi.common.exception.file; + +/** + * 鏂囦欢鍚嶇О瓒呴暱闄愬埗寮傚父绫 + * + * @author ruoyi + */ +public class FileNameLengthLimitExceededException extends FileException +{ + private static final long serialVersionUID = 1L; + + public FileNameLengthLimitExceededException(int defaultFileNameLength) + { + super("upload.filename.exceed.length", new Object[] { defaultFileNameLength }); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileSizeLimitExceededException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileSizeLimitExceededException.java new file mode 100644 index 0000000000000000000000000000000000000000..ec6ab054d656146c1498fac8d91123958794c326 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileSizeLimitExceededException.java @@ -0,0 +1,16 @@ +package com.ruoyi.common.exception.file; + +/** + * 鏂囦欢鍚嶅ぇ灏忛檺鍒跺紓甯哥被 + * + * @author ruoyi + */ +public class FileSizeLimitExceededException extends FileException +{ + private static final long serialVersionUID = 1L; + + public FileSizeLimitExceededException(long defaultMaxSize) + { + super("upload.exceed.maxSize", new Object[] { defaultMaxSize }); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileUploadException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileUploadException.java new file mode 100644 index 0000000000000000000000000000000000000000..f45e7ef4087343a90fcfc926969ab87cb7db1111 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/FileUploadException.java @@ -0,0 +1,61 @@ +package com.ruoyi.common.exception.file; + +import java.io.PrintStream; +import java.io.PrintWriter; + +/** + * 鏂囦欢涓婁紶寮傚父绫 + * + * @author ruoyi + */ +public class FileUploadException extends Exception +{ + + private static final long serialVersionUID = 1L; + + private final Throwable cause; + + public FileUploadException() + { + this(null, null); + } + + public FileUploadException(final String msg) + { + this(msg, null); + } + + public FileUploadException(String msg, Throwable cause) + { + super(msg); + this.cause = cause; + } + + @Override + public void printStackTrace(PrintStream stream) + { + super.printStackTrace(stream); + if (cause != null) + { + stream.println("Caused by:"); + cause.printStackTrace(stream); + } + } + + @Override + public void printStackTrace(PrintWriter writer) + { + super.printStackTrace(writer); + if (cause != null) + { + writer.println("Caused by:"); + cause.printStackTrace(writer); + } + } + + @Override + public Throwable getCause() + { + return cause; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/InvalidExtensionException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/InvalidExtensionException.java new file mode 100644 index 0000000000000000000000000000000000000000..011f308389e137276470f144934069b7812867fe --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/file/InvalidExtensionException.java @@ -0,0 +1,80 @@ +package com.ruoyi.common.exception.file; + +import java.util.Arrays; + +/** + * 鏂囦欢涓婁紶 璇紓甯哥被 + * + * @author ruoyi + */ +public class InvalidExtensionException extends FileUploadException +{ + private static final long serialVersionUID = 1L; + + private String[] allowedExtension; + private String extension; + private String filename; + + public InvalidExtensionException(String[] allowedExtension, String extension, String filename) + { + super("鏂囦欢[" + filename + "]鍚庣紑[" + extension + "]涓嶆纭紝璇蜂笂浼" + Arrays.toString(allowedExtension) + "鏍煎紡"); + this.allowedExtension = allowedExtension; + this.extension = extension; + this.filename = filename; + } + + public String[] getAllowedExtension() + { + return allowedExtension; + } + + public String getExtension() + { + return extension; + } + + public String getFilename() + { + return filename; + } + + public static class InvalidImageExtensionException extends InvalidExtensionException + { + private static final long serialVersionUID = 1L; + + public InvalidImageExtensionException(String[] allowedExtension, String extension, String filename) + { + super(allowedExtension, extension, filename); + } + } + + public static class InvalidFlashExtensionException extends InvalidExtensionException + { + private static final long serialVersionUID = 1L; + + public InvalidFlashExtensionException(String[] allowedExtension, String extension, String filename) + { + super(allowedExtension, extension, filename); + } + } + + public static class InvalidMediaExtensionException extends InvalidExtensionException + { + private static final long serialVersionUID = 1L; + + public InvalidMediaExtensionException(String[] allowedExtension, String extension, String filename) + { + super(allowedExtension, extension, filename); + } + } + + public static class InvalidVideoExtensionException extends InvalidExtensionException + { + private static final long serialVersionUID = 1L; + + public InvalidVideoExtensionException(String[] allowedExtension, String extension, String filename) + { + super(allowedExtension, extension, filename); + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/job/TaskException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/job/TaskException.java new file mode 100644 index 0000000000000000000000000000000000000000..a567b408b29c690fab6ca7987326d5d2a34b68f8 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/job/TaskException.java @@ -0,0 +1,34 @@ +package com.ruoyi.common.exception.job; + +/** + * 璁″垝绛栫暐寮傚父 + * + * @author ruoyi + */ +public class TaskException extends Exception +{ + private static final long serialVersionUID = 1L; + + private Code code; + + public TaskException(String msg, Code code) + { + this(msg, code, null); + } + + public TaskException(String msg, Code code, Exception nestedEx) + { + super(msg, nestedEx); + this.code = code; + } + + public Code getCode() + { + return code; + } + + public enum Code + { + TASK_EXISTS, NO_TASK_EXISTS, TASK_ALREADY_STARTED, UNKNOWN, CONFIG_ERROR, TASK_NODE_NOT_AVAILABLE + } +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/BlackListException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/BlackListException.java new file mode 100644 index 0000000000000000000000000000000000000000..2bf503865852e63ee0246abe6f29e555f2f5d6b3 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/BlackListException.java @@ -0,0 +1,16 @@ +package com.ruoyi.common.exception.user; + +/** + * 榛戝悕鍗旾P寮傚父绫 + * + * @author ruoyi + */ +public class BlackListException extends UserException +{ + private static final long serialVersionUID = 1L; + + public BlackListException() + { + super("login.blocked", null); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaException.java new file mode 100644 index 0000000000000000000000000000000000000000..389dbc7535ee6640aca99296266ac50d0c56ddfb --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaException.java @@ -0,0 +1,16 @@ +package com.ruoyi.common.exception.user; + +/** + * 楠岃瘉鐮侀敊璇紓甯哥被 + * + * @author ruoyi + */ +public class CaptchaException extends UserException +{ + private static final long serialVersionUID = 1L; + + public CaptchaException() + { + super("user.jcaptcha.error", null); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaExpireException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaExpireException.java new file mode 100644 index 0000000000000000000000000000000000000000..85f94861bcbbb43a774374cb9f1212fb79fd9203 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/CaptchaExpireException.java @@ -0,0 +1,16 @@ +package com.ruoyi.common.exception.user; + +/** + * 楠岃瘉鐮佸け鏁堝紓甯哥被 + * + * @author ruoyi + */ +public class CaptchaExpireException extends UserException +{ + private static final long serialVersionUID = 1L; + + public CaptchaExpireException() + { + super("user.jcaptcha.expire", null); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserException.java new file mode 100644 index 0000000000000000000000000000000000000000..c292d70ed70dbb8df65a7ef8240df6cd3f1766b3 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserException.java @@ -0,0 +1,18 @@ +package com.ruoyi.common.exception.user; + +import com.ruoyi.common.exception.base.BaseException; + +/** + * 鐢ㄦ埛淇℃伅寮傚父绫 + * + * @author ruoyi + */ +public class UserException extends BaseException +{ + private static final long serialVersionUID = 1L; + + public UserException(String code, Object[] args) + { + super("user", code, args, null); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserNotExistsException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserNotExistsException.java new file mode 100644 index 0000000000000000000000000000000000000000..eff8181219adbe2176ba429db630297850eb05ce --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserNotExistsException.java @@ -0,0 +1,16 @@ +package com.ruoyi.common.exception.user; + +/** + * 鐢ㄦ埛涓嶅瓨鍦ㄥ紓甯哥被 + * + * @author ruoyi + */ +public class UserNotExistsException extends UserException +{ + private static final long serialVersionUID = 1L; + + public UserNotExistsException() + { + super("user.not.exists", null); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordNotMatchException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordNotMatchException.java new file mode 100644 index 0000000000000000000000000000000000000000..a7f3e5ffed23e5e502f37f7a49cc616c33a593fd --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordNotMatchException.java @@ -0,0 +1,16 @@ +package com.ruoyi.common.exception.user; + +/** + * 鐢ㄦ埛瀵嗙爜涓嶆纭垨涓嶇鍚堣鑼冨紓甯哥被 + * + * @author ruoyi + */ +public class UserPasswordNotMatchException extends UserException +{ + private static final long serialVersionUID = 1L; + + public UserPasswordNotMatchException() + { + super("user.password.not.match", null); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordRetryLimitExceedException.java b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordRetryLimitExceedException.java new file mode 100644 index 0000000000000000000000000000000000000000..c887cf1171d3e0b7eb6a729a962ecb3a4658affe --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/exception/user/UserPasswordRetryLimitExceedException.java @@ -0,0 +1,16 @@ +package com.ruoyi.common.exception.user; + +/** + * 鐢ㄦ埛閿欒鏈澶ф鏁板紓甯哥被 + * + * @author ruoyi + */ +public class UserPasswordRetryLimitExceedException extends UserException +{ + private static final long serialVersionUID = 1L; + + public UserPasswordRetryLimitExceedException(int retryLimitCount, int lockTime) + { + super("user.password.retry.limit.exceed", new Object[] { retryLimitCount, lockTime }); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/filter/PropertyPreExcludeFilter.java b/ruoyi-common/src/main/java/com/ruoyi/common/filter/PropertyPreExcludeFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..e1e431b190b483d30b023f3b732bb421cccb691e --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/filter/PropertyPreExcludeFilter.java @@ -0,0 +1,24 @@ +package com.ruoyi.common.filter; + +import com.alibaba.fastjson2.filter.SimplePropertyPreFilter; + +/** + * 鎺掗櫎JSON鏁忔劅灞炴 + * + * @author ruoyi + */ +public class PropertyPreExcludeFilter extends SimplePropertyPreFilter +{ + public PropertyPreExcludeFilter() + { + } + + public PropertyPreExcludeFilter addExcludes(String... filters) + { + for (int i = 0; i < filters.length; i++) + { + this.getExcludes().add(filters[i]); + } + return this; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatableFilter.java b/ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatableFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..ffe614ceb42479db6418a05ef8ca9facb99f75ab --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatableFilter.java @@ -0,0 +1,48 @@ +package com.ruoyi.common.filter; + +import com.ruoyi.common.utils.StringUtils; +import org.springframework.http.MediaType; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; + +/** + * Repeatable 杩囨护鍣 + * + * @author ruoyi + */ +public class RepeatableFilter implements Filter +{ + @Override + public void init(FilterConfig filterConfig) throws ServletException + { + + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException + { + ServletRequest requestWrapper = null; + if (request instanceof HttpServletRequest + && StringUtils.startsWithIgnoreCase(request.getContentType(), MediaType.APPLICATION_JSON_VALUE)) + { + requestWrapper = new RepeatedlyRequestWrapper((HttpServletRequest) request, response); + } + if (null == requestWrapper) + { + chain.doFilter(request, response); + } + else + { + chain.doFilter(requestWrapper, response); + } + } + + @Override + public void destroy() + { + + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatedlyRequestWrapper.java b/ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatedlyRequestWrapper.java new file mode 100644 index 0000000000000000000000000000000000000000..34430add4f7db5c18d3a0534cee60c29cc404a53 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/filter/RepeatedlyRequestWrapper.java @@ -0,0 +1,77 @@ +package com.ruoyi.common.filter; + +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.utils.http.HttpHelper; + +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStreamReader; + +/** + * 鏋勫缓鍙噸澶嶈鍙杋nputStream鐨剅equest + * + * @author ruoyi + */ +public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper +{ + private final byte[] body; + + public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException + { + super(request); + request.setCharacterEncoding(Constants.UTF8); + response.setCharacterEncoding(Constants.UTF8); + + body = HttpHelper.getBodyString(request).getBytes(Constants.UTF8); + } + + @Override + public BufferedReader getReader() throws IOException + { + return new BufferedReader(new InputStreamReader(getInputStream())); + } + + @Override + public ServletInputStream getInputStream() throws IOException + { + final ByteArrayInputStream bais = new ByteArrayInputStream(body); + return new ServletInputStream() + { + @Override + public int read() throws IOException + { + return bais.read(); + } + + @Override + public int available() throws IOException + { + return body.length; + } + + @Override + public boolean isFinished() + { + return false; + } + + @Override + public boolean isReady() + { + return false; + } + + @Override + public void setReadListener(ReadListener readListener) + { + + } + }; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/filter/XssFilter.java b/ruoyi-common/src/main/java/com/ruoyi/common/filter/XssFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..393ff4498c1a5fe52da0454c5bdb63528b08102b --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/filter/XssFilter.java @@ -0,0 +1,71 @@ +package com.ruoyi.common.filter; + +import com.ruoyi.common.enums.HttpMethod; +import com.ruoyi.common.utils.StringUtils; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * 闃叉XSS鏀诲嚮鐨勮繃婊ゅ櫒 + * + * @author ruoyi + */ +public class XssFilter implements Filter +{ + /** + * 鎺掗櫎閾炬帴 + */ + public List excludes = new ArrayList<>(); + + @Override + public void init(FilterConfig filterConfig) throws ServletException + { + String tempExcludes = filterConfig.getInitParameter("excludes"); + if (StringUtils.isNotEmpty(tempExcludes)) + { + String[] urls = tempExcludes.split(","); + for (String url : urls) + { + excludes.add(url); + } + } + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException + { + HttpServletRequest req = (HttpServletRequest) request; + HttpServletResponse resp = (HttpServletResponse) response; + if (handleExcludeURL(req, resp)) + { + chain.doFilter(request, response); + return; + } + XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper((HttpServletRequest) request); + chain.doFilter(xssRequest, response); + } + + private boolean handleExcludeURL(HttpServletRequest request, HttpServletResponse response) + { + String url = request.getServletPath(); + String method = request.getMethod(); + // GET DELETE 涓嶈繃婊 + if (method == null || HttpMethod.GET.matches(method) || HttpMethod.DELETE.matches(method)) + { + return true; + } + return StringUtils.matches(url, excludes); + } + + @Override + public void destroy() + { + + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/filter/XssHttpServletRequestWrapper.java b/ruoyi-common/src/main/java/com/ruoyi/common/filter/XssHttpServletRequestWrapper.java new file mode 100644 index 0000000000000000000000000000000000000000..03119a7c24da11789cdecaac7dd783cfe5e8a32a --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/filter/XssHttpServletRequestWrapper.java @@ -0,0 +1,112 @@ +package com.ruoyi.common.filter; + +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.html.EscapeUtil; +import org.apache.commons.io.IOUtils; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; + +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import java.io.ByteArrayInputStream; +import java.io.IOException; + +/** + * XSS杩囨护澶勭悊 + * + * @author ruoyi + */ +public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper +{ + /** + * @param request + */ + public XssHttpServletRequestWrapper(HttpServletRequest request) + { + super(request); + } + + @Override + public String[] getParameterValues(String name) + { + String[] values = super.getParameterValues(name); + if (values != null) + { + int length = values.length; + String[] escapesValues = new String[length]; + for (int i = 0; i < length; i++) + { + // 闃瞲ss鏀诲嚮鍜岃繃婊ゅ墠鍚庣┖鏍 + escapesValues[i] = EscapeUtil.clean(values[i]).trim(); + } + return escapesValues; + } + return super.getParameterValues(name); + } + + @Override + public ServletInputStream getInputStream() throws IOException + { + // 闈瀓son绫诲瀷锛岀洿鎺ヨ繑鍥 + if (!isJsonRequest()) + { + return super.getInputStream(); + } + + // 涓虹┖锛岀洿鎺ヨ繑鍥 + String json = IOUtils.toString(super.getInputStream(), "utf-8"); + if (StringUtils.isEmpty(json)) + { + return super.getInputStream(); + } + + // xss杩囨护 + json = EscapeUtil.clean(json).trim(); + byte[] jsonBytes = json.getBytes("utf-8"); + final ByteArrayInputStream bis = new ByteArrayInputStream(jsonBytes); + return new ServletInputStream() + { + @Override + public boolean isFinished() + { + return true; + } + + @Override + public boolean isReady() + { + return true; + } + + @Override + public int available() throws IOException + { + return jsonBytes.length; + } + + @Override + public void setReadListener(ReadListener readListener) + { + } + + @Override + public int read() throws IOException + { + return bis.read(); + } + }; + } + + /** + * 鏄惁鏄疛son璇锋眰 + * + * @param request + */ + public boolean isJsonRequest() + { + String header = super.getHeader(HttpHeaders.CONTENT_TYPE); + return StringUtils.startsWithIgnoreCase(header, MediaType.APPLICATION_JSON_VALUE); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/qiniu/QiNiuConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/qiniu/QiNiuConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..21986b045ce64c66dd151561b894d5529b90f793 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/qiniu/QiNiuConfig.java @@ -0,0 +1,33 @@ +package com.ruoyi.common.qiniu; + +import lombok.Getter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +/** + * 涓冪墰浜戦厤缃 + * @author Wzp + */ +@Getter +@Configuration +public class QiNiuConfig { + + /** 涓冪墰浜戦厤缃 */ + @Value("${qiNiu.accessKey}") + private String accessKey; + + @Value("${qiNiu.secretKey}") + private String secretKey; + + @Value("${qiNiu.bucketName}") + private String bucketName; + + @Value("${qiNiu.baseUrl}") + private String baseUrl; + + @Value("${qiNiu.imgFolderUrl}") + private String imgFolderUrl; + + @Value("${qiNiu.localBaseUrl}") + private String localBaseUrl; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/qiniu/QiNiuUploadUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/qiniu/QiNiuUploadUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..4bbdc5873df14df469b9defbcf11fb9c8f50bd23 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/qiniu/QiNiuUploadUtils.java @@ -0,0 +1,185 @@ +package com.ruoyi.common.qiniu; + +import com.qiniu.storage.UploadManager; +import com.qiniu.util.Auth; +import com.ruoyi.common.utils.StringUtils; +import net.coobird.thumbnailator.Thumbnails; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import java.io.*; +import java.math.BigInteger; +import java.security.MessageDigest; + +/** + * 涓冪墰浜戞枃浠跺瓨鍌ㄦ湇鍔 + * @author Wzp + */ +@Component +public class QiNiuUploadUtils { + + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + /** 纾佺洏鍥剧墖閰嶇疆 */ + @Resource + private QiNiuConfig qiNiuConfig; + + /** 涓婁紶瀵硅薄 */ + private UploadManager uploadManager; + + /** 涓婁紶鍑瘉 */ + private Auth auth; + +// /** +// * 鍒濆鍖栦笂浼犲璞 +// */ +// protected void init(){ +// //鏋勯犱竴涓甫鎸囧畾 Region 瀵硅薄鐨勯厤缃被 +// Configuration cfg = new Configuration(Region.huanan()); +// // 鎸囧畾鍒嗙墖涓婁紶鐗堟湰 +// cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2; +// this.uploadManager = new UploadManager(cfg); +// // 鑾峰彇token鍑瘉瀵硅薄 +// this.auth = Auth.create(qiNiuConfig.getAccessKey(), qiNiuConfig.getSecretKey()); +// } + + /** + * 涓婁紶瀛楄妭鏁扮粍 + * @param uploadBytes 瀛楄妭鏁扮粍鏁版嵁 + * @return 缁撴灉 + */ + public String uploadByte(byte[] uploadBytes, String key){ + String fileUrl = ""; + File outputFile = new File(qiNiuConfig.getImgFolderUrl()+"/"+key); + try (FileOutputStream fos = new FileOutputStream(outputFile)) { + fos.write(uploadBytes); + } catch (IOException e) { + e.printStackTrace(); + logger.error(e.getMessage()); + }finally { + fileUrl = qiNiuConfig.getLocalBaseUrl()+key; + return fileUrl; + } + } + + /** + * 鏁版嵁娴佷笂浼 + * @param inputStream 鏁版嵁娴 + * @return 缁撴灉 + */ + public String uploadInputStream(InputStream inputStream,String key) { + String url = ""; + + File outputFile = new File(qiNiuConfig.getImgFolderUrl()+"/"+key); + + try (FileOutputStream outputStream = new FileOutputStream(outputFile)) { + byte[] buffer = new byte[4096]; + int bytesRead; + while ((bytesRead = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + } catch (FileNotFoundException e) { + logger.error(e.getMessage()); + throw new RuntimeException(e); + } catch (IOException e) { + logger.error(e.getMessage()); + throw new RuntimeException(e); + }finally { + url = qiNiuConfig.getLocalBaseUrl()+key; + return url; + } + + } + + + + /** + * 鑾峰彇鏂囦欢涓婁紶鍚嶇О + * @param file 鏂囦欢 + * @return 缁撴灉 + */ + public String getFileUploadName(MultipartFile file){ + // 涓婁紶鏂囦欢鍚 + String fileName = ""; + try { + // 鏂囦欢鐪熷疄鍚嶇О + String originalFilename = file.getOriginalFilename(); + if (StringUtils.isNotBlank(originalFilename)){ + // 鑾峰彇鍚庣紑鍚 + String substring = originalFilename.substring(originalFilename.lastIndexOf(".") + 1); + // 鑾峰彇鏂囦欢hash鍊 + String s = md5HashCode(file.getInputStream()); + fileName = s+"."+substring; + } + } catch (IOException e) { + e.printStackTrace(); + } + return fileName; + } + + /** + * 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 byte[] getZipImage(MultipartFile file) { + byte[] zipBytes = null; + ByteArrayOutputStream outputStream = null; + InputStream inputStream = null; + try { + byte[] bytes = file.getBytes(); + outputStream = new ByteArrayOutputStream(bytes.length); + inputStream = file.getInputStream(); + Thumbnails.of(inputStream) + .scale(0.8f) + .outputQuality(1f) + .toOutputStream(outputStream); + zipBytes = outputStream.toByteArray(); + }catch (Exception e){ + e.printStackTrace(); + }finally { + try { + if (inputStream != null) { + inputStream.close(); + } + if (outputStream != null) { + outputStream.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + return zipBytes; + } + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java new file mode 100644 index 0000000000000000000000000000000000000000..b6326c2b1bff208446fa9c45530b399f0ea7f0cd --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/Arith.java @@ -0,0 +1,114 @@ +package com.ruoyi.common.utils; + +import java.math.BigDecimal; +import java.math.RoundingMode; + +/** + * 绮剧‘鐨勬诞鐐规暟杩愮畻 + * + * @author ruoyi + */ +public class Arith +{ + + /** 榛樿闄ゆ硶杩愮畻绮惧害 */ + private static final int DEF_DIV_SCALE = 10; + + /** 杩欎釜绫讳笉鑳藉疄渚嬪寲 */ + private Arith() + { + } + + /** + * 鎻愪緵绮剧‘鐨勫姞娉曡繍绠椼 + * @param v1 琚姞鏁 + * @param v2 鍔犳暟 + * @return 涓や釜鍙傛暟鐨勫拰 + */ + public static double add(double v1, double v2) + { + BigDecimal b1 = new BigDecimal(Double.toString(v1)); + BigDecimal b2 = new BigDecimal(Double.toString(v2)); + return b1.add(b2).doubleValue(); + } + + /** + * 鎻愪緵绮剧‘鐨勫噺娉曡繍绠椼 + * @param v1 琚噺鏁 + * @param v2 鍑忔暟 + * @return 涓や釜鍙傛暟鐨勫樊 + */ + public static double sub(double v1, double v2) + { + BigDecimal b1 = new BigDecimal(Double.toString(v1)); + BigDecimal b2 = new BigDecimal(Double.toString(v2)); + return b1.subtract(b2).doubleValue(); + } + + /** + * 鎻愪緵绮剧‘鐨勪箻娉曡繍绠椼 + * @param v1 琚箻鏁 + * @param v2 涔樻暟 + * @return 涓や釜鍙傛暟鐨勭Н + */ + public static double mul(double v1, double v2) + { + BigDecimal b1 = new BigDecimal(Double.toString(v1)); + BigDecimal b2 = new BigDecimal(Double.toString(v2)); + return b1.multiply(b2).doubleValue(); + } + + /** + * 鎻愪緵锛堢浉瀵癸級绮剧‘鐨勯櫎娉曡繍绠楋紝褰撳彂鐢熼櫎涓嶅敖鐨勬儏鍐垫椂锛岀簿纭埌 + * 灏忔暟鐐逛互鍚10浣嶏紝浠ュ悗鐨勬暟瀛楀洓鑸嶄簲鍏ャ + * @param v1 琚櫎鏁 + * @param v2 闄ゆ暟 + * @return 涓や釜鍙傛暟鐨勫晢 + */ + public static double div(double v1, double v2) + { + return div(v1, v2, DEF_DIV_SCALE); + } + + /** + * 鎻愪緵锛堢浉瀵癸級绮剧‘鐨勯櫎娉曡繍绠椼傚綋鍙戠敓闄や笉灏界殑鎯呭喌鏃讹紝鐢眘cale鍙傛暟鎸 + * 瀹氱簿搴︼紝浠ュ悗鐨勬暟瀛楀洓鑸嶄簲鍏ャ + * @param v1 琚櫎鏁 + * @param v2 闄ゆ暟 + * @param scale 琛ㄧず琛ㄧず闇瑕佺簿纭埌灏忔暟鐐逛互鍚庡嚑浣嶃 + * @return 涓や釜鍙傛暟鐨勫晢 + */ + public static double div(double v1, double v2, int scale) + { + if (scale < 0) + { + throw new IllegalArgumentException( + "The scale must be a positive integer or zero"); + } + BigDecimal b1 = new BigDecimal(Double.toString(v1)); + BigDecimal b2 = new BigDecimal(Double.toString(v2)); + if (b1.compareTo(BigDecimal.ZERO) == 0) + { + return BigDecimal.ZERO.doubleValue(); + } + return b1.divide(b2, scale, RoundingMode.HALF_UP).doubleValue(); + } + + /** + * 鎻愪緵绮剧‘鐨勫皬鏁颁綅鍥涜垗浜斿叆澶勭悊銆 + * @param v 闇瑕佸洓鑸嶄簲鍏ョ殑鏁板瓧 + * @param scale 灏忔暟鐐瑰悗淇濈暀鍑犱綅 + * @return 鍥涜垗浜斿叆鍚庣殑缁撴灉 + */ + public static double round(double v, int scale) + { + if (scale < 0) + { + throw new IllegalArgumentException( + "The scale must be a positive integer or zero"); + } + BigDecimal b = new BigDecimal(Double.toString(v)); + BigDecimal one = BigDecimal.ONE; + return b.divide(one, scale, RoundingMode.HALF_UP).doubleValue(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..1762f8862867356815258cb0250afc5bfaff69f8 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DateUtils.java @@ -0,0 +1,248 @@ +package com.ruoyi.common.utils; + +import org.apache.commons.lang3.time.DateFormatUtils; + +import java.lang.management.ManagementFactory; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.*; +import java.util.Calendar; +import java.util.Date; + +/** + * 鏃堕棿宸ュ叿绫 + * + * @author ruoyi + */ +public class DateUtils extends org.apache.commons.lang3.time.DateUtils +{ + public static String YYYY = "yyyy"; + + public static String YYYY_MM = "yyyy-MM"; + + public static String YYYY_MM_DD = "yyyy-MM-dd"; + + public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; + + public static String YYYYMMDDHHMMSSSSS = "yyyyMMddHHmmssSSS"; + + public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; + + private static String[] parsePatterns = { + "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", + "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", + "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"}; + + /** + * 鑾峰彇褰撳墠Date鍨嬫棩鏈 + * + * @return Date() 褰撳墠鏃ユ湡 + */ + public static Date getNowDate() + { + return new Date(); + } + + /** + * 鑾峰彇褰撳墠鏃ユ湡, 榛樿鏍煎紡涓簓yyy-MM-dd + * + * @return String + */ + public static String getDate() + { + return dateTimeNow(YYYY_MM_DD); + } + + public static final String getTime() + { + return dateTimeNow(YYYY_MM_DD_HH_MM_SS); + } + + public static final String dateTimeNow() + { + return dateTimeNow(YYYYMMDDHHMMSS); + } + + public static final String dateTimeNow(final String format) + { + return parseDateToStr(format, new Date()); + } + + public static final String dateTime(final Date date) + { + return parseDateToStr(YYYY_MM_DD, date); + } + + public static final String parseDateToStr(final String format, final Date date) + { + return new SimpleDateFormat(format).format(date); + } + + public static final Date dateTime(final String format, final String ts) + { + try + { + return new SimpleDateFormat(format).parse(ts); + } + catch (ParseException e) + { + throw new RuntimeException(e); + } + } + + /** + * 鏃ユ湡璺緞 鍗冲勾/鏈/鏃 濡2018/08/08 + */ + public static final String datePath() + { + Date now = new Date(); + return DateFormatUtils.format(now, "yyyy/MM/dd"); + } + + /** + * 鏃ユ湡璺緞 鍗冲勾/鏈/鏃 濡20180808 + */ + public static final String dateTime() + { + Date now = new Date(); + return DateFormatUtils.format(now, "yyyyMMdd"); + } + + /** + * 鏃ユ湡鍨嬪瓧绗︿覆杞寲涓烘棩鏈 鏍煎紡 + */ + public static Date parseDate(Object str) + { + if (str == null) + { + return null; + } + try + { + return parseDate(str.toString(), parsePatterns); + } + catch (ParseException e) + { + return null; + } + } + + /** + * 鑾峰彇鏈嶅姟鍣ㄥ惎鍔ㄦ椂闂 + */ + public static Date getServerStartDate() + { + long time = ManagementFactory.getRuntimeMXBean().getStartTime(); + return new Date(time); + } + + /** + * 璁$畻鐩稿樊澶╂暟 + */ + public static int differentDaysByMillisecond(Date date1, Date date2) + { + return Math.abs((int) ((date2.getTime() - date1.getTime()) / (1000 * 3600 * 24))); + } + + /** + * 璁$畻鏃堕棿宸 + * + * @param endDate 鏈鍚庢椂闂 + * @param startTime 寮濮嬫椂闂 + * @return 鏃堕棿宸紙澶/灏忔椂/鍒嗛挓锛 + */ + public static String timeDistance(Date endDate, Date startTime) + { + long nd = 1000 * 24 * 60 * 60; + long nh = 1000 * 60 * 60; + long nm = 1000 * 60; + // long ns = 1000; + // 鑾峰緱涓や釜鏃堕棿鐨勬绉掓椂闂村樊寮 + long diff = endDate.getTime() - startTime.getTime(); + // 璁$畻宸灏戝ぉ + long day = diff / nd; + // 璁$畻宸灏戝皬鏃 + long hour = diff % nd / nh; + // 璁$畻宸灏戝垎閽 + long min = diff % nd % nh / nm; + // 璁$畻宸灏戠//杈撳嚭缁撴灉 + // long sec = diff % nd % nh % nm / ns; + return day + "澶" + hour + "灏忔椂" + min + "鍒嗛挓"; + } + /** + * 璁$畻鏃堕棿宸 + * + * @param endDate 鏈鍚庢椂闂 + * @param startTime 寮濮嬫椂闂 + * @return 鏃堕棿宸紙澶/灏忔椂/鍒嗛挓锛 + */ + public static String timeDistanceSecond(Date endDate, Date startTime) + { + long nd = 1000 * 24 * 60 * 60; + long nh = 1000 * 60 * 60; + long nm = 1000 * 60; + long ns = 1000; + // 鑾峰緱涓や釜鏃堕棿鐨勬绉掓椂闂村樊寮 + long diff = endDate.getTime() - startTime.getTime(); + // 璁$畻宸灏戝ぉ + long day = diff / nd; + // 璁$畻宸灏戝皬鏃 + long hour = diff/ nh; + // 璁$畻宸灏戝垎閽 + long min = diff% nh / nm; + // 璁$畻宸灏戠//杈撳嚭缁撴灉 + long sec = diff % nh % nm / ns; + return hour + "灏忔椂" + min + "鍒嗛挓"+sec+"绉"; + } + + /** + * 澧炲姞 LocalDateTime ==> Date + */ + public static Date toDate(LocalDateTime temporalAccessor) + { + ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault()); + return Date.from(zdt.toInstant()); + } + + /** + * 澧炲姞 LocalDate ==> Date + */ + public static Date toDate(LocalDate temporalAccessor) + { + LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0)); + ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault()); + return Date.from(zdt.toInstant()); + } + + /** + * 姣旇緝鏃堕棿 + * @param date 闇瑕佹瘮杈冪殑鏃堕棿 + * @param field 绫诲瀷 + * @param amount 鍋忕Щ閲 + * @return true瓒呮椂锛宖alse鍙嶄箣 + */ + public static Boolean compare(Date date, int field, int amount){ + Calendar c = Calendar.getInstance(); + c.setTime(date); + c.add(field, amount); + + return c.getTime().getTime() < System.currentTimeMillis(); + } + + public static boolean isValidDate(String birthday) { + //鍒ゆ柇鏄惁鏄┖ + if (StringUtils.isNotEmpty(birthday)){ + try { + //杞崲鏃ユ湡鏍煎紡 + Date date = new SimpleDateFormat("yyyy-MM-dd").parse(birthday); + //杞崲鎴愬瓧绗︿覆 + String str = new SimpleDateFormat("yyyy-MM-dd").format(date); + //鍒ゆ柇鏄惁鐩哥瓑 + return birthday.equals(str); + } catch (ParseException e) { + e.printStackTrace(); + } + } + return false; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DesensitizedUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DesensitizedUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..f8a4c022eec81f288689d52f4220565d13cfee0b --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DesensitizedUtil.java @@ -0,0 +1,49 @@ +package com.ruoyi.common.utils; + +/** + * 鑴辨晱宸ュ叿绫 + * + * @author ruoyi + */ +public class DesensitizedUtil +{ + /** + * 瀵嗙爜鐨勫叏閮ㄥ瓧绗﹂兘鐢*浠f浛锛屾瘮濡傦細****** + * + * @param password 瀵嗙爜 + * @return 鑴辨晱鍚庣殑瀵嗙爜 + */ + public static String password(String password) + { + if (StringUtils.isBlank(password)) + { + return StringUtils.EMPTY; + } + return StringUtils.repeat('*', password.length()); + } + + /** + * 杞︾墝涓棿鐢*浠f浛锛屽鏋滄槸閿欒鐨勮溅鐗岋紝涓嶅鐞 + * + * @param carLicense 瀹屾暣鐨勮溅鐗屽彿 + * @return 鑴辨晱鍚庣殑杞︾墝 + */ + public static String carLicense(String carLicense) + { + if (StringUtils.isBlank(carLicense)) + { + return StringUtils.EMPTY; + } + // 鏅氳溅鐗 + if (carLicense.length() == 7) + { + carLicense = StringUtils.hide(carLicense, 3, 6); + } + else if (carLicense.length() == 8) + { + // 鏂拌兘婧愯溅鐗 + carLicense = StringUtils.hide(carLicense, 3, 7); + } + return carLicense; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..56064cf774b14a0c47d2cd1eabf5e6820dd1acbe --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java @@ -0,0 +1,240 @@ +package com.ruoyi.common.utils; + +import com.alibaba.fastjson2.JSONArray; +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.core.domain.entity.SysDictData; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.spring.SpringUtils; + +import java.util.Collection; +import java.util.List; + +/** + * 瀛楀吀宸ュ叿绫 + * + * @author ruoyi + */ +public class DictUtils +{ + /** + * 鍒嗛殧绗 + */ + public static final String SEPARATOR = ","; + + /** + * 璁剧疆瀛楀吀缂撳瓨 + * + * @param key 鍙傛暟閿 + * @param dictDatas 瀛楀吀鏁版嵁鍒楄〃 + */ + public static void setDictCache(String key, List dictDatas) + { + SpringUtils.getBean(RedisCache.class).setCacheObject(getCacheKey(key), dictDatas); + } + + /** + * 鑾峰彇瀛楀吀缂撳瓨 + * + * @param key 鍙傛暟閿 + * @return dictDatas 瀛楀吀鏁版嵁鍒楄〃 + */ + public static List getDictCache(String key) + { + JSONArray arrayCache = SpringUtils.getBean(RedisCache.class).getCacheObject(getCacheKey(key)); + if (StringUtils.isNotNull(arrayCache)) + { + return arrayCache.toList(SysDictData.class); + } + return null; + } + + /** + * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏稿艰幏鍙栧瓧鍏告爣绛 + * + * @param dictType 瀛楀吀绫诲瀷 + * @param dictValue 瀛楀吀鍊 + * @return 瀛楀吀鏍囩 + */ + public static String getDictLabel(String dictType, String dictValue) + { + if (StringUtils.isEmpty(dictValue)) + { + return StringUtils.EMPTY; + } + return getDictLabel(dictType, dictValue, SEPARATOR); + } + + /** + * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏告爣绛捐幏鍙栧瓧鍏稿 + * + * @param dictType 瀛楀吀绫诲瀷 + * @param dictLabel 瀛楀吀鏍囩 + * @return 瀛楀吀鍊 + */ + public static String getDictValue(String dictType, String dictLabel) + { + if (StringUtils.isEmpty(dictLabel)) + { + return StringUtils.EMPTY; + } + return getDictValue(dictType, dictLabel, SEPARATOR); + } + + /** + * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏稿艰幏鍙栧瓧鍏告爣绛 + * + * @param dictType 瀛楀吀绫诲瀷 + * @param dictValue 瀛楀吀鍊 + * @param separator 鍒嗛殧绗 + * @return 瀛楀吀鏍囩 + */ + public static String getDictLabel(String dictType, String dictValue, String separator) + { + StringBuilder propertyString = new StringBuilder(); + List datas = getDictCache(dictType); + if (StringUtils.isNull(datas)) + { + return StringUtils.EMPTY; + } + if (StringUtils.containsAny(separator, dictValue)) + { + for (SysDictData dict : datas) + { + for (String value : dictValue.split(separator)) + { + if (value.equals(dict.getDictValue())) + { + propertyString.append(dict.getDictLabel()).append(separator); + break; + } + } + } + } + else + { + for (SysDictData dict : datas) + { + if (dictValue.equals(dict.getDictValue())) + { + return dict.getDictLabel(); + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏告爣绛捐幏鍙栧瓧鍏稿 + * + * @param dictType 瀛楀吀绫诲瀷 + * @param dictLabel 瀛楀吀鏍囩 + * @param separator 鍒嗛殧绗 + * @return 瀛楀吀鍊 + */ + public static String getDictValue(String dictType, String dictLabel, String separator) + { + StringBuilder propertyString = new StringBuilder(); + List datas = getDictCache(dictType); + if (StringUtils.isNull(datas)) + { + return StringUtils.EMPTY; + } + if (StringUtils.containsAny(separator, dictLabel)) + { + for (SysDictData dict : datas) + { + for (String label : dictLabel.split(separator)) + { + if (label.equals(dict.getDictLabel())) + { + propertyString.append(dict.getDictValue()).append(separator); + break; + } + } + } + } + else + { + for (SysDictData dict : datas) + { + if (dictLabel.equals(dict.getDictLabel())) + { + return dict.getDictValue(); + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 鏍规嵁瀛楀吀绫诲瀷鑾峰彇瀛楀吀鎵鏈夊 + * + * @param dictType 瀛楀吀绫诲瀷 + * @return 瀛楀吀鍊 + */ + public static String getDictValues(String dictType) + { + StringBuilder propertyString = new StringBuilder(); + List datas = getDictCache(dictType); + if (StringUtils.isNull(datas)) + { + return StringUtils.EMPTY; + } + for (SysDictData dict : datas) + { + propertyString.append(dict.getDictValue()).append(SEPARATOR); + } + return StringUtils.stripEnd(propertyString.toString(), SEPARATOR); + } + + /** + * 鏍规嵁瀛楀吀绫诲瀷鑾峰彇瀛楀吀鎵鏈夋爣绛 + * + * @param dictType 瀛楀吀绫诲瀷 + * @return 瀛楀吀鍊 + */ + public static String getDictLabels(String dictType) + { + StringBuilder propertyString = new StringBuilder(); + List datas = getDictCache(dictType); + if (StringUtils.isNull(datas)) + { + return StringUtils.EMPTY; + } + for (SysDictData dict : datas) + { + propertyString.append(dict.getDictLabel()).append(SEPARATOR); + } + return StringUtils.stripEnd(propertyString.toString(), SEPARATOR); + } + + /** + * 鍒犻櫎鎸囧畾瀛楀吀缂撳瓨 + * + * @param key 瀛楀吀閿 + */ + public static void removeDictCache(String key) + { + SpringUtils.getBean(RedisCache.class).deleteObject(getCacheKey(key)); + } + + /** + * 娓呯┖瀛楀吀缂撳瓨 + */ + public static void clearDictCache() + { + Collection keys = SpringUtils.getBean(RedisCache.class).keys(CacheConstants.SYS_DICT_KEY + "*"); + SpringUtils.getBean(RedisCache.class).deleteObject(keys); + } + + /** + * 璁剧疆cache key + * + * @param configKey 鍙傛暟閿 + * @return 缂撳瓨閿甼ey + */ + public static String getCacheKey(String configKey) + { + return CacheConstants.SYS_DICT_KEY + configKey; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ExceptionUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ExceptionUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..6ae8a4c4cd59cf0820233edfff5cca111af7e11d --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ExceptionUtil.java @@ -0,0 +1,40 @@ +package com.ruoyi.common.utils; + +import org.apache.commons.lang3.exception.ExceptionUtils; + +import java.io.PrintWriter; +import java.io.StringWriter; + +/** + * 閿欒淇℃伅澶勭悊绫汇 + * + * @author ruoyi + */ +public class ExceptionUtil +{ + /** + * 鑾峰彇exception鐨勮缁嗛敊璇俊鎭 + */ + public static String getExceptionMessage(Throwable e) + { + StringWriter sw = new StringWriter(); + e.printStackTrace(new PrintWriter(sw, true)); + return sw.toString(); + } + + public static String getRootErrorMessage(Exception e) + { + Throwable root = ExceptionUtils.getRootCause(e); + root = (root == null ? e : root); + if (root == null) + { + return ""; + } + String msg = root.getMessage(); + if (msg == null) + { + return "null"; + } + return StringUtils.defaultString(msg); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ImgUpload.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ImgUpload.java new file mode 100644 index 0000000000000000000000000000000000000000..d509fe8fc7c134729858ed2035271f4cfbc61e91 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ImgUpload.java @@ -0,0 +1,150 @@ +package com.ruoyi.common.utils; + +import com.alibaba.fastjson2.JSONObject; +import com.qiniu.common.QiniuException; +import com.qiniu.common.Zone; +import com.qiniu.http.Response; +import com.qiniu.storage.BucketManager; +import com.qiniu.storage.Configuration; +import com.qiniu.storage.UploadManager; +import com.qiniu.storage.model.DefaultPutRet; +import com.qiniu.util.Auth; +import com.qiniu.util.StringMap; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.io.InputStream; + +public class ImgUpload { + + private static final Logger log = LoggerFactory.getLogger(ImgUpload.class); + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + //璁剧疆濂借处鍙风殑ACCESS_KEY鍜孲ECRET_KEY + private static String ACCESS_KEY = "XfYrjoMYsmwr_mRgGVDvDh9A-CAm3qpA2OqqHNyO"; + private static String SECRET_KEY = "tWJjsaYPBBACuyw8CfaF9h2BRUziuje_zwrz4GyE"; + //瑕佷笂浼犵殑绌洪棿 + private static String bucketname = "xiaoniu666666"; + + String BASE_URL = "https://image.xnszz.com/"; + + + //瀵嗛挜閰嶇疆 + private static Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY); + + ///////////////////////鎸囧畾涓婁紶鐨刏one鐨勪俊鎭////////////////// + //绗竴绉嶆柟寮: 鎸囧畾鍏蜂綋鐨勮涓婁紶鐨剒one + //娉細璇ュ叿浣撴寚瀹氱殑鏂瑰紡鍜屼互涓嬭嚜鍔ㄨ瘑鍒殑鏂瑰紡閫夋嫨鍏朵竴鍗冲彲 + //瑕佷笂浼犵殑绌洪棿(bucket)鐨勫瓨鍌ㄥ尯鍩熶负鍗庝笢鏃 + // Zone z = Zone.zone0(); + //瑕佷笂浼犵殑绌洪棿(bucket)鐨勫瓨鍌ㄥ尯鍩熶负鍗庡寳鏃 + // Zone z = Zone.zone1(); + //瑕佷笂浼犵殑绌洪棿(bucket)鐨勫瓨鍌ㄥ尯鍩熶负鍗庡崡鏃 + // Zone z = Zone.zone2(); + + //绗簩绉嶆柟寮: 鑷姩璇嗗埆瑕佷笂浼犵殑绌洪棿(bucket)鐨勫瓨鍌ㄥ尯鍩熸槸鍗庝笢銆佸崕鍖椼佸崕鍗椼 + Zone z = Zone.zone2(); + Configuration c = new Configuration(z); + + //鍒涘缓涓婁紶瀵硅薄 + UploadManager uploadManager = new UploadManager(c); + + //绠鍗曚笂浼狅紝浣跨敤榛樿绛栫暐锛屽彧闇瑕佽缃笂浼犵殑绌洪棿鍚嶅氨鍙互浜 + public static String getUpToken(String path) { + if (StringUtils.isBlank(path)) { + path = "IMG"; + } + return auth.uploadToken(bucketname, null, 3600, new StringMap().put("saveKey", path + "$(etag)$(ext)").put("insertOnly", 0)); + } + + public String upload(byte[] data, String fileType) throws IOException { + String filePath = null; + try { + //璋冪敤put鏂规硶涓婁紶 + Response response = uploadManager.put(data, fileType, getUpToken(fileType)); + // 涓婁紶缁撴灉 + log.info(response.bodyString()); + //瑙f瀽涓婁紶鎴愬姛鐨勭粨鏋 + DefaultPutRet putRet = JSONObject.parseObject(response.bodyString(), DefaultPutRet.class); + if (StringUtils.isNotBlank(putRet.hash)){ + // 璁块棶閾炬帴 + filePath = BASE_URL+putRet.key; + } + } catch (QiniuException e) { + Response r = e.response; + // 璇锋眰澶辫触鏃舵墦鍗扮殑寮傚父鐨勪俊鎭痋 + logger.error(r.toString()); + } finally { + return filePath; + } + } + + public String uploadStream(InputStream inputStream, String fileType) throws IOException { + String filePath = null; + try { + //璋冪敤put鏂规硶涓婁紶 + Response response = uploadManager.put(inputStream, fileType, getUpToken(fileType), null, null); + // 涓婁紶缁撴灉 + log.info(response.bodyString()); + //瑙f瀽涓婁紶鎴愬姛鐨勭粨鏋 + DefaultPutRet putRet = JSONObject.parseObject(response.bodyString(), DefaultPutRet.class); + if (StringUtils.isNotBlank(putRet.hash)){ + // 璁块棶閾炬帴 + filePath = BASE_URL+putRet.key; + } + } catch (QiniuException e) { + Response r = e.response; + // 璇锋眰澶辫触鏃舵墦鍗扮殑寮傚父鐨勪俊鎭痋 + logger.error(r.toString()); + } finally { + return filePath; + } + } + + public String uploadOffice(byte[] data, String fileType) throws IOException { + String filePath = null; + try { + //璋冪敤put鏂规硶涓婁紶 + Response res = uploadManager.put(data, null, getUpToken(fileType),null,"application/vnd.openxmlformats-officedocument.wordprocessingml.document",false); + //鎵撳嵃杩斿洖鐨勪俊鎭 + System.out.println(res.bodyString()); + filePath = BASE_URL + res.jsonToMap().get("key").toString(); + } catch (QiniuException e) { + Response r = e.response; + // 璇锋眰澶辫触鏃舵墦鍗扮殑寮傚父鐨勪俊鎭痋 + logger.error(r.toString()); + } finally { + return filePath; + } + }public String uploadOfficeDoc(byte[] data, String fileType) throws IOException { + String filePath = null; + try { + //璋冪敤put鏂规硶涓婁紶 + Response res = uploadManager.put(data, null, getUpToken(fileType),null,"application/msword",false); + //鎵撳嵃杩斿洖鐨勪俊鎭 + System.out.println(res.bodyString()); + filePath = BASE_URL + res.jsonToMap().get("key").toString(); + } catch (QiniuException e) { + Response r = e.response; + // 璇锋眰澶辫触鏃舵墦鍗扮殑寮傚父鐨勪俊鎭痋 + logger.error(r.toString()); + } finally { + return filePath; + } + } + + public Boolean delete(String filePath)throws IOException { + boolean fla = true; + c = new Configuration(z); + Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY); + BucketManager bucketManager = new BucketManager(auth, c); + try { + bucketManager.delete(bucketname, filePath); + } catch (QiniuException ex) { + //濡傛灉閬囧埌寮傚父锛岃鏄庡垹闄ゅけ璐 + logger.error(ex.response.toString()); + fla = false; + } + return fla; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/LogUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/LogUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..0de30c6b631511e12f55fb9d11fcaadd68c2f593 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/LogUtils.java @@ -0,0 +1,18 @@ +package com.ruoyi.common.utils; + +/** + * 澶勭悊骞惰褰曟棩蹇楁枃浠 + * + * @author ruoyi + */ +public class LogUtils +{ + public static String getBlock(Object msg) + { + if (msg == null) + { + msg = ""; + } + return "[" + msg.toString() + "]"; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/MessageUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/MessageUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..42243c41c844fcba0eb590233ba0213b12440a7c --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/MessageUtils.java @@ -0,0 +1,26 @@ +package com.ruoyi.common.utils; + +import com.ruoyi.common.utils.spring.SpringUtils; +import org.springframework.context.MessageSource; +import org.springframework.context.i18n.LocaleContextHolder; + +/** + * 鑾峰彇i18n璧勬簮鏂囦欢 + * + * @author ruoyi + */ +public class MessageUtils +{ + /** + * 鏍规嵁娑堟伅閿拰鍙傛暟 鑾峰彇娑堟伅 濮旀墭缁檚pring messageSource + * + * @param code 娑堟伅閿 + * @param args 鍙傛暟 + * @return 鑾峰彇鍥介檯鍖栫炕璇戝 + */ + public static String message(String code, Object... args) + { + MessageSource messageSource = SpringUtils.getBean(MessageSource.class); + return messageSource.getMessage(code, args, LocaleContextHolder.getLocale()); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..70e9b08f481f8bc21a209c9002772218f658d5ef --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/PageUtils.java @@ -0,0 +1,35 @@ +package com.ruoyi.common.utils; + +import com.github.pagehelper.PageHelper; +import com.ruoyi.common.core.page.PageDomain; +import com.ruoyi.common.core.page.TableSupport; +import com.ruoyi.common.utils.sql.SqlUtil; + +/** + * 鍒嗛〉宸ュ叿绫 + * + * @author ruoyi + */ +public class PageUtils extends PageHelper +{ + /** + * 璁剧疆璇锋眰鍒嗛〉鏁版嵁 + */ + public static void startPage() + { + PageDomain pageDomain = TableSupport.buildPageRequest(); + Integer pageNum = pageDomain.getPageNum(); + Integer pageSize = pageDomain.getPageSize(); + String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy()); + Boolean reasonable = pageDomain.getReasonable(); + PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable); + } + + /** + * 娓呯悊鍒嗛〉鐨勭嚎绋嬪彉閲 + */ + public static void clearPage() + { + PageHelper.clearPage(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/RSAUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/RSAUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..83f0e4014db9973c3e37fb1f285a2c321b31ad70 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/RSAUtils.java @@ -0,0 +1,206 @@ +package com.ruoyi.common.utils; + +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.crypto.Cipher; +import java.io.ByteArrayOutputStream; +import java.security.*; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.HashMap; +import java.util.Map; + +/** + * RSA鍔犲瘑宸ュ叿绫 + * @author Wzp + * @date 2023-08-29 + */ +public class RSAUtils { + + private static final Logger logger = LoggerFactory.getLogger(RSAUtils.class); + + public static final String CHARSET = "UTF-8"; + public static final String RSA_ALGORITHM = "RSA"; + + /** 鍏挜 */ + public static final String PUBLIC_KEY = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOw0B3YgO68r2sZSzA8/ab9rAJHYRtux0NxofUNB4GrdMa8XcdHcrEL4ybIhjhl/2h5voNUJFd2pnkIwujZDKt0CAwEAAQ=="; + + /** 绉侀挜 */ + public static final String PRIVATE_KEY = "MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEA7DQHdiA7ryvaxlLMDz9pv2sAkdhG27HQ3Gh9Q0Hgat0xrxdx0dysQvjJsiGOGX/aHm+g1QkV3ameQjC6NkMq3QIDAQABAkBh2SfiInY3Gda2Y6RPCLj46A3DXTH1XtMkC1Eg5JBgE9f3HunYuQ1m5WiAuJAj3KnSldIiRCQI2n5Yy6C9ngCNAiEA+eSRkXbk8qzrmVAmtIWzSsSmG16IP22QpCdtuTrblKMCIQDx+dARTC7qEDsKZlOEK7zQ1fxbriJoiapNO1c4YLK6fwIgSlx37N+Cdax7V14AhouatM8b1t0kkitadV6+SfZ3zR0CIFDIHG1Z6KOdjYhYRvNuApgZiCk3RiduJhuofuLEbYaTAiALgjOFYwzlAT0U7DXdWgDBDUB9CKT+YmN6E8MCzzGoCQ=="; + + + public static Map createKeys(int keySize){ + //涓篟SA绠楁硶鍒涘缓涓涓狵eyPairGenerator瀵硅薄 + KeyPairGenerator kpg; + try{ + kpg = KeyPairGenerator.getInstance(RSA_ALGORITHM); + }catch(NoSuchAlgorithmException e){ + throw new IllegalArgumentException("No such algorithm-->[" + RSA_ALGORITHM + "]"); + } + + //鍒濆鍖朘eyPairGenerator瀵硅薄,瀵嗛挜闀垮害 + kpg.initialize(keySize); + //鐢熸垚瀵嗗寵瀵 + KeyPair keyPair = kpg.generateKeyPair(); + //寰楀埌鍏挜 + Key publicKey = keyPair.getPublic(); + String publicKeyStr = Base64.encodeBase64URLSafeString(publicKey.getEncoded()); + //寰楀埌绉侀挜 + Key privateKey = keyPair.getPrivate(); + System.out.println("绉侀挜鏍煎紡:"+privateKey.getFormat()); + String privateKeyStr = Base64.encodeBase64URLSafeString(privateKey.getEncoded()); + Map keyPairMap = new HashMap(); + keyPairMap.put("publicKey", publicKeyStr); + keyPairMap.put("privateKey", privateKeyStr); + + return keyPairMap; + } + + /** + * 鑾峰彇鍏挜 + * + * @param publicKey 鍏挜瀛楃涓 + * @return 鍏挜 + * @throws NoSuchAlgorithmException 寮傚父 + * @throws InvalidKeySpecException 寮傚父 + */ + public static RSAPublicKey getPublicKey(String publicKey) throws NoSuchAlgorithmException, InvalidKeySpecException { + //閫氳繃X509缂栫爜鐨凨ey鎸囦护鑾峰緱鍏挜瀵硅薄 + KeyFactory keyFactory = KeyFactory.getInstance(RSA_ALGORITHM); + X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(Base64.decodeBase64(publicKey)); + return (RSAPublicKey) keyFactory.generatePublic(x509KeySpec); + } + + /** + * 寰楀埌绉侀挜 + * + * @param privateKey 绉侀挜瀛楃涓 + * @return 绉侀挜 + * @throws NoSuchAlgorithmException 寮傚父 + * @throws InvalidKeySpecException 寮傚父 + */ + public static RSAPrivateKey getPrivateKey(String privateKey) throws NoSuchAlgorithmException, InvalidKeySpecException { + //閫氳繃PKCS#8缂栫爜鐨凨ey鎸囦护鑾峰緱绉侀挜瀵硅薄 + KeyFactory keyFactory = KeyFactory.getInstance(RSA_ALGORITHM); + PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKey)); + return (RSAPrivateKey) keyFactory.generatePrivate(pkcs8KeySpec); + } + + /** + * 鍏挜鍔犲瘑 + * + * @param data 鍘熸暟鎹 + * @return 缁撴灉 + */ + public static String publicEncrypt(String data){ + try{ + // 鑾峰彇鍏挜 + RSAPublicKey publicKey = getPublicKey(PUBLIC_KEY); + Cipher cipher = Cipher.getInstance(RSA_ALGORITHM); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + return Base64.encodeBase64URLSafeString(rsaSplitCodec(cipher, Cipher.ENCRYPT_MODE, data.getBytes(CHARSET), publicKey.getModulus().bitLength())); + }catch(Exception e){ + throw new RuntimeException("鍔犲瘑瀛楃涓瞇" + data + "]鏃堕亣鍒板紓甯", e); + } + } + + /** + * 绉侀挜瑙e瘑 + * + * @param data 鍔犲瘑鏁版嵁 + * @return 缁撴灉 + */ + public static String privateDecrypt(String data){ + try{ + // 鑾峰彇绉侀挜 + RSAPrivateKey privateKey = getPrivateKey(PRIVATE_KEY); + Cipher cipher = Cipher.getInstance(RSA_ALGORITHM); + cipher.init(Cipher.DECRYPT_MODE, privateKey); + return new String(rsaSplitCodec(cipher, Cipher.DECRYPT_MODE, Base64.decodeBase64(data), privateKey.getModulus().bitLength()), CHARSET); + }catch(Exception e){ + throw new RuntimeException("瑙e瘑瀛楃涓瞇" + data + "]鏃堕亣鍒板紓甯", e); + } + } + + /** + * 绉侀挜鍔犲瘑 + * + * @param data 鍘熸暟鎹 + * @return 缁撴灉 + */ + public static String privateEncrypt(String data){ + try{ + // 鑾峰彇绉侀挜 + RSAPrivateKey privateKey = getPrivateKey(PRIVATE_KEY); + Cipher cipher = Cipher.getInstance(RSA_ALGORITHM); + cipher.init(Cipher.ENCRYPT_MODE, privateKey); + return Base64.encodeBase64URLSafeString(rsaSplitCodec(cipher, Cipher.ENCRYPT_MODE, data.getBytes(CHARSET), privateKey.getModulus().bitLength())); + }catch(Exception e){ + throw new RuntimeException("鍔犲瘑瀛楃涓瞇" + data + "]鏃堕亣鍒板紓甯", e); + } + } + + /** + * 鍏挜瑙e瘑 + * + * @param data 鍘熸暟鎹 + * @return 缁撴灉 + */ + public static String publicDecrypt(String data){ + try{ + // 鑾峰彇鍏挜 + RSAPublicKey publicKey = getPublicKey(PUBLIC_KEY); + Cipher cipher = Cipher.getInstance(RSA_ALGORITHM); + cipher.init(Cipher.DECRYPT_MODE, publicKey); + return new String(rsaSplitCodec(cipher, Cipher.DECRYPT_MODE, Base64.decodeBase64(data), publicKey.getModulus().bitLength()), CHARSET); + }catch(Exception e){ + throw new RuntimeException("瑙e瘑瀛楃涓瞇" + data + "]鏃堕亣鍒板紓甯", e); + } + } + + private static byte[] rsaSplitCodec(Cipher cipher, int opmode, byte[] datas, int keySize){ + int maxBlock = 0; + if(opmode == Cipher.DECRYPT_MODE){ + maxBlock = keySize / 8; + }else{ + maxBlock = keySize / 8 - 11; + } + ByteArrayOutputStream out = new ByteArrayOutputStream(); + int offSet = 0; + byte[] buff; + int i = 0; + try{ + while(datas.length > offSet){ + if(datas.length-offSet > maxBlock){ + buff = cipher.doFinal(datas, offSet, maxBlock); + }else{ + buff = cipher.doFinal(datas, offSet, datas.length-offSet); + } + out.write(buff, 0, buff.length); + i++; + offSet = i * maxBlock; + } + }catch(Exception e){ + e.printStackTrace(); + throw new RuntimeException("鍔犺В瀵嗛榾鍊间负["+maxBlock+"]鐨勬暟鎹椂鍙戠敓寮傚父", e); + } + byte[] resultDatas = out.toByteArray(); + IOUtils.closeQuietly(out); + return resultDatas; + } + + public static byte[] decode(String base64) throws Exception { + return Base64.decodeBase64(base64); + } + + public static String encode(byte[] bytes) throws Exception { + return new String(Base64.encodeBase64(bytes)); + } + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..c7ecf00cec3350ec7704dac3a74e20c928291171 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/SecurityUtils.java @@ -0,0 +1,209 @@ +package com.ruoyi.common.utils; + +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.constant.HttpStatus; +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.exception.ServiceException; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.util.PatternMatchUtils; + +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 瀹夊叏鏈嶅姟宸ュ叿绫 + * + * @author ruoyi + */ +public class SecurityUtils +{ + + /** + * 鐢ㄦ埛ID + **/ + public static Long getUserId() + { + try + { + return getLoginUser().getUserId(); + } + catch (Exception e) + { + throw new ServiceException("鑾峰彇鐢ㄦ埛ID寮傚父", HttpStatus.UNAUTHORIZED); + } + } + + /** + * 鑾峰彇閮ㄩ棬ID + **/ + public static Long getDeptId() + { + try + { + return getLoginUser().getDeptId(); + } + catch (Exception e) + { + throw new ServiceException("鑾峰彇閮ㄩ棬ID寮傚父", HttpStatus.UNAUTHORIZED); + } + } + + /** + * 鑾峰彇鏈烘瀯ID + **/ + public static Long getEvaluateAgencyId() + { + try + { + return getLoginUser().getEvaluateAgencyId(); + } + catch (Exception e) + { + throw new ServiceException("鑾峰彇鏈烘瀯ID寮傚父", HttpStatus.UNAUTHORIZED); + } + } + + /** + * 鑾峰彇鏈烘瀯ID + **/ + public static Long getStudyCenterId() + { + try + { + return getLoginUser().getStudyCenterId(); + } + catch (Exception e) + { + throw new ServiceException("鑾峰彇瀛︿範涓績ID寮傚父", HttpStatus.UNAUTHORIZED); + } + } + + /** + * 鑾峰彇鐢ㄦ埛璐︽埛 + **/ + public static String getUsername() + { + try + { + return getLoginUser().getUsername(); + } + catch (Exception e) + { + throw new ServiceException("鑾峰彇鐢ㄦ埛璐︽埛寮傚父", HttpStatus.UNAUTHORIZED); + } + } + + /** + * 鑾峰彇鐢ㄦ埛 + **/ + public static LoginUser getLoginUser() + { + try + { + return (LoginUser) getAuthentication().getPrincipal(); + } + catch (Exception e) + { + throw new ServiceException("鑾峰彇鐢ㄦ埛淇℃伅寮傚父", HttpStatus.UNAUTHORIZED); + } + } + + /** + * 鑾峰彇Authentication + */ + public static Authentication getAuthentication() + { + return SecurityContextHolder.getContext().getAuthentication(); + } + + /** + * 鐢熸垚BCryptPasswordEncoder瀵嗙爜 + * + * @param password 瀵嗙爜 + * @return 鍔犲瘑瀛楃涓 + */ + public static String encryptPassword(String password) + { + BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); + return passwordEncoder.encode(password); + } + + /** + * 鍒ゆ柇瀵嗙爜鏄惁鐩稿悓 + * + * @param rawPassword 鐪熷疄瀵嗙爜 + * @param encodedPassword 鍔犲瘑鍚庡瓧绗 + * @return 缁撴灉 + */ + public static boolean matchesPassword(String rawPassword, String encodedPassword) + { + BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); + return passwordEncoder.matches(rawPassword, encodedPassword); + } + + /** + * 鏄惁涓虹鐞嗗憳 + * + * @param userId 鐢ㄦ埛ID + * @return 缁撴灉 + */ + public static boolean isAdmin(Long userId) + { + return userId != null && 1L == userId; + } + + /** + * 楠岃瘉鐢ㄦ埛鏄惁鍏峰鏌愭潈闄 + * + * @param permission 鏉冮檺瀛楃涓 + * @return 鐢ㄦ埛鏄惁鍏峰鏌愭潈闄 + */ + public static boolean hasPermi(String permission) + { + return hasPermi(getLoginUser().getPermissions(), permission); + } + + /** + * 鍒ゆ柇鏄惁鍖呭惈鏉冮檺 + * + * @param authorities 鏉冮檺鍒楄〃 + * @param permission 鏉冮檺瀛楃涓 + * @return 鐢ㄦ埛鏄惁鍏峰鏌愭潈闄 + */ + public static boolean hasPermi(Collection authorities, String permission) + { + return authorities.stream().filter(StringUtils::hasText) + .anyMatch(x -> Constants.ALL_PERMISSION.equals(x) || PatternMatchUtils.simpleMatch(x, permission)); + } + + /** + * 楠岃瘉鐢ㄦ埛鏄惁鎷ユ湁鏌愪釜瑙掕壊 + * + * @param role 瑙掕壊鏍囪瘑 + * @return 鐢ㄦ埛鏄惁鍏峰鏌愯鑹 + */ + public static boolean hasRole(String role) + { + List roleList = getLoginUser().getUser().getRoles(); + Collection roles = roleList.stream().map(SysRole::getRoleKey).collect(Collectors.toSet()); + return hasRole(roles, role); + } + + /** + * 鍒ゆ柇鏄惁鍖呭惈瑙掕壊 + * + * @param roles 瑙掕壊鍒楄〃 + * @param role 瑙掕壊 + * @return 鐢ㄦ埛鏄惁鍏峰鏌愯鑹叉潈闄 + */ + public static boolean hasRole(Collection roles, String role) + { + return roles.stream().filter(StringUtils::hasText) + .anyMatch(x -> Constants.SUPER_ADMIN.equals(x) || PatternMatchUtils.simpleMatch(x, role)); + } + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ServletUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ServletUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..ab92ef70b035e1dd38eee098d329b2d1405ad619 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ServletUtils.java @@ -0,0 +1,219 @@ +package com.ruoyi.common.utils; + +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.text.Convert; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.ServletRequest; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +/** + * 瀹㈡埛绔伐鍏风被 + * + * @author ruoyi + */ +public class ServletUtils +{ + /** + * 鑾峰彇String鍙傛暟 + */ + public static String getParameter(String name) + { + return getRequest().getParameter(name); + } + + /** + * 鑾峰彇String鍙傛暟 + */ + public static String getParameter(String name, String defaultValue) + { + return Convert.toStr(getRequest().getParameter(name), defaultValue); + } + + /** + * 鑾峰彇Integer鍙傛暟 + */ + public static Integer getParameterToInt(String name) + { + return Convert.toInt(getRequest().getParameter(name)); + } + + /** + * 鑾峰彇Integer鍙傛暟 + */ + public static Integer getParameterToInt(String name, Integer defaultValue) + { + return Convert.toInt(getRequest().getParameter(name), defaultValue); + } + + /** + * 鑾峰彇Boolean鍙傛暟 + */ + public static Boolean getParameterToBool(String name) + { + return Convert.toBool(getRequest().getParameter(name)); + } + + /** + * 鑾峰彇Boolean鍙傛暟 + */ + public static Boolean getParameterToBool(String name, Boolean defaultValue) + { + return Convert.toBool(getRequest().getParameter(name), defaultValue); + } + + /** + * 鑾峰緱鎵鏈夎姹傚弬鏁 + * + * @param request 璇锋眰瀵硅薄{@link ServletRequest} + * @return Map + */ + public static Map getParams(ServletRequest request) + { + final Map map = request.getParameterMap(); + return Collections.unmodifiableMap(map); + } + + /** + * 鑾峰緱鎵鏈夎姹傚弬鏁 + * + * @param request 璇锋眰瀵硅薄{@link ServletRequest} + * @return Map + */ + public static Map getParamMap(ServletRequest request) + { + Map params = new HashMap<>(); + for (Map.Entry entry : getParams(request).entrySet()) + { + params.put(entry.getKey(), StringUtils.join(entry.getValue(), ",")); + } + return params; + } + + /** + * 鑾峰彇request + */ + public static HttpServletRequest getRequest() + { + return getRequestAttributes().getRequest(); + } + + /** + * 鑾峰彇response + */ + public static HttpServletResponse getResponse() + { + return getRequestAttributes().getResponse(); + } + + /** + * 鑾峰彇session + */ + public static HttpSession getSession() + { + return getRequest().getSession(); + } + + public static ServletRequestAttributes getRequestAttributes() + { + RequestAttributes attributes = RequestContextHolder.getRequestAttributes(); + return (ServletRequestAttributes) attributes; + } + + /** + * 灏嗗瓧绗︿覆娓叉煋鍒板鎴风 + * + * @param response 娓叉煋瀵硅薄 + * @param string 寰呮覆鏌撶殑瀛楃涓 + */ + public static void renderString(HttpServletResponse response, String string) + { + try + { + response.setStatus(200); + response.setContentType("application/json"); + response.setCharacterEncoding("utf-8"); + response.getWriter().print(string); + } + catch (IOException e) + { + e.printStackTrace(); + } + } + + /** + * 鏄惁鏄疉jax寮傛璇锋眰 + * + * @param request + */ + public static boolean isAjaxRequest(HttpServletRequest request) + { + String accept = request.getHeader("accept"); + if (accept != null && accept.contains("application/json")) + { + return true; + } + + String xRequestedWith = request.getHeader("X-Requested-With"); + if (xRequestedWith != null && xRequestedWith.contains("XMLHttpRequest")) + { + return true; + } + + String uri = request.getRequestURI(); + if (StringUtils.inStringIgnoreCase(uri, ".json", ".xml")) + { + return true; + } + + String ajax = request.getParameter("__ajax"); + return StringUtils.inStringIgnoreCase(ajax, "json", "xml"); + } + + /** + * 鍐呭缂栫爜 + * + * @param str 鍐呭 + * @return 缂栫爜鍚庣殑鍐呭 + */ + public static String urlEncode(String str) + { + try + { + return URLEncoder.encode(str, Constants.UTF8); + } + catch (UnsupportedEncodingException e) + { + return StringUtils.EMPTY; + } + } + + /** + * 鍐呭瑙g爜 + * + * @param str 鍐呭 + * @return 瑙g爜鍚庣殑鍐呭 + */ + public static String urlDecode(String str) + { + try + { + return URLDecoder.decode(str, Constants.UTF8); + } + catch (UnsupportedEncodingException e) + { + return StringUtils.EMPTY; + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..5dc1abf3fd00d8ebbf105542578f2b7af226ae8b --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/StringUtils.java @@ -0,0 +1,725 @@ +package com.ruoyi.common.utils; + +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.text.StrFormatter; +import org.springframework.util.AntPathMatcher; + +import javax.servlet.http.HttpServletRequest; +import java.util.*; +import java.util.regex.Pattern; + +/** + * 瀛楃涓插伐鍏风被 + * + * @author ruoyi + */ +public class StringUtils extends org.apache.commons.lang3.StringUtils +{ + /** 绌哄瓧绗︿覆 */ + private static final String NULLSTR = ""; + + /** 涓嬪垝绾 */ + private static final char SEPARATOR = '_'; + + /** 鏄熷彿 */ + private static final char ASTERISK = '*'; + + /** + * 鑾峰彇鍙傛暟涓嶄负绌哄 + * + * @param value defaultValue 瑕佸垽鏂殑value + * @return value 杩斿洖鍊 + */ + public static T nvl(T value, T defaultValue) + { + return value != null ? value : defaultValue; + } + + /** + * * 鍒ゆ柇涓涓狢ollection鏄惁涓虹┖锛 鍖呭惈List锛孲et锛孮ueue + * + * @param coll 瑕佸垽鏂殑Collection + * @return true锛氫负绌 false锛氶潪绌 + */ + public static boolean isEmpty(Collection coll) + { + return isNull(coll) || coll.isEmpty(); + } + + /** + * * 鍒ゆ柇涓涓狢ollection鏄惁闈炵┖锛屽寘鍚獿ist锛孲et锛孮ueue + * + * @param coll 瑕佸垽鏂殑Collection + * @return true锛氶潪绌 false锛氱┖ + */ + public static boolean isNotEmpty(Collection coll) + { + return !isEmpty(coll); + } + + /** + * * 鍒ゆ柇涓涓璞℃暟缁勬槸鍚︿负绌 + * + * @param objects 瑕佸垽鏂殑瀵硅薄鏁扮粍 + ** @return true锛氫负绌 false锛氶潪绌 + */ + public static boolean isEmpty(Object[] objects) + { + return isNull(objects) || (objects.length == 0); + } + + /** + * * 鍒ゆ柇涓涓璞℃暟缁勬槸鍚﹂潪绌 + * + * @param objects 瑕佸垽鏂殑瀵硅薄鏁扮粍 + * @return true锛氶潪绌 false锛氱┖ + */ + public static boolean isNotEmpty(Object[] objects) + { + return !isEmpty(objects); + } + + /** + * * 鍒ゆ柇涓涓狹ap鏄惁涓虹┖ + * + * @param map 瑕佸垽鏂殑Map + * @return true锛氫负绌 false锛氶潪绌 + */ + public static boolean isEmpty(Map map) + { + return isNull(map) || map.isEmpty(); + } + + /** + * * 鍒ゆ柇涓涓狹ap鏄惁涓虹┖ + * + * @param map 瑕佸垽鏂殑Map + * @return true锛氶潪绌 false锛氱┖ + */ + public static boolean isNotEmpty(Map map) + { + return !isEmpty(map); + } + + /** + * * 鍒ゆ柇涓涓瓧绗︿覆鏄惁涓虹┖涓 + * + * @param str String + * @return true锛氫负绌 false锛氶潪绌 + */ + public static boolean isEmpty(String str) + { + return isNull(str) || NULLSTR.equals(str.trim()); + } + + /** + * * 鍒ゆ柇涓涓瓧绗︿覆鏄惁涓洪潪绌轰覆 + * + * @param str String + * @return true锛氶潪绌轰覆 false锛氱┖涓 + */ + public static boolean isNotEmpty(String str) + { + return !isEmpty(str); + } + + /** + * * 鍒ゆ柇涓涓璞℃槸鍚︿负绌 + * + * @param object Object + * @return true锛氫负绌 false锛氶潪绌 + */ + public static boolean isNull(Object object) + { + return object == null; + } + + /** + * * 鍒ゆ柇涓涓璞℃槸鍚﹂潪绌 + * + * @param object Object + * @return true锛氶潪绌 false锛氱┖ + */ + public static boolean isNotNull(Object object) + { + return !isNull(object); + } + + /** + * * 鍒ゆ柇涓涓璞℃槸鍚︽槸鏁扮粍绫诲瀷锛圝ava鍩烘湰鍨嬪埆鐨勬暟缁勶級 + * + * @param object 瀵硅薄 + * @return true锛氭槸鏁扮粍 false锛氫笉鏄暟缁 + */ + public static boolean isArray(Object object) + { + return isNotNull(object) && object.getClass().isArray(); + } + + /** + * 鍘荤┖鏍 + */ + public static String trim(String str) + { + return (str == null ? "" : str.trim()); + } + + /** + * 鏇挎崲鎸囧畾瀛楃涓茬殑鎸囧畾鍖洪棿鍐呭瓧绗︿负"*" + * + * @param str 瀛楃涓 + * @param startInclude 寮濮嬩綅缃紙鍖呭惈锛 + * @param endExclude 缁撴潫浣嶇疆锛堜笉鍖呭惈锛 + * @return 鏇挎崲鍚庣殑瀛楃涓 + */ + public static String hide(CharSequence str, int startInclude, int endExclude) + { + if (isEmpty(str)) + { + return NULLSTR; + } + final int strLength = str.length(); + if (startInclude > strLength) + { + return NULLSTR; + } + if (endExclude > strLength) + { + endExclude = strLength; + } + if (startInclude > endExclude) + { + // 濡傛灉璧峰浣嶇疆澶т簬缁撴潫浣嶇疆锛屼笉鏇挎崲 + return NULLSTR; + } + final char[] chars = new char[strLength]; + for (int i = 0; i < strLength; i++) + { + if (i >= startInclude && i < endExclude) + { + chars[i] = ASTERISK; + } + else + { + chars[i] = str.charAt(i); + } + } + return new String(chars); + } + + /** + * 鎴彇瀛楃涓 + * + * @param str 瀛楃涓 + * @param start 寮濮 + * @return 缁撴灉 + */ + public static String substring(final String str, int start) + { + if (str == null) + { + return NULLSTR; + } + + if (start < 0) + { + start = str.length() + start; + } + + if (start < 0) + { + start = 0; + } + if (start > str.length()) + { + return NULLSTR; + } + + return str.substring(start); + } + + /** + * 鎴彇瀛楃涓 + * + * @param str 瀛楃涓 + * @param start 寮濮 + * @param end 缁撴潫 + * @return 缁撴灉 + */ + public static String substring(final String str, int start, int end) + { + if (str == null) + { + return NULLSTR; + } + + if (end < 0) + { + end = str.length() + end; + } + if (start < 0) + { + start = str.length() + start; + } + + if (end > str.length()) + { + end = str.length(); + } + + if (start > end) + { + return NULLSTR; + } + + if (start < 0) + { + start = 0; + } + if (end < 0) + { + end = 0; + } + + return str.substring(start, end); + } + + /** + * 鍒ゆ柇鏄惁涓虹┖锛屽苟涓斾笉鏄┖鐧藉瓧绗 + * + * @param str 瑕佸垽鏂殑value + * @return 缁撴灉 + */ + public static boolean hasText(String str) + { + return (str != null && !str.isEmpty() && containsText(str)); + } + + private static boolean containsText(CharSequence str) + { + int strLen = str.length(); + for (int i = 0; i < strLen; i++) + { + if (!Character.isWhitespace(str.charAt(i))) + { + return true; + } + } + return false; + } + + /** + * 鏍煎紡鍖栨枃鏈, {} 琛ㄧず鍗犱綅绗
+ * 姝ゆ柟娉曞彧鏄畝鍗曞皢鍗犱綅绗 {} 鎸夌収椤哄簭鏇挎崲涓哄弬鏁
+ * 濡傛灉鎯宠緭鍑 {} 浣跨敤 \\杞箟 { 鍗冲彲锛屽鏋滄兂杈撳嚭 {} 涔嬪墠鐨 \ 浣跨敤鍙岃浆涔夌 \\\\ 鍗冲彲
+ * 渚嬶細
+ * 閫氬父浣跨敤锛歠ormat("this is {} for {}", "a", "b") -> this is a for b
+ * 杞箟{}锛 format("this is \\{} for {}", "a", "b") -> this is \{} for a
+ * 杞箟\锛 format("this is \\\\{} for {}", "a", "b") -> this is \a for b
+ * + * @param template 鏂囨湰妯℃澘锛岃鏇挎崲鐨勯儴鍒嗙敤 {} 琛ㄧず + * @param params 鍙傛暟鍊 + * @return 鏍煎紡鍖栧悗鐨勬枃鏈 + */ + public static String format(String template, Object... params) + { + if (isEmpty(params) || isEmpty(template)) + { + return template; + } + return StrFormatter.format(template, params); + } + + /** + * 鏄惁涓篽ttp(s)://寮澶 + * + * @param link 閾炬帴 + * @return 缁撴灉 + */ + public static boolean ishttp(String link) + { + return StringUtils.startsWithAny(link, Constants.HTTP, Constants.HTTPS); + } + + /** + * 瀛楃涓茶浆set + * + * @param str 瀛楃涓 + * @param sep 鍒嗛殧绗 + * @return set闆嗗悎 + */ + public static final Set str2Set(String str, String sep) + { + return new HashSet(str2List(str, sep, true, false)); + } + + /** + * 瀛楃涓茶浆list + * + * @param str 瀛楃涓 + * @param sep 鍒嗛殧绗 + * @param filterBlank 杩囨护绾┖鐧 + * @param trim 鍘绘帀棣栧熬绌虹櫧 + * @return list闆嗗悎 + */ + public static final List str2List(String str, String sep, boolean filterBlank, boolean trim) + { + List list = new ArrayList(); + if (StringUtils.isEmpty(str)) + { + return list; + } + + // 杩囨护绌虹櫧瀛楃涓 + if (filterBlank && StringUtils.isBlank(str)) + { + return list; + } + String[] split = str.split(sep); + for (String string : split) + { + if (filterBlank && StringUtils.isBlank(string)) + { + continue; + } + if (trim) + { + string = string.trim(); + } + list.add(string); + } + + return list; + } + + /** + * 鍒ゆ柇缁欏畾鐨刢ollection鍒楄〃涓槸鍚﹀寘鍚暟缁刟rray 鍒ゆ柇缁欏畾鐨勬暟缁刟rray涓槸鍚﹀寘鍚粰瀹氱殑鍏冪礌value + * + * @param collection 缁欏畾鐨勯泦鍚 + * @param array 缁欏畾鐨勬暟缁 + * @return boolean 缁撴灉 + */ + public static boolean containsAny(Collection collection, String... array) + { + if (isEmpty(collection) || isEmpty(array)) + { + return false; + } + else + { + for (String str : array) + { + if (collection.contains(str)) + { + return true; + } + } + return false; + } + } + + /** + * 鏌ユ壘鎸囧畾瀛楃涓叉槸鍚﹀寘鍚寚瀹氬瓧绗︿覆鍒楄〃涓殑浠绘剰涓涓瓧绗︿覆鍚屾椂涓插拷鐣ュぇ灏忓啓 + * + * @param cs 鎸囧畾瀛楃涓 + * @param searchCharSequences 闇瑕佹鏌ョ殑瀛楃涓叉暟缁 + * @return 鏄惁鍖呭惈浠绘剰涓涓瓧绗︿覆 + */ + public static boolean containsAnyIgnoreCase(CharSequence cs, CharSequence... searchCharSequences) + { + if (isEmpty(cs) || isEmpty(searchCharSequences)) + { + return false; + } + for (CharSequence testStr : searchCharSequences) + { + if (containsIgnoreCase(cs, testStr)) + { + return true; + } + } + return false; + } + + /** + * 椹煎嘲杞笅鍒掔嚎鍛藉悕 + */ + public static String toUnderScoreCase(String str) + { + if (str == null) + { + return null; + } + StringBuilder sb = new StringBuilder(); + // 鍓嶇疆瀛楃鏄惁澶у啓 + boolean preCharIsUpperCase = true; + // 褰撳墠瀛楃鏄惁澶у啓 + boolean curreCharIsUpperCase = true; + // 涓嬩竴瀛楃鏄惁澶у啓 + boolean nexteCharIsUpperCase = true; + for (int i = 0; i < str.length(); i++) + { + char c = str.charAt(i); + if (i > 0) + { + preCharIsUpperCase = Character.isUpperCase(str.charAt(i - 1)); + } + else + { + preCharIsUpperCase = false; + } + + curreCharIsUpperCase = Character.isUpperCase(c); + + if (i < (str.length() - 1)) + { + nexteCharIsUpperCase = Character.isUpperCase(str.charAt(i + 1)); + } + + if (preCharIsUpperCase && curreCharIsUpperCase && !nexteCharIsUpperCase) + { + sb.append(SEPARATOR); + } + else if ((i != 0 && !preCharIsUpperCase) && curreCharIsUpperCase) + { + sb.append(SEPARATOR); + } + sb.append(Character.toLowerCase(c)); + } + + return sb.toString(); + } + + /** + * 鏄惁鍖呭惈瀛楃涓 + * + * @param str 楠岃瘉瀛楃涓 + * @param strs 瀛楃涓茬粍 + * @return 鍖呭惈杩斿洖true + */ + public static boolean inStringIgnoreCase(String str, String... strs) + { + if (str != null && strs != null) + { + for (String s : strs) + { + if (str.equalsIgnoreCase(trim(s))) + { + return true; + } + } + } + return false; + } + + /** + * 灏嗕笅鍒掔嚎澶у啓鏂瑰紡鍛藉悕鐨勫瓧绗︿覆杞崲涓洪┘宄板紡銆傚鏋滆浆鎹㈠墠鐨勪笅鍒掔嚎澶у啓鏂瑰紡鍛藉悕鐨勫瓧绗︿覆涓虹┖锛屽垯杩斿洖绌哄瓧绗︿覆銆 渚嬪锛欻ELLO_WORLD->HelloWorld + * + * @param name 杞崲鍓嶇殑涓嬪垝绾垮ぇ鍐欐柟寮忓懡鍚嶇殑瀛楃涓 + * @return 杞崲鍚庣殑椹煎嘲寮忓懡鍚嶇殑瀛楃涓 + */ + public static String convertToCamelCase(String name) + { + StringBuilder result = new StringBuilder(); + // 蹇熸鏌 + if (name == null || name.isEmpty()) + { + // 娌″繀瑕佽浆鎹 + return ""; + } + else if (!name.contains("_")) + { + // 涓嶅惈涓嬪垝绾匡紝浠呭皢棣栧瓧姣嶅ぇ鍐 + return name.substring(0, 1).toUpperCase() + name.substring(1); + } + // 鐢ㄤ笅鍒掔嚎灏嗗師濮嬪瓧绗︿覆鍒嗗壊 + String[] camels = name.split("_"); + for (String camel : camels) + { + // 璺宠繃鍘熷瀛楃涓蹭腑寮澶淬佺粨灏剧殑涓嬫崲绾挎垨鍙岄噸涓嬪垝绾 + if (camel.isEmpty()) + { + continue; + } + // 棣栧瓧姣嶅ぇ鍐 + result.append(camel.substring(0, 1).toUpperCase()); + result.append(camel.substring(1).toLowerCase()); + } + return result.toString(); + } + + /** + * 椹煎嘲寮忓懡鍚嶆硶 + * 渚嬪锛歶ser_name->userName + */ + public static String toCamelCase(String s) + { + if (s == null) + { + return null; + } + if (s.indexOf(SEPARATOR) == -1) + { + return s; + } + s = s.toLowerCase(); + StringBuilder sb = new StringBuilder(s.length()); + boolean upperCase = false; + for (int i = 0; i < s.length(); i++) + { + char c = s.charAt(i); + + if (c == SEPARATOR) + { + upperCase = true; + } + else if (upperCase) + { + sb.append(Character.toUpperCase(c)); + upperCase = false; + } + else + { + sb.append(c); + } + } + return sb.toString(); + } + + /** + * 鏌ユ壘鎸囧畾瀛楃涓叉槸鍚﹀尮閰嶆寚瀹氬瓧绗︿覆鍒楄〃涓殑浠绘剰涓涓瓧绗︿覆 + * + * @param str 鎸囧畾瀛楃涓 + * @param strs 闇瑕佹鏌ョ殑瀛楃涓叉暟缁 + * @return 鏄惁鍖归厤 + */ + public static boolean matches(String str, List strs) + { + if (isEmpty(str) || isEmpty(strs)) + { + return false; + } + for (String pattern : strs) + { + if (isMatch(pattern, str)) + { + return true; + } + } + return false; + } + + /** + * 鍒ゆ柇url鏄惁涓庤鍒欓厤缃: + * ? 琛ㄧず鍗曚釜瀛楃; + * * 琛ㄧず涓灞傝矾寰勫唴鐨勪换鎰忓瓧绗︿覆锛屼笉鍙法灞傜骇; + * ** 琛ㄧず浠绘剰灞傝矾寰; + * + * @param pattern 鍖归厤瑙勫垯 + * @param url 闇瑕佸尮閰嶇殑url + * @return + */ + public static boolean isMatch(String pattern, String url) + { + AntPathMatcher matcher = new AntPathMatcher(); + return matcher.match(pattern, url); + } + + @SuppressWarnings("unchecked") + public static T cast(Object obj) + { + return (T) obj; + } + + /** + * 鏁板瓧宸﹁竟琛ラ綈0锛屼娇涔嬭揪鍒版寚瀹氶暱搴︺傛敞鎰忥紝濡傛灉鏁板瓧杞崲涓哄瓧绗︿覆鍚庯紝闀垮害澶т簬size锛屽垯鍙繚鐣 鏈鍚巗ize涓瓧绗︺ + * + * @param num 鏁板瓧瀵硅薄 + * @param size 瀛楃涓叉寚瀹氶暱搴 + * @return 杩斿洖鏁板瓧鐨勫瓧绗︿覆鏍煎紡锛岃瀛楃涓蹭负鎸囧畾闀垮害銆 + */ + public static final String padl(final Number num, final int size) + { + return padl(num.toString(), size, '0'); + } + + /** + * 瀛楃涓插乏琛ラ綈銆傚鏋滃師濮嬪瓧绗︿覆s闀垮害澶т簬size锛屽垯鍙繚鐣欐渶鍚巗ize涓瓧绗︺ + * + * @param s 鍘熷瀛楃涓 + * @param size 瀛楃涓叉寚瀹氶暱搴 + * @param c 鐢ㄤ簬琛ラ綈鐨勫瓧绗 + * @return 杩斿洖鎸囧畾闀垮害鐨勫瓧绗︿覆锛岀敱鍘熷瓧绗︿覆宸﹁ˉ榻愭垨鎴彇寰楀埌銆 + */ + public static final String padl(final String s, final int size, final char c) + { + final StringBuilder sb = new StringBuilder(size); + if (s != null) + { + final int len = s.length(); + if (s.length() <= size) + { + for (int i = size - len; i > 0; i--) + { + sb.append(c); + } + sb.append(s); + } + else + { + return s.substring(len - size, len); + } + } + else + { + for (int i = size; i > 0; i--) + { + sb.append(c); + } + } + return sb.toString(); + } + + /** + * 鑾峰緱鐢ㄦ埛杩滅▼鍦板潃 + */ + public static String getRemoteAddr(HttpServletRequest request) { +// HttpServletRequest request = Mvcs.getReq(); + String remoteAddr = request.getHeader("X-Real-IP"); + if (StringUtils.isNotBlank(remoteAddr)) { + remoteAddr = request.getHeader("X-Forwarded-For"); + } else if (StringUtils.isNotBlank(remoteAddr)) { + remoteAddr = request.getHeader("Proxy-Client-IP"); + } else if (StringUtils.isNotBlank(remoteAddr)) { + remoteAddr = request.getHeader("WL-Proxy-Client-IP"); + } + String ip = remoteAddr != null ? remoteAddr : request.getRemoteAddr(); + if (isIPv4Address(ip) || isIPv6Address(ip)) { + return ip; + } + return ""; + } + + public static boolean isIPv4Address(final String input) { + return IPV4_PATTERN.matcher(input).matches(); + } + public static boolean isIPv6Address(final String input) { + return isIPv6StdAddress(input) || isIPv6HexCompressedAddress(input); + } + private static final Pattern IPV4_PATTERN = + Pattern.compile( + "^(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)(\\.(25[0-5]|2[0-4]\\d|[0-1]?\\d?\\d)){3}$"); + public static boolean isIPv6StdAddress(final String input) { + return IPV6_STD_PATTERN.matcher(input).matches(); + } + public static boolean isIPv6HexCompressedAddress(final String input) { + return IPV6_HEX_COMPRESSED_PATTERN.matcher(input).matches(); + } + private static final Pattern IPV6_STD_PATTERN = + Pattern.compile( + "^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$"); + + private static final Pattern IPV6_HEX_COMPRESSED_PATTERN = + Pattern.compile( + "^((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)::((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)$"); +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/TencentSmsCodeUtils2.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/TencentSmsCodeUtils2.java new file mode 100644 index 0000000000000000000000000000000000000000..1fade2abbf998dc814bd7a9f087481c6ce8a1e9d --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/TencentSmsCodeUtils2.java @@ -0,0 +1,130 @@ +package com.ruoyi.common.utils; + +import com.tencentcloudapi.common.AbstractModel; +import com.tencentcloudapi.common.Credential; +import com.tencentcloudapi.common.exception.TencentCloudSDKException; +import com.tencentcloudapi.common.profile.ClientProfile; +import com.tencentcloudapi.common.profile.HttpProfile; +import com.tencentcloudapi.sms.v20210111.SmsClient; +import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest; +import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse; + +import java.util.Random; + +public class TencentSmsCodeUtils2 { + private static final String secretId = "AKIDcEgyrdCZkjU1KUTElDYhfS2a3LdrunYM"; + private static final String secretKey = "kHfsujKi5GEyVqytb7RYR7ZnoocDbmnd"; + public static void main(String [] args) { + try{ + // 瀹炰緥鍖栦竴涓璇佸璞★紝鍏ュ弬闇瑕佷紶鍏ヨ吘璁簯璐︽埛 SecretId 鍜 SecretKey锛屾澶勮繕闇娉ㄦ剰瀵嗛挜瀵圭殑淇濆瘑 + // 浠g爜娉勯湶鍙兘浼氬鑷 SecretId 鍜 SecretKey 娉勯湶锛屽苟濞佽儊璐﹀彿涓嬫墍鏈夎祫婧愮殑瀹夊叏鎬 + // 浠ヤ笅浠g爜绀轰緥浠呬緵鍙傝冿紝寤鸿閲囩敤鏇村畨鍏ㄧ殑鏂瑰紡鏉ヤ娇鐢ㄥ瘑閽 + // 璇峰弬瑙侊細https://cloud.tencent.com/document/product/1278/85305 + // 瀵嗛挜鍙墠寰瀹樼綉鎺у埗鍙 https://console.cloud.tencent.com/cam/capi 杩涜鑾峰彇 + Credential cred = new Credential(secretId, secretKey); + // 瀹炰緥鍖栦竴涓猦ttp閫夐」锛屽彲閫夌殑锛屾病鏈夌壒娈婇渶姹傚彲浠ヨ烦杩 + HttpProfile httpProfile = new HttpProfile(); httpProfile.setEndpoint("sms.tencentcloudapi.com"); + // 瀹炰緥鍖栦竴涓猚lient閫夐」锛屽彲閫夌殑锛屾病鏈夌壒娈婇渶姹傚彲浠ヨ烦杩 + ClientProfile clientProfile = new ClientProfile(); + clientProfile.setHttpProfile(httpProfile); + // 瀹炰緥鍖栬璇锋眰浜у搧鐨刢lient瀵硅薄,clientProfile鏄彲閫夌殑 + SmsClient client = new SmsClient(cred, "ap-beijing", clientProfile); + // 瀹炰緥鍖栦竴涓姹傚璞,姣忎釜鎺ュ彛閮戒細瀵瑰簲涓涓猺equest瀵硅薄 + SendSmsRequest req = new SendSmsRequest(); + String[] phoneNumberSet1 = {"15617675150"};//鎵嬫満鍙 + req.setPhoneNumberSet(phoneNumberSet1); + req.setSmsSdkAppId("1400630743"); + req.setTemplateId("2411208"); + req.setSignName("灏忕墰绉戞妧"); + String[]templateParamSet1={"123456","5"};//楠岃瘉鐮侊紝鍒嗛挓 + req.setTemplateParamSet(templateParamSet1); + // 杩斿洖鐨剅esp鏄竴涓猄endSmsResponse鐨勫疄渚嬶紝涓庤姹傚璞″搴 + SendSmsResponse resp = client.SendSms(req); + // 杈撳嚭json鏍煎紡鐨勫瓧绗︿覆鍥炲寘 + System.out.println(AbstractModel.toJsonString(resp)); + } catch (TencentCloudSDKException e) { + System.out.println(e.toString()); + } + } + + //楠岃瘉鐮5浣嶆暟闅忔満鐢熸垚鍣 + public static String getRandomCode() { + StringBuilder result = new StringBuilder(); + Random random = new Random(); + for (int i = 0; i < 5; i++) { + int digit = random.nextInt(10); + result.append(digit); + } + return result.toString(); + } + + public static String sendSmsCode(String phoneNumber, String code, String minutes) { + try{ + // 瀹炰緥鍖栦竴涓璇佸璞★紝鍏ュ弬闇瑕佷紶鍏ヨ吘璁簯璐︽埛 SecretId 鍜 SecretKey锛屾澶勮繕闇娉ㄦ剰瀵嗛挜瀵圭殑淇濆瘑 + // 浠g爜娉勯湶鍙兘浼氬鑷 SecretId 鍜 SecretKey 娉勯湶锛屽苟濞佽儊璐﹀彿涓嬫墍鏈夎祫婧愮殑瀹夊叏鎬 + // 浠ヤ笅浠g爜绀轰緥浠呬緵鍙傝冿紝寤鸿閲囩敤鏇村畨鍏ㄧ殑鏂瑰紡鏉ヤ娇鐢ㄥ瘑閽 + // 璇峰弬瑙侊細https://cloud.tencent.com/document/product/1278/85305 + // 瀵嗛挜鍙墠寰瀹樼綉鎺у埗鍙 https://console.cloud.tencent.com/cam/capi 杩涜鑾峰彇 + Credential cred = new Credential(secretId, secretKey); + // 瀹炰緥鍖栦竴涓猦ttp閫夐」锛屽彲閫夌殑锛屾病鏈夌壒娈婇渶姹傚彲浠ヨ烦杩 + HttpProfile httpProfile = new HttpProfile(); httpProfile.setEndpoint("sms.tencentcloudapi.com"); + // 瀹炰緥鍖栦竴涓猚lient閫夐」锛屽彲閫夌殑锛屾病鏈夌壒娈婇渶姹傚彲浠ヨ烦杩 + ClientProfile clientProfile = new ClientProfile(); + clientProfile.setHttpProfile(httpProfile); + // 瀹炰緥鍖栬璇锋眰浜у搧鐨刢lient瀵硅薄,clientProfile鏄彲閫夌殑 + SmsClient client = new SmsClient(cred, "ap-beijing", clientProfile); + // 瀹炰緥鍖栦竴涓姹傚璞,姣忎釜鎺ュ彛閮戒細瀵瑰簲涓涓猺equest瀵硅薄 + SendSmsRequest req = new SendSmsRequest(); + String[] phoneNumberSet1 = {phoneNumber};//鎵嬫満鍙 + req.setPhoneNumberSet(phoneNumberSet1); + req.setSmsSdkAppId("1400630743"); + req.setTemplateId("2411208"); + req.setSignName("灏忕墰绉戞妧"); + String[]templateParamSet1={code,minutes};//楠岃瘉鐮侊紝鍒嗛挓 "123456","5" + req.setTemplateParamSet(templateParamSet1); + // 杩斿洖鐨剅esp鏄竴涓猄endSmsResponse鐨勫疄渚嬶紝涓庤姹傚璞″搴 + SendSmsResponse resp = client.SendSms(req); + // 杈撳嚭json鏍煎紡鐨勫瓧绗︿覆鍥炲寘 + System.out.println(AbstractModel.toJsonString(resp)); + return AbstractModel.toJsonString(resp); + } catch (TencentCloudSDKException e) { + System.out.println(e.toString()); + return e.getMessage(); + } + } + + public static String sendSmsCode(String phoneNumber, String minutes) { + try{ + // 瀹炰緥鍖栦竴涓璇佸璞★紝鍏ュ弬闇瑕佷紶鍏ヨ吘璁簯璐︽埛 SecretId 鍜 SecretKey锛屾澶勮繕闇娉ㄦ剰瀵嗛挜瀵圭殑淇濆瘑 + // 浠g爜娉勯湶鍙兘浼氬鑷 SecretId 鍜 SecretKey 娉勯湶锛屽苟濞佽儊璐﹀彿涓嬫墍鏈夎祫婧愮殑瀹夊叏鎬 + // 浠ヤ笅浠g爜绀轰緥浠呬緵鍙傝冿紝寤鸿閲囩敤鏇村畨鍏ㄧ殑鏂瑰紡鏉ヤ娇鐢ㄥ瘑閽 + // 璇峰弬瑙侊細https://cloud.tencent.com/document/product/1278/85305 + // 瀵嗛挜鍙墠寰瀹樼綉鎺у埗鍙 https://console.cloud.tencent.com/cam/capi 杩涜鑾峰彇 + Credential cred = new Credential(secretId, secretKey); + // 瀹炰緥鍖栦竴涓猦ttp閫夐」锛屽彲閫夌殑锛屾病鏈夌壒娈婇渶姹傚彲浠ヨ烦杩 + HttpProfile httpProfile = new HttpProfile(); httpProfile.setEndpoint("sms.tencentcloudapi.com"); + // 瀹炰緥鍖栦竴涓猚lient閫夐」锛屽彲閫夌殑锛屾病鏈夌壒娈婇渶姹傚彲浠ヨ烦杩 + ClientProfile clientProfile = new ClientProfile(); + clientProfile.setHttpProfile(httpProfile); + // 瀹炰緥鍖栬璇锋眰浜у搧鐨刢lient瀵硅薄,clientProfile鏄彲閫夌殑 + SmsClient client = new SmsClient(cred, "ap-beijing", clientProfile); + // 瀹炰緥鍖栦竴涓姹傚璞,姣忎釜鎺ュ彛閮戒細瀵瑰簲涓涓猺equest瀵硅薄 + SendSmsRequest req = new SendSmsRequest(); + String[] phoneNumberSet1 = {phoneNumber};//鎵嬫満鍙 + req.setPhoneNumberSet(phoneNumberSet1); + req.setSmsSdkAppId("1400630743"); + req.setTemplateId("2411208"); + req.setSignName("灏忕墰绉戞妧"); + String[]templateParamSet1={getRandomCode(),minutes};//楠岃瘉鐮侊紝鍒嗛挓 "123456","5" + req.setTemplateParamSet(templateParamSet1); + // 杩斿洖鐨剅esp鏄竴涓猄endSmsResponse鐨勫疄渚嬶紝涓庤姹傚璞″搴 + SendSmsResponse resp = client.SendSms(req); + // 杈撳嚭json鏍煎紡鐨勫瓧绗︿覆鍥炲寘 + System.out.println(AbstractModel.toJsonString(resp)); + return AbstractModel.toJsonString(resp); + } catch (TencentCloudSDKException e) { + System.out.println(e.toString()); + return e.getMessage(); + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/Threads.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/Threads.java new file mode 100644 index 0000000000000000000000000000000000000000..bdbeb77854d64004dfcdf13d6be28c53fc519118 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/Threads.java @@ -0,0 +1,96 @@ +package com.ruoyi.common.utils; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.concurrent.*; + +/** + * 绾跨▼鐩稿叧宸ュ叿绫. + * + * @author ruoyi + */ +public class Threads +{ + private static final Logger logger = LoggerFactory.getLogger(Threads.class); + + /** + * sleep绛夊緟,鍗曚綅涓烘绉 + */ + public static void sleep(long milliseconds) + { + try + { + Thread.sleep(milliseconds); + } + catch (InterruptedException e) + { + return; + } + } + + /** + * 鍋滄绾跨▼姹 + * 鍏堜娇鐢╯hutdown, 鍋滄鎺ユ敹鏂颁换鍔″苟灏濊瘯瀹屾垚鎵鏈夊凡瀛樺湪浠诲姟. + * 濡傛灉瓒呮椂, 鍒欒皟鐢╯hutdownNow, 鍙栨秷鍦╳orkQueue涓璓ending鐨勪换鍔,骞朵腑鏂墍鏈夐樆濉炲嚱鏁. + * 濡傛灉浠嶇劧瓒呮檪锛屽墖寮峰埗閫鍑. + * 鍙﹀鍦╯hutdown鏃剁嚎绋嬫湰韬璋冪敤涓柇鍋氫簡澶勭悊. + */ + public static void shutdownAndAwaitTermination(ExecutorService pool) + { + if (pool != null && !pool.isShutdown()) + { + pool.shutdown(); + try + { + if (!pool.awaitTermination(120, TimeUnit.SECONDS)) + { + pool.shutdownNow(); + if (!pool.awaitTermination(120, TimeUnit.SECONDS)) + { + logger.info("Pool did not terminate"); + } + } + } + catch (InterruptedException ie) + { + pool.shutdownNow(); + Thread.currentThread().interrupt(); + } + } + } + + /** + * 鎵撳嵃绾跨▼寮傚父淇℃伅 + */ + public static void printException(Runnable r, Throwable t) + { + if (t == null && r instanceof Future) + { + try + { + Future future = (Future) r; + if (future.isDone()) + { + future.get(); + } + } + catch (CancellationException ce) + { + t = ce; + } + catch (ExecutionException ee) + { + t = ee.getCause(); + } + catch (InterruptedException ie) + { + Thread.currentThread().interrupt(); + } + } + if (t != null) + { + logger.error(t.getMessage(), t); + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/AsposeUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/AsposeUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..aec909f76240c618dc975d2abb2ef772caea3c65 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/AsposeUtil.java @@ -0,0 +1,1170 @@ +package com.ruoyi.common.utils.asPose; + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.aspose.words.List; +import com.aspose.words.Shape; +import com.aspose.words.*; +import org.apache.commons.lang3.StringUtils; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.util.*; + +/** + * 涓嬭浇word + */ +public class AsposeUtil { + + /** 鏂囦欢淇濆瓨浣嶇疆 */ + public final static String SAVE_PATH = "/usr/local/xuexinkaoshi/reportForm/"; + + /** 鎴愮哗鍗晈ord璺緞 */ + public final static String TRANSCRIPT_PATH = "reportForm/鎴愮哗鍗.docx"; + + /** 鍑嗚冭瘉word璺緞 */ + public final static String ADMISSION_TICKET_PATH = "reportForm/瀛︿俊鍑嗚冭瘉.docx"; + + /** 鎶ュ悕琛╳ord璺緞 */ + public final static String REPORT_FORM_PATH = "reportForm/瀛︿俊鑰冭瘯鍗锋姤鍚嶈〃锛堟柊锛.docx"; + + + /** + * 鏍¢獙license + * + * @return + */ + public static boolean judgeLicense() { + try { + registerWord(); + } catch (Exception e) { + throw new RuntimeException(e); + } +// boolean result = false; +// try { +// String licenseStr = "\n" + " \n" + " \n" + " Aspose.Total for Java\n" + " Aspose.Words for Java\n" + " \n" + " Enterprise\n" + " 20991231\n" + " 20991231\n" + " 8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7\n" + " \n" + " sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=\n" + ""; +// InputStream is = new ByteArrayInputStream(licenseStr.getBytes("UTF-8")); +// License aposeLic = new License(); +// aposeLic.setLicense(is); +// result = true; +// } catch (Exception e) { +// e.printStackTrace(); +// } + return true; + } + + /** + * 杞崲 + * + * @param filePath word鏂囨。璺緞 + * @param pdfPath 闇瑕佽浆鎹㈢殑pdf璺緞 + * @param type 绫诲瀷 doc docx + * @param ambient 鐜true:win false:linux + * @param watermark 闇瑕佹坊鍔犵殑姘村嵃 + */ + public static int trans(String filePath, String pdfPath, String type, Boolean ambient, String watermark) { + if (!judgeLicense()) { + } + try { + long old = System.currentTimeMillis(); + File file = new File(pdfPath); + if ("doc".equals(type) || "docx".equals(type)) { + wordOfPdf(file, filePath, ambient, watermark); + } else { + return 0; + } + long now = System.currentTimeMillis(); +// System.out.println("瀹屾垚锛" + pdfPath); +// System.out.println("鍏辫楁椂锛" + ((now - old) / 1000.0) + "绉"); + } catch (Exception e) { + e.printStackTrace(); + } + return 1; + } + + /** + * @param file pdf鏂囦欢璺緞 + * @param filePath word鏂囨。璺緞 + * @param ambient 鐜true:win false:linux + * @param watermark 闇瑕佹坊鍔犵殑姘村嵃 + */ + private static void wordOfPdf(File file, String filePath, Boolean ambient, String watermark) { + //鑾峰彇鎵鏈夌敤鎴风殑瀛椾綋 + String userfontsfoloder; + if (ambient) { + userfontsfoloder = "C:\\Users\\Administrator\\AppData\\Local" + "\\Microsoft\\Windows\\Fonts\\"; + } else { + userfontsfoloder = "/usr/share/fonts/Fonts"; + } + FontSourceBase[] updatedFontSources = FontSettings.getDefaultInstance().getFontsSources(); + FontSourceBase[] updatedFontSourcesNew = new FontSourceBase[updatedFontSources.length + 1]; + System.arraycopy(updatedFontSources, 0, updatedFontSourcesNew, 0, updatedFontSources.length); + //灏嗙敤鎴风洰褰曞瓧浣撴坊鍔犲埌瀛椾綋婧愪腑 + FolderFontSource folderFontSource = new FolderFontSource(userfontsfoloder, true); + updatedFontSourcesNew[updatedFontSources.length] = folderFontSource; + FontSettings.getDefaultInstance().setFontsSources(updatedFontSourcesNew); + //寮濮嬭浆鎹 + FileOutputStream os = null; + Document doc; + try { + os = new FileOutputStream(file); + doc = new Document(filePath); + //娣诲姞鍥剧墖姘村嵃 + //insertWatermarkImg(doc,"logo.png"); + //娣诲姞鏂囧瓧姘村嵃 + if (StringUtils.isNotEmpty(watermark)) { + insertWatermarkText(doc, watermark); + } + doc.save(os, SaveFormat.PDF); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + os.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + /** + * @param wordInputStream word鏂囦欢杈撳叆娴 + * @param pdfPath pdf鏂囨。璺緞 + * @param ambient 鐜true:win false:linux + * @param watermark 闇瑕佹坊鍔犵殑姘村嵃 + */ + public static void wordOfPdfTool(InputStream wordInputStream, String pdfPath, Boolean ambient, String watermark) { +// System.out.println("word杞琍DF寮濮"); + long old = System.currentTimeMillis(); + if (!judgeLicense()) { + throw new RuntimeException("License invalid"); + } + //鑾峰彇鎵鏈夌敤鎴风殑瀛椾綋 + String userfontsfoloder; + if (ambient) { + userfontsfoloder = "C:\\Users\\Administrator\\AppData\\Local" + "\\Microsoft\\Windows\\Fonts\\"; + } else { + userfontsfoloder = "/usr/share/fonts/Fonts"; + } + FontSourceBase[] updatedFontSources = FontSettings.getDefaultInstance().getFontsSources(); + FontSourceBase[] updatedFontSourcesNew = new FontSourceBase[updatedFontSources.length + 1]; + System.arraycopy(updatedFontSources, 0, updatedFontSourcesNew, 0, updatedFontSources.length); + //灏嗙敤鎴风洰褰曞瓧浣撴坊鍔犲埌瀛椾綋婧愪腑 + FolderFontSource folderFontSource = new FolderFontSource(userfontsfoloder, true); + updatedFontSourcesNew[updatedFontSources.length] = folderFontSource; + FontSettings.getDefaultInstance().setFontsSources(updatedFontSourcesNew); + //寮濮嬭浆鎹 + FileOutputStream os = null; + Document doc; + try { + os = new FileOutputStream(pdfPath); + doc = new Document(wordInputStream); + //娣诲姞鍥剧墖姘村嵃 + //insertWatermarkImg(doc,"logo.png"); + //娣诲姞鏂囧瓧姘村嵃 + if (StringUtils.isNotEmpty(watermark)) { + insertWatermarkText(doc, watermark); + } + doc.save(os, SaveFormat.PDF); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + os.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + long now = System.currentTimeMillis(); +// System.out.println("word杞琍DF瀹屾垚鍏辫楁椂锛" + ((now - old) / 1000.0) + "绉"); + } + + /** + * 鍒犻櫎鏂囦欢 + * + * @param filePathAndName 鎸囧畾鐨勮矾寰 + */ + public static void delFile(String filePathAndName) { + try { + File file = new File(filePathAndName); + boolean delete = file.delete(); + if (delete) { + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + + /** + * @param doc 闇瑕佹坊鍔犵殑鏂囨。 + * @param watermarkText 姘村嵃鍐呭 + * @throws Exception + * @Title: insertWatermarkText + * @Description: PDF鐢熸垚姘村嵃 锛堝熀鏈按鍗 璇︽儏鍙傜収 WatermarkUtil锛 + * @author fuzhilin + */ + private static void insertWatermarkText(Document doc, String watermarkText) throws Exception { + Shape watermark = new Shape(doc, ShapeType.TEXT_PLAIN_TEXT); + //姘村嵃鍐呭 + watermark.getTextPath().setText(watermarkText); + //姘村嵃瀛椾綋 + watermark.getTextPath().setFontFamily("瀹嬩綋"); + //姘村嵃瀹藉害 + watermark.setWidth(500); + //姘村嵃楂樺害 + watermark.setHeight(100); + //鏃嬭浆姘村嵃 + watermark.setRotation(-40); + //姘村嵃棰滆壊 + watermark.getFill().setColor(Color.lightGray); + watermark.setStrokeColor(Color.lightGray); + watermark.setRelativeHorizontalPosition(RelativeHorizontalPosition.PAGE); + watermark.setRelativeVerticalPosition(RelativeVerticalPosition.PAGE); + watermark.setWrapType(WrapType.NONE); + watermark.setVerticalAlignment(VerticalAlignment.CENTER); + watermark.setHorizontalAlignment(HorizontalAlignment.CENTER); + Paragraph watermarkPara = new Paragraph(doc); + watermarkPara.appendChild(watermark); + for (Section sect : doc.getSections()) { + insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_PRIMARY); + insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_FIRST); + insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_EVEN); + } + } + + + /** + * word鏂囨。鎻掑叆鍥剧墖姘村嵃 + * + * @param doc 鏂囨。瀵硅薄 + * @param imgPath 鍥剧墖璺緞 + * @throws Exception + */ + public static void insertWatermarkImg(Document doc, String imgPath) throws Exception { + if (StringUtils.isEmpty(imgPath)) { + System.out.println("娌℃湁閰嶇疆姘村嵃鍥剧墖, 鏃犳硶涓烘枃妗e姞鍏ユ按鍗"); + return; + } + Paragraph watermarkPara = new Paragraph(doc); + Shape waterShape = buildImgShape(doc, imgPath); + watermarkPara.appendChild(waterShape); + // 鍦ㄦ瘡涓儴鍒嗕腑锛屾渶澶氬彲浠ユ湁涓変釜涓嶅悓鐨勬爣棰橈紝鍥犱负鎴戜滑鎯宠鍑虹幇鍦ㄦ墍鏈夐〉闈笂鐨勬按鍗帮紝鎻掑叆鍒版墍鏈夋爣棰樹腑銆 + for (Section sect : doc.getSections()) { + // 姣忎釜鍖烘鍙兘鏈夊杈句笁涓笉鍚岀殑鏍囬锛屽洜涓烘垜浠笇鏈涙墍鏈夐〉闈笂閮芥湁姘村嵃锛屽皢鎵鏈夌殑澶存彃鍏ャ + insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_PRIMARY); + insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_FIRST); + insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_EVEN); + } + } + + /** + * 鏋勫缓鍥剧墖shape绫 + * + * @param doc 鏂囨。瀵硅薄 + * @param imgPath 鍥剧墖鏂囦欢璺緞 + */ + private static Shape buildImgShape(Document doc, String imgPath) { + Shape shape = new Shape(doc, ShapeType.IMAGE); + try { + BufferedImage sourceImg = ImageIO.read(WatermarkUtil.class.getClassLoader().getResourceAsStream(imgPath)); + shape.getImageData().setImage(sourceImg); + shape.setWidth(200); + shape.setHeight(50); + shape.setLeft(100); + shape.setTop(100); + shape.setWrapType(WrapType.NONE); + } catch (Exception e) { + throw new RuntimeException("鍥剧墖闄勪欢涓㈠け, 鏃犳硶鐢熸垚姘村嵃!", e); + } + return shape; + } + + + /** + * 鎻掑叆姘村嵃 + * + * @param watermarkPara 姘村嵃娈佃惤 + * @param sect 閮ㄤ欢 + * @param headerType 澶存爣绫诲瀷瀛楁 + * @throws Exception + */ + private static void insertWatermarkIntoHeader(Paragraph watermarkPara, Section sect, int headerType) throws Exception { + HeaderFooter header = sect.getHeadersFooters().getByHeaderFooterType(headerType); + if (header == null) { + header = new HeaderFooter(sect.getDocument(), headerType); + sect.getHeadersFooters().add(header); + } + header.appendChild(watermarkPara.deepClone(true)); + } + + + /** + * 淇濆瓨pdf + * + * @param path 淇濆瓨鐩綍 + * @param doc 鍘熸枃妗 + * @param ambient 鐜true:win false:linux + */ + public static void savePdf(String path, Document doc, Boolean ambient) { + String format = "pdf"; + save(path, doc, SaveFormat.PDF, format, ambient); + } + + /** + * 淇濆瓨doc + * + * @param path 淇濆瓨鐩綍 + * @param doc 鍘熸枃妗 + * @param ambient 鐜true:win false:linux + */ + public static void saveDoc(String path, Document doc, Boolean ambient) { + String format = "doc"; + save(path, doc, SaveFormat.DOC, format, ambient); + } + + public static void saveDocx(String path, Document doc, Boolean ambient) { + String format = "docx"; + save(path, doc, SaveFormat.DOCX, format, ambient); + } + + /** + * 淇濆瓨鍚勭鏍煎紡鐨勬枃妗 + * + * @param path 淇濆瓨鍦板潃 + * @param doc 淇濆瓨鏂囦欢 + * @param saveFormat 淇濆瓨鏍煎紡 + * @param ambient 鐜true:win false:linux + */ + private static void save(String path, Document doc, int saveFormat, String format, Boolean ambient) { + if (!judgeLicense()) { + } + try { + //鑾峰彇鎵鏈夌敤鎴风殑瀛椾綋 + String userfontsfoloder; + if (ambient) { + userfontsfoloder = "C:\\Users\\Administrator\\AppData\\Local" + "\\Microsoft\\Windows\\Fonts\\"; + } else { + userfontsfoloder = "/usr/share/fonts/Fonts"; + } + FontSourceBase[] updatedFontSources = FontSettings.getDefaultInstance().getFontsSources(); + FontSourceBase[] updatedFontSourcesNew = new FontSourceBase[updatedFontSources.length + 1]; + System.arraycopy(updatedFontSources, 0, updatedFontSourcesNew, 0, updatedFontSources.length); + //灏嗙敤鎴风洰褰曞瓧浣撴坊鍔犲埌瀛椾綋婧愪腑 + FolderFontSource folderFontSource = new FolderFontSource(userfontsfoloder, true); + updatedFontSourcesNew[updatedFontSources.length] = folderFontSource; + FontSettings.getDefaultInstance().setFontsSources(updatedFontSourcesNew); + doc.save(path, saveFormat); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + /** + * 鍒朵綔鎶ヨ〃姝f枃 + * + * @param builder + * @param text + */ + public static void setText(DocumentBuilder builder, String text) { + try { + builder.getParagraphFormat().clearFormatting(); + /*List list = builder.getDocument().getLists().add(ListTemplate.NUMBER_DEFAULT); + list.getListLevels().get(0).setAlignment(ListLevelAlignment.LEFT); + //灏嗘垜浠殑鍒楄〃搴旂敤浜庢煇浜涙钀姐 + builder.getListFormat().setList(list);*/ + builder.getParagraphFormat().setLeftIndent(25.0); + // 3-灏嗛棿璺濊缃负榛樿琛岃窛鐨勫嶆暟锛岄粯璁や负12鐐广 + //杩欑闂磋窛灏嗙缉鏀句负涓嶅悓鐨勫瓧浣撳ぇ灏忋 + //builder.getParagraphFormat().setLineSpacingRule(LineSpacingRule.MULTIPLE); + builder.getParagraphFormat().setLineSpacing(18.0); + builder.getFont().setNameFarEast("浠垮畫_GB2312");//瀛椾綋 + builder.getFont().setSize(16); + builder.getFont().setBold(false);//绮椾綋 + builder.getFont().setItalic(false);//鏂滀綋 + builder.writeln(text); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 鍒朵綔鎶ヨ〃鎬绘爣棰 + * + * @param builder + * @param title + */ + public static void setTitle(DocumentBuilder builder, String title) { + try { + //璁剧疆瀛椾綋鏍煎紡 + builder.insertHtml("

" + title + "

"); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 鍒朵綔鐩綍 + * + * @param builder + */ + public static void setCatalogue(DocumentBuilder builder) { + try { + builder.insertTableOfContents("\\o \"1-3\" \\h \\z \\u"); + builder.insertBreak(BreakType.PAGE_BREAK); + builder.writeln(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 鍒朵綔涓绾ф爣棰 + * + * @param builder + */ + public static void setTitle1(DocumentBuilder builder, String title1) { + try { + builder.getParagraphFormat().clearFormatting(); + builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_1); + List list = builder.getDocument().getLists().add(ListTemplate.NUMBER_UPPERCASE_LETTER_DOT); + list.getListLevels().get(0).setAlignment(ListLevelAlignment.LEFT); + //灏嗘垜浠殑鍒楄〃搴旂敤浜庢煇浜涙钀姐 + builder.getListFormat().setList(list); + builder.getFont().setNameFarEast("榛戜綋"); + builder.getFont().setSize(16); + builder.getFont().setBold(false);//绮椾綋 + builder.write(title1); + builder.writeln(); + } catch (Exception e) { + e.printStackTrace(); + } + } +/* + public static void main(String[] args) { + try { + AsposeUtil.saveDoc("E:\\123.doc", new Document(), true); + String template = "E:\\123.doc"; + Document doc = new Document(template); + DocumentBuilder builder = new DocumentBuilder(); + builder.setDocument(doc); + //AsposeUtil.setCatalogue(builder); + AsposeUtil.setTitle1(builder, "妫鏌ョ粨鏋"); + AsposeUtil.setTitle2(builder, "绠$悊涓庢湇鍔$被瀹夊叏妫鏌"); + AsposeUtil.setText(builder, "閫氳繃鏌ラ槄鐩稿叧鏂囦欢銆佽褰曠瓑鏂瑰紡锛屾鏌ヤ簡瀹夊叏涓荤鏈烘瀯鍙婅矗浠诲垎宸ャ佸畨鍏ㄨ矗浠诲埗钀藉疄銆佸畨鍏ㄨ嚜鏌ヨ嚜绠″伐浣滆惤瀹炵瓑鎯呭喌銆傜浉鍏虫鏌ヤ緷鎹富瑕佸嚭鑷婁腑鍗庝汉姘戝叡鍜屽浗缃戠粶瀹夊叏娉曘嬨婄綉缁滃畨鍏ㄧ瓑绾т繚鎶ゅ熀鏈姹傘嬨婃暟鎹畨鍏ㄧ鐞嗗姙娉曘嬨"); + AsposeUtil.setTitle3(builder, "瀹夊叏璐d换鍒惰惤瀹炴儏鍐"); + AsposeUtil.setText(builder,"宸插熀鏈惤瀹炵綉缁滃畨鍏ㄨ矗浠诲埗锛屼笌鍚勪簩绾у崟浣嶇璁㈢綉缁滃畨鍏ㄨ矗浠讳功锛屽垝鍒嗙綉缁滃畨鍏ㄨ矗浠昏竟鐣岋紱銆"); + AsposeUtil.saveDoc("E:\\456.doc", doc, true); + delFile("E:\\123.doc"); + + } catch (Exception e) { + e.printStackTrace(); + } + }*/ + + /** + * 鍒朵綔浜岀骇鏍囬 + * + * @param builder + */ + public static void setTitle2(DocumentBuilder builder, String title2) { + try { + builder.getParagraphFormat().clearFormatting(); + builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_2); + /* List list = builder.getDocument().getLists().add(ListTemplate.NUMBER_LOWERCASE_LETTER_PARENTHESIS); + list.getListLevels().get(0).setAlignment(ListLevelAlignment.LEFT); + //灏嗘垜浠殑鍒楄〃搴旂敤浜庢煇浜涙钀姐 + builder.getListFormat().setList(list);*/ + builder.getFont().setNameFarEast("妤蜂綋");//瀛椾綋 + builder.getFont().setSize(16); + builder.getFont().setBold(false);//绮椾綋 + builder.getFont().setItalic(false);//鏂滀綋 + builder.write(title2); + builder.writeln(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 鍒朵綔涓夌骇鏍囬 + * + * @param builder + */ + public static void setTitle3(DocumentBuilder builder, String title3) { + try { + builder.getParagraphFormat().clearFormatting(); + builder.getParagraphFormat().setStyleIdentifier(StyleIdentifier.HEADING_3); + //builder.insertBreak(BreakType.PAGE_BREAK); + List list = builder.getDocument().getLists().add(ListTemplate.NUMBER_DEFAULT); + list.getListLevels().get(0).setAlignment(ListLevelAlignment.LEFT); + //灏嗘垜浠殑鍒楄〃搴旂敤浜庢煇浜涙钀姐 + builder.getListFormat().setList(list); + builder.getFont().setNameFarEast("浠垮畫_GB2312"); + builder.getFont().setSize(16); + builder.getFont().setBold(true);//绮椾綋 + builder.getFont().setItalic(false);//鏂滀綋 + builder.write(title3); + builder.writeln(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + + /** + * 鍒朵綔鎶ヨ〃娈佃惤 + * + * @param builder + * @param pragraph + */ + public static void setParagraph(DocumentBuilder builder, String pragraph) { + try { + //璁剧疆瀛椾綋鏍煎紡 + builder.insertHtml("

   " + pragraph + "

"); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 鍒朵綔涓涓崟鍏冩牸骞惰拷鍔犳暟鎹,鍗曞厓鏍间笉鍚堝苟 + * + * @param builder + * @param width 璁剧疆鍗曞厓鏍煎搴 + * @param text + */ + public static void setCell(DocumentBuilder builder, Double width, String text) { + builder.insertCell(); + if (width == null) { + width = 3d; + } + builder.getCellFormat().setWidth(width); + builder.getCellFormat().setVerticalMerge(CellMerge.NONE); + builder.write(text); + } + + /** + * 鎻掑叆鍗曞厓鏍硷紝涓嶈缃搴,鍗曞厓鏍间笉鍚堝苟 + * + * @param builder + * @param text + */ + public static void setCell(DocumentBuilder builder, String text) { + builder.insertCell(); + builder.getCellFormat().setVerticalMerge(CellMerge.NONE); + builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); + builder.write(text); + } + + public static void setCell(DocumentBuilder builder, Long text) { + builder.insertCell(); + builder.getCellFormat().setVerticalMerge(CellMerge.NONE); + builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); + if (text == null) { + builder.write(""); + } else { + builder.write(text.toString()); + } + } + + public static void setCell(DocumentBuilder builder, Double text) { + builder.insertCell(); + builder.getCellFormat().setVerticalMerge(CellMerge.NONE); + builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); + if (text == null) { + builder.write(""); + } else { + builder.write(text.toString()); + } + } + + /** + * 鍨傜洿鍚堝苟鍗曞厓鏍肩殑绗竴鏍 + * + * @param builder + * @param text + */ + public static void setStartVerticalMerge(DocumentBuilder builder, String text) { + builder.insertCell(); + builder.getCellFormat().setVerticalMerge(CellMerge.FIRST); + builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); + builder.write(text); + } + + /** + * 鍨傜洿鍚堝苟鍗曞厓鏍肩殑鍚庨潰鏍 + * + * @param builder + */ + public static void setThenVerticalMerge(DocumentBuilder builder) { + builder.insertCell(); + // This cell is vertically merged to the cell above and should be empty. + builder.getCellFormat().setVerticalMerge(CellMerge.PREVIOUS); + builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); + } + + /** + * 姘村钩鍚堝苟鍗曞厓鏍肩殑绗竴鏍 + * + * @param builder + * @param text + */ + public static void setStartHorizontalMerge(DocumentBuilder builder, String text) { + builder.insertCell(); + builder.getCellFormat().setHorizontalMerge(CellMerge.FIRST); + builder.write(text); + } + + /** + * 姘村钩鍚堝苟鍗曞厓鏍肩殑鍚庨潰鏍 + * + * @param builder + */ + public static void setThenHorizontalMerge(DocumentBuilder builder) { + builder.insertCell(); + // This cell is vertically merged to the cell above and should be empty. + builder.getCellFormat().setHorizontalMerge(CellMerge.PREVIOUS); + } + + /** + * 鍒朵綔琛ㄦ牸鏁版嵁琛 + * + * @param builder + */ + public static void setRow(DocumentBuilder builder) { + try { + builder.getRowFormat().setHeadingFormat(true); + builder.getRowFormat().getBorders().setLineStyle(LineStyle.SINGLE); + builder.getRowFormat().setHeightRule(HeightRule.AUTO); + builder.getRowFormat().setAllowBreakAcrossPages(true); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 鍒朵綔琛ㄦ牸 + * + * @param builder + * @throws Exception + */ + public static Table setTable(DocumentBuilder builder) { + builder.moveToDocumentEnd(); + Table table = builder.startTable(); + builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER); + return table; + } + + /** + * aspose word 鏇挎崲鏂囧瓧/鍥剧墖銆 + * + * @param stream 鍘熸枃浠惰矾寰 + * @param saveUrl 淇濆瓨璺緞 + * @param paramMap {key:value,"$骞翠唤$":"2020","$绛惧瓧1$":"$pic:d/qz1.jpg"} key 涓鸿琚浛鎹㈢殑瀛楃涓诧紝value 涓烘浛鎹负鐨勫瓧绗︿覆锛屾浛鎹负鍥剧墖锛屽垯value涓$pic:+鍥剧墖璺緞 + * @param watermark 鏄惁姘村嵃 + * @param flag 鏄惁鐢熸垚pdf + * @return + */ + public static boolean replace(InputStream stream, String saveUrl, Map paramMap, String watermark, Boolean flag, String fileType) { + if (!judgeLicense()) { + System.out.println("license閿欒"); + } + if (stream == null) { + return false; + } + if (saveUrl == null || saveUrl.isEmpty()) { + return false; + } + if (paramMap == null || paramMap.isEmpty()) { + return false; + } + try { + Document doc = new Document(stream); + Iterator paramKey = paramMap.keySet().iterator(); + while (paramKey.hasNext()) { + String key = paramKey.next(); + String v = StringUtils.defaultIfEmpty(paramMap.get(key), ""); + if (v.startsWith("$pic:")) { + v = v.substring(v.lastIndexOf("http")); + + double width = 0; + double height = 0; + int thirdColonIndex = findThirdColonIndex(v); + if (thirdColonIndex != -1){ + String preStr = v.substring(0, thirdColonIndex); + if (StringUtils.isNotBlank(preStr)){ + String[] split = preStr.split(":"); + if (split.length == 3){ + width = Double.parseDouble(split[1]); + height = Double.parseDouble(split[2]); + } + } + } + //濡傛灉key宸茬粡琚浛鎹㈡垚鍥剧墖浜嗭紝閭e氨瑕佸皢鍥剧墖鏇挎崲鎴愭柊鐨勫浘鐗囷紝鐩稿綋浜庨噸鏂版彃鍏ュ浘鐗 + NodeCollection shapeCollection = doc.getChildNodes(NodeType.SHAPE, true); + Iterator shapeIterate = shapeCollection.iterator(); + java.util.List shaplist = new ArrayList(); + while (shapeIterate.hasNext()) { + Shape shape = shapeIterate.next(); + if (key.equals(shape.getName())) { + shaplist.add(shape); + } + } + DocumentBuilder builder = new DocumentBuilder(doc); + for (int i = 0; i < shaplist.size(); i++) { + Shape shape = shaplist.get(i); + //灏嗗厜鏍囩Щ鍔ㄥ埌鎸囧畾鑺傜偣 + builder.moveTo(shape); + Shape img = builder.insertImage(v); + img.setName(key); + shape.remove(); + } + //鏇挎崲鏂囧瓧涓哄浘鐗 + doc.getRange().replace(key, "", new FindReplaceOptions(new ReplaceAndInsertImage(v, key, width, height))); + } else if (v.startsWith("$chart:")) { + v = v.substring(7); + GenerateChartVO chartVO = JSONObject.parseObject(v, GenerateChartVO.class); + doc.getRange().replace(key, "", new FindReplaceOptions(new ReplaceAndInsertChart(key, chartVO))); + } else if (v.startsWith("$table:")) { + if ("1".equals(v.substring(7, 8))) { + v = v.substring(8); + GenerateManyMultTableVO tableVO = JSONObject.parseObject(v, GenerateManyMultTableVO.class); + doc.getRange().replace(key, "", new FindReplaceOptions(new ReplaceAndInsertMunltTable(key, tableVO))); + } else { + v = v.substring(7); + GenerateTableVO tableVO = JSONObject.parseObject(v, GenerateTableVO.class); + doc.getRange().replace(key, "", new FindReplaceOptions(new ReplaceAndInsertTable(key, tableVO))); + } + } else if (v.startsWith("$tableNew:")) { + v = v.substring(10); + GenerateTableVO tableVO = JSONObject.parseObject(v, GenerateTableVO.class); + doc.getRange().replace(key, "", new FindReplaceOptions(new ReplaceAndInsertNewTable(key, tableVO))); + } else if (v.startsWith("$barPerStaChart:")) { + v = v.substring(16); + GenerateChartVO generateChartVO = JSONObject.parseObject(v, GenerateChartVO.class); + doc.getRange().replace(key, "", new FindReplaceOptions(new BarPercentStackedChart(key, generateChartVO))); + + } else { + doc.getRange().replace(key, v); + } + } + if (null != watermark && "" != watermark && "1".equals(watermark)) { + //娣诲姞鍥剧墖姘村嵃 + WatermarkUtil.insertWatermarkImg(doc, "logo.png"); + } + // 鏇存柊鍩 + doc.updateFields(); + doc.save(saveUrl); + String osName = System.getProperty("os.name").toLowerCase(); + if (flag) { + String saveUrlPdf = saveUrl.replace(".docx", ".pdf"); + if (osName.contains("window")) { + savePdf(saveUrlPdf, doc, true); + } else if (osName.contains("nux")) { + savePdf(saveUrlPdf, doc, false); + } + fileType=StringUtils.defaultIfEmpty(fileType,"pdf"); + if(fileType.toLowerCase().equals("pdf")){ + FileUtil.del(saveUrl); + }else{ + FileUtil.del(saveUrlPdf); + } + } + + } catch (Exception e) { + e.printStackTrace(); + return false; + } + return true; + } + + /** + * aspose word 鏇挎崲鏂囧瓧/鍥剧墖銆 + * + * @param stream 鍘熸枃浠惰矾寰 + * @param saveUrl 淇濆瓨璺緞 + * @param paramMap {key:value,"$骞翠唤$":"2020","$绛惧瓧1$":"$pic:d/qz1.jpg"} key 涓鸿琚浛鎹㈢殑瀛楃涓诧紝value 涓烘浛鎹负鐨勫瓧绗︿覆锛屾浛鎹负鍥剧墖锛屽垯value涓$pic:+鍥剧墖璺緞 + * @param watermark 鏄惁姘村嵃 + * @param flag 鏄惁鐢熸垚pdf + * @return + */ + public static Document replace4Doc(InputStream stream, String saveUrl, Map paramMap, String watermark, Boolean flag) { + if (!judgeLicense()) { + System.out.println("license閿欒"); + } + if (stream == null) { + return null; + } + if (saveUrl == null || saveUrl.isEmpty()) { + return null; + } + if (paramMap == null || paramMap.isEmpty()) { + return null; + } + try { + Document doc = new Document(stream); + Iterator paramKey = paramMap.keySet().iterator(); + while (paramKey.hasNext()) { + String key = paramKey.next(); + String v = StringUtils.defaultIfEmpty(paramMap.get(key), ""); + if (v.startsWith("$pic:")) { + v = v.substring(v.lastIndexOf("http")); + + double width = 0; + double height = 0; + int thirdColonIndex = findThirdColonIndex(v); + if (thirdColonIndex != -1){ + String preStr = v.substring(0, thirdColonIndex); + if (StringUtils.isNotBlank(preStr)){ + String[] split = preStr.split(":"); + if (split.length == 3){ + width = Double.parseDouble(split[1]); + height = Double.parseDouble(split[2]); + } + } + } + //濡傛灉key宸茬粡琚浛鎹㈡垚鍥剧墖浜嗭紝閭e氨瑕佸皢鍥剧墖鏇挎崲鎴愭柊鐨勫浘鐗囷紝鐩稿綋浜庨噸鏂版彃鍏ュ浘鐗 + NodeCollection shapeCollection = doc.getChildNodes(NodeType.SHAPE, true); + Iterator shapeIterate = shapeCollection.iterator(); + java.util.List shaplist = new ArrayList(); + while (shapeIterate.hasNext()) { + Shape shape = shapeIterate.next(); + if (key.equals(shape.getName())) { + shaplist.add(shape); + } + } + DocumentBuilder builder = new DocumentBuilder(doc); + for (int i = 0; i < shaplist.size(); i++) { + Shape shape = shaplist.get(i); + //灏嗗厜鏍囩Щ鍔ㄥ埌鎸囧畾鑺傜偣 + builder.moveTo(shape); + Shape img = builder.insertImage(v); + img.setName(key); +// System.out.println("replace" + key); + shape.remove(); + } + //鏇挎崲鏂囧瓧涓哄浘鐗 + doc.getRange().replace(key, "", new FindReplaceOptions(new ReplaceAndInsertImage(v, key, width, height))); + } else if (v.startsWith("$chart:")) { + v = v.substring(7); + GenerateChartVO chartVO = JSONObject.parseObject(v, GenerateChartVO.class); + doc.getRange().replace(key, "", new FindReplaceOptions(new ReplaceAndInsertChart(key, chartVO))); + } else if (v.startsWith("$table:")) { + if ("1".equals(v.substring(7, 8))) { + v = v.substring(8); + GenerateManyMultTableVO tableVO = JSONObject.parseObject(v, GenerateManyMultTableVO.class); + doc.getRange().replace(key, "", new FindReplaceOptions(new ReplaceAndInsertMunltTable(key, tableVO))); + } else { + v = v.substring(7); + GenerateTableVO tableVO = JSONObject.parseObject(v, GenerateTableVO.class); + doc.getRange().replace(key, "", new FindReplaceOptions(new ReplaceAndInsertTable(key, tableVO))); + } + } else if (v.startsWith("$barPerStaChart:")) { + v = v.substring(16); + GenerateChartVO generateChartVO = JSONObject.parseObject(v, GenerateChartVO.class); + doc.getRange().replace(key, "", new FindReplaceOptions(new BarPercentStackedChart(key, generateChartVO))); + + } else { + doc.getRange().replace(key, v); + } + } + if (null != watermark && "" != watermark && "1".equals(watermark)) { + //娣诲姞鍥剧墖姘村嵃 + WatermarkUtil.insertWatermarkImg(doc, "logo.png"); + } + // 鏇存柊鍩 + doc.updateFields(); + doc.save(saveUrl); + String osName = System.getProperty("os.name").toLowerCase(); + if (flag) { + saveUrl = saveUrl.replace(".docx", ".pdf"); + if (osName.contains("window")) { + savePdf(saveUrl, doc, true); + } else if (osName.contains("nux")) { + savePdf(saveUrl, doc, false); + } + } + return doc; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + public static void testWord() { + try { + Document doc = new Document("G:\\123.doc"); + NodeCollection childNodes = doc.getChildNodes(); + + for (int i = 0; i < childNodes.getCount(); i++) { + Node node = childNodes.get(i); + System.out.println(node.getText()); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + + /** + * 鑾峰彇鎵鏈夌殑鏍囬锛屽苟杩斿洖鐖禝D鍜岃嚜韬獻D鏉ユ瀯寤烘爲缁撴瀯 + * + * @param doc + * @return + */ + public static ArrayList getAllHeading(Document doc) { + ArrayList headingList = new ArrayList(); + // 鑾峰彇鎵鏈夋钀 + NodeCollection paragraphs = doc.getChildNodes(NodeType.PARAGRAPH, true); + // 閬嶅巻鎵鏈夋钀斤紝鏌ユ壘鏍囬 + String parentId = "0"; + for (Paragraph paragraph : (Iterable) paragraphs) { + // 鍒ゆ柇娈佃惤鏄惁涓烘爣棰 + if (1 <= paragraph.getParagraphFormat().getStyleIdentifier() && paragraph.getParagraphFormat().getStyleIdentifier() <= 9) { + int styleIdentifier = paragraph.getParagraphFormat().getStyleIdentifier(); + HeadingVo headingVo = new HeadingVo(); + // 杈撳嚭鏍囬鏂囨湰鍐呭 + // System.out.println(paragraph.getText().trim()); + headingVo.setName(paragraph.getText().trim()); + headingVo.setNum(styleIdentifier); + if (styleIdentifier == 1) { + headingVo.setPid("0"); + } else { + headingVo.setPid(getPid(headingList, styleIdentifier)); + } + headingVo.setId(UUID.randomUUID().toString().replace("-", "")); + headingList.add(headingVo); + } + } + return headingList; + } + + /** + * 鑾峰彇瀵瑰簲鏍囬鐨勭埗鏍囬鐨処D + * + * @param headingList + * @param styleIdentifier 褰撳墠绾у埆 + * @return + */ + public static String getPid(ArrayList headingList, int styleIdentifier) { + for (int i = headingList.size() - 1; i >= 0; i--) { + HeadingVo element = headingList.get(i); + if (element.getNum() + 1 == styleIdentifier) { + return element.getId(); + } + } + return "0"; + } + + public static Boolean changeDocFormat(Document doc) { + + + // 璁剧疆鏍囬鐨勫瓧浣撱佸ぇ灏忓拰鑷姩缂栧彿搴忓垪 + NodeCollection paragraphs = doc.getChildNodes(NodeType.PARAGRAPH, true); + int heading1Counter = 1; + int heading2Counter = 1; + for (Paragraph paragraph : (Iterable) paragraphs) { + if (paragraph.getParagraphFormat().getStyleIdentifier() == StyleIdentifier.HEADING_1) { + paragraph.getListFormat().setList(doc.getLists().add(ListTemplate.OUTLINE_HEADINGS_NUMBERS)); + paragraph.getListFormat().setListLevelNumber(0); + } else if (paragraph.getParagraphFormat().getStyleIdentifier() == StyleIdentifier.HEADING_2) { + paragraph.getListFormat().setList(doc.getLists().add(ListTemplate.OUTLINE_HEADINGS_NUMBERS)); + paragraph.getListFormat().setListLevelNumber(1); + } + paragraph.getParagraphFormat().getStyle().getFont().setSize(16); // 璁剧疆瀛椾綋澶у皬 + paragraph.getParagraphFormat().getStyle().getFont().setName("Arial"); // 璁剧疆瀛椾綋 + paragraph.getParagraphFormat().setAlignment(ParagraphAlignment.LEFT); // 璁剧疆鏍囬灞呬腑鏄剧ず + } + + // 淇敼姝f枃鐨勫ぇ灏 + NodeCollection runs = doc.getChildNodes(NodeType.RUN, true); + for (Run run : (Iterable) runs) { + run.getFont().setSize(12); // 璁剧疆瀛椾綋澶у皬 + run.getFont().setName("Times New Roman"); // 璁剧疆瀛椾綋 + } + // 淇濆瓨鏂囨。 + try { + doc.save("G:\\123456.doc"); + } catch (Exception e) { + throw new RuntimeException(e); + } + return true; + } + + + public static void MergeSpecifiedCells(Document doc, java.util.List paramVOList) throws Exception { + Table table = doc.getFirstSection().getBody().getTables().get(0); + if (ObjectUtil.isNull(table)) { + return; + } + for (MergeTableParamVO paramVO : paramVOList) { + Cell cellStartRange = table.getRows().get(paramVO.getStartLine()).getCells().get(paramVO.getStartColumn()); + Cell cellEndRange = table.getRows().get(paramVO.getEndLine()).getCells().get(paramVO.getEndColumn()); + //鍚堝苟 + MergeCells(cellStartRange, cellEndRange); + //鍗曞厓鏍兼坊鍔犳枩绾 + if (!ObjectUtil.isNull(paramVO.getBorderType())) { + Border byBorderType1 = cellStartRange.getCellFormat().getBorders().getByBorderType(paramVO.getBorderType()); + byBorderType1.setColor(Color.black); + byBorderType1.setLineWidth(0.5); + } + } + } + + public static void MergeCells(Cell startCell, Cell endCell) { + Table parentTable = startCell.getParentRow().getParentTable(); + // Find the row and cell indices for the start and end cell. + Point startCellPos = new Point(startCell.getParentRow().indexOf(startCell), parentTable.indexOf(startCell.getParentRow())); + Point endCellPos = new Point(endCell.getParentRow().indexOf(endCell), parentTable.indexOf(endCell.getParentRow())); + // Create the range of cells to be merged based off these indices. Inverse each index if the end cell if before the start cell. + Rectangle mergeRange = new Rectangle(Math.min(startCellPos.x, endCellPos.x), Math.min(startCellPos.y, endCellPos.y), Math.abs(endCellPos.x - startCellPos.x) + 1, Math.abs(endCellPos.y - startCellPos.y) + 1); + for (Row row : parentTable.getRows()) { + for (Cell cell : row.getCells()) { + Point currentPos = new Point(row.indexOf(cell), parentTable.indexOf(row)); + + // Check if the current cell is inside our merge range then merge it. + if (mergeRange.contains(currentPos)) { + if (currentPos.x == mergeRange.x) { + cell.getCellFormat().setHorizontalMerge(CellMerge.FIRST); + } else { + cell.getCellFormat().setHorizontalMerge(CellMerge.PREVIOUS); + } + if (currentPos.y == mergeRange.y) { + cell.getCellFormat().setVerticalMerge(CellMerge.FIRST); + } else { + cell.getCellFormat().setVerticalMerge(CellMerge.PREVIOUS); + } + } + } + } + + } + + public static Document generateDirectory(Document doc,String name) { + if (!judgeLicense()) { + System.out.println("license閿欒"); + } + // Fill the empty table of contents + try { + // Create the DocumentBuilder object + DocumentBuilder builder = new DocumentBuilder(doc); + + // Instantiate ParagraphFormat object + ParagraphFormat paragraphFormat = builder.getParagraphFormat(); + + // Get the existing style name + String defaultStyle = paragraphFormat.getStyleName(); + + // Set style and alignment of the table of contents + paragraphFormat.setStyleName("Title"); + paragraphFormat.setAlignment(ParagraphAlignment.CENTER); + paragraphFormat.setLineSpacing(25); + + // Add title for table of contents + builder.getFont().setSize(24); // 璁剧疆瀛椾綋澶у皬涓24纾 + builder.getFont().setBold(true); // 璁剧疆瀛椾綋鍔犵矖 + builder.writeln(name); + builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER); // 灞呬腑瀵归綈 + builder.writeln("鐩綍"); + + // Set back the text style + paragraphFormat.setStyleName(defaultStyle); + + // Insert a table of contents with switches + builder.insertTableOfContents("\\o \"1-3\" \\h \\z \\t"); + builder.insertBreak(BreakType.PAGE_BREAK); + doc.updateFields(); + } catch (Exception e) { + throw new RuntimeException(e); + } + + return doc; + + } + + /** + * aspose-words:jdk17:23.4 鐗堟湰 + */ + public static void registerWord() throws Exception + { + // 鏋勯犱竴涓敞鍐屼俊鎭 + Class zzXgCClass = Class.forName("com.aspose.words.zzXgC"); + Constructor constructors = zzXgCClass.getDeclaredConstructors()[0]; + constructors.setAccessible(true); + Object instance = constructors.newInstance("zzW5k", "zzYON"); + // zzXFN = 1 + java.lang.reflect.Field zzXFN = zzXgCClass.getDeclaredField("zzXFN"); + zzXFN.setAccessible(true); + zzXFN.set(instance, 1); + // zzW8s = 0 + // zzX6D = "8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7" // SerialNumber + // zzw9 SubscriptionExpiry + // zzZq3 LicenseExpiry + // zzW5k ... + // zzYON 绛惧悕 Signature + // zzXjC zzZoT 瀵硅薄 绌 + + + // 鎶婃敞鍐屼俊鎭斁鍒 zzYVA杩欎釜绫讳腑鏉 + Class zzYVAClass = Class.forName("com.aspose.words.zzYVA"); + java.lang.reflect.Field zzwP = zzYVAClass.getDeclaredField("zzwP"); + zzwP.setAccessible(true); + ArrayList zzwPValue = new ArrayList<>(); + zzwPValue.add(instance); + zzwP.set(null, zzwPValue); + + // 鐢熸垚鏂囨。浼氭帀杩欎釜鏉ュ垽鏂 zzXQo + Class zzXQoClass = Class.forName("com.aspose.words.zzXQo"); + java.lang.reflect.Field zzHA = zzXQoClass.getDeclaredField("zzHA"); + zzHA.setAccessible(true); + zzHA.set(null, 128); + Field zzWod = zzXQoClass.getDeclaredField("zzWod"); + zzWod.setAccessible(true); + zzWod.set(null, false); + } + + public static Color getColor(){ + // 鍒涘缓Random瀵硅薄鐢ㄤ簬鐢熸垚闅忔満鏁 + Random random = new Random(); + // 璁惧畾鏈浣庝寒搴﹀硷紝渚嬪200锛屼互纭繚棰滆壊涓嶄細澶殫 + int minLightness = 180; + // 鐢熸垚涓変釜鍒嗛噺锛屾瘡涓垎閲忛兘鍦╩inLightness鍒255涔嬮棿 + int red = minLightness + random.nextInt(255 - minLightness + 1); + int green = minLightness + random.nextInt(255 - minLightness + 1); + int blue = minLightness + random.nextInt(255 - minLightness + 1); + return new Color(red, green, blue); + } + + /** + * 鏌ユ壘绗笁涓":"涓嬫爣 + * @param str + * @return + */ + public static int findThirdColonIndex(String str){ + int thirdColonIndex = -1; + try { + int firstColonIndex = str.indexOf(":"); + if (firstColonIndex != -1) { + int secondColonIndex = str.indexOf(":", firstColonIndex + 1); + if (secondColonIndex != -1) { + thirdColonIndex = str.indexOf(":", secondColonIndex + 1); + } + } + }catch (Exception e){ + e.printStackTrace(); + } + return thirdColonIndex; + } + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/BarPercentStackedChart.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/BarPercentStackedChart.java new file mode 100644 index 0000000000000000000000000000000000000000..f5a449b3ee06ceaaa7228fa93c714000ed161a5f --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/BarPercentStackedChart.java @@ -0,0 +1,343 @@ +package com.ruoyi.common.utils.asPose; + +import cn.hutool.core.util.ObjectUtil; +import com.aspose.words.Shape; +import com.aspose.words.*; + +import java.awt.*; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Iterator; + +/** + * @Author fuzhilin + * @Date 2021/11/30 0030 16:05 + * @Description + */ +public class BarPercentStackedChart implements IReplacingCallback { + + private String key; + private GenerateChartVO chartVO; + + public BarPercentStackedChart(String key, GenerateChartVO chartVO) { + this.key = key; + this.chartVO = chartVO; + } + + @Override + public int replacing(ReplacingArgs e) throws Exception { + //鑾峰彇褰撳墠鑺傜偣 + Node currentNode = e.getMatchNode(); + //鑺傜偣鎷嗗垎澶勭悊褰撳墠鍖归厤瀛楁 + splitRun(currentNode, e.getMatchOffset()); + //鑾峰彇褰撳墠鏂囨。 + Document document = (Document) currentNode.getDocument(); + DocumentBuilder builder = new DocumentBuilder(document); + //灏嗗厜鏍囩Щ鍔ㄥ埌鎸囧畾鑺傜偣 + builder.moveTo(currentNode); + // 缁熻鍥炬爣棰 + String[] title = chartVO.getTitle(); + String name = chartVO.getName(); + // 缁熻鍥剧被鍨(鍙傝冿細ChartType) + int chartType = chartVO.getChartType(); + // 缁熻鍥惧瓧娈 + String[] categories = chartVO.getCategories(); + // 缁熻鍥惧瓧娈垫暟鎹紙浜岀淮鏁扮粍鏀寔澶氭姌绾匡級 + double[][] values = chartVO.getValues(); + + //璁剧疆缁熻鍥惧鍜岄珮 + double height = chartVO.getHeight(); + if (ObjectUtil.isNull(height)) { + height = 415; + } + double width = chartVO.getWidth(); + if (ObjectUtil.isNull(width)) { + width = 415; + } + Boolean showTitle = chartVO.getShowTitle(); + Boolean dataPercent = chartVO.getDataPercent(); + Boolean coordinatePercent = chartVO.getCoordinatePercent(); + Boolean showLegendKey = chartVO.getShowLegendKey(); + //鎻掑叆 + addChart(builder, chartType, name, title, categories, values, height, width,dataPercent, coordinatePercent,showLegendKey,showTitle); + + /* // 鍒涘缓涓涓櫨鍒嗘瘮鍫嗗彔鏉″舰鍥 + Shape chartShape = builder.insertChart(ChartType.BAR_PERCENT_STACKED, 400, 300); + Chart chart = chartShape.getChart(); + // 璁剧疆鍥捐〃鏍囬 + ChartTitle title = chart.getTitle(); + + title.setText(chartVO.getTitle()); + // 璁剧疆鍥捐〃鏁版嵁 + chart.getSeries().clear(); + List dataList = chartVO.getDataList(); + List series = chartVO.getSeries(); + for (BarPercentStackedVO.BarPercentStackedData barPercentStackedData : dataList) { + //chart.getSeries().add(barPercentStackedData.getSeries(), barPercentStackedData.getCategories(), barPercentStackedData.getValues()); + }*/ + return ReplaceAction.SKIP; + } + + /** + * 鍔犺浇缁熻鍥 + * + * @param builder + * @param chatType 缁熻鍥剧被鍨 + * @param title 缁熻鍥炬爣棰 + * @param categories 缁熻鍥惧瓧娈 + * @param values 缁熻鍥惧瓧娈垫暟鎹 + */ + private static void addChart(DocumentBuilder builder, int chatType, String title, String[] series, String[] categories, double[][] values, double height, double width,Boolean dataPercent, Boolean coordinatePercent,Boolean showLegendKey,Boolean showTitle) { + //璁剧疆棣栬缂╄繘 + /* builder.getParagraphFormat().setFirstLineIndent(0); + builder.writeln("");*/ + try { + Shape shape = builder.insertChart(chatType, width, height); + shape.setVerticalAlignment(VerticalAlignment.CENTER); + shape.setHorizontalAlignment(HorizontalAlignment.CENTER); + // 涓嶈鐩 + shape.setAllowOverlap(false); + Chart chart = shape.getChart(); + ChartSeriesCollection seriesCollection = chart.getSeries(); + // 娓呴櫎榛樿 + seriesCollection.clear(); + + // 鏄剧ず鍦ㄤ笅闈 + chart.getLegend().setPosition(LegendPosition.BOTTOM); + // 娣诲姞鏁版嵁 + ChartTitle ct = chart.getTitle(); + ct.setText(title); + ct.setOverlay(false); + ct.setShow(showTitle); + ChartLegend cl = chart.getLegend(); + cl.setOverlay(false); + if (ChartType.COLUMN == chatType) { + if (!coordinatePercent){ + chart.getAxisY().getScaling().setMinimum(new AxisBound(1)); + } + } + if (coordinatePercent){ + chart.getAxisY().getNumberFormat().setFormatCode("0.00%"); + chart.getAxisX().getNumberFormat().setFormatCode("0.00%"); + } + Color[] customColors=new Color[]{new Color(147,205,221),new Color(250,192,144),new Color(25 ,202 ,173 ) ,new Color(214 ,213 ,183 ),new Color(209 ,186 ,116 ),new Color(230 ,206 ,172 ),new Color(236 ,173 ,158 ) + ,new Color(244 ,96 ,108 ),new Color(190 ,237 ,199 ),new Color(140 ,199 ,181 ),new Color(160 ,238 ,225 ),new Color(230,224,236) + }; + String[] categoriesNew=new String[categories.length]; + for (int i = 0; i < categories.length; i++) { + categoriesNew[i]=""; + } + for (int i = 0; i < series.length; i++) { + if(i==0){ + ChartSeries chatSeries = seriesCollection.add(series[i], categories, values[i]); + chatSeries.getFormat().getFill().setForeColor(customColors[i%10]); + }else{ + if(i>10){ + ChartSeries chatSeries = seriesCollection.add(series[i], categoriesNew, values[i]); + chatSeries.getFormat().getFill().setForeColor(AsposeUtil.getColor()); + }else{ + ChartSeries chatSeries = seriesCollection.add(series[i], categoriesNew, values[i]); + chatSeries.getFormat().getFill().setForeColor(customColors[i%10]); + } + } + + } + Iterator iterator = seriesCollection.iterator(); + int i=0; + while (iterator.hasNext()) { + ChartSeries seriesNew = iterator.next(); + //灏嗗浘琛ㄤ腑鐨勬姌鐜拌缃负骞虫粦 + seriesNew.setSmooth(true); + // 璁剧疆鏁版嵁鏄剧ず + ChartDataLabelCollection dataLabelCollection = seriesNew.getDataLabels(); + // 鏍规嵁鍙傛暟 showPercent 鍐冲畾鏄惁鏄剧ず鐧惧垎姣旓紝濡傛灉涓 true锛屽垯鏄剧ず鐧惧垎姣旓紱鍚﹀垯锛屾樉绀篩杞村笺 + if (dataPercent){ + dataLabelCollection.getNumberFormat().setFormatCode("0.00%"); + } + // 鎵鏈夊弬鏁颁负0涓嶅睍绀哄 + if (!allValueIsZero(values[i])) { + dataLabelCollection.setShowValue(true); + } + // 璁剧疆鏁版嵁鏍囩鐨勫垎闅旂涓烘崲琛岀锛屽嵆姣忎釜鏍囩鏄剧ず鍦ㄤ竴琛屻 + dataLabelCollection.setSeparator("\r\n"); + dataLabelCollection.setShowLegendKey(showLegendKey); // 鏄惁鏄剧ず鍥句緥 + dataLabelCollection.setShowCategoryName(false);//鏄惁鏄剧ず绯诲垪鐨勫悕绉板湪绯诲垪鏃佽竟 + dataLabelCollection.setShowLeaderLines(false); + dataLabelCollection.setShowSeriesName(false);//鏄惁灏嗗浘褰㈡爣棰樻樉绀哄湪绯诲垪鍚嶇О涓 + dataLabelCollection.setShowBubbleSize(false); + i++; + } + /*builder.writeln(""); + builder.getParagraphFormat().setFirstLineIndent(0);*/ + } catch (Exception e) { + e.printStackTrace(); + } + } + + + public static void createChart3(DocumentBuilder builder, String caption, String title1, String title2, String name1, String name2,String name3, + String name4, double[] valueArr1, double[] valueArr2)throws Exception { + Color[] customColors=new Color[]{new Color(147,205,221),new Color(250,192,144),new Color(25 ,202 ,173 ) ,new Color(214 ,213 ,183 ),new Color(209 ,186 ,116 ),new Color(230 ,206 ,172 ),new Color(236 ,173 ,158 ) + ,new Color(244 ,96 ,108 ),new Color(190 ,237 ,199 ),new Color(140 ,199 ,181 ),new Color(160 ,238 ,225 ),new Color(230,224,236) + }; + Shape shape = builder.insertChart(ChartType.COLUMN_STACKED, 432, 252); + Chart chart = shape.getChart(); + chart.getTitle().setText(caption); + ChartSeriesCollection seriesColl = chart.getSeries(); + seriesColl.clear(); + seriesColl.add(title1,new String[]{name1,name2,name3,name4},valueArr1); + seriesColl.add(title2,new String[]{"","","",""},valueArr2); + Iterator iterator = seriesColl.iterator(); + int i=0; + while (iterator.hasNext()) { + ChartSeries series = iterator.next(); + //灏嗗浘琛ㄤ腑鐨勬姌鐜拌缃负骞虫粦 + series.setSmooth(true); + ChartDataLabelCollection dataLabelCollection = series.getDataLabels(); + dataLabelCollection.setShowValue(true); + Iterator iterator1 = dataLabelCollection.iterator(); + while (iterator1.hasNext()) { + ChartDataLabel chartDataLabel = iterator1.next(); + chartDataLabel.setShowValue(true); + chartDataLabel.setShowPercentage(true); + chartDataLabel.setShowPercentage(true); + } + series.getFormat().getFill().setForeColor(customColors[i%10]); + i++; + } + //鏁版嵁鏍囩鏄剧ず鍦ㄩ《涓 + chart.getLegend().setPosition(LegendPosition.TOP); + chart.getTitle().setShow(true); + chart.getTitle().setText(caption); + //涓嶈鐩 閫夋嫨鏁版嵁鏍囬涓嶈鐩栧湪鍥惧舰鏍囬涓 涓嶇劧浼氬瓧浣撻噸鍚 + chart.getTitle().setOverlay(false); + chart.getLegend().setOverlay(false); + builder.getParagraphFormat().setFirstLineIndent(2); + } + + private void splitRun(Node currentNode, int position) { + String text = currentNode.getText(); + Node newNode = currentNode.deepClone(true); + if (text.length() >= position + this.key.length()) { + ((Run) currentNode).setText(text.substring(position + this.key.length())); + } else { + int morlength = position + this.key.length() - text.length(); + ((Run) currentNode).setText(""); + Node tmpnode = currentNode; + for (int i = 0; i < this.key.length(); i++) { +// System.out.println(i); + tmpnode = tmpnode.getNextSibling(); + String tmptext = tmpnode.getText(); +// System.out.println(tmptext); +// System.out.println(morlength); +// System.out.println("--------" + (tmptext.length() >= morlength)); + + if (tmptext.length() >= morlength) { + ((Run) tmpnode).setText(tmptext.substring(morlength)); + break; + } else { + morlength = morlength - tmptext.length(); + ((Run) tmpnode).setText(""); + } + } + } + if (position > 0) { + ((Run) newNode).setText(text.substring(0, position)); + currentNode.getParentNode().insertBefore(newNode, currentNode); + } + } + + /** + * 鍒ゆ柇鍥惧舰锛堟煴鐘跺浘锛夋墍鏈夊间负0 + * + * @param value + * @return + */ + public static boolean allValueIsZero(double[] value) { + boolean res = true; + for (double tmp : value) { + if (tmp > 0) { + res = false; + break; + } + } + return res; + } + + public static void main(String[] args) throws Exception { + // 鍒涘缓鏂囨。瀵硅薄 +// Document doc = new Document(); +// DocumentBuilder builder = new DocumentBuilder(doc); +// +// // 缁熻鍥炬爣棰 +// +// String[] title = {"鏁欒偛鏂瑰紡鑹ソ","鏁欒偛鏂瑰紡鍩烘湰閫傚綋","鏁欒偛鏂瑰紡鎬ラ渶鏀瑰杽"}; +// +// // 缁熻鍥惧瓧娈 +// String[] categories = {""}; +// // 缁熻鍥惧瓧娈垫暟鎹紙浜岀淮鏁扮粍鏀寔澶氭姌绾匡級 +// double[][] values = { +// {2.2}, // 绗竴涓暟鎹郴鍒楃殑鍊 +// {3.1}, +// {3.2}// 绗簩涓暟鎹郴鍒楃殑鍊 +// }; +// +// addChart(builder, ChartType.COLUMN_STACKED, null, title, categories, values,215,316,true,true); +// +// // 淇濆瓨鏂囨。 +// doc.save("D://saveFile//test//StackedLineChart.docx"); + + + //閫氳繃Document绌虹殑鏋勯犲嚱鏁帮紝鍒涘缓涓涓柊鐨勭┖鐨勬枃妗,濡傛灉鏈夊弬鏁板垯鏄牴鎹ā鏉垮姞杞芥枃妗c +// Document doc = new Document("D://12312.docx"); +// //鍔ㄦ佸鍔犲唴瀹 鑾峰彇鍏夋爣锛岃繖閲岄潰鐨刞builder`鐩稿綋浜庝竴涓敾绗旓紝鎻愬墠缁欎粬瑙勫畾鏍峰紡锛岀劧鍚庝粬灏辫兘鏍规嵁浣犵殑瑕佹眰鐢诲嚭浣犳兂鐢荤殑Word銆傝繖閲岀殑鐢荤瑪浣跨敤鐨勬槸灏辫繎鍘熷垯锛屽綋涓婇潰娌℃湁瀹氫箟浜哹uilder鐨勬椂鍊欙紝浼氫娇鐢ㄩ粯璁ょ殑鏍煎紡锛屽綋涓婇潰瀹氫箟浜嗘煇涓牸寮忕殑鏃跺欙紝浣跨敤鏈杩戠殑涓涓紙鍗虫渶鍚庝竴涓敼鍙樼殑鏍峰紡锛 +// DocumentBuilder builder = new DocumentBuilder(doc); +// //灏嗗厜鏍囩Щ鍔ㄥ埌鏂囨。鏈 +// builder.moveToDocumentEnd(); +// //鍒嗛〉 +// builder.insertBreak(BreakType.PAGE_BREAK); +// //鎹㈣ +// builder.insertParagraph(); +// +// //灏嗘暟鎹浆鎹负鍥捐〃鎺ュ彈鐨勬牸寮 +// double[] thisMonths = new double[]{78.36,98.14,56.25,68.24}; +// double[] lastMonths = new double[]{98.51,14.74,57.25,78.24}; +// String[] names = {"涓夋柟鍗忚","瀹炰範淇濋櫓","涓撲笟鍖归厤鐜","涓婂矖鐜"}; +// //澶氱淮鏌辩姸鍥 +// createChart3( +// builder,"澶囨杩囩▼鏁版嵁缁熻","11鏈","12鏈", +// names[0],names[1],names[2],names[3],thisMonths,lastMonths +// ); +// +// //鏂囦欢鍛藉悕 +// String fileName = "D://AsposeWord1"+new SimpleDateFormat("MMddHHmmss").format(new Date())+".docx"; +// //鏂囦欢淇濆瓨 +// doc.save(fileName); + Document doc = new Document(); + DocumentBuilder builder = new DocumentBuilder(doc); + Shape shape = builder.insertChart(ChartType.LINE, 432.0, 252.0); + Chart chart = shape.getChart(); + chart.getTitle().setText("Data Labels With Different Number Format"); + +//鍒犻櫎榛樿鐢熸垚鐨勭郴鍒椼 + chart.getSeries().clear(); + +//娣诲姞甯︽湁鏁版嵁鍜屾暟鎹爣绛剧殑绯诲垪銆 + ChartSeries series1 = chart.getSeries().add("Aspose Series 1", + new String[] { "Category 1", "Category 2", "Category 3" }, + new double[] { 2.5, 1.5, 3.5 }); + + series1.hasDataLabels(true); + series1.getDataLabels().setShowValue(true); + series1.getDataLabels().get(0).getNumberFormat().setFormatCode("\"$\"#,##0.00"); + series1.getDataLabels().get(1).getNumberFormat().setFormatCode("dd/mm/yyyy"); + series1.getDataLabels().get(2).getNumberFormat().setFormatCode("0.00%"); + +//鎴栬呭皢鏍煎紡浠g爜閾炬帴鍒版簮鍗曞厓鏍笺 + series1.getDataLabels().get(2).getNumberFormat().isLinkedToSource(true); + String fileName = "D://AsposeWord1"+new SimpleDateFormat("MMddHHmmss").format(new Date())+".docx"; + //鏂囦欢淇濆瓨 + doc.save(fileName); + + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/BarPercentStackedVO.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/BarPercentStackedVO.java new file mode 100644 index 0000000000000000000000000000000000000000..5dc3b87a9e4c903992e8db9f7bff3e436f1751f2 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/BarPercentStackedVO.java @@ -0,0 +1,60 @@ +package com.ruoyi.common.utils.asPose; + +import lombok.Data; + +import java.util.List; + +/** + * @Author haoxuyang + * @Date 2024/4/14 21:33 + */ +@Data +public class BarPercentStackedVO { + /** + * 缁熻鍥炬爣棰 + */ + private String title; + + /** + * 绫诲埆 + */ + private List series; + + /** + * 缁熻鍥剧被鍨(鍙傝冿細ChartType) + */ + private Integer chartType; + + /** + * 缁熻鍥惧瓧娈 + * new String[]{"AW Category 1", "AW Category 2"}; + * 姣忎釜鏌卞舰鍥句笅闈㈢殑鍚嶅瓧 + */ + private String[] categories; + + /** + * 鏌卞舰鍥炬暟閲 + * new double[]{1, 2} + */ + private double[][] values; + + /* *//** + * 鏁版嵁 + *//* + private List dataList; + + @Data + public static class BarPercentStackedData { + + *//** + * 缁熻鍥惧瓧娈 + *//* + private String[] categories; + + *//** + * 鏌卞舰鍥炬暟閲 + *//* + private double[] values; + + }*/ +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/DataTypeVO.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/DataTypeVO.java new file mode 100644 index 0000000000000000000000000000000000000000..142debe263390e99d203c42fad8b78622af9010d --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/DataTypeVO.java @@ -0,0 +1,21 @@ +package com.ruoyi.common.utils.asPose; + +import lombok.Data; + +/** + * @Author haoxuyang + * @Date 2024/4/14 11:36 + * 鏁版嵁绫诲瀷VO + */ +@Data +public class DataTypeVO { + /** + * 1:瀛楃涓 2:娴偣鍨 + */ + private String type; + + /** + * 绗簩鍒楀悕绉 + */ + private Object data; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/GenerateChartVO.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/GenerateChartVO.java new file mode 100644 index 0000000000000000000000000000000000000000..24e779cd36923417b3f460379a35a16a56f57b8a --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/GenerateChartVO.java @@ -0,0 +1,70 @@ +package com.ruoyi.common.utils.asPose; + +import lombok.Data; + +/** + * @Author fuzhilin + * @Date 2021/11/29 0029 17:16 + * @Description Aspose鐢熸垚鍥捐〃VO + */ +@Data +public class GenerateChartVO { + + /** + * 缁熻鍥惧悕绉 + */ + private String name; + + /** + * 缁熻鍥惧悕绉 + */ + private Boolean showTitle=true; + + /** + * 缁熻鍥惧 + */ + private double width; + + /** + * 缁熻鍥鹃珮 + */ + private double height; + + /** + * 鏁版嵁鏄惁瑕佸姞鐧惧垎鍙 + */ + private Boolean dataPercent=false; + + /** + * xy杞存槸鍚﹁鍔犵櫨鍒嗗彿 + */ + private Boolean coordinatePercent=false; + + /** + * 鏄惁鏄剧ず鑹插潡 + */ + private Boolean showLegendKey=true; + + /** + * 缁熻鍥炬爣棰 + */ + private String[] title; + + /** + * 缁熻鍥剧被鍨(鍙傝冿細ChartType) + */ + private Integer chartType; + + /** + * 缁熻鍥惧瓧娈 + * new String[]{"AW Category 1", "AW Category 2"}; + * 姣忎釜鏌卞舰鍥句笅闈㈢殑鍚嶅瓧 + */ + private String[] categories; + + /** + * 鏌卞舰鍥炬暟閲 + * new double[]{1, 2} + */ + private double[][] values; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/GenerateManyMultTableVO.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/GenerateManyMultTableVO.java new file mode 100644 index 0000000000000000000000000000000000000000..082154f20666afae734c9b71a279a092b427dbaf --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/GenerateManyMultTableVO.java @@ -0,0 +1,23 @@ +package com.ruoyi.common.utils.asPose; + +import lombok.Data; + +import java.util.List; + +/** + * @Author fuzhilin + * @Date 2021/12/2 0002 10:05 + * @Description 鍒涘缓澶氱淮搴︾殑琛ㄦ牸 + */ +@Data +public class GenerateManyMultTableVO { + /** + * 琛ㄦ牸琛ㄥご + */ + private List title; + + /** + * 琛ㄦ牸鏁版嵁 + */ + private List values; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/GenerateTableVO.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/GenerateTableVO.java new file mode 100644 index 0000000000000000000000000000000000000000..b68f183298cd5dbdd3e4d9ab306f31486f8d51c6 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/GenerateTableVO.java @@ -0,0 +1,43 @@ +package com.ruoyi.common.utils.asPose; + +import lombok.Data; + +import java.util.List; + +/** + * @Author fuzhilin + * @Date 2021/12/2 0002 10:05 + * @Description Aspose鐢熸垚琛ㄦ牸VO + */ +@Data +public class GenerateTableVO { + /** + * 缁熻鍥惧 + */ + private double width; + + /** + * 缁熻鍥鹃珮 + */ + private double height; + + /** + * 琛ㄦ牸琛ㄥご + */ + private List title; + + /** + * 闇瑕侀鑹茬殑琛屾暟 + */ + private Integer line; + + /** + * 琛ㄦ牸鏁版嵁 + */ + private List> values; + + /** + * 鍚堝苟鍗曞厓鏍兼暟鎹 + */ + private List mergeTableParamList; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/HeadingVo.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/HeadingVo.java new file mode 100644 index 0000000000000000000000000000000000000000..e220baed828ffbd23e86f22e43f1b055fe4a7a5b --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/HeadingVo.java @@ -0,0 +1,21 @@ +package com.ruoyi.common.utils.asPose; + +import lombok.Data; + +/** + * @Author fuzhilin + * @Description //TODO + * @Date 2024/3/12 15:02 + **/ +@Data +public class HeadingVo { + + private int num; + + private String name; + + private String id; + + private String pid; + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/MergeTableParamVO.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/MergeTableParamVO.java new file mode 100644 index 0000000000000000000000000000000000000000..cae97502817b04b2cddfa57aa988939898676b04 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/MergeTableParamVO.java @@ -0,0 +1,38 @@ +package com.ruoyi.common.utils.asPose; + +import lombok.Data; +import lombok.experimental.Accessors; + +/** + * @Author haoxuyang + * @Date 2024/4/18 0:16 + */ +@Data +@Accessors(chain = true) +public class MergeTableParamVO { + + /** + * 鏂滅嚎绫诲瀷 鍙傝冿細BorderType 涓嶈缃煎垯涓嶆坊鍔犳枩绾 + */ + private int borderType; + + /** + * 寮濮嬭 + */ + private int startLine; + + /** + * 寮濮嬪垪 + */ + private int startColumn; + + /** + * 缁撴潫琛 + */ + private int endLine; + + /** + * 缁撴潫鍒 + */ + private int endColumn; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/ReplaceAndInsertChart.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/ReplaceAndInsertChart.java new file mode 100644 index 0000000000000000000000000000000000000000..7cb9c5b347e2a4b4f2fea7422aa723444baa4388 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/ReplaceAndInsertChart.java @@ -0,0 +1,223 @@ +package com.ruoyi.common.utils.asPose; + +import com.aspose.words.Shape; +import com.aspose.words.*; + +import java.awt.*; + +/** + * @Author fuzhilin + * @Date 2021/11/30 0030 16:05 + * @Description + */ +public class ReplaceAndInsertChart implements IReplacingCallback { + + private String key; + private GenerateChartVO chartVO; + + public ReplaceAndInsertChart(String key, GenerateChartVO chartVO) { + this.key = key; + this.chartVO = chartVO; + } + + @Override + public int replacing(ReplacingArgs e) throws Exception { + //鑾峰彇褰撳墠鑺傜偣 + Node currentNode = e.getMatchNode(); + //鑺傜偣鎷嗗垎澶勭悊褰撳墠鍖归厤瀛楁 + splitRun(currentNode, e.getMatchOffset()); + //鑾峰彇褰撳墠鏂囨。 + Document document = (Document) currentNode.getDocument(); + DocumentBuilder builder = new DocumentBuilder(document); + //灏嗗厜鏍囩Щ鍔ㄥ埌鎸囧畾鑺傜偣 + builder.moveTo(currentNode); + // 缁熻鍥炬爣棰 + String[] title = chartVO.getTitle(); + // 缁熻鍥剧被鍨(鍙傝冿細ChartType) + int chartType = chartVO.getChartType(); + // 缁熻鍥惧瓧娈 + String[] categories = chartVO.getCategories(); + // 缁熻鍥惧瓧娈垫暟鎹紙浜岀淮鏁扮粍鏀寔澶氭姌绾匡級 + double[][] values = chartVO.getValues(); + //璁剧疆缁熻鍥惧鍜岄珮 + double height = chartVO.getHeight(); + if (0 == height) { + height = 415; + } + double width = chartVO.getWidth(); + if (0 == width) { + width = 415; + } + Boolean dataPercent = chartVO.getDataPercent(); + Boolean coordinatePercent = chartVO.getCoordinatePercent(); + Boolean showLegendKey = chartVO.getShowLegendKey(); + //鎻掑叆 + addChart(builder, chartType, title, categories, values, height, width, dataPercent, coordinatePercent,showLegendKey); + return ReplaceAction.SKIP; + } + + /** + * 鍔犺浇缁熻鍥 + * + * @param builder + * @param chatType 缁熻鍥剧被鍨 + * @param title 缁熻鍥炬爣棰 + * @param categories 缁熻鍥惧瓧娈 + * @param values 缁熻鍥惧瓧娈垫暟鎹 + */ + private static void addChart(DocumentBuilder builder, int chatType, String[] title, String[] categories, double[][] values, double height, double width, Boolean dataPercent, Boolean coordinatePercent,Boolean showLegendKey) { + //璁剧疆棣栬缂╄繘 + /* builder.getParagraphFormat().setFirstLineIndent(0); + builder.writeln("");*/ + try { + Shape shape = builder.insertChart(chatType, width, height); + shape.setVerticalAlignment(VerticalAlignment.CENTER); + shape.setHorizontalAlignment(HorizontalAlignment.CENTER); + // 涓嶈鐩 + shape.setAllowOverlap(false); + Chart chart = shape.getChart(); + ChartSeriesCollection seriesCollection = chart.getSeries(); + // 娓呴櫎榛樿 + seriesCollection.clear(); + // 鏄剧ず鍦ㄤ笅闈 + chart.getLegend().setPosition(LegendPosition.BOTTOM); + // 娣诲姞鏁版嵁 + ChartTitle ct = chart.getTitle(); + if (coordinatePercent){ + chart.getAxisY().getNumberFormat().setFormatCode("0.00%"); + chart.getAxisX().getNumberFormat().setFormatCode("0.00%"); + } + ct.setOverlay(false); + //濡傛灉鏄煴褰㈠浘鍒欎笉鏄剧ず鏍囬 + if (ChartType.COLUMN == chatType) { + if (!coordinatePercent){ + chart.getAxisY().getScaling().setMinimum(new AxisBound(1)); + } + ct.setShow(false); + } + ChartLegend cl = chart.getLegend(); + cl.setOverlay(false); + Color[] customColors=new Color[]{new Color(147,205,221),new Color(250,192,144),new Color(25 ,202 ,173 ) + ,new Color(214 ,213 ,183 ),new Color(209 ,186 ,116 ),new Color(230 ,206 ,172 ),new Color(236 ,173 ,158 ) + ,new Color(244 ,96 ,108 ),new Color(190 ,237 ,199 ),new Color(140 ,199 ,181 ),new Color(160 ,238 ,225 ),new Color(230,224,236) + }; + if(null==values){ + values=new double[][]{}; + } + //鍚戝舰鐘朵腑娣诲姞鏁版嵁 + for (int i = 0; i < title.length; i++) { + ChartSeries chatSeries = seriesCollection.add(title[i], categories, values[i]); + // 璁剧疆鏁版嵁鏄剧ず + ChartDataLabelCollection dataLabelCollection = chatSeries.getDataLabels(); + for (int j = 0; j < categories.length; j++) { + if(j>10){ + chatSeries.getDataPoints().get(j).getFormat().getFill().setForeColor(AsposeUtil.getColor()); + }else{ + chatSeries.getDataPoints().get(j).getFormat().getFill().setForeColor(customColors[j%10]); + } + } + // 鏍规嵁鍙傛暟 showPercent 鍐冲畾鏄惁鏄剧ず鐧惧垎姣旓紝濡傛灉涓 true锛屽垯鏄剧ず鐧惧垎姣旓紱鍚﹀垯锛屾樉绀篩杞村笺 + if (dataPercent){ + dataLabelCollection.getNumberFormat().setFormatCode("0.00%"); + } + // 鎵鏈夊弬鏁颁负0涓嶅睍绀哄 + if (!allValueIsZero(values[i])) { + dataLabelCollection.setShowValue(true); + } + // 璁剧疆鏁版嵁鏍囩鐨勫垎闅旂涓烘崲琛岀锛屽嵆姣忎釜鏍囩鏄剧ず鍦ㄤ竴琛屻 + dataLabelCollection.setSeparator("\r\n"); + dataLabelCollection.setShowLegendKey(showLegendKey); // 鏄惁鏄剧ず鍥句緥 + dataLabelCollection.setShowCategoryName(false);//鏄惁鏄剧ず绯诲垪鐨勫悕绉板湪绯诲垪鏃佽竟 + dataLabelCollection.setShowLeaderLines(false); + dataLabelCollection.setShowSeriesName(false);//鏄惁灏嗗浘褰㈡爣棰樻樉绀哄湪绯诲垪鍚嶇О涓 + dataLabelCollection.setShowBubbleSize(false); + // 璁剧疆娈佃惤鏍煎紡鐨勯琛岀缉杩涗负5涓 + //builder.getParagraphFormat().setFirstLineIndent(5); + } + if (ChartType.LINE_STACKED == chatType||ChartType.LINE == chatType) { + ChartSeriesCollection series = chart.getSeries(); + for (int i = 0; i < series.getCount(); i++) { + chart.getSeries().get(i).getFormat().getFill().setForeColor(customColors[i%10]); + } + } + /*builder.writeln(""); + builder.getParagraphFormat().setFirstLineIndent(0);*/ + } catch (Exception e) { + e.printStackTrace(); + } + } + + private void splitRun(Node currentNode, int position) { + String text = currentNode.getText(); + Node newNode = currentNode.deepClone(true); + if (text.length() >= position + this.key.length()) { + ((Run) currentNode).setText(text.substring(position + this.key.length())); + } else { + int morlength = position + this.key.length() - text.length(); + ((Run) currentNode).setText(""); + Node tmpnode = currentNode; + for (int i = 0; i < this.key.length(); i++) { +// System.out.println(i); + tmpnode = tmpnode.getNextSibling(); + String tmptext = tmpnode.getText(); +// System.out.println(tmptext); +// System.out.println(morlength); +// System.out.println("--------" + (tmptext.length() >= morlength)); + + if (tmptext.length() >= morlength) { + ((Run) tmpnode).setText(tmptext.substring(morlength)); + break; + } else { + morlength = morlength - tmptext.length(); + ((Run) tmpnode).setText(""); + } + } + } + if (position > 0) { + ((Run) newNode).setText(text.substring(0, position)); + currentNode.getParentNode().insertBefore(newNode, currentNode); + } + } + + /** + * 鍒ゆ柇鍥惧舰锛堟煴鐘跺浘锛夋墍鏈夊间负0 + * + * @param value + * @return + */ + public static boolean allValueIsZero(double[] value) { + boolean res = true; + for (double tmp : value) { + if (tmp > 0) { + res = false; + break; + } + } + return res; + } + + public static void main(String[] args) throws Exception { + // 鍒涘缓鏂囨。瀵硅薄 + Document doc = new Document(); + DocumentBuilder builder = new DocumentBuilder(doc); + + //灏嗗厜鏍囩Щ鍔ㄥ埌鎸囧畾鑺傜偣 + + // 缁熻鍥炬爣棰 + + String[] title = {"1"}; + + // 缁熻鍥惧瓧娈 + String[] categories = {"1"}; + // 缁熻鍥惧瓧娈垫暟鎹紙浜岀淮鏁扮粍鏀寔澶氭姌绾匡級 + double[][] values = { + {0.2}, // 绗竴涓暟鎹郴鍒楃殑鍊 + // 绗簩涓暟鎹郴鍒楃殑鍊 + }; + //鎻掑叆 + addChart(builder, ChartType.PIE_3_D, title, categories, values, 215, 316,true,false,false); + + // 淇濆瓨鏂囨。 + doc.save("D://saveFile//test//StackedLineChart.docx"); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/ReplaceAndInsertImage.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/ReplaceAndInsertImage.java new file mode 100644 index 0000000000000000000000000000000000000000..f14565a8b6c1988ed8d0e4bbfd54ff61efe1fdb8 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/ReplaceAndInsertImage.java @@ -0,0 +1,112 @@ +package com.ruoyi.common.utils.asPose; + +import com.aspose.words.*; + +/** + * @Author fuzhilin + * @Date 2021/11/29 0029 10:42 + * @Description + */ +public class ReplaceAndInsertImage implements IReplacingCallback { + + private String url; + private String name; + private double width; + private double height; + + public ReplaceAndInsertImage(String url, String name, double width, double height) { + this.url = url; + this.name = name; + this.width = width; + this.height = height; + } + + @Override + public int replacing(ReplacingArgs e) throws Exception { + //鑾峰彇褰撳墠鑺傜偣 + Node currentNode = e.getMatchNode(); + //鑺傜偣鎷嗗垎澶勭悊褰撳墠鍖归厤瀛楁 + splitRun(currentNode, e.getMatchOffset()); + //鑾峰彇褰撳墠鏂囨。 + Document document = (Document) currentNode.getDocument(); + DocumentBuilder builder = new DocumentBuilder(document); + //灏嗗厜鏍囩Щ鍔ㄥ埌鎸囧畾鑺傜偣 + builder.moveTo(currentNode); + //鎻掑叆鍥剧墖 + Shape img = builder.insertImage(url,width, height); + img.setName(name); + return ReplaceAction.SKIP; + } + + private void splitRun(Node currentNode, int position) { + if (currentNode.getNodeType() != NodeType.RUN) { + return; // 浠呭鐞 Run 鑺傜偣 + } + + Run currentRun = (Run) currentNode; + String text = currentRun.getText(); + Node newNode = currentRun.deepClone(true); + + if (text.length() >= position + this.name.length()) { + currentRun.setText(text.substring(position + this.name.length())); + } else { + int remainingLength = position + this.name.length() - text.length(); + currentRun.setText(""); + + Node tmpnode = currentRun.getNextSibling(); + while (tmpnode != null && remainingLength > 0) { + if (tmpnode.getNodeType() == NodeType.RUN) { + Run tmpRun = (Run) tmpnode; + String tmptext = tmpRun.getText(); + + if (tmptext.length() >= remainingLength) { + tmpRun.setText(tmptext.substring(remainingLength)); + remainingLength = 0; + } else { + remainingLength -= tmptext.length(); + tmpRun.setText(""); + } + } + tmpnode = tmpnode.getNextSibling(); + } + } + + if (position > 0) { + ((Run) newNode).setText(text.substring(0, position)); + currentRun.getParentNode().insertBefore(newNode, currentRun); + } + } + +// private void splitRun(Node currentNode, int position) { +// String text = currentNode.getText(); +// Node newNode = currentNode.deepClone(true); +// if (text.length() >= position + this.name.length()) { +// ((Run) currentNode).setText(text.substring(position + this.name.length())); +// } else { +// int morlength = position + this.name.length() - text.length(); +// ((Run) currentNode).setText(""); +// Node tmpnode = currentNode; +// for (int i = 0; i < this.name.length(); i++) { +//// System.out.println(i); +// tmpnode = tmpnode.getNextSibling(); +// String tmptext = tmpnode.getText(); +//// System.out.println(tmptext); +//// System.out.println(morlength); +//// System.out.println("--------" + (tmptext.length() >= morlength)); +// +// if (tmptext.length() >= morlength) { +// ((Run) tmpnode).setText(tmptext.substring(morlength)); +// break; +// } else { +// morlength = morlength - tmptext.length(); +// ((Run) tmpnode).setText(""); +// } +// } +// } +// if (position > 0) { +// ((Run) newNode).setText(text.substring(0, position)); +// currentNode.getParentNode().insertBefore(newNode, currentNode); +// } +// } + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/ReplaceAndInsertMunltTable.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/ReplaceAndInsertMunltTable.java new file mode 100644 index 0000000000000000000000000000000000000000..47af62e7e5bc98519609e96e0ce6316fecc140e3 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/ReplaceAndInsertMunltTable.java @@ -0,0 +1,291 @@ +package com.ruoyi.common.utils.asPose; + +import cn.hutool.core.util.StrUtil; +import com.aspose.words.*; + +import java.awt.*; +import java.util.ArrayList; +import java.util.List; + +/** + * @Author fuzhilin + * @Date 2021/12/2 0002 9:41 + * @Description + */ +public class ReplaceAndInsertMunltTable implements IReplacingCallback { + private String key; + private GenerateManyMultTableVO tableVO; + + public ReplaceAndInsertMunltTable(String key, GenerateManyMultTableVO tableVO) { + this.key = key; + this.tableVO = tableVO; + } + + @Override + public int replacing(ReplacingArgs e) throws Exception { + //鑾峰彇褰撳墠鑺傜偣 + Node currentNode = e.getMatchNode(); + //鑺傜偣鎷嗗垎澶勭悊褰撳墠鍖归厤瀛楁 + splitRun(currentNode, e.getMatchOffset()); + //鑾峰彇褰撳墠鏂囨。 + Document document = (Document) currentNode.getDocument(); + DocumentBuilder builder = new DocumentBuilder(document); + //灏嗗厜鏍囩Щ鍔ㄥ埌鎸囧畾鑺傜偣 + builder.moveTo(currentNode); + // 娣诲姞琛ㄥご骞惰缃牸寮 + List header = tableVO.getTitle(); + addTableHeader(builder, header); + + //璁剧疆琛ㄤ綋鐨勬牸寮 + setTableBodyFormat(builder); + // 鏍规嵁闆嗗悎寰幆娣诲姞鏁版嵁琛 + for (TabularDataVO collegeData : tableVO.getValues()) { + addDataRow(builder, collegeData); + } + // 缁撴潫琛ㄦ牸 + builder.endTable(); + //绉诲姩鍏夋爣鑷虫湯灏 + builder.moveToDocumentEnd(); + return ReplaceAction.SKIP; + } + + /** + * 娣诲姞鏁版嵁琛 + */ + private static void addDataRow(DocumentBuilder builder, TabularDataVO collegeData) throws Exception { + //寮濮嬭〃鏍 + builder.insertCell(); + builder.write(collegeData.getFirstName()); + //鍨傜洿鍚戜笅鍚堝苟 + builder.getCellFormat().setVerticalMerge(CellMerge.FIRST); + // 绗簩灞傚惊鐜紑濮嬪惊鐜坊鍔犳瘡涓粍缁囦笅鐨勪笅灞傜粍缁 + for (int i = 0; i < collegeData.getTableBodyDataList().size(); i++) { + //鍥犱负绗竴鍒楄浣滀负姘村钩鍚堝苟锛屾墍浠ュ垽鏂 + if (i != 0) { + builder.insertCell(); + builder.write(""); + builder.getCellFormat().setVerticalMerge(CellMerge.PREVIOUS); + } + //娣诲姞閲忚〃 + builder.insertCell(); + builder.write(StrUtil.emptyToDefault(collegeData.getTableBodyDataList().get(i).getName(),"")); + builder.getCellFormat().setVerticalMerge(CellMerge.NONE); + //娣诲姞鏁版嵁 + List data = collegeData.getTableBodyDataList().get(i).getData(); + for (String datum : data) { + builder.insertCell(); + builder.write(String.valueOf(datum)); + builder.getCellFormat().setVerticalMerge(CellMerge.NONE); + } + builder.endRow(); + } + } + + /** + * 璁剧疆琛ㄤ綋鐨勬牸寮 + */ + public static void setTableBodyFormat(DocumentBuilder builder) throws Exception { + //娓呴櫎鏍煎紡 + builder.getCellFormat().clearFormatting(); + //璁剧疆鍗曞厓鏍煎瀭鐩 + builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); + //鍗曞厓鏍艰儗鏅鑹茶缃 + builder.getCellFormat().getShading().setBackgroundPatternColor(new Color(253, 253, 253, 255)); + //鍗曞厓鏍艰竟妗嗛鑹茶缃 + builder.getRowFormat().getBorders().setColor(new Color(1, 1, 1)); + //璁剧疆瀛椾綋棰滆壊 + builder.getFont().setColor(new Color(1, 1, 1)); + //杩欒浠g爜绂佺敤鍗曞厓鏍间腑鐨勬枃鏈嚜鍔ㄦ崲琛屽姛鑳 + builder.getCellFormat().setWrapText(false); + } + + /** + * 鍒涘缓鍒 + * + * @param value + * @param doc + * @return + */ + static Cell createCell(String value, Document doc, boolean isHeader) { + Cell c1 = new Cell(doc); + Paragraph p = new Paragraph(doc); + Run r = new Run(doc, value); + r.getFont().setName("浠垮畫GB2312"); + r.getFont().setSize(14); + if (isHeader) { + r.getFont().setBold(true); + } else { + r.getFont().setBold(false); + } + p.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER); + p.appendChild(r); + c1.appendChild(p); + return c1; + } + + /** + * 娣诲姞琛ㄥご + */ + private static void addTableHeader(DocumentBuilder builder, List headers) throws Exception { + //娈佃惤鐨勫榻愭柟寮忚缃负灞呬腑瀵归綈 + builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER);/**灞呬腑***/ + //鏂规硶灏嗘竻闄ゅ崟鍏冩牸鐨勬墍鏈夋牸寮忚缃紝鍖呮嫭瀛椾綋銆侀鑹层佽竟妗嗙瓑銆傚鏋滄偍鍙兂娓呴櫎鐗瑰畾鐨勬牸寮忚缃紝鍙互浣跨敤鍏朵粬閫傚綋鐨勬柟娉曪紝渚嬪clearFormatting()鏂规硶鐨勯噸杞界増鏈紝璇ョ増鏈帴鍙椾竴涓弬鏁帮紝鐢ㄤ簬鎸囧畾瑕佹竻闄ょ殑鏍煎紡璁剧疆绫诲瀷銆 + builder.getCellFormat().clearFormatting(); + //璁剧疆鍗曞厓鏍肩殑瀹藉害 纾咃紙points锛夈 + builder.getCellFormat().setWidth(70.0); + //杩欏彧鍗曞厓鏍肩殑楂樺害 纾咃紙points锛夈 + builder.getRowFormat().setHeight(25.0); + //璁剧疆鍗曞厓鏍煎瀭鐩 + builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); + //鍗曞厓鏍艰儗鏅鑹茶缃 + builder.getCellFormat().getShading().setBackgroundPatternColor(new Color(100, 150, 208)); + //鍗曞厓鏍艰竟妗嗛鑹茶缃 + builder.getRowFormat().getBorders().setColor(new Color(1, 1, 1)); + //璁剧疆瀛椾綋棰滆壊 + builder.getFont().setColor(new Color(255, 255, 255)); + //杩欒浠g爜绂佺敤鍗曞厓鏍间腑鐨勬枃鏈嚜鍔ㄦ崲琛屽姛鑳 + builder.getCellFormat().setWrapText(false); + //杩欒浠g爜鍚敤鍗曞厓鏍间腑鏂囨湰鐨勮嚜鍔ㄧ缉鏀句互閫傚簲鍗曞厓鏍煎ぇ灏忋 + //builder.getCellFormat().setFitText(true); + //杩欒浠g爜璁剧疆琛岀殑楂樺害瑙勫垯涓虹簿纭笺 + //builder.getRowFormat().setHeightRule(HeightRule.EXACTLY); + //杩欒浠g爜璁剧疆琛岀殑杈规绾挎牱寮忎负娴洉3D鏁堟灉銆 + //builder.getRowFormat().getBorders().setLineStyle(LineStyle.ENGRAVE_3_D); + for (String header : headers) { + builder.insertCell(); + builder.write(header); + } + builder.endRow(); + } + + /** + * 鏇挎崲鍙傛暟浣嶇疆 + * + * @param currentNode + * @param position + */ + private void splitRun(Node currentNode, int position) { + String text = currentNode.getText(); + Node newNode = currentNode.deepClone(true); + if (text.length() >= position + this.key.length()) { + ((Run) currentNode).setText(text.substring(position + this.key.length())); + } else { + int morlength = position + this.key.length() - text.length(); + ((Run) currentNode).setText(""); + Node tmpnode = currentNode; + for (int i = 0; i < this.key.length(); i++) { +// System.out.println(i); + tmpnode = tmpnode.getNextSibling(); + String tmptext = tmpnode.getText(); + + + if (tmptext.length() >= morlength) { + ((Run) tmpnode).setText(tmptext.substring(morlength)); + break; + } else { + morlength = morlength - tmptext.length(); + ((Run) tmpnode).setText(""); + } + } + } + if (position > 0) { + ((Run) newNode).setText(text.substring(0, position)); + currentNode.getParentNode().insertBefore(newNode, currentNode); + } + } + + public static void main(String[] args) throws Exception { + GenerateManyMultTableVO tableVO = new GenerateManyMultTableVO(); + List list = new ArrayList<>(); + list.add("椤圭洰"); + list.add("鍒嗙被"); + list.add("浜烘暟"); + list.add("鐧惧垎姣"); + tableVO.setTitle(list); + ArrayList dataList = new ArrayList<>(); + TabularDataVO tabularDataVO1 = new TabularDataVO(); + tabularDataVO1.setFirstName("鎬у埆"); + ArrayList tableBodyDataList = new ArrayList<>(); + TableBodyData tableBodyData1 = new TableBodyData(); + TableBodyData tableBodyData2 = new TableBodyData(); + tableBodyData1.setName("鐢"); + tableBodyData2.setName("濂"); + + List data1 = new ArrayList<>(); + data1.add("37,031"); + data1.add("51.64%"); + List data2 = new ArrayList<>(); + data2.add("37,03"); + data2.add("51.6%"); + tableBodyData1.setData(data1); + tableBodyData2.setData(data2); + tableBodyDataList.add(tableBodyData1); + tableBodyDataList.add(tableBodyData2); + tabularDataVO1.setTableBodyDataList(tableBodyDataList); + dataList.add(tabularDataVO1); + + //瀛︽ + + TabularDataVO tabularDataVO2 = new TabularDataVO(); + tabularDataVO2.setFirstName("瀛︽"); + ArrayList tableBodyDataList1 = new ArrayList<>(); + TableBodyData tableBodyData3 = new TableBodyData(); + TableBodyData tableBodyData4 = new TableBodyData(); + tableBodyData3.setName("灏忓"); + tableBodyData4.setName("鍒濅腑"); + + List data3 = new ArrayList<>(); + data3.add("37,031"); + data3.add("51.64%"); + List data4 = new ArrayList<>(); + data4.add("37,03"); + data4.add("51.6%"); + tableBodyData3.setData(data3); + tableBodyData4.setData(data4); + tableBodyDataList1.add(tableBodyData3); + tableBodyDataList1.add(tableBodyData4); + tabularDataVO2.setTableBodyDataList(tableBodyDataList1); + dataList.add(tabularDataVO2); + + //缁勭粐鏈烘瀯 + TabularDataVO tabularDataVO3 = new TabularDataVO(); + tabularDataVO3.setFirstName("缁勭粐鏈烘瀯/甯傚尯"); + ArrayList tableBodyDataList2 = new ArrayList<>(); + TableBodyData tableBodyData5 = new TableBodyData(); + TableBodyData tableBodyData6 = new TableBodyData(); + tableBodyData5.setName("娴庡崡璺皬瀛"); + tableBodyData6.setName("绗簩瀹為獙灏忓"); + + List data5 = new ArrayList<>(); + data5.add("37,031"); + data5.add("51.64%"); + List data6 = new ArrayList<>(); + data6.add("37,03"); + data6.add("51.6%"); + tableBodyData5.setData(data5); + tableBodyData6.setData(data6); + tableBodyDataList2.add(tableBodyData5); + tableBodyDataList2.add(tableBodyData6); + tabularDataVO3.setTableBodyDataList(tableBodyDataList2); + dataList.add(tabularDataVO3); + + tableVO.setValues(dataList); + Document document = new Document(); + DocumentBuilder builder = new DocumentBuilder(document); + // 娣诲姞琛ㄥご骞惰缃牸寮 + List header = tableVO.getTitle(); + addTableHeader(builder, header); + + //璁剧疆琛ㄤ綋鐨勬牸寮 + setTableBodyFormat(builder); + // 鏍规嵁闆嗗悎寰幆娣诲姞鏁版嵁琛 + for (TabularDataVO collegeData : tableVO.getValues()) { + addDataRow(builder, collegeData); + } + // 缁撴潫琛ㄦ牸 + builder.endTable(); + //绉诲姩鍏夋爣鑷虫湯灏 + builder.moveToDocumentEnd(); + document.save("D:/saveFile/test/3333.docx"); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/ReplaceAndInsertNewTable.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/ReplaceAndInsertNewTable.java new file mode 100644 index 0000000000000000000000000000000000000000..54f8bb38e4fc368aead373d953875f62b034591e --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/ReplaceAndInsertNewTable.java @@ -0,0 +1,208 @@ +package com.ruoyi.common.utils.asPose; + +import com.aspose.words.*; +import org.springframework.util.CollectionUtils; + +import java.awt.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * @Author fuzhilin + * @Date 2021/12/2 0002 9:41 + * @Description + */ +public class ReplaceAndInsertNewTable implements IReplacingCallback { + private String key; + private GenerateTableVO tableVO; + + public ReplaceAndInsertNewTable(String key, GenerateTableVO tableVO) { + this.key = key; + this.tableVO = tableVO; + } + + @Override + public int replacing(ReplacingArgs e) throws Exception { + //鑾峰彇褰撳墠鑺傜偣 + Node currentNode = e.getMatchNode(); + //鑺傜偣鎷嗗垎澶勭悊褰撳墠鍖归厤瀛楁 + splitRun(currentNode, e.getMatchOffset()); + //鑾峰彇褰撳墠鏂囨。 + Document document = (Document) currentNode.getDocument(); + DocumentBuilder builder = new DocumentBuilder(document); + //灏嗗厜鏍囩Щ鍔ㄥ埌鎸囧畾鑺傜偣 + builder.moveTo(currentNode); + Table table = builder.startTable(); + + // 琛ㄥご + List title = tableVO.getTitle(); + List> values = tableVO.getValues(); + + double width = tableVO.getWidth(); + + // 娣诲姞琛ㄥご + table.getRows().add(createRow(title.size(), title.toArray(new String[title.size()]), document, false)); + // 娣诲姞鍙傛暟鍊 + for (int i = 0; i < values.size(); i++) { + List value = values.get(i); + if (value != null && !value.isEmpty()&&i!=1) { + table.getRows().add(createRow(value.size(), value.toArray(new String[value.size()]), document, false)); + }else{ + table.getRows().add(createRow(value.size(), value.toArray(new String[value.size()]), document, true)); + } + } + //濡傛灉涓嶄负绌 璇存槑闇瑕佸悎骞 + if (!CollectionUtils.isEmpty(tableVO.getMergeTableParamList())) { + AsposeUtil.MergeSpecifiedCells(document, tableVO.getMergeTableParamList()); + } + if (0 != width) { + table.setPreferredWidth(PreferredWidth.fromPoints(width)); + } + return ReplaceAction.SKIP; + } + + /** + * 鍒涘缓鍒 + * + * @param value + * @param doc + * @return + */ + static Cell createCell(String value, Document doc, boolean isHeader) { + Cell c1 = new Cell(doc); + Paragraph p = new Paragraph(doc); + Run r = new Run(doc, value); + r.getFont().setName("浠垮畫GB2312"); + r.getFont().setSize(14); + if (isHeader) { + r.getFont().setBold(true); + } else { + r.getFont().setBold(false); + } + p.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER); + p.appendChild(r); + c1.appendChild(p); + return c1; + } + + /** + * 鍒涘缓琛 + * + * @param columnCount + * @param columnValues + * @param doc + * @return + */ + static Row createRow(int columnCount, String[] columnValues, Document doc, boolean isHeader) { + Row r2 = new Row(doc); + /*r2.getRowFormat().setTopPadding(5d); + r2.getRowFormat().setBottomPadding(5d);*/ + for (int i = 0; i < columnCount; i++) { + if (columnValues.length > i) { + Cell cell = createCell(columnValues[i], doc, isHeader); + r2.getCells().add(cell); + cell.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); + } else { + Cell cell = createCell("", doc, isHeader); + r2.getCells().add(cell); + cell.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); + } + + } + return r2; + } + + /** + * 鏇挎崲鍙傛暟浣嶇疆 + * + * @param currentNode + * @param position + */ + private void splitRun(Node currentNode, int position) { + String text = currentNode.getText(); + Node newNode = currentNode.deepClone(true); + if (text.length() >= position + this.key.length()) { + ((Run) currentNode).setText(text.substring(position + this.key.length())); + } else { + int morlength = position + this.key.length() - text.length(); + ((Run) currentNode).setText(""); + Node tmpnode = currentNode; + for (int i = 0; i < this.key.length(); i++) { + tmpnode = tmpnode.getNextSibling(); + String tmptext = tmpnode.getText(); + + if (tmptext.length() >= morlength) { + ((Run) tmpnode).setText(tmptext.substring(morlength)); + break; + } else { + morlength = morlength - tmptext.length(); + ((Run) tmpnode).setText(""); + } + } + } + if (position > 0) { + ((Run) newNode).setText(text.substring(0, position)); + currentNode.getParentNode().insertBefore(newNode, currentNode); + } + } + + /** + * 璁剧疆琛ㄤ綋鐨勬牸寮 + */ + public static void setTableBodyFormat(DocumentBuilder builder) throws Exception { + //娓呴櫎鏍煎紡 + builder.getCellFormat().clearFormatting(); + //璁剧疆鍗曞厓鏍煎瀭鐩 + builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); + //鍗曞厓鏍艰儗鏅鑹茶缃 + builder.getCellFormat().getShading().setBackgroundPatternColor(new Color(253, 253, 253, 255)); + //鍗曞厓鏍艰竟妗嗛鑹茶缃 + builder.getRowFormat().getBorders().setColor(new Color(1, 1, 1)); + //璁剧疆瀛椾綋棰滆壊 + builder.getFont().setColor(new Color(1, 1, 1)); + //杩欒浠g爜绂佺敤鍗曞厓鏍间腑鐨勬枃鏈嚜鍔ㄦ崲琛屽姛鑳 + builder.getCellFormat().setWrapText(false); + } + + public static void main(String[] args) throws Exception { + GenerateTableVO generateTableVO = new GenerateTableVO(); + generateTableVO.setTitle(Arrays.asList("", "蹇冪悊鍋ュ悍鐘跺喌涓嶄匠", "蹇冪悊鍋ュ悍鐘跺喌涓嶄匠")); + ArrayList> lists = new ArrayList<>(); + lists.add(Arrays.asList("", "浜烘暟", "鍗犳瘮")); + lists.add(Arrays.asList("灏忓", "75", "12%")); + lists.add(Arrays.asList("鍒濅腑", "65", "11%")); + lists.add(Arrays.asList("澶у", "122", "23%")); + generateTableVO.setValues(lists); + ArrayList mergeTableParamVOS = new ArrayList<>(); + MergeTableParamVO paramVO = new MergeTableParamVO(); + paramVO.setBorderType(BorderType.DIAGONAL_DOWN); + mergeTableParamVOS.add(new MergeTableParamVO().setStartLine(0).setStartColumn(0).setEndLine(1).setEndColumn(0)); + mergeTableParamVOS.add(new MergeTableParamVO().setStartLine(0).setStartColumn(1).setEndLine(0).setEndColumn(2)); + generateTableVO.setMergeTableParamList(mergeTableParamVOS); + + + // 瀹炰緥鍖栦竴涓猟ocument瀵硅薄 + Document document = new Document(); + // 鍒涘缓涓涓狣ocumentBuilder绫荤殑瀵硅薄锛屽苟浣跨敤Document瀵硅薄瀵瑰叾杩涜鍒濆鍖 + DocumentBuilder builder = new DocumentBuilder(document); + // 琛ㄥご + List title = generateTableVO.getTitle(); + List> values = generateTableVO.getValues(); + Table table = builder.startTable(); + // 娣诲姞琛ㄥご + table.getRows().add(createRow(title.size(), title.toArray(new String[title.size()]), document, true)); + // 娣诲姞鍙傛暟鍊 + for (int i = 0; i < values.size(); i++) { + List value = values.get(i); + if (value != null && !value.isEmpty()) { + table.getRows().add(createRow(value.size(), value.toArray(new String[value.size()]), document, false)); + } + } + //濡傛灉涓嶄负绌 璇存槑闇瑕佸悎骞 + if (!CollectionUtils.isEmpty(generateTableVO.getMergeTableParamList())) { + AsposeUtil.MergeSpecifiedCells(document, generateTableVO.getMergeTableParamList()); + } + document.save("D://saveFile//鍚堝苟//hebing1.docx"); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/ReplaceAndInsertTable.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/ReplaceAndInsertTable.java new file mode 100644 index 0000000000000000000000000000000000000000..f3fb9519b8c9da1d0cfcbc14254b8fc51646265f --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/ReplaceAndInsertTable.java @@ -0,0 +1,257 @@ +package com.ruoyi.common.utils.asPose; + +import cn.hutool.core.util.ObjectUtil; +import com.aspose.words.*; +import org.springframework.util.CollectionUtils; + +import java.awt.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * @Author fuzhilin + * @Date 2021/12/2 0002 9:41 + * @Description + */ +public class ReplaceAndInsertTable implements IReplacingCallback { + private String key; + private GenerateTableVO tableVO; + + public ReplaceAndInsertTable(String key, GenerateTableVO tableVO) { + this.key = key; + this.tableVO = tableVO; + } + + @Override + public int replacing(ReplacingArgs e) throws Exception { + //鑾峰彇褰撳墠鑺傜偣 + Node currentNode = e.getMatchNode(); + //鑺傜偣鎷嗗垎澶勭悊褰撳墠鍖归厤瀛楁 + splitRun(currentNode, e.getMatchOffset()); + //鑾峰彇褰撳墠鏂囨。 + Document document = (Document) currentNode.getDocument(); + DocumentBuilder builder = new DocumentBuilder(document); + //灏嗗厜鏍囩Щ鍔ㄥ埌鎸囧畾鑺傜偣 + builder.moveTo(currentNode); + Table table = builder.startTable(); + + // 琛ㄥご + List title = tableVO.getTitle(); + List> values = tableVO.getValues(); + + double width = tableVO.getWidth(); + + // 娣诲姞琛ㄥご + //table.getRows().add(createRow(title.size(), title.toArray(new String[title.size()]), document, true)); + addTableHeader(builder,title); + // 娣诲姞鍙傛暟鍊 + for (int i = 0; i < values.size(); i++) { + List value = values.get(i); + if (value != null && !value.isEmpty()) { + table.getRows().add(createRow(value.size(), value.toArray(new String[value.size()]), document, false)); + } + } + if (ObjectUtil.isNotNull(tableVO.getLine())){ + Row targetRow = table.getRows().get(tableVO.getLine()); + for (Cell cell : targetRow.getCells()) { + cell.getCellFormat().getShading().setBackgroundPatternColor(new Color(179, 202, 229)); + } + } + //濡傛灉涓嶄负绌 璇存槑闇瑕佸悎骞 + if (!CollectionUtils.isEmpty(tableVO.getMergeTableParamList())) { + AsposeUtil.MergeSpecifiedCells(document, tableVO.getMergeTableParamList()); + } + if (0 != width) { + table.setPreferredWidth(PreferredWidth.fromPoints(width)); + } + return ReplaceAction.SKIP; + } + + /** + * 娣诲姞琛ㄥご + */ + private static void addTableHeader(DocumentBuilder builder, List headers) throws Exception { + //娈佃惤鐨勫榻愭柟寮忚缃负灞呬腑瀵归綈 + builder.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER);/**灞呬腑***/ + //鏂规硶灏嗘竻闄ゅ崟鍏冩牸鐨勬墍鏈夋牸寮忚缃紝鍖呮嫭瀛椾綋銆侀鑹层佽竟妗嗙瓑銆傚鏋滄偍鍙兂娓呴櫎鐗瑰畾鐨勬牸寮忚缃紝鍙互浣跨敤鍏朵粬閫傚綋鐨勬柟娉曪紝渚嬪clearFormatting()鏂规硶鐨勯噸杞界増鏈紝璇ョ増鏈帴鍙椾竴涓弬鏁帮紝鐢ㄤ簬鎸囧畾瑕佹竻闄ょ殑鏍煎紡璁剧疆绫诲瀷銆 + builder.getCellFormat().clearFormatting(); + //璁剧疆鍗曞厓鏍肩殑瀹藉害 纾咃紙points锛夈 + builder.getCellFormat().setWidth(70.0); + //杩欏彧鍗曞厓鏍肩殑楂樺害 纾咃紙points锛夈 + builder.getRowFormat().setHeight(25.0); + //璁剧疆鍗曞厓鏍煎瀭鐩 + builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); + //鍗曞厓鏍艰儗鏅鑹茶缃 + builder.getCellFormat().getShading().setBackgroundPatternColor(new Color(179, 202, 229)); + //鍗曞厓鏍艰竟妗嗛鑹茶缃 + builder.getRowFormat().getBorders().setColor(new Color(1, 1, 1)); + //璁剧疆瀛椾綋棰滆壊 + builder.getFont().setColor(new Color(1, 1, 1)); + //杩欒浠g爜绂佺敤鍗曞厓鏍间腑鐨勬枃鏈嚜鍔ㄦ崲琛屽姛鑳 + builder.getCellFormat().setWrapText(false); + //杩欒浠g爜鍚敤鍗曞厓鏍间腑鏂囨湰鐨勮嚜鍔ㄧ缉鏀句互閫傚簲鍗曞厓鏍煎ぇ灏忋 + //builder.getCellFormat().setFitText(true); + //杩欒浠g爜璁剧疆琛岀殑楂樺害瑙勫垯涓虹簿纭笺 + //builder.getRowFormat().setHeightRule(HeightRule.EXACTLY); + //杩欒浠g爜璁剧疆琛岀殑杈规绾挎牱寮忎负娴洉3D鏁堟灉銆 + //builder.getRowFormat().getBorders().setLineStyle(LineStyle.ENGRAVE_3_D); + for (String header : headers) { + builder.insertCell(); + builder.write(header); + } + builder.endRow(); + } + + /** + * 鍒涘缓鍒 + * + * @param value + * @param doc + * @return + */ + static Cell createCell(String value, Document doc, boolean isHeader) { + Cell c1 = new Cell(doc); + Paragraph p = new Paragraph(doc); + Run r = new Run(doc, value); + r.getFont().setName("浠垮畫GB2312"); + r.getFont().setSize(14); + if (isHeader||"绛涙煡鍐呭".equals(value)) { + if("瀛︾敓濮撳悕".equals(value)){ + r.getFont().setBold(false); + }else{ + r.getFont().setBold(true); + } + } else { + r.getFont().setBold(false); + } + p.getParagraphFormat().setAlignment(ParagraphAlignment.CENTER); + p.appendChild(r); + c1.appendChild(p); + return c1; + } + + /** + * 鍒涘缓琛 + * + * @param columnCount + * @param columnValues + * @param doc + * @return + */ + static Row createRow(int columnCount, String[] columnValues, Document doc, boolean isHeader) { + Row r2 = new Row(doc); + /*r2.getRowFormat().setTopPadding(5d); + r2.getRowFormat().setBottomPadding(5d);*/ + for (int i = 0; i < columnCount; i++) { + if (columnValues.length > i) { + Cell cell = createCell(columnValues[i], doc, isHeader); + r2.getCells().add(cell); + cell.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); + } else { + Cell cell = createCell("", doc, isHeader); + r2.getCells().add(cell); + cell.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); + } + + } + return r2; + } + + /** + * 鏇挎崲鍙傛暟浣嶇疆 + * + * @param currentNode + * @param position + */ + private void splitRun(Node currentNode, int position) { + String text = currentNode.getText(); + Node newNode = currentNode.deepClone(true); + if (text.length() >= position + this.key.length()) { + ((Run) currentNode).setText(text.substring(position + this.key.length())); + } else { + int morlength = position + this.key.length() - text.length(); + ((Run) currentNode).setText(""); + Node tmpnode = currentNode; + for (int i = 0; i < this.key.length(); i++) { + tmpnode = tmpnode.getNextSibling(); + String tmptext = tmpnode.getText(); + if (tmptext.length() >= morlength) { + ((Run) tmpnode).setText(tmptext.substring(morlength)); + break; + } else { + morlength = morlength - tmptext.length(); + ((Run) tmpnode).setText(""); + } + } + } + if (position > 0) { + ((Run) newNode).setText(text.substring(0, position)); + currentNode.getParentNode().insertBefore(newNode, currentNode); + } + } + + /** + * 璁剧疆琛ㄤ綋鐨勬牸寮 + */ + public static void setTableBodyFormat(DocumentBuilder builder) throws Exception { + //娓呴櫎鏍煎紡 + builder.getCellFormat().clearFormatting(); + //璁剧疆鍗曞厓鏍煎瀭鐩 + builder.getCellFormat().setVerticalAlignment(CellVerticalAlignment.CENTER); + //鍗曞厓鏍艰儗鏅鑹茶缃 + builder.getCellFormat().getShading().setBackgroundPatternColor(new Color(253, 253, 253, 255)); + //鍗曞厓鏍艰竟妗嗛鑹茶缃 + builder.getRowFormat().getBorders().setColor(new Color(1, 1, 1)); + //璁剧疆瀛椾綋棰滆壊 + builder.getFont().setColor(new Color(1, 1, 1)); + //杩欒浠g爜绂佺敤鍗曞厓鏍间腑鐨勬枃鏈嚜鍔ㄦ崲琛屽姛鑳 + builder.getCellFormat().setWrapText(false); + } + + public static void main(String[] args) throws Exception { + GenerateTableVO generateTableVO = new GenerateTableVO(); + generateTableVO.setTitle(Arrays.asList("", "蹇冪悊鍋ュ悍鐘跺喌涓嶄匠", "蹇冪悊鍋ュ悍鐘跺喌涓嶄匠")); + ArrayList> lists = new ArrayList<>(); + lists.add(Arrays.asList("", "浜烘暟", "鍗犳瘮")); + lists.add(Arrays.asList("灏忓", "75", "12%")); + lists.add(Arrays.asList("鍒濅腑", "65", "11%")); + lists.add(Arrays.asList("澶у", "122", "23%")); + generateTableVO.setValues(lists); + ArrayList mergeTableParamVOS = new ArrayList<>(); + MergeTableParamVO paramVO = new MergeTableParamVO(); + paramVO.setBorderType(BorderType.DIAGONAL_DOWN); + mergeTableParamVOS.add(new MergeTableParamVO().setStartLine(0).setStartColumn(0).setEndLine(1).setEndColumn(0)); + mergeTableParamVOS.add(new MergeTableParamVO().setStartLine(0).setStartColumn(1).setEndLine(0).setEndColumn(2)); + generateTableVO.setMergeTableParamList(mergeTableParamVOS); + + + // 瀹炰緥鍖栦竴涓猟ocument瀵硅薄 + Document document = new Document(); + // 鍒涘缓涓涓狣ocumentBuilder绫荤殑瀵硅薄锛屽苟浣跨敤Document瀵硅薄瀵瑰叾杩涜鍒濆鍖 + DocumentBuilder builder = new DocumentBuilder(document); + // 琛ㄥご + List title = generateTableVO.getTitle(); + List> values = generateTableVO.getValues(); + Table table = builder.startTable(); + // 娣诲姞琛ㄥご + //table.getRows().add(createRow(title.size(), title.toArray(new String[title.size()]), document, true)); + addTableHeader(builder,title); + // 娣诲姞鍙傛暟鍊 + for (int i = 0; i < values.size(); i++) { + List value = values.get(i); + if (value != null && !value.isEmpty()) { + table.getRows().add(createRow(value.size(), value.toArray(new String[value.size()]), document, false)); + } + } + Row targetRow = table.getRows().get(1); + for (Cell cell : targetRow.getCells()) { + cell.getCellFormat().getShading().setBackgroundPatternColor(Color.YELLOW); + } + //濡傛灉涓嶄负绌 璇存槑闇瑕佸悎骞 + if (!CollectionUtils.isEmpty(generateTableVO.getMergeTableParamList())) { + AsposeUtil.MergeSpecifiedCells(document, generateTableVO.getMergeTableParamList()); + } + document.save("D://saveFile//鍚堝苟//hebing1.docx"); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/TableBodyData.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/TableBodyData.java new file mode 100644 index 0000000000000000000000000000000000000000..b57d18547a23d196544cd8abd79c5a5aef407ef4 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/TableBodyData.java @@ -0,0 +1,24 @@ +package com.ruoyi.common.utils.asPose; + +import lombok.Data; + +import java.util.List; + +/** + * @Author haoxuyang + * @Date 2024/4/14 0:09 + */ +@Data +public class TableBodyData { + + /** + * 绗簩鍒楀悕绉 + */ + private String name; + + /** + * 鏁版嵁 + */ + private List data; + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/TabularDataVO.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/TabularDataVO.java new file mode 100644 index 0000000000000000000000000000000000000000..f582bbc8a94769bd32bcc4027de9f5200c7f6c46 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/TabularDataVO.java @@ -0,0 +1,23 @@ +package com.ruoyi.common.utils.asPose; + + +import lombok.Data; + +import java.util.List; + +/** + * @Author haoxuyang + * @Date 2024/4/14 0:08 + */ +@Data +public class TabularDataVO { + /** + * 琛ㄦ牸绗竴鍒楃殑鍚嶇О + */ + private String firstName; + + /** + * 鏁版嵁 + */ + private List tableBodyDataList; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/Test1.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/Test1.java new file mode 100644 index 0000000000000000000000000000000000000000..07c3b1fcf6f1a119d1b2966682482c809510f5de --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/Test1.java @@ -0,0 +1,190 @@ +package com.ruoyi.common.utils.asPose; + +import com.aspose.words.*; +import lombok.Data; +import lombok.experimental.Accessors; +import lombok.var; + +import java.awt.*; +import java.util.ArrayList; +import java.util.List; + +import static com.ruoyi.common.utils.asPose.AsposeUtil.judgeLicense; + +/** + * @Author haoxuyang + * @Date 2024/4/17 22:54 + */ +public class Test1 { + @Data + @Accessors(chain = true) + public static class tt { + + private int borderType; + + //寮濮嬭 + private int startLine; + + //寮濮嬪垪 + private int startColumn; + + //缁撴潫琛 + private int endLine; + + //缁撴潫鍒 + private int endColumn; + } + + public static void hh(Document doc) throws Exception { + + List tts = new ArrayList<>(); + tts.add(new tt().setStartLine(0).setStartColumn(0).setEndLine(1).setEndColumn(0)); + tts.add(new tt().setStartLine(0).setStartColumn(1).setEndLine(0).setEndColumn(2)); + +// Retrieve the first table in the body of the first section. + Table table = doc.getFirstSection().getBody().getTables().get(0); + + for (tt tt : tts) { + Cell cellStartRange = table.getRows().get(tt.getStartLine()).getCells().get(tt.getStartColumn()); + Cell cellEndRange = table.getRows().get(tt.getEndLine()).getCells().get(tt.getEndColumn()); + MergeCells(cellStartRange, cellEndRange); + Border byBorderType1 = cellStartRange.getCellFormat().getBorders().getByBorderType(BorderType.DIAGONAL_UP); + byBorderType1.setColor(Color.black); + byBorderType1.setLineWidth(1); + } + +// We want to merge the range of cells found inbetween these two cells. +// Merge all the cells between the two specified cells into one. + +// Save the document. + doc.save("D://saveFile//鍚堝苟//hebing.docx"); + } + + public static void MergeCells(Cell startCell, Cell endCell) { + Table parentTable = startCell.getParentRow().getParentTable(); + + // Find the row and cell indices for the start and end cell. + Point startCellPos = new Point(startCell.getParentRow().indexOf(startCell), parentTable.indexOf(startCell.getParentRow())); + Point endCellPos = new Point(endCell.getParentRow().indexOf(endCell), parentTable.indexOf(endCell.getParentRow())); + // Create the range of cells to be merged based off these indices. Inverse each index if the end cell if before the start cell. + Rectangle mergeRange = new Rectangle(Math.min(startCellPos.x, endCellPos.x), Math.min(startCellPos.y, endCellPos.y), Math.abs(endCellPos.x - startCellPos.x) + 1, Math.abs(endCellPos.y - startCellPos.y) + 1); + for (Row row : parentTable.getRows()) { + for (Cell cell : row.getCells()) { + Point currentPos = new Point(row.indexOf(cell), parentTable.indexOf(row)); + + // Check if the current cell is inside our merge range then merge it. + if (mergeRange.contains(currentPos)) { + if (currentPos.x == mergeRange.x) { + cell.getCellFormat().setHorizontalMerge(CellMerge.FIRST); + } else { + cell.getCellFormat().setHorizontalMerge(CellMerge.PREVIOUS); + } + if (currentPos.y == mergeRange.y) { + cell.getCellFormat().setVerticalMerge(CellMerge.FIRST); + } else { + cell.getCellFormat().setVerticalMerge(CellMerge.PREVIOUS); + } + } + } + } + + } + + public static void main(String[] args) throws Exception { + if (!judgeLicense()) { + System.out.println("license閿欒"); + } + + try { + // 娌℃湁鍩轰簬妯℃澘鍒涘缓word + Document doc = new Document(); + // 寤虹珛DocumentBuilder鐗╀欢 + DocumentBuilder builder = new DocumentBuilder(doc); + // 璁剧疆绾稿紶甯冨眬 + builder.getPageSetup().setPaperSize(PaperSize.LETTER); + builder.getRowFormat().getBorders().setLineStyle(LineStyle.THICK); + builder.getRowFormat().setHeightRule(HeightRule.AUTO); + // 涓琛岄棿璺1.0绛変簬12鐐广傛墍浠1.5琛=18鐐 + builder.getParagraphFormat().setLineSpacing(18); // 璁剧疆琛岄棿璺 + + setZzt(builder); + + + doc.save("D://saveFile//test//WorkingWithCharts.DefaultOptionsForDataLabels.docx"); + } catch (Exception e) { + e.printStackTrace(); + } + + } + + /** + * 鏌辩姸鍥 + * + * @param builder + */ + private static void setZzt(DocumentBuilder builder) { + // 绫诲埆 + String[] categories = new String[] + { + "绫诲埆1", "绫诲埆2", "绫诲埆3" + }; + // 鍊 + double[] values = new double[] + { + 100, 50, 300 + }; + String title = "涓夊ぇ绫荤被鍗犳瘮"; + addPieChart(builder, ChartType.COLUMN, title, categories, values); +// addPieChart(builder, ChartType.AREA, title, categories, values); + } + + /** + * 鍔犺浇缁熻鍥 + * + * @param builder + * @param chatType 缁熻鍥剧被鍨 + * @param title 缁熻鍥炬爣棰 + * @param categories 缁熻鍥惧瓧娈 + * @param values 缁熻鍥惧瓧娈垫暟鎹 + */ + private static void addPieChart (DocumentBuilder builder,int chatType, String title, String[]categories, + double[] values){ + builder.getParagraphFormat().setFirstLineIndent(0); + builder.writeln(""); + try { + var shape = builder.insertChart(chatType, 432, 252); + shape.setVerticalAlignment(VerticalAlignment.CENTER); + shape.setHorizontalAlignment(HorizontalAlignment.CENTER); + shape.setAllowOverlap(false); // 涓嶈鐩 + Chart chart = shape.getChart(); + ChartSeriesCollection seriesCollection = chart.getSeries(); + seriesCollection.clear(); // 娓呴櫎榛樿 + chart.getLegend().setPosition(LegendPosition.BOTTOM); // 鏄剧ず鍦ㄤ笅闈 + // 娣诲姞鏁版嵁 + var ct = chart.getTitle(); + ct.setOverlay(false); // 涓嶈鐩 + var cl = chart.getLegend(); + cl.setOverlay(false); // 涓嶈鐩 + var chatSeries = seriesCollection.add(title, categories, values); + // 璁剧疆鏁版嵁鏄剧ず + ChartDataLabelCollection dataLabelCollection = chatSeries.getDataLabels(); + for (int i = 0; i < dataLabelCollection.getCount(); i++) { + ChartDataLabel chartDataLabel = dataLabelCollection.get(i); + chartDataLabel.setShowLegendKey(true); + chartDataLabel.setShowLeaderLines(false); + chartDataLabel.setShowCategoryName(true); + chartDataLabel.setShowPercentage(true); + chartDataLabel.setShowSeriesName(false); + chartDataLabel.setShowValue(true); + chartDataLabel.setSeparator("\r\n"); + chartDataLabel.getNumberFormat().setFormatCode("0.00%"); // 璁剧疆鏁板瓧鏍煎紡 + } + chatSeries.setSmooth(true); + builder.writeln(""); + builder.getParagraphFormat().setFirstLineIndent(2); + } catch (Exception e) { + e.printStackTrace(); + } + } + + } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/Test2.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/Test2.java new file mode 100644 index 0000000000000000000000000000000000000000..8b21d49b812d860ce51b5676b3d8b838e23a5bd2 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/Test2.java @@ -0,0 +1,92 @@ +package com.ruoyi.common.utils.asPose; + +import com.aspose.words.Shape; +import com.aspose.words.*; + +import java.awt.*; +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * @Author haoxuyang + * @Date 2024/4/17 22:54 + */ +public class Test2 { + public static void main(String[] args) throws Exception { + AsposeUtil.registerWord(); + //閫氳繃Document绌虹殑鏋勯犲嚱鏁帮紝鍒涘缓涓涓柊鐨勭┖鐨勬枃妗,濡傛灉鏈夊弬鏁板垯鏄牴鎹ā鏉垮姞杞芥枃妗c + Document doc = new Document("D://12312.docx"); + //鍔ㄦ佸鍔犲唴瀹 鑾峰彇鍏夋爣锛岃繖閲岄潰鐨刞builder`鐩稿綋浜庝竴涓敾绗旓紝鎻愬墠缁欎粬瑙勫畾鏍峰紡锛岀劧鍚庝粬灏辫兘鏍规嵁浣犵殑瑕佹眰鐢诲嚭浣犳兂鐢荤殑Word銆傝繖閲岀殑鐢荤瑪浣跨敤鐨勬槸灏辫繎鍘熷垯锛屽綋涓婇潰娌℃湁瀹氫箟浜哹uilder鐨勬椂鍊欙紝浼氫娇鐢ㄩ粯璁ょ殑鏍煎紡锛屽綋涓婇潰瀹氫箟浜嗘煇涓牸寮忕殑鏃跺欙紝浣跨敤鏈杩戠殑涓涓紙鍗虫渶鍚庝竴涓敼鍙樼殑鏍峰紡锛 + DocumentBuilder builder = new DocumentBuilder(doc); + //灏嗗厜鏍囩Щ鍔ㄥ埌鏂囨。鏈 + builder.moveToDocumentEnd(); + //鍒嗛〉 + builder.insertBreak(BreakType.PAGE_BREAK); + //鎹㈣ + builder.insertParagraph(); + + String[] label = new String[]{"鐢蜂汉鏁","濂充汉鏁","鏈煡浜烘暟"}; + double[] value = new double[]{75.0,21.5,3.6}; + //浣跨敤鐜囩殑鍦嗙幆鍥 + addDrawDoughnutChart(builder,ChartType.DOUGHNUT,"鐢峰コ姣斾緥",true,label,value,true,new Color[]{new Color(147,205,221),new Color(250,192,144),new Color(230,224,236)}); + //浣跨敤鏁板肩殑鍦嗙幆鍥 + builder.insertParagraph(); + addDrawDoughnutChart(builder,ChartType.DOUGHNUT,"鐢峰コ姣斾緥",false,label,value,true,new Color[]{new Color(147,205,221),new Color(250,192,144),new Color(230,224,236)}); + //浣跨敤榛樿棰滆壊鐨勫渾鐜浘 + builder.insertParagraph(); + addDrawDoughnutChart(builder,ChartType.DOUGHNUT,"鐢峰コ姣斾緥",false,label,value,false,new Color[]{new Color(147,205,221),new Color(250,192,144),new Color(230,224,236)}); + + //鏂囦欢鍛藉悕 + String fileName = "D://AsposeWord1"+new SimpleDateFormat("MMddHHmmss").format(new Date())+".docx"; + //鏂囦欢淇濆瓨 + doc.save(fileName); + } + + + /** + * 鎻掑叆 鍦嗙幆鍥炬垨鑰呴ゼ鍥 ChartType.DOUGHNUT ChartType.PIE + * 鍏朵粬鍥惧舰鍦ㄨ鏂规硶涓笉閫傜敤 + * */ + public static void addDrawDoughnutChart(DocumentBuilder builder,Integer ChartType, String title, Boolean showPercent,String[] label, double[] value,Boolean colors,Color[] customColors) throws Exception { + // 鍒涘缓鍥惧舰 + Shape shape = builder.insertChart(ChartType, 432, 252); + // 璁剧疆鍥捐〃褰㈢姸鐨勫叾浠栧睘鎬э紝濡俉rapSide銆乄rapType銆乂erticalAlignment绛 + shape.setWrapSide(WrapSide.BOTH); + shape.setWrapType(WrapType.TOP_BOTTOM); + shape.setVerticalAlignment(VerticalAlignment.CENTER); + shape.setHorizontalAlignment(HorizontalAlignment.CENTER); + shape.setAllowOverlap(false); + shape.getStroke().setColor(new Color(221, 221, 221)); // 璁剧疆绾挎潯棰滆壊 + shape.getFill().setColor(new Color(222, 235, 247)); // 璁剧疆濉厖棰滆壊 + Chart chart = shape.getChart(); + ChartSeriesCollection seriesColl = chart.getSeries(); + seriesColl.clear(); + //鍚戝舰鐘朵腑娣诲姞鏁版嵁 + ChartSeries chartSeries = seriesColl.add(title, label, value); + if (colors){ + for (int i = 0; i < label.length; i++) { + // 璁剧疆绯诲垪鐨勫~鍏呴鑹蹭负鑷畾涔夐鑹叉暟缁勪腑鐨勫搴旈鑹 + chartSeries.getDataPoints().get(i).getFormat().getFill().setForeColor(customColors[i]); + } + } + // 鐢ㄤ簬鍚敤鎴栫鐢ㄥ浘琛ㄧ郴鍒楃殑鏁版嵁鏍囩 + seriesColl.get(0).hasDataLabels(true); + // 鏍规嵁鍙傛暟 showPercent 鍐冲畾鏄惁鏄剧ず鐧惧垎姣旓紝濡傛灉涓 true锛屽垯鏄剧ず鐧惧垎姣旓紱鍚﹀垯锛屾樉绀篩杞村笺 + ChartDataLabelCollection dataLabelCollection = seriesColl.get(0).getDataLabels(); + + if (showPercent) { + dataLabelCollection.setShowPercentage(true);// 鍒欐樉绀虹櫨鍒嗘瘮 + } else { + dataLabelCollection.setShowValue(true);// 鏄剧ずY杞村笺 + } + // 璁剧疆鏁版嵁鏍囩鐨勫垎闅旂涓烘崲琛岀锛屽嵆姣忎釜鏍囩鏄剧ず鍦ㄤ竴琛屻 + dataLabelCollection.setSeparator("\r\n"); + dataLabelCollection.setShowLegendKey(true); // 鏄惁鏄剧ず鍥句緥 + dataLabelCollection.setShowCategoryName(true);//鏄惁鏄剧ず绯诲垪鐨勫悕绉板湪绯诲垪鏃佽竟 + dataLabelCollection.setShowLeaderLines(false); + dataLabelCollection.setShowSeriesName(false);//鏄惁灏嗗浘褰㈡爣棰樻樉绀哄湪绯诲垪鍚嶇О涓 + dataLabelCollection.setShowBubbleSize(false); + // 璁剧疆娈佃惤鏍煎紡鐨勯琛岀缉杩涗负5涓 + builder.getParagraphFormat().setFirstLineIndent(5); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/WatermarkUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/WatermarkUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..59fa1e94a2dbfe5b62ae0101b25a50818b08f2d7 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/asPose/WatermarkUtil.java @@ -0,0 +1,195 @@ +package com.ruoyi.common.utils.asPose; + +import com.aspose.words.Shape; +import com.aspose.words.*; +import org.apache.commons.lang3.StringUtils; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.util.Random; + +/** + * @Author fuzhilin + * @Date 2021/1/7 0007 16:58 + * @Description 姘村嵃宸ュ叿绫 + */ +public class WatermarkUtil { + /** + * 姘村嵃姣忎釜瀛椾綋鐨勫搴︿负10 + */ + private final static int WATERMARK_FONT_WIDTH = 5; + /** + * 姘村嵃姣忎釜瀛椾綋鐨勯珮搴︿负16 + */ + private final static int WATERMARK_FONT_HEIGHT = 14; + /** + * 姘村嵃鍥剧墖鐨勯粯璁ら珮搴︿负20 + */ + private final static double WATERMARK_IMG_HEIGHT = 20d; + /** + * 姘村嵃鍊炬枩瑙掑害 榛樿鏄50 涓轰繚璇佹枃瀛楄繛缁у敖閲忎笉瑕佷慨鏀 + */ + private final static int WATERMARK_FONT_ROTATION = -50; + /** + * 姘村嵃瀛椾綋棰滆壊 + */ + private static Color watermark_color = new Color(217, 226, 243); + + /** + * word鏂囨。鎻掑叆鍥剧墖姘村嵃 + * + * @param doc 鏂囨。瀵硅薄 + * @param imgPath 鍥剧墖璺緞 + * @throws Exception + */ + public static void insertWatermarkImg(Document doc, String imgPath) throws Exception { + if (StringUtils.isEmpty(imgPath)) { + System.out.println("娌℃湁閰嶇疆姘村嵃鍥剧墖, 鏃犳硶涓烘枃妗e姞鍏ユ按鍗"); + return; + } + Paragraph watermarkPara = new Paragraph(doc); + // TODO 杩欓噷鐨勬暟鎹 璁$畻姘村嵃涓暟(900 150 700 150) 棣栦釜姘村嵃浣嶇疆(-200鑷-100)閮芥槸瀹為獙寰楀埌 娌℃湁鐞嗚渚濇嵁 + for (int top = 0; top < 900; top += 150) { + int beginLeft = new Random().ints(-100, -50).limit(1).findFirst().getAsInt(); + for (int left = beginLeft; left < 700; left += 150) { + Shape waterShape = buildImgShape(doc, imgPath, left, top); + watermarkPara.appendChild(waterShape); + } + } + // 鍦ㄦ瘡涓儴鍒嗕腑锛屾渶澶氬彲浠ユ湁涓変釜涓嶅悓鐨勬爣棰橈紝鍥犱负鎴戜滑鎯宠鍑虹幇鍦ㄦ墍鏈夐〉闈笂鐨勬按鍗帮紝鎻掑叆鍒版墍鏈夋爣棰樹腑銆 + for (Section sect : doc.getSections()) { + // 姣忎釜鍖烘鍙兘鏈夊杈句笁涓笉鍚岀殑鏍囬锛屽洜涓烘垜浠笇鏈涙墍鏈夐〉闈笂閮芥湁姘村嵃锛屽皢鎵鏈夌殑澶存彃鍏ャ + insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_PRIMARY); + insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_FIRST); + insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_EVEN); + } + } + + /** + * 鏋勫缓鍥剧墖shape绫 + * + * @param doc 鏂囨。瀵硅薄 + * @param imgPath 鍥剧墖鏂囦欢璺緞 + * @param left 宸﹁竟璺 + * @param top 涓婅竟璺 + */ + private static Shape buildImgShape(Document doc, String imgPath, int left, int top) { + Shape shape = new Shape(doc, ShapeType.IMAGE); + try { + BufferedImage sourceImg = ImageIO.read(WatermarkUtil.class.getClassLoader().getResourceAsStream(imgPath)); + shape.getImageData().setImage(sourceImg); + shape.setWidth(120); + shape.setHeight(50); + shape.setRotation(WATERMARK_FONT_ROTATION); + shape.setLeft(left); + shape.setTop(top); + shape.setWrapType(WrapType.NONE); + } catch (Exception e) { + throw new RuntimeException("鍥剧墖闄勪欢涓㈠け, 鏃犳硶鐢熸垚姘村嵃!", e); + } + return shape; + } + + /** + * 涓簑ord鏂囨。鎻掑叆鏂囨湰姘村嵃 + * + * @param doc 鏂囨。瀵硅薄 + * @param watermarkText 鏂囨湰鍐呭 + * @throws Exception + */ + public static void insertWatermarkText(Document doc, String watermarkText) throws Exception { + if (StringUtils.isEmpty(watermarkText)) { + System.out.println("娌℃湁閰嶇疆姘村嵃鍐呭, 鏃犳硶涓烘枃妗e姞鍏ユ按鍗"); + return; + } + Paragraph watermarkPara = new Paragraph(doc); + // TODO 杩欓噷鐨勬暟鎹 璁$畻姘村嵃涓暟(900 150 700 150) 棣栦釜姘村嵃浣嶇疆(-200鑷-100)閮芥槸瀹為獙寰楀埌 娌℃湁鐞嗚渚濇嵁 + for (int top = 0; top < 900; top += 300) { + int beginLeft = new Random().ints(-400, -200).limit(1).findFirst().getAsInt(); + for (int left = beginLeft; left < 700; left += 300) { + // 濡傛灉鏄乏璧风涓涓按鍗板垯閫氳繃瀛楃涓叉埅鍙栬揪鍒伴殢鏈烘樉绀烘按鍗扮殑鐩殑 + // 杩欐牱鍋氱殑鍘熷洜涓轰簡淇濊瘉鍊炬枩鐨勮淇濊瘉瀵归綈 鍙堣兘琛ㄧ幇闅忔満鐨勭壒鎬 涓嶆槸濂藉姙娉 + if (left == beginLeft) { + int splitNo = new Random().ints(0, watermarkText.length()).limit(1).findFirst().getAsInt(); + String firstWater = watermarkText.substring(splitNo) + " ".substring(0, splitNo); + Shape waterShape = buildTextShape(doc, firstWater, left, top); + watermarkPara.appendChild(waterShape); + } else { + Shape waterShape = buildTextShape(doc, watermarkText, left, top); + watermarkPara.appendChild(waterShape); + } + } + } + + // 鍦ㄦ瘡涓儴鍒嗕腑锛屾渶澶氬彲浠ユ湁涓変釜涓嶅悓鐨勬爣棰橈紝鍥犱负鎴戜滑鎯宠鍑虹幇鍦ㄦ墍鏈夐〉闈笂鐨勬按鍗帮紝鎻掑叆鍒版墍鏈夋爣棰樹腑銆 + for (Section sect : doc.getSections()) { + // 姣忎釜鍖烘鍙兘鏈夊杈句笁涓笉鍚岀殑鏍囬锛屽洜涓烘垜浠笇鏈涙墍鏈夐〉闈笂閮芥湁姘村嵃锛屽皢鎵鏈夌殑澶存彃鍏ャ + insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_PRIMARY); + insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_FIRST); + insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_EVEN); + } + + } + + /** + * 鏋勫缓鏂囧瓧shape绫 + * + * @param doc 鏂囨。瀵硅薄 + * @param watermarkText 姘村嵃鏂囧瓧 + * @param left 宸﹁竟璺 + * @param top 涓婅竟璺 + * @throws Exception + */ + private static Shape buildTextShape(Document doc, String watermarkText, double left, double top) throws Exception { + Shape watermark = new Shape(doc, ShapeType.TEXT_PLAIN_TEXT); + /*watermark.getTextPath().setText(watermarkText); + watermark.getTextPath().setFontFamily("瀹嬩綋"); + watermark.setWidth(watermarkText.length() * (double) WATERMARK_FONT_WIDTH); + watermark.setHeight(WATERMARK_FONT_HEIGHT * 3); + watermark.setRotation(WATERMARK_FONT_ROTATION); + //缁樺埗姘村嵃棰滆壊 + watermark.getFill().setColor(watermark_color); + watermark.setStrokeColor(watermark_color); + //灏嗘按鍗版斁缃湪椤甸潰涓績 + watermark.setLeft(left); + watermark.setTop(top); + watermark.setWrapType(WrapType.NONE);*/ + //姘村嵃鍐呭 + watermark.getTextPath().setText(watermarkText); + //姘村嵃瀛椾綋 + watermark.getTextPath().setFontFamily("瀹嬩綋"); + //姘村嵃瀹藉害 + watermark.setWidth(500); + //姘村嵃楂樺害 + watermark.setHeight(100); + //鏃嬭浆姘村嵃 + watermark.setRotation(-40); + //姘村嵃棰滆壊 + watermark.getFill().setColor(watermark_color); + watermark.setStrokeColor(watermark_color); + watermark.setRelativeHorizontalPosition(RelativeHorizontalPosition.PAGE); + watermark.setRelativeVerticalPosition(RelativeVerticalPosition.PAGE); + watermark.setWrapType(WrapType.NONE); + watermark.setVerticalAlignment(VerticalAlignment.CENTER); + watermark.setHorizontalAlignment(HorizontalAlignment.CENTER); + return watermark; + } + + /** + * 鎻掑叆姘村嵃 + * + * @param watermarkPara 姘村嵃娈佃惤 + * @param sect 閮ㄤ欢 + * @param headerType 澶存爣绫诲瀷瀛楁 + * @throws Exception + */ + private static void insertWatermarkIntoHeader(Paragraph watermarkPara, Section sect, int headerType) throws Exception { + HeaderFooter header = sect.getHeadersFooters().getByHeaderFooterType(headerType); + if (header == null) { + header = new HeaderFooter(sect.getDocument(), headerType); + sect.getHeadersFooters().add(header); + } + header.appendChild(watermarkPara.deepClone(true)); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/bean/BeanUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/bean/BeanUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..4463662d4c195212b82c6d861c3a149f7909291b --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/bean/BeanUtils.java @@ -0,0 +1,110 @@ +package com.ruoyi.common.utils.bean; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * Bean 宸ュ叿绫 + * + * @author ruoyi + */ +public class BeanUtils extends org.springframework.beans.BeanUtils +{ + /** Bean鏂规硶鍚嶄腑灞炴у悕寮濮嬬殑涓嬫爣 */ + private static final int BEAN_METHOD_PROP_INDEX = 3; + + /** * 鍖归厤getter鏂规硶鐨勬鍒欒〃杈惧紡 */ + private static final Pattern GET_PATTERN = Pattern.compile("get(\\p{javaUpperCase}\\w*)"); + + /** * 鍖归厤setter鏂规硶鐨勬鍒欒〃杈惧紡 */ + private static final Pattern SET_PATTERN = Pattern.compile("set(\\p{javaUpperCase}\\w*)"); + + /** + * Bean灞炴у鍒跺伐鍏锋柟娉曘 + * + * @param dest 鐩爣瀵硅薄 + * @param src 婧愬璞 + */ + public static void copyBeanProp(Object dest, Object src) + { + try + { + copyProperties(src, dest); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + + /** + * 鑾峰彇瀵硅薄鐨剆etter鏂规硶銆 + * + * @param obj 瀵硅薄 + * @return 瀵硅薄鐨剆etter鏂规硶鍒楄〃 + */ + public static List getSetterMethods(Object obj) + { + // setter鏂规硶鍒楄〃 + List setterMethods = new ArrayList(); + + // 鑾峰彇鎵鏈夋柟娉 + Method[] methods = obj.getClass().getMethods(); + + // 鏌ユ壘setter鏂规硶 + + for (Method method : methods) + { + Matcher m = SET_PATTERN.matcher(method.getName()); + if (m.matches() && (method.getParameterTypes().length == 1)) + { + setterMethods.add(method); + } + } + // 杩斿洖setter鏂规硶鍒楄〃 + return setterMethods; + } + + /** + * 鑾峰彇瀵硅薄鐨刧etter鏂规硶銆 + * + * @param obj 瀵硅薄 + * @return 瀵硅薄鐨刧etter鏂规硶鍒楄〃 + */ + + public static List getGetterMethods(Object obj) + { + // getter鏂规硶鍒楄〃 + List getterMethods = new ArrayList(); + // 鑾峰彇鎵鏈夋柟娉 + Method[] methods = obj.getClass().getMethods(); + // 鏌ユ壘getter鏂规硶 + for (Method method : methods) + { + Matcher m = GET_PATTERN.matcher(method.getName()); + if (m.matches() && (method.getParameterTypes().length == 0)) + { + getterMethods.add(method); + } + } + // 杩斿洖getter鏂规硶鍒楄〃 + return getterMethods; + } + + /** + * 妫鏌ean鏂规硶鍚嶄腑鐨勫睘鎬у悕鏄惁鐩哥瓑銆
+ * 濡俫etName()鍜宻etName()灞炴у悕涓鏍凤紝getName()鍜宻etAge()灞炴у悕涓嶄竴鏍枫 + * + * @param m1 鏂规硶鍚1 + * @param m2 鏂规硶鍚2 + * @return 灞炴у悕涓鏍疯繑鍥瀟rue锛屽惁鍒欒繑鍥瀎alse + */ + + public static boolean isMethodPropEquals(String m1, String m2) + { + return m1.substring(BEAN_METHOD_PROP_INDEX).equals(m2.substring(BEAN_METHOD_PROP_INDEX)); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/bean/BeanValidators.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/bean/BeanValidators.java new file mode 100644 index 0000000000000000000000000000000000000000..c47b412228faac74cbb9555ca2411637e8b1a544 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/bean/BeanValidators.java @@ -0,0 +1,24 @@ +package com.ruoyi.common.utils.bean; + +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; +import javax.validation.Validator; +import java.util.Set; + +/** + * bean瀵硅薄灞炴ч獙璇 + * + * @author ruoyi + */ +public class BeanValidators +{ + public static void validateWithException(Validator validator, Object object, Class... groups) + throws ConstraintViolationException + { + Set> constraintViolations = validator.validate(object, groups); + if (!constraintViolations.isEmpty()) + { + throw new ConstraintViolationException(constraintViolations); + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileTypeUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileTypeUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..3e77f6dd46d73928394ea73f22d11dff3460d3a9 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileTypeUtils.java @@ -0,0 +1,77 @@ +package com.ruoyi.common.utils.file; + +import org.apache.commons.lang3.StringUtils; + +import java.io.File; + +/** + * 鏂囦欢绫诲瀷宸ュ叿绫 + * + * @author ruoyi + */ +public class FileTypeUtils +{ + /** + * 鑾峰彇鏂囦欢绫诲瀷 + *

+ * 渚嬪: ruoyi.txt, 杩斿洖: txt + * + * @param file 鏂囦欢鍚 + * @return 鍚庣紑锛堜笉鍚".") + */ + public static String getFileType(File file) + { + if (null == file) + { + return StringUtils.EMPTY; + } + return getFileType(file.getName()); + } + + /** + * 鑾峰彇鏂囦欢绫诲瀷 + *

+ * 渚嬪: ruoyi.txt, 杩斿洖: txt + * + * @param fileName 鏂囦欢鍚 + * @return 鍚庣紑锛堜笉鍚".") + */ + public static String getFileType(String fileName) + { + int separatorIndex = fileName.lastIndexOf("."); + if (separatorIndex < 0) + { + return ""; + } + return fileName.substring(separatorIndex + 1).toLowerCase(); + } + + /** + * 鑾峰彇鏂囦欢绫诲瀷 + * + * @param photoByte 鏂囦欢瀛楄妭鐮 + * @return 鍚庣紑锛堜笉鍚".") + */ + public static String getFileExtendName(byte[] photoByte) + { + String strFileExtendName = "JPG"; + if ((photoByte[0] == 71) && (photoByte[1] == 73) && (photoByte[2] == 70) && (photoByte[3] == 56) + && ((photoByte[4] == 55) || (photoByte[4] == 57)) && (photoByte[5] == 97)) + { + strFileExtendName = "GIF"; + } + else if ((photoByte[6] == 74) && (photoByte[7] == 70) && (photoByte[8] == 73) && (photoByte[9] == 70)) + { + strFileExtendName = "JPG"; + } + else if ((photoByte[0] == 66) && (photoByte[1] == 77)) + { + strFileExtendName = "BMP"; + } + else if ((photoByte[1] == 80) && (photoByte[2] == 78) && (photoByte[3] == 71)) + { + strFileExtendName = "PNG"; + } + return strFileExtendName; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..ec5143c6c179652fcb2924bb58d3c73636da56c7 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java @@ -0,0 +1,233 @@ +package com.ruoyi.common.utils.file; + +import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.exception.file.FileNameLengthLimitExceededException; +import com.ruoyi.common.exception.file.FileSizeLimitExceededException; +import com.ruoyi.common.exception.file.InvalidExtensionException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.uuid.Seq; +import org.apache.commons.io.FilenameUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Paths; +import java.util.Objects; + +/** + * 鏂囦欢涓婁紶宸ュ叿绫 + * + * @author ruoyi + */ +public class FileUploadUtils +{ + /** + * 榛樿澶у皬 50M + */ + public static final long DEFAULT_MAX_SIZE = 50 * 1024 * 1024L; + + /** + * 榛樿鐨勬枃浠跺悕鏈澶ч暱搴 100 + */ + public static final int DEFAULT_FILE_NAME_LENGTH = 100; + + /** + * 榛樿涓婁紶鐨勫湴鍧 + */ + private static String defaultBaseDir = RuoYiConfig.getProfile(); + + public static void setDefaultBaseDir(String defaultBaseDir) + { + FileUploadUtils.defaultBaseDir = defaultBaseDir; + } + + public static String getDefaultBaseDir() + { + return defaultBaseDir; + } + + /** + * 浠ラ粯璁ら厤缃繘琛屾枃浠朵笂浼 + * + * @param file 涓婁紶鐨勬枃浠 + * @return 鏂囦欢鍚嶇О + * @throws Exception + */ + public static final String upload(MultipartFile file) throws IOException + { + try + { + return upload(getDefaultBaseDir(), file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); + } + catch (Exception e) + { + throw new IOException(e.getMessage(), e); + } + } + + /** + * 鏍规嵁鏂囦欢璺緞涓婁紶 + * + * @param baseDir 鐩稿搴旂敤鐨勫熀鐩綍 + * @param file 涓婁紶鐨勬枃浠 + * @return 鏂囦欢鍚嶇О + * @throws IOException + */ + public static final String upload(String baseDir, MultipartFile file) throws IOException + { + try + { + return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION); + } + catch (Exception e) + { + throw new IOException(e.getMessage(), e); + } + } + + /** + * 鏂囦欢涓婁紶 + * + * @param baseDir 鐩稿搴旂敤鐨勫熀鐩綍 + * @param file 涓婁紶鐨勬枃浠 + * @param allowedExtension 涓婁紶鏂囦欢绫诲瀷 + * @return 杩斿洖涓婁紶鎴愬姛鐨勬枃浠跺悕 + * @throws FileSizeLimitExceededException 濡傛灉瓒呭嚭鏈澶уぇ灏 + * @throws FileNameLengthLimitExceededException 鏂囦欢鍚嶅お闀 + * @throws IOException 姣斿璇诲啓鏂囦欢鍑洪敊鏃 + * @throws InvalidExtensionException 鏂囦欢鏍¢獙寮傚父 + */ + public static final String upload(String baseDir, MultipartFile file, String[] allowedExtension) + throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException, + InvalidExtensionException + { + int fileNamelength = Objects.requireNonNull(file.getOriginalFilename()).length(); + if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) + { + throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH); + } + + assertAllowed(file, allowedExtension); + + String fileName = extractFilename(file); + + String absPath = getAbsoluteFile(baseDir, fileName).getAbsolutePath(); + file.transferTo(Paths.get(absPath)); + return getPathFileName(baseDir, fileName); + } + + /** + * 缂栫爜鏂囦欢鍚 + */ + public static final String extractFilename(MultipartFile file) + { + return StringUtils.format("{}/{}_{}.{}", DateUtils.datePath(), + FilenameUtils.getBaseName(file.getOriginalFilename()), Seq.getId(Seq.uploadSeqType), getExtension(file)); + } + + public static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException + { + File desc = new File(uploadDir + File.separator + fileName); + + if (!desc.exists()) + { + if (!desc.getParentFile().exists()) + { + desc.getParentFile().mkdirs(); + } + } + return desc; + } + + public static final String getPathFileName(String uploadDir, String fileName) throws IOException + { + int dirLastIndex = RuoYiConfig.getProfile().length() + 1; + String currentDir = StringUtils.substring(uploadDir, dirLastIndex); + return Constants.RESOURCE_PREFIX + "/" + currentDir + "/" + fileName; + } + + /** + * 鏂囦欢澶у皬鏍¢獙 + * + * @param file 涓婁紶鐨勬枃浠 + * @return + * @throws FileSizeLimitExceededException 濡傛灉瓒呭嚭鏈澶уぇ灏 + * @throws InvalidExtensionException + */ + public static final void assertAllowed(MultipartFile file, String[] allowedExtension) + throws FileSizeLimitExceededException, InvalidExtensionException + { + long size = file.getSize(); + if (size > DEFAULT_MAX_SIZE) + { + throw new FileSizeLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024); + } + + String fileName = file.getOriginalFilename(); + String extension = getExtension(file); + if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension)) + { + if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION) + { + throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension, + fileName); + } + else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION) + { + throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension, + fileName); + } + else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION) + { + throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension, + fileName); + } + else if (allowedExtension == MimeTypeUtils.VIDEO_EXTENSION) + { + throw new InvalidExtensionException.InvalidVideoExtensionException(allowedExtension, extension, + fileName); + } + else + { + throw new InvalidExtensionException(allowedExtension, extension, fileName); + } + } + } + + /** + * 鍒ゆ柇MIME绫诲瀷鏄惁鏄厑璁哥殑MIME绫诲瀷 + * + * @param extension + * @param allowedExtension + * @return + */ + public static final boolean isAllowedExtension(String extension, String[] allowedExtension) + { + for (String str : allowedExtension) + { + if (str.equalsIgnoreCase(extension)) + { + return true; + } + } + return false; + } + + /** + * 鑾峰彇鏂囦欢鍚嶇殑鍚庣紑 + * + * @param file 琛ㄥ崟鏂囦欢 + * @return 鍚庣紑鍚 + */ + public static final String getExtension(MultipartFile file) + { + String extension = FilenameUtils.getExtension(file.getOriginalFilename()); + if (StringUtils.isEmpty(extension)) + { + extension = MimeTypeUtils.getExtension(Objects.requireNonNull(file.getContentType())); + } + return extension; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..b957f7be26f8f193eaa3cdf66d0b87f3f306fbd8 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/FileUtils.java @@ -0,0 +1,320 @@ +package com.ruoyi.common.utils.file; + +import cn.hutool.core.lang.Snowflake; +import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.ServiceResponseEnum; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.ImgUpload; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.common.utils.uuid.Seq; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.tomcat.util.http.fileupload.disk.DiskFileItem; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.commons.CommonsMultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.List; + +import static com.ruoyi.common.qiniu.QiNiuUploadUtils.md5HashCode; +import static com.ruoyi.common.utils.file.FileUploadUtils.getExtension; + +/** + * 鏂囦欢澶勭悊宸ュ叿绫 + * + * @author ruoyi + */ +public class FileUtils +{ + public static String FILENAME_PATTERN = "[a-zA-Z0-9_\\-\\|\\.\\u4e00-\\u9fa5]+"; + + /** + * 杈撳嚭鎸囧畾鏂囦欢鐨刡yte鏁扮粍 + * + * @param filePath 鏂囦欢璺緞 + * @param os 杈撳嚭娴 + * @return + */ + public static void writeBytes(String filePath, OutputStream os) throws IOException + { + FileInputStream fis = null; + try + { + File file = new File(filePath); + if (!file.exists()) + { + throw new FileNotFoundException(filePath); + } + fis = new FileInputStream(file); + byte[] b = new byte[1024]; + int length; + while ((length = fis.read(b)) > 0) + { + os.write(b, 0, length); + } + } + catch (IOException e) + { + throw e; + } + finally + { + IOUtils.close(os); + IOUtils.close(fis); + } + } + + /** + * 鍐欐暟鎹埌鏂囦欢涓 + * + * @param data 鏁版嵁 + * @return 鐩爣鏂囦欢 + * @throws IOException IO寮傚父 + */ + public static String writeImportBytes(byte[] data) throws IOException + { + //return writeBytes(data, RuoYiConfig.getImportPath()); + String fileName = null; + try { + //闅忔満鏁 + String originalFilename = IdUtils.fastUUID().substring(0, 8); + if (StringUtils.isNotEmpty(originalFilename)) { + originalFilename = originalFilename.substring(0, originalFilename.lastIndexOf(".")); + } + // 鏂囦欢鍚嶇О + fileName = StringUtils.format("{}/{}/{}_{}/{}.{}", "xxks", DateUtils.datePath(), + md5HashCode(new ByteArrayInputStream(data)), Seq.getId(Seq.uploadSeqType), originalFilename,".jpg"); + String imagePath = new ImgUpload().upload(data, + fileName); + if (StringUtils.isBlank(imagePath)) { + throw new ServiceException("涓婁紶澶辫触"); + } + return imagePath; + } catch (Exception e) { + e.printStackTrace(); + throw new ServiceException(e.getMessage()); + } + } + + /** + * 鍐欐暟鎹埌鏂囦欢涓 + * + * @param data 鏁版嵁 + * @param uploadDir 鐩爣鏂囦欢 + * @return 鐩爣鏂囦欢 + * @throws IOException IO寮傚父 + */ + public static String writeBytes(byte[] data, String uploadDir) throws IOException + { + FileOutputStream fos = null; + String pathName = ""; + try + { + String extension = getFileExtendName(data); + pathName = DateUtils.datePath() + "/" + IdUtils.fastUUID() + "." + extension; + File file = FileUploadUtils.getAbsoluteFile(uploadDir, pathName); + fos = new FileOutputStream(file); + fos.write(data); + } + finally + { + IOUtils.close(fos); + } + return FileUploadUtils.getPathFileName(uploadDir, pathName); + } + + /** + * 鍒犻櫎鏂囦欢 + * + * @param filePath 鏂囦欢 + * @return + */ + public static boolean deleteFile(String filePath) + { + boolean flag = false; + File file = new File(filePath); + // 璺緞涓烘枃浠朵笖涓嶄负绌哄垯杩涜鍒犻櫎 + if (file.isFile() && file.exists()) + { + flag = file.delete(); + } + return flag; + } + + /** + * 鏂囦欢鍚嶇О楠岃瘉 + * + * @param filename 鏂囦欢鍚嶇О + * @return true 姝e父 false 闈炴硶 + */ + public static boolean isValidFilename(String filename) + { + return filename.matches(FILENAME_PATTERN); + } + + /** + * 妫鏌ユ枃浠舵槸鍚﹀彲涓嬭浇 + * + * @param resource 闇瑕佷笅杞界殑鏂囦欢 + * @return true 姝e父 false 闈炴硶 + */ + public static boolean checkAllowDownload(String resource) + { + // 绂佹鐩綍涓婅烦绾у埆 + if (StringUtils.contains(resource, "..")) + { + return false; + } + + // 妫鏌ュ厑璁镐笅杞界殑鏂囦欢瑙勫垯 + if (ArrayUtils.contains(MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, FileTypeUtils.getFileType(resource))) + { + return true; + } + + // 涓嶅湪鍏佽涓嬭浇鐨勬枃浠惰鍒 + return false; + } + + /** + * 涓嬭浇鏂囦欢鍚嶉噸鏂扮紪鐮 + * + * @param request 璇锋眰瀵硅薄 + * @param fileName 鏂囦欢鍚 + * @return 缂栫爜鍚庣殑鏂囦欢鍚 + */ + public static String setFileDownloadHeader(HttpServletRequest request, String fileName) throws UnsupportedEncodingException + { + final String agent = request.getHeader("USER-AGENT"); + String filename = fileName; + if (agent.contains("MSIE")) + { + // IE娴忚鍣 + filename = URLEncoder.encode(filename, "utf-8"); + filename = filename.replace("+", " "); + } + else if (agent.contains("Firefox")) + { + // 鐏嫄娴忚鍣 + filename = new String(fileName.getBytes(), "ISO8859-1"); + } + else if (agent.contains("Chrome")) + { + // google娴忚鍣 + filename = URLEncoder.encode(filename, "utf-8"); + } + else + { + // 鍏跺畠娴忚鍣 + filename = URLEncoder.encode(filename, "utf-8"); + } + return filename; + } + + /** + * 涓嬭浇鏂囦欢鍚嶉噸鏂扮紪鐮 + * + * @param response 鍝嶅簲瀵硅薄 + * @param realFileName 鐪熷疄鏂囦欢鍚 + */ + public static void setAttachmentResponseHeader(HttpServletResponse response, String realFileName) throws UnsupportedEncodingException + { + String percentEncodedFileName = percentEncode(realFileName); + + StringBuilder contentDispositionValue = new StringBuilder(); + contentDispositionValue.append("attachment; filename=") + .append(percentEncodedFileName) + .append(";") + .append("filename*=") + .append("utf-8''") + .append(percentEncodedFileName); + + response.addHeader("Access-Control-Expose-Headers", "Content-Disposition,download-filename"); + response.setHeader("Content-disposition", contentDispositionValue.toString()); + response.setHeader("download-filename", percentEncodedFileName); + } + + /** + * 鐧惧垎鍙风紪鐮佸伐鍏锋柟娉 + * + * @param s 闇瑕佺櫨鍒嗗彿缂栫爜鐨勫瓧绗︿覆 + * @return 鐧惧垎鍙风紪鐮佸悗鐨勫瓧绗︿覆 + */ + public static String percentEncode(String s) throws UnsupportedEncodingException + { + String encode = URLEncoder.encode(s, StandardCharsets.UTF_8.toString()); + return encode.replaceAll("\\+", "%20"); + } + + /** + * 鑾峰彇鍥惧儚鍚庣紑 + * + * @param photoByte 鍥惧儚鏁版嵁 + * @return 鍚庣紑鍚 + */ + public static String getFileExtendName(byte[] photoByte) + { + String strFileExtendName = "jpg"; + if ((photoByte[0] == 71) && (photoByte[1] == 73) && (photoByte[2] == 70) && (photoByte[3] == 56) + && ((photoByte[4] == 55) || (photoByte[4] == 57)) && (photoByte[5] == 97)) + { + strFileExtendName = "gif"; + } + else if ((photoByte[6] == 74) && (photoByte[7] == 70) && (photoByte[8] == 73) && (photoByte[9] == 70)) + { + strFileExtendName = "jpg"; + } + else if ((photoByte[0] == 66) && (photoByte[1] == 77)) + { + strFileExtendName = "bmp"; + } + else if ((photoByte[1] == 80) && (photoByte[2] == 78) && (photoByte[3] == 71)) + { + strFileExtendName = "png"; + } + return strFileExtendName; + } + + /** + * 鑾峰彇鏂囦欢鍚嶇О /profile/upload/2022/04/16/ruoyi.png -- ruoyi.png + * + * @param fileName 璺緞鍚嶇О + * @return 娌℃湁鏂囦欢璺緞鐨勫悕绉 + */ + public static String getName(String fileName) + { + if (fileName == null) + { + return null; + } + int lastUnixPos = fileName.lastIndexOf('/'); + int lastWindowsPos = fileName.lastIndexOf('\\'); + int index = Math.max(lastUnixPos, lastWindowsPos); + return fileName.substring(index + 1); + } + + /** + * 鑾峰彇涓嶅甫鍚庣紑鏂囦欢鍚嶇О /profile/upload/2022/04/16/ruoyi.png -- ruoyi + * + * @param fileName 璺緞鍚嶇О + * @return 娌℃湁鏂囦欢璺緞鍜屽悗缂鐨勫悕绉 + */ + public static String getNameNotSuffix(String fileName) + { + if (fileName == null) + { + return null; + } + String baseName = FilenameUtils.getBaseName(fileName); + return baseName; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/ImageUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/ImageUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..0ef3317c9d5a343dceb29f1d5497bb6b96792b0f --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/ImageUtils.java @@ -0,0 +1,99 @@ +package com.ruoyi.common.utils.file; + +import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.utils.StringUtils; +import org.apache.poi.util.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.ByteArrayInputStream; +import java.io.FileInputStream; +import java.io.InputStream; +import java.net.URL; +import java.net.URLConnection; +import java.util.Arrays; + +/** + * 鍥剧墖澶勭悊宸ュ叿绫 + * + * @author ruoyi + */ +public class ImageUtils +{ + private static final Logger log = LoggerFactory.getLogger(ImageUtils.class); + + public static byte[] getImage(String imagePath) + { + InputStream is = getFile(imagePath); + try + { + return IOUtils.toByteArray(is); + } + catch (Exception e) + { + log.error("鍥剧墖鍔犺浇寮傚父 {}", e); + return null; + } + finally + { + IOUtils.closeQuietly(is); + } + } + + public static InputStream getFile(String imagePath) + { + try + { + byte[] result = readFile(imagePath); + result = Arrays.copyOf(result, result.length); + return new ByteArrayInputStream(result); + } + catch (Exception e) + { + log.error("鑾峰彇鍥剧墖寮傚父 {}", e); + } + return null; + } + + /** + * 璇诲彇鏂囦欢涓哄瓧鑺傛暟鎹 + * + * @param url 鍦板潃 + * @return 瀛楄妭鏁版嵁 + */ + public static byte[] readFile(String url) + { + InputStream in = null; + try + { + if (url.startsWith("http")) + { + // 缃戠粶鍦板潃 + URL urlObj = new URL(url); + URLConnection urlConnection = urlObj.openConnection(); + urlConnection.setConnectTimeout(30 * 1000); + urlConnection.setReadTimeout(60 * 1000); + urlConnection.setDoInput(true); + in = urlConnection.getInputStream(); + } + else + { + // 鏈満鍦板潃 + String localPath = RuoYiConfig.getProfile(); + String downloadPath = localPath + StringUtils.substringAfter(url, Constants.RESOURCE_PREFIX); + in = new FileInputStream(downloadPath); + } + return IOUtils.toByteArray(in); + } + catch (Exception e) + { + log.error("鑾峰彇鏂囦欢璺緞寮傚父 {}", e); + return null; + } + finally + { + IOUtils.closeQuietly(in); + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..f968f1a12bce991d98c8c40722d00fc05fe5f303 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java @@ -0,0 +1,59 @@ +package com.ruoyi.common.utils.file; + +/** + * 濯掍綋绫诲瀷宸ュ叿绫 + * + * @author ruoyi + */ +public class MimeTypeUtils +{ + public static final String IMAGE_PNG = "image/png"; + + public static final String IMAGE_JPG = "image/jpg"; + + public static final String IMAGE_JPEG = "image/jpeg"; + + public static final String IMAGE_BMP = "image/bmp"; + + public static final String IMAGE_GIF = "image/gif"; + + public static final String[] IMAGE_EXTENSION = { "bmp", "gif", "jpg", "jpeg", "png" }; + + public static final String[] FLASH_EXTENSION = { "swf", "flv" }; + + public static final String[] MEDIA_EXTENSION = { "swf", "flv", "mp3", "wav", "wma", "wmv", "mid", "avi", "mpg", + "asf", "rm", "rmvb" }; + + public static final String[] VIDEO_EXTENSION = { "mp4", "avi", "rmvb" }; + + public static final String[] DEFAULT_ALLOWED_EXTENSION = { + // 鍥剧墖 + "bmp", "gif", "jpg", "jpeg", "png", + // word excel powerpoint + "doc", "docx", "xls", "xlsx", "ppt", "pptx", "html", "htm", "txt", + // 鍘嬬缉鏂囦欢 + "rar", "zip", "gz", "bz2", + // 瑙嗛鏍煎紡 + "mp4", "avi", "rmvb", + // pdf + "pdf" }; + + public static String getExtension(String prefix) + { + switch (prefix) + { + case IMAGE_PNG: + return "png"; + case IMAGE_JPG: + return "jpg"; + case IMAGE_JPEG: + return "jpeg"; + case IMAGE_BMP: + return "bmp"; + case IMAGE_GIF: + return "gif"; + default: + return ""; + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/html/EscapeUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/html/EscapeUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..f52e83e51f67535498ed914e93ebb034591c2cd7 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/html/EscapeUtil.java @@ -0,0 +1,167 @@ +package com.ruoyi.common.utils.html; + +import com.ruoyi.common.utils.StringUtils; + +/** + * 杞箟鍜屽弽杞箟宸ュ叿绫 + * + * @author ruoyi + */ +public class EscapeUtil +{ + public static final String RE_HTML_MARK = "(<[^<]*?>)|(<[\\s]*?/[^<]*?>)|(<[^<]*?/[\\s]*?>)"; + + private static final char[][] TEXT = new char[64][]; + + static + { + for (int i = 0; i < 64; i++) + { + TEXT[i] = new char[] { (char) i }; + } + + // special HTML characters + TEXT['\''] = "'".toCharArray(); // 鍗曞紩鍙 + TEXT['"'] = """.toCharArray(); // 鍙屽紩鍙 + TEXT['&'] = "&".toCharArray(); // &绗 + TEXT['<'] = "<".toCharArray(); // 灏忎簬鍙 + TEXT['>'] = ">".toCharArray(); // 澶т簬鍙 + } + + /** + * 杞箟鏂囨湰涓殑HTML瀛楃涓哄畨鍏ㄧ殑瀛楃 + * + * @param text 琚浆涔夌殑鏂囨湰 + * @return 杞箟鍚庣殑鏂囨湰 + */ + public static String escape(String text) + { + return encode(text); + } + + /** + * 杩樺師琚浆涔夌殑HTML鐗规畩瀛楃 + * + * @param content 鍖呭惈杞箟绗︾殑HTML鍐呭 + * @return 杞崲鍚庣殑瀛楃涓 + */ + public static String unescape(String content) + { + return decode(content); + } + + /** + * 娓呴櫎鎵鏈塇TML鏍囩锛屼絾鏄笉鍒犻櫎鏍囩鍐呯殑鍐呭 + * + * @param content 鏂囨湰 + * @return 娓呴櫎鏍囩鍚庣殑鏂囨湰 + */ + public static String clean(String content) + { + return new HTMLFilter().filter(content); + } + + /** + * Escape缂栫爜 + * + * @param text 琚紪鐮佺殑鏂囨湰 + * @return 缂栫爜鍚庣殑瀛楃 + */ + private static String encode(String text) + { + if (StringUtils.isEmpty(text)) + { + return StringUtils.EMPTY; + } + + final StringBuilder tmp = new StringBuilder(text.length() * 6); + char c; + for (int i = 0; i < text.length(); i++) + { + c = text.charAt(i); + if (c < 256) + { + tmp.append("%"); + if (c < 16) + { + tmp.append("0"); + } + tmp.append(Integer.toString(c, 16)); + } + else + { + tmp.append("%u"); + if (c <= 0xfff) + { + // issue#I49JU8@Gitee + tmp.append("0"); + } + tmp.append(Integer.toString(c, 16)); + } + } + return tmp.toString(); + } + + /** + * Escape瑙g爜 + * + * @param content 琚浆涔夌殑鍐呭 + * @return 瑙g爜鍚庣殑瀛楃涓 + */ + public static String decode(String content) + { + if (StringUtils.isEmpty(content)) + { + return content; + } + + StringBuilder tmp = new StringBuilder(content.length()); + int lastPos = 0, pos = 0; + char ch; + while (lastPos < content.length()) + { + pos = content.indexOf("%", lastPos); + if (pos == lastPos) + { + if (content.charAt(pos + 1) == 'u') + { + ch = (char) Integer.parseInt(content.substring(pos + 2, pos + 6), 16); + tmp.append(ch); + lastPos = pos + 6; + } + else + { + ch = (char) Integer.parseInt(content.substring(pos + 1, pos + 3), 16); + tmp.append(ch); + lastPos = pos + 3; + } + } + else + { + if (pos == -1) + { + tmp.append(content.substring(lastPos)); + lastPos = content.length(); + } + else + { + tmp.append(content.substring(lastPos, pos)); + lastPos = pos; + } + } + } + return tmp.toString(); + } + + public static void main(String[] args) + { + String html = ""; + String escape = EscapeUtil.escape(html); + // String html = "ipt>alert(\"XSS\")ipt>"; + // String html = "<123"; + // String html = "123>"; + System.out.println("clean: " + EscapeUtil.clean(html)); + System.out.println("escape: " + escape); + System.out.println("unescape: " + EscapeUtil.unescape(escape)); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/html/HTMLFilter.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/html/HTMLFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..469f95a32e565e1bed6339b3aa8054647217cfbf --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/html/HTMLFilter.java @@ -0,0 +1,566 @@ +package com.ruoyi.common.utils.html; + +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * HTML杩囨护鍣紝鐢ㄤ簬鍘婚櫎XSS婕忔礊闅愭偅銆 + * + * @author ruoyi + */ +public final class HTMLFilter +{ + /** + * regex flag union representing /si modifiers in php + **/ + private static final int REGEX_FLAGS_SI = Pattern.CASE_INSENSITIVE | Pattern.DOTALL; + private static final Pattern P_COMMENTS = Pattern.compile("", Pattern.DOTALL); + private static final Pattern P_COMMENT = Pattern.compile("^!--(.*)--$", REGEX_FLAGS_SI); + private static final Pattern P_TAGS = Pattern.compile("<(.*?)>", Pattern.DOTALL); + private static final Pattern P_END_TAG = Pattern.compile("^/([a-z0-9]+)", REGEX_FLAGS_SI); + private static final Pattern P_START_TAG = Pattern.compile("^([a-z0-9]+)(.*?)(/?)$", REGEX_FLAGS_SI); + private static final Pattern P_QUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)=([\"'])(.*?)\\2", REGEX_FLAGS_SI); + private static final Pattern P_UNQUOTED_ATTRIBUTES = Pattern.compile("([a-z0-9]+)(=)([^\"\\s']+)", REGEX_FLAGS_SI); + private static final Pattern P_PROTOCOL = Pattern.compile("^([^:]+):", REGEX_FLAGS_SI); + private static final Pattern P_ENTITY = Pattern.compile("&#(\\d+);?"); + private static final Pattern P_ENTITY_UNICODE = Pattern.compile("&#x([0-9a-f]+);?"); + private static final Pattern P_ENCODE = Pattern.compile("%([0-9a-f]{2});?"); + private static final Pattern P_VALID_ENTITIES = Pattern.compile("&([^&;]*)(?=(;|&|$))"); + private static final Pattern P_VALID_QUOTES = Pattern.compile("(>|^)([^<]+?)(<|$)", Pattern.DOTALL); + private static final Pattern P_END_ARROW = Pattern.compile("^>"); + private static final Pattern P_BODY_TO_END = Pattern.compile("<([^>]*?)(?=<|$)"); + private static final Pattern P_XML_CONTENT = Pattern.compile("(^|>)([^<]*?)(?=>)"); + private static final Pattern P_STRAY_LEFT_ARROW = Pattern.compile("<([^>]*?)(?=<|$)"); + private static final Pattern P_STRAY_RIGHT_ARROW = Pattern.compile("(^|>)([^<]*?)(?=>)"); + private static final Pattern P_AMP = Pattern.compile("&"); + private static final Pattern P_QUOTE = Pattern.compile("\""); + private static final Pattern P_LEFT_ARROW = Pattern.compile("<"); + private static final Pattern P_RIGHT_ARROW = Pattern.compile(">"); + private static final Pattern P_BOTH_ARROWS = Pattern.compile("<>"); + + // @xxx could grow large... maybe use sesat's ReferenceMap + private static final ConcurrentMap P_REMOVE_PAIR_BLANKS = new ConcurrentHashMap<>(); + private static final ConcurrentMap P_REMOVE_SELF_BLANKS = new ConcurrentHashMap<>(); + + /** + * set of allowed html elements, along with allowed attributes for each element + **/ + private final Map> vAllowed; + /** + * counts of open tags for each (allowable) html element + **/ + private final Map vTagCounts = new HashMap<>(); + + /** + * html elements which must always be self-closing (e.g. "") + **/ + private final String[] vSelfClosingTags; + /** + * html elements which must always have separate opening and closing tags (e.g. "") + **/ + private final String[] vNeedClosingTags; + /** + * set of disallowed html elements + **/ + private final String[] vDisallowed; + /** + * attributes which should be checked for valid protocols + **/ + private final String[] vProtocolAtts; + /** + * allowed protocols + **/ + private final String[] vAllowedProtocols; + /** + * tags which should be removed if they contain no content (e.g. "" or "") + **/ + private final String[] vRemoveBlanks; + /** + * entities allowed within html markup + **/ + private final String[] vAllowedEntities; + /** + * flag determining whether comments are allowed in input String. + */ + private final boolean stripComment; + private final boolean encodeQuotes; + /** + * flag determining whether to try to make tags when presented with "unbalanced" angle brackets (e.g. "" + * becomes " text "). If set to false, unbalanced angle brackets will be html escaped. + */ + private final boolean alwaysMakeTags; + + /** + * Default constructor. + */ + public HTMLFilter() + { + vAllowed = new HashMap<>(); + + final ArrayList a_atts = new ArrayList<>(); + a_atts.add("href"); + a_atts.add("target"); + vAllowed.put("a", a_atts); + + final ArrayList img_atts = new ArrayList<>(); + img_atts.add("src"); + img_atts.add("width"); + img_atts.add("height"); + img_atts.add("alt"); + vAllowed.put("img", img_atts); + + final ArrayList no_atts = new ArrayList<>(); + vAllowed.put("b", no_atts); + vAllowed.put("strong", no_atts); + vAllowed.put("i", no_atts); + vAllowed.put("em", no_atts); + + vSelfClosingTags = new String[] { "img" }; + vNeedClosingTags = new String[] { "a", "b", "strong", "i", "em" }; + vDisallowed = new String[] {}; + vAllowedProtocols = new String[] { "http", "mailto", "https" }; // no ftp. + vProtocolAtts = new String[] { "src", "href" }; + vRemoveBlanks = new String[] { "a", "b", "strong", "i", "em" }; + vAllowedEntities = new String[] { "amp", "gt", "lt", "quot" }; + stripComment = true; + encodeQuotes = true; + alwaysMakeTags = false; + } + + /** + * Map-parameter configurable constructor. + * + * @param conf map containing configuration. keys match field names. + */ + @SuppressWarnings("unchecked") + public HTMLFilter(final Map conf) + { + + assert conf.containsKey("vAllowed") : "configuration requires vAllowed"; + assert conf.containsKey("vSelfClosingTags") : "configuration requires vSelfClosingTags"; + assert conf.containsKey("vNeedClosingTags") : "configuration requires vNeedClosingTags"; + assert conf.containsKey("vDisallowed") : "configuration requires vDisallowed"; + assert conf.containsKey("vAllowedProtocols") : "configuration requires vAllowedProtocols"; + assert conf.containsKey("vProtocolAtts") : "configuration requires vProtocolAtts"; + assert conf.containsKey("vRemoveBlanks") : "configuration requires vRemoveBlanks"; + assert conf.containsKey("vAllowedEntities") : "configuration requires vAllowedEntities"; + + vAllowed = Collections.unmodifiableMap((HashMap>) conf.get("vAllowed")); + vSelfClosingTags = (String[]) conf.get("vSelfClosingTags"); + vNeedClosingTags = (String[]) conf.get("vNeedClosingTags"); + vDisallowed = (String[]) conf.get("vDisallowed"); + vAllowedProtocols = (String[]) conf.get("vAllowedProtocols"); + vProtocolAtts = (String[]) conf.get("vProtocolAtts"); + vRemoveBlanks = (String[]) conf.get("vRemoveBlanks"); + vAllowedEntities = (String[]) conf.get("vAllowedEntities"); + stripComment = conf.containsKey("stripComment") ? (Boolean) conf.get("stripComment") : true; + encodeQuotes = conf.containsKey("encodeQuotes") ? (Boolean) conf.get("encodeQuotes") : true; + alwaysMakeTags = conf.containsKey("alwaysMakeTags") ? (Boolean) conf.get("alwaysMakeTags") : true; + } + + private void reset() + { + vTagCounts.clear(); + } + + // --------------------------------------------------------------- + // my versions of some PHP library functions + public static String chr(final int decimal) + { + return String.valueOf((char) decimal); + } + + public static String htmlSpecialChars(final String s) + { + String result = s; + result = regexReplace(P_AMP, "&", result); + result = regexReplace(P_QUOTE, """, result); + result = regexReplace(P_LEFT_ARROW, "<", result); + result = regexReplace(P_RIGHT_ARROW, ">", result); + return result; + } + + // --------------------------------------------------------------- + + /** + * given a user submitted input String, filter out any invalid or restricted html. + * + * @param input text (i.e. submitted by a user) than may contain html + * @return "clean" version of input, with only valid, whitelisted html elements allowed + */ + public String filter(final String input) + { + reset(); + String s = input; + + s = escapeComments(s); + + s = balanceHTML(s); + + s = checkTags(s); + + s = processRemoveBlanks(s); + + // s = validateEntities(s); + + return s; + } + + public boolean isAlwaysMakeTags() + { + return alwaysMakeTags; + } + + public boolean isStripComments() + { + return stripComment; + } + + private String escapeComments(final String s) + { + final Matcher m = P_COMMENTS.matcher(s); + final StringBuffer buf = new StringBuffer(); + if (m.find()) + { + final String match = m.group(1); // (.*?) + m.appendReplacement(buf, Matcher.quoteReplacement("")); + } + m.appendTail(buf); + + return buf.toString(); + } + + private String balanceHTML(String s) + { + if (alwaysMakeTags) + { + // + // try and form html + // + s = regexReplace(P_END_ARROW, "", s); + // 涓嶈拷鍔犵粨鏉熸爣绛 + s = regexReplace(P_BODY_TO_END, "<$1>", s); + s = regexReplace(P_XML_CONTENT, "$1<$2", s); + + } + else + { + // + // escape stray brackets + // + s = regexReplace(P_STRAY_LEFT_ARROW, "<$1", s); + s = regexReplace(P_STRAY_RIGHT_ARROW, "$1$2><", s); + + // + // the last regexp causes '<>' entities to appear + // (we need to do a lookahead assertion so that the last bracket can + // be used in the next pass of the regexp) + // + s = regexReplace(P_BOTH_ARROWS, "", s); + } + + return s; + } + + private String checkTags(String s) + { + Matcher m = P_TAGS.matcher(s); + + final StringBuffer buf = new StringBuffer(); + while (m.find()) + { + String replaceStr = m.group(1); + replaceStr = processTag(replaceStr); + m.appendReplacement(buf, Matcher.quoteReplacement(replaceStr)); + } + m.appendTail(buf); + + // these get tallied in processTag + // (remember to reset before subsequent calls to filter method) + final StringBuilder sBuilder = new StringBuilder(buf.toString()); + for (String key : vTagCounts.keySet()) + { + for (int ii = 0; ii < vTagCounts.get(key); ii++) + { + sBuilder.append(""); + } + } + s = sBuilder.toString(); + + return s; + } + + private String processRemoveBlanks(final String s) + { + String result = s; + for (String tag : vRemoveBlanks) + { + if (!P_REMOVE_PAIR_BLANKS.containsKey(tag)) + { + P_REMOVE_PAIR_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?>")); + } + result = regexReplace(P_REMOVE_PAIR_BLANKS.get(tag), "", result); + if (!P_REMOVE_SELF_BLANKS.containsKey(tag)) + { + P_REMOVE_SELF_BLANKS.putIfAbsent(tag, Pattern.compile("<" + tag + "(\\s[^>]*)?/>")); + } + result = regexReplace(P_REMOVE_SELF_BLANKS.get(tag), "", result); + } + + return result; + } + + private static String regexReplace(final Pattern regex_pattern, final String replacement, final String s) + { + Matcher m = regex_pattern.matcher(s); + return m.replaceAll(replacement); + } + + private String processTag(final String s) + { + // ending tags + Matcher m = P_END_TAG.matcher(s); + if (m.find()) + { + final String name = m.group(1).toLowerCase(); + if (allowed(name)) + { + if (!inArray(name, vSelfClosingTags)) + { + if (vTagCounts.containsKey(name)) + { + vTagCounts.put(name, vTagCounts.get(name) - 1); + return ""; + } + } + } + } + + // starting tags + m = P_START_TAG.matcher(s); + if (m.find()) + { + final String name = m.group(1).toLowerCase(); + final String body = m.group(2); + String ending = m.group(3); + + // debug( "in a starting tag, name='" + name + "'; body='" + body + "'; ending='" + ending + "'" ); + if (allowed(name)) + { + final StringBuilder params = new StringBuilder(); + + final Matcher m2 = P_QUOTED_ATTRIBUTES.matcher(body); + final Matcher m3 = P_UNQUOTED_ATTRIBUTES.matcher(body); + final List paramNames = new ArrayList<>(); + final List paramValues = new ArrayList<>(); + while (m2.find()) + { + paramNames.add(m2.group(1)); // ([a-z0-9]+) + paramValues.add(m2.group(3)); // (.*?) + } + while (m3.find()) + { + paramNames.add(m3.group(1)); // ([a-z0-9]+) + paramValues.add(m3.group(3)); // ([^\"\\s']+) + } + + String paramName, paramValue; + for (int ii = 0; ii < paramNames.size(); ii++) + { + paramName = paramNames.get(ii).toLowerCase(); + paramValue = paramValues.get(ii); + + // debug( "paramName='" + paramName + "'" ); + // debug( "paramValue='" + paramValue + "'" ); + // debug( "allowed? " + vAllowed.get( name ).contains( paramName ) ); + + if (allowedAttribute(name, paramName)) + { + if (inArray(paramName, vProtocolAtts)) + { + paramValue = processParamProtocol(paramValue); + } + params.append(' ').append(paramName).append("=\\\"").append(paramValue).append("\\\""); + } + } + + if (inArray(name, vSelfClosingTags)) + { + ending = " /"; + } + + if (inArray(name, vNeedClosingTags)) + { + ending = ""; + } + + if (ending == null || ending.length() < 1) + { + if (vTagCounts.containsKey(name)) + { + vTagCounts.put(name, vTagCounts.get(name) + 1); + } + else + { + vTagCounts.put(name, 1); + } + } + else + { + ending = " /"; + } + return "<" + name + params + ending + ">"; + } + else + { + return ""; + } + } + + // comments + m = P_COMMENT.matcher(s); + if (!stripComment && m.find()) + { + return "<" + m.group() + ">"; + } + + return ""; + } + + private String processParamProtocol(String s) + { + s = decodeEntities(s); + final Matcher m = P_PROTOCOL.matcher(s); + if (m.find()) + { + final String protocol = m.group(1); + if (!inArray(protocol, vAllowedProtocols)) + { + // bad protocol, turn into local anchor link instead + s = "#" + s.substring(protocol.length() + 1); + if (s.startsWith("#//")) + { + s = "#" + s.substring(3); + } + } + } + + return s; + } + + private String decodeEntities(String s) + { + StringBuffer buf = new StringBuffer(); + + Matcher m = P_ENTITY.matcher(s); + while (m.find()) + { + final String match = m.group(1); + final int decimal = Integer.decode(match).intValue(); + m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal))); + } + m.appendTail(buf); + s = buf.toString(); + + buf = new StringBuffer(); + m = P_ENTITY_UNICODE.matcher(s); + while (m.find()) + { + final String match = m.group(1); + final int decimal = Integer.valueOf(match, 16).intValue(); + m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal))); + } + m.appendTail(buf); + s = buf.toString(); + + buf = new StringBuffer(); + m = P_ENCODE.matcher(s); + while (m.find()) + { + final String match = m.group(1); + final int decimal = Integer.valueOf(match, 16).intValue(); + m.appendReplacement(buf, Matcher.quoteReplacement(chr(decimal))); + } + m.appendTail(buf); + s = buf.toString(); + + s = validateEntities(s); + return s; + } + + private String validateEntities(final String s) + { + StringBuffer buf = new StringBuffer(); + + // validate entities throughout the string + Matcher m = P_VALID_ENTITIES.matcher(s); + while (m.find()) + { + final String one = m.group(1); // ([^&;]*) + final String two = m.group(2); // (?=(;|&|$)) + m.appendReplacement(buf, Matcher.quoteReplacement(checkEntity(one, two))); + } + m.appendTail(buf); + + return encodeQuotes(buf.toString()); + } + + private String encodeQuotes(final String s) + { + if (encodeQuotes) + { + StringBuffer buf = new StringBuffer(); + Matcher m = P_VALID_QUOTES.matcher(s); + while (m.find()) + { + final String one = m.group(1); // (>|^) + final String two = m.group(2); // ([^<]+?) + final String three = m.group(3); // (<|$) + // 涓嶆浛鎹㈠弻寮曞彿涓"锛岄槻姝son鏍煎紡鏃犳晥 regexReplace(P_QUOTE, """, two) + m.appendReplacement(buf, Matcher.quoteReplacement(one + two + three)); + } + m.appendTail(buf); + return buf.toString(); + } + else + { + return s; + } + } + + private String checkEntity(final String preamble, final String term) + { + + return ";".equals(term) && isValidEntity(preamble) ? '&' + preamble : "&" + preamble; + } + + private boolean isValidEntity(final String entity) + { + return inArray(entity, vAllowedEntities); + } + + private static boolean inArray(final String s, final String[] array) + { + for (String item : array) + { + if (item != null && item.equals(s)) + { + return true; + } + } + return false; + } + + private boolean allowed(final String name) + { + return (vAllowed.isEmpty() || vAllowed.containsKey(name)) && !inArray(name, vDisallowed); + } + + private boolean allowedAttribute(final String name, final String paramName) + { + return allowed(name) && (vAllowed.isEmpty() || vAllowed.get(name).contains(paramName)); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpHelper.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpHelper.java new file mode 100644 index 0000000000000000000000000000000000000000..1add63e9eff4be92374ae1e958d3591bb7b56ee3 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpHelper.java @@ -0,0 +1,56 @@ +package com.ruoyi.common.utils.http; + +import org.apache.commons.lang3.exception.ExceptionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.ServletRequest; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; + +/** + * 閫氱敤http宸ュ叿灏佽 + * + * @author ruoyi + */ +public class HttpHelper +{ + private static final Logger LOGGER = LoggerFactory.getLogger(HttpHelper.class); + + public static String getBodyString(ServletRequest request) + { + StringBuilder sb = new StringBuilder(); + BufferedReader reader = null; + try (InputStream inputStream = request.getInputStream()) + { + reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); + String line = ""; + while ((line = reader.readLine()) != null) + { + sb.append(line); + } + } + catch (IOException e) + { + LOGGER.warn("getBodyString鍑虹幇闂锛"); + } + finally + { + if (reader != null) + { + try + { + reader.close(); + } + catch (IOException e) + { + LOGGER.error(ExceptionUtils.getMessage(e)); + } + } + } + return sb.toString(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..e7dcd27cd18d3159c8924b322118ab24bf9eab84 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java @@ -0,0 +1,266 @@ +package com.ruoyi.common.utils.http; + +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.utils.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.net.ssl.*; +import java.io.*; +import java.net.ConnectException; +import java.net.SocketTimeoutException; +import java.net.URL; +import java.net.URLConnection; +import java.nio.charset.StandardCharsets; +import java.security.cert.X509Certificate; + +/** + * 閫氱敤http鍙戦佹柟娉 + * + * @author ruoyi + */ +public class HttpUtils +{ + private static final Logger log = LoggerFactory.getLogger(HttpUtils.class); + + /** + * 鍚戞寚瀹 URL 鍙戦丟ET鏂规硶鐨勮姹 + * + * @param url 鍙戦佽姹傜殑 URL + * @return 鎵浠h〃杩滅▼璧勬簮鐨勫搷搴旂粨鏋 + */ + public static String sendGet(String url) + { + return sendGet(url, StringUtils.EMPTY); + } + + /** + * 鍚戞寚瀹 URL 鍙戦丟ET鏂规硶鐨勮姹 + * + * @param url 鍙戦佽姹傜殑 URL + * @param param 璇锋眰鍙傛暟锛岃姹傚弬鏁板簲璇ユ槸 name1=value1&name2=value2 鐨勫舰寮忋 + * @return 鎵浠h〃杩滅▼璧勬簮鐨勫搷搴旂粨鏋 + */ + public static String sendGet(String url, String param) + { + return sendGet(url, param, Constants.UTF8); + } + + /** + * 鍚戞寚瀹 URL 鍙戦丟ET鏂规硶鐨勮姹 + * + * @param url 鍙戦佽姹傜殑 URL + * @param param 璇锋眰鍙傛暟锛岃姹傚弬鏁板簲璇ユ槸 name1=value1&name2=value2 鐨勫舰寮忋 + * @param contentType 缂栫爜绫诲瀷 + * @return 鎵浠h〃杩滅▼璧勬簮鐨勫搷搴旂粨鏋 + */ + public static String sendGet(String url, String param, String contentType) + { + StringBuilder result = new StringBuilder(); + BufferedReader in = null; + try + { + String urlNameString = StringUtils.isNotBlank(param) ? url + "?" + param : url; + log.info("sendGet - {}", urlNameString); + URL realUrl = new URL(urlNameString); + URLConnection connection = realUrl.openConnection(); + connection.setRequestProperty("accept", "*/*"); + connection.setRequestProperty("connection", "Keep-Alive"); + connection.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"); + connection.connect(); + in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType)); + String line; + while ((line = in.readLine()) != null) + { + result.append(line); + } + log.info("recv - {}", result); + } + catch (ConnectException e) + { + log.error("璋冪敤HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e); + } + catch (SocketTimeoutException e) + { + log.error("璋冪敤HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e); + } + catch (IOException e) + { + log.error("璋冪敤HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e); + } + catch (Exception e) + { + log.error("璋冪敤HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e); + } + finally + { + try + { + if (in != null) + { + in.close(); + } + } + catch (Exception ex) + { + log.error("璋冪敤in.close Exception, url=" + url + ",param=" + param, ex); + } + } + return result.toString(); + } + + /** + * 鍚戞寚瀹 URL 鍙戦丳OST鏂规硶鐨勮姹 + * + * @param url 鍙戦佽姹傜殑 URL + * @param param 璇锋眰鍙傛暟锛岃姹傚弬鏁板簲璇ユ槸 name1=value1&name2=value2 鐨勫舰寮忋 + * @return 鎵浠h〃杩滅▼璧勬簮鐨勫搷搴旂粨鏋 + */ + public static String sendPost(String url, String param) + { + PrintWriter out = null; + BufferedReader in = null; + StringBuilder result = new StringBuilder(); + try + { + log.info("sendPost - {}", url); + URL realUrl = new URL(url); + URLConnection conn = realUrl.openConnection(); + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"); + conn.setRequestProperty("Accept-Charset", "utf-8"); + conn.setRequestProperty("contentType", "utf-8"); + conn.setDoOutput(true); + conn.setDoInput(true); + out = new PrintWriter(conn.getOutputStream()); + out.print(param); + out.flush(); + in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8)); + String line; + while ((line = in.readLine()) != null) + { + result.append(line); + } + log.info("recv - {}", result); + } + catch (ConnectException e) + { + log.error("璋冪敤HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e); + } + catch (SocketTimeoutException e) + { + log.error("璋冪敤HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e); + } + catch (IOException e) + { + log.error("璋冪敤HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e); + } + catch (Exception e) + { + log.error("璋冪敤HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e); + } + finally + { + try + { + if (out != null) + { + out.close(); + } + if (in != null) + { + in.close(); + } + } + catch (IOException ex) + { + log.error("璋冪敤in.close Exception, url=" + url + ",param=" + param, ex); + } + } + return result.toString(); + } + + public static String sendSSLPost(String url, String param) + { + StringBuilder result = new StringBuilder(); + String urlNameString = url + "?" + param; + try + { + log.info("sendSSLPost - {}", urlNameString); + SSLContext sc = SSLContext.getInstance("SSL"); + sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom()); + URL console = new URL(urlNameString); + HttpsURLConnection conn = (HttpsURLConnection) console.openConnection(); + conn.setRequestProperty("accept", "*/*"); + conn.setRequestProperty("connection", "Keep-Alive"); + conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"); + conn.setRequestProperty("Accept-Charset", "utf-8"); + conn.setRequestProperty("contentType", "utf-8"); + conn.setDoOutput(true); + conn.setDoInput(true); + + conn.setSSLSocketFactory(sc.getSocketFactory()); + conn.setHostnameVerifier(new TrustAnyHostnameVerifier()); + conn.connect(); + InputStream is = conn.getInputStream(); + BufferedReader br = new BufferedReader(new InputStreamReader(is)); + String ret = ""; + while ((ret = br.readLine()) != null) + { + if (ret != null && !"".equals(ret.trim())) + { + result.append(new String(ret.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8)); + } + } + log.info("recv - {}", result); + conn.disconnect(); + br.close(); + } + catch (ConnectException e) + { + log.error("璋冪敤HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e); + } + catch (SocketTimeoutException e) + { + log.error("璋冪敤HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e); + } + catch (IOException e) + { + log.error("璋冪敤HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e); + } + catch (Exception e) + { + log.error("璋冪敤HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e); + } + return result.toString(); + } + + private static class TrustAnyTrustManager implements X509TrustManager + { + @Override + public void checkClientTrusted(X509Certificate[] chain, String authType) + { + } + + @Override + public void checkServerTrusted(X509Certificate[] chain, String authType) + { + } + + @Override + public X509Certificate[] getAcceptedIssuers() + { + return new X509Certificate[] {}; + } + } + + private static class TrustAnyHostnameVerifier implements HostnameVerifier + { + @Override + public boolean verify(String hostname, SSLSession session) + { + return true; + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/AddressUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/AddressUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..9248e3669f9027275e7a48faf9f7ef55f63af928 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/AddressUtils.java @@ -0,0 +1,56 @@ +package com.ruoyi.common.utils.ip; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.http.HttpUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 鑾峰彇鍦板潃绫 + * + * @author ruoyi + */ +public class AddressUtils +{ + private static final Logger log = LoggerFactory.getLogger(AddressUtils.class); + + // IP鍦板潃鏌ヨ + public static final String IP_URL = "http://whois.pconline.com.cn/ipJson.jsp"; + + // 鏈煡鍦板潃 + public static final String UNKNOWN = "XX XX"; + + public static String getRealAddressByIP(String ip) + { + // 鍐呯綉涓嶆煡璇 + if (IpUtils.internalIp(ip)) + { + return "鍐呯綉IP"; + } + if (RuoYiConfig.isAddressEnabled()) + { + try + { + String rspStr = HttpUtils.sendGet(IP_URL, "ip=" + ip + "&json=true", Constants.GBK); + if (StringUtils.isEmpty(rspStr)) + { + log.error("鑾峰彇鍦扮悊浣嶇疆寮傚父 {}", ip); + return UNKNOWN; + } + JSONObject obj = JSON.parseObject(rspStr); + String region = obj.getString("pro"); + String city = obj.getString("city"); + return String.format("%s %s", region, city); + } + catch (Exception e) + { + log.error("鑾峰彇鍦扮悊浣嶇疆寮傚父 {}", ip); + } + } + return UNKNOWN; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/IpUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/IpUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..ddd4514ce7548e184576b31bd1cdc3fae327471c --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/ip/IpUtils.java @@ -0,0 +1,383 @@ +package com.ruoyi.common.utils.ip; + +import com.ruoyi.common.utils.ServletUtils; +import com.ruoyi.common.utils.StringUtils; + +import javax.servlet.http.HttpServletRequest; +import java.net.InetAddress; +import java.net.UnknownHostException; + +/** + * 鑾峰彇IP鏂规硶 + * + * @author ruoyi + */ +public class IpUtils +{ + public final static String REGX_0_255 = "(25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]\\d|\\d)"; + // 鍖归厤 ip + public final static String REGX_IP = "((" + REGX_0_255 + "\\.){3}" + REGX_0_255 + ")"; + public final static String REGX_IP_WILDCARD = "(((\\*\\.){3}\\*)|(" + REGX_0_255 + "(\\.\\*){3})|(" + REGX_0_255 + "\\." + REGX_0_255 + ")(\\.\\*){2}" + "|((" + REGX_0_255 + "\\.){3}\\*))"; + // 鍖归厤缃戞 + public final static String REGX_IP_SEG = "(" + REGX_IP + "\\-" + REGX_IP + ")"; + + /** + * 鑾峰彇瀹㈡埛绔疘P + * + * @return IP鍦板潃 + */ + public static String getIpAddr() + { + return getIpAddr(ServletUtils.getRequest()); + } + + /** + * 鑾峰彇瀹㈡埛绔疘P + * + * @param request 璇锋眰瀵硅薄 + * @return IP鍦板潃 + */ + public static String getIpAddr(HttpServletRequest request) + { + if (request == null) + { + return "unknown"; + } + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getHeader("X-Forwarded-For"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getHeader("X-Real-IP"); + } + + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) + { + ip = request.getRemoteAddr(); + } + + return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : getMultistageReverseProxyIp(ip); + } + + /** + * 妫鏌ユ槸鍚︿负鍐呴儴IP鍦板潃 + * + * @param ip IP鍦板潃 + * @return 缁撴灉 + */ + public static boolean internalIp(String ip) + { + byte[] addr = textToNumericFormatV4(ip); + return internalIp(addr) || "127.0.0.1".equals(ip); + } + + /** + * 妫鏌ユ槸鍚︿负鍐呴儴IP鍦板潃 + * + * @param addr byte鍦板潃 + * @return 缁撴灉 + */ + private static boolean internalIp(byte[] addr) + { + if (StringUtils.isNull(addr) || addr.length < 2) + { + return true; + } + final byte b0 = addr[0]; + final byte b1 = addr[1]; + // 10.x.x.x/8 + final byte SECTION_1 = 0x0A; + // 172.16.x.x/12 + final byte SECTION_2 = (byte) 0xAC; + final byte SECTION_3 = (byte) 0x10; + final byte SECTION_4 = (byte) 0x1F; + // 192.168.x.x/16 + final byte SECTION_5 = (byte) 0xC0; + final byte SECTION_6 = (byte) 0xA8; + switch (b0) + { + case SECTION_1: + return true; + case SECTION_2: + if (b1 >= SECTION_3 && b1 <= SECTION_4) + { + return true; + } + case SECTION_5: + switch (b1) + { + case SECTION_6: + return true; + } + default: + return false; + } + } + + /** + * 灏咺Pv4鍦板潃杞崲鎴愬瓧鑺 + * + * @param text IPv4鍦板潃 + * @return byte 瀛楄妭 + */ + public static byte[] textToNumericFormatV4(String text) + { + if (text.length() == 0) + { + return null; + } + + byte[] bytes = new byte[4]; + String[] elements = text.split("\\.", -1); + try + { + long l; + int i; + switch (elements.length) + { + case 1: + l = Long.parseLong(elements[0]); + if ((l < 0L) || (l > 4294967295L)) + { + return null; + } + bytes[0] = (byte) (int) (l >> 24 & 0xFF); + bytes[1] = (byte) (int) ((l & 0xFFFFFF) >> 16 & 0xFF); + bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 2: + l = Integer.parseInt(elements[0]); + if ((l < 0L) || (l > 255L)) + { + return null; + } + bytes[0] = (byte) (int) (l & 0xFF); + l = Integer.parseInt(elements[1]); + if ((l < 0L) || (l > 16777215L)) + { + return null; + } + bytes[1] = (byte) (int) (l >> 16 & 0xFF); + bytes[2] = (byte) (int) ((l & 0xFFFF) >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 3: + for (i = 0; i < 2; ++i) + { + l = Integer.parseInt(elements[i]); + if ((l < 0L) || (l > 255L)) + { + return null; + } + bytes[i] = (byte) (int) (l & 0xFF); + } + l = Integer.parseInt(elements[2]); + if ((l < 0L) || (l > 65535L)) + { + return null; + } + bytes[2] = (byte) (int) (l >> 8 & 0xFF); + bytes[3] = (byte) (int) (l & 0xFF); + break; + case 4: + for (i = 0; i < 4; ++i) + { + l = Integer.parseInt(elements[i]); + if ((l < 0L) || (l > 255L)) + { + return null; + } + bytes[i] = (byte) (int) (l & 0xFF); + } + break; + default: + return null; + } + } + catch (NumberFormatException e) + { + return null; + } + return bytes; + } + + /** + * 鑾峰彇IP鍦板潃 + * + * @return 鏈湴IP鍦板潃 + */ + public static String getHostIp() + { + try + { + return InetAddress.getLocalHost().getHostAddress(); + } + catch (UnknownHostException e) + { + } + return "127.0.0.1"; + } + + /** + * 鑾峰彇涓绘満鍚 + * + * @return 鏈湴涓绘満鍚 + */ + public static String getHostName() + { + try + { + return InetAddress.getLocalHost().getHostName(); + } + catch (UnknownHostException e) + { + } + return "鏈煡"; + } + + /** + * 浠庡绾у弽鍚戜唬鐞嗕腑鑾峰緱绗竴涓潪unknown IP鍦板潃 + * + * @param ip 鑾峰緱鐨処P鍦板潃 + * @return 绗竴涓潪unknown IP鍦板潃 + */ + public static String getMultistageReverseProxyIp(String ip) + { + // 澶氱骇鍙嶅悜浠g悊妫娴 + if (ip != null && ip.indexOf(",") > 0) + { + final String[] ips = ip.trim().split(","); + for (String subIp : ips) + { + if (false == isUnknown(subIp)) + { + ip = subIp; + break; + } + } + } + return StringUtils.substring(ip, 0, 255); + } + + /** + * 妫娴嬬粰瀹氬瓧绗︿覆鏄惁涓烘湭鐭ワ紝澶氱敤浜庢娴婬TTP璇锋眰鐩稿叧 + * + * @param checkString 琚娴嬬殑瀛楃涓 + * @return 鏄惁鏈煡 + */ + public static boolean isUnknown(String checkString) + { + return StringUtils.isBlank(checkString) || "unknown".equalsIgnoreCase(checkString); + } + + /** + * 鏄惁涓篒P + */ + public static boolean isIP(String ip) + { + return StringUtils.isNotBlank(ip) && ip.matches(REGX_IP); + } + + /** + * 鏄惁涓篒P锛屾垨 *涓洪棿闅旂殑閫氶厤绗﹀湴鍧 + */ + public static boolean isIpWildCard(String ip) + { + return StringUtils.isNotBlank(ip) && ip.matches(REGX_IP_WILDCARD); + } + + /** + * 妫娴嬪弬鏁版槸鍚﹀湪ip閫氶厤绗﹂噷 + */ + public static boolean ipIsInWildCardNoCheck(String ipWildCard, String ip) + { + String[] s1 = ipWildCard.split("\\."); + String[] s2 = ip.split("\\."); + boolean isMatchedSeg = true; + for (int i = 0; i < s1.length && !s1[i].equals("*"); i++) + { + if (!s1[i].equals(s2[i])) + { + isMatchedSeg = false; + break; + } + } + return isMatchedSeg; + } + + /** + * 鏄惁涓虹壒瀹氭牸寮忓:鈥10.10.10.1-10.10.10.99鈥濈殑ip娈靛瓧绗︿覆 + */ + public static boolean isIPSegment(String ipSeg) + { + return StringUtils.isNotBlank(ipSeg) && ipSeg.matches(REGX_IP_SEG); + } + + /** + * 鍒ゆ柇ip鏄惁鍦ㄦ寚瀹氱綉娈典腑 + */ + public static boolean ipIsInNetNoCheck(String iparea, String ip) + { + int idx = iparea.indexOf('-'); + String[] sips = iparea.substring(0, idx).split("\\."); + String[] sipe = iparea.substring(idx + 1).split("\\."); + String[] sipt = ip.split("\\."); + long ips = 0L, ipe = 0L, ipt = 0L; + for (int i = 0; i < 4; ++i) + { + ips = ips << 8 | Integer.parseInt(sips[i]); + ipe = ipe << 8 | Integer.parseInt(sipe[i]); + ipt = ipt << 8 | Integer.parseInt(sipt[i]); + } + if (ips > ipe) + { + long t = ips; + ips = ipe; + ipe = t; + } + return ips <= ipt && ipt <= ipe; + } + + /** + * 鏍¢獙ip鏄惁绗﹀悎杩囨护涓茶鍒 + * + * @param filter 杩囨护IP鍒楄〃,鏀寔鍚庣紑'*'閫氶厤,鏀寔缃戞濡:`10.10.10.1-10.10.10.99` + * @param ip 鏍¢獙IP鍦板潃 + * @return boolean 缁撴灉 + */ + public static boolean isMatchedIp(String filter, String ip) + { + if (StringUtils.isEmpty(filter) || StringUtils.isEmpty(ip)) + { + return false; + } + String[] ips = filter.split(";"); + for (String iStr : ips) + { + if (isIP(iStr) && iStr.equals(ip)) + { + return true; + } + else if (isIpWildCard(iStr) && ipIsInWildCardNoCheck(iStr, ip)) + { + return true; + } + else if (isIPSegment(iStr) && ipIsInNetNoCheck(iStr, ip)) + { + return true; + } + } + return false; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/kd100/Kd100Util.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/kd100/Kd100Util.java new file mode 100644 index 0000000000000000000000000000000000000000..dd01d8533791de35da705889947e7b2f71817fb1 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/kd100/Kd100Util.java @@ -0,0 +1,107 @@ +package com.ruoyi.common.utils.kd100; + +import com.alibaba.fastjson2.JSONObject; +import com.google.gson.Gson; +import com.kuaidi100.sdk.api.BOrderOfficial; +import com.kuaidi100.sdk.api.QueryTrack; +import com.kuaidi100.sdk.contant.ApiInfoConstant; +import com.kuaidi100.sdk.core.IBaseClient; +import com.kuaidi100.sdk.pojo.HttpResult; +import com.kuaidi100.sdk.request.BOrderReq; +import com.kuaidi100.sdk.request.PrintReq; +import com.kuaidi100.sdk.request.QueryTrackParam; +import com.kuaidi100.sdk.request.QueryTrackReq; +import com.kuaidi100.sdk.utils.SignUtils; +import lombok.Getter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +/** + * 鍔熻兘锛 + * + * @author锛歀CL + * @create锛2022/04/25 15:50 + * @version锛2020 Version锛1.0 + */ +@Component +@Getter +public class Kd100Util { + + @Value("${kd100.key}") + private String key; + @Value("${kd100.customer}") + private String customer; + @Value("${kd100.secret}") + private String secret; + @Value("${kd100.userid}") + private String userid; + @Value("${kd100.check}") + private String check; + + /** + * 瀹炴椂蹇掓煡璇㈡帴鍙 + * @param com 蹇掑叕鍙 + * @param num 杩愬崟鍙 + * @return 缁撴灉 + */ + public JSONObject getExpressJsonData(String com, String num, String phone, String shippingPollToken) throws Exception { + QueryTrackReq queryTrackReq = new QueryTrackReq(); + QueryTrackParam queryTrackParam = new QueryTrackParam(); + queryTrackParam.setCom(com); + queryTrackParam.setNum(num); + queryTrackParam.setPhone(phone); + queryTrackParam.setResultv2("4"); + String param = new Gson().toJson(queryTrackParam); + + queryTrackReq.setParam(param); + queryTrackReq.setCustomer(customer); + queryTrackReq.setSign(SignUtils.querySign(param ,key,customer)); + + IBaseClient baseClient = new QueryTrack(); + HttpResult execute = baseClient.execute(queryTrackReq); + String body = execute.getBody(); + return JSONObject.parseObject(body); + } + + /** + * 鍟嗗瀵勪欢 + * @param kuaidicom 蹇掑叕鍙哥殑缂栫爜锛屼竴寰嬬敤灏忓啓瀛楁瘝锛岃銆婂揩閫掑叕鍙哥紪鐮併 + * @param sendManName 瀵勪欢浜哄鍚 + * @param sendManMobile 瀵勪欢浜虹殑鎵嬫満鍙 + * @param sendManPrintAddr 瀵勪欢浜烘墍鍦ㄧ殑瀹屾暣鍦板潃锛屽骞夸笢娣卞湷甯傛繁鍦冲競鍗楀北鍖虹鎶鍗楀崄浜岃矾2鍙烽噾铦惰蒋浠跺洯B10 + * @param recManName 鏀朵欢浜哄鍚 + * @param recManMobile 鏀朵欢浜虹殑鎵嬫満鍙 + * @param recManPrintAddr 鏀朵欢浜烘墍鍦ㄥ畬鏁村湴鍧锛屽骞夸笢娣卞湷甯傛繁鍦冲競鍗楀北鍖虹鎶鍗楀崄浜岃矾2鍙烽噾铦惰蒋浠跺洯 + * @throws Exception 寮傚父 + */ + public JSONObject testBorderOfficial(String kuaidicom, String sendManName, String sendManMobile, String sendManPrintAddr, String recManName, String recManMobile, String recManPrintAddr) throws Exception { + PrintReq printReq = new PrintReq(); + BOrderReq bOrderReq = new BOrderReq(); + bOrderReq.setKuaidicom(kuaidicom); + // 瀵勪欢浜轰俊鎭 + bOrderReq.setSendManName(sendManName); + bOrderReq.setSendManMobile(sendManMobile); + bOrderReq.setSendManPrintAddr(sendManPrintAddr); + // 鏀朵欢浜轰俊鎭 + bOrderReq.setRecManName(recManName); + bOrderReq.setRecManMobile(recManMobile); + bOrderReq.setRecManPrintAddr(recManPrintAddr); + + bOrderReq.setCallBackUrl("https://server.chsie.com.cn/api/weiXin/kuaiDiCallBack"); + + String t = String.valueOf(System.currentTimeMillis()); + String param = new Gson().toJson(bOrderReq); + + printReq.setKey(key); + printReq.setSign(SignUtils.printSign(param,t,key,secret)); + printReq.setT(t); + printReq.setParam(param); + printReq.setMethod(ApiInfoConstant.B_ORDER_OFFICIAL_ORDER_METHOD); + System.out.println(printReq); + IBaseClient bOrder = new BOrderOfficial(); + HttpResult execute = bOrder.execute(printReq); + String body = execute.getBody(); + return JSONObject.parseObject(body); + } + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/kd100/MD5.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/kd100/MD5.java new file mode 100644 index 0000000000000000000000000000000000000000..e99a3dc48a1c03cb7e652f8e9450e0115507da27 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/kd100/MD5.java @@ -0,0 +1,47 @@ +package com.ruoyi.common.utils.kd100; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class MD5 { + // 鑾峰緱MD5鎽樿绠楁硶鐨 MessageDigest 瀵硅薄 + private static MessageDigest _mdInst = null; + private static char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; + private static MessageDigest getMdInst() { + if (_mdInst == null) { + try { + _mdInst = MessageDigest.getInstance("MD5"); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + } + return _mdInst; + } + + public final static String encode(String s) { + try { + byte[] btInput = s.getBytes(); + // 浣跨敤鎸囧畾鐨勫瓧鑺傛洿鏂版憳瑕 + getMdInst().update(btInput); + // 鑾峰緱瀵嗘枃 + byte[] md = getMdInst().digest(); + // 鎶婂瘑鏂囪浆鎹㈡垚鍗佸叚杩涘埗鐨勫瓧绗︿覆褰㈠紡 + int j = md.length; + char str[] = new char[j * 2]; + int k = 0; + for (int i = 0; i < j; i++) { + byte byte0 = md[i]; + str[k++] = hexDigits[byte0 >>> 4 & 0xf]; + str[k++] = hexDigits[byte0 & 0xf]; + } + return new String(str); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + public static void main(String[] arg){ + System.out.print(MD5.encode("abc杩欐槸涓涓祴璇123")); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelHandlerAdapter.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelHandlerAdapter.java new file mode 100644 index 0000000000000000000000000000000000000000..ccab2881826be71da45e8f0ba2c91896437dcfb4 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelHandlerAdapter.java @@ -0,0 +1,24 @@ +package com.ruoyi.common.utils.poi; + +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Workbook; + +/** + * Excel鏁版嵁鏍煎紡澶勭悊閫傞厤鍣 + * + * @author ruoyi + */ +public interface ExcelHandlerAdapter +{ + /** + * 鏍煎紡鍖 + * + * @param value 鍗曞厓鏍兼暟鎹 + * @param args excel娉ㄨВargs鍙傛暟缁 + * @param cell 鍗曞厓鏍煎璞 + * @param wb 宸ヤ綔绨垮璞 + * + * @return 澶勭悊鍚庣殑鍊 + */ + Object format(Object value, String[] args, Cell cell, Workbook wb); +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..5d743c54a63d89c4aaac1eb9cfbfd0d70a72605a --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java @@ -0,0 +1,1781 @@ +package com.ruoyi.common.utils.poi; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; +import com.ruoyi.common.annotation.Excel.Type; +import com.ruoyi.common.annotation.Excels; +import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.exception.UtilException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.DictUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.file.FileTypeUtils; +import com.ruoyi.common.utils.file.FileUtils; +import com.ruoyi.common.utils.file.ImageUtils; +import com.ruoyi.common.utils.reflect.ReflectUtils; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.RegExUtils; +import org.apache.commons.lang3.reflect.FieldUtils; +import org.apache.poi.hssf.usermodel.*; +import org.apache.poi.ooxml.POIXMLDocumentPart; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.ss.util.CellRangeAddressList; +import org.apache.poi.util.IOUtils; +import org.apache.poi.xssf.streaming.SXSSFWorkbook; +import org.apache.poi.xssf.usermodel.*; +import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.ParameterizedType; +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.*; +import java.util.stream.Collectors; + +/** + * Excel鐩稿叧澶勭悊 + * + * @author ruoyi + */ +public class ExcelUtil +{ + private static final Logger log = LoggerFactory.getLogger(ExcelUtil.class); + + public static final String FORMULA_REGEX_STR = "=|-|\\+|@"; + + public static final String[] FORMULA_STR = { "=", "-", "+", "@" }; + + /** + * 鐢ㄤ簬dictType灞炴ф暟鎹瓨鍌紝閬垮厤閲嶅鏌ョ紦瀛 + */ + public Map sysDictMap = new HashMap(); + + /** + * Excel sheet鏈澶ц鏁帮紝榛樿65536 + */ + public static final int sheetSize = 65536; + + /** + * 宸ヤ綔琛ㄥ悕绉 + */ + private String sheetName; + + /** + * 瀵煎嚭绫诲瀷锛圗XPORT:瀵煎嚭鏁版嵁锛汭MPORT锛氬鍏ユā鏉匡級 + */ + private Type type; + + /** + * 宸ヤ綔钖勫璞 + */ + private Workbook wb; + + /** + * 宸ヤ綔琛ㄥ璞 + */ + private Sheet sheet; + + /** + * 鏍峰紡鍒楄〃 + */ + private Map styles; + + /** + * 瀵煎叆瀵煎嚭鏁版嵁鍒楄〃 + */ + private List list; + + /** + * 娉ㄨВ鍒楄〃 + */ + private List fields; + + /** + * 褰撳墠琛屽彿 + */ + private int rownum; + + /** + * 鏍囬 + */ + private String title; + + /** + * 鏈澶ч珮搴 + */ + private short maxHeight; + + /** + * 鍚堝苟鍚庢渶鍚庤鏁 + */ + private int subMergedLastRowNum = 0; + + /** + * 鍚堝苟鍚庡紑濮嬭鏁 + */ + private int subMergedFirstRowNum = 1; + + /** + * 瀵硅薄鐨勫瓙鍒楄〃鏂规硶 + */ + private Method subMethod; + + /** + * 瀵硅薄鐨勫瓙鍒楄〃灞炴 + */ + private List subFields; + + /** + * 缁熻鍒楄〃 + */ + private Map statistics = new HashMap(); + + /** + * 鏁板瓧鏍煎紡 + */ + private static final DecimalFormat DOUBLE_FORMAT = new DecimalFormat("######0.00"); + + /** + * 瀹炰綋瀵硅薄 + */ + public Class clazz; + + /** + * 闇瑕佹帓闄ゅ垪灞炴 + */ + public String[] excludeFields; + + public ExcelUtil(Class clazz) + { + this.clazz = clazz; + } + + /** + * 闅愯棌Excel涓垪灞炴 + * + * @param fields 鍒楀睘鎬у悕 绀轰緥[鍗曚釜"name"/澶氫釜"id","name"] + * @throws Exception + */ + public void hideColumn(String... fields) + { + this.excludeFields = fields; + } + + public void init(List list, String sheetName, String title, Type type) + { + if (list == null) + { + list = new ArrayList(); + } + this.list = list; + this.sheetName = sheetName; + this.type = type; + this.title = title; + createExcelField(); + createWorkbook(); + createTitle(); + createSubHead(); + } + + /** + * 鍒涘缓excel绗竴琛屾爣棰 + */ + public void createTitle() + { + if (StringUtils.isNotEmpty(title)) + { + subMergedFirstRowNum++; + subMergedLastRowNum++; + int titleLastCol = this.fields.size() - 1; + if (isSubList()) + { + titleLastCol = titleLastCol + subFields.size() - 1; + } + Row titleRow = sheet.createRow(rownum == 0 ? rownum++ : 0); + titleRow.setHeightInPoints(30); + Cell titleCell = titleRow.createCell(0); + titleCell.setCellStyle(styles.get("title")); + titleCell.setCellValue(title); + sheet.addMergedRegion(new CellRangeAddress(titleRow.getRowNum(), titleRow.getRowNum(), titleRow.getRowNum(), titleLastCol)); + } + } + + /** + * 鍒涘缓瀵硅薄鐨勫瓙鍒楄〃鍚嶇О + */ + public void createSubHead() + { + if (isSubList()) + { + subMergedFirstRowNum++; + subMergedLastRowNum++; + Row subRow = sheet.createRow(rownum); + int excelNum = 0; + for (Object[] objects : fields) + { + Excel attr = (Excel) objects[1]; + Cell headCell1 = subRow.createCell(excelNum); + headCell1.setCellValue(attr.name()); + headCell1.setCellStyle(styles.get(StringUtils.format("header_{}_{}", attr.headerColor(), attr.headerBackgroundColor()))); + excelNum++; + } + int headFirstRow = excelNum - 1; + int headLastRow = headFirstRow + subFields.size() - 1; + if (headLastRow > headFirstRow) + { + sheet.addMergedRegion(new CellRangeAddress(rownum, rownum, headFirstRow, headLastRow)); + } + rownum++; + } + } + + /** + * 瀵筫xcel琛ㄥ崟榛樿绗竴涓储寮曞悕杞崲鎴恖ist + * + * @param is 杈撳叆娴 + * @return 杞崲鍚庨泦鍚 + */ + public List importExcel(InputStream is) + { + List list = null; + try + { + list = importExcel(is, 0); + } + catch (Exception e) + { + log.error("瀵煎叆Excel寮傚父{}", e.getMessage()); + throw new UtilException(e.getMessage()); + } + finally + { + IOUtils.closeQuietly(is); + } + return list; + } + + /** + * 瀵筫xcel琛ㄥ崟榛樿绗竴涓储寮曞悕杞崲鎴恖ist + * + * @param is 杈撳叆娴 + * @param titleNum 鏍囬鍗犵敤琛屾暟 + * @return 杞崲鍚庨泦鍚 + */ + public List importExcel(InputStream is, int titleNum) throws Exception + { + return importExcel(StringUtils.EMPTY, is, titleNum); + } + + /** + * 瀵筫xcel琛ㄥ崟鎸囧畾琛ㄦ牸绱㈠紩鍚嶈浆鎹㈡垚list + * + * @param sheetName 琛ㄦ牸绱㈠紩鍚 + * @param titleNum 鏍囬鍗犵敤琛屾暟 + * @param is 杈撳叆娴 + * @return 杞崲鍚庨泦鍚 + */ + public List importExcel(String sheetName, InputStream is, int titleNum) throws Exception + { + this.type = Type.IMPORT; + this.wb = WorkbookFactory.create(is); + List list = new ArrayList(); + // 濡傛灉鎸囧畾sheet鍚,鍒欏彇鎸囧畾sheet涓殑鍐呭 鍚﹀垯榛樿鎸囧悜绗1涓猻heet + Sheet sheet = StringUtils.isNotEmpty(sheetName) ? wb.getSheet(sheetName) : wb.getSheetAt(0); + if (sheet == null) + { + throw new IOException("鏂囦欢sheet涓嶅瓨鍦"); + } + boolean isXSSFWorkbook = !(wb instanceof HSSFWorkbook); + Map pictures; + if (isXSSFWorkbook) + { + pictures = getSheetPictures07((XSSFSheet) sheet, (XSSFWorkbook) wb); + } + else + { + pictures = getSheetPictures03((HSSFSheet) sheet, (HSSFWorkbook) wb); + } + // 鑾峰彇鏈鍚庝竴涓潪绌鸿鐨勮涓嬫爣锛屾瘮濡傛昏鏁颁负n锛屽垯杩斿洖鐨勪负n-1 + int rows = sheet.getLastRowNum(); + if (rows > 0) + { + // 瀹氫箟涓涓猰ap鐢ㄤ簬瀛樻斁excel鍒楃殑搴忓彿鍜宖ield. + Map cellMap = new HashMap(); + // 鑾峰彇琛ㄥご + Row heard = sheet.getRow(titleNum); + for (int i = 0; i < heard.getPhysicalNumberOfCells(); i++) + { + Cell cell = heard.getCell(i); + if (StringUtils.isNotNull(cell)) + { + String value = this.getCellValue(heard, i).toString(); + cellMap.put(value, i); + } + else + { + cellMap.put(null, i); + } + } + // 鏈夋暟鎹椂鎵嶅鐞 寰楀埌绫荤殑鎵鏈塮ield. + List fields = this.getFields(); + Map fieldsMap = new HashMap(); + for (Object[] objects : fields) + { + Excel attr = (Excel) objects[1]; + Integer column = cellMap.get(attr.name()); + if (column != null) + { + fieldsMap.put(column, objects); + } + } + for (int i = titleNum + 1; i <= rows; i++) + { + // 浠庣2琛屽紑濮嬪彇鏁版嵁,榛樿绗竴琛屾槸琛ㄥご. + Row row = sheet.getRow(i); + // 鍒ゆ柇褰撳墠琛屾槸鍚︽槸绌鸿 + if (isRowEmpty(row)) + { + continue; + } + T entity = null; + for (Map.Entry entry : fieldsMap.entrySet()) + { + Object val = this.getCellValue(row, entry.getKey()); + + // 濡傛灉涓嶅瓨鍦ㄥ疄渚嬪垯鏂板缓. + entity = (entity == null ? clazz.newInstance() : entity); + // 浠巑ap涓緱鍒板搴斿垪鐨刦ield. + Field field = (Field) entry.getValue()[0]; + Excel attr = (Excel) entry.getValue()[1]; + // 鍙栧緱绫诲瀷,骞舵牴鎹璞$被鍨嬭缃. + Class fieldType = field.getType(); + if (String.class == fieldType) + { + String s = Convert.toStr(val); + if (StringUtils.endsWith(s, ".0")) + { + val = StringUtils.substringBefore(s, ".0"); + } + else + { + String dateFormat = field.getAnnotation(Excel.class).dateFormat(); + if (StringUtils.isNotEmpty(dateFormat)) + { + val = parseDateToStr(dateFormat, val); + } + else + { + val = Convert.toStr(val); + } + } + } + else if ((Integer.TYPE == fieldType || Integer.class == fieldType) && StringUtils.isNumeric(Convert.toStr(val))) + { + val = Convert.toInt(val); + } + else if ((Long.TYPE == fieldType || Long.class == fieldType) && StringUtils.isNumeric(Convert.toStr(val))) + { + val = Convert.toLong(val); + } + else if (Double.TYPE == fieldType || Double.class == fieldType) + { + val = Convert.toDouble(val); + } + else if (Float.TYPE == fieldType || Float.class == fieldType) + { + val = Convert.toFloat(val); + } + else if (BigDecimal.class == fieldType) + { + val = Convert.toBigDecimal(val); + } + else if (Date.class == fieldType) + { + if (val instanceof String) + { + val = DateUtils.parseDate(val); + } + else if (val instanceof Double) + { + val = DateUtil.getJavaDate((Double) val); + } + } + else if (Boolean.TYPE == fieldType || Boolean.class == fieldType) + { + val = Convert.toBool(val, false); + } + if (StringUtils.isNotNull(fieldType)) + { + String propertyName = field.getName(); + if (StringUtils.isNotEmpty(attr.targetAttr())) + { + propertyName = field.getName() + "." + attr.targetAttr(); + } + if (StringUtils.isNotEmpty(attr.readConverterExp())) + { + val = reverseByExp(Convert.toStr(val), attr.readConverterExp(), attr.separator()); + } + else if (StringUtils.isNotEmpty(attr.dictType())) + { + if (!sysDictMap.containsKey(attr.dictType() + val)) + { + String dictValue = reverseDictByExp(Convert.toStr(val), attr.dictType(), attr.separator()); + sysDictMap.put(attr.dictType() + val, dictValue); + } + val = sysDictMap.get(attr.dictType() + val); + } + else if (!attr.handler().equals(ExcelHandlerAdapter.class)) + { + val = dataFormatHandlerAdapter(val, attr, null); + } + else if (ColumnType.IMAGE == attr.cellType() && StringUtils.isNotEmpty(pictures)) + { + PictureData image = pictures.get(row.getRowNum() + "_" + entry.getKey()); + if (image == null) + { + val = ""; + } + else + { + byte[] data = image.getData(); + val = FileUtils.writeImportBytes(data); + } + } + ReflectUtils.invokeSetter(entity, propertyName, val); + } + } + list.add(entity); + } + } + return list; + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @param list 瀵煎嚭鏁版嵁闆嗗悎 + * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О + * @return 缁撴灉 + */ + public AjaxResult exportExcel(List list, String sheetName) + { + return exportExcel(list, sheetName, StringUtils.EMPTY); + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @param list 瀵煎嚭鏁版嵁闆嗗悎 + * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О + * @param title 鏍囬 + * @return 缁撴灉 + */ + public AjaxResult exportExcel(List list, String sheetName, String title) + { + this.init(list, sheetName, title, Type.EXPORT); + return exportExcel(); + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @param response 杩斿洖鏁版嵁 + * @param list 瀵煎嚭鏁版嵁闆嗗悎 + * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О + * @return 缁撴灉 + */ + public void exportExcel(HttpServletResponse response, List list, String sheetName) + { + exportExcel(response, list, sheetName, StringUtils.EMPTY); + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @param response 杩斿洖鏁版嵁 + * @param list 瀵煎嚭鏁版嵁闆嗗悎 + * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О + * @return 缁撴灉 + */ + public void exportExcel(List list, String sheetName,HttpServletResponse response) + { + exportExcel(response, list, sheetName, StringUtils.EMPTY); + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @param response 杩斿洖鏁版嵁 + * @param list 瀵煎嚭鏁版嵁闆嗗悎 + * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О + * @param title 鏍囬 + * @return 缁撴灉 + */ + public void exportExcel(HttpServletResponse response, List list, String sheetName, String title) + { + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + this.init(list, sheetName, title, Type.EXPORT); + exportExcel(response); + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О + * @return 缁撴灉 + */ + public AjaxResult importTemplateExcel(String sheetName) + { + return importTemplateExcel(sheetName, StringUtils.EMPTY); + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О + * @param title 鏍囬 + * @return 缁撴灉 + */ + public AjaxResult importTemplateExcel(String sheetName, String title) + { + this.init(null, sheetName, title, Type.IMPORT); + return exportExcel(); + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О + * @return 缁撴灉 + */ + public void importTemplateExcel(HttpServletResponse response, String sheetName) + { + importTemplateExcel(response, sheetName, StringUtils.EMPTY); + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @param sheetName 宸ヤ綔琛ㄧ殑鍚嶇О + * @param title 鏍囬 + * @return 缁撴灉 + */ + public void importTemplateExcel(HttpServletResponse response, String sheetName, String title) + { + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + this.init(null, sheetName, title, Type.IMPORT); + exportExcel(response); + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @return 缁撴灉 + */ + public void exportExcel(HttpServletResponse response) + { + try + { + writeSheet(); + wb.write(response.getOutputStream()); + } + catch (Exception e) + { + log.error("瀵煎嚭Excel寮傚父{}", e.getMessage()); + } + finally + { + IOUtils.closeQuietly(wb); + } + } + + /** + * 瀵筶ist鏁版嵁婧愬皢鍏堕噷闈㈢殑鏁版嵁瀵煎叆鍒癳xcel琛ㄥ崟 + * + * @return 缁撴灉 + */ + public AjaxResult exportExcel() + { + OutputStream out = null; + try + { + writeSheet(); + String filename = encodingFilename(sheetName); + out = new FileOutputStream(getAbsoluteFile(filename)); + wb.write(out); + return AjaxResult.success(filename); + } + catch (Exception e) + { + log.error("瀵煎嚭Excel寮傚父{}", e.getMessage()); + throw new UtilException("瀵煎嚭Excel澶辫触锛岃鑱旂郴缃戠珯绠$悊鍛橈紒"); + } + finally + { + IOUtils.closeQuietly(wb); + IOUtils.closeQuietly(out); + } + } + + /** + * 鍒涘缓鍐欏叆鏁版嵁鍒癝heet + */ + public void writeSheet() + { + // 鍙栧嚭涓鍏辨湁澶氬皯涓猻heet. + int sheetNo = Math.max(1, (int) Math.ceil(list.size() * 1.0 / sheetSize)); + for (int index = 0; index < sheetNo; index++) + { + createSheet(sheetNo, index); + + // 浜х敓涓琛 + Row row = sheet.createRow(rownum); + int column = 0; + // 鍐欏叆鍚勪釜瀛楁鐨勫垪澶村悕绉 + for (Object[] os : fields) + { + Field field = (Field) os[0]; + Excel excel = (Excel) os[1]; + if (Collection.class.isAssignableFrom(field.getType())) + { + for (Field subField : subFields) + { + Excel subExcel = subField.getAnnotation(Excel.class); + this.createHeadCell(subExcel, row, column++); + } + } + else + { + this.createHeadCell(excel, row, column++); + } + } + if (Type.EXPORT.equals(type)) + { + fillExcelData(index, row); + addStatisticsRow(); + } + } + } + + /** + * 濉厖excel鏁版嵁 + * + * @param index 搴忓彿 + * @param row 鍗曞厓鏍艰 + */ + @SuppressWarnings("unchecked") + public void fillExcelData(int index, Row row) + { + int startNo = index * sheetSize; + int endNo = Math.min(startNo + sheetSize, list.size()); + int rowNo = (1 + rownum) - startNo; + for (int i = startNo; i < endNo; i++) + { + rowNo = isSubList() ? (i > 1 ? rowNo + 1 : rowNo + i) : i + 1 + rownum - startNo; + row = sheet.createRow(rowNo); + // 寰楀埌瀵煎嚭瀵硅薄. + T vo = (T) list.get(i); + Collection subList = null; + if (isSubList()) + { + if (isSubListValue(vo)) + { + subList = getListCellValue(vo); + subMergedLastRowNum = subMergedLastRowNum + subList.size(); + } + else + { + subMergedFirstRowNum++; + subMergedLastRowNum++; + } + } + int column = 0; + for (Object[] os : fields) + { + Field field = (Field) os[0]; + Excel excel = (Excel) os[1]; + if (Collection.class.isAssignableFrom(field.getType()) && StringUtils.isNotNull(subList)) + { + boolean subFirst = false; + for (Object obj : subList) + { + if (subFirst) + { + rowNo++; + row = sheet.createRow(rowNo); + } + List subFields = FieldUtils.getFieldsListWithAnnotation(obj.getClass(), Excel.class); + int subIndex = 0; + for (Field subField : subFields) + { + if (subField.isAnnotationPresent(Excel.class)) + { + subField.setAccessible(true); + Excel attr = subField.getAnnotation(Excel.class); + this.addCell(attr, row, (T) obj, subField, column + subIndex); + } + subIndex++; + } + subFirst = true; + } + this.subMergedFirstRowNum = this.subMergedFirstRowNum + subList.size(); + } + else + { + this.addCell(excel, row, vo, field, column++); + } + } + } + } + + /** + * 鍒涘缓琛ㄦ牸鏍峰紡 + * + * @param wb 宸ヤ綔钖勫璞 + * @return 鏍峰紡鍒楄〃 + */ + private Map createStyles(Workbook wb) + { + // 鍐欏叆鍚勬潯璁板綍,姣忔潯璁板綍瀵瑰簲excel琛ㄤ腑鐨勪竴琛 + Map styles = new HashMap(); + CellStyle style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + Font titleFont = wb.createFont(); + titleFont.setFontName("Arial"); + titleFont.setFontHeightInPoints((short) 16); + titleFont.setBold(true); + style.setFont(titleFont); + DataFormat dataFormat = wb.createDataFormat(); + style.setDataFormat(dataFormat.getFormat("@")); + styles.put("title", style); + + style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setBorderRight(BorderStyle.THIN); + style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderLeft(BorderStyle.THIN); + style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderTop(BorderStyle.THIN); + style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderBottom(BorderStyle.THIN); + style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + Font dataFont = wb.createFont(); + dataFont.setFontName("Arial"); + dataFont.setFontHeightInPoints((short) 10); + style.setFont(dataFont); + styles.put("data", style); + + style = wb.createCellStyle(); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + Font totalFont = wb.createFont(); + totalFont.setFontName("Arial"); + totalFont.setFontHeightInPoints((short) 10); + style.setFont(totalFont); + styles.put("total", style); + + styles.putAll(annotationHeaderStyles(wb, styles)); + + styles.putAll(annotationDataStyles(wb)); + + return styles; + } + + /** + * 鏍规嵁Excel娉ㄨВ鍒涘缓琛ㄦ牸澶存牱寮 + * + * @param wb 宸ヤ綔钖勫璞 + * @return 鑷畾涔夋牱寮忓垪琛 + */ + private Map annotationHeaderStyles(Workbook wb, Map styles) + { + Map headerStyles = new HashMap(); + for (Object[] os : fields) + { + Excel excel = (Excel) os[1]; + String key = StringUtils.format("header_{}_{}", excel.headerColor(), excel.headerBackgroundColor()); + if (!headerStyles.containsKey(key)) + { + CellStyle style = wb.createCellStyle(); + style.cloneStyleFrom(styles.get("data")); + style.setAlignment(HorizontalAlignment.CENTER); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setFillForegroundColor(excel.headerBackgroundColor().index); + style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + Font headerFont = wb.createFont(); + headerFont.setFontName("Arial"); + headerFont.setFontHeightInPoints((short) 10); + headerFont.setBold(true); + headerFont.setColor(excel.headerColor().index); + style.setFont(headerFont); + // 璁剧疆琛ㄦ牸澶村崟鍏冩牸鏂囨湰褰㈠紡 + DataFormat dataFormat = wb.createDataFormat(); + style.setDataFormat(dataFormat.getFormat("@")); + headerStyles.put(key, style); + } + } + return headerStyles; + } + + /** + * 鏍规嵁Excel娉ㄨВ鍒涘缓琛ㄦ牸鍒楁牱寮 + * + * @param wb 宸ヤ綔钖勫璞 + * @return 鑷畾涔夋牱寮忓垪琛 + */ + private Map annotationDataStyles(Workbook wb) + { + Map styles = new HashMap(); + for (Object[] os : fields) + { + Field field = (Field) os[0]; + Excel excel = (Excel) os[1]; + if (Collection.class.isAssignableFrom(field.getType())) + { + ParameterizedType pt = (ParameterizedType) field.getGenericType(); + Class subClass = (Class) pt.getActualTypeArguments()[0]; + List subFields = FieldUtils.getFieldsListWithAnnotation(subClass, Excel.class); + for (Field subField : subFields) + { + Excel subExcel = subField.getAnnotation(Excel.class); + annotationDataStyles(styles, subField, subExcel); + } + } + else + { + annotationDataStyles(styles, field, excel); + } + } + return styles; + } + + /** + * 鏍规嵁Excel娉ㄨВ鍒涘缓琛ㄦ牸鍒楁牱寮 + * + * @param styles 鑷畾涔夋牱寮忓垪琛 + * @param field 灞炴у垪淇℃伅 + * @param excel 娉ㄨВ淇℃伅 + */ + public void annotationDataStyles(Map styles, Field field, Excel excel) + { + String key = StringUtils.format("data_{}_{}_{}_{}", excel.align(), excel.color(), excel.backgroundColor(), excel.cellType()); + if (!styles.containsKey(key)) + { + CellStyle style = wb.createCellStyle(); + style.setAlignment(excel.align()); + style.setVerticalAlignment(VerticalAlignment.CENTER); + style.setBorderRight(BorderStyle.THIN); + style.setRightBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderLeft(BorderStyle.THIN); + style.setLeftBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderTop(BorderStyle.THIN); + style.setTopBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setBorderBottom(BorderStyle.THIN); + style.setBottomBorderColor(IndexedColors.GREY_50_PERCENT.getIndex()); + style.setFillPattern(FillPatternType.SOLID_FOREGROUND); + style.setFillForegroundColor(excel.backgroundColor().getIndex()); + Font dataFont = wb.createFont(); + dataFont.setFontName("Arial"); + dataFont.setFontHeightInPoints((short) 10); + dataFont.setColor(excel.color().index); + style.setFont(dataFont); + if (ColumnType.TEXT == excel.cellType()) + { + DataFormat dataFormat = wb.createDataFormat(); + style.setDataFormat(dataFormat.getFormat("@")); + } + styles.put(key, style); + } + } + + /** + * 鍒涘缓鍗曞厓鏍 + */ + public Cell createHeadCell(Excel attr, Row row, int column) + { + // 鍒涘缓鍒 + Cell cell = row.createCell(column); + // 鍐欏叆鍒椾俊鎭 + cell.setCellValue(attr.name()); + setDataValidation(attr, row, column); + cell.setCellStyle(styles.get(StringUtils.format("header_{}_{}", attr.headerColor(), attr.headerBackgroundColor()))); + if (isSubList()) + { + // 濉厖榛樿鏍峰紡锛岄槻姝㈠悎骞跺崟鍏冩牸鏍峰紡澶辨晥 + sheet.setDefaultColumnStyle(column, styles.get(StringUtils.format("data_{}_{}_{}_{}", attr.align(), attr.color(), attr.backgroundColor(), attr.cellType()))); + if (attr.needMerge()) + { + sheet.addMergedRegion(new CellRangeAddress(rownum - 1, rownum, column, column)); + } + } + return cell; + } + + /** + * 璁剧疆鍗曞厓鏍间俊鎭 + * + * @param value 鍗曞厓鏍煎 + * @param attr 娉ㄨВ鐩稿叧 + * @param cell 鍗曞厓鏍间俊鎭 + */ + public void setCellVo(Object value, Excel attr, Cell cell) + { + if (ColumnType.STRING == attr.cellType() || ColumnType.TEXT == attr.cellType()) + { + String cellValue = Convert.toStr(value); + // 瀵逛簬浠讳綍浠ヨ〃杈惧紡瑙﹀彂瀛楃 =-+@寮澶寸殑鍗曞厓鏍硷紝鐩存帴浣跨敤tab瀛楃浣滀负鍓嶇紑锛岄槻姝SV娉ㄥ叆銆 + if (StringUtils.startsWithAny(cellValue, FORMULA_STR)) + { + cellValue = RegExUtils.replaceFirst(cellValue, FORMULA_REGEX_STR, "\t$0"); + } + if (value instanceof Collection && StringUtils.equals("[]", cellValue)) + { + cellValue = StringUtils.EMPTY; + } + cell.setCellValue(StringUtils.isNull(cellValue) ? attr.defaultValue() : cellValue + attr.suffix()); + } + else if (ColumnType.NUMERIC == attr.cellType()) + { + if (StringUtils.isNotNull(value)) + { + cell.setCellValue(StringUtils.contains(Convert.toStr(value), ".") ? Convert.toDouble(value) : Convert.toInt(value)); + } + } + else if (ColumnType.IMAGE == attr.cellType()) + { + ClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, (short) cell.getColumnIndex(), cell.getRow().getRowNum(), (short) (cell.getColumnIndex() + 1), cell.getRow().getRowNum() + 1); + String imagePath = Convert.toStr(value); + if (StringUtils.isNotEmpty(imagePath)) + { + byte[] data = ImageUtils.getImage(imagePath); + getDrawingPatriarch(cell.getSheet()).createPicture(anchor, + cell.getSheet().getWorkbook().addPicture(data, getImageType(data))); + } + } + } + + /** + * 鑾峰彇鐢诲竷 + */ + public static Drawing getDrawingPatriarch(Sheet sheet) + { + if (sheet.getDrawingPatriarch() == null) + { + sheet.createDrawingPatriarch(); + } + return sheet.getDrawingPatriarch(); + } + + /** + * 鑾峰彇鍥剧墖绫诲瀷,璁剧疆鍥剧墖鎻掑叆绫诲瀷 + */ + public int getImageType(byte[] value) + { + String type = FileTypeUtils.getFileExtendName(value); + if ("JPG".equalsIgnoreCase(type)) + { + return Workbook.PICTURE_TYPE_JPEG; + } + else if ("PNG".equalsIgnoreCase(type)) + { + return Workbook.PICTURE_TYPE_PNG; + } + return Workbook.PICTURE_TYPE_JPEG; + } + + /** + * 鍒涘缓琛ㄦ牸鏍峰紡 + */ + public void setDataValidation(Excel attr, Row row, int column) + { + if (attr.name().indexOf("娉細") >= 0) + { + sheet.setColumnWidth(column, 6000); + } + else + { + // 璁剧疆鍒楀 + sheet.setColumnWidth(column, (int) ((attr.width() + 0.72) * 256)); + } + if (StringUtils.isNotEmpty(attr.prompt()) || attr.combo().length > 0 || attr.comboReadDict()) + { + String[] comboArray = attr.combo(); + if (attr.comboReadDict()) + { + if (!sysDictMap.containsKey("combo_" + attr.dictType())) + { + String labels = DictUtils.getDictLabels(attr.dictType()); + sysDictMap.put("combo_" + attr.dictType(), labels); + } + String val = sysDictMap.get("combo_" + attr.dictType()); + comboArray = StringUtils.split(val, DictUtils.SEPARATOR); + } + if (comboArray.length > 15 || StringUtils.join(comboArray).length() > 255) + { + // 濡傛灉涓嬫媺鏁板ぇ浜15鎴栧瓧绗︿覆闀垮害澶т簬255锛屽垯浣跨敤涓涓柊sheet瀛樺偍锛岄伩鍏嶇敓鎴愮殑妯℃澘涓嬫媺鍊艰幏鍙栦笉鍒 + setXSSFValidationWithHidden(sheet, comboArray, attr.prompt(), 1, 100, column, column); + } + else + { + // 鎻愮ず淇℃伅鎴栧彧鑳介夋嫨涓嶈兘杈撳叆鐨勫垪鍐呭. + setPromptOrValidation(sheet, comboArray, attr.prompt(), 1, 100, column, column); + } + } + } + + /** + * 娣诲姞鍗曞厓鏍 + */ + public Cell addCell(Excel attr, Row row, T vo, Field field, int column) + { + Cell cell = null; + try + { + // 璁剧疆琛岄珮 + row.setHeight(maxHeight); + // 鏍规嵁Excel涓缃儏鍐靛喅瀹氭槸鍚﹀鍑,鏈変簺鎯呭喌闇瑕佷繚鎸佷负绌,甯屾湜鐢ㄦ埛濉啓杩欎竴鍒. + if (attr.isExport()) + { + // 鍒涘缓cell + cell = row.createCell(column); + if (isSubListValue(vo) && getListCellValue(vo).size() > 1 && attr.needMerge()) + { + CellRangeAddress cellAddress = new CellRangeAddress(subMergedFirstRowNum, subMergedLastRowNum, column, column); + sheet.addMergedRegion(cellAddress); + } + cell.setCellStyle(styles.get(StringUtils.format("data_{}_{}_{}_{}", attr.align(), attr.color(), attr.backgroundColor(), attr.cellType()))); + + // 鐢ㄤ簬璇诲彇瀵硅薄涓殑灞炴 + Object value = getTargetValue(vo, field, attr); + String dateFormat = attr.dateFormat(); + String readConverterExp = attr.readConverterExp(); + String separator = attr.separator(); + String dictType = attr.dictType(); + if (StringUtils.isNotEmpty(dateFormat) && StringUtils.isNotNull(value)) + { + cell.setCellValue(parseDateToStr(dateFormat, value)); + } + else if (StringUtils.isNotEmpty(readConverterExp) && StringUtils.isNotNull(value)) + { + cell.setCellValue(convertByExp(Convert.toStr(value), readConverterExp, separator)); + } + else if (StringUtils.isNotEmpty(dictType) && StringUtils.isNotNull(value)) + { + if (!sysDictMap.containsKey(dictType + value)) + { + String lable = convertDictByExp(Convert.toStr(value), dictType, separator); + sysDictMap.put(dictType + value, lable); + } + cell.setCellValue(sysDictMap.get(dictType + value)); + } + else if (value instanceof BigDecimal && -1 != attr.scale()) + { + cell.setCellValue((((BigDecimal) value).setScale(attr.scale(), attr.roundingMode())).doubleValue()); + } + else if (!attr.handler().equals(ExcelHandlerAdapter.class)) + { + cell.setCellValue(dataFormatHandlerAdapter(value, attr, cell)); + } + else + { + // 璁剧疆鍒楃被鍨 + setCellVo(value, attr, cell); + } + addStatisticsData(column, Convert.toStr(value), attr); + } + } + catch (Exception e) + { + log.error("瀵煎嚭Excel澶辫触{}", e); + } + return cell; + } + + /** + * 璁剧疆 POI XSSFSheet 鍗曞厓鏍兼彁绀烘垨閫夋嫨妗 + * + * @param sheet 琛ㄥ崟 + * @param textlist 涓嬫媺妗嗘樉绀虹殑鍐呭 + * @param promptContent 鎻愮ず鍐呭 + * @param firstRow 寮濮嬭 + * @param endRow 缁撴潫琛 + * @param firstCol 寮濮嬪垪 + * @param endCol 缁撴潫鍒 + */ + public void setPromptOrValidation(Sheet sheet, String[] textlist, String promptContent, int firstRow, int endRow, + int firstCol, int endCol) + { + DataValidationHelper helper = sheet.getDataValidationHelper(); + DataValidationConstraint constraint = textlist.length > 0 ? helper.createExplicitListConstraint(textlist) : helper.createCustomConstraint("DD1"); + CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol); + DataValidation dataValidation = helper.createValidation(constraint, regions); + if (StringUtils.isNotEmpty(promptContent)) + { + // 濡傛灉璁剧疆浜嗘彁绀轰俊鎭垯榧犳爣鏀句笂鍘绘彁绀 + dataValidation.createPromptBox("", promptContent); + dataValidation.setShowPromptBox(true); + } + // 澶勭悊Excel鍏煎鎬ч棶棰 + if (dataValidation instanceof XSSFDataValidation) + { + dataValidation.setSuppressDropDownArrow(true); + dataValidation.setShowErrorBox(true); + } + else + { + dataValidation.setSuppressDropDownArrow(false); + } + sheet.addValidationData(dataValidation); + } + + /** + * 璁剧疆鏌愪簺鍒楃殑鍊煎彧鑳借緭鍏ラ鍒剁殑鏁版嵁,鏄剧ず涓嬫媺妗嗭紙鍏煎瓒呭嚭涓瀹氭暟閲忕殑涓嬫媺妗嗭級. + * + * @param sheet 瑕佽缃殑sheet. + * @param textlist 涓嬫媺妗嗘樉绀虹殑鍐呭 + * @param promptContent 鎻愮ず鍐呭 + * @param firstRow 寮濮嬭 + * @param endRow 缁撴潫琛 + * @param firstCol 寮濮嬪垪 + * @param endCol 缁撴潫鍒 + */ + public void setXSSFValidationWithHidden(Sheet sheet, String[] textlist, String promptContent, int firstRow, int endRow, int firstCol, int endCol) + { + String hideSheetName = "combo_" + firstCol + "_" + endCol; + Sheet hideSheet = wb.createSheet(hideSheetName); // 鐢ㄤ簬瀛樺偍 涓嬫媺鑿滃崟鏁版嵁 + for (int i = 0; i < textlist.length; i++) + { + hideSheet.createRow(i).createCell(0).setCellValue(textlist[i]); + } + // 鍒涘缓鍚嶇О锛屽彲琚叾浠栧崟鍏冩牸寮曠敤 + Name name = wb.createName(); + name.setNameName(hideSheetName + "_data"); + name.setRefersToFormula(hideSheetName + "!$A$1:$A$" + textlist.length); + DataValidationHelper helper = sheet.getDataValidationHelper(); + // 鍔犺浇涓嬫媺鍒楄〃鍐呭 + DataValidationConstraint constraint = helper.createFormulaListConstraint(hideSheetName + "_data"); + // 璁剧疆鏁版嵁鏈夋晥鎬у姞杞藉湪鍝釜鍗曞厓鏍间笂,鍥涗釜鍙傛暟鍒嗗埆鏄細璧峰琛屻佺粓姝㈣銆佽捣濮嬪垪銆佺粓姝㈠垪 + CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol); + // 鏁版嵁鏈夋晥鎬у璞 + DataValidation dataValidation = helper.createValidation(constraint, regions); + if (StringUtils.isNotEmpty(promptContent)) + { + // 濡傛灉璁剧疆浜嗘彁绀轰俊鎭垯榧犳爣鏀句笂鍘绘彁绀 + dataValidation.createPromptBox("", promptContent); + dataValidation.setShowPromptBox(true); + } + // 澶勭悊Excel鍏煎鎬ч棶棰 + if (dataValidation instanceof XSSFDataValidation) + { + dataValidation.setSuppressDropDownArrow(true); + dataValidation.setShowErrorBox(true); + } + else + { + dataValidation.setSuppressDropDownArrow(false); + } + + sheet.addValidationData(dataValidation); + // 璁剧疆hiddenSheet闅愯棌 + wb.setSheetHidden(wb.getSheetIndex(hideSheet), true); + } + + /** + * 瑙f瀽瀵煎嚭鍊 0=鐢,1=濂,2=鏈煡 + * + * @param propertyValue 鍙傛暟鍊 + * @param converterExp 缈昏瘧娉ㄨВ + * @param separator 鍒嗛殧绗 + * @return 瑙f瀽鍚庡 + */ + public static String convertByExp(String propertyValue, String converterExp, String separator) + { + StringBuilder propertyString = new StringBuilder(); + String[] convertSource = converterExp.split(","); + for (String item : convertSource) + { + String[] itemArray = item.split("="); + if (StringUtils.containsAny(propertyValue, separator)) + { + for (String value : propertyValue.split(separator)) + { + if (itemArray[0].equals(value)) + { + propertyString.append(itemArray[1] + separator); + break; + } + } + } + else + { + if (itemArray[0].equals(propertyValue)) + { + return itemArray[1]; + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 鍙嶅悜瑙f瀽鍊 鐢=0,濂=1,鏈煡=2 + * + * @param propertyValue 鍙傛暟鍊 + * @param converterExp 缈昏瘧娉ㄨВ + * @param separator 鍒嗛殧绗 + * @return 瑙f瀽鍚庡 + */ + public static String reverseByExp(String propertyValue, String converterExp, String separator) + { + StringBuilder propertyString = new StringBuilder(); + String[] convertSource = converterExp.split(","); + for (String item : convertSource) + { + String[] itemArray = item.split("="); + if (StringUtils.containsAny(propertyValue, separator)) + { + for (String value : propertyValue.split(separator)) + { + if (itemArray[1].equals(value)) + { + propertyString.append(itemArray[0] + separator); + break; + } + } + } + else + { + if (itemArray[1].equals(propertyValue)) + { + return itemArray[0]; + } + } + } + return StringUtils.stripEnd(propertyString.toString(), separator); + } + + /** + * 瑙f瀽瀛楀吀鍊 + * + * @param dictValue 瀛楀吀鍊 + * @param dictType 瀛楀吀绫诲瀷 + * @param separator 鍒嗛殧绗 + * @return 瀛楀吀鏍囩 + */ + public static String convertDictByExp(String dictValue, String dictType, String separator) + { + return DictUtils.getDictLabel(dictType, dictValue, separator); + } + + /** + * 鍙嶅悜瑙f瀽鍊煎瓧鍏稿 + * + * @param dictLabel 瀛楀吀鏍囩 + * @param dictType 瀛楀吀绫诲瀷 + * @param separator 鍒嗛殧绗 + * @return 瀛楀吀鍊 + */ + public static String reverseDictByExp(String dictLabel, String dictType, String separator) + { + return DictUtils.getDictValue(dictType, dictLabel, separator); + } + + /** + * 鏁版嵁澶勭悊鍣 + * + * @param value 鏁版嵁鍊 + * @param excel 鏁版嵁娉ㄨВ + * @return + */ + public String dataFormatHandlerAdapter(Object value, Excel excel, Cell cell) + { + try + { + Object instance = excel.handler().newInstance(); + Method formatMethod = excel.handler().getMethod("format", new Class[] { Object.class, String[].class, Cell.class, Workbook.class }); + value = formatMethod.invoke(instance, value, excel.args(), cell, this.wb); + } + catch (Exception e) + { + log.error("涓嶈兘鏍煎紡鍖栨暟鎹 " + excel.handler(), e.getMessage()); + } + return Convert.toStr(value); + } + + /** + * 鍚堣缁熻淇℃伅 + */ + private void addStatisticsData(Integer index, String text, Excel entity) + { + if (entity != null && entity.isStatistics()) + { + Double temp = 0D; + if (!statistics.containsKey(index)) + { + statistics.put(index, temp); + } + try + { + temp = Double.valueOf(text); + } + catch (NumberFormatException e) + { + } + statistics.put(index, statistics.get(index) + temp); + } + } + + /** + * 鍒涘缓缁熻琛 + */ + public void addStatisticsRow() + { + if (statistics.size() > 0) + { + Row row = sheet.createRow(sheet.getLastRowNum() + 1); + Set keys = statistics.keySet(); + Cell cell = row.createCell(0); + cell.setCellStyle(styles.get("total")); + cell.setCellValue("鍚堣"); + + for (Integer key : keys) + { + cell = row.createCell(key); + cell.setCellStyle(styles.get("total")); + cell.setCellValue(DOUBLE_FORMAT.format(statistics.get(key))); + } + statistics.clear(); + } + } + + /** + * 缂栫爜鏂囦欢鍚 + */ + public String encodingFilename(String filename) + { + filename = UUID.randomUUID() + "_" + filename + ".xlsx"; + return filename; + } + + /** + * 鑾峰彇涓嬭浇璺緞 + * + * @param filename 鏂囦欢鍚嶇О + */ + public String getAbsoluteFile(String filename) + { + String downloadPath = RuoYiConfig.getDownloadPath() + filename; + File desc = new File(downloadPath); + if (!desc.getParentFile().exists()) + { + desc.getParentFile().mkdirs(); + } + return downloadPath; + } + + /** + * 鑾峰彇bean涓殑灞炴у + * + * @param vo 瀹炰綋瀵硅薄 + * @param field 瀛楁 + * @param excel 娉ㄨВ + * @return 鏈缁堢殑灞炴у + * @throws Exception + */ + private Object getTargetValue(T vo, Field field, Excel excel) throws Exception + { + Object o = field.get(vo); + if (StringUtils.isNotEmpty(excel.targetAttr())) + { + String target = excel.targetAttr(); + if (target.contains(".")) + { + String[] targets = target.split("[.]"); + for (String name : targets) + { + o = getValue(o, name); + } + } + else + { + o = getValue(o, target); + } + } + return o; + } + + /** + * 浠ョ被鐨勫睘鎬х殑get鏂规硶鏂规硶褰㈠紡鑾峰彇鍊 + * + * @param o + * @param name + * @return value + * @throws Exception + */ + private Object getValue(Object o, String name) throws Exception + { + if (StringUtils.isNotNull(o) && StringUtils.isNotEmpty(name)) + { + Class clazz = o.getClass(); + Field field = clazz.getDeclaredField(name); + field.setAccessible(true); + o = field.get(o); + } + return o; + } + + /** + * 寰楀埌鎵鏈夊畾涔夊瓧娈 + */ + private void createExcelField() + { + this.fields = getFields(); + this.fields = this.fields.stream().sorted(Comparator.comparing(objects -> ((Excel) objects[1]).sort())).collect(Collectors.toList()); + this.maxHeight = getRowHeight(); + } + + /** + * 鑾峰彇瀛楁娉ㄨВ淇℃伅 + */ + public List getFields() + { + List fields = new ArrayList(); + List tempFields = new ArrayList<>(); + tempFields.addAll(Arrays.asList(clazz.getSuperclass().getDeclaredFields())); + tempFields.addAll(Arrays.asList(clazz.getDeclaredFields())); + for (Field field : tempFields) + { + if (!ArrayUtils.contains(this.excludeFields, field.getName())) + { + // 鍗曟敞瑙 + if (field.isAnnotationPresent(Excel.class)) + { + Excel attr = field.getAnnotation(Excel.class); + if (attr != null && (attr.type() == Type.ALL || attr.type() == type)) + { + field.setAccessible(true); + fields.add(new Object[] { field, attr }); + } + if (Collection.class.isAssignableFrom(field.getType())) + { + subMethod = getSubMethod(field.getName(), clazz); + ParameterizedType pt = (ParameterizedType) field.getGenericType(); + Class subClass = (Class) pt.getActualTypeArguments()[0]; + this.subFields = FieldUtils.getFieldsListWithAnnotation(subClass, Excel.class); + } + } + + // 澶氭敞瑙 + if (field.isAnnotationPresent(Excels.class)) + { + Excels attrs = field.getAnnotation(Excels.class); + Excel[] excels = attrs.value(); + for (Excel attr : excels) + { + if (!ArrayUtils.contains(this.excludeFields, field.getName() + "." + attr.targetAttr()) + && (attr != null && (attr.type() == Type.ALL || attr.type() == type))) + { + field.setAccessible(true); + fields.add(new Object[] { field, attr }); + } + } + } + } + } + return fields; + } + + /** + * 鏍规嵁娉ㄨВ鑾峰彇鏈澶ц楂 + */ + public short getRowHeight() + { + double maxHeight = 0; + for (Object[] os : this.fields) + { + Excel excel = (Excel) os[1]; + maxHeight = Math.max(maxHeight, excel.height()); + } + return (short) (maxHeight * 20); + } + + /** + * 鍒涘缓涓涓伐浣滅翱 + */ + public void createWorkbook() + { + this.wb = new SXSSFWorkbook(500); + this.sheet = wb.createSheet(); + wb.setSheetName(0, sheetName); + this.styles = createStyles(wb); + } + + /** + * 鍒涘缓宸ヤ綔琛 + * + * @param sheetNo sheet鏁伴噺 + * @param index 搴忓彿 + */ + public void createSheet(int sheetNo, int index) + { + // 璁剧疆宸ヤ綔琛ㄧ殑鍚嶇О. + if (sheetNo > 1 && index > 0) + { + this.sheet = wb.createSheet(); + this.createTitle(); + wb.setSheetName(index, sheetName + index); + } + } + + /** + * 鑾峰彇鍗曞厓鏍煎 + * + * @param row 鑾峰彇鐨勮 + * @param column 鑾峰彇鍗曞厓鏍煎垪鍙 + * @return 鍗曞厓鏍煎 + */ + public Object getCellValue(Row row, int column) + { + if (row == null) + { + return row; + } + Object val = ""; + try + { + Cell cell = row.getCell(column); + if (StringUtils.isNotNull(cell)) + { + if (cell.getCellType() == CellType.NUMERIC || cell.getCellType() == CellType.FORMULA) + { + val = cell.getNumericCellValue(); + if (DateUtil.isCellDateFormatted(cell)) + { + val = DateUtil.getJavaDate((Double) val); // POI Excel 鏃ユ湡鏍煎紡杞崲 + } + else + { + if ((Double) val % 1 != 0) + { + val = new BigDecimal(val.toString()); + } + else + { + val = new DecimalFormat("0").format(val); + } + } + } + else if (cell.getCellType() == CellType.STRING) + { + val = cell.getStringCellValue(); + } + else if (cell.getCellType() == CellType.BOOLEAN) + { + val = cell.getBooleanCellValue(); + } + else if (cell.getCellType() == CellType.ERROR) + { + val = cell.getErrorCellValue(); + } + + } + } + catch (Exception e) + { + return val; + } + return val; + } + + /** + * 鍒ゆ柇鏄惁鏄┖琛 + * + * @param row 鍒ゆ柇鐨勮 + * @return + */ + private boolean isRowEmpty(Row row) + { + if (row == null) + { + return true; + } + for (int i = row.getFirstCellNum(); i < row.getLastCellNum(); i++) + { + Cell cell = row.getCell(i); + if (cell != null && cell.getCellType() != CellType.BLANK) + { + return false; + } + } + return true; + } + + /** + * 鑾峰彇Excel2003鍥剧墖 + * + * @param sheet 褰撳墠sheet瀵硅薄 + * @param workbook 宸ヤ綔绨垮璞 + * @return Map key:鍥剧墖鍗曞厓鏍肩储寮曪紙1_1锛塖tring锛寁alue:鍥剧墖娴丳ictureData + */ + public static Map getSheetPictures03(HSSFSheet sheet, HSSFWorkbook workbook) + { + Map sheetIndexPicMap = new HashMap(); + List pictures = workbook.getAllPictures(); + if (!pictures.isEmpty()) + { + for (HSSFShape shape : sheet.getDrawingPatriarch().getChildren()) + { + HSSFClientAnchor anchor = (HSSFClientAnchor) shape.getAnchor(); + if (shape instanceof HSSFPicture) + { + HSSFPicture pic = (HSSFPicture) shape; + int pictureIndex = pic.getPictureIndex() - 1; + HSSFPictureData picData = pictures.get(pictureIndex); + String picIndex = anchor.getRow1() + "_" + anchor.getCol1(); + sheetIndexPicMap.put(picIndex, picData); + } + } + return sheetIndexPicMap; + } + else + { + return sheetIndexPicMap; + } + } + + /** + * 鑾峰彇Excel2007鍥剧墖 + * + * @param sheet 褰撳墠sheet瀵硅薄 + * @param workbook 宸ヤ綔绨垮璞 + * @return Map key:鍥剧墖鍗曞厓鏍肩储寮曪紙1_1锛塖tring锛寁alue:鍥剧墖娴丳ictureData + */ + public static Map getSheetPictures07(XSSFSheet sheet, XSSFWorkbook workbook) + { + Map sheetIndexPicMap = new HashMap(); + for (POIXMLDocumentPart dr : sheet.getRelations()) + { + if (dr instanceof XSSFDrawing) + { + XSSFDrawing drawing = (XSSFDrawing) dr; + List shapes = drawing.getShapes(); + for (XSSFShape shape : shapes) + { + if (shape instanceof XSSFPicture) + { + XSSFPicture pic = (XSSFPicture) shape; + XSSFClientAnchor anchor = pic.getPreferredSize(); + CTMarker ctMarker = anchor.getFrom(); + String picIndex = ctMarker.getRow() + "_" + ctMarker.getCol(); + sheetIndexPicMap.put(picIndex, pic.getPictureData()); + } + } + } + } + return sheetIndexPicMap; + } + + /** + * 鏍煎紡鍖栦笉鍚岀被鍨嬬殑鏃ユ湡瀵硅薄 + * + * @param dateFormat 鏃ユ湡鏍煎紡 + * @param val 琚牸寮忓寲鐨勬棩鏈熷璞 + * @return 鏍煎紡鍖栧悗鐨勬棩鏈熷瓧绗 + */ + public String parseDateToStr(String dateFormat, Object val) + { + if (val == null) + { + return ""; + } + String str; + if (val instanceof Date) + { + str = DateUtils.parseDateToStr(dateFormat, (Date) val); + } + else if (val instanceof LocalDateTime) + { + str = DateUtils.parseDateToStr(dateFormat, DateUtils.toDate((LocalDateTime) val)); + } + else if (val instanceof LocalDate) + { + str = DateUtils.parseDateToStr(dateFormat, DateUtils.toDate((LocalDate) val)); + } + else + { + str = val.toString(); + } + return str; + } + + /** + * 鏄惁鏈夊璞$殑瀛愬垪琛 + */ + public boolean isSubList() + { + return StringUtils.isNotNull(subFields) && subFields.size() > 0; + } + + /** + * 鏄惁鏈夊璞$殑瀛愬垪琛紝闆嗗悎涓嶄负绌 + */ + public boolean isSubListValue(T vo) + { + return StringUtils.isNotNull(subFields) && subFields.size() > 0 && StringUtils.isNotNull(getListCellValue(vo)) && getListCellValue(vo).size() > 0; + } + + /** + * 鑾峰彇闆嗗悎鐨勫 + */ + public Collection getListCellValue(Object obj) + { + Object value; + try + { + value = subMethod.invoke(obj, new Object[] {}); + } + catch (Exception e) + { + return new ArrayList(); + } + return (Collection) value; + } + + /** + * 鑾峰彇瀵硅薄鐨勫瓙鍒楄〃鏂规硶 + * + * @param name 鍚嶇О + * @param pojoClass 绫诲璞 + * @return 瀛愬垪琛ㄦ柟娉 + */ + public Method getSubMethod(String name, Class pojoClass) + { + StringBuffer getMethodName = new StringBuffer("get"); + getMethodName.append(name.substring(0, 1).toUpperCase()); + getMethodName.append(name.substring(1)); + Method method = null; + try + { + method = pojoClass.getMethod(getMethodName.toString(), new Class[] {}); + } + catch (Exception e) + { + log.error("鑾峰彇瀵硅薄寮傚父{}", e.getMessage()); + } + return method; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/reflect/ReflectUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/reflect/ReflectUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..43150778d097ff87d2d866da3991a9dc4ce1cd63 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/reflect/ReflectUtils.java @@ -0,0 +1,406 @@ +package com.ruoyi.common.utils.reflect; + +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.utils.DateUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.Validate; +import org.apache.poi.ss.usermodel.DateUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.lang.reflect.*; +import java.util.Date; + +/** + * 鍙嶅皠宸ュ叿绫. 鎻愪緵璋冪敤getter/setter鏂规硶, 璁块棶绉佹湁鍙橀噺, 璋冪敤绉佹湁鏂规硶, 鑾峰彇娉涘瀷绫诲瀷Class, 琚獳OP杩囩殑鐪熷疄绫荤瓑宸ュ叿鍑芥暟. + * + * @author ruoyi + */ +@SuppressWarnings("rawtypes") +public class ReflectUtils +{ + private static final String SETTER_PREFIX = "set"; + + private static final String GETTER_PREFIX = "get"; + + private static final String CGLIB_CLASS_SEPARATOR = "$$"; + + private static Logger logger = LoggerFactory.getLogger(ReflectUtils.class); + + /** + * 璋冪敤Getter鏂规硶. + * 鏀寔澶氱骇锛屽锛氬璞″悕.瀵硅薄鍚.鏂规硶 + */ + @SuppressWarnings("unchecked") + public static E invokeGetter(Object obj, String propertyName) + { + Object object = obj; + for (String name : StringUtils.split(propertyName, ".")) + { + String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(name); + object = invokeMethod(object, getterMethodName, new Class[] {}, new Object[] {}); + } + return (E) object; + } + + /** + * 璋冪敤Setter鏂规硶, 浠呭尮閰嶆柟娉曞悕銆 + * 鏀寔澶氱骇锛屽锛氬璞″悕.瀵硅薄鍚.鏂规硶 + */ + public static void invokeSetter(Object obj, String propertyName, E value) + { + Object object = obj; + String[] names = StringUtils.split(propertyName, "."); + for (int i = 0; i < names.length; i++) + { + if (i < names.length - 1) + { + String getterMethodName = GETTER_PREFIX + StringUtils.capitalize(names[i]); + object = invokeMethod(object, getterMethodName, new Class[] {}, new Object[] {}); + } + else + { + String setterMethodName = SETTER_PREFIX + StringUtils.capitalize(names[i]); + invokeMethodByName(object, setterMethodName, new Object[] { value }); + } + } + } + + /** + * 鐩存帴璇诲彇瀵硅薄灞炴у, 鏃犺private/protected淇グ绗, 涓嶇粡杩噂etter鍑芥暟. + */ + @SuppressWarnings("unchecked") + public static E getFieldValue(final Object obj, final String fieldName) + { + Field field = getAccessibleField(obj, fieldName); + if (field == null) + { + logger.debug("鍦 [" + obj.getClass() + "] 涓紝娌℃湁鎵惧埌 [" + fieldName + "] 瀛楁 "); + return null; + } + E result = null; + try + { + result = (E) field.get(obj); + } + catch (IllegalAccessException e) + { + logger.error("涓嶅彲鑳芥姏鍑虹殑寮傚父{}", e.getMessage()); + } + return result; + } + + /** + * 鐩存帴璁剧疆瀵硅薄灞炴у, 鏃犺private/protected淇グ绗, 涓嶇粡杩噑etter鍑芥暟. + */ + public static void setFieldValue(final Object obj, final String fieldName, final E value) + { + Field field = getAccessibleField(obj, fieldName); + if (field == null) + { + // throw new IllegalArgumentException("鍦 [" + obj.getClass() + "] 涓紝娌℃湁鎵惧埌 [" + fieldName + "] 瀛楁 "); + logger.debug("鍦 [" + obj.getClass() + "] 涓紝娌℃湁鎵惧埌 [" + fieldName + "] 瀛楁 "); + return; + } + try + { + field.set(obj, value); + } + catch (IllegalAccessException e) + { + logger.error("涓嶅彲鑳芥姏鍑虹殑寮傚父: {}", e.getMessage()); + } + } + + /** + * 鐩存帴璋冪敤瀵硅薄鏂规硶, 鏃犺private/protected淇グ绗. + * 鐢ㄤ簬涓娆℃ц皟鐢ㄧ殑鎯呭喌锛屽惁鍒欏簲浣跨敤getAccessibleMethod()鍑芥暟鑾峰緱Method鍚庡弽澶嶈皟鐢. + * 鍚屾椂鍖归厤鏂规硶鍚+鍙傛暟绫诲瀷锛 + */ + @SuppressWarnings("unchecked") + public static E invokeMethod(final Object obj, final String methodName, final Class[] parameterTypes, + final Object[] args) + { + if (obj == null || methodName == null) + { + return null; + } + Method method = getAccessibleMethod(obj, methodName, parameterTypes); + if (method == null) + { + logger.debug("鍦 [" + obj.getClass() + "] 涓紝娌℃湁鎵惧埌 [" + methodName + "] 鏂规硶 "); + return null; + } + try + { + return (E) method.invoke(obj, args); + } + catch (Exception e) + { + String msg = "method: " + method + ", obj: " + obj + ", args: " + args + ""; + throw convertReflectionExceptionToUnchecked(msg, e); + } + } + + /** + * 鐩存帴璋冪敤瀵硅薄鏂规硶, 鏃犺private/protected淇グ绗︼紝 + * 鐢ㄤ簬涓娆℃ц皟鐢ㄧ殑鎯呭喌锛屽惁鍒欏簲浣跨敤getAccessibleMethodByName()鍑芥暟鑾峰緱Method鍚庡弽澶嶈皟鐢. + * 鍙尮閰嶅嚱鏁板悕锛屽鏋滄湁澶氫釜鍚屽悕鍑芥暟璋冪敤绗竴涓 + */ + @SuppressWarnings("unchecked") + public static E invokeMethodByName(final Object obj, final String methodName, final Object[] args) + { + Method method = getAccessibleMethodByName(obj, methodName, args.length); + if (method == null) + { + // 濡傛灉涓虹┖涓嶆姤閿欙紝鐩存帴杩斿洖绌恒 + logger.debug("鍦 [" + obj.getClass() + "] 涓紝娌℃湁鎵惧埌 [" + methodName + "] 鏂规硶 "); + return null; + } + try + { + // 绫诲瀷杞崲锛堝皢鍙傛暟鏁版嵁绫诲瀷杞崲涓虹洰鏍囨柟娉曞弬鏁扮被鍨嬶級 + Class[] cs = method.getParameterTypes(); + for (int i = 0; i < cs.length; i++) + { + if (args[i] != null && !args[i].getClass().equals(cs[i])) + { + if (cs[i] == String.class) + { + args[i] = Convert.toStr(args[i]); + if (StringUtils.endsWith((String) args[i], ".0")) + { + args[i] = StringUtils.substringBefore((String) args[i], ".0"); + } + } + else if (cs[i] == Integer.class) + { + args[i] = Convert.toInt(args[i]); + } + else if (cs[i] == Long.class) + { + args[i] = Convert.toLong(args[i]); + } + else if (cs[i] == Double.class) + { + args[i] = Convert.toDouble(args[i]); + } + else if (cs[i] == Float.class) + { + args[i] = Convert.toFloat(args[i]); + } + else if (cs[i] == Date.class) + { + if (args[i] instanceof String) + { + args[i] = DateUtils.parseDate(args[i]); + } + else + { + args[i] = DateUtil.getJavaDate((Double) args[i]); + } + } + else if (cs[i] == boolean.class || cs[i] == Boolean.class) + { + args[i] = Convert.toBool(args[i]); + } + } + } + return (E) method.invoke(obj, args); + } + catch (Exception e) + { + String msg = "method: " + method + ", obj: " + obj + ", args: " + args + ""; + throw convertReflectionExceptionToUnchecked(msg, e); + } + } + + /** + * 寰幆鍚戜笂杞瀷, 鑾峰彇瀵硅薄鐨凞eclaredField, 骞跺己鍒惰缃负鍙闂. + * 濡傚悜涓婅浆鍨嬪埌Object浠嶆棤娉曟壘鍒, 杩斿洖null. + */ + public static Field getAccessibleField(final Object obj, final String fieldName) + { + // 涓虹┖涓嶆姤閿欍傜洿鎺ヨ繑鍥 null + if (obj == null) + { + return null; + } + Validate.notBlank(fieldName, "fieldName can't be blank"); + for (Class superClass = obj.getClass(); superClass != Object.class; superClass = superClass.getSuperclass()) + { + try + { + Field field = superClass.getDeclaredField(fieldName); + makeAccessible(field); + return field; + } + catch (NoSuchFieldException e) + { + continue; + } + } + return null; + } + + /** + * 寰幆鍚戜笂杞瀷, 鑾峰彇瀵硅薄鐨凞eclaredMethod,骞跺己鍒惰缃负鍙闂. + * 濡傚悜涓婅浆鍨嬪埌Object浠嶆棤娉曟壘鍒, 杩斿洖null. + * 鍖归厤鍑芥暟鍚+鍙傛暟绫诲瀷銆 + * 鐢ㄤ簬鏂规硶闇瑕佽澶氭璋冪敤鐨勬儏鍐. 鍏堜娇鐢ㄦ湰鍑芥暟鍏堝彇寰桵ethod,鐒跺悗璋冪敤Method.invoke(Object obj, Object... args) + */ + public static Method getAccessibleMethod(final Object obj, final String methodName, + final Class... parameterTypes) + { + // 涓虹┖涓嶆姤閿欍傜洿鎺ヨ繑鍥 null + if (obj == null) + { + return null; + } + Validate.notBlank(methodName, "methodName can't be blank"); + for (Class searchType = obj.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) + { + try + { + Method method = searchType.getDeclaredMethod(methodName, parameterTypes); + makeAccessible(method); + return method; + } + catch (NoSuchMethodException e) + { + continue; + } + } + return null; + } + + /** + * 寰幆鍚戜笂杞瀷, 鑾峰彇瀵硅薄鐨凞eclaredMethod,骞跺己鍒惰缃负鍙闂. + * 濡傚悜涓婅浆鍨嬪埌Object浠嶆棤娉曟壘鍒, 杩斿洖null. + * 鍙尮閰嶅嚱鏁板悕銆 + * 鐢ㄤ簬鏂规硶闇瑕佽澶氭璋冪敤鐨勬儏鍐. 鍏堜娇鐢ㄦ湰鍑芥暟鍏堝彇寰桵ethod,鐒跺悗璋冪敤Method.invoke(Object obj, Object... args) + */ + public static Method getAccessibleMethodByName(final Object obj, final String methodName, int argsNum) + { + // 涓虹┖涓嶆姤閿欍傜洿鎺ヨ繑鍥 null + if (obj == null) + { + return null; + } + Validate.notBlank(methodName, "methodName can't be blank"); + for (Class searchType = obj.getClass(); searchType != Object.class; searchType = searchType.getSuperclass()) + { + Method[] methods = searchType.getDeclaredMethods(); + for (Method method : methods) + { + if (method.getName().equals(methodName) && method.getParameterTypes().length == argsNum) + { + makeAccessible(method); + return method; + } + } + } + return null; + } + + /** + * 鏀瑰彉private/protected鐨勬柟娉曚负public锛屽敖閲忎笉璋冪敤瀹為檯鏀瑰姩鐨勮鍙ワ紝閬垮厤JDK鐨凷ecurityManager鎶辨ㄣ + */ + public static void makeAccessible(Method method) + { + if ((!Modifier.isPublic(method.getModifiers()) || !Modifier.isPublic(method.getDeclaringClass().getModifiers())) + && !method.isAccessible()) + { + method.setAccessible(true); + } + } + + /** + * 鏀瑰彉private/protected鐨勬垚鍛樺彉閲忎负public锛屽敖閲忎笉璋冪敤瀹為檯鏀瑰姩鐨勮鍙ワ紝閬垮厤JDK鐨凷ecurityManager鎶辨ㄣ + */ + public static void makeAccessible(Field field) + { + if ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers()) + || Modifier.isFinal(field.getModifiers())) && !field.isAccessible()) + { + field.setAccessible(true); + } + } + + /** + * 閫氳繃鍙嶅皠, 鑾峰緱Class瀹氫箟涓0鏄庣殑娉涘瀷鍙傛暟鐨勭被鍨, 娉ㄦ剰娉涘瀷蹇呴』瀹氫箟鍦ㄧ埗绫诲 + * 濡傛棤娉曟壘鍒, 杩斿洖Object.class. + */ + @SuppressWarnings("unchecked") + public static Class getClassGenricType(final Class clazz) + { + return getClassGenricType(clazz, 0); + } + + /** + * 閫氳繃鍙嶅皠, 鑾峰緱Class瀹氫箟涓0鏄庣殑鐖剁被鐨勬硾鍨嬪弬鏁扮殑绫诲瀷. + * 濡傛棤娉曟壘鍒, 杩斿洖Object.class. + */ + public static Class getClassGenricType(final Class clazz, final int index) + { + Type genType = clazz.getGenericSuperclass(); + + if (!(genType instanceof ParameterizedType)) + { + logger.debug(clazz.getSimpleName() + "'s superclass not ParameterizedType"); + return Object.class; + } + + Type[] params = ((ParameterizedType) genType).getActualTypeArguments(); + + if (index >= params.length || index < 0) + { + logger.debug("Index: " + index + ", Size of " + clazz.getSimpleName() + "'s Parameterized Type: " + + params.length); + return Object.class; + } + if (!(params[index] instanceof Class)) + { + logger.debug(clazz.getSimpleName() + " not set the actual class on superclass generic parameter"); + return Object.class; + } + + return (Class) params[index]; + } + + public static Class getUserClass(Object instance) + { + if (instance == null) + { + throw new RuntimeException("Instance must not be null"); + } + Class clazz = instance.getClass(); + if (clazz != null && clazz.getName().contains(CGLIB_CLASS_SEPARATOR)) + { + Class superClass = clazz.getSuperclass(); + if (superClass != null && !Object.class.equals(superClass)) + { + return superClass; + } + } + return clazz; + + } + + /** + * 灏嗗弽灏勬椂鐨刢hecked exception杞崲涓簎nchecked exception. + */ + public static RuntimeException convertReflectionExceptionToUnchecked(String msg, Exception e) + { + if (e instanceof IllegalAccessException || e instanceof IllegalArgumentException + || e instanceof NoSuchMethodException) + { + return new IllegalArgumentException(msg, e); + } + else if (e instanceof InvocationTargetException) + { + return new RuntimeException(msg, ((InvocationTargetException) e).getTargetException()); + } + return new RuntimeException(msg, e); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/sign/Base64.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/sign/Base64.java new file mode 100644 index 0000000000000000000000000000000000000000..ca1cd92480e958a7cf4da69a6e8c2457dbed9776 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/sign/Base64.java @@ -0,0 +1,291 @@ +package com.ruoyi.common.utils.sign; + +/** + * Base64宸ュ叿绫 + * + * @author ruoyi + */ +public final class Base64 +{ + static private final int BASELENGTH = 128; + static private final int LOOKUPLENGTH = 64; + static private final int TWENTYFOURBITGROUP = 24; + static private final int EIGHTBIT = 8; + static private final int SIXTEENBIT = 16; + static private final int FOURBYTE = 4; + static private final int SIGN = -128; + static private final char PAD = '='; + static final private byte[] base64Alphabet = new byte[BASELENGTH]; + static final private char[] lookUpBase64Alphabet = new char[LOOKUPLENGTH]; + + static + { + for (int i = 0; i < BASELENGTH; ++i) + { + base64Alphabet[i] = -1; + } + for (int i = 'Z'; i >= 'A'; i--) + { + base64Alphabet[i] = (byte) (i - 'A'); + } + for (int i = 'z'; i >= 'a'; i--) + { + base64Alphabet[i] = (byte) (i - 'a' + 26); + } + + for (int i = '9'; i >= '0'; i--) + { + base64Alphabet[i] = (byte) (i - '0' + 52); + } + + base64Alphabet['+'] = 62; + base64Alphabet['/'] = 63; + + for (int i = 0; i <= 25; i++) + { + lookUpBase64Alphabet[i] = (char) ('A' + i); + } + + for (int i = 26, j = 0; i <= 51; i++, j++) + { + lookUpBase64Alphabet[i] = (char) ('a' + j); + } + + for (int i = 52, j = 0; i <= 61; i++, j++) + { + lookUpBase64Alphabet[i] = (char) ('0' + j); + } + lookUpBase64Alphabet[62] = (char) '+'; + lookUpBase64Alphabet[63] = (char) '/'; + } + + private static boolean isWhiteSpace(char octect) + { + return (octect == 0x20 || octect == 0xd || octect == 0xa || octect == 0x9); + } + + private static boolean isPad(char octect) + { + return (octect == PAD); + } + + private static boolean isData(char octect) + { + return (octect < BASELENGTH && base64Alphabet[octect] != -1); + } + + /** + * Encodes hex octects into Base64 + * + * @param binaryData Array containing binaryData + * @return Encoded Base64 array + */ + public static String encode(byte[] binaryData) + { + if (binaryData == null) + { + return null; + } + + int lengthDataBits = binaryData.length * EIGHTBIT; + if (lengthDataBits == 0) + { + return ""; + } + + int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP; + int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP; + int numberQuartet = fewerThan24bits != 0 ? numberTriplets + 1 : numberTriplets; + char encodedData[] = null; + + encodedData = new char[numberQuartet * 4]; + + byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0; + + int encodedIndex = 0; + int dataIndex = 0; + + for (int i = 0; i < numberTriplets; i++) + { + b1 = binaryData[dataIndex++]; + b2 = binaryData[dataIndex++]; + b3 = binaryData[dataIndex++]; + + l = (byte) (b2 & 0x0f); + k = (byte) (b1 & 0x03); + + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); + byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); + byte val3 = ((b3 & SIGN) == 0) ? (byte) (b3 >> 6) : (byte) ((b3) >> 6 ^ 0xfc); + + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[(l << 2) | val3]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[b3 & 0x3f]; + } + + // form integral number of 6-bit groups + if (fewerThan24bits == EIGHTBIT) + { + b1 = binaryData[dataIndex]; + k = (byte) (b1 & 0x03); + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[k << 4]; + encodedData[encodedIndex++] = PAD; + encodedData[encodedIndex++] = PAD; + } + else if (fewerThan24bits == SIXTEENBIT) + { + b1 = binaryData[dataIndex]; + b2 = binaryData[dataIndex + 1]; + l = (byte) (b2 & 0x0f); + k = (byte) (b1 & 0x03); + + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); + byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); + + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[l << 2]; + encodedData[encodedIndex++] = PAD; + } + return new String(encodedData); + } + + /** + * Decodes Base64 data into octects + * + * @param encoded string containing Base64 data + * @return Array containind decoded data. + */ + public static byte[] decode(String encoded) + { + if (encoded == null) + { + return null; + } + + char[] base64Data = encoded.toCharArray(); + // remove white spaces + int len = removeWhiteSpace(base64Data); + + if (len % FOURBYTE != 0) + { + return null;// should be divisible by four + } + + int numberQuadruple = (len / FOURBYTE); + + if (numberQuadruple == 0) + { + return new byte[0]; + } + + byte decodedData[] = null; + byte b1 = 0, b2 = 0, b3 = 0, b4 = 0; + char d1 = 0, d2 = 0, d3 = 0, d4 = 0; + + int i = 0; + int encodedIndex = 0; + int dataIndex = 0; + decodedData = new byte[(numberQuadruple) * 3]; + + for (; i < numberQuadruple - 1; i++) + { + + if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++])) + || !isData((d3 = base64Data[dataIndex++])) || !isData((d4 = base64Data[dataIndex++]))) + { + return null; + } // if found "no data" just return null + + b1 = base64Alphabet[d1]; + b2 = base64Alphabet[d2]; + b3 = base64Alphabet[d3]; + b4 = base64Alphabet[d4]; + + decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); + decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); + decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); + } + + if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++]))) + { + return null;// if found "no data" just return null + } + + b1 = base64Alphabet[d1]; + b2 = base64Alphabet[d2]; + + d3 = base64Data[dataIndex++]; + d4 = base64Data[dataIndex++]; + if (!isData((d3)) || !isData((d4))) + {// Check if they are PAD characters + if (isPad(d3) && isPad(d4)) + { + if ((b2 & 0xf) != 0)// last 4 bits should be zero + { + return null; + } + byte[] tmp = new byte[i * 3 + 1]; + System.arraycopy(decodedData, 0, tmp, 0, i * 3); + tmp[encodedIndex] = (byte) (b1 << 2 | b2 >> 4); + return tmp; + } + else if (!isPad(d3) && isPad(d4)) + { + b3 = base64Alphabet[d3]; + if ((b3 & 0x3) != 0)// last 2 bits should be zero + { + return null; + } + byte[] tmp = new byte[i * 3 + 2]; + System.arraycopy(decodedData, 0, tmp, 0, i * 3); + tmp[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); + tmp[encodedIndex] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); + return tmp; + } + else + { + return null; + } + } + else + { // No PAD e.g 3cQl + b3 = base64Alphabet[d3]; + b4 = base64Alphabet[d4]; + decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); + decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); + decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); + + } + return decodedData; + } + + /** + * remove WhiteSpace from MIME containing encoded Base64 data. + * + * @param data the byte array of base64 data (with WS) + * @return the new length + */ + private static int removeWhiteSpace(char[] data) + { + if (data == null) + { + return 0; + } + + // count characters that's not whitespace + int newSize = 0; + int len = data.length; + for (int i = 0; i < len; i++) + { + if (!isWhiteSpace(data[i])) + { + data[newSize++] = data[i]; + } + } + return newSize; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/sign/Md5Utils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/sign/Md5Utils.java new file mode 100644 index 0000000000000000000000000000000000000000..4568958163e98f04d719ce451f8dace61b11144d --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/sign/Md5Utils.java @@ -0,0 +1,68 @@ +package com.ruoyi.common.utils.sign; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; + +/** + * Md5鍔犲瘑鏂规硶 + * + * @author ruoyi + */ +public class Md5Utils +{ + private static final Logger log = LoggerFactory.getLogger(Md5Utils.class); + + private static byte[] md5(String s) + { + MessageDigest algorithm; + try + { + algorithm = MessageDigest.getInstance("MD5"); + algorithm.reset(); + algorithm.update(s.getBytes("UTF-8")); + byte[] messageDigest = algorithm.digest(); + return messageDigest; + } + catch (Exception e) + { + log.error("MD5 Error...", e); + } + return null; + } + + private static final String toHex(byte hash[]) + { + if (hash == null) + { + return null; + } + StringBuffer buf = new StringBuffer(hash.length * 2); + int i; + + for (i = 0; i < hash.length; i++) + { + if ((hash[i] & 0xff) < 0x10) + { + buf.append("0"); + } + buf.append(Long.toString(hash[i] & 0xff, 16)); + } + return buf.toString(); + } + + public static String hash(String s) + { + try + { + return new String(toHex(md5(s)).getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8); + } + catch (Exception e) + { + log.error("not supported charset...{}", e); + return s; + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/spring/SpringUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/spring/SpringUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..700cde4a16496e10d27c1ce2297e58e8c72fb9b3 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/spring/SpringUtils.java @@ -0,0 +1,158 @@ +package com.ruoyi.common.utils.spring; + +import com.ruoyi.common.utils.StringUtils; +import org.springframework.aop.framework.AopContext; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +/** + * spring宸ュ叿绫 鏂逛究鍦ㄩ潪spring绠$悊鐜涓幏鍙朾ean + * + * @author ruoyi + */ +@Component +public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware +{ + /** Spring搴旂敤涓婁笅鏂囩幆澧 */ + private static ConfigurableListableBeanFactory beanFactory; + + private static ApplicationContext applicationContext; + + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException + { + SpringUtils.beanFactory = beanFactory; + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException + { + SpringUtils.applicationContext = applicationContext; + } + + /** + * 鑾峰彇瀵硅薄 + * + * @param name + * @return Object 涓涓互鎵缁欏悕瀛楁敞鍐岀殑bean鐨勫疄渚 + * @throws org.springframework.beans.BeansException + * + */ + @SuppressWarnings("unchecked") + public static T getBean(String name) throws BeansException + { + return (T) beanFactory.getBean(name); + } + + /** + * 鑾峰彇绫诲瀷涓簉equiredType鐨勫璞 + * + * @param clz + * @return + * @throws org.springframework.beans.BeansException + * + */ + public static T getBean(Class clz) throws BeansException + { + T result = (T) beanFactory.getBean(clz); + return result; + } + + /** + * 濡傛灉BeanFactory鍖呭惈涓涓笌鎵缁欏悕绉板尮閰嶇殑bean瀹氫箟锛屽垯杩斿洖true + * + * @param name + * @return boolean + */ + public static boolean containsBean(String name) + { + return beanFactory.containsBean(name); + } + + /** + * 鍒ゆ柇浠ョ粰瀹氬悕瀛楁敞鍐岀殑bean瀹氫箟鏄竴涓猻ingleton杩樻槸涓涓猵rototype銆 濡傛灉涓庣粰瀹氬悕瀛楃浉搴旂殑bean瀹氫箟娌℃湁琚壘鍒帮紝灏嗕細鎶涘嚭涓涓紓甯革紙NoSuchBeanDefinitionException锛 + * + * @param name + * @return boolean + * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException + * + */ + public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException + { + return beanFactory.isSingleton(name); + } + + /** + * @param name + * @return Class 娉ㄥ唽瀵硅薄鐨勭被鍨 + * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException + * + */ + public static Class getType(String name) throws NoSuchBeanDefinitionException + { + return beanFactory.getType(name); + } + + /** + * 濡傛灉缁欏畾鐨刡ean鍚嶅瓧鍦╞ean瀹氫箟涓湁鍒悕锛屽垯杩斿洖杩欎簺鍒悕 + * + * @param name + * @return + * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException + * + */ + public static String[] getAliases(String name) throws NoSuchBeanDefinitionException + { + return beanFactory.getAliases(name); + } + + /** + * 鑾峰彇aop浠g悊瀵硅薄 + * + * @param invoker + * @return + */ + @SuppressWarnings("unchecked") + public static T getAopProxy(T invoker) + { + return (T) AopContext.currentProxy(); + } + + /** + * 鑾峰彇褰撳墠鐨勭幆澧冮厤缃紝鏃犻厤缃繑鍥瀗ull + * + * @return 褰撳墠鐨勭幆澧冮厤缃 + */ + public static String[] getActiveProfiles() + { + return applicationContext.getEnvironment().getActiveProfiles(); + } + + /** + * 鑾峰彇褰撳墠鐨勭幆澧冮厤缃紝褰撴湁澶氫釜鐜閰嶇疆鏃讹紝鍙幏鍙栫涓涓 + * + * @return 褰撳墠鐨勭幆澧冮厤缃 + */ + public static String getActiveProfile() + { + final String[] activeProfiles = getActiveProfiles(); + return StringUtils.isNotEmpty(activeProfiles) ? activeProfiles[0] : null; + } + + /** + * 鑾峰彇閰嶇疆鏂囦欢涓殑鍊 + * + * @param key 閰嶇疆鏂囦欢鐨刱ey + * @return 褰撳墠鐨勯厤缃枃浠剁殑鍊 + * + */ + public static String getRequiredProperty(String key) + { + return applicationContext.getEnvironment().getRequiredProperty(key); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/sql/SqlUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/sql/SqlUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..93b03472df8d4d4d62defaae9d1d2e72eb4dcf47 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/sql/SqlUtil.java @@ -0,0 +1,70 @@ +package com.ruoyi.common.utils.sql; + +import com.ruoyi.common.exception.UtilException; +import com.ruoyi.common.utils.StringUtils; + +/** + * sql鎿嶄綔宸ュ叿绫 + * + * @author ruoyi + */ +public class SqlUtil +{ + /** + * 瀹氫箟甯哥敤鐨 sql鍏抽敭瀛 + */ + public static String SQL_REGEX = "and |extractvalue|updatexml|exec |insert |select |delete |update |drop |count |chr |mid |master |truncate |char |declare |or |+|user()"; + + /** + * 浠呮敮鎸佸瓧姣嶃佹暟瀛椼佷笅鍒掔嚎銆佺┖鏍笺侀楀彿銆佸皬鏁扮偣锛堟敮鎸佸涓瓧娈垫帓搴忥級 + */ + public static String SQL_PATTERN = "[a-zA-Z0-9_\\ \\,\\.]+"; + + /** + * 闄愬埗orderBy鏈澶ч暱搴 + */ + private static final int ORDER_BY_MAX_LENGTH = 500; + + /** + * 妫鏌ュ瓧绗︼紝闃叉娉ㄥ叆缁曡繃 + */ + public static String escapeOrderBySql(String value) + { + if (StringUtils.isNotEmpty(value) && !isValidOrderBySql(value)) + { + throw new UtilException("鍙傛暟涓嶇鍚堣鑼冿紝涓嶈兘杩涜鏌ヨ"); + } + if (StringUtils.length(value) > ORDER_BY_MAX_LENGTH) + { + throw new UtilException("鍙傛暟宸茶秴杩囨渶澶ч檺鍒讹紝涓嶈兘杩涜鏌ヨ"); + } + return value; + } + + /** + * 楠岃瘉 order by 璇硶鏄惁绗﹀悎瑙勮寖 + */ + public static boolean isValidOrderBySql(String value) + { + return value.matches(SQL_PATTERN); + } + + /** + * SQL鍏抽敭瀛楁鏌 + */ + public static void filterKeyword(String value) + { + if (StringUtils.isEmpty(value)) + { + return; + } + String[] sqlKeywords = StringUtils.split(SQL_REGEX, "\\|"); + for (String sqlKeyword : sqlKeywords) + { + if (StringUtils.indexOfIgnoreCase(value, sqlKeyword) > -1) + { + throw new UtilException("鍙傛暟瀛樺湪SQL娉ㄥ叆椋庨櫓"); + } + } + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/txy/TencentSmsCodeConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/txy/TencentSmsCodeConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..9a17b5616566ede9f993b86789cd5bdb6ad62af9 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/txy/TencentSmsCodeConfig.java @@ -0,0 +1,34 @@ +package com.ruoyi.common.utils.txy; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +/** + * 鑵捐浜戠煭淇 + * @author Wzp + */ +@Getter +@Setter +@Configuration +public class TencentSmsCodeConfig { + + @Value("${tencentSmsCode.secretId}") + private String secretId; + + @Value("${tencentSmsCode.secretKey}") + private String secretKey; + + @Value("${tencentSmsCode.sdkAppId}") + private String sdkAppId; + + @Value("${tencentSmsCode.signName}") + private String signName; + + @Value("${tencentSmsCode.templateId}") + private String templateId; + + @Value("${tencentSmsCode.smsCodeExpire}") + private Integer smsCodeExpire; +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/txy/TencentSmsCodeUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/txy/TencentSmsCodeUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..ececb52fa6abc58e10ca0d3ba992ed2fb82b9d9e --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/txy/TencentSmsCodeUtils.java @@ -0,0 +1,131 @@ +package com.ruoyi.common.utils.txy; + +import com.tencentcloudapi.common.Credential; +import com.tencentcloudapi.common.exception.TencentCloudSDKException; +import com.tencentcloudapi.common.profile.ClientProfile; +import com.tencentcloudapi.common.profile.HttpProfile; +import com.tencentcloudapi.sms.v20210111.SmsClient; +import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest; +import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse; +import com.tencentcloudapi.sms.v20210111.models.SendStatus; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 鑵捐浜戠煭淇 + * @author Wzp + */ +@Component +public class TencentSmsCodeUtils { + + @Resource + private TencentSmsCodeConfig tencentSmsCodeConfig; + + /** + * 鍙戦侀獙璇佺爜 + * @param phone 鎵嬫満鍙 + * @param smsCode 楠岃瘉鐮 + * @return 缁撴灉 + */ + public String sendSmsCode(String phone, String smsCode){ + try { + /* 蹇呰姝ラ锛 + * 瀹炰緥鍖栦竴涓璇佸璞★紝鍏ュ弬闇瑕佷紶鍏ヨ吘璁簯璐︽埛瀵嗛挜瀵箂ecretId锛宻ecretKey銆 + * 杩欓噷閲囩敤鐨勬槸浠庣幆澧冨彉閲忚鍙栫殑鏂瑰紡锛岄渶瑕佸湪鐜鍙橀噺涓厛璁剧疆杩欎袱涓笺 + * 浣犱篃鍙互鐩存帴鍦ㄤ唬鐮佷腑鍐欐瀵嗛挜瀵癸紝浣嗘槸灏忓績涓嶈灏嗕唬鐮佸鍒躲佷笂浼犳垨鑰呭垎浜粰浠栦汉锛 + * 浠ュ厤娉勯湶瀵嗛挜瀵瑰嵄鍙婁綘鐨勮储浜у畨鍏ㄣ + * SecretId銆丼ecretKey 鏌ヨ: https://console.cloud.tencent.com/cam/capi */ + Credential cred = new Credential(tencentSmsCodeConfig.getSecretId(), tencentSmsCodeConfig.getSecretKey()); + + // 瀹炰緥鍖栦竴涓猦ttp閫夐」锛屽彲閫夛紝娌℃湁鐗规畩闇姹傚彲浠ヨ烦杩 + HttpProfile httpProfile = new HttpProfile(); + // 璁剧疆浠g悊锛堟棤闇瑕佺洿鎺ュ拷鐣ワ級 + // httpProfile.setProxyHost("鐪熷疄浠g悊ip"); + // httpProfile.setProxyPort(鐪熷疄浠g悊绔彛); + /* SDK榛樿浣跨敤POST鏂规硶銆 + * 濡傛灉浣犱竴瀹氳浣跨敤GET鏂规硶锛屽彲浠ュ湪杩欓噷璁剧疆銆侴ET鏂规硶鏃犳硶澶勭悊涓浜涜緝澶х殑璇锋眰 */ + httpProfile.setReqMethod("POST"); + /* SDK鏈夐粯璁ょ殑瓒呮椂鏃堕棿锛岄潪蹇呰璇蜂笉瑕佽繘琛岃皟鏁 + * 濡傛湁闇瑕佽鍦ㄤ唬鐮佷腑鏌ラ槄浠ヨ幏鍙栨渶鏂扮殑榛樿鍊 */ + httpProfile.setConnTimeout(60); + /* 鎸囧畾鎺ュ叆鍦板煙鍩熷悕锛岄粯璁ゅ氨杩戝湴鍩熸帴鍏ュ煙鍚嶄负 sms.tencentcloudapi.com 锛屼篃鏀寔鎸囧畾鍦板煙鍩熷悕璁块棶锛屼緥濡傚箍宸炲湴鍩熺殑鍩熷悕涓 sms.ap-guangzhou.tencentcloudapi.com */ + httpProfile.setEndpoint("sms.tencentcloudapi.com"); + + /* 闈炲繀瑕佹楠: + * 瀹炰緥鍖栦竴涓鎴风閰嶇疆瀵硅薄锛屽彲浠ユ寚瀹氳秴鏃舵椂闂寸瓑閰嶇疆 */ + ClientProfile clientProfile = new ClientProfile(); + /* SDK榛樿鐢═C3-HMAC-SHA256杩涜绛惧悕 + * 闈炲繀瑕佽涓嶈淇敼杩欎釜瀛楁 */ + clientProfile.setSignMethod("HmacSHA256"); + clientProfile.setHttpProfile(httpProfile); + /* 瀹炰緥鍖栬璇锋眰浜у搧(浠ms涓轰緥)鐨刢lient瀵硅薄 + * 绗簩涓弬鏁版槸鍦板煙淇℃伅锛屽彲浠ョ洿鎺ュ~鍐欏瓧绗︿覆ap-guangzhou锛屾敮鎸佺殑鍦板煙鍒楄〃鍙傝 https://cloud.tencent.com/document/api/382/52071#.E5.9C.B0.E5.9F.9F.E5.88.97.E8.A1.A8 */ + SmsClient client = new SmsClient(cred, "ap-guangzhou", clientProfile); + /* 瀹炰緥鍖栦竴涓姹傚璞★紝鏍规嵁璋冪敤鐨勬帴鍙e拰瀹為檯鎯呭喌锛屽彲浠ヨ繘涓姝ヨ缃姹傚弬鏁 + * 浣犲彲浠ョ洿鎺ユ煡璇DK婧愮爜纭畾鎺ュ彛鏈夊摢浜涘睘鎬у彲浠ヨ缃 + * 灞炴у彲鑳芥槸鍩烘湰绫诲瀷锛屼篃鍙兘寮曠敤浜嗗彟涓涓暟鎹粨鏋 + * 鎺ㄨ崘浣跨敤IDE杩涜寮鍙戯紝鍙互鏂逛究鐨勮烦杞煡闃呭悇涓帴鍙e拰鏁版嵁缁撴瀯鐨勬枃妗h鏄 */ + SendSmsRequest req = new SendSmsRequest(); + + /* 濉厖璇锋眰鍙傛暟,杩欓噷request瀵硅薄鐨勬垚鍛樺彉閲忓嵆瀵瑰簲鎺ュ彛鐨勫叆鍙 + * 浣犲彲浠ラ氳繃瀹樼綉鎺ュ彛鏂囨。鎴栬烦杞埌request瀵硅薄鐨勫畾涔夊鏌ョ湅璇锋眰鍙傛暟鐨勫畾涔 + * 鍩烘湰绫诲瀷鐨勮缃: + * 甯姪閾炬帴锛 + * 鐭俊鎺у埗鍙: https://console.cloud.tencent.com/smsv2 + * 鑵捐浜戠煭淇″皬鍔╂墜: https://cloud.tencent.com/document/product/382/3773#.E6.8A.80.E6.9C.AF.E4.BA.A4.E6.B5.81 */ + + /* 鐭俊搴旂敤ID: 鐭俊SdkAppId鍦 [鐭俊鎺у埗鍙癩 娣诲姞搴旂敤鍚庣敓鎴愮殑瀹為檯SdkAppId锛岀ず渚嬪1400006666 */ + // 搴旂敤 ID 鍙墠寰 [鐭俊鎺у埗鍙癩(https://console.cloud.tencent.com/smsv2/app-manage) 鏌ョ湅 + String sdkAppId = tencentSmsCodeConfig.getSdkAppId(); + req.setSmsSdkAppId(sdkAppId); + + /* 鐭俊绛惧悕鍐呭: 浣跨敤 UTF-8 缂栫爜锛屽繀椤诲~鍐欏凡瀹℃牳閫氳繃鐨勭鍚 */ + // 绛惧悕淇℃伅鍙墠寰 [鍥藉唴鐭俊](https://console.cloud.tencent.com/smsv2/csms-sign) 鎴 [鍥介檯/娓境鍙扮煭淇(https://console.cloud.tencent.com/smsv2/isms-sign) 鐨勭鍚嶇鐞嗘煡鐪 + String signName = tencentSmsCodeConfig.getSignName(); + req.setSignName(signName); + + /* 妯℃澘 ID: 蹇呴』濉啓宸插鏍搁氳繃鐨勬ā鏉 ID */ + // 妯℃澘 ID 鍙墠寰 [鍥藉唴鐭俊](https://console.cloud.tencent.com/smsv2/csms-template) 鎴 [鍥介檯/娓境鍙扮煭淇(https://console.cloud.tencent.com/smsv2/isms-template) 鐨勬鏂囨ā鏉跨鐞嗘煡鐪 + String templateId = tencentSmsCodeConfig.getTemplateId(); + req.setTemplateId(templateId); + + /* 妯℃澘鍙傛暟: 妯℃澘鍙傛暟鐨勪釜鏁伴渶瑕佷笌 TemplateId 瀵瑰簲妯℃澘鐨勫彉閲忎釜鏁颁繚鎸佷竴鑷达紝鑻ユ棤妯℃澘鍙傛暟锛屽垯璁剧疆涓虹┖ */ + String[] templateParamSet = {smsCode}; + req.setTemplateParamSet(templateParamSet); + + /* 涓嬪彂鎵嬫満鍙风爜锛岄噰鐢 E.164 鏍囧噯锛+[鍥藉鎴栧湴鍖虹爜][鎵嬫満鍙穄 + * 绀轰緥濡傦細+8613711112222锛 鍏朵腑鍓嶉潰鏈変竴涓+鍙 锛86涓哄浗瀹剁爜锛13711112222涓烘墜鏈哄彿锛屾渶澶氫笉瑕佽秴杩200涓墜鏈哄彿 */ + String[] phoneNumberSet = {phone}; + req.setPhoneNumberSet(phoneNumberSet); + + /* 鐢ㄦ埛鐨 session 鍐呭锛堟棤闇瑕佸彲蹇界暐锛: 鍙互鎼哄甫鐢ㄦ埛渚 ID 绛変笂涓嬫枃淇℃伅锛宻erver 浼氬師鏍疯繑鍥 */ + String sessionContext = ""; + req.setSessionContext(sessionContext); + + /* 鐭俊鐮佸彿鎵╁睍鍙凤紙鏃犻渶瑕佸彲蹇界暐锛: 榛樿鏈紑閫氾紝濡傞渶寮閫氳鑱旂郴 [鑵捐浜戠煭淇″皬鍔╂墜] */ + String extendCode = ""; + req.setExtendCode(extendCode); + + /* 鍥藉唴鐭俊鏃犻渶濉啓璇ラ」锛涘浗闄/娓境鍙扮煭淇″凡鐢宠鐙珛 SenderId 闇瑕佸~鍐欒瀛楁锛岄粯璁や娇鐢ㄥ叕鍏 SenderId锛屾棤闇濉啓璇ュ瓧娈点傛敞锛氭湀搴︿娇鐢ㄩ噺杈惧埌鎸囧畾閲忕骇鍙敵璇风嫭绔 SenderId 浣跨敤锛岃鎯呰鑱旂郴 [鑵捐浜戠煭淇″皬鍔╂墜](https://cloud.tencent.com/document/product/382/3773#.E6.8A.80.E6.9C.AF.E4.BA.A4.E6.B5.81)銆*/ + String senderid = ""; + req.setSenderId(senderid); + + /* 閫氳繃 client 瀵硅薄璋冪敤 SendSms 鏂规硶鍙戣捣璇锋眰銆傛敞鎰忚姹傛柟娉曞悕涓庤姹傚璞℃槸瀵瑰簲鐨 + * 杩斿洖鐨 res 鏄竴涓 SendSmsResponse 绫荤殑瀹炰緥锛屼笌璇锋眰瀵硅薄瀵瑰簲 */ + SendSmsResponse res = client.SendSms(req); + + System.out.println("鑵捐浜戠煭淇″彂閫佺粨鏋=>: "+SendSmsResponse.toJsonString(res)); + SendStatus[] sendStatusSet = res.getSendStatusSet(); + if ("Ok".equals(sendStatusSet[0].getCode())){ + return "SUCCESS"; + }else { + return "FAIL"; + } + } catch (TencentCloudSDKException e) { + e.printStackTrace(); + return "FAIL"; + } + } + +} \ No newline at end of file diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/IdUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/IdUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..b653b61f566b6ec4aff5a932ba07c44da8c15a20 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/IdUtils.java @@ -0,0 +1,85 @@ +package com.ruoyi.common.utils.uuid; + +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.RandomUtil; +import com.alibaba.fastjson2.util.DateUtils; + +import java.util.Date; +import java.util.Random; + +/** + * ID鐢熸垚鍣ㄥ伐鍏风被 + * + * @author ruoyi + */ +public class IdUtils +{ + /** + * 鑾峰彇闅忔満UUID + * + * @return 闅忔満UUID + */ + public static String randomUUID() + { + return UUID.randomUUID().toString(); + } + + /** + * 绠鍖栫殑UUID锛屽幓鎺変簡妯嚎 + * + * @return 绠鍖栫殑UUID锛屽幓鎺変簡妯嚎 + */ + public static String simpleUUID() + { + return UUID.randomUUID().toString(true); + } + + /** + * 鑾峰彇闅忔満UUID锛屼娇鐢ㄦц兘鏇村ソ鐨凾hreadLocalRandom鐢熸垚UUID + * + * @return 闅忔満UUID + */ + public static String fastUUID() + { + return UUID.fastUUID().toString(); + } + + /** + * 绠鍖栫殑UUID锛屽幓鎺変簡妯嚎锛屼娇鐢ㄦц兘鏇村ソ鐨凾hreadLocalRandom鐢熸垚UUID + * + * @return 绠鍖栫殑UUID锛屽幓鎺変簡妯嚎 + */ + public static String fastSimpleUUID() + { + return UUID.fastUUID().toString(true); + } + + /** + * 鐢熸垚鐢ㄦ埛鐧诲綍鏍囪瘑 + * @return 缁撴灉 + */ + public static String getUserLoginToken(){ + return IdUtil.getSnowflake(1, 1).nextIdStr(); + } + + /** + * 鐢熸垚闅忔満鏁 + * @param step 浣嶆暟 + * @return 缁撴灉 + */ + public static String buildNumberCode(Integer step) { + String sources = "0123456789"; + Random rand = new Random(); + StringBuilder flag = new StringBuilder(); + for (int j = 0; j < step; j++) { + flag.append(sources.charAt(rand.nextInt(10))); + } + return flag.toString(); + } + + public static String getOrderNum(){//璁㈠崟鍙 + String time = DateUtils.format(new Date(),"yyMMddHHmmss"); + String randomStr = RandomUtil.randomNumbers(7); + return time+randomStr; + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/Seq.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/Seq.java new file mode 100644 index 0000000000000000000000000000000000000000..acbe739f44aae32fd6ec1a0c4f2f5dce7f7f08a4 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/Seq.java @@ -0,0 +1,87 @@ +package com.ruoyi.common.utils.uuid; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; + +import java.util.concurrent.atomic.AtomicInteger; + +/** + * @author ruoyi 搴忓垪鐢熸垚绫 + */ +public class Seq +{ + // 閫氱敤搴忓垪绫诲瀷 + public static final String commSeqType = "COMMON"; + + // 涓婁紶搴忓垪绫诲瀷 + public static final String uploadSeqType = "UPLOAD"; + + // 閫氱敤鎺ュ彛搴忓垪鏁 + private static AtomicInteger commSeq = new AtomicInteger(1); + + // 涓婁紶鎺ュ彛搴忓垪鏁 + private static AtomicInteger uploadSeq = new AtomicInteger(1); + + // 鏈哄櫒鏍囪瘑 + private static final String machineCode = "A"; + + /** + * 鑾峰彇閫氱敤搴忓垪鍙 + * + * @return 搴忓垪鍊 + */ + public static String getId() + { + return getId(commSeqType); + } + + /** + * 榛樿16浣嶅簭鍒楀彿 yyMMddHHmmss + 涓浣嶆満鍣ㄦ爣璇 + 3闀垮害寰幆閫掑瀛楃涓 + * + * @return 搴忓垪鍊 + */ + public static String getId(String type) + { + AtomicInteger atomicInt = commSeq; + if (uploadSeqType.equals(type)) + { + atomicInt = uploadSeq; + } + return getId(atomicInt, 3); + } + + /** + * 閫氱敤鎺ュ彛搴忓垪鍙 yyMMddHHmmss + 涓浣嶆満鍣ㄦ爣璇 + length闀垮害寰幆閫掑瀛楃涓 + * + * @param atomicInt 搴忓垪鏁 + * @param length 鏁板奸暱搴 + * @return 搴忓垪鍊 + */ + public static String getId(AtomicInteger atomicInt, int length) + { + String result = DateUtils.dateTimeNow(); + result += machineCode; + result += getSeq(atomicInt, length); + return result; + } + + /** + * 搴忓垪寰幆閫掑瀛楃涓瞇1, 10 鐨 (length)骞傛鏂), 鐢0宸﹁ˉ榻恖ength浣嶆暟 + * + * @return 搴忓垪鍊 + */ + private synchronized static String getSeq(AtomicInteger atomicInt, int length) + { + // 鍏堝彇鍊煎啀+1 + int value = atomicInt.getAndIncrement(); + + // 濡傛灉鏇存柊鍚庡>=10 鐨 (length)骞傛鏂瑰垯閲嶇疆涓1 + int maxSeq = (int) Math.pow(10, length); + if (atomicInt.get() >= maxSeq) + { + atomicInt.set(1); + } + // 杞瓧绗︿覆锛岀敤0宸﹁ˉ榻 + return StringUtils.padl(value, length); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/UUID.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/UUID.java new file mode 100644 index 0000000000000000000000000000000000000000..246bad4a5c169f19f30fe8b9367dc64a8a1a181c --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/uuid/UUID.java @@ -0,0 +1,485 @@ +package com.ruoyi.common.utils.uuid; + +import com.ruoyi.common.exception.UtilException; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; + +/** + * 鎻愪緵閫氱敤鍞竴璇嗗埆鐮侊紙universally unique identifier锛夛紙UUID锛夊疄鐜 + * + * @author ruoyi + */ +public final class UUID implements java.io.Serializable, Comparable +{ + private static final long serialVersionUID = -1185015143654744140L; + + /** + * SecureRandom 鐨勫崟渚 + * + */ + private static class Holder + { + static final SecureRandom numberGenerator = getSecureRandom(); + } + + /** 姝UID鐨勬渶楂64鏈夋晥浣 */ + private final long mostSigBits; + + /** 姝UID鐨勬渶浣64鏈夋晥浣 */ + private final long leastSigBits; + + /** + * 绉佹湁鏋勯 + * + * @param data 鏁版嵁 + */ + private UUID(byte[] data) + { + long msb = 0; + long lsb = 0; + assert data.length == 16 : "data must be 16 bytes in length"; + for (int i = 0; i < 8; i++) + { + msb = (msb << 8) | (data[i] & 0xff); + } + for (int i = 8; i < 16; i++) + { + lsb = (lsb << 8) | (data[i] & 0xff); + } + this.mostSigBits = msb; + this.leastSigBits = lsb; + } + + /** + * 浣跨敤鎸囧畾鐨勬暟鎹瀯閫犳柊鐨 UUID銆 + * + * @param mostSigBits 鐢ㄤ簬 {@code UUID} 鐨勬渶楂樻湁鏁 64 浣 + * @param leastSigBits 鐢ㄤ簬 {@code UUID} 鐨勬渶浣庢湁鏁 64 浣 + */ + public UUID(long mostSigBits, long leastSigBits) + { + this.mostSigBits = mostSigBits; + this.leastSigBits = leastSigBits; + } + + /** + * 鑾峰彇绫诲瀷 4锛堜吉闅忔満鐢熸垚鐨勶級UUID 鐨勯潤鎬佸伐鍘傘 + * + * @return 闅忔満鐢熸垚鐨 {@code UUID} + */ + public static UUID fastUUID() + { + return randomUUID(false); + } + + /** + * 鑾峰彇绫诲瀷 4锛堜吉闅忔満鐢熸垚鐨勶級UUID 鐨勯潤鎬佸伐鍘傘 浣跨敤鍔犲瘑鐨勫己浼殢鏈烘暟鐢熸垚鍣ㄧ敓鎴愯 UUID銆 + * + * @return 闅忔満鐢熸垚鐨 {@code UUID} + */ + public static UUID randomUUID() + { + return randomUUID(true); + } + + /** + * 鑾峰彇绫诲瀷 4锛堜吉闅忔満鐢熸垚鐨勶級UUID 鐨勯潤鎬佸伐鍘傘 浣跨敤鍔犲瘑鐨勫己浼殢鏈烘暟鐢熸垚鍣ㄧ敓鎴愯 UUID銆 + * + * @param isSecure 鏄惁浣跨敤{@link SecureRandom}濡傛灉鏄彲浠ヨ幏寰楁洿瀹夊叏鐨勯殢鏈虹爜锛屽惁鍒欏彲浠ュ緱鍒版洿濂界殑鎬ц兘 + * @return 闅忔満鐢熸垚鐨 {@code UUID} + */ + public static UUID randomUUID(boolean isSecure) + { + final Random ng = isSecure ? Holder.numberGenerator : getRandom(); + + byte[] randomBytes = new byte[16]; + ng.nextBytes(randomBytes); + randomBytes[6] &= 0x0f; /* clear version */ + randomBytes[6] |= 0x40; /* set to version 4 */ + randomBytes[8] &= 0x3f; /* clear variant */ + randomBytes[8] |= 0x80; /* set to IETF variant */ + return new UUID(randomBytes); + } + + /** + * 鏍规嵁鎸囧畾鐨勫瓧鑺傛暟缁勮幏鍙栫被鍨 3锛堝熀浜庡悕绉扮殑锛塙UID 鐨勯潤鎬佸伐鍘傘 + * + * @param name 鐢ㄤ簬鏋勯 UUID 鐨勫瓧鑺傛暟缁勩 + * + * @return 鏍规嵁鎸囧畾鏁扮粍鐢熸垚鐨 {@code UUID} + */ + public static UUID nameUUIDFromBytes(byte[] name) + { + MessageDigest md; + try + { + md = MessageDigest.getInstance("MD5"); + } + catch (NoSuchAlgorithmException nsae) + { + throw new InternalError("MD5 not supported"); + } + byte[] md5Bytes = md.digest(name); + md5Bytes[6] &= 0x0f; /* clear version */ + md5Bytes[6] |= 0x30; /* set to version 3 */ + md5Bytes[8] &= 0x3f; /* clear variant */ + md5Bytes[8] |= 0x80; /* set to IETF variant */ + return new UUID(md5Bytes); + } + + /** + * 鏍规嵁 {@link #toString()} 鏂规硶涓弿杩扮殑瀛楃涓叉爣鍑嗚〃绀哄舰寮忓垱寤簕@code UUID}銆 + * + * @param name 鎸囧畾 {@code UUID} 瀛楃涓 + * @return 鍏锋湁鎸囧畾鍊肩殑 {@code UUID} + * @throws IllegalArgumentException 濡傛灉 name 涓 {@link #toString} 涓弿杩扮殑瀛楃涓茶〃绀哄舰寮忎笉绗︽姏鍑烘寮傚父 + * + */ + public static UUID fromString(String name) + { + String[] components = name.split("-"); + if (components.length != 5) + { + throw new IllegalArgumentException("Invalid UUID string: " + name); + } + for (int i = 0; i < 5; i++) + { + components[i] = "0x" + components[i]; + } + + long mostSigBits = Long.decode(components[0]).longValue(); + mostSigBits <<= 16; + mostSigBits |= Long.decode(components[1]).longValue(); + mostSigBits <<= 16; + mostSigBits |= Long.decode(components[2]).longValue(); + + long leastSigBits = Long.decode(components[3]).longValue(); + leastSigBits <<= 48; + leastSigBits |= Long.decode(components[4]).longValue(); + + return new UUID(mostSigBits, leastSigBits); + } + + /** + * 杩斿洖姝 UUID 鐨 128 浣嶅间腑鐨勬渶浣庢湁鏁 64 浣嶃 + * + * @return 姝 UUID 鐨 128 浣嶅间腑鐨勬渶浣庢湁鏁 64 浣嶃 + */ + public long getLeastSignificantBits() + { + return leastSigBits; + } + + /** + * 杩斿洖姝 UUID 鐨 128 浣嶅间腑鐨勬渶楂樻湁鏁 64 浣嶃 + * + * @return 姝 UUID 鐨 128 浣嶅间腑鏈楂樻湁鏁 64 浣嶃 + */ + public long getMostSignificantBits() + { + return mostSigBits; + } + + /** + * 涓庢 {@code UUID} 鐩稿叧鑱旂殑鐗堟湰鍙. 鐗堟湰鍙锋弿杩版 {@code UUID} 鏄浣曠敓鎴愮殑銆 + *

+ * 鐗堟湰鍙峰叿鏈変互涓嬪惈鎰: + *

    + *
  • 1 鍩轰簬鏃堕棿鐨 UUID + *
  • 2 DCE 瀹夊叏 UUID + *
  • 3 鍩轰簬鍚嶇О鐨 UUID + *
  • 4 闅忔満鐢熸垚鐨 UUID + *
+ * + * @return 姝 {@code UUID} 鐨勭増鏈彿 + */ + public int version() + { + // Version is bits masked by 0x000000000000F000 in MS long + return (int) ((mostSigBits >> 12) & 0x0f); + } + + /** + * 涓庢 {@code UUID} 鐩稿叧鑱旂殑鍙樹綋鍙枫傚彉浣撳彿鎻忚堪 {@code UUID} 鐨勫竷灞銆 + *

+ * 鍙樹綋鍙峰叿鏈変互涓嬪惈鎰忥細 + *

    + *
  • 0 涓 NCS 鍚戝悗鍏煎淇濈暀 + *
  • 2 IETF RFC 4122(Leach-Salz), 鐢ㄤ簬姝ょ被 + *
  • 6 淇濈暀锛屽井杞悜鍚庡吋瀹 + *
  • 7 淇濈暀渚涗互鍚庡畾涔変娇鐢 + *
+ * + * @return 姝 {@code UUID} 鐩稿叧鑱旂殑鍙樹綋鍙 + */ + public int variant() + { + // This field is composed of a varying number of bits. + // 0 - - Reserved for NCS backward compatibility + // 1 0 - The IETF aka Leach-Salz variant (used by this class) + // 1 1 0 Reserved, Microsoft backward compatibility + // 1 1 1 Reserved for future definition. + return (int) ((leastSigBits >>> (64 - (leastSigBits >>> 62))) & (leastSigBits >> 63)); + } + + /** + * 涓庢 UUID 鐩稿叧鑱旂殑鏃堕棿鎴冲笺 + * + *

+ * 60 浣嶇殑鏃堕棿鎴冲兼牴鎹 {@code UUID} 鐨 time_low銆乼ime_mid 鍜 time_hi 瀛楁鏋勯犮
+ * 鎵寰楀埌鐨勬椂闂存埑浠 100 姣井绉掍负鍗曚綅锛屼粠 UTC锛堥氱敤鍗忚皟鏃堕棿锛 1582 骞 10 鏈 15 鏃ラ浂鏃跺紑濮嬨 + * + *

+ * 鏃堕棿鎴冲间粎鍦ㄥ湪鍩轰簬鏃堕棿鐨 UUID锛堝叾 version 绫诲瀷涓 1锛変腑鎵嶆湁鎰忎箟銆
+ * 濡傛灉姝 {@code UUID} 涓嶆槸鍩轰簬鏃堕棿鐨 UUID锛屽垯姝ゆ柟娉曟姏鍑 UnsupportedOperationException銆 + * + * @throws UnsupportedOperationException 濡傛灉姝 {@code UUID} 涓嶆槸 version 涓 1 鐨 UUID銆 + */ + public long timestamp() throws UnsupportedOperationException + { + checkTimeBase(); + return (mostSigBits & 0x0FFFL) << 48// + | ((mostSigBits >> 16) & 0x0FFFFL) << 32// + | mostSigBits >>> 32; + } + + /** + * 涓庢 UUID 鐩稿叧鑱旂殑鏃堕挓搴忓垪鍊笺 + * + *

+ * 14 浣嶇殑鏃堕挓搴忓垪鍊兼牴鎹 UUID 鐨 clock_seq 瀛楁鏋勯犮俢lock_seq 瀛楁鐢ㄤ簬淇濊瘉鍦ㄥ熀浜庢椂闂寸殑 UUID 涓殑鏃堕棿鍞竴鎬с + *

+ * {@code clockSequence} 鍊间粎鍦ㄥ熀浜庢椂闂寸殑 UUID锛堝叾 version 绫诲瀷涓 1锛変腑鎵嶆湁鎰忎箟銆 濡傛灉姝 UUID 涓嶆槸鍩轰簬鏃堕棿鐨 UUID锛屽垯姝ゆ柟娉曟姏鍑 + * UnsupportedOperationException銆 + * + * @return 姝 {@code UUID} 鐨勬椂閽熷簭鍒 + * + * @throws UnsupportedOperationException 濡傛灉姝 UUID 鐨 version 涓嶄负 1 + */ + public int clockSequence() throws UnsupportedOperationException + { + checkTimeBase(); + return (int) ((leastSigBits & 0x3FFF000000000000L) >>> 48); + } + + /** + * 涓庢 UUID 鐩稿叧鐨勮妭鐐瑰笺 + * + *

+ * 48 浣嶇殑鑺傜偣鍊兼牴鎹 UUID 鐨 node 瀛楁鏋勯犮傛瀛楁鏃ㄥ湪鐢ㄤ簬淇濆瓨鏈哄櫒鐨 IEEE 802 鍦板潃锛岃鍦板潃鐢ㄤ簬鐢熸垚姝 UUID 浠ヤ繚璇佺┖闂村敮涓鎬с + *

+ * 鑺傜偣鍊间粎鍦ㄥ熀浜庢椂闂寸殑 UUID锛堝叾 version 绫诲瀷涓 1锛変腑鎵嶆湁鎰忎箟銆
+ * 濡傛灉姝 UUID 涓嶆槸鍩轰簬鏃堕棿鐨 UUID锛屽垯姝ゆ柟娉曟姏鍑 UnsupportedOperationException銆 + * + * @return 姝 {@code UUID} 鐨勮妭鐐瑰 + * + * @throws UnsupportedOperationException 濡傛灉姝 UUID 鐨 version 涓嶄负 1 + */ + public long node() throws UnsupportedOperationException + { + checkTimeBase(); + return leastSigBits & 0x0000FFFFFFFFFFFFL; + } + + /** + * 杩斿洖姝@code UUID} 鐨勫瓧绗︿覆琛ㄧ幇褰㈠紡銆 + * + *

+ * UUID 鐨勫瓧绗︿覆琛ㄧず褰㈠紡鐢辨 BNF 鎻忚堪锛 + * + *

+     * {@code
+     * UUID                   = ----
+     * time_low               = 4*
+     * time_mid               = 2*
+     * time_high_and_version  = 2*
+     * variant_and_sequence   = 2*
+     * node                   = 6*
+     * hexOctet               = 
+     * hexDigit               = [0-9a-fA-F]
+     * }
+     * 
+ * + * + * + * @return 姝@code UUID} 鐨勫瓧绗︿覆琛ㄧ幇褰㈠紡 + * @see #toString(boolean) + */ + @Override + public String toString() + { + return toString(false); + } + + /** + * 杩斿洖姝@code UUID} 鐨勫瓧绗︿覆琛ㄧ幇褰㈠紡銆 + * + *

+ * UUID 鐨勫瓧绗︿覆琛ㄧず褰㈠紡鐢辨 BNF 鎻忚堪锛 + * + *

+     * {@code
+     * UUID                   = ----
+     * time_low               = 4*
+     * time_mid               = 2*
+     * time_high_and_version  = 2*
+     * variant_and_sequence   = 2*
+     * node                   = 6*
+     * hexOctet               = 
+     * hexDigit               = [0-9a-fA-F]
+     * }
+     * 
+ * + * + * + * @param isSimple 鏄惁绠鍗曟ā寮忥紝绠鍗曟ā寮忎负涓嶅甫'-'鐨刄UID瀛楃涓 + * @return 姝@code UUID} 鐨勫瓧绗︿覆琛ㄧ幇褰㈠紡 + */ + public String toString(boolean isSimple) + { + final StringBuilder builder = new StringBuilder(isSimple ? 32 : 36); + // time_low + builder.append(digits(mostSigBits >> 32, 8)); + if (!isSimple) + { + builder.append('-'); + } + // time_mid + builder.append(digits(mostSigBits >> 16, 4)); + if (!isSimple) + { + builder.append('-'); + } + // time_high_and_version + builder.append(digits(mostSigBits, 4)); + if (!isSimple) + { + builder.append('-'); + } + // variant_and_sequence + builder.append(digits(leastSigBits >> 48, 4)); + if (!isSimple) + { + builder.append('-'); + } + // node + builder.append(digits(leastSigBits, 12)); + + return builder.toString(); + } + + /** + * 杩斿洖姝 UUID 鐨勫搱甯岀爜銆 + * + * @return UUID 鐨勫搱甯岀爜鍊笺 + */ + @Override + public int hashCode() + { + long hilo = mostSigBits ^ leastSigBits; + return ((int) (hilo >> 32)) ^ (int) hilo; + } + + /** + * 灏嗘瀵硅薄涓庢寚瀹氬璞℃瘮杈冦 + *

+ * 褰撲笖浠呭綋鍙傛暟涓嶄负 {@code null}銆佽屾槸涓涓 UUID 瀵硅薄銆佸叿鏈変笌姝 UUID 鐩稿悓鐨 varriant銆佸寘鍚浉鍚岀殑鍊硷紙姣忎竴浣嶅潎鐩稿悓锛夋椂锛岀粨鏋滄墠涓 {@code true}銆 + * + * @param obj 瑕佷笌涔嬫瘮杈冪殑瀵硅薄 + * + * @return 濡傛灉瀵硅薄鐩稿悓锛屽垯杩斿洖 {@code true}锛涘惁鍒欒繑鍥 {@code false} + */ + @Override + public boolean equals(Object obj) + { + if ((null == obj) || (obj.getClass() != UUID.class)) + { + return false; + } + UUID id = (UUID) obj; + return (mostSigBits == id.mostSigBits && leastSigBits == id.leastSigBits); + } + + // Comparison Operations + + /** + * 灏嗘 UUID 涓庢寚瀹氱殑 UUID 姣旇緝銆 + * + *

+ * 濡傛灉涓や釜 UUID 涓嶅悓锛屼笖绗竴涓 UUID 鐨勬渶楂樻湁鏁堝瓧娈靛ぇ浜庣浜屼釜 UUID 鐨勫搴斿瓧娈碉紝鍒欑涓涓 UUID 澶т簬绗簩涓 UUID銆 + * + * @param val 涓庢 UUID 姣旇緝鐨 UUID + * + * @return 鍦ㄦ UUID 灏忎簬銆佺瓑浜庢垨澶т簬 val 鏃讹紝鍒嗗埆杩斿洖 -1銆0 鎴 1銆 + * + */ + @Override + public int compareTo(UUID val) + { + // The ordering is intentionally set up so that the UUIDs + // can simply be numerically compared as two numbers + return (this.mostSigBits < val.mostSigBits ? -1 : // + (this.mostSigBits > val.mostSigBits ? 1 : // + (this.leastSigBits < val.leastSigBits ? -1 : // + (this.leastSigBits > val.leastSigBits ? 1 : // + 0)))); + } + + // ------------------------------------------------------------------------------------------------------------------- + // Private method start + /** + * 杩斿洖鎸囧畾鏁板瓧瀵瑰簲鐨刪ex鍊 + * + * @param val 鍊 + * @param digits 浣 + * @return 鍊 + */ + private static String digits(long val, int digits) + { + long hi = 1L << (digits * 4); + return Long.toHexString(hi | (val & (hi - 1))).substring(1); + } + + /** + * 妫鏌ユ槸鍚︿负time-based鐗堟湰UUID + */ + private void checkTimeBase() + { + if (version() != 1) + { + throw new UnsupportedOperationException("Not a time-based UUID"); + } + } + + /** + * 鑾峰彇{@link SecureRandom}锛岀被鎻愪緵鍔犲瘑鐨勫己闅忔満鏁扮敓鎴愬櫒 (RNG) + * + * @return {@link SecureRandom} + */ + public static SecureRandom getSecureRandom() + { + try + { + return SecureRandom.getInstance("SHA1PRNG"); + } + catch (NoSuchAlgorithmException e) + { + throw new UtilException(e); + } + } + + /** + * 鑾峰彇闅忔満鏁扮敓鎴愬櫒瀵硅薄
+ * ThreadLocalRandom鏄疛DK 7涔嬪悗鎻愪緵骞跺彂浜х敓闅忔満鏁帮紝鑳藉瑙e喅澶氫釜绾跨▼鍙戠敓鐨勭珵浜変簤澶恒 + * + * @return {@link ThreadLocalRandom} + */ + public static ThreadLocalRandom getRandom() + { + return ThreadLocalRandom.current(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/weixin/config/WeiXinGzhConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/weixin/config/WeiXinGzhConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..b7918cb627b68f0784be1b2ea80a8aeae197220e --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/weixin/config/WeiXinGzhConfig.java @@ -0,0 +1,27 @@ +package com.ruoyi.common.weixin.config; +import lombok.Getter; +import lombok.Setter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +/** + * 鍏紬鍙风浉鍏冲弬鏁伴厤缃 + * @author Wzp + */ +@Getter +@Setter +@Configuration +public class WeiXinGzhConfig { + + @Value("${wx.gzh.appId}") + private String appId; + + @Value("${wx.gzh.appSecret}") + private String appSecret; + + @Value("${wx.gzh.token}") + private String token; + + @Value("${wx.gzh.encodingAESKey}") + private String encodingAESKey; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/weixin/config/WeiXinPayConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/weixin/config/WeiXinPayConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..ebc688b60b00334a4485459fe921b7023c7b0638 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/weixin/config/WeiXinPayConfig.java @@ -0,0 +1,50 @@ +package com.ruoyi.common.weixin.config; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +/** + * 寰俊鏀粯V3鐩稿叧鍙傛暟閰嶇疆 + * @author Wzp + */ +@Getter +@Setter +@Configuration +public class WeiXinPayConfig { + + @Value("${wx.pay.appId}") + private String appId; + + @Value("${wx.pay.mchId}") + private String mchId; + + @Value("${wx.pay.mchSerialNum}") + private String mchSerialNum; + + @Value("${wx.pay.apiV3Key}") + private String apiV3Key; + //寰俊鍥炶皟鍦板潃 + @Value("${wx.pay.notifyUrl}") + private String notifyUrl; + //鏀粯瀹濆洖璋冨湴鍧 + @Value("${wx.pay.notifyZfbUrl}") + private String notifyZfbUrl; + + @Value("${wx.pay.description}") + private String description; + + @Value("${wx.pay.apiClientKey}") + private String apiClientKey; + + @Value("${wx.login.appId}") + private String appIdLogin; + + @Value("${wx.login.appSecret}") + private String appSecretLogin; + + @Value("${wx.login.redirectUrl}") + private String redirectUrl; + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/weixin/config/WeiXinXcxMemberConfig.java b/ruoyi-common/src/main/java/com/ruoyi/common/weixin/config/WeiXinXcxMemberConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..aa58796fadc221a24e4ed63562a596d9f72e0814 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/weixin/config/WeiXinXcxMemberConfig.java @@ -0,0 +1,27 @@ +package com.ruoyi.common.weixin.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +/** + * 寰俊鐩稿叧鍙傛暟閰嶇疆-鐢ㄦ埛绔 + * @author Wzp + */ +@Data +@Configuration +@ConfigurationProperties(prefix = "wx.xcx") +public class WeiXinXcxMemberConfig { + + /** 灏忕▼搴廼d */ + private String appId; + + /** 灏忕▼搴忓瘑閽 */ + private String appSecret; + + /** 榛樿澶村儚 */ + private String avatarUrl; + + /** 榛樿鏄电О */ + private String nickName; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/weixin/message/MessageUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/weixin/message/MessageUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..ffd790871f69950436ef4ab6aeafe6c8e886a358 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/weixin/message/MessageUtil.java @@ -0,0 +1,196 @@ +package com.ruoyi.common.weixin.message; + +import com.ruoyi.common.utils.StringUtils; +import org.jdom2.Document; +import org.jdom2.Element; +import org.jdom2.JDOMException; +import org.jdom2.input.SAXBuilder; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 娑堟伅宸ュ叿绫 + * + * @author liufeng + * @date 2013-05-19 + */ +public class MessageUtil { + + /** + * 杩斿洖娑堟伅绫诲瀷锛氭枃鏈 + */ + public static final String RESP_MESSAGE_TYPE_TEXT = "text"; + + /** + * 杩斿洖娑堟伅绫诲瀷锛氶煶涔 + */ + public static final String RESP_MESSAGE_TYPE_MUSIC = "music"; + + /** + * 杩斿洖娑堟伅绫诲瀷锛氬浘鏂 + */ + public static final String RESP_MESSAGE_TYPE_NEWS = "news"; + + /** + * 璇锋眰娑堟伅绫诲瀷锛氭枃鏈 + */ + public static final String REQ_MESSAGE_TYPE_TEXT = "text"; + + /** + * 璇锋眰娑堟伅绫诲瀷锛氬浘鐗 + */ + public static final String REQ_MESSAGE_TYPE_IMAGE = "image"; + + /** + * 璇锋眰娑堟伅绫诲瀷锛氶摼鎺 + */ + public static final String REQ_MESSAGE_TYPE_LINK = "link"; + + /** + * 璇锋眰娑堟伅绫诲瀷锛氬湴鐞嗕綅缃 + */ + public static final String REQ_MESSAGE_TYPE_LOCATION = "location"; + + /** + * 璇锋眰娑堟伅绫诲瀷锛氶煶棰 + */ + public static final String REQ_MESSAGE_TYPE_VOICE = "voice"; + + /** + * 璇锋眰娑堟伅绫诲瀷锛氭帹閫 + */ + public static final String REQ_MESSAGE_TYPE_EVENT = "event"; + + /** + * 浜嬩欢绫诲瀷锛歴ubscribe(璁㈤槄) + */ + public static final String EVENT_TYPE_SUBSCRIBE = "subscribe"; + + /** + * 浜嬩欢绫诲瀷锛歶nsubscribe(鍙栨秷璁㈤槄) + */ + public static final String EVENT_TYPE_UNSUBSCRIBE = "unsubscribe"; + + /** + * 浜嬩欢绫诲瀷锛欳LICK(鑷畾涔夎彍鍗曠偣鍑讳簨浠) + */ + public static final String EVENT_TYPE_CLICK = "CLICK"; + + public static Map xmlToMap(String strxml) throws JDOMException, IOException { + + if(StringUtils.isBlank(strxml)) { + return null; + } + + Map m = new HashMap(); + + InputStream in = new ByteArrayInputStream(strxml.getBytes(StandardCharsets.UTF_8)); + SAXBuilder builder = new SAXBuilder(); + Document doc = builder.build(in); + Element root = doc.getRootElement(); + List list = root.getChildren(); + for (Element e : list) { + String k = e.getName(); + String v = ""; + List children = e.getChildren(); + if (children.isEmpty()) { + v = e.getTextNormalize(); + } else { + v = getChildrenText(children); + } + + m.put(k, v); + } + + //鍏抽棴娴 + in.close(); + + return m; + } + + public static String getChildrenText(List children) { + StringBuilder sb = new StringBuilder(); + if(!children.isEmpty()) { + for (Element e : children) { + String name = e.getName(); + String value = e.getTextNormalize(); + List list = e.getChildren(); + sb.append("<").append(name).append(">"); + if (!list.isEmpty()) { + sb.append(getChildrenText(list)); + } + sb.append(value); + sb.append(""); + } + } + + return sb.toString(); + } + + /** + * 鍥炲鏂囨湰娑堟伅 + * @param ToUserName 鎺ユ敹鑰 + * @param FromUserName 鍙戦佽 + * @param title 鍐呭 + * @return 缁撴灉 + */ + public static String replyContent(String FromUserName, String ToUserName, String title){ + return "" + + " " + + " " + + " "+ System.currentTimeMillis() +"" + + " " + + " " + + ""; + } + + /** + * 缁熶竴鍥炲鍥炬枃鏍煎紡 + * @param FromUserName + * @param ToUserName + * @return + */ + public static String replayArticle(String FromUserName, String ToUserName,String Title,String intro,String QRCode,String urlSite) { + return "\n" + + " " + + " " + + " "+ System.currentTimeMillis() +"" + + " " + + " 1" + + " " + + " " + + " <![CDATA["+ Title +"]]>" + + " " + + " " + + " " + + " " + + " " + + ""; + } + + /** + * 鍥剧墖娑堟伅缁勮 + * @param ToUserName 鐢ㄦ埛 + * @param FromUserName + * @return + */ + public static String replayImage(String ToUserName, String FromUserName,String mediaId){ + return "\n" + + " " + + " " + + " "+ System.currentTimeMillis() +"" + + " " + + " " + + " " + + " " + + ""; + } + + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/weixin/message/TextMessage.java b/ruoyi-common/src/main/java/com/ruoyi/common/weixin/message/TextMessage.java new file mode 100644 index 0000000000000000000000000000000000000000..310d40ae15f6a69bca5c4aafccfa58839d8d7da1 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/weixin/message/TextMessage.java @@ -0,0 +1,19 @@ +package com.ruoyi.common.weixin.message; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Setter +@Getter +@ToString +public class TextMessage { + + + private String toUserName; + private String fromUserName; + private Long createTime; + private String msgType; + private String content; + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/weixin/utils/WeiXinGzhUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/weixin/utils/WeiXinGzhUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..b817905f0c1a1fa825554d3046eacd75222d301d --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/weixin/utils/WeiXinGzhUtils.java @@ -0,0 +1,289 @@ +package com.ruoyi.common.weixin.utils; + +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson2.JSONObject; +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.common.weixin.config.WeiXinGzhConfig; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.jdom2.Document; +import org.jdom2.Element; +import org.jdom2.JDOMException; +import org.jdom2.input.SAXBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static java.util.concurrent.TimeUnit.SECONDS; + +/** + * 寰俊鍏紬鍙峰伐鍏风被 + */ +@Component +public class WeiXinGzhUtils { + + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Resource + private RedisCache redisCache; + + @Resource + private WeiXinGzhConfig weiXinGzhConfig; + + /** + * 鑾峰彇access_token + * + * @return access_token + */ + public String getAccessToken() { + JSONObject jsonObject = new JSONObject(); + String accessToken = ""; + try { + if (redisCache.hasKey(CacheConstants.GZH_ACCESS_TOKEN_KEY)) { + return redisCache.getCacheObject(CacheConstants.GZH_ACCESS_TOKEN_KEY).toString(); + } + String requestUrl = "https://api.weixin.qq.com/cgi-bin/token" + + "?grant_type=client_credential" + + "&appid="+weiXinGzhConfig.getAppId() + + "&secret="+weiXinGzhConfig.getAppSecret(); + String result = HttpUtil.get(requestUrl); + logger.info("{} 鍏紬鍙疯幏鍙 access_token 缁撴灉 -> {}", DateUtils.getTime(), result); + jsonObject = JSONObject.parseObject(result); + // 鏈夋晥鏈(s) + Long expiresIn = 0L; + if (ObjectUtils.isNotEmpty(jsonObject)) { + accessToken = jsonObject.getString("access_token"); + expiresIn = jsonObject.getLong("expires_in"); + } + if (StringUtils.isBlank(accessToken)){ + logger.error("{} 鍏紬鍙疯幏鍙 access_token 澶辫触 -> {}", DateUtils.getTime(), result); + }else { + redisCache.setCacheObject(CacheConstants.GZH_ACCESS_TOKEN_KEY, accessToken, expiresIn.intValue(), SECONDS); + } + } catch (Exception e) { + logger.error("{} 鍏紬鍙疯幏鍙 access_token 寮傚父 -> {}", DateUtils.getTime(), e.getMessage()); + } + return accessToken; + } + + /** + * 鑾峰彇ticket + * @return 缁撴灉 + */ + public JSONObject getQrCodeByTicket(){ + String ticket = ""; + String uuid = IdUtils.simpleUUID(); + String qrUrl = ""; + + String accessToken = this.getAccessToken(); + if (StringUtils.isBlank(accessToken)){ + throw new ServiceException("寰俊鏍¢獙澶辫触"); + } + try { + // 閫氳繃access_token鍜屼竴浜涘弬鏁板彂閫乸ost璇锋眰鑾峰彇浜岀淮鐮乀icket + String getTicketUrl = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=" + accessToken; + // 灏佽鍙傛暟 + JSONObject ticketInfo = new JSONObject(); + ticketInfo.put("expire_seconds", 300); // 浜岀淮鐮佽秴鏃舵椂闂 + ticketInfo.put("action_name", "QR_STR_SCENE"); + // 鏀惧叆uuid + ticketInfo.put("action_info", new JSONObject() {{ + put("scene", new JSONObject() {{ + put("scene_str", uuid); + }} + ); + }} + ); + String ticketJsonInfo = ticketInfo.toJSONString();// 璇锋眰鍙傛暟 + String ticketRes = HttpUtil.post(getTicketUrl, ticketJsonInfo); + logger.info("{} 鍏紬鍙疯幏鍙 ticket 缁撴灉 -> {}", DateUtils.getTime(), ticketRes); + JSONObject ticketResult = JSONObject.parseObject(ticketRes); + if (ticketResult.containsKey("ticket")){ + ticket = ticketResult.getString("ticket"); + }else { + logger.error("{} 鍏紬鍙疯幏鍙 ticket 澶辫触 -> {}", DateUtils.getTime(), ticketRes); + } + }catch (Exception e){ + logger.error("{} 鍏紬鍙疯幏鍙 ticket 寮傚父 -> {}", DateUtils.getTime(), e.getMessage()); + } + if (StringUtils.isBlank(ticket)){ + throw new ServiceException("寰俊鎺堟潈寮傚父"); + } + + try { + // 閫氳繃ticket鑾峰彇浜岀淮鐮乽rl + String encodeTicket = URLEncoder.encode(ticket, "utf-8"); // 缂栫爜ticket + qrUrl = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" + encodeTicket; // 浜岀淮鐮乽rl + }catch (Exception e){ + logger.error("{} 鍏紬鍙疯幏鍙 qrCode 寮傚父 -> {}", DateUtils.getTime(), e.getMessage()); + } + + if (StringUtils.isBlank(ticket)){ + throw new ServiceException("寰俊鎺堟潈澶辫触"); + } + + if (!isValidURL(qrUrl)){ + throw new ServiceException("鐧诲綍"); + } + + JSONObject result = new JSONObject(); + +// result.put("ticket", ticket); + result.put("uuid", uuid); + result.put("qrUrl", qrUrl); + return result; + } + + /** + * 妫娴嬩簩缁寸爜閾炬帴鏄惁鏈夋晥 + * @param urlString 閾炬帴 + * @return 缁撴灉 boolean + */ + public static boolean isValidURL(String urlString) { + if (urlString == null || !urlString.startsWith("http://") && !urlString.startsWith("https://")) { + return false; + } + + try { + URL url = new URL(urlString); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("HEAD"); + connection.setConnectTimeout(5000); // 璁剧疆杩炴帴瓒呮椂鏃堕棿锛堟绉掞級 + connection.setReadTimeout(5000); // 璁剧疆璇诲彇瓒呮椂鏃堕棿锛堟绉掞級 + int responseCode = connection.getResponseCode(); + return 200 == responseCode; // 妫鏌TTP鍝嶅簲鐮佹槸鍚﹀湪200鍒399涔嬮棿 + } catch (IOException e) { + e.printStackTrace(); + return false; + } + } + + /** + * 鏍¢獙寰俊鏈嶅姟鍣═oken绛惧悕 + * + * @param signature 寰俊鍔犲瘑绛惧悕 + * @param timestamp 鏃堕棿鎴 + * @param nonce 闅忔満鏁 + * @return boolean + */ + public boolean checkSignature(String signature, String timestamp, String nonce) { + String checktext = null; + if (null != signature) { + //瀵筎oKen,timestamp,nonce 鎸夊瓧鍏告帓搴 + String[] paramArr = new String[]{weiXinGzhConfig.getToken(), timestamp, nonce}; + Arrays.sort(paramArr); + //灏嗘帓搴忓悗鐨勭粨鏋滄嫾鎴愪竴涓瓧绗︿覆 + String content = paramArr[0].concat(paramArr[1]).concat(paramArr[2]); + try { + MessageDigest md = MessageDigest.getInstance("SHA-1"); + //瀵规帴鍚庣殑瀛楃涓茶繘琛宻ha1鍔犲瘑 + byte[] digest = md.digest(content.getBytes()); + checktext = byteToStr(digest); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + } + //灏嗗姞瀵嗗悗鐨勫瓧绗︿覆涓巗ignature杩涜瀵规瘮 + return checktext != null && checktext.equals(signature.toUpperCase()); + } + + /** + * 灏嗗瓧鑺傛暟缁勮浆鍖栨垜16杩涘埗瀛楃涓 + * + * @param byteArrays 瀛楃鏁扮粍 + * @return 瀛楃涓 + */ + private String byteToStr(byte[] byteArrays) { + String str = ""; + for (int i = 0; i < byteArrays.length; i++) { + str += byteToHexStr(byteArrays[i]); + } + return str; + } + + /** + * 灏嗗瓧鑺傝浆鍖栦负鍗佸叚杩涘埗瀛楃涓 + * + * @param myByte 瀛楄妭 + * @return 瀛楃涓 + */ + private String byteToHexStr(byte myByte) { + char[] Digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; + char[] tampArr = new char[2]; + tampArr[0] = Digit[(myByte >>> 4) & 0X0F]; + tampArr[1] = Digit[myByte & 0X0F]; + String str = new String(tampArr); + return str; + } + + public Map xmlToMap(String strxml) throws JDOMException, IOException { + + if(StringUtils.isBlank(strxml)) { + return null; + } + + Map m = new HashMap(); + + InputStream in = new ByteArrayInputStream(strxml.getBytes(StandardCharsets.UTF_8)); + SAXBuilder builder = new SAXBuilder(); + Document doc = builder.build(in); + Element root = doc.getRootElement(); + List list = root.getChildren(); + for (Element e : list) { + String k = e.getName(); + String v = ""; + List children = e.getChildren(); + if (children.isEmpty()) { + v = e.getTextNormalize(); + } else { + v = getChildrenText(children); + } + + m.put(k, v); + } + + //鍏抽棴娴 + in.close(); + + return m; + } + + public static String getChildrenText(List children) { + StringBuilder sb = new StringBuilder(); + if(!children.isEmpty()) { + for (Element e : children) { + String name = e.getName(); + String value = e.getTextNormalize(); + List list = e.getChildren(); + sb.append("<").append(name).append(">"); + if (!list.isEmpty()) { + sb.append(getChildrenText(list)); + } + sb.append(value); + sb.append(""); + } + } + + return sb.toString(); + } + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/weixin/utils/WeiXinPayV3Utils.java b/ruoyi-common/src/main/java/com/ruoyi/common/weixin/utils/WeiXinPayV3Utils.java new file mode 100644 index 0000000000000000000000000000000000000000..d62374fa34acd086dbae81f4e057d324811a8345 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/weixin/utils/WeiXinPayV3Utils.java @@ -0,0 +1,283 @@ +package com.ruoyi.common.weixin.utils; + +import com.alibaba.fastjson2.JSONObject; +import com.ruoyi.common.weixin.config.WeiXinPayConfig; +import com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder; +import com.wechat.pay.contrib.apache.httpclient.auth.*; +import com.wechat.pay.contrib.apache.httpclient.cert.CertificatesManager; +import com.wechat.pay.contrib.apache.httpclient.constant.WechatPayHttpHeaders; +import com.wechat.pay.contrib.apache.httpclient.notification.Notification; +import com.wechat.pay.contrib.apache.httpclient.notification.NotificationHandler; +import com.wechat.pay.contrib.apache.httpclient.notification.NotificationRequest; +import com.wechat.pay.contrib.apache.httpclient.util.AesUtil; +import com.wechat.pay.contrib.apache.httpclient.util.PemUtil; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.util.EntityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.security.GeneralSecurityException; +import java.security.PrivateKey; + +/** + * 寰俊V3鏀粯 + * @author Wzp + */ +@Component +public class WeiXinPayV3Utils { + + protected final Logger logger = LoggerFactory.getLogger(this.getClass()); + + // 鍟嗘埛璇佷功绉侀挜 + private PrivateKey merchantPrivateKey; + + // 璇佷功 + private Verifier verifier; + + // 璇锋眰瀹㈡埛绔 + private CloseableHttpClient httpClient; + + @Resource + private WeiXinPayConfig weiXinPayConfig; + + /** + * 鑾峰彇鍟嗘埛璇佷功绉侀挜 + */ + private void setMerchantPrivateKey() { + // 鍔犺浇鍟嗘埛绉侀挜 + merchantPrivateKey = PemUtil.loadPrivateKey(IOUtils.toInputStream(weiXinPayConfig.getApiClientKey(), StandardCharsets.UTF_8)); + } + + /** + * 鑾峰彇寰俊璇佷功 + * @throws Exception 寮傚父 + */ + private void setVerifier() throws Exception { + if (merchantPrivateKey == null) { + setMerchantPrivateKey(); + } + // 鑾峰彇璇佷功绠$悊鍣ㄥ疄渚 + CertificatesManager certificatesManager = CertificatesManager.getInstance(); + // 鍚戣瘉涔︾鐞嗗櫒澧炲姞闇瑕佽嚜鍔ㄦ洿鏂板钩鍙拌瘉涔︾殑鍟嗘埛淇℃伅 + certificatesManager.putMerchant(weiXinPayConfig.getMchId(), + new WechatPay2Credentials(weiXinPayConfig.getMchId(), new PrivateKeySigner(weiXinPayConfig.getMchSerialNum(), merchantPrivateKey)), + weiXinPayConfig.getApiV3Key().getBytes(StandardCharsets.UTF_8)); + + // 浠庤瘉涔︾鐞嗗櫒涓幏鍙杤erifier + verifier = certificatesManager.getVerifier(weiXinPayConfig.getMchId()); + } + + /** + * 鍒涘缓璇锋眰瀹㈡埛绔 + * @throws Exception 寮傚父 + */ + private void setHttpClient() throws Exception { + if (verifier == null) { + setVerifier(); + } + WechatPayHttpClientBuilder builder = WechatPayHttpClientBuilder.create() + .withMerchant(weiXinPayConfig.getMchId(), weiXinPayConfig.getMchSerialNum(), merchantPrivateKey) + .withValidator(new WechatPay2Validator(verifier)); + // ... 鎺ヤ笅鏉ワ紝浣犱粛鐒跺彲浠ラ氳繃builder璁剧疆鍚勭鍙傛暟锛屾潵閰嶇疆浣犵殑HttpClient + httpClient = builder.build(); + } + + /** + * 鍙戦丳OST璇锋眰 + * @param url 璇锋眰鍦板潃 + * @param params 鍙傛暟锛坖son锛 + * @return 缁撴灉 + */ + public JSONObject sendPost(String url, JSONObject params) { + try { + if (httpClient == null) { + setHttpClient(); + } + HttpPost httpPost = new HttpPost(url); + httpPost.addHeader("Accept", "application/json"); + httpPost.addHeader("Content-type", "application/json; charset=utf-8"); + httpPost.setEntity(new StringEntity(params.toJSONString(), StandardCharsets.UTF_8)); + CloseableHttpResponse response = httpClient.execute(httpPost); + String bodyAsString = EntityUtils.toString(response.getEntity()); + logger.info("寰俊璇佷功 post 璇锋眰杩斿洖鐨勫唴瀹:->{" + bodyAsString+"}"); + if (StringUtils.isEmpty(bodyAsString)) { + return null; + } + return JSONObject.parseObject(bodyAsString); + } catch (Exception e) { + logger.error("寰俊璇佷功 post 璇锋眰寮傚父"); + e.printStackTrace(); + return null; + } + } + + /** + * 鍙戦乬et璇锋眰 + * @param url 璇锋眰鍦板潃锛堝弬鏁版嫾鎺ヨ嚦url锛 + * @return 缁撴灉 + */ + public JSONObject sendGet(String url) { + try { + if (httpClient == null) { + setHttpClient(); + } + URIBuilder uriBuilder = new URIBuilder(url); + HttpGet httpGet = new HttpGet(uriBuilder.build()); + httpGet.addHeader("Accept", "application/json"); + CloseableHttpResponse response = httpClient.execute(httpGet); + String bodyAsString = EntityUtils.toString(response.getEntity()); + logger.info("寰俊璇佷功 get 璇锋眰杩斿洖鐨勫唴瀹癸細" + bodyAsString); + if (StringUtils.isEmpty(bodyAsString)) { + return null; + } + return JSONObject.parseObject(bodyAsString); + } catch (Exception e) { + logger.error("寰俊璇佷功 get 璇锋眰寮傚父"); + e.printStackTrace(); + return null; + } + } + + /** + * 瑙f瀽鏀粯鍥炶皟鍙傛暟 + * @param request 璇锋眰 + * @return 缁撴灉 + */ + public JSONObject getNotifyDate(HttpServletRequest request) { + + try { + // 鑾峰彇鎶ユ枃 + String body = getRequestBody(request); + // 闅忔満涓 + String nonceStr = request.getHeader(WechatPayHttpHeaders.WECHAT_PAY_NONCE); + // 寰俊浼犻掕繃鏉ョ殑绛惧悕 + String signature = request.getHeader(WechatPayHttpHeaders.WECHAT_PAY_SIGNATURE); + // 璇佷功搴忓垪鍙凤紙寰俊骞冲彴锛 + String serialNo = request.getHeader(WechatPayHttpHeaders.WECHAT_PAY_SERIAL); + // 鏃堕棿鎴 + String timestamp = request.getHeader(WechatPayHttpHeaders.WECHAT_PAY_TIMESTAMP); + + // 鏋勫缓request锛屼紶鍏ュ繀瑕佸弬鏁 + NotificationRequest res = new NotificationRequest.Builder().withSerialNumber(serialNo) + .withNonce(nonceStr) + .withTimestamp(timestamp) + .withSignature(signature) + .withBody(body) + .build(); + if (verifier == null){ + setVerifier(); + } + NotificationHandler handler = new NotificationHandler(verifier, weiXinPayConfig.getApiV3Key().getBytes(StandardCharsets.UTF_8)); + Notification notification = handler.parse(res); + logger.info("鍥炶皟閫氱煡鏁版嵁锛" + notification.toString()); + + // 鍥炶皟鍙傛暟瀵嗘枃瑙f瀽 + String decryptData = notification.getDecryptData(); + logger.info("鍥炶皟瑙f瀽瀵嗘枃锛" + decryptData); + if (StringUtils.isEmpty(decryptData)) { + return null; + } + return JSONObject.parseObject(decryptData); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * 瑙e瘑body鐨勫瘑鏂 + * @param body 璇锋眰body鍙傛暟 + * @return 缁撴灉 + */ + private String decryptBody(String body) throws GeneralSecurityException { + + AesUtil aesUtil = new AesUtil(weiXinPayConfig.getApiV3Key().getBytes(StandardCharsets.UTF_8)); + + JSONObject object = JSONObject.parseObject(body); + JSONObject resource = object.getJSONObject("resource"); + String ciphertext = resource.getString("ciphertext"); + String associatedData = resource.getString("associated_data"); + String nonce = resource.getString("nonce"); + + return aesUtil.decryptToString(associatedData.getBytes(StandardCharsets.UTF_8),nonce.getBytes(StandardCharsets.UTF_8),ciphertext); + + } + + /** + * 楠岃瘉绛惧悕 + * + * @param serialNo 寰俊骞冲彴-璇佷功搴忓垪鍙 + * @param signStr 鑷繁缁勮鐨勭鍚嶄覆 + * @param signature 寰俊杩斿洖鐨勭鍚 + * @return 缁撴灉 + */ + private boolean verifiedSign(String serialNo, String signStr, String signature) throws Exception { + if (verifier == null){ + setVerifier(); + } + return verifier.verify(serialNo, signStr.getBytes(StandardCharsets.UTF_8), signature); + } + + /** + * 寰俊鏀粯v3绛惧悕 RSA绛惧悕 + * @param message 闇瑕佺鍚嶇殑鍐呭 + * @return 缁撴灉 + */ + public String signRSA(String message) { + try { + if (merchantPrivateKey == null) { + setMerchantPrivateKey(); + } + Signer signer = new PrivateKeySigner(weiXinPayConfig.getMchSerialNum(), merchantPrivateKey); + Signer.SignatureResult signature = signer.sign(message.getBytes(StandardCharsets.UTF_8)); + return signature.getSign(); + } catch (Exception e) { + e.printStackTrace(); + return ""; + } + } + + /** + * 璇诲彇璇锋眰鏁版嵁娴 + * @param request 璇锋眰 + * @return 缁撴灉 + */ + private String getRequestBody(HttpServletRequest request) { + + StringBuilder sb = new StringBuilder(); + + try (ServletInputStream inputStream = request.getInputStream(); + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); + ) { + String line; + + while ((line = reader.readLine()) != null) { + sb.append(line); + } + + } catch (IOException e) { + e.printStackTrace(); + } + + return sb.toString(); + + } + + + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/weixin/utils/WeiXinXcxMemberUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/weixin/utils/WeiXinXcxMemberUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..f5980c515497a97cbaffee0ef703a7ac5c49461f --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/weixin/utils/WeiXinXcxMemberUtils.java @@ -0,0 +1,250 @@ +package com.ruoyi.common.weixin.utils; + +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson2.JSONObject; +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.weixin.config.WeiXinXcxMemberConfig; +import org.apache.commons.lang3.ObjectUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.Map; + +import static java.util.concurrent.TimeUnit.SECONDS; + +/** + * @Author haoxuyang + * @Date 2024/12/21 10:14 + */ +@Component +public class WeiXinXcxMemberUtils { + //鏃ュ織 + private static final Logger logger = LoggerFactory.getLogger(WeiXinXcxMemberUtils.class); + + @Resource + private RedisCache redisService; + +// @Resource +// private FileUploadService fileUploadService; + + @Resource + private WeiXinXcxMemberConfig weiXinXcxMemberConfig; + + /** + * 鑾峰彇access_token + * + * @return access_token + */ + public String getAccessToken() { + JSONObject jsonObject = new JSONObject(); + String accessToken = ""; + String redisKey = CacheConstants.XCX_MEMBER_ACCESS_TOKEN_KEY; + try { + if (redisService.hasKey(redisKey)) { + return redisService.getCacheObject(redisKey).toString(); + } + String requestUrl = "https://api.weixin.qq.com/cgi-bin/token" + + "?grant_type=client_credential" + + "&appid=" + weiXinXcxMemberConfig.getAppId() + + "&secret=" + weiXinXcxMemberConfig.getAppSecret(); + String result = HttpUtil.get(requestUrl); + logger.info("{} 灏忕▼搴忚幏鍙朼ccess_token缁撴灉 -> {}", DateUtils.getTime(), result); + jsonObject = JSONObject.parseObject(result); + // 鏈夋晥鏈(s) + Long expiresIn = 0L; + if (ObjectUtils.isNotEmpty(jsonObject)) { + accessToken = jsonObject.getString("access_token"); + expiresIn = jsonObject.getLong("expires_in"); + } + if (StringUtils.isBlank(accessToken)) { + logger.error("{} 灏忕▼搴忚幏鍙朼ccess_token澶辫触 -> {}", DateUtils.getTime(), result); + } else { + redisService.setCacheObject(redisKey, accessToken, Integer.parseInt(String.valueOf(expiresIn)), SECONDS); + } + } catch (Exception e) { + logger.error("{} 灏忕▼搴忚幏鍙朼ccess_token寮傚父 -> {}", DateUtils.getTime(), e.getMessage()); + } + return accessToken; + } + + /** + * 灏忕▼搴忔巿鏉冭幏鍙杘penId + * + * @param code 鐧诲綍鏃惰幏鍙栫殑 code + * @return openId + */ + public String getWebAuthorizeInfo(String code) { + String openId = ""; + String unionid = ""; + try { + String requestUrl = "https://api.weixin.qq.com/sns/jscode2session" + + "?appid=" + weiXinXcxMemberConfig.getAppId() + "&" + + "secret=" + weiXinXcxMemberConfig.getAppSecret() + "&" + + "js_code=" + code + "&" + + "grant_type=authorization_code"; + // 缁撴灉 + String result = HttpUtil.get(requestUrl); + logger.info("{} 灏忕▼搴忔巿鏉冭幏鍙杘penId缁撴灉 -> {}", DateUtils.getTime(), result); + JSONObject jsonObject = JSONObject.parseObject(result); + openId = jsonObject.getString("openid"); + unionid = jsonObject.getString("unionid"); + } catch (Exception e) { + logger.error("{} 灏忕▼搴忔巿鏉冭幏鍙杘penId寮傚父 -> {}", DateUtils.getTime(), e.getMessage()); + } + return openId; + } + + /** + * 灏忕▼搴忔巿鏉冭幏鍙杘penId + * + * @param code 鐧诲綍鏃惰幏鍙栫殑 code + * @return openId + */ + public Map getWebAuthorizeInfoMap(String code) { + Map map = new HashMap<>(); + try { + String requestUrl = "https://api.weixin.qq.com/sns/jscode2session" + + "?appid=" + weiXinXcxMemberConfig.getAppId() + "&" + + "secret=" + weiXinXcxMemberConfig.getAppSecret() + "&" + + "js_code=" + code + "&" + + "grant_type=authorization_code"; + // 缁撴灉 + String result = HttpUtil.get(requestUrl); + logger.info("{} 灏忕▼搴忔巿鏉冭幏鍙杘penId缁撴灉 -> {}", DateUtils.getTime(), result); + JSONObject jsonObject = JSONObject.parseObject(result); + String openId = jsonObject.getString("openid"); + String unionId = jsonObject.getString("unionid"); + map.put("openid", openId); + map.put("unionId", unionId); + } catch (Exception e) { + logger.error("{} 灏忕▼搴忔巿鏉冭幏鍙杘penId寮傚父 -> {}", DateUtils.getTime(), e.getMessage()); + } + return map; + } + + /** + * 鑾峰彇鐢ㄦ埛鎵嬫満鍙 + * + * @param phoneCode 鎵嬫満鍙疯幏鍙栧嚟璇 + * @return 鎵嬫満鍙 + */ + public String getUserPhoneNumber(String phoneCode) { + String phoneNumber = ""; + try { + // 璇锋眰鍦板潃 + String requestUrl = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" + this.getAccessToken(); + // 璇锋眰鍙傛暟 + JSONObject jsonObject = new JSONObject(); + jsonObject.put("code", phoneCode); + // 缁撴灉 + String res = HttpUtil.createPost(requestUrl). + body(jsonObject.toString()).execute().body(); + logger.info("{} 灏忕▼搴忔墜鏈哄彿API缁撴灉 -> {}", DateUtils.getTime(), res); + JSONObject result = JSONObject.parseObject(res); + if ("0".equals(result.getString("errcode"))) { + JSONObject phone_info = result.getJSONObject("phone_info"); + phoneNumber = phone_info.get("phoneNumber").toString(); + } + return phoneNumber; + } catch (Exception e) { + logger.error("{} 灏忕▼搴忔墜鏈哄彿API寮傚父 -> {}", DateUtils.getTime(), e.getMessage()); + } + return phoneNumber; + } + + /** + * 鑾峰彇鑱屼綅鍒嗕韩灏忕▼搴忕爜 + * @param positionId 鑱屼綅ID + * @param key key + * @return 缁撴灉 + */ + /* public String getPositionShareQRCode(String positionId, String key){ + return this.getQRCode("", key); + }*/ + + /** + * 鑾峰彇灏忕▼搴忕爜 + * + * @param path 璺緞鍙傛暟 + * @param key key + * @return 鍥剧墖閾炬帴 + */ + /*public String getQRCode(String path, String key){ + String qrCodeUrl = ""; + HttpResponse execute = null; + try { + //鑾峰彇token + String accessToken = this.getAccessToken(); + String codeUrl = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+ accessToken; + //post鍙傛暟 + JSONObject jsonObject = new JSONObject(); + if (StringUtils.isNotBlank(path)){ + jsonObject.put("page", path); + } + jsonObject.put("scene", key); + jsonObject.put("check_path", false); + jsonObject.put("env_version", "trial"); + + String params = jsonObject.toString(); + + execute = HttpUtil.createPost(codeUrl) + .body(params) + .header("Contend-Type", "application/json") + .execute(); + InputStream inputStream = execute.bodyStream(); + //鏂囦欢涓婁紶,杩斿洖灏忕▼搴忕爜url + qrCodeUrl = fileUploadService.upload(inputStream, IdUtils.fastSimpleUUID()+"_"+key+".png"); + } catch (Exception e) { + e.printStackTrace(); + }finally { + if (execute != null){ + execute.close(); + } + } + return qrCodeUrl; + }*/ + + /** + * 鐢熸垚浜岀淮鐮 + * + * @param content 浜岀淮鐮佸唴瀹 + * @param qrConfig 浜岀淮鐮侀珮绾犻敊閰嶇疆 + * @return 鍥剧墖byte[] + */ + /* public byte[] createQrCode(String content, QrConfig qrConfig) { + + if (null == qrConfig || ObjectUtils.isEmpty(qrConfig)) { + qrConfig = new QrConfig(); + // 楂樼籂閿欑骇鍒 + qrConfig.setErrorCorrection(ErrorCorrectionLevel.H); + } + + ByteArrayOutputStream baos = null; + byte[] imageBytes = null; + try { + // 鐢熸垚浜岀淮鐮佸苟杞崲鎴愬瓧鑺傛暟缁 + BufferedImage image = QrCodeUtil.generate(content, qrConfig); + baos = new ByteArrayOutputStream(); + ImageIO.write(image, "png", baos); + baos.flush(); + imageBytes = baos.toByteArray(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (baos != null) { + baos.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + return imageBytes; + }*/ +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/weixin/utils/apiclient_cert.p12 b/ruoyi-common/src/main/java/com/ruoyi/common/weixin/utils/apiclient_cert.p12 new file mode 100644 index 0000000000000000000000000000000000000000..fd402e9bc5e85c87ee9558f9dba7e984e776ce53 Binary files /dev/null and b/ruoyi-common/src/main/java/com/ruoyi/common/weixin/utils/apiclient_cert.p12 differ diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/weixin/utils/apiclient_key.pem b/ruoyi-common/src/main/java/com/ruoyi/common/weixin/utils/apiclient_key.pem new file mode 100644 index 0000000000000000000000000000000000000000..8d7fa1369b1ef1eef905b763219afc86036a62a6 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/weixin/utils/apiclient_key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCYx8UTdItOSLGN +ZF/wBP2DWe6iF33l+80X+MQZtTYyAhfWu2HblnOm+LN9yc/S/Jyft5LbWj58/4jk +1idPzXoDoYWf5UcyyCXXVTIZhuS7zuwsaVL6jdrdHxTeeu+LkSiJGKDrw10M8M0U +tf2LQxdCIel/yZY59iOSPcF5sMfhpMgmMFB7LbDfStNHFku4IW/iIV+FzOI/NVaT +wN2MXpgdSVnJnhV+HuHchqW+yA2fONaLgglQyNn748onSH/zzEQFYezkHgi1z8J7 +gxfK8HG83Bjj62ybL3LPhpe9cnB7J+suc1a+8EjFcMDiM9HH1NFbF947OoaVUU6N +wZOfVB/tAgMBAAECggEBAJJuHcAY2o+scqhexOjKD6S+JE6tD1jHLvpDzsgI+6mQ +ggKoVBFfsPcetQHh1FOXFBKsoo+kffHWBQG3E7ST7tbeD7GB0eylEkfBeyQmOsKa +f5fNVt+X6GY4rQrTbxYoiV5lAY8WDvAhN54bE6hPJFKZKC/3KQnilJNMp0wYGGt1 +xdMtFmLn0nzhA4TYX6UWUaAV8T1e4gRjkUVCdTRTF4RqJQISzXsXCMh/UkbYNno/ +hxHHvur5Nd9QzXVzEoieRmrkVHWtbL1+hUnvi2JthRefRfdXESax2rWeqRumOQzx +pkjymMBFngc8ze9lQlHtgw2nFaa4U4DlJVCKk8YQXAECgYEAyB+pphD7geNIV98T +EFH5Rbh9WSgQrw2K6crUjbY6HFFmbgRRoHKMaHqCMeb7cOmDTlQzDQPr2w8Wa+rN +IcCfS/y5ZprGdOOAn8JEIXpRFJrEyYHyGwKd2zNkXUVx9mXlQp1bQLbTTlOI5GSu +B54zUeLGK8i/MLHu2q4NTvfjGQECgYEAw3Af+poh2/QiNG8/Sr/6nO363LRGlcTp +CiPWn66oMOOcnpHrIT9YqqBFh0MxcN/9P7r92IrLn0fwE6XaprfXSJZQiQRhKE3A +6zhq0G+/iM1yngCdt8Wf1Kf9/lHn7ksxokBSCcCiTlAhyXTdgoAyckOww1VJ1iiJ +WnB6Sqir+u0CgYBVpn+ETMZn+++NdDMDjCIEvgYf727cjQ5EK4Q3NqO+VPRi58RL +yFrhqHUqiHJbDAYfsxe6XVBHjDiLbY3oATnsWri6+kkv4+K7/XgNX/1ttSO+HriQ +6NjI5UDyTnONAmVR0mko1Faxsjzni1OUfRf31vf760owvCa/PzkA8EUpAQKBgBQ0 +65mFhiqvuzmgpvKbltXS5TUcjo+9pDqgKfionksvvWnHvH/bhNdfatDpaZs6DX0h +YE2bTCJT1cayR0ElkOS4ZetEwKbiIygu1Rxn8W27kDY16hiuHjBmjiRVY52HuMIF +1HWdrSpbrqKdqqlrh8u4o/YOQ2wZFNp89qfxeJahAoGAD8etps+mEO6GJesJclzG +BwvbLAzQjHqniLuRzZgoOOI7Fe5lOjXguFUVlUj+l8NujlzF7SvMWOg/y+DZfOX2 +5OoRG0vmtxsEHNPSzlvBXuF3DCkEDv51lcxWB0LH6RG/0lAguFR3HBAO0xybYdEx +zh/Ng6f1jpxJ/G1+1sdOLHg= +-----END PRIVATE KEY----- diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/xss/Xss.java b/ruoyi-common/src/main/java/com/ruoyi/common/xss/Xss.java new file mode 100644 index 0000000000000000000000000000000000000000..7bfdf04bd42e84aca2339f6cd0b3333b9bfa4d55 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/xss/Xss.java @@ -0,0 +1,27 @@ +package com.ruoyi.common.xss; + +import javax.validation.Constraint; +import javax.validation.Payload; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 鑷畾涔墄ss鏍¢獙娉ㄨВ + * + * @author ruoyi + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(value = { ElementType.METHOD, ElementType.FIELD, ElementType.CONSTRUCTOR, ElementType.PARAMETER }) +@Constraint(validatedBy = { XssValidator.class }) +public @interface Xss +{ + String message() + + default "涓嶅厑璁镐换浣曡剼鏈繍琛"; + + Class[] groups() default {}; + + Class[] payload() default {}; +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/xss/XssValidator.java b/ruoyi-common/src/main/java/com/ruoyi/common/xss/XssValidator.java new file mode 100644 index 0000000000000000000000000000000000000000..e667ba1b092053e6369757cd731f8475fe6b92ad --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/xss/XssValidator.java @@ -0,0 +1,40 @@ +package com.ruoyi.common.xss; + +import com.ruoyi.common.utils.StringUtils; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 鑷畾涔墄ss鏍¢獙娉ㄨВ瀹炵幇 + * + * @author ruoyi + */ +public class XssValidator implements ConstraintValidator +{ + private static final String HTML_PATTERN = "<(\\S*?)[^>]*>.*?|<.*? />"; + + @Override + public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) + { + if (StringUtils.isBlank(value)) + { + return true; + } + return !containsHtml(value); + } + + public static boolean containsHtml(String value) + { + StringBuilder sHtml = new StringBuilder(); + Pattern pattern = Pattern.compile(HTML_PATTERN); + Matcher matcher = pattern.matcher(value); + while (matcher.find()) + { + sHtml.append(matcher.group()); + } + return pattern.matcher(sHtml).matches(); + } +} diff --git a/ruoyi-framework/pom.xml b/ruoyi-framework/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..c4ba93bcf895f33c53b12951f1954b1ba8314d8a --- /dev/null +++ b/ruoyi-framework/pom.xml @@ -0,0 +1,64 @@ + + + + ruoyi + com.ruoyi + 3.8.8 + + 4.0.0 + + ruoyi-framework + + + framework妗嗘灦鏍稿績 + + + + + + + org.springframework.boot + spring-boot-starter-web + + + + + org.springframework.boot + spring-boot-starter-aop + + + + + com.alibaba + druid-spring-boot-starter + + + + + pro.fessional + kaptcha + + + servlet-api + javax.servlet + + + + + + + com.github.oshi + oshi-core + + + + + com.ruoyi + ruoyi-system + + + + + \ No newline at end of file diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java new file mode 100644 index 0000000000000000000000000000000000000000..11fa86ce57298ce7fa6850b00b645c8a5553160f --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java @@ -0,0 +1,185 @@ +package com.ruoyi.framework.aspectj; + +import com.ruoyi.common.annotation.DataScope; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.framework.security.context.PermissionContextHolder; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + * 鏁版嵁杩囨护澶勭悊 + * + * @author ruoyi + */ +@Aspect +@Component +public class DataScopeAspect +{ + /** + * 鍏ㄩ儴鏁版嵁鏉冮檺 + */ + public static final String DATA_SCOPE_ALL = "1"; + + /** + * 鑷畾鏁版嵁鏉冮檺 + */ + public static final String DATA_SCOPE_CUSTOM = "2"; + + /** + * 閮ㄩ棬鏁版嵁鏉冮檺 + */ + public static final String DATA_SCOPE_DEPT = "3"; + + /** + * 閮ㄩ棬鍙婁互涓嬫暟鎹潈闄 + */ + public static final String DATA_SCOPE_DEPT_AND_CHILD = "4"; + + /** + * 浠呮湰浜烘暟鎹潈闄 + */ + public static final String DATA_SCOPE_SELF = "5"; + + /** + * 鏁版嵁鏉冮檺杩囨护鍏抽敭瀛 + */ + public static final String DATA_SCOPE = "dataScope"; + + @Before("@annotation(controllerDataScope)") + public void doBefore(JoinPoint point, DataScope controllerDataScope) throws Throwable + { + clearDataScope(point); + handleDataScope(point, controllerDataScope); + } + + protected void handleDataScope(final JoinPoint joinPoint, DataScope controllerDataScope) + { + // 鑾峰彇褰撳墠鐨勭敤鎴 + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (StringUtils.isNotNull(loginUser)) + { + SysUser currentUser = loginUser.getUser(); + // 濡傛灉鏄秴绾х鐞嗗憳锛屽垯涓嶈繃婊ゆ暟鎹 + if (StringUtils.isNotNull(currentUser) && !currentUser.isAdmin()) + { + String permission = StringUtils.defaultIfEmpty(controllerDataScope.permission(), PermissionContextHolder.getContext()); + dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(), + controllerDataScope.userAlias(), permission); + } + } + } + + /** + * 鏁版嵁鑼冨洿杩囨护 + * + * @param joinPoint 鍒囩偣 + * @param user 鐢ㄦ埛 + * @param deptAlias 閮ㄩ棬鍒悕 + * @param userAlias 鐢ㄦ埛鍒悕 + * @param permission 鏉冮檺瀛楃 + */ + public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias, String permission) + { + StringBuilder sqlString = new StringBuilder(); + List conditions = new ArrayList(); + List scopeCustomIds = new ArrayList(); + user.getRoles().forEach(role -> { + if (DATA_SCOPE_CUSTOM.equals(role.getDataScope()) && StringUtils.containsAny(role.getPermissions(), Convert.toStrArray(permission))) + { + scopeCustomIds.add(Convert.toStr(role.getRoleId())); + } + }); + + for (SysRole role : user.getRoles()) + { + String dataScope = role.getDataScope(); + if (conditions.contains(dataScope)) + { + continue; + } + if (!StringUtils.containsAny(role.getPermissions(), Convert.toStrArray(permission))) + { + continue; + } + if (DATA_SCOPE_ALL.equals(dataScope)) + { + sqlString = new StringBuilder(); + conditions.add(dataScope); + break; + } + else if (DATA_SCOPE_CUSTOM.equals(dataScope)) + { + if (scopeCustomIds.size() > 1) + { + // 澶氫釜鑷畾鏁版嵁鏉冮檺浣跨敤in鏌ヨ锛岄伩鍏嶅娆℃嫾鎺ャ + sqlString.append(StringUtils.format(" OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id in ({}) ) ", deptAlias, String.join(",", scopeCustomIds))); + } + else + { + sqlString.append(StringUtils.format(" OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias, role.getRoleId())); + } + } + else if (DATA_SCOPE_DEPT.equals(dataScope)) + { + sqlString.append(StringUtils.format(" OR {}.dept_id = {} ", deptAlias, user.getDeptId())); + } + else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope)) + { + sqlString.append(StringUtils.format(" OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )", deptAlias, user.getDeptId(), user.getDeptId())); + } + else if (DATA_SCOPE_SELF.equals(dataScope)) + { + if (StringUtils.isNotBlank(userAlias)) + { + sqlString.append(StringUtils.format(" OR {}.user_id = {} ", userAlias, user.getUserId())); + } + else + { + // 鏁版嵁鏉冮檺涓轰粎鏈汉涓旀病鏈塽serAlias鍒悕涓嶆煡璇换浣曟暟鎹 + sqlString.append(StringUtils.format(" OR {}.dept_id = 0 ", deptAlias)); + } + } + conditions.add(dataScope); + } + + // 瑙掕壊閮戒笉鍖呭惈浼犻掕繃鏉ョ殑鏉冮檺瀛楃锛岃繖涓椂鍊檚qlString涔熶細涓虹┖锛屾墍浠ヨ闄愬埗涓涓,涓嶆煡璇换浣曟暟鎹 + if (StringUtils.isEmpty(conditions)) + { + sqlString.append(StringUtils.format(" OR {}.dept_id = 0 ", deptAlias)); + } + + if (StringUtils.isNotBlank(sqlString.toString())) + { + Object params = joinPoint.getArgs()[0]; + if (StringUtils.isNotNull(params) && params instanceof BaseEntity) + { + BaseEntity baseEntity = (BaseEntity) params; + baseEntity.getParams().put(DATA_SCOPE, " AND (" + sqlString.substring(4) + ")"); + } + } + } + + /** + * 鎷兼帴鏉冮檺sql鍓嶅厛娓呯┖params.dataScope鍙傛暟闃叉娉ㄥ叆 + */ + private void clearDataScope(final JoinPoint joinPoint) + { + Object params = joinPoint.getArgs()[0]; + if (StringUtils.isNotNull(params) && params instanceof BaseEntity) + { + BaseEntity baseEntity = (BaseEntity) params; + baseEntity.getParams().put(DATA_SCOPE, ""); + } + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java new file mode 100644 index 0000000000000000000000000000000000000000..f96ebaaf2cc66c8d3fa9284765f3fa23335b19b4 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java @@ -0,0 +1,73 @@ +package com.ruoyi.framework.aspectj; + +import com.ruoyi.common.annotation.DataSource; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.framework.datasource.DynamicDataSourceContextHolder; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.util.Objects; + +/** + * 澶氭暟鎹簮澶勭悊 + * + * @author ruoyi + */ +@Aspect +@Order(1) +@Component +public class DataSourceAspect +{ + protected Logger logger = LoggerFactory.getLogger(getClass()); + + @Pointcut("@annotation(com.ruoyi.common.annotation.DataSource)" + + "|| @within(com.ruoyi.common.annotation.DataSource)") + public void dsPointCut() + { + + } + + @Around("dsPointCut()") + public Object around(ProceedingJoinPoint point) throws Throwable + { + DataSource dataSource = getDataSource(point); + + if (StringUtils.isNotNull(dataSource)) + { + DynamicDataSourceContextHolder.setDataSourceType(dataSource.value().name()); + } + + try + { + return point.proceed(); + } + finally + { + // 閿姣佹暟鎹簮 鍦ㄦ墽琛屾柟娉曚箣鍚 + DynamicDataSourceContextHolder.clearDataSourceType(); + } + } + + /** + * 鑾峰彇闇瑕佸垏鎹㈢殑鏁版嵁婧 + */ + public DataSource getDataSource(ProceedingJoinPoint point) + { + MethodSignature signature = (MethodSignature) point.getSignature(); + DataSource dataSource = AnnotationUtils.findAnnotation(signature.getMethod(), DataSource.class); + if (Objects.nonNull(dataSource)) + { + return dataSource; + } + + return AnnotationUtils.findAnnotation(signature.getDeclaringType(), DataSource.class); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java new file mode 100644 index 0000000000000000000000000000000000000000..cd9fded63a654082ce25c232cbf604ae05accb62 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java @@ -0,0 +1,256 @@ +package com.ruoyi.framework.aspectj; + +import com.alibaba.fastjson2.JSON; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.enums.BusinessStatus; +import com.ruoyi.common.enums.HttpMethod; +import com.ruoyi.common.filter.PropertyPreExcludeFilter; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.ServletUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.ip.IpUtils; +import com.ruoyi.framework.manager.AsyncManager; +import com.ruoyi.framework.manager.factory.AsyncFactory; +import com.ruoyi.system.domain.SysOperLog; +import org.apache.commons.lang3.ArrayUtils; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.AfterThrowing; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.NamedThreadLocal; +import org.springframework.stereotype.Component; +import org.springframework.validation.BindingResult; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Collection; +import java.util.Map; + +/** + * 鎿嶄綔鏃ュ織璁板綍澶勭悊 + * + * @author ruoyi + */ +@Aspect +@Component +public class LogAspect +{ + private static final Logger log = LoggerFactory.getLogger(LogAspect.class); + + /** 鎺掗櫎鏁忔劅灞炴у瓧娈 */ + public static final String[] EXCLUDE_PROPERTIES = { "password", "oldPassword", "newPassword", "confirmPassword" }; + + /** 璁$畻鎿嶄綔娑堣楁椂闂 */ + private static final ThreadLocal TIME_THREADLOCAL = new NamedThreadLocal("Cost Time"); + + /** + * 澶勭悊璇锋眰鍓嶆墽琛 + */ + @Before(value = "@annotation(controllerLog)") + public void boBefore(JoinPoint joinPoint, Log controllerLog) + { + TIME_THREADLOCAL.set(System.currentTimeMillis()); + } + + /** + * 澶勭悊瀹岃姹傚悗鎵ц + * + * @param joinPoint 鍒囩偣 + */ + @AfterReturning(pointcut = "@annotation(controllerLog)", returning = "jsonResult") + public void doAfterReturning(JoinPoint joinPoint, Log controllerLog, Object jsonResult) + { + handleLog(joinPoint, controllerLog, null, jsonResult); + } + + /** + * 鎷︽埅寮傚父鎿嶄綔 + * + * @param joinPoint 鍒囩偣 + * @param e 寮傚父 + */ + @AfterThrowing(value = "@annotation(controllerLog)", throwing = "e") + public void doAfterThrowing(JoinPoint joinPoint, Log controllerLog, Exception e) + { + handleLog(joinPoint, controllerLog, e, null); + } + + protected void handleLog(final JoinPoint joinPoint, Log controllerLog, final Exception e, Object jsonResult) + { + try + { + // 鑾峰彇褰撳墠鐨勭敤鎴 + LoginUser loginUser = SecurityUtils.getLoginUser(); + + // *========鏁版嵁搴撴棩蹇=========*// + SysOperLog operLog = new SysOperLog(); + operLog.setStatus(BusinessStatus.SUCCESS.ordinal()); + // 璇锋眰鐨勫湴鍧 + String ip = IpUtils.getIpAddr(); + operLog.setOperIp(ip); + operLog.setOperUrl(StringUtils.substring(ServletUtils.getRequest().getRequestURI(), 0, 255)); + if (loginUser != null) + { + operLog.setOperName(loginUser.getUsername()); + SysUser currentUser = loginUser.getUser(); + if (StringUtils.isNotNull(currentUser) && StringUtils.isNotNull(currentUser.getDept())) + { + operLog.setDeptName(currentUser.getDept().getDeptName()); + } + } + + if (e != null) + { + operLog.setStatus(BusinessStatus.FAIL.ordinal()); + operLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000)); + } + // 璁剧疆鏂规硶鍚嶇О + String className = joinPoint.getTarget().getClass().getName(); + String methodName = joinPoint.getSignature().getName(); + operLog.setMethod(className + "." + methodName + "()"); + // 璁剧疆璇锋眰鏂瑰紡 + operLog.setRequestMethod(ServletUtils.getRequest().getMethod()); + // 澶勭悊璁剧疆娉ㄨВ涓婄殑鍙傛暟 + getControllerMethodDescription(joinPoint, controllerLog, operLog, jsonResult); + // 璁剧疆娑堣楁椂闂 + operLog.setCostTime(System.currentTimeMillis() - TIME_THREADLOCAL.get()); + // 淇濆瓨鏁版嵁搴 + AsyncManager.me().execute(AsyncFactory.recordOper(operLog)); + } + catch (Exception exp) + { + // 璁板綍鏈湴寮傚父鏃ュ織 + log.error("寮傚父淇℃伅:{}", exp.getMessage()); + exp.printStackTrace(); + } + finally + { + TIME_THREADLOCAL.remove(); + } + } + + /** + * 鑾峰彇娉ㄨВ涓鏂规硶鐨勬弿杩颁俊鎭 鐢ㄤ簬Controller灞傛敞瑙 + * + * @param log 鏃ュ織 + * @param operLog 鎿嶄綔鏃ュ織 + * @throws Exception + */ + public void getControllerMethodDescription(JoinPoint joinPoint, Log log, SysOperLog operLog, Object jsonResult) throws Exception + { + // 璁剧疆action鍔ㄤ綔 + operLog.setBusinessType(log.businessType().ordinal()); + // 璁剧疆鏍囬 + operLog.setTitle(log.title()); + // 璁剧疆鎿嶄綔浜虹被鍒 + operLog.setOperatorType(log.operatorType().ordinal()); + // 鏄惁闇瑕佷繚瀛榬equest锛屽弬鏁板拰鍊 + if (log.isSaveRequestData()) + { + // 鑾峰彇鍙傛暟鐨勪俊鎭紝浼犲叆鍒版暟鎹簱涓 + setRequestValue(joinPoint, operLog, log.excludeParamNames()); + } + // 鏄惁闇瑕佷繚瀛榬esponse锛屽弬鏁板拰鍊 + if (log.isSaveResponseData() && StringUtils.isNotNull(jsonResult)) + { + operLog.setJsonResult(StringUtils.substring(JSON.toJSONString(jsonResult), 0, 2000)); + } + } + + /** + * 鑾峰彇璇锋眰鐨勫弬鏁帮紝鏀惧埌log涓 + * + * @param operLog 鎿嶄綔鏃ュ織 + * @throws Exception 寮傚父 + */ + private void setRequestValue(JoinPoint joinPoint, SysOperLog operLog, String[] excludeParamNames) throws Exception + { + Map paramsMap = ServletUtils.getParamMap(ServletUtils.getRequest()); + String requestMethod = operLog.getRequestMethod(); + if (StringUtils.isEmpty(paramsMap) + && (HttpMethod.PUT.name().equals(requestMethod) || HttpMethod.POST.name().equals(requestMethod))) + { + String params = argsArrayToString(joinPoint.getArgs(), excludeParamNames); + operLog.setOperParam(StringUtils.substring(params, 0, 2000)); + } + else + { + operLog.setOperParam(StringUtils.substring(JSON.toJSONString(paramsMap, excludePropertyPreFilter(excludeParamNames)), 0, 2000)); + } + } + + /** + * 鍙傛暟鎷艰 + */ + private String argsArrayToString(Object[] paramsArray, String[] excludeParamNames) + { + String params = ""; + if (paramsArray != null && paramsArray.length > 0) + { + for (Object o : paramsArray) + { + if (StringUtils.isNotNull(o) && !isFilterObject(o)) + { + try + { + String jsonObj = JSON.toJSONString(o, excludePropertyPreFilter(excludeParamNames)); + params += jsonObj.toString() + " "; + } + catch (Exception e) + { + } + } + } + } + return params.trim(); + } + + /** + * 蹇界暐鏁忔劅灞炴 + */ + public PropertyPreExcludeFilter excludePropertyPreFilter(String[] excludeParamNames) + { + return new PropertyPreExcludeFilter().addExcludes(ArrayUtils.addAll(EXCLUDE_PROPERTIES, excludeParamNames)); + } + + /** + * 鍒ゆ柇鏄惁闇瑕佽繃婊ょ殑瀵硅薄銆 + * + * @param o 瀵硅薄淇℃伅銆 + * @return 濡傛灉鏄渶瑕佽繃婊ょ殑瀵硅薄锛屽垯杩斿洖true锛涘惁鍒欒繑鍥瀎alse銆 + */ + @SuppressWarnings("rawtypes") + public boolean isFilterObject(final Object o) + { + Class clazz = o.getClass(); + if (clazz.isArray()) + { + return clazz.getComponentType().isAssignableFrom(MultipartFile.class); + } + else if (Collection.class.isAssignableFrom(clazz)) + { + Collection collection = (Collection) o; + for (Object value : collection) + { + return value instanceof MultipartFile; + } + } + else if (Map.class.isAssignableFrom(clazz)) + { + Map map = (Map) o; + for (Object value : map.entrySet()) + { + Map.Entry entry = (Map.Entry) value; + return entry.getValue() instanceof MultipartFile; + } + } + return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse + || o instanceof BindingResult; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java new file mode 100644 index 0000000000000000000000000000000000000000..20cc62ccfc78d36e026730ad32706a4a3c111385 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java @@ -0,0 +1,90 @@ +package com.ruoyi.framework.aspectj; + +import com.ruoyi.common.annotation.RateLimiter; +import com.ruoyi.common.enums.LimitType; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.ip.IpUtils; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.reflect.MethodSignature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.script.RedisScript; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Method; +import java.util.Collections; +import java.util.List; + +/** + * 闄愭祦澶勭悊 + * + * @author ruoyi + */ +@Aspect +@Component +public class RateLimiterAspect +{ + private static final Logger log = LoggerFactory.getLogger(RateLimiterAspect.class); + + private RedisTemplate redisTemplate; + + private RedisScript limitScript; + + @Autowired + public void setRedisTemplate1(RedisTemplate redisTemplate) + { + this.redisTemplate = redisTemplate; + } + + @Autowired + public void setLimitScript(RedisScript limitScript) + { + this.limitScript = limitScript; + } + + @Before("@annotation(rateLimiter)") + public void doBefore(JoinPoint point, RateLimiter rateLimiter) throws Throwable + { + int time = rateLimiter.time(); + int count = rateLimiter.count(); + + String combineKey = getCombineKey(rateLimiter, point); + List keys = Collections.singletonList(combineKey); + try + { + Long number = redisTemplate.execute(limitScript, keys, count, time); + if (StringUtils.isNull(number) || number.intValue() > count) + { + throw new ServiceException("璁块棶杩囦簬棰戠箒锛岃绋嶅欏啀璇"); + } + log.info("闄愬埗璇锋眰'{}',褰撳墠璇锋眰'{}',缂撳瓨key'{}'", count, number.intValue(), combineKey); + } + catch (ServiceException e) + { + throw e; + } + catch (Exception e) + { + throw new RuntimeException("鏈嶅姟鍣ㄩ檺娴佸紓甯革紝璇风◢鍊欏啀璇"); + } + } + + public String getCombineKey(RateLimiter rateLimiter, JoinPoint point) + { + StringBuffer stringBuffer = new StringBuffer(rateLimiter.key()); + if (rateLimiter.limitType() == LimitType.IP) + { + stringBuffer.append(IpUtils.getIpAddr()).append("-"); + } + MethodSignature signature = (MethodSignature) point.getSignature(); + Method method = signature.getMethod(); + Class targetClass = method.getDeclaringClass(); + stringBuffer.append(targetClass.getName()).append("-").append(method.getName()); + return stringBuffer.toString(); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..63693fbaec9d51353259435e39ca2449825e6fd7 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java @@ -0,0 +1,31 @@ +package com.ruoyi.framework.config; + +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.EnableAspectJAutoProxy; + +import java.util.TimeZone; + +/** + * 绋嬪簭娉ㄨВ閰嶇疆 + * + * @author ruoyi + */ +@Configuration +// 琛ㄧず閫氳繃aop妗嗘灦鏆撮湶璇ヤ唬鐞嗗璞,AopContext鑳藉璁块棶 +@EnableAspectJAutoProxy(exposeProxy = true) +// 鎸囧畾瑕佹壂鎻忕殑Mapper绫荤殑鍖呯殑璺緞 +@MapperScan("com.ruoyi.**.mapper") +public class ApplicationConfig +{ + /** + * 鏃跺尯閰嶇疆 + */ + @Bean + public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() + { + return jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault()); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/CaptchaConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/CaptchaConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..24912ceb6029b8a06682ef7247ff9dc1cfc4cda1 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/CaptchaConfig.java @@ -0,0 +1,85 @@ +package com.ruoyi.framework.config; + +import com.google.code.kaptcha.impl.DefaultKaptcha; +import com.google.code.kaptcha.util.Config; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.Properties; + +import static com.google.code.kaptcha.Constants.*; + +/** + * 楠岃瘉鐮侀厤缃 + * + * @author ruoyi + */ +@Configuration +public class CaptchaConfig +{ + @Bean(name = "captchaProducer") + public DefaultKaptcha getKaptchaBean() + { + DefaultKaptcha defaultKaptcha = new DefaultKaptcha(); + Properties properties = new Properties(); + // 鏄惁鏈夎竟妗 榛樿涓簍rue 鎴戜滑鍙互鑷繁璁剧疆yes锛宯o + properties.setProperty(KAPTCHA_BORDER, "yes"); + // 楠岃瘉鐮佹枃鏈瓧绗﹂鑹 榛樿涓篊olor.BLACK + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "black"); + // 楠岃瘉鐮佸浘鐗囧搴 榛樿涓200 + properties.setProperty(KAPTCHA_IMAGE_WIDTH, "160"); + // 楠岃瘉鐮佸浘鐗囬珮搴 榛樿涓50 + properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "60"); + // 楠岃瘉鐮佹枃鏈瓧绗﹀ぇ灏 榛樿涓40 + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "38"); + // KAPTCHA_SESSION_KEY + properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCode"); + // 楠岃瘉鐮佹枃鏈瓧绗﹂暱搴 榛樿涓5 + properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4"); + // 楠岃瘉鐮佹枃鏈瓧浣撴牱寮 榛樿涓簄ew Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize) + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier"); + // 鍥剧墖鏍峰紡 姘寸汗com.google.code.kaptcha.impl.WaterRipple 楸肩溂com.google.code.kaptcha.impl.FishEyeGimpy 闃村奖com.google.code.kaptcha.impl.ShadowGimpy + properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy"); + Config config = new Config(properties); + defaultKaptcha.setConfig(config); + return defaultKaptcha; + } + + @Bean(name = "captchaProducerMath") + public DefaultKaptcha getKaptchaBeanMath() + { + DefaultKaptcha defaultKaptcha = new DefaultKaptcha(); + Properties properties = new Properties(); + // 鏄惁鏈夎竟妗 榛樿涓簍rue 鎴戜滑鍙互鑷繁璁剧疆yes锛宯o + properties.setProperty(KAPTCHA_BORDER, "yes"); + // 杈规棰滆壊 榛樿涓篊olor.BLACK + properties.setProperty(KAPTCHA_BORDER_COLOR, "105,179,90"); + // 楠岃瘉鐮佹枃鏈瓧绗﹂鑹 榛樿涓篊olor.BLACK + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "blue"); + // 楠岃瘉鐮佸浘鐗囧搴 榛樿涓200 + properties.setProperty(KAPTCHA_IMAGE_WIDTH, "160"); + // 楠岃瘉鐮佸浘鐗囬珮搴 榛樿涓50 + properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "60"); + // 楠岃瘉鐮佹枃鏈瓧绗﹀ぇ灏 榛樿涓40 + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "35"); + // KAPTCHA_SESSION_KEY + properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCodeMath"); + // 楠岃瘉鐮佹枃鏈敓鎴愬櫒 + properties.setProperty(KAPTCHA_TEXTPRODUCER_IMPL, "com.ruoyi.framework.config.KaptchaTextCreator"); + // 楠岃瘉鐮佹枃鏈瓧绗﹂棿璺 榛樿涓2 + properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_SPACE, "3"); + // 楠岃瘉鐮佹枃鏈瓧绗﹂暱搴 榛樿涓5 + properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "6"); + // 楠岃瘉鐮佹枃鏈瓧浣撴牱寮 榛樿涓簄ew Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize) + properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier"); + // 楠岃瘉鐮佸櫔鐐归鑹 榛樿涓篊olor.BLACK + properties.setProperty(KAPTCHA_NOISE_COLOR, "white"); + // 骞叉壈瀹炵幇绫 + properties.setProperty(KAPTCHA_NOISE_IMPL, "com.google.code.kaptcha.impl.NoNoise"); + // 鍥剧墖鏍峰紡 姘寸汗com.google.code.kaptcha.impl.WaterRipple 楸肩溂com.google.code.kaptcha.impl.FishEyeGimpy 闃村奖com.google.code.kaptcha.impl.ShadowGimpy + properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy"); + Config config = new Config(properties); + defaultKaptcha.setConfig(config); + return defaultKaptcha; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..1c145db68f62fa2b06c7045db4e1017bc5c18b5c --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java @@ -0,0 +1,123 @@ +package com.ruoyi.framework.config; + +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder; +import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties; +import com.alibaba.druid.util.Utils; +import com.ruoyi.common.enums.DataSourceType; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.framework.config.properties.DruidProperties; +import com.ruoyi.framework.datasource.DynamicDataSource; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; + +import javax.servlet.*; +import javax.sql.DataSource; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +/** + * druid 閰嶇疆澶氭暟鎹簮 + * + * @author ruoyi + */ +@Configuration +public class DruidConfig +{ + @Bean + @ConfigurationProperties("spring.datasource.druid.master") + public DataSource masterDataSource(DruidProperties druidProperties) + { + DruidDataSource dataSource = DruidDataSourceBuilder.create().build(); + return druidProperties.dataSource(dataSource); + } + + @Bean + @ConfigurationProperties("spring.datasource.druid.slave") + @ConditionalOnProperty(prefix = "spring.datasource.druid.slave", name = "enabled", havingValue = "true") + public DataSource slaveDataSource(DruidProperties druidProperties) + { + DruidDataSource dataSource = DruidDataSourceBuilder.create().build(); + return druidProperties.dataSource(dataSource); + } + + @Bean(name = "dynamicDataSource") + @Primary + public DynamicDataSource dataSource(DataSource masterDataSource) + { + Map targetDataSources = new HashMap<>(); + targetDataSources.put(DataSourceType.MASTER.name(), masterDataSource); + setDataSource(targetDataSources, DataSourceType.SLAVE.name(), "slaveDataSource"); + return new DynamicDataSource(masterDataSource, targetDataSources); + } + + /** + * 璁剧疆鏁版嵁婧 + * + * @param targetDataSources 澶囬夋暟鎹簮闆嗗悎 + * @param sourceName 鏁版嵁婧愬悕绉 + * @param beanName bean鍚嶇О + */ + public void setDataSource(Map targetDataSources, String sourceName, String beanName) + { + try + { + DataSource dataSource = SpringUtils.getBean(beanName); + targetDataSources.put(sourceName, dataSource); + } + catch (Exception e) + { + } + } + + /** + * 鍘婚櫎鐩戞帶椤甸潰搴曢儴鐨勫箍鍛 + */ + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Bean + @ConditionalOnProperty(name = "spring.datasource.druid.statViewServlet.enabled", havingValue = "true") + public FilterRegistrationBean removeDruidFilterRegistrationBean(DruidStatProperties properties) + { + // 鑾峰彇web鐩戞帶椤甸潰鐨勫弬鏁 + DruidStatProperties.StatViewServlet config = properties.getStatViewServlet(); + // 鎻愬彇common.js鐨勯厤缃矾寰 + String pattern = config.getUrlPattern() != null ? config.getUrlPattern() : "/druid/*"; + String commonJsPattern = pattern.replaceAll("\\*", "js/common.js"); + final String filePath = "support/http/resources/js/common.js"; + // 鍒涘缓filter杩涜杩囨护 + Filter filter = new Filter() + { + @Override + public void init(javax.servlet.FilterConfig filterConfig) throws ServletException + { + } + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException + { + chain.doFilter(request, response); + // 閲嶇疆缂撳啿鍖猴紝鍝嶅簲澶翠笉浼氳閲嶇疆 + response.resetBuffer(); + // 鑾峰彇common.js + String text = Utils.readFromResource(filePath); + // 姝e垯鏇挎崲banner, 闄ゅ幓搴曢儴鐨勫箍鍛婁俊鎭 + text = text.replaceAll("
", ""); + text = text.replaceAll("powered.*?shrek.wang", ""); + response.getWriter().write(text); + } + @Override + public void destroy() + { + } + }; + FilterRegistrationBean registrationBean = new FilterRegistrationBean(); + registrationBean.setFilter(filter); + registrationBean.addUrlPatterns(commonJsPattern); + return registrationBean; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FastJson2JsonRedisSerializer.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FastJson2JsonRedisSerializer.java new file mode 100644 index 0000000000000000000000000000000000000000..b87e45203e8b06f0da80788abea537a4c883bc38 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FastJson2JsonRedisSerializer.java @@ -0,0 +1,53 @@ +package com.ruoyi.framework.config; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONReader; +import com.alibaba.fastjson2.JSONWriter; +import com.alibaba.fastjson2.filter.Filter; +import com.ruoyi.common.constant.Constants; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.SerializationException; + +import java.nio.charset.Charset; + +/** + * Redis浣跨敤FastJson搴忓垪鍖 + * + * @author ruoyi + */ +public class FastJson2JsonRedisSerializer implements RedisSerializer +{ + public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8"); + + static final Filter AUTO_TYPE_FILTER = JSONReader.autoTypeFilter(Constants.JSON_WHITELIST_STR); + + private Class clazz; + + public FastJson2JsonRedisSerializer(Class clazz) + { + super(); + this.clazz = clazz; + } + + @Override + public byte[] serialize(T t) throws SerializationException + { + if (t == null) + { + return new byte[0]; + } + return JSON.toJSONString(t, JSONWriter.Feature.WriteClassName).getBytes(DEFAULT_CHARSET); + } + + @Override + public T deserialize(byte[] bytes) throws SerializationException + { + if (bytes == null || bytes.length <= 0) + { + return null; + } + String str = new String(bytes, DEFAULT_CHARSET); + + return JSON.parseObject(str, clazz, AUTO_TYPE_FILTER); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..8b668d6081f0f8bea8c2dfc319bff53f866df0fb --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FilterConfig.java @@ -0,0 +1,59 @@ +package com.ruoyi.framework.config; + +import com.ruoyi.common.filter.RepeatableFilter; +import com.ruoyi.common.filter.XssFilter; +import com.ruoyi.common.utils.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.servlet.DispatcherType; +import java.util.HashMap; +import java.util.Map; + +/** + * Filter閰嶇疆 + * + * @author ruoyi + */ +@Configuration +public class FilterConfig +{ + @Value("${xss.excludes}") + private String excludes; + + @Value("${xss.urlPatterns}") + private String urlPatterns; + + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Bean + @ConditionalOnProperty(value = "xss.enabled", havingValue = "true") + public FilterRegistrationBean xssFilterRegistration() + { + FilterRegistrationBean registration = new FilterRegistrationBean(); + registration.setDispatcherTypes(DispatcherType.REQUEST); + registration.setFilter(new XssFilter()); + registration.addUrlPatterns(StringUtils.split(urlPatterns, ",")); + registration.setName("xssFilter"); + registration.setOrder(FilterRegistrationBean.HIGHEST_PRECEDENCE); + Map initParameters = new HashMap(); + initParameters.put("excludes", excludes); + registration.setInitParameters(initParameters); + return registration; + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Bean + public FilterRegistrationBean someFilterRegistration() + { + FilterRegistrationBean registration = new FilterRegistrationBean(); + registration.setFilter(new RepeatableFilter()); + registration.addUrlPatterns("/*"); + registration.setName("repeatableFilter"); + registration.setOrder(FilterRegistrationBean.LOWEST_PRECEDENCE); + return registration; + } + +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/I18nConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/I18nConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..7a483542a84feca16868406e7819145154770b5d --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/I18nConfig.java @@ -0,0 +1,43 @@ +package com.ruoyi.framework.config; + +import com.ruoyi.common.constant.Constants; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.LocaleResolver; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.web.servlet.i18n.LocaleChangeInterceptor; +import org.springframework.web.servlet.i18n.SessionLocaleResolver; + +/** + * 璧勬簮鏂囦欢閰嶇疆鍔犺浇 + * + * @author ruoyi + */ +@Configuration +public class I18nConfig implements WebMvcConfigurer +{ + @Bean + public LocaleResolver localeResolver() + { + SessionLocaleResolver slr = new SessionLocaleResolver(); + // 榛樿璇█ + slr.setDefaultLocale(Constants.DEFAULT_LOCALE); + return slr; + } + + @Bean + public LocaleChangeInterceptor localeChangeInterceptor() + { + LocaleChangeInterceptor lci = new LocaleChangeInterceptor(); + // 鍙傛暟鍚 + lci.setParamName("lang"); + return lci; + } + + @Override + public void addInterceptors(InterceptorRegistry registry) + { + registry.addInterceptor(localeChangeInterceptor()); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/KaptchaTextCreator.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/KaptchaTextCreator.java new file mode 100644 index 0000000000000000000000000000000000000000..98e24efdbd600f261ae8d2ec29b7bd1c0fc37525 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/KaptchaTextCreator.java @@ -0,0 +1,69 @@ +package com.ruoyi.framework.config; + +import com.google.code.kaptcha.text.impl.DefaultTextCreator; + +import java.util.Random; + +/** + * 楠岃瘉鐮佹枃鏈敓鎴愬櫒 + * + * @author ruoyi + */ +public class KaptchaTextCreator extends DefaultTextCreator +{ + private static final String[] CNUMBERS = "0,1,2,3,4,5,6,7,8,9,10".split(","); + + @Override + public String getText() + { + Integer result = 0; + Random random = new Random(); + int x = random.nextInt(10); + int y = random.nextInt(10); + StringBuilder suChinese = new StringBuilder(); + int randomoperands = random.nextInt(3); + if (randomoperands == 0) + { + result = x * y; + suChinese.append(CNUMBERS[x]); + suChinese.append("*"); + suChinese.append(CNUMBERS[y]); + } + else if (randomoperands == 1) + { + if ((x != 0) && y % x == 0) + { + result = y / x; + suChinese.append(CNUMBERS[y]); + suChinese.append("/"); + suChinese.append(CNUMBERS[x]); + } + else + { + result = x + y; + suChinese.append(CNUMBERS[x]); + suChinese.append("+"); + suChinese.append(CNUMBERS[y]); + } + } + else + { + if (x >= y) + { + result = x - y; + suChinese.append(CNUMBERS[x]); + suChinese.append("-"); + suChinese.append(CNUMBERS[y]); + } + else + { + result = y - x; + suChinese.append(CNUMBERS[y]); + suChinese.append("-"); + suChinese.append(CNUMBERS[x]); + } + } + suChinese.append("=?@" + result); + return suChinese.toString(); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MyBatisConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MyBatisConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..73a5b4e7e28febb703a220ba1b0b741c46bfcbcf --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/MyBatisConfig.java @@ -0,0 +1,133 @@ +package com.ruoyi.framework.config; + +import com.ruoyi.common.utils.StringUtils; +import org.apache.ibatis.io.VFS; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionFactoryBean; +import org.mybatis.spring.boot.autoconfigure.SpringBootVFS; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.env.Environment; +import org.springframework.core.io.DefaultResourceLoader; +import org.springframework.core.io.Resource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.core.io.support.ResourcePatternResolver; +import org.springframework.core.type.classreading.CachingMetadataReaderFactory; +import org.springframework.core.type.classreading.MetadataReader; +import org.springframework.core.type.classreading.MetadataReaderFactory; +import org.springframework.util.ClassUtils; + +import javax.sql.DataSource; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; + +/** + * Mybatis鏀寔*鍖归厤鎵弿鍖 + * + * @author ruoyi + */ +@Configuration +public class MyBatisConfig +{ + @Autowired + private Environment env; + + static final String DEFAULT_RESOURCE_PATTERN = "**/*.class"; + + public static String setTypeAliasesPackage(String typeAliasesPackage) + { + ResourcePatternResolver resolver = (ResourcePatternResolver) new PathMatchingResourcePatternResolver(); + MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resolver); + List allResult = new ArrayList(); + try + { + for (String aliasesPackage : typeAliasesPackage.split(",")) + { + List result = new ArrayList(); + aliasesPackage = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + + ClassUtils.convertClassNameToResourcePath(aliasesPackage.trim()) + "/" + DEFAULT_RESOURCE_PATTERN; + Resource[] resources = resolver.getResources(aliasesPackage); + if (resources != null && resources.length > 0) + { + MetadataReader metadataReader = null; + for (Resource resource : resources) + { + if (resource.isReadable()) + { + metadataReader = metadataReaderFactory.getMetadataReader(resource); + try + { + result.add(Class.forName(metadataReader.getClassMetadata().getClassName()).getPackage().getName()); + } + catch (ClassNotFoundException e) + { + e.printStackTrace(); + } + } + } + } + if (result.size() > 0) + { + HashSet hashResult = new HashSet(result); + allResult.addAll(hashResult); + } + } + if (allResult.size() > 0) + { + typeAliasesPackage = String.join(",", (String[]) allResult.toArray(new String[0])); + } + else + { + throw new RuntimeException("mybatis typeAliasesPackage 璺緞鎵弿閿欒,鍙傛暟typeAliasesPackage:" + typeAliasesPackage + "鏈壘鍒颁换浣曞寘"); + } + } + catch (IOException e) + { + e.printStackTrace(); + } + return typeAliasesPackage; + } + + public Resource[] resolveMapperLocations(String[] mapperLocations) + { + ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver(); + List resources = new ArrayList(); + if (mapperLocations != null) + { + for (String mapperLocation : mapperLocations) + { + try + { + Resource[] mappers = resourceResolver.getResources(mapperLocation); + resources.addAll(Arrays.asList(mappers)); + } + catch (IOException e) + { + // ignore + } + } + } + return resources.toArray(new Resource[resources.size()]); + } + + @Bean + public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception + { + String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage"); + String mapperLocations = env.getProperty("mybatis.mapperLocations"); + String configLocation = env.getProperty("mybatis.configLocation"); + typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage); + VFS.addImplClass(SpringBootVFS.class); + + final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); + sessionFactory.setDataSource(dataSource); + sessionFactory.setTypeAliasesPackage(typeAliasesPackage); + sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ","))); + sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation)); + return sessionFactory.getObject(); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..3f4f485f041c7903aeb46b442e9eb59b7341b84c --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/RedisConfig.java @@ -0,0 +1,69 @@ +package com.ruoyi.framework.config; + +import org.springframework.cache.annotation.CachingConfigurerSupport; +import org.springframework.cache.annotation.EnableCaching; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.script.DefaultRedisScript; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +/** + * redis閰嶇疆 + * + * @author ruoyi + */ +@Configuration +@EnableCaching +public class RedisConfig extends CachingConfigurerSupport +{ + @Bean + @SuppressWarnings(value = { "unchecked", "rawtypes" }) + public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) + { + RedisTemplate template = new RedisTemplate<>(); + template.setConnectionFactory(connectionFactory); + + FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class); + + // 浣跨敤StringRedisSerializer鏉ュ簭鍒楀寲鍜屽弽搴忓垪鍖杛edis鐨刱ey鍊 + template.setKeySerializer(new StringRedisSerializer()); + template.setValueSerializer(serializer); + + // Hash鐨刱ey涔熼噰鐢⊿tringRedisSerializer鐨勫簭鍒楀寲鏂瑰紡 + template.setHashKeySerializer(new StringRedisSerializer()); + template.setHashValueSerializer(serializer); + + template.afterPropertiesSet(); + return template; + } + + @Bean + public DefaultRedisScript limitScript() + { + DefaultRedisScript redisScript = new DefaultRedisScript<>(); + redisScript.setScriptText(limitScriptText()); + redisScript.setResultType(Long.class); + return redisScript; + } + + /** + * 闄愭祦鑴氭湰 + */ + private String limitScriptText() + { + return "local key = KEYS[1]\n" + + "local count = tonumber(ARGV[1])\n" + + "local time = tonumber(ARGV[2])\n" + + "local current = redis.call('get', key);\n" + + "if current and tonumber(current) > count then\n" + + " return tonumber(current);\n" + + "end\n" + + "current = redis.call('incr', key)\n" + + "if tonumber(current) == 1 then\n" + + " redis.call('expire', key, time)\n" + + "end\n" + + "return tonumber(current);"; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..ad468bc6390670f3b06fb29a0ed9593d5b1e2e1a --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java @@ -0,0 +1,74 @@ +package com.ruoyi.framework.config; + +import com.ruoyi.common.config.RuoYiConfig; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.framework.interceptor.RepeatSubmitInterceptor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.CacheControl; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.util.concurrent.TimeUnit; + +/** + * 閫氱敤閰嶇疆 + * + * @author ruoyi + */ +@Configuration +public class ResourcesConfig implements WebMvcConfigurer +{ + @Autowired + private RepeatSubmitInterceptor repeatSubmitInterceptor; + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) + { + /** 鏈湴鏂囦欢涓婁紶璺緞 */ + registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**") + .addResourceLocations("file:" + RuoYiConfig.getProfile() + "/"); + + /** swagger閰嶇疆 */ + registry.addResourceHandler("/swagger-ui/**") + .addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/") + .setCacheControl(CacheControl.maxAge(5, TimeUnit.HOURS).cachePublic());; + } + + /** + * 鑷畾涔夋嫤鎴鍒 + */ + @Override + public void addInterceptors(InterceptorRegistry registry) + { + registry.addInterceptor(repeatSubmitInterceptor).addPathPatterns("/**"); + } + + /** + * 璺ㄥ煙閰嶇疆 + */ + @Bean + public CorsFilter corsFilter() + { + CorsConfiguration config = new CorsConfiguration(); + config.setAllowCredentials(true); + // 璁剧疆璁块棶婧愬湴鍧 + config.addAllowedOriginPattern("*"); + // 璁剧疆璁块棶婧愯姹傚ご + config.addAllowedHeader("*"); + // 璁剧疆璁块棶婧愯姹傛柟娉 + config.addAllowedMethod("*"); + // 鏈夋晥鏈 1800绉 + config.setMaxAge(1800L); + // 娣诲姞鏄犲皠璺緞锛屾嫤鎴竴鍒囪姹 + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", config); + // 杩斿洖鏂扮殑CorsFilter + return new CorsFilter(source); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..9c417381ac7ec5ccc79d10579ff29f6b906407d2 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java @@ -0,0 +1,140 @@ +package com.ruoyi.framework.config; + +import com.ruoyi.framework.config.properties.PermitAllUrlProperties; +import com.ruoyi.framework.security.filter.JwtAuthenticationTokenFilter; +import com.ruoyi.framework.security.handle.AuthenticationEntryPointImpl; +import com.ruoyi.framework.security.handle.LogoutSuccessHandlerImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpMethod; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.ProviderManager; +import org.springframework.security.authentication.dao.DaoAuthenticationProvider; +import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; +import org.springframework.security.web.authentication.logout.LogoutFilter; +import org.springframework.web.filter.CorsFilter; + +/** + * spring security閰嶇疆 + * + * @author ruoyi + */ +@EnableMethodSecurity(prePostEnabled = true, securedEnabled = true) +@Configuration +public class SecurityConfig +{ + /** + * 鑷畾涔夌敤鎴疯璇侀昏緫 + */ + @Autowired + private UserDetailsService userDetailsService; + + /** + * 璁よ瘉澶辫触澶勭悊绫 + */ + @Autowired + private AuthenticationEntryPointImpl unauthorizedHandler; + + /** + * 閫鍑哄鐞嗙被 + */ + @Autowired + private LogoutSuccessHandlerImpl logoutSuccessHandler; + + /** + * token璁よ瘉杩囨护鍣 + */ + @Autowired + private JwtAuthenticationTokenFilter authenticationTokenFilter; + + /** + * 璺ㄥ煙杩囨护鍣 + */ + @Autowired + private CorsFilter corsFilter; + + /** + * 鍏佽鍖垮悕璁块棶鐨勫湴鍧 + */ + @Autowired + private PermitAllUrlProperties permitAllUrl; + + /** + * 韬唤楠岃瘉瀹炵幇 + */ + @Bean + public AuthenticationManager authenticationManager() + { + DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider(); + daoAuthenticationProvider.setUserDetailsService(userDetailsService); + daoAuthenticationProvider.setPasswordEncoder(bCryptPasswordEncoder()); + return new ProviderManager(daoAuthenticationProvider); + } + + /** + * anyRequest | 鍖归厤鎵鏈夎姹傝矾寰 + * access | SpringEl琛ㄨ揪寮忕粨鏋滀负true鏃跺彲浠ヨ闂 + * anonymous | 鍖垮悕鍙互璁块棶 + * denyAll | 鐢ㄦ埛涓嶈兘璁块棶 + * fullyAuthenticated | 鐢ㄦ埛瀹屽叏璁よ瘉鍙互璁块棶锛堥潪remember-me涓嬭嚜鍔ㄧ櫥褰曪級 + * hasAnyAuthority | 濡傛灉鏈夊弬鏁帮紝鍙傛暟琛ㄧず鏉冮檺锛屽垯鍏朵腑浠讳綍涓涓潈闄愬彲浠ヨ闂 + * hasAnyRole | 濡傛灉鏈夊弬鏁帮紝鍙傛暟琛ㄧず瑙掕壊锛屽垯鍏朵腑浠讳綍涓涓鑹插彲浠ヨ闂 + * hasAuthority | 濡傛灉鏈夊弬鏁帮紝鍙傛暟琛ㄧず鏉冮檺锛屽垯鍏舵潈闄愬彲浠ヨ闂 + * hasIpAddress | 濡傛灉鏈夊弬鏁帮紝鍙傛暟琛ㄧずIP鍦板潃锛屽鏋滅敤鎴稩P鍜屽弬鏁板尮閰嶏紝鍒欏彲浠ヨ闂 + * hasRole | 濡傛灉鏈夊弬鏁帮紝鍙傛暟琛ㄧず瑙掕壊锛屽垯鍏惰鑹插彲浠ヨ闂 + * permitAll | 鐢ㄦ埛鍙互浠绘剰璁块棶 + * rememberMe | 鍏佽閫氳繃remember-me鐧诲綍鐨勭敤鎴疯闂 + * authenticated | 鐢ㄦ埛鐧诲綍鍚庡彲璁块棶 + */ + @Bean + protected SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception + { + return httpSecurity + // CSRF绂佺敤锛屽洜涓轰笉浣跨敤session + .csrf(csrf -> csrf.disable()) + // 绂佺敤HTTP鍝嶅簲鏍囧ご + .headers((headersCustomizer) -> { + headersCustomizer.cacheControl(cache -> cache.disable()).frameOptions(options -> options.sameOrigin()); + }) + // 璁よ瘉澶辫触澶勭悊绫 + .exceptionHandling(exception -> exception.authenticationEntryPoint(unauthorizedHandler)) + // 鍩轰簬token锛屾墍浠ヤ笉闇瑕乻ession + .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) + // 娉ㄨВ鏍囪鍏佽鍖垮悕璁块棶鐨剈rl + .authorizeHttpRequests((requests) -> { + permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll()); + // 瀵逛簬鐧诲綍login 娉ㄥ唽register 楠岃瘉鐮乧aptchaImage 鍏佽鍖垮悕璁块棶 + requests.antMatchers("/login", "/register", "/captchaImage").permitAll() + // 闈欐佽祫婧愶紝鍙尶鍚嶈闂 + .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll() + .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll() + .antMatchers("/api/**").permitAll() + // 闄や笂闈㈠鐨勬墍鏈夎姹傚叏閮ㄩ渶瑕侀壌鏉冭璇 + .anyRequest().authenticated(); + }) + // 娣诲姞Logout filter + .logout(logout -> logout.logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler)) + // 娣诲姞JWT filter + .addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class) + // 娣诲姞CORS filter + .addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class) + .addFilterBefore(corsFilter, LogoutFilter.class) + .build(); + } + + /** + * 寮烘暎鍒楀搱甯屽姞瀵嗗疄鐜 + */ + @Bean + public BCryptPasswordEncoder bCryptPasswordEncoder() + { + return new BCryptPasswordEncoder(); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ServerConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ServerConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..348325a965137dc62e0527a49f75407c019d8593 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ServerConfig.java @@ -0,0 +1,33 @@ +package com.ruoyi.framework.config; + +import com.ruoyi.common.utils.ServletUtils; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; + +/** + * 鏈嶅姟鐩稿叧閰嶇疆 + * + * @author ruoyi + */ +@Component +public class ServerConfig +{ + /** + * 鑾峰彇瀹屾暣鐨勮姹傝矾寰勶紝鍖呮嫭锛氬煙鍚嶏紝绔彛锛屼笂涓嬫枃璁块棶璺緞 + * + * @return 鏈嶅姟鍦板潃 + */ + public static String getUrl() + { + HttpServletRequest request = ServletUtils.getRequest(); + return getDomain(request); + } + + public static String getDomain(HttpServletRequest request) + { + StringBuffer url = request.getRequestURL(); + String contextPath = request.getServletContext().getContextPath(); + return url.delete(url.length() - request.getRequestURI().length(), url.length()).append(contextPath).toString(); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..36695a2be3ddb253d425f1161a5b3d7fbb099b1f --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java @@ -0,0 +1,64 @@ +package com.ruoyi.framework.config; + +import com.ruoyi.common.utils.Threads; +import org.apache.commons.lang3.concurrent.BasicThreadFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledThreadPoolExecutor; +import java.util.concurrent.ThreadPoolExecutor; + +/** + * 绾跨▼姹犻厤缃 + * + * @author ruoyi + **/ +@Configuration +public class ThreadPoolConfig +{ + // 鏍稿績绾跨▼姹犲ぇ灏 + private int corePoolSize = 50; + + // 鏈澶у彲鍒涘缓鐨勭嚎绋嬫暟 + private int maxPoolSize = 200; + + // 闃熷垪鏈澶ч暱搴 + private int queueCapacity = 1000; + + // 绾跨▼姹犵淮鎶ょ嚎绋嬫墍鍏佽鐨勭┖闂叉椂闂 + private int keepAliveSeconds = 300; + + @Bean(name = "threadPoolTaskExecutor") + public ThreadPoolTaskExecutor threadPoolTaskExecutor() + { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setMaxPoolSize(maxPoolSize); + executor.setCorePoolSize(corePoolSize); + executor.setQueueCapacity(queueCapacity); + executor.setKeepAliveSeconds(keepAliveSeconds); + // 绾跨▼姹犲鎷掔粷浠诲姟(鏃犵嚎绋嬪彲鐢)鐨勫鐞嗙瓥鐣 + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + return executor; + } + + /** + * 鎵ц鍛ㄦ湡鎬ф垨瀹氭椂浠诲姟 + */ + @Bean(name = "scheduledExecutorService") + protected ScheduledExecutorService scheduledExecutorService() + { + return new ScheduledThreadPoolExecutor(corePoolSize, + new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build(), + new ThreadPoolExecutor.CallerRunsPolicy()) + { + @Override + protected void afterExecute(Runnable r, Throwable t) + { + super.afterExecute(r, t); + Threads.printException(r, t); + } + }; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/DruidProperties.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/DruidProperties.java new file mode 100644 index 0000000000000000000000000000000000000000..ca1f9a35115125a8152db2332e4a491c2ff136f4 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/DruidProperties.java @@ -0,0 +1,89 @@ +package com.ruoyi.framework.config.properties; + +import com.alibaba.druid.pool.DruidDataSource; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; + +/** + * druid 閰嶇疆灞炴 + * + * @author ruoyi + */ +@Configuration +public class DruidProperties +{ + @Value("${spring.datasource.druid.initialSize}") + private int initialSize; + + @Value("${spring.datasource.druid.minIdle}") + private int minIdle; + + @Value("${spring.datasource.druid.maxActive}") + private int maxActive; + + @Value("${spring.datasource.druid.maxWait}") + private int maxWait; + + @Value("${spring.datasource.druid.connectTimeout}") + private int connectTimeout; + + @Value("${spring.datasource.druid.socketTimeout}") + private int socketTimeout; + + @Value("${spring.datasource.druid.timeBetweenEvictionRunsMillis}") + private int timeBetweenEvictionRunsMillis; + + @Value("${spring.datasource.druid.minEvictableIdleTimeMillis}") + private int minEvictableIdleTimeMillis; + + @Value("${spring.datasource.druid.maxEvictableIdleTimeMillis}") + private int maxEvictableIdleTimeMillis; + + @Value("${spring.datasource.druid.validationQuery}") + private String validationQuery; + + @Value("${spring.datasource.druid.testWhileIdle}") + private boolean testWhileIdle; + + @Value("${spring.datasource.druid.testOnBorrow}") + private boolean testOnBorrow; + + @Value("${spring.datasource.druid.testOnReturn}") + private boolean testOnReturn; + + public DruidDataSource dataSource(DruidDataSource datasource) + { + /** 閰嶇疆鍒濆鍖栧ぇ灏忋佹渶灏忋佹渶澶 */ + datasource.setInitialSize(initialSize); + datasource.setMaxActive(maxActive); + datasource.setMinIdle(minIdle); + + /** 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂 */ + datasource.setMaxWait(maxWait); + + /** 閰嶇疆椹卞姩杩炴帴瓒呮椂鏃堕棿锛屾娴嬫暟鎹簱寤虹珛杩炴帴鐨勮秴鏃舵椂闂达紝鍗曚綅鏄绉 */ + datasource.setConnectTimeout(connectTimeout); + + /** 閰嶇疆缃戠粶瓒呮椂鏃堕棿锛岀瓑寰呮暟鎹簱鎿嶄綔瀹屾垚鐨勭綉缁滆秴鏃舵椂闂达紝鍗曚綅鏄绉 */ + datasource.setSocketTimeout(socketTimeout); + + /** 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣 */ + datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); + + /** 閰嶇疆涓涓繛鎺ュ湪姹犱腑鏈灏忋佹渶澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 */ + datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); + datasource.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis); + + /** + * 鐢ㄦ潵妫娴嬭繛鎺ユ槸鍚︽湁鏁堢殑sql锛岃姹傛槸涓涓煡璇㈣鍙ワ紝甯哥敤select 'x'銆傚鏋渧alidationQuery涓簄ull锛宼estOnBorrow銆乼estOnReturn銆乼estWhileIdle閮戒笉浼氳捣浣滅敤銆 + */ + datasource.setValidationQuery(validationQuery); + /** 寤鸿閰嶇疆涓簍rue锛屼笉褰卞搷鎬ц兘锛屽苟涓斾繚璇佸畨鍏ㄦс傜敵璇疯繛鎺ョ殑鏃跺欐娴嬶紝濡傛灉绌洪棽鏃堕棿澶т簬timeBetweenEvictionRunsMillis锛屾墽琛寁alidationQuery妫娴嬭繛鎺ユ槸鍚︽湁鏁堛 */ + datasource.setTestWhileIdle(testWhileIdle); + /** 鐢宠杩炴帴鏃舵墽琛寁alidationQuery妫娴嬭繛鎺ユ槸鍚︽湁鏁堬紝鍋氫簡杩欎釜閰嶇疆浼氶檷浣庢ц兘銆 */ + datasource.setTestOnBorrow(testOnBorrow); + /** 褰掕繕杩炴帴鏃舵墽琛寁alidationQuery妫娴嬭繛鎺ユ槸鍚︽湁鏁堬紝鍋氫簡杩欎釜閰嶇疆浼氶檷浣庢ц兘銆 */ + datasource.setTestOnReturn(testOnReturn); + return datasource; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/PermitAllUrlProperties.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/PermitAllUrlProperties.java new file mode 100644 index 0000000000000000000000000000000000000000..dbceff2aa3aee066dc17c55a3de9a291d77670ad --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/PermitAllUrlProperties.java @@ -0,0 +1,70 @@ +package com.ruoyi.framework.config.properties; + +import com.ruoyi.common.annotation.Anonymous; +import org.apache.commons.lang3.RegExUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.mvc.method.RequestMappingInfo; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; + +import java.util.*; +import java.util.regex.Pattern; + +/** + * 璁剧疆Anonymous娉ㄨВ鍏佽鍖垮悕璁块棶鐨剈rl + * + * @author ruoyi + */ +@Configuration +public class PermitAllUrlProperties implements InitializingBean, ApplicationContextAware +{ + private static final Pattern PATTERN = Pattern.compile("\\{(.*?)\\}"); + + private ApplicationContext applicationContext; + + private List urls = new ArrayList<>(); + + public String ASTERISK = "*"; + + @Override + public void afterPropertiesSet() + { + RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class); + Map map = mapping.getHandlerMethods(); + + map.keySet().forEach(info -> { + HandlerMethod handlerMethod = map.get(info); + + // 鑾峰彇鏂规硶涓婅竟鐨勬敞瑙 鏇夸唬path variable 涓 * + Anonymous method = AnnotationUtils.findAnnotation(handlerMethod.getMethod(), Anonymous.class); + Optional.ofNullable(method).ifPresent(anonymous -> Objects.requireNonNull(info.getPatternsCondition().getPatterns()) + .forEach(url -> urls.add(RegExUtils.replaceAll(url, PATTERN, ASTERISK)))); + + // 鑾峰彇绫讳笂杈圭殑娉ㄨВ, 鏇夸唬path variable 涓 * + Anonymous controller = AnnotationUtils.findAnnotation(handlerMethod.getBeanType(), Anonymous.class); + Optional.ofNullable(controller).ifPresent(anonymous -> Objects.requireNonNull(info.getPatternsCondition().getPatterns()) + .forEach(url -> urls.add(RegExUtils.replaceAll(url, PATTERN, ASTERISK)))); + }); + } + + @Override + public void setApplicationContext(ApplicationContext context) throws BeansException + { + this.applicationContext = context; + } + + public List getUrls() + { + return urls; + } + + public void setUrls(List urls) + { + this.urls = urls; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSource.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSource.java new file mode 100644 index 0000000000000000000000000000000000000000..4bcb2192170f395282f63b7a182dc94e5b9211be --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSource.java @@ -0,0 +1,27 @@ +package com.ruoyi.framework.datasource; + +import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; + +import javax.sql.DataSource; +import java.util.Map; + +/** + * 鍔ㄦ佹暟鎹簮 + * + * @author ruoyi + */ +public class DynamicDataSource extends AbstractRoutingDataSource +{ + public DynamicDataSource(DataSource defaultTargetDataSource, Map targetDataSources) + { + super.setDefaultTargetDataSource(defaultTargetDataSource); + super.setTargetDataSources(targetDataSources); + super.afterPropertiesSet(); + } + + @Override + protected Object determineCurrentLookupKey() + { + return DynamicDataSourceContextHolder.getDataSourceType(); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSourceContextHolder.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSourceContextHolder.java new file mode 100644 index 0000000000000000000000000000000000000000..9770af6dd514b437367f1870a58599fea7528d7b --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSourceContextHolder.java @@ -0,0 +1,45 @@ +package com.ruoyi.framework.datasource; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * 鏁版嵁婧愬垏鎹㈠鐞 + * + * @author ruoyi + */ +public class DynamicDataSourceContextHolder +{ + public static final Logger log = LoggerFactory.getLogger(DynamicDataSourceContextHolder.class); + + /** + * 浣跨敤ThreadLocal缁存姢鍙橀噺锛孴hreadLocal涓烘瘡涓娇鐢ㄨ鍙橀噺鐨勭嚎绋嬫彁渚涚嫭绔嬬殑鍙橀噺鍓湰锛 + * 鎵浠ユ瘡涓涓嚎绋嬮兘鍙互鐙珛鍦版敼鍙樿嚜宸辩殑鍓湰锛岃屼笉浼氬奖鍝嶅叾瀹冪嚎绋嬫墍瀵瑰簲鐨勫壇鏈 + */ + private static final ThreadLocal CONTEXT_HOLDER = new ThreadLocal<>(); + + /** + * 璁剧疆鏁版嵁婧愮殑鍙橀噺 + */ + public static void setDataSourceType(String dsType) + { + log.info("鍒囨崲鍒皗}鏁版嵁婧", dsType); + CONTEXT_HOLDER.set(dsType); + } + + /** + * 鑾峰緱鏁版嵁婧愮殑鍙橀噺 + */ + public static String getDataSourceType() + { + return CONTEXT_HOLDER.get(); + } + + /** + * 娓呯┖鏁版嵁婧愬彉閲 + */ + public static void clearDataSourceType() + { + CONTEXT_HOLDER.remove(); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/RepeatSubmitInterceptor.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/RepeatSubmitInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..5b48ca1f8a41d2c19af0bdaf8eed20976555e15c --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/RepeatSubmitInterceptor.java @@ -0,0 +1,57 @@ +package com.ruoyi.framework.interceptor; + +import com.alibaba.fastjson2.JSON; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.ServletUtils; +import org.springframework.stereotype.Component; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.HandlerInterceptor; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.lang.reflect.Method; + +/** + * 闃叉閲嶅鎻愪氦鎷︽埅鍣 + * + * @author ruoyi + */ +@Component +public abstract class RepeatSubmitInterceptor implements HandlerInterceptor +{ + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception + { + if (handler instanceof HandlerMethod) + { + HandlerMethod handlerMethod = (HandlerMethod) handler; + Method method = handlerMethod.getMethod(); + RepeatSubmit annotation = method.getAnnotation(RepeatSubmit.class); + if (annotation != null) + { + if (this.isRepeatSubmit(request, annotation)) + { + AjaxResult ajaxResult = AjaxResult.error(annotation.message()); + ServletUtils.renderString(response, JSON.toJSONString(ajaxResult)); + return false; + } + } + return true; + } + else + { + return true; + } + } + + /** + * 楠岃瘉鏄惁閲嶅鎻愪氦鐢卞瓙绫诲疄鐜板叿浣撶殑闃查噸澶嶆彁浜ょ殑瑙勫垯 + * + * @param request 璇锋眰淇℃伅 + * @param annotation 闃查噸澶嶆敞瑙e弬鏁 + * @return 缁撴灉 + * @throws Exception + */ + public abstract boolean isRepeatSubmit(HttpServletRequest request, RepeatSubmit annotation); +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java new file mode 100644 index 0000000000000000000000000000000000000000..1289bf4d620de94110d31b969daa8228376acca9 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java @@ -0,0 +1,111 @@ +package com.ruoyi.framework.interceptor.impl; + +import com.alibaba.fastjson2.JSON; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.filter.RepeatedlyRequestWrapper; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.http.HttpHelper; +import com.ruoyi.framework.interceptor.RepeatSubmitInterceptor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +/** + * 鍒ゆ柇璇锋眰url鍜屾暟鎹槸鍚﹀拰涓婁竴娆$浉鍚岋紝 + * 濡傛灉鍜屼笂娆$浉鍚岋紝鍒欐槸閲嶅鎻愪氦琛ㄥ崟銆 鏈夋晥鏃堕棿涓10绉掑唴銆 + * + * @author ruoyi + */ +@Component +public class SameUrlDataInterceptor extends RepeatSubmitInterceptor +{ + public final String REPEAT_PARAMS = "repeatParams"; + + public final String REPEAT_TIME = "repeatTime"; + + // 浠ょ墝鑷畾涔夋爣璇 + @Value("${token.header}") + private String header; + + @Autowired + private RedisCache redisCache; + + @SuppressWarnings("unchecked") + @Override + public boolean isRepeatSubmit(HttpServletRequest request, RepeatSubmit annotation) + { + String nowParams = ""; + if (request instanceof RepeatedlyRequestWrapper) + { + RepeatedlyRequestWrapper repeatedlyRequest = (RepeatedlyRequestWrapper) request; + nowParams = HttpHelper.getBodyString(repeatedlyRequest); + } + + // body鍙傛暟涓虹┖锛岃幏鍙朠arameter鐨勬暟鎹 + if (StringUtils.isEmpty(nowParams)) + { + nowParams = JSON.toJSONString(request.getParameterMap()); + } + Map nowDataMap = new HashMap(); + nowDataMap.put(REPEAT_PARAMS, nowParams); + nowDataMap.put(REPEAT_TIME, System.currentTimeMillis()); + + // 璇锋眰鍦板潃锛堜綔涓哄瓨鏀綾ache鐨刱ey鍊硷級 + String url = request.getRequestURI(); + + // 鍞竴鍊硷紙娌℃湁娑堟伅澶村垯浣跨敤璇锋眰鍦板潃锛 + String submitKey = StringUtils.trimToEmpty(request.getHeader(header)); + + // 鍞竴鏍囪瘑锛堟寚瀹歬ey + url + 娑堟伅澶达級 + String cacheRepeatKey = CacheConstants.REPEAT_SUBMIT_KEY + url + submitKey; + + Object sessionObj = redisCache.getCacheObject(cacheRepeatKey); + if (sessionObj != null) + { + Map sessionMap = (Map) sessionObj; + if (sessionMap.containsKey(url)) + { + Map preDataMap = (Map) sessionMap.get(url); + if (compareParams(nowDataMap, preDataMap) && compareTime(nowDataMap, preDataMap, annotation.interval())) + { + return true; + } + } + } + Map cacheMap = new HashMap(); + cacheMap.put(url, nowDataMap); + redisCache.setCacheObject(cacheRepeatKey, cacheMap, annotation.interval(), TimeUnit.MILLISECONDS); + return false; + } + + /** + * 鍒ゆ柇鍙傛暟鏄惁鐩稿悓 + */ + private boolean compareParams(Map nowMap, Map preMap) + { + String nowParams = (String) nowMap.get(REPEAT_PARAMS); + String preParams = (String) preMap.get(REPEAT_PARAMS); + return nowParams.equals(preParams); + } + + /** + * 鍒ゆ柇涓ゆ闂撮殧鏃堕棿 + */ + private boolean compareTime(Map nowMap, Map preMap, int interval) + { + long time1 = (Long) nowMap.get(REPEAT_TIME); + long time2 = (Long) preMap.get(REPEAT_TIME); + if ((time1 - time2) < interval) + { + return true; + } + return false; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/AsyncManager.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/AsyncManager.java new file mode 100644 index 0000000000000000000000000000000000000000..dcdb5169d5ae469e1849ef2312215934ccd7ad98 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/AsyncManager.java @@ -0,0 +1,56 @@ +package com.ruoyi.framework.manager; + +import com.ruoyi.common.utils.Threads; +import com.ruoyi.common.utils.spring.SpringUtils; + +import java.util.TimerTask; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +/** + * 寮傛浠诲姟绠$悊鍣 + * + * @author ruoyi + */ +public class AsyncManager +{ + /** + * 鎿嶄綔寤惰繜10姣 + */ + private final int OPERATE_DELAY_TIME = 10; + + /** + * 寮傛鎿嶄綔浠诲姟璋冨害绾跨▼姹 + */ + private ScheduledExecutorService executor = SpringUtils.getBean("scheduledExecutorService"); + + /** + * 鍗曚緥妯″紡 + */ + private AsyncManager(){} + + private static AsyncManager me = new AsyncManager(); + + public static AsyncManager me() + { + return me; + } + + /** + * 鎵ц浠诲姟 + * + * @param task 浠诲姟 + */ + public void execute(TimerTask task) + { + executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS); + } + + /** + * 鍋滄浠诲姟绾跨▼姹 + */ + public void shutdown() + { + Threads.shutdownAndAwaitTermination(executor); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/ShutdownManager.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/ShutdownManager.java new file mode 100644 index 0000000000000000000000000000000000000000..db928d4e84b3152016ec8246e16cc7c57473b19c --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/ShutdownManager.java @@ -0,0 +1,40 @@ +package com.ruoyi.framework.manager; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.annotation.PreDestroy; + +/** + * 纭繚搴旂敤閫鍑烘椂鑳藉叧闂悗鍙扮嚎绋 + * + * @author ruoyi + */ +@Component +public class ShutdownManager +{ + private static final Logger logger = LoggerFactory.getLogger("sys-user"); + + @PreDestroy + public void destroy() + { + shutdownAsyncManager(); + } + + /** + * 鍋滄寮傛鎵ц浠诲姟 + */ + private void shutdownAsyncManager() + { + try + { + logger.info("====鍏抽棴鍚庡彴浠诲姟浠诲姟绾跨▼姹===="); + AsyncManager.me().shutdown(); + } + catch (Exception e) + { + logger.error(e.getMessage(), e); + } + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..c61b963e55ebc5d6eda95dd319c2bdccc7e3b8f6 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java @@ -0,0 +1,103 @@ +package com.ruoyi.framework.manager.factory; + +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.utils.LogUtils; +import com.ruoyi.common.utils.ServletUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.ip.AddressUtils; +import com.ruoyi.common.utils.ip.IpUtils; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.system.domain.SysLogininfor; +import com.ruoyi.system.domain.SysOperLog; +import com.ruoyi.system.service.ISysLogininforService; +import com.ruoyi.system.service.ISysOperLogService; +import eu.bitwalker.useragentutils.UserAgent; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.TimerTask; + +/** + * 寮傛宸ュ巶锛堜骇鐢熶换鍔$敤锛 + * + * @author ruoyi + */ +public class AsyncFactory +{ + private static final Logger sys_user_logger = LoggerFactory.getLogger("sys-user"); + + /** + * 璁板綍鐧诲綍淇℃伅 + * + * @param username 鐢ㄦ埛鍚 + * @param status 鐘舵 + * @param message 娑堟伅 + * @param args 鍒楄〃 + * @return 浠诲姟task + */ + public static TimerTask recordLogininfor(final String username, final String status, final String message, + final Object... args) + { + final UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); + final String ip = IpUtils.getIpAddr(); + return new TimerTask() + { + @Override + public void run() + { + String address = AddressUtils.getRealAddressByIP(ip); + StringBuilder s = new StringBuilder(); + s.append(LogUtils.getBlock(ip)); + s.append(address); + s.append(LogUtils.getBlock(username)); + s.append(LogUtils.getBlock(status)); + s.append(LogUtils.getBlock(message)); + // 鎵撳嵃淇℃伅鍒版棩蹇 + sys_user_logger.info(s.toString(), args); + // 鑾峰彇瀹㈡埛绔搷浣滅郴缁 + String os = userAgent.getOperatingSystem().getName(); + // 鑾峰彇瀹㈡埛绔祻瑙堝櫒 + String browser = userAgent.getBrowser().getName(); + // 灏佽瀵硅薄 + SysLogininfor logininfor = new SysLogininfor(); + logininfor.setUserName(username); + logininfor.setIpaddr(ip); + logininfor.setLoginLocation(address); + logininfor.setBrowser(browser); + logininfor.setOs(os); + logininfor.setMsg(message); + // 鏃ュ織鐘舵 + if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER)) + { + logininfor.setStatus(Constants.SUCCESS); + } + else if (Constants.LOGIN_FAIL.equals(status)) + { + logininfor.setStatus(Constants.FAIL); + } + // 鎻掑叆鏁版嵁 + SpringUtils.getBean(ISysLogininforService.class).insertLogininfor(logininfor); + } + }; + } + + /** + * 鎿嶄綔鏃ュ織璁板綍 + * + * @param operLog 鎿嶄綔鏃ュ織淇℃伅 + * @return 浠诲姟task + */ + public static TimerTask recordOper(final SysOperLog operLog) + { + return new TimerTask() + { + @Override + public void run() + { + // 杩滅▼鏌ヨ鎿嶄綔鍦扮偣 + operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp())); + SpringUtils.getBean(ISysOperLogService.class).insertOperlog(operLog); + } + }; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/context/AuthenticationContextHolder.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/context/AuthenticationContextHolder.java new file mode 100644 index 0000000000000000000000000000000000000000..6c776ce3fb28736230ebeced47b2b812fb148b8e --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/context/AuthenticationContextHolder.java @@ -0,0 +1,28 @@ +package com.ruoyi.framework.security.context; + +import org.springframework.security.core.Authentication; + +/** + * 韬唤楠岃瘉淇℃伅 + * + * @author ruoyi + */ +public class AuthenticationContextHolder +{ + private static final ThreadLocal contextHolder = new ThreadLocal<>(); + + public static Authentication getContext() + { + return contextHolder.get(); + } + + public static void setContext(Authentication context) + { + contextHolder.set(context); + } + + public static void clearContext() + { + contextHolder.remove(); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/context/PermissionContextHolder.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/context/PermissionContextHolder.java new file mode 100644 index 0000000000000000000000000000000000000000..f9766e52ea59a1d7510345dfe9842da2298d88d0 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/context/PermissionContextHolder.java @@ -0,0 +1,27 @@ +package com.ruoyi.framework.security.context; + +import com.ruoyi.common.core.text.Convert; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; + +/** + * 鏉冮檺淇℃伅 + * + * @author ruoyi + */ +public class PermissionContextHolder +{ + private static final String PERMISSION_CONTEXT_ATTRIBUTES = "PERMISSION_CONTEXT"; + + public static void setContext(String permission) + { + RequestContextHolder.currentRequestAttributes().setAttribute(PERMISSION_CONTEXT_ATTRIBUTES, permission, + RequestAttributes.SCOPE_REQUEST); + } + + public static String getContext() + { + return Convert.toStr(RequestContextHolder.currentRequestAttributes().getAttribute(PERMISSION_CONTEXT_ATTRIBUTES, + RequestAttributes.SCOPE_REQUEST)); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..188e24fdbea673ef3fbe53d5426975233d437c3c --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java @@ -0,0 +1,45 @@ +package com.ruoyi.framework.security.filter; + +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.framework.web.service.TokenService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * token杩囨护鍣 楠岃瘉token鏈夋晥鎬 + * + * @author ruoyi + */ +@Component +public class JwtAuthenticationTokenFilter extends OncePerRequestFilter +{ + @Autowired + private TokenService tokenService; + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) + throws ServletException, IOException + { + LoginUser loginUser = tokenService.getLoginUser(request); + if (StringUtils.isNotNull(loginUser) && StringUtils.isNull(SecurityUtils.getAuthentication())) + { + tokenService.verifyToken(loginUser); + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities()); + authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); + SecurityContextHolder.getContext().setAuthentication(authenticationToken); + } + chain.doFilter(request, response); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/AuthenticationEntryPointImpl.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/AuthenticationEntryPointImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..53407c53b20cb1bdf60b600732f386bf7510e0c6 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/AuthenticationEntryPointImpl.java @@ -0,0 +1,35 @@ +package com.ruoyi.framework.security.handle; + +import com.alibaba.fastjson2.JSON; +import com.ruoyi.common.constant.HttpStatus; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.ServletUtils; +import com.ruoyi.common.utils.StringUtils; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.AuthenticationEntryPoint; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.Serializable; + +/** + * 璁よ瘉澶辫触澶勭悊绫 杩斿洖鏈巿鏉 + * + * @author ruoyi + */ +@Component +public class AuthenticationEntryPointImpl implements AuthenticationEntryPoint, Serializable +{ + private static final long serialVersionUID = -8970718410437077606L; + + @Override + public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) + throws IOException + { + int code = HttpStatus.UNAUTHORIZED; + String msg = StringUtils.format("璇锋眰璁块棶锛歿}锛岃璇佸け璐ワ紝鏃犳硶璁块棶绯荤粺璧勬簮", request.getRequestURI()); + ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.error(code, msg))); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..759c9b73fc2a0a4b11bda702bd28c5fc52e9c41f --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java @@ -0,0 +1,54 @@ +package com.ruoyi.framework.security.handle; + +import com.alibaba.fastjson2.JSON; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.utils.MessageUtils; +import com.ruoyi.common.utils.ServletUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.framework.manager.AsyncManager; +import com.ruoyi.framework.manager.factory.AsyncFactory; +import com.ruoyi.framework.web.service.TokenService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.core.Authentication; +import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * 鑷畾涔夐鍑哄鐞嗙被 杩斿洖鎴愬姛 + * + * @author ruoyi + */ +@Configuration +public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler +{ + @Autowired + private TokenService tokenService; + + /** + * 閫鍑哄鐞 + * + * @return + */ + @Override + public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) + throws IOException, ServletException + { + LoginUser loginUser = tokenService.getLoginUser(request); + if (StringUtils.isNotNull(loginUser)) + { + String userName = loginUser.getUsername(); + // 鍒犻櫎鐢ㄦ埛缂撳瓨璁板綍 + tokenService.delLoginUser(loginUser.getToken()); + // 璁板綍鐢ㄦ埛閫鍑烘棩蹇 + AsyncManager.me().execute(AsyncFactory.recordLogininfor(userName, Constants.LOGOUT, MessageUtils.message("user.logout.success"))); + } + ServletUtils.renderString(response, JSON.toJSONString(AjaxResult.success(MessageUtils.message("user.logout.success")))); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/Server.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/Server.java new file mode 100644 index 0000000000000000000000000000000000000000..9a3d7f4e09b5761faab2dd763ca8096e3a2f86c0 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/Server.java @@ -0,0 +1,237 @@ +package com.ruoyi.framework.web.domain; + +import com.ruoyi.common.utils.Arith; +import com.ruoyi.common.utils.ip.IpUtils; +import com.ruoyi.framework.web.domain.server.*; +import oshi.SystemInfo; +import oshi.hardware.CentralProcessor; +import oshi.hardware.CentralProcessor.TickType; +import oshi.hardware.GlobalMemory; +import oshi.hardware.HardwareAbstractionLayer; +import oshi.software.os.FileSystem; +import oshi.software.os.OSFileStore; +import oshi.software.os.OperatingSystem; +import oshi.util.Util; + +import java.net.UnknownHostException; +import java.util.LinkedList; +import java.util.List; +import java.util.Properties; + +/** + * 鏈嶅姟鍣ㄧ浉鍏充俊鎭 + * + * @author ruoyi + */ +public class Server +{ + private static final int OSHI_WAIT_SECOND = 1000; + + /** + * CPU鐩稿叧淇℃伅 + */ + private Cpu cpu = new Cpu(); + + /** + * 鍏у瓨鐩稿叧淇℃伅 + */ + private Mem mem = new Mem(); + + /** + * JVM鐩稿叧淇℃伅 + */ + private Jvm jvm = new Jvm(); + + /** + * 鏈嶅姟鍣ㄧ浉鍏充俊鎭 + */ + private Sys sys = new Sys(); + + /** + * 纾佺洏鐩稿叧淇℃伅 + */ + private List sysFiles = new LinkedList(); + + public Cpu getCpu() + { + return cpu; + } + + public void setCpu(Cpu cpu) + { + this.cpu = cpu; + } + + public Mem getMem() + { + return mem; + } + + public void setMem(Mem mem) + { + this.mem = mem; + } + + public Jvm getJvm() + { + return jvm; + } + + public void setJvm(Jvm jvm) + { + this.jvm = jvm; + } + + public Sys getSys() + { + return sys; + } + + public void setSys(Sys sys) + { + this.sys = sys; + } + + public List getSysFiles() + { + return sysFiles; + } + + public void setSysFiles(List sysFiles) + { + this.sysFiles = sysFiles; + } + + public void copyTo() throws Exception + { + SystemInfo si = new SystemInfo(); + HardwareAbstractionLayer hal = si.getHardware(); + + setCpuInfo(hal.getProcessor()); + + setMemInfo(hal.getMemory()); + + setSysInfo(); + + setJvmInfo(); + + setSysFiles(si.getOperatingSystem()); + } + + /** + * 璁剧疆CPU淇℃伅 + */ + private void setCpuInfo(CentralProcessor processor) + { + // CPU淇℃伅 + long[] prevTicks = processor.getSystemCpuLoadTicks(); + Util.sleep(OSHI_WAIT_SECOND); + long[] ticks = processor.getSystemCpuLoadTicks(); + long nice = ticks[TickType.NICE.getIndex()] - prevTicks[TickType.NICE.getIndex()]; + long irq = ticks[TickType.IRQ.getIndex()] - prevTicks[TickType.IRQ.getIndex()]; + long softirq = ticks[TickType.SOFTIRQ.getIndex()] - prevTicks[TickType.SOFTIRQ.getIndex()]; + long steal = ticks[TickType.STEAL.getIndex()] - prevTicks[TickType.STEAL.getIndex()]; + long cSys = ticks[TickType.SYSTEM.getIndex()] - prevTicks[TickType.SYSTEM.getIndex()]; + long user = ticks[TickType.USER.getIndex()] - prevTicks[TickType.USER.getIndex()]; + long iowait = ticks[TickType.IOWAIT.getIndex()] - prevTicks[TickType.IOWAIT.getIndex()]; + long idle = ticks[TickType.IDLE.getIndex()] - prevTicks[TickType.IDLE.getIndex()]; + long totalCpu = user + nice + cSys + idle + iowait + irq + softirq + steal; + cpu.setCpuNum(processor.getLogicalProcessorCount()); + cpu.setTotal(totalCpu); + cpu.setSys(cSys); + cpu.setUsed(user); + cpu.setWait(iowait); + cpu.setFree(idle); + } + + /** + * 璁剧疆鍐呭瓨淇℃伅 + */ + private void setMemInfo(GlobalMemory memory) + { + mem.setTotal(memory.getTotal()); + mem.setUsed(memory.getTotal() - memory.getAvailable()); + mem.setFree(memory.getAvailable()); + } + + /** + * 璁剧疆鏈嶅姟鍣ㄤ俊鎭 + */ + private void setSysInfo() + { + Properties props = System.getProperties(); + sys.setComputerName(IpUtils.getHostName()); + sys.setComputerIp(IpUtils.getHostIp()); + sys.setOsName(props.getProperty("os.name")); + sys.setOsArch(props.getProperty("os.arch")); + sys.setUserDir(props.getProperty("user.dir")); + } + + /** + * 璁剧疆Java铏氭嫙鏈 + */ + private void setJvmInfo() throws UnknownHostException + { + Properties props = System.getProperties(); + jvm.setTotal(Runtime.getRuntime().totalMemory()); + jvm.setMax(Runtime.getRuntime().maxMemory()); + jvm.setFree(Runtime.getRuntime().freeMemory()); + jvm.setVersion(props.getProperty("java.version")); + jvm.setHome(props.getProperty("java.home")); + } + + /** + * 璁剧疆纾佺洏淇℃伅 + */ + private void setSysFiles(OperatingSystem os) + { + FileSystem fileSystem = os.getFileSystem(); + List fsArray = fileSystem.getFileStores(); + for (OSFileStore fs : fsArray) + { + long free = fs.getUsableSpace(); + long total = fs.getTotalSpace(); + long used = total - free; + SysFile sysFile = new SysFile(); + sysFile.setDirName(fs.getMount()); + sysFile.setSysTypeName(fs.getType()); + sysFile.setTypeName(fs.getName()); + sysFile.setTotal(convertFileSize(total)); + sysFile.setFree(convertFileSize(free)); + sysFile.setUsed(convertFileSize(used)); + sysFile.setUsage(Arith.mul(Arith.div(used, total, 4), 100)); + sysFiles.add(sysFile); + } + } + + /** + * 瀛楄妭杞崲 + * + * @param size 瀛楄妭澶у皬 + * @return 杞崲鍚庡 + */ + public String convertFileSize(long size) + { + long kb = 1024; + long mb = kb * 1024; + long gb = mb * 1024; + if (size >= gb) + { + return String.format("%.1f GB", (float) size / gb); + } + else if (size >= mb) + { + float f = (float) size / mb; + return String.format(f > 100 ? "%.0f MB" : "%.1f MB", f); + } + else if (size >= kb) + { + float f = (float) size / kb; + return String.format(f > 100 ? "%.0f KB" : "%.1f KB", f); + } + else + { + return String.format("%d B", size); + } + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/Cpu.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/Cpu.java new file mode 100644 index 0000000000000000000000000000000000000000..a13a66cf24dd614309ae41d208c566e22414c872 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/Cpu.java @@ -0,0 +1,101 @@ +package com.ruoyi.framework.web.domain.server; + +import com.ruoyi.common.utils.Arith; + +/** + * CPU鐩稿叧淇℃伅 + * + * @author ruoyi + */ +public class Cpu +{ + /** + * 鏍稿績鏁 + */ + private int cpuNum; + + /** + * CPU鎬荤殑浣跨敤鐜 + */ + private double total; + + /** + * CPU绯荤粺浣跨敤鐜 + */ + private double sys; + + /** + * CPU鐢ㄦ埛浣跨敤鐜 + */ + private double used; + + /** + * CPU褰撳墠绛夊緟鐜 + */ + private double wait; + + /** + * CPU褰撳墠绌洪棽鐜 + */ + private double free; + + public int getCpuNum() + { + return cpuNum; + } + + public void setCpuNum(int cpuNum) + { + this.cpuNum = cpuNum; + } + + public double getTotal() + { + return Arith.round(Arith.mul(total, 100), 2); + } + + public void setTotal(double total) + { + this.total = total; + } + + public double getSys() + { + return Arith.round(Arith.mul(sys / total, 100), 2); + } + + public void setSys(double sys) + { + this.sys = sys; + } + + public double getUsed() + { + return Arith.round(Arith.mul(used / total, 100), 2); + } + + public void setUsed(double used) + { + this.used = used; + } + + public double getWait() + { + return Arith.round(Arith.mul(wait / total, 100), 2); + } + + public void setWait(double wait) + { + this.wait = wait; + } + + public double getFree() + { + return Arith.round(Arith.mul(free / total, 100), 2); + } + + public void setFree(double free) + { + this.free = free; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/Jvm.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/Jvm.java new file mode 100644 index 0000000000000000000000000000000000000000..b498cc908f421345c94c50f19bb7c227ff2f6cdd --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/Jvm.java @@ -0,0 +1,131 @@ +package com.ruoyi.framework.web.domain.server; + +import com.ruoyi.common.utils.Arith; +import com.ruoyi.common.utils.DateUtils; + +import java.lang.management.ManagementFactory; + +/** + * JVM鐩稿叧淇℃伅 + * + * @author ruoyi + */ +public class Jvm +{ + /** + * 褰撳墠JVM鍗犵敤鐨勫唴瀛樻绘暟(M) + */ + private double total; + + /** + * JVM鏈澶у彲鐢ㄥ唴瀛樻绘暟(M) + */ + private double max; + + /** + * JVM绌洪棽鍐呭瓨(M) + */ + private double free; + + /** + * JDK鐗堟湰 + */ + private String version; + + /** + * JDK璺緞 + */ + private String home; + + public double getTotal() + { + return Arith.div(total, (1024 * 1024), 2); + } + + public void setTotal(double total) + { + this.total = total; + } + + public double getMax() + { + return Arith.div(max, (1024 * 1024), 2); + } + + public void setMax(double max) + { + this.max = max; + } + + public double getFree() + { + return Arith.div(free, (1024 * 1024), 2); + } + + public void setFree(double free) + { + this.free = free; + } + + public double getUsed() + { + return Arith.div(total - free, (1024 * 1024), 2); + } + + public double getUsage() + { + return Arith.mul(Arith.div(total - free, total, 4), 100); + } + + /** + * 鑾峰彇JDK鍚嶇О + */ + public String getName() + { + return ManagementFactory.getRuntimeMXBean().getVmName(); + } + + public String getVersion() + { + return version; + } + + public void setVersion(String version) + { + this.version = version; + } + + public String getHome() + { + return home; + } + + public void setHome(String home) + { + this.home = home; + } + + /** + * JDK鍚姩鏃堕棿 + */ + public String getStartTime() + { + return DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, DateUtils.getServerStartDate()); + } + + /** + * JDK杩愯鏃堕棿 + */ + public String getRunTime() + { + return DateUtils.timeDistance(DateUtils.getNowDate(), DateUtils.getServerStartDate()); + } + + /** + * 杩愯鍙傛暟 + */ + public String getInputArgs() + { + return ManagementFactory.getRuntimeMXBean().getInputArguments().toString(); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/Mem.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/Mem.java new file mode 100644 index 0000000000000000000000000000000000000000..13eec521a4011f9ef970f3863ef562c833946282 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/Mem.java @@ -0,0 +1,61 @@ +package com.ruoyi.framework.web.domain.server; + +import com.ruoyi.common.utils.Arith; + +/** + * 鍏у瓨鐩稿叧淇℃伅 + * + * @author ruoyi + */ +public class Mem +{ + /** + * 鍐呭瓨鎬婚噺 + */ + private double total; + + /** + * 宸茬敤鍐呭瓨 + */ + private double used; + + /** + * 鍓╀綑鍐呭瓨 + */ + private double free; + + public double getTotal() + { + return Arith.div(total, (1024 * 1024 * 1024), 2); + } + + public void setTotal(long total) + { + this.total = total; + } + + public double getUsed() + { + return Arith.div(used, (1024 * 1024 * 1024), 2); + } + + public void setUsed(long used) + { + this.used = used; + } + + public double getFree() + { + return Arith.div(free, (1024 * 1024 * 1024), 2); + } + + public void setFree(long free) + { + this.free = free; + } + + public double getUsage() + { + return Arith.mul(Arith.div(used, total, 4), 100); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/Sys.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/Sys.java new file mode 100644 index 0000000000000000000000000000000000000000..45d64d9cde55be168dbaf22959c8d78835bd3ed3 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/Sys.java @@ -0,0 +1,84 @@ +package com.ruoyi.framework.web.domain.server; + +/** + * 绯荤粺鐩稿叧淇℃伅 + * + * @author ruoyi + */ +public class Sys +{ + /** + * 鏈嶅姟鍣ㄥ悕绉 + */ + private String computerName; + + /** + * 鏈嶅姟鍣↖p + */ + private String computerIp; + + /** + * 椤圭洰璺緞 + */ + private String userDir; + + /** + * 鎿嶄綔绯荤粺 + */ + private String osName; + + /** + * 绯荤粺鏋舵瀯 + */ + private String osArch; + + public String getComputerName() + { + return computerName; + } + + public void setComputerName(String computerName) + { + this.computerName = computerName; + } + + public String getComputerIp() + { + return computerIp; + } + + public void setComputerIp(String computerIp) + { + this.computerIp = computerIp; + } + + public String getUserDir() + { + return userDir; + } + + public void setUserDir(String userDir) + { + this.userDir = userDir; + } + + public String getOsName() + { + return osName; + } + + public void setOsName(String osName) + { + this.osName = osName; + } + + public String getOsArch() + { + return osArch; + } + + public void setOsArch(String osArch) + { + this.osArch = osArch; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/SysFile.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/SysFile.java new file mode 100644 index 0000000000000000000000000000000000000000..1320cde6ecc13557972c359ac9c8acc87959e721 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/server/SysFile.java @@ -0,0 +1,114 @@ +package com.ruoyi.framework.web.domain.server; + +/** + * 绯荤粺鏂囦欢鐩稿叧淇℃伅 + * + * @author ruoyi + */ +public class SysFile +{ + /** + * 鐩樼璺緞 + */ + private String dirName; + + /** + * 鐩樼绫诲瀷 + */ + private String sysTypeName; + + /** + * 鏂囦欢绫诲瀷 + */ + private String typeName; + + /** + * 鎬诲ぇ灏 + */ + private String total; + + /** + * 鍓╀綑澶у皬 + */ + private String free; + + /** + * 宸茬粡浣跨敤閲 + */ + private String used; + + /** + * 璧勬簮鐨勪娇鐢ㄧ巼 + */ + private double usage; + + public String getDirName() + { + return dirName; + } + + public void setDirName(String dirName) + { + this.dirName = dirName; + } + + public String getSysTypeName() + { + return sysTypeName; + } + + public void setSysTypeName(String sysTypeName) + { + this.sysTypeName = sysTypeName; + } + + public String getTypeName() + { + return typeName; + } + + public void setTypeName(String typeName) + { + this.typeName = typeName; + } + + public String getTotal() + { + return total; + } + + public void setTotal(String total) + { + this.total = total; + } + + public String getFree() + { + return free; + } + + public void setFree(String free) + { + this.free = free; + } + + public String getUsed() + { + return used; + } + + public void setUsed(String used) + { + this.used = used; + } + + public double getUsage() + { + return usage; + } + + public void setUsage(double usage) + { + this.usage = usage; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..c9e80f3d8523274c74c5df29c20ab425b66b9f91 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java @@ -0,0 +1,146 @@ +package com.ruoyi.framework.web.exception; + +import com.ruoyi.common.constant.HttpStatus; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.exception.DemoModeException; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.html.EscapeUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.validation.BindException; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.MissingPathVariableException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; + +import javax.servlet.http.HttpServletRequest; + +/** + * 鍏ㄥ眬寮傚父澶勭悊鍣 + * + * @author ruoyi + */ +@RestControllerAdvice +public class GlobalExceptionHandler +{ + private static final Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class); + + /** + * 鏉冮檺鏍¢獙寮傚父 + */ + @ExceptionHandler(AccessDeniedException.class) + public AjaxResult handleAccessDeniedException(AccessDeniedException e, HttpServletRequest request) + { + String requestURI = request.getRequestURI(); + log.error("璇锋眰鍦板潃'{}',鏉冮檺鏍¢獙澶辫触'{}'", requestURI, e.getMessage()); + return AjaxResult.error(HttpStatus.FORBIDDEN, "娌℃湁鏉冮檺锛岃鑱旂郴绠$悊鍛樻巿鏉"); + } + + /** + * 璇锋眰鏂瑰紡涓嶆敮鎸 + */ + @ExceptionHandler(HttpRequestMethodNotSupportedException.class) + public AjaxResult handleHttpRequestMethodNotSupported(HttpRequestMethodNotSupportedException e, + HttpServletRequest request) + { + String requestURI = request.getRequestURI(); + log.error("璇锋眰鍦板潃'{}',涓嶆敮鎸'{}'璇锋眰", requestURI, e.getMethod()); + return AjaxResult.error(e.getMessage()); + } + + /** + * 涓氬姟寮傚父 + */ + @ExceptionHandler(ServiceException.class) + public AjaxResult handleServiceException(ServiceException e, HttpServletRequest request) + { + log.error(e.getMessage(), e); + Integer code = e.getCode(); + return StringUtils.isNotNull(code) ? AjaxResult.error(code, e.getMessage()) : AjaxResult.error(e.getMessage()); + } + + /** + * 璇锋眰璺緞涓己灏戝繀闇鐨勮矾寰勫彉閲 + */ + @ExceptionHandler(MissingPathVariableException.class) + public AjaxResult handleMissingPathVariableException(MissingPathVariableException e, HttpServletRequest request) + { + String requestURI = request.getRequestURI(); + log.error("璇锋眰璺緞涓己灏戝繀闇鐨勮矾寰勫彉閲'{}',鍙戠敓绯荤粺寮傚父.", requestURI, e); + return AjaxResult.error(String.format("璇锋眰璺緞涓己灏戝繀闇鐨勮矾寰勫彉閲廩%s]", e.getVariableName())); + } + + /** + * 璇锋眰鍙傛暟绫诲瀷涓嶅尮閰 + */ + @ExceptionHandler(MethodArgumentTypeMismatchException.class) + public AjaxResult handleMethodArgumentTypeMismatchException(MethodArgumentTypeMismatchException e, HttpServletRequest request) + { + String requestURI = request.getRequestURI(); + String value = Convert.toStr(e.getValue()); + if (StringUtils.isNotEmpty(value)) + { + value = EscapeUtil.clean(value); + } + log.error("璇锋眰鍙傛暟绫诲瀷涓嶅尮閰'{}',鍙戠敓绯荤粺寮傚父.", requestURI, e); + return AjaxResult.error(String.format("璇锋眰鍙傛暟绫诲瀷涓嶅尮閰嶏紝鍙傛暟[%s]瑕佹眰绫诲瀷涓猴細'%s'锛屼絾杈撳叆鍊间负锛'%s'", e.getName(), e.getRequiredType().getName(), value)); + } + + /** + * 鎷︽埅鏈煡鐨勮繍琛屾椂寮傚父 + */ + @ExceptionHandler(RuntimeException.class) + public AjaxResult handleRuntimeException(RuntimeException e, HttpServletRequest request) + { + String requestURI = request.getRequestURI(); + log.error("璇锋眰鍦板潃'{}',鍙戠敓鏈煡寮傚父.", requestURI, e); + return AjaxResult.error(e.getMessage()); + } + + /** + * 绯荤粺寮傚父 + */ + @ExceptionHandler(Exception.class) + public AjaxResult handleException(Exception e, HttpServletRequest request) + { + String requestURI = request.getRequestURI(); + log.error("璇锋眰鍦板潃'{}',鍙戠敓绯荤粺寮傚父.", requestURI, e); + return AjaxResult.error(e.getMessage()); + } + + /** + * 鑷畾涔夐獙璇佸紓甯 + */ + @ExceptionHandler(BindException.class) + public AjaxResult handleBindException(BindException e) + { + log.error(e.getMessage(), e); + String message = e.getAllErrors().get(0).getDefaultMessage(); + return AjaxResult.error(message); + } + + /** + * 鑷畾涔夐獙璇佸紓甯 + */ + @ExceptionHandler(MethodArgumentNotValidException.class) + public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e) + { + log.error(e.getMessage(), e); + String message = e.getBindingResult().getFieldError().getDefaultMessage(); + return AjaxResult.error(message); + } + + /** + * 婕旂ず妯″紡寮傚父 + */ + @ExceptionHandler(DemoModeException.class) + public AjaxResult handleDemoModeException(DemoModeException e) + { + return AjaxResult.error("婕旂ず妯″紡锛屼笉鍏佽鎿嶄綔"); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/PermissionService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/PermissionService.java new file mode 100644 index 0000000000000000000000000000000000000000..4e3bf95a877a79b1ceee41789f54997ad1f01afa --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/PermissionService.java @@ -0,0 +1,160 @@ +package com.ruoyi.framework.web.service; + +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.framework.security.context.PermissionContextHolder; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.Set; + +/** + * RuoYi棣栧垱 鑷畾涔夋潈闄愬疄鐜帮紝ss鍙栬嚜SpringSecurity棣栧瓧姣 + * + * @author ruoyi + */ +@Service("ss") +public class PermissionService +{ + /** + * 楠岃瘉鐢ㄦ埛鏄惁鍏峰鏌愭潈闄 + * + * @param permission 鏉冮檺瀛楃涓 + * @return 鐢ㄦ埛鏄惁鍏峰鏌愭潈闄 + */ + public boolean hasPermi(String permission) + { + if (StringUtils.isEmpty(permission)) + { + return false; + } + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getPermissions())) + { + return false; + } + PermissionContextHolder.setContext(permission); + return hasPermissions(loginUser.getPermissions(), permission); + } + + /** + * 楠岃瘉鐢ㄦ埛鏄惁涓嶅叿澶囨煇鏉冮檺锛屼笌 hasPermi閫昏緫鐩稿弽 + * + * @param permission 鏉冮檺瀛楃涓 + * @return 鐢ㄦ埛鏄惁涓嶅叿澶囨煇鏉冮檺 + */ + public boolean lacksPermi(String permission) + { + return hasPermi(permission) != true; + } + + /** + * 楠岃瘉鐢ㄦ埛鏄惁鍏锋湁浠ヤ笅浠绘剰涓涓潈闄 + * + * @param permissions 浠 PERMISSION_DELIMETER 涓哄垎闅旂鐨勬潈闄愬垪琛 + * @return 鐢ㄦ埛鏄惁鍏锋湁浠ヤ笅浠绘剰涓涓潈闄 + */ + public boolean hasAnyPermi(String permissions) + { + if (StringUtils.isEmpty(permissions)) + { + return false; + } + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getPermissions())) + { + return false; + } + PermissionContextHolder.setContext(permissions); + Set authorities = loginUser.getPermissions(); + for (String permission : permissions.split(Constants.PERMISSION_DELIMETER)) + { + if (permission != null && hasPermissions(authorities, permission)) + { + return true; + } + } + return false; + } + + /** + * 鍒ゆ柇鐢ㄦ埛鏄惁鎷ユ湁鏌愪釜瑙掕壊 + * + * @param role 瑙掕壊瀛楃涓 + * @return 鐢ㄦ埛鏄惁鍏峰鏌愯鑹 + */ + public boolean hasRole(String role) + { + if (StringUtils.isEmpty(role)) + { + return false; + } + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getUser().getRoles())) + { + return false; + } + for (SysRole sysRole : loginUser.getUser().getRoles()) + { + String roleKey = sysRole.getRoleKey(); + if (Constants.SUPER_ADMIN.equals(roleKey) || roleKey.equals(StringUtils.trim(role))) + { + return true; + } + } + return false; + } + + /** + * 楠岃瘉鐢ㄦ埛鏄惁涓嶅叿澶囨煇瑙掕壊锛屼笌 isRole閫昏緫鐩稿弽銆 + * + * @param role 瑙掕壊鍚嶇О + * @return 鐢ㄦ埛鏄惁涓嶅叿澶囨煇瑙掕壊 + */ + public boolean lacksRole(String role) + { + return hasRole(role) != true; + } + + /** + * 楠岃瘉鐢ㄦ埛鏄惁鍏锋湁浠ヤ笅浠绘剰涓涓鑹 + * + * @param roles 浠 ROLE_NAMES_DELIMETER 涓哄垎闅旂鐨勮鑹插垪琛 + * @return 鐢ㄦ埛鏄惁鍏锋湁浠ヤ笅浠绘剰涓涓鑹 + */ + public boolean hasAnyRoles(String roles) + { + if (StringUtils.isEmpty(roles)) + { + return false; + } + LoginUser loginUser = SecurityUtils.getLoginUser(); + if (StringUtils.isNull(loginUser) || CollectionUtils.isEmpty(loginUser.getUser().getRoles())) + { + return false; + } + for (String role : roles.split(Constants.ROLE_DELIMETER)) + { + if (hasRole(role)) + { + return true; + } + } + return false; + } + + /** + * 鍒ゆ柇鏄惁鍖呭惈鏉冮檺 + * + * @param permissions 鏉冮檺鍒楄〃 + * @param permission 鏉冮檺瀛楃涓 + * @return 鐢ㄦ埛鏄惁鍏峰鏌愭潈闄 + */ + private boolean hasPermissions(Set permissions, String permission) + { + return permissions.contains(Constants.ALL_PERMISSION) || permissions.contains(StringUtils.trim(permission)); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java new file mode 100644 index 0000000000000000000000000000000000000000..ad5d5f25001799874c5b5a1ec19bacdfbd4f4d42 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java @@ -0,0 +1,178 @@ +package com.ruoyi.framework.web.service; + +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.exception.user.*; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.MessageUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.ip.IpUtils; +import com.ruoyi.framework.manager.AsyncManager; +import com.ruoyi.framework.manager.factory.AsyncFactory; +import com.ruoyi.framework.security.context.AuthenticationContextHolder; +import com.ruoyi.system.service.ISysConfigService; +import com.ruoyi.system.service.ISysUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 鐧诲綍鏍¢獙鏂规硶 + * + * @author ruoyi + */ +@Component +public class SysLoginService +{ + @Autowired + private TokenService tokenService; + + @Resource + private AuthenticationManager authenticationManager; + + @Autowired + private RedisCache redisCache; + + @Autowired + private ISysUserService userService; + + @Autowired + private ISysConfigService configService; + + /** + * 鐧诲綍楠岃瘉 + * + * @param username 鐢ㄦ埛鍚 + * @param password 瀵嗙爜 + * @param code 楠岃瘉鐮 + * @param uuid 鍞竴鏍囪瘑 + * @return 缁撴灉 + */ + public String login(String username, String password, String code, String uuid) + { + // 楠岃瘉鐮佹牎楠 + validateCaptcha(username, code, uuid); + // 鐧诲綍鍓嶇疆鏍¢獙 + loginPreCheck(username, password); + // 鐢ㄦ埛楠岃瘉 + Authentication authentication = null; + try + { + UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password); + AuthenticationContextHolder.setContext(authenticationToken); + // 璇ユ柟娉曚細鍘昏皟鐢║serDetailsServiceImpl.loadUserByUsername + authentication = authenticationManager.authenticate(authenticationToken); + } + catch (Exception e) + { + if (e instanceof BadCredentialsException) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); + throw new UserPasswordNotMatchException(); + } + else + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage())); + throw new ServiceException(e.getMessage()); + } + } + finally + { + AuthenticationContextHolder.clearContext(); + } + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + recordLoginInfo(loginUser.getUserId()); + // 鐢熸垚token + return tokenService.createToken(loginUser); + } + + /** + * 鏍¢獙楠岃瘉鐮 + * + * @param username 鐢ㄦ埛鍚 + * @param code 楠岃瘉鐮 + * @param uuid 鍞竴鏍囪瘑 + * @return 缁撴灉 + */ + public void validateCaptcha(String username, String code, String uuid) + { + boolean captchaEnabled = configService.selectCaptchaEnabled(); + if (captchaEnabled) + { + String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, ""); + String captcha = redisCache.getCacheObject(verifyKey); + if (captcha == null) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"))); + throw new CaptchaExpireException(); + } + redisCache.deleteObject(verifyKey); + if (!code.equalsIgnoreCase(captcha)) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"))); + throw new CaptchaException(); + } + } + } + + /** + * 鐧诲綍鍓嶇疆鏍¢獙 + * @param username 鐢ㄦ埛鍚 + * @param password 鐢ㄦ埛瀵嗙爜 + */ + public void loginPreCheck(String username, String password) + { + // 鐢ㄦ埛鍚嶆垨瀵嗙爜涓虹┖ 閿欒 + if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("not.null"))); + throw new UserNotExistsException(); + } + // 瀵嗙爜濡傛灉涓嶅湪鎸囧畾鑼冨洿鍐 閿欒 + if (password.length() < UserConstants.PASSWORD_MIN_LENGTH + || password.length() > UserConstants.PASSWORD_MAX_LENGTH) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); + throw new UserPasswordNotMatchException(); + } + // 鐢ㄦ埛鍚嶄笉鍦ㄦ寚瀹氳寖鍥村唴 閿欒 + if (username.length() < UserConstants.USERNAME_MIN_LENGTH + || username.length() > UserConstants.USERNAME_MAX_LENGTH) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); + throw new UserPasswordNotMatchException(); + } + // IP榛戝悕鍗曟牎楠 + String blackStr = configService.selectConfigByKey("sys.login.blackIPList"); + if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("login.blocked"))); + throw new BlackListException(); + } + } + + /** + * 璁板綍鐧诲綍淇℃伅 + * + * @param userId 鐢ㄦ埛ID + */ + public void recordLoginInfo(Long userId) + { + SysUser sysUser = new SysUser(); + sysUser.setUserId(userId); + sysUser.setLoginIp(IpUtils.getIpAddr()); + sysUser.setLoginDate(DateUtils.getNowDate()); + userService.updateUserProfile(sysUser); + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPasswordService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPasswordService.java new file mode 100644 index 0000000000000000000000000000000000000000..1a1c0ff69d393b333b12f69a90739dc99ee478c0 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPasswordService.java @@ -0,0 +1,87 @@ +package com.ruoyi.framework.web.service; + +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.exception.user.UserPasswordNotMatchException; +import com.ruoyi.common.exception.user.UserPasswordRetryLimitExceedException; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.framework.security.context.AuthenticationContextHolder; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.security.core.Authentication; +import org.springframework.stereotype.Component; + +import java.util.concurrent.TimeUnit; + +/** + * 鐧诲綍瀵嗙爜鏂规硶 + * + * @author ruoyi + */ +@Component +public class SysPasswordService +{ + @Autowired + private RedisCache redisCache; + + @Value(value = "${user.password.maxRetryCount}") + private int maxRetryCount; + + @Value(value = "${user.password.lockTime}") + private int lockTime; + + /** + * 鐧诲綍璐︽埛瀵嗙爜閿欒娆℃暟缂撳瓨閿悕 + * + * @param username 鐢ㄦ埛鍚 + * @return 缂撳瓨閿甼ey + */ + private String getCacheKey(String username) + { + return CacheConstants.PWD_ERR_CNT_KEY + username; + } + + public void validate(SysUser user) + { + Authentication usernamePasswordAuthenticationToken = AuthenticationContextHolder.getContext(); + String username = usernamePasswordAuthenticationToken.getName(); + String password = usernamePasswordAuthenticationToken.getCredentials().toString(); + + Integer retryCount = redisCache.getCacheObject(getCacheKey(username)); + + if (retryCount == null) + { + retryCount = 0; + } + + if (retryCount >= Integer.valueOf(maxRetryCount).intValue()) + { + throw new UserPasswordRetryLimitExceedException(maxRetryCount, lockTime); + } + + if (!matches(user, password)) + { + retryCount = retryCount + 1; + redisCache.setCacheObject(getCacheKey(username), retryCount, lockTime, TimeUnit.MINUTES); + throw new UserPasswordNotMatchException(); + } + else + { + clearLoginRecordCache(username); + } + } + + public boolean matches(SysUser user, String rawPassword) + { + return SecurityUtils.matchesPassword(rawPassword, user.getPassword()); + } + + public void clearLoginRecordCache(String loginName) + { + if (redisCache.hasKey(getCacheKey(loginName))) + { + redisCache.deleteObject(getCacheKey(loginName)); + } + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPermissionService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPermissionService.java new file mode 100644 index 0000000000000000000000000000000000000000..3011d968c35fc1f09fedd5f7010dcda2c5f41eb9 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPermissionService.java @@ -0,0 +1,84 @@ +package com.ruoyi.framework.web.service; + +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.system.service.ISysMenuService; +import com.ruoyi.system.service.ISysRoleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * 鐢ㄦ埛鏉冮檺澶勭悊 + * + * @author ruoyi + */ +@Component +public class SysPermissionService +{ + @Autowired + private ISysRoleService roleService; + + @Autowired + private ISysMenuService menuService; + + /** + * 鑾峰彇瑙掕壊鏁版嵁鏉冮檺 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 瑙掕壊鏉冮檺淇℃伅 + */ + public Set getRolePermission(SysUser user) + { + Set roles = new HashSet(); + // 绠$悊鍛樻嫢鏈夋墍鏈夋潈闄 + if (user.isAdmin()) + { + roles.add("admin"); + } + else + { + roles.addAll(roleService.selectRolePermissionByUserId(user.getUserId())); + } + return roles; + } + + /** + * 鑾峰彇鑿滃崟鏁版嵁鏉冮檺 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 鑿滃崟鏉冮檺淇℃伅 + */ + public Set getMenuPermission(SysUser user) + { + Set perms = new HashSet(); + // 绠$悊鍛樻嫢鏈夋墍鏈夋潈闄 + if (user.isAdmin()) + { + perms.add("*:*:*"); + } + else + { + List roles = user.getRoles(); + if (!CollectionUtils.isEmpty(roles)) + { + // 澶氳鑹茶缃畃ermissions灞炴э紝浠ヤ究鏁版嵁鏉冮檺鍖归厤鏉冮檺 + for (SysRole role : roles) + { + Set rolePerms = menuService.selectMenuPermsByRoleId(role.getRoleId()); + role.setPermissions(rolePerms); + perms.addAll(rolePerms); + } + } + else + { + perms.addAll(menuService.selectMenuPermsByUserId(user.getUserId())); + } + } + return perms; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysRegisterService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysRegisterService.java new file mode 100644 index 0000000000000000000000000000000000000000..b91b7aa2acf928c662c74a91724a022ee6f7cc31 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysRegisterService.java @@ -0,0 +1,115 @@ +package com.ruoyi.framework.web.service; + +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.model.RegisterBody; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.exception.user.CaptchaException; +import com.ruoyi.common.exception.user.CaptchaExpireException; +import com.ruoyi.common.utils.MessageUtils; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.framework.manager.AsyncManager; +import com.ruoyi.framework.manager.factory.AsyncFactory; +import com.ruoyi.system.service.ISysConfigService; +import com.ruoyi.system.service.ISysUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 娉ㄥ唽鏍¢獙鏂规硶 + * + * @author ruoyi + */ +@Component +public class SysRegisterService +{ + @Autowired + private ISysUserService userService; + + @Autowired + private ISysConfigService configService; + + @Autowired + private RedisCache redisCache; + + /** + * 娉ㄥ唽 + */ + public String register(RegisterBody registerBody) + { + String msg = "", username = registerBody.getUsername(), password = registerBody.getPassword(); + SysUser sysUser = new SysUser(); + sysUser.setUserName(username); + + // 楠岃瘉鐮佸紑鍏 + boolean captchaEnabled = configService.selectCaptchaEnabled(); + if (captchaEnabled) + { + validateCaptcha(username, registerBody.getCode(), registerBody.getUuid()); + } + + if (StringUtils.isEmpty(username)) + { + msg = "鐢ㄦ埛鍚嶄笉鑳戒负绌"; + } + else if (StringUtils.isEmpty(password)) + { + msg = "鐢ㄦ埛瀵嗙爜涓嶈兘涓虹┖"; + } + else if (username.length() < UserConstants.USERNAME_MIN_LENGTH + || username.length() > UserConstants.USERNAME_MAX_LENGTH) + { + msg = "璐︽埛闀垮害蹇呴』鍦2鍒20涓瓧绗︿箣闂"; + } + else if (password.length() < UserConstants.PASSWORD_MIN_LENGTH + || password.length() > UserConstants.PASSWORD_MAX_LENGTH) + { + msg = "瀵嗙爜闀垮害蹇呴』鍦5鍒20涓瓧绗︿箣闂"; + } + else if (!userService.checkUserNameUnique(sysUser)) + { + msg = "淇濆瓨鐢ㄦ埛'" + username + "'澶辫触锛屾敞鍐岃处鍙峰凡瀛樺湪"; + } + else + { + sysUser.setNickName(username); + sysUser.setPassword(SecurityUtils.encryptPassword(password)); + boolean regFlag = userService.registerUser(sysUser); + if (!regFlag) + { + msg = "娉ㄥ唽澶辫触,璇疯仈绯荤郴缁熺鐞嗕汉鍛"; + } + else + { + AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.REGISTER, MessageUtils.message("user.register.success"))); + } + } + return msg; + } + + /** + * 鏍¢獙楠岃瘉鐮 + * + * @param username 鐢ㄦ埛鍚 + * @param code 楠岃瘉鐮 + * @param uuid 鍞竴鏍囪瘑 + * @return 缁撴灉 + */ + public void validateCaptcha(String username, String code, String uuid) + { + String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, ""); + String captcha = redisCache.getCacheObject(verifyKey); + redisCache.deleteObject(verifyKey); + if (captcha == null) + { + throw new CaptchaExpireException(); + } + if (!code.equalsIgnoreCase(captcha)) + { + throw new CaptchaException(); + } + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java new file mode 100644 index 0000000000000000000000000000000000000000..080608d1b9d67a1422ef2c338f10641f12f47f1b --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java @@ -0,0 +1,232 @@ +package com.ruoyi.framework.web.service; + +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.ServletUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.ip.AddressUtils; +import com.ruoyi.common.utils.ip.IpUtils; +import com.ruoyi.common.utils.uuid.IdUtils; +import eu.bitwalker.useragentutils.UserAgent; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +/** + * token楠岃瘉澶勭悊 + * + * @author ruoyi + */ +@Component +public class TokenService +{ + private static final Logger log = LoggerFactory.getLogger(TokenService.class); + + // 浠ょ墝鑷畾涔夋爣璇 + @Value("${token.header}") + private String header; + + // 浠ょ墝绉橀挜 + @Value("${token.secret}") + private String secret; + + // 浠ょ墝鏈夋晥鏈燂紙榛樿30鍒嗛挓锛 + @Value("${token.expireTime}") + private int expireTime; + + protected static final long MILLIS_SECOND = 1000; + + protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND; + + private static final Long MILLIS_MINUTE_TEN = 20 * 60 * 1000L; + + @Autowired + private RedisCache redisCache; + + /** + * 鑾峰彇鐢ㄦ埛韬唤淇℃伅 + * + * @return 鐢ㄦ埛淇℃伅 + */ + public LoginUser getLoginUser(HttpServletRequest request) + { + // 鑾峰彇璇锋眰鎼哄甫鐨勪护鐗 + String token = getToken(request); + if (StringUtils.isNotEmpty(token)) + { + try + { + Claims claims = parseToken(token); + // 瑙f瀽瀵瑰簲鐨勬潈闄愪互鍙婄敤鎴蜂俊鎭 + String uuid = (String) claims.get(Constants.LOGIN_USER_KEY); + String userKey = getTokenKey(uuid); + LoginUser user = redisCache.getCacheObject(userKey); + return user; + } + catch (Exception e) + { + log.error("鑾峰彇鐢ㄦ埛淇℃伅寮傚父'{}'", e.getMessage()); + } + } + return null; + } + + /** + * 璁剧疆鐢ㄦ埛韬唤淇℃伅 + */ + public void setLoginUser(LoginUser loginUser) + { + if (StringUtils.isNotNull(loginUser) && StringUtils.isNotEmpty(loginUser.getToken())) + { + refreshToken(loginUser); + } + } + + /** + * 鍒犻櫎鐢ㄦ埛韬唤淇℃伅 + */ + public void delLoginUser(String token) + { + if (StringUtils.isNotEmpty(token)) + { + String userKey = getTokenKey(token); + redisCache.deleteObject(userKey); + } + } + + /** + * 鍒涘缓浠ょ墝 + * + * @param loginUser 鐢ㄦ埛淇℃伅 + * @return 浠ょ墝 + */ + public String createToken(LoginUser loginUser) + { + String token = IdUtils.fastUUID(); + loginUser.setToken(token); + setUserAgent(loginUser); + refreshToken(loginUser); + + Map claims = new HashMap<>(); + claims.put(Constants.LOGIN_USER_KEY, token); + return createToken(claims); + } + + /** + * 楠岃瘉浠ょ墝鏈夋晥鏈燂紝鐩稿樊涓嶈冻20鍒嗛挓锛岃嚜鍔ㄥ埛鏂扮紦瀛 + * + * @param loginUser + * @return 浠ょ墝 + */ + public void verifyToken(LoginUser loginUser) + { + long expireTime = loginUser.getExpireTime(); + long currentTime = System.currentTimeMillis(); + if (expireTime - currentTime <= MILLIS_MINUTE_TEN) + { + refreshToken(loginUser); + } + } + + /** + * 鍒锋柊浠ょ墝鏈夋晥鏈 + * + * @param loginUser 鐧诲綍淇℃伅 + */ + public void refreshToken(LoginUser loginUser) + { + loginUser.setLoginTime(System.currentTimeMillis()); + loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE); + // 鏍规嵁uuid灏唋oginUser缂撳瓨 + String userKey = getTokenKey(loginUser.getToken()); + redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES); + } + + /** + * 璁剧疆鐢ㄦ埛浠g悊淇℃伅 + * + * @param loginUser 鐧诲綍淇℃伅 + */ + public void setUserAgent(LoginUser loginUser) + { + UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); + String ip = IpUtils.getIpAddr(); + loginUser.setIpaddr(ip); + loginUser.setLoginLocation(AddressUtils.getRealAddressByIP(ip)); + loginUser.setBrowser(userAgent.getBrowser().getName()); + loginUser.setOs(userAgent.getOperatingSystem().getName()); + } + + /** + * 浠庢暟鎹0鏄庣敓鎴愪护鐗 + * + * @param claims 鏁版嵁澹版槑 + * @return 浠ょ墝 + */ + private String createToken(Map claims) + { + String token = Jwts.builder() + .setClaims(claims) + .signWith(SignatureAlgorithm.HS512, secret).compact(); + return token; + } + + /** + * 浠庝护鐗屼腑鑾峰彇鏁版嵁澹版槑 + * + * @param token 浠ょ墝 + * @return 鏁版嵁澹版槑 + */ + private Claims parseToken(String token) + { + return Jwts.parser() + .setSigningKey(secret) + .parseClaimsJws(token) + .getBody(); + } + + /** + * 浠庝护鐗屼腑鑾峰彇鐢ㄦ埛鍚 + * + * @param token 浠ょ墝 + * @return 鐢ㄦ埛鍚 + */ + public String getUsernameFromToken(String token) + { + Claims claims = parseToken(token); + return claims.getSubject(); + } + + /** + * 鑾峰彇璇锋眰token + * + * @param request + * @return token + */ + private String getToken(HttpServletRequest request) + { + String token = request.getHeader(header); + if (StringUtils.isNotEmpty(token) && token.startsWith(Constants.TOKEN_PREFIX)) + { + token = token.replace(Constants.TOKEN_PREFIX, ""); + } + return token; + } + + private String getTokenKey(String uuid) + { + return CacheConstants.LOGIN_TOKEN_KEY + uuid; + } +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..f527aa80875d054b89aa7583cb4b80dd8a508ffc --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java @@ -0,0 +1,66 @@ +package com.ruoyi.framework.web.service; + +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.enums.UserStatus; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.MessageUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.service.ISysUserService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; + +/** + * 鐢ㄦ埛楠岃瘉澶勭悊 + * + * @author ruoyi + */ +@Service +public class UserDetailsServiceImpl implements UserDetailsService +{ + private static final Logger log = LoggerFactory.getLogger(UserDetailsServiceImpl.class); + + @Autowired + private ISysUserService userService; + + @Autowired + private SysPasswordService passwordService; + + @Autowired + private SysPermissionService permissionService; + + @Override + public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException + { + SysUser user = userService.selectUserByUserName(username); + if (StringUtils.isNull(user)) + { + log.info("鐧诲綍鐢ㄦ埛锛歿} 涓嶅瓨鍦.", username); + throw new ServiceException(MessageUtils.message("user.not.exists")); + } + else if (UserStatus.DELETED.getCode().equals(user.getDelFlag())) + { + log.info("鐧诲綍鐢ㄦ埛锛歿} 宸茶鍒犻櫎.", username); + throw new ServiceException(MessageUtils.message("user.password.delete")); + } + else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) + { + log.info("鐧诲綍鐢ㄦ埛锛歿} 宸茶鍋滅敤.", username); + throw new ServiceException(MessageUtils.message("user.blocked")); + } + + passwordService.validate(user); + + return createLoginUser(user); + } + + public UserDetails createLoginUser(SysUser user) + { + return new LoginUser(user.getUserId(), user.getDeptId(),user.getEvaluateAgencyId(), user.getStudyCenterId(), user, permissionService.getMenuPermission(user)); + } +} diff --git a/ruoyi-generator/pom.xml b/ruoyi-generator/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..8e47f0c7e70982aec3df4679d1f40a373bf06282 --- /dev/null +++ b/ruoyi-generator/pom.xml @@ -0,0 +1,40 @@ + + + + ruoyi + com.ruoyi + 3.8.8 + + 4.0.0 + + ruoyi-generator + + + generator浠g爜鐢熸垚 + + + + + + + org.apache.velocity + velocity-engine-core + + + + + com.ruoyi + ruoyi-common + + + + + com.alibaba + druid-spring-boot-starter + + + + + \ No newline at end of file diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/config/GenConfig.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/config/GenConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..cc4cd14c83a69a064debb30731de462d51d11972 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/config/GenConfig.java @@ -0,0 +1,73 @@ +package com.ruoyi.generator.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.PropertySource; +import org.springframework.stereotype.Component; + +/** + * 璇诲彇浠g爜鐢熸垚鐩稿叧閰嶇疆 + * + * @author ruoyi + */ +@Component +@ConfigurationProperties(prefix = "gen") +@PropertySource(value = { "classpath:generator.yml" }) +public class GenConfig +{ + /** 浣滆 */ + public static String author; + + /** 鐢熸垚鍖呰矾寰 */ + public static String packageName; + + /** 鑷姩鍘婚櫎琛ㄥ墠缂锛岄粯璁ゆ槸false */ + public static boolean autoRemovePre; + + /** 琛ㄥ墠缂(绫诲悕涓嶄細鍖呭惈琛ㄥ墠缂) */ + public static String tablePrefix; + + public static String getAuthor() + { + return author; + } + + @Value("${author}") + public void setAuthor(String author) + { + GenConfig.author = author; + } + + public static String getPackageName() + { + return packageName; + } + + @Value("${packageName}") + public void setPackageName(String packageName) + { + GenConfig.packageName = packageName; + } + + public static boolean getAutoRemovePre() + { + return autoRemovePre; + } + + @Value("${autoRemovePre}") + public void setAutoRemovePre(boolean autoRemovePre) + { + GenConfig.autoRemovePre = autoRemovePre; + } + + public static String getTablePrefix() + { + return tablePrefix; + } + + @Value("${tablePrefix}") + public void setTablePrefix(String tablePrefix) + { + GenConfig.tablePrefix = tablePrefix; + } +} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java new file mode 100644 index 0000000000000000000000000000000000000000..b320853e45c1a6eb56673380be8cb16f17f18c85 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/controller/GenController.java @@ -0,0 +1,258 @@ +package com.ruoyi.generator.controller; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.servlet.http.HttpServletResponse; +import org.apache.commons.io.IOUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.alibaba.druid.DbType; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.sql.SqlUtil; +import com.ruoyi.generator.domain.GenTable; +import com.ruoyi.generator.domain.GenTableColumn; +import com.ruoyi.generator.service.IGenTableColumnService; +import com.ruoyi.generator.service.IGenTableService; + +/** + * 浠g爜鐢熸垚 鎿嶄綔澶勭悊 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/tool/gen") +public class GenController extends BaseController +{ + @Autowired + private IGenTableService genTableService; + + @Autowired + private IGenTableColumnService genTableColumnService; + + /** + * 鏌ヨ浠g爜鐢熸垚鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:list')") + @GetMapping("/list") + public TableDataInfo genList(GenTable genTable) + { + startPage(); + List list = genTableService.selectGenTableList(genTable); + return getDataTable(list); + } + + /** + * 淇敼浠g爜鐢熸垚涓氬姟 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:query')") + @GetMapping(value = "/{tableId}") + public AjaxResult getInfo(@PathVariable Long tableId) + { + GenTable table = genTableService.selectGenTableById(tableId); + List tables = genTableService.selectGenTableAll(); + List list = genTableColumnService.selectGenTableColumnListByTableId(tableId); + Map map = new HashMap(); + map.put("info", table); + map.put("rows", list); + map.put("tables", tables); + return success(map); + } + + /** + * 鏌ヨ鏁版嵁搴撳垪琛 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:list')") + @GetMapping("/db/list") + public TableDataInfo dataList(GenTable genTable) + { + startPage(); + List list = genTableService.selectDbTableList(genTable); + return getDataTable(list); + } + + /** + * 鏌ヨ鏁版嵁琛ㄥ瓧娈靛垪琛 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:list')") + @GetMapping(value = "/column/{tableId}") + public TableDataInfo columnList(Long tableId) + { + TableDataInfo dataInfo = new TableDataInfo(); + List list = genTableColumnService.selectGenTableColumnListByTableId(tableId); + dataInfo.setRows(list); + dataInfo.setTotal(list.size()); + return dataInfo; + } + + /** + * 瀵煎叆琛ㄧ粨鏋勶紙淇濆瓨锛 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:import')") + @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.IMPORT) + @PostMapping("/importTable") + public AjaxResult importTableSave(String tables) + { + String[] tableNames = Convert.toStrArray(tables); + // 鏌ヨ琛ㄤ俊鎭 + List tableList = genTableService.selectDbTableListByNames(tableNames); + genTableService.importGenTable(tableList, SecurityUtils.getUsername()); + return success(); + } + + /** + * 鍒涘缓琛ㄧ粨鏋勶紙淇濆瓨锛 + */ + @PreAuthorize("@ss.hasRole('admin')") + @Log(title = "鍒涘缓琛", businessType = BusinessType.OTHER) + @PostMapping("/createTable") + public AjaxResult createTableSave(String sql) + { + try + { + SqlUtil.filterKeyword(sql); + List sqlStatements = SQLUtils.parseStatements(sql, DbType.mysql); + List tableNames = new ArrayList<>(); + for (SQLStatement sqlStatement : sqlStatements) + { + if (sqlStatement instanceof MySqlCreateTableStatement) + { + MySqlCreateTableStatement createTableStatement = (MySqlCreateTableStatement) sqlStatement; + if (genTableService.createTable(createTableStatement.toString())) + { + String tableName = createTableStatement.getTableName().replaceAll("`", ""); + tableNames.add(tableName); + } + } + } + List tableList = genTableService.selectDbTableListByNames(tableNames.toArray(new String[tableNames.size()])); + String operName = SecurityUtils.getUsername(); + genTableService.importGenTable(tableList, operName); + return AjaxResult.success(); + } + catch (Exception e) + { + logger.error(e.getMessage(), e); + return AjaxResult.error("鍒涘缓琛ㄧ粨鏋勫紓甯"); + } + } + + /** + * 淇敼淇濆瓨浠g爜鐢熸垚涓氬姟 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:edit')") + @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult editSave(@Validated @RequestBody GenTable genTable) + { + genTableService.validateEdit(genTable); + genTableService.updateGenTable(genTable); + return success(); + } + + /** + * 鍒犻櫎浠g爜鐢熸垚 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:remove')") + @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.DELETE) + @DeleteMapping("/{tableIds}") + public AjaxResult remove(@PathVariable Long[] tableIds) + { + genTableService.deleteGenTableByIds(tableIds); + return success(); + } + + /** + * 棰勮浠g爜 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:preview')") + @GetMapping("/preview/{tableId}") + public AjaxResult preview(@PathVariable("tableId") Long tableId) throws IOException + { + Map dataMap = genTableService.previewCode(tableId); + return success(dataMap); + } + + /** + * 鐢熸垚浠g爜锛堜笅杞芥柟寮忥級 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:code')") + @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.GENCODE) + @GetMapping("/download/{tableName}") + public void download(HttpServletResponse response, @PathVariable("tableName") String tableName) throws IOException + { + byte[] data = genTableService.downloadCode(tableName); + genCode(response, data); + } + + /** + * 鐢熸垚浠g爜锛堣嚜瀹氫箟璺緞锛 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:code')") + @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.GENCODE) + @GetMapping("/genCode/{tableName}") + public AjaxResult genCode(@PathVariable("tableName") String tableName) + { + genTableService.generatorCode(tableName); + return success(); + } + + /** + * 鍚屾鏁版嵁搴 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:edit')") + @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.UPDATE) + @GetMapping("/synchDb/{tableName}") + public AjaxResult synchDb(@PathVariable("tableName") String tableName) + { + genTableService.synchDb(tableName); + return success(); + } + + /** + * 鎵归噺鐢熸垚浠g爜 + */ + @PreAuthorize("@ss.hasPermi('tool:gen:code')") + @Log(title = "浠g爜鐢熸垚", businessType = BusinessType.GENCODE) + @GetMapping("/batchGenCode") + public void batchGenCode(HttpServletResponse response, String tables) throws IOException + { + String[] tableNames = Convert.toStrArray(tables); + byte[] data = genTableService.downloadCode(tableNames); + genCode(response, data); + } + + /** + * 鐢熸垚zip鏂囦欢 + */ + private void genCode(HttpServletResponse response, byte[] data) throws IOException + { + response.reset(); + response.addHeader("Access-Control-Allow-Origin", "*"); + response.addHeader("Access-Control-Expose-Headers", "Content-Disposition"); + response.setHeader("Content-Disposition", "attachment; filename=\"ruoyi.zip\""); + response.addHeader("Content-Length", "" + data.length); + response.setContentType("application/octet-stream; charset=UTF-8"); + IOUtils.write(data, response.getOutputStream()); + } +} \ No newline at end of file diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java new file mode 100644 index 0000000000000000000000000000000000000000..50d834cb6c5102e41af2c2d1ed82a7941fa0ed80 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTable.java @@ -0,0 +1,385 @@ +package com.ruoyi.generator.domain; + +import java.util.List; +import javax.validation.Valid; +import javax.validation.constraints.NotBlank; +import org.apache.commons.lang3.ArrayUtils; +import com.ruoyi.common.constant.GenConstants; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.utils.StringUtils; + +/** + * 涓氬姟琛 gen_table + * + * @author ruoyi + */ +public class GenTable extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 缂栧彿 */ + private Long tableId; + + /** 琛ㄥ悕绉 */ + @NotBlank(message = "琛ㄥ悕绉颁笉鑳戒负绌") + private String tableName; + + /** 琛ㄦ弿杩 */ + @NotBlank(message = "琛ㄦ弿杩颁笉鑳戒负绌") + private String tableComment; + + /** 鍏宠仈鐖惰〃鐨勮〃鍚 */ + private String subTableName; + + /** 鏈〃鍏宠仈鐖惰〃鐨勫閿悕 */ + private String subTableFkName; + + /** 瀹炰綋绫诲悕绉(棣栧瓧姣嶅ぇ鍐) */ + @NotBlank(message = "瀹炰綋绫诲悕绉颁笉鑳戒负绌") + private String className; + + /** 浣跨敤鐨勬ā鏉匡紙crud鍗曡〃鎿嶄綔 tree鏍戣〃鎿嶄綔 sub涓诲瓙琛ㄦ搷浣滐級 */ + private String tplCategory; + + /** 鍓嶇绫诲瀷锛坋lement-ui妯$増 element-plus妯$増锛 */ + private String tplWebType; + + /** 鐢熸垚鍖呰矾寰 */ + @NotBlank(message = "鐢熸垚鍖呰矾寰勪笉鑳戒负绌") + private String packageName; + + /** 鐢熸垚妯″潡鍚 */ + @NotBlank(message = "鐢熸垚妯″潡鍚嶄笉鑳戒负绌") + private String moduleName; + + /** 鐢熸垚涓氬姟鍚 */ + @NotBlank(message = "鐢熸垚涓氬姟鍚嶄笉鑳戒负绌") + private String businessName; + + /** 鐢熸垚鍔熻兘鍚 */ + @NotBlank(message = "鐢熸垚鍔熻兘鍚嶄笉鑳戒负绌") + private String functionName; + + /** 鐢熸垚浣滆 */ + @NotBlank(message = "浣滆呬笉鑳戒负绌") + private String functionAuthor; + + /** 鐢熸垚浠g爜鏂瑰紡锛0zip鍘嬬缉鍖 1鑷畾涔夎矾寰勶級 */ + private String genType; + + /** 鐢熸垚璺緞锛堜笉濉粯璁ら」鐩矾寰勶級 */ + private String genPath; + + /** 涓婚敭淇℃伅 */ + private GenTableColumn pkColumn; + + /** 瀛愯〃淇℃伅 */ + private GenTable subTable; + + /** 琛ㄥ垪淇℃伅 */ + @Valid + private List columns; + + /** 鍏跺畠鐢熸垚閫夐」 */ + private String options; + + /** 鏍戠紪鐮佸瓧娈 */ + private String treeCode; + + /** 鏍戠埗缂栫爜瀛楁 */ + private String treeParentCode; + + /** 鏍戝悕绉板瓧娈 */ + private String treeName; + + /** 涓婄骇鑿滃崟ID瀛楁 */ + private String parentMenuId; + + /** 涓婄骇鑿滃崟鍚嶇О瀛楁 */ + private String parentMenuName; + + public Long getTableId() + { + return tableId; + } + + public void setTableId(Long tableId) + { + this.tableId = tableId; + } + + public String getTableName() + { + return tableName; + } + + public void setTableName(String tableName) + { + this.tableName = tableName; + } + + public String getTableComment() + { + return tableComment; + } + + public void setTableComment(String tableComment) + { + this.tableComment = tableComment; + } + + public String getSubTableName() + { + return subTableName; + } + + public void setSubTableName(String subTableName) + { + this.subTableName = subTableName; + } + + public String getSubTableFkName() + { + return subTableFkName; + } + + public void setSubTableFkName(String subTableFkName) + { + this.subTableFkName = subTableFkName; + } + + public String getClassName() + { + return className; + } + + public void setClassName(String className) + { + this.className = className; + } + + public String getTplCategory() + { + return tplCategory; + } + + public void setTplCategory(String tplCategory) + { + this.tplCategory = tplCategory; + } + + public String getTplWebType() + { + return tplWebType; + } + + public void setTplWebType(String tplWebType) + { + this.tplWebType = tplWebType; + } + + public String getPackageName() + { + return packageName; + } + + public void setPackageName(String packageName) + { + this.packageName = packageName; + } + + public String getModuleName() + { + return moduleName; + } + + public void setModuleName(String moduleName) + { + this.moduleName = moduleName; + } + + public String getBusinessName() + { + return businessName; + } + + public void setBusinessName(String businessName) + { + this.businessName = businessName; + } + + public String getFunctionName() + { + return functionName; + } + + public void setFunctionName(String functionName) + { + this.functionName = functionName; + } + + public String getFunctionAuthor() + { + return functionAuthor; + } + + public void setFunctionAuthor(String functionAuthor) + { + this.functionAuthor = functionAuthor; + } + + public String getGenType() + { + return genType; + } + + public void setGenType(String genType) + { + this.genType = genType; + } + + public String getGenPath() + { + return genPath; + } + + public void setGenPath(String genPath) + { + this.genPath = genPath; + } + + public GenTableColumn getPkColumn() + { + return pkColumn; + } + + public void setPkColumn(GenTableColumn pkColumn) + { + this.pkColumn = pkColumn; + } + + public GenTable getSubTable() + { + return subTable; + } + + public void setSubTable(GenTable subTable) + { + this.subTable = subTable; + } + + public List getColumns() + { + return columns; + } + + public void setColumns(List columns) + { + this.columns = columns; + } + + public String getOptions() + { + return options; + } + + public void setOptions(String options) + { + this.options = options; + } + + public String getTreeCode() + { + return treeCode; + } + + public void setTreeCode(String treeCode) + { + this.treeCode = treeCode; + } + + public String getTreeParentCode() + { + return treeParentCode; + } + + public void setTreeParentCode(String treeParentCode) + { + this.treeParentCode = treeParentCode; + } + + public String getTreeName() + { + return treeName; + } + + public void setTreeName(String treeName) + { + this.treeName = treeName; + } + + public String getParentMenuId() + { + return parentMenuId; + } + + public void setParentMenuId(String parentMenuId) + { + this.parentMenuId = parentMenuId; + } + + public String getParentMenuName() + { + return parentMenuName; + } + + public void setParentMenuName(String parentMenuName) + { + this.parentMenuName = parentMenuName; + } + + public boolean isSub() + { + return isSub(this.tplCategory); + } + + public static boolean isSub(String tplCategory) + { + return tplCategory != null && StringUtils.equals(GenConstants.TPL_SUB, tplCategory); + } + + public boolean isTree() + { + return isTree(this.tplCategory); + } + + public static boolean isTree(String tplCategory) + { + return tplCategory != null && StringUtils.equals(GenConstants.TPL_TREE, tplCategory); + } + + public boolean isCrud() + { + return isCrud(this.tplCategory); + } + + public static boolean isCrud(String tplCategory) + { + return tplCategory != null && StringUtils.equals(GenConstants.TPL_CRUD, tplCategory); + } + + public boolean isSuperColumn(String javaField) + { + return isSuperColumn(this.tplCategory, javaField); + } + + public static boolean isSuperColumn(String tplCategory, String javaField) + { + if (isTree(tplCategory)) + { + return StringUtils.equalsAnyIgnoreCase(javaField, + ArrayUtils.addAll(GenConstants.TREE_ENTITY, GenConstants.BASE_ENTITY)); + } + return StringUtils.equalsAnyIgnoreCase(javaField, GenConstants.BASE_ENTITY); + } +} \ No newline at end of file diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java new file mode 100644 index 0000000000000000000000000000000000000000..d1733b645c7ed7c6285712189b3f53171d35858d --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/domain/GenTableColumn.java @@ -0,0 +1,373 @@ +package com.ruoyi.generator.domain; + +import javax.validation.constraints.NotBlank; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.utils.StringUtils; + +/** + * 浠g爜鐢熸垚涓氬姟瀛楁琛 gen_table_column + * + * @author ruoyi + */ +public class GenTableColumn extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 缂栧彿 */ + private Long columnId; + + /** 褰掑睘琛ㄧ紪鍙 */ + private Long tableId; + + /** 鍒楀悕绉 */ + private String columnName; + + /** 鍒楁弿杩 */ + private String columnComment; + + /** 鍒楃被鍨 */ + private String columnType; + + /** JAVA绫诲瀷 */ + private String javaType; + + /** JAVA瀛楁鍚 */ + @NotBlank(message = "Java灞炴т笉鑳戒负绌") + private String javaField; + + /** 鏄惁涓婚敭锛1鏄級 */ + private String isPk; + + /** 鏄惁鑷锛1鏄級 */ + private String isIncrement; + + /** 鏄惁蹇呭~锛1鏄級 */ + private String isRequired; + + /** 鏄惁涓烘彃鍏ュ瓧娈碉紙1鏄級 */ + private String isInsert; + + /** 鏄惁缂栬緫瀛楁锛1鏄級 */ + private String isEdit; + + /** 鏄惁鍒楄〃瀛楁锛1鏄級 */ + private String isList; + + /** 鏄惁鏌ヨ瀛楁锛1鏄級 */ + private String isQuery; + + /** 鏌ヨ鏂瑰紡锛圗Q绛変簬銆丯E涓嶇瓑浜庛丟T澶т簬銆丩T灏忎簬銆丩IKE妯$硦銆丅ETWEEN鑼冨洿锛 */ + private String queryType; + + /** 鏄剧ず绫诲瀷锛坕nput鏂囨湰妗嗐乼extarea鏂囨湰鍩熴乻elect涓嬫媺妗嗐乧heckbox澶嶉夋銆乺adio鍗曢夋銆乨atetime鏃ユ湡鎺т欢銆乮mage鍥剧墖涓婁紶鎺т欢銆乽pload鏂囦欢涓婁紶鎺т欢銆乪ditor瀵屾枃鏈帶浠讹級 */ + private String htmlType; + + /** 瀛楀吀绫诲瀷 */ + private String dictType; + + /** 鎺掑簭 */ + private Integer sort; + + public void setColumnId(Long columnId) + { + this.columnId = columnId; + } + + public Long getColumnId() + { + return columnId; + } + + public void setTableId(Long tableId) + { + this.tableId = tableId; + } + + public Long getTableId() + { + return tableId; + } + + public void setColumnName(String columnName) + { + this.columnName = columnName; + } + + public String getColumnName() + { + return columnName; + } + + public void setColumnComment(String columnComment) + { + this.columnComment = columnComment; + } + + public String getColumnComment() + { + return columnComment; + } + + public void setColumnType(String columnType) + { + this.columnType = columnType; + } + + public String getColumnType() + { + return columnType; + } + + public void setJavaType(String javaType) + { + this.javaType = javaType; + } + + public String getJavaType() + { + return javaType; + } + + public void setJavaField(String javaField) + { + this.javaField = javaField; + } + + public String getJavaField() + { + return javaField; + } + + public String getCapJavaField() + { + return StringUtils.capitalize(javaField); + } + + public void setIsPk(String isPk) + { + this.isPk = isPk; + } + + public String getIsPk() + { + return isPk; + } + + public boolean isPk() + { + return isPk(this.isPk); + } + + public boolean isPk(String isPk) + { + return isPk != null && StringUtils.equals("1", isPk); + } + + public String getIsIncrement() + { + return isIncrement; + } + + public void setIsIncrement(String isIncrement) + { + this.isIncrement = isIncrement; + } + + public boolean isIncrement() + { + return isIncrement(this.isIncrement); + } + + public boolean isIncrement(String isIncrement) + { + return isIncrement != null && StringUtils.equals("1", isIncrement); + } + + public void setIsRequired(String isRequired) + { + this.isRequired = isRequired; + } + + public String getIsRequired() + { + return isRequired; + } + + public boolean isRequired() + { + return isRequired(this.isRequired); + } + + public boolean isRequired(String isRequired) + { + return isRequired != null && StringUtils.equals("1", isRequired); + } + + public void setIsInsert(String isInsert) + { + this.isInsert = isInsert; + } + + public String getIsInsert() + { + return isInsert; + } + + public boolean isInsert() + { + return isInsert(this.isInsert); + } + + public boolean isInsert(String isInsert) + { + return isInsert != null && StringUtils.equals("1", isInsert); + } + + public void setIsEdit(String isEdit) + { + this.isEdit = isEdit; + } + + public String getIsEdit() + { + return isEdit; + } + + public boolean isEdit() + { + return isInsert(this.isEdit); + } + + public boolean isEdit(String isEdit) + { + return isEdit != null && StringUtils.equals("1", isEdit); + } + + public void setIsList(String isList) + { + this.isList = isList; + } + + public String getIsList() + { + return isList; + } + + public boolean isList() + { + return isList(this.isList); + } + + public boolean isList(String isList) + { + return isList != null && StringUtils.equals("1", isList); + } + + public void setIsQuery(String isQuery) + { + this.isQuery = isQuery; + } + + public String getIsQuery() + { + return isQuery; + } + + public boolean isQuery() + { + return isQuery(this.isQuery); + } + + public boolean isQuery(String isQuery) + { + return isQuery != null && StringUtils.equals("1", isQuery); + } + + public void setQueryType(String queryType) + { + this.queryType = queryType; + } + + public String getQueryType() + { + return queryType; + } + + public String getHtmlType() + { + return htmlType; + } + + public void setHtmlType(String htmlType) + { + this.htmlType = htmlType; + } + + public void setDictType(String dictType) + { + this.dictType = dictType; + } + + public String getDictType() + { + return dictType; + } + + public void setSort(Integer sort) + { + this.sort = sort; + } + + public Integer getSort() + { + return sort; + } + + public boolean isSuperColumn() + { + return isSuperColumn(this.javaField); + } + + public static boolean isSuperColumn(String javaField) + { + return StringUtils.equalsAnyIgnoreCase(javaField, + // BaseEntity + "createBy", "createTime", "updateBy", "updateTime", "remark", + // TreeEntity + "parentName", "parentId", "orderNum", "ancestors"); + } + + public boolean isUsableColumn() + { + return isUsableColumn(javaField); + } + + public static boolean isUsableColumn(String javaField) + { + // isSuperColumn()涓殑鍚嶅崟鐢ㄤ簬閬垮厤鐢熸垚澶氫綑Domain灞炴э紝鑻ユ煇浜涘睘鎬у湪鐢熸垚椤甸潰鏃堕渶瑕佺敤鍒颁笉鑳藉拷鐣ワ紝鍒欐斁鍦ㄦ澶勭櫧鍚嶅崟 + return StringUtils.equalsAnyIgnoreCase(javaField, "parentId", "orderNum", "remark"); + } + + public String readConverterExp() + { + String remarks = StringUtils.substringBetween(this.columnComment, "锛", "锛"); + StringBuffer sb = new StringBuffer(); + if (StringUtils.isNotEmpty(remarks)) + { + for (String value : remarks.split(" ")) + { + if (StringUtils.isNotEmpty(value)) + { + Object startStr = value.subSequence(0, 1); + String endStr = value.substring(1); + sb.append("").append(startStr).append("=").append(endStr).append(","); + } + } + return sb.deleteCharAt(sb.length() - 1).toString(); + } + else + { + return this.columnComment; + } + } +} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..951e16670f68a37dce4545cf9b94d6e4d0c4567e --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableColumnMapper.java @@ -0,0 +1,60 @@ +package com.ruoyi.generator.mapper; + +import java.util.List; +import com.ruoyi.generator.domain.GenTableColumn; + +/** + * 涓氬姟瀛楁 鏁版嵁灞 + * + * @author ruoyi + */ +public interface GenTableColumnMapper +{ + /** + * 鏍规嵁琛ㄥ悕绉版煡璇㈠垪淇℃伅 + * + * @param tableName 琛ㄥ悕绉 + * @return 鍒椾俊鎭 + */ + public List selectDbTableColumnsByName(String tableName); + + /** + * 鏌ヨ涓氬姟瀛楁鍒楄〃 + * + * @param tableId 涓氬姟瀛楁缂栧彿 + * @return 涓氬姟瀛楁闆嗗悎 + */ + public List selectGenTableColumnListByTableId(Long tableId); + + /** + * 鏂板涓氬姟瀛楁 + * + * @param genTableColumn 涓氬姟瀛楁淇℃伅 + * @return 缁撴灉 + */ + public int insertGenTableColumn(GenTableColumn genTableColumn); + + /** + * 淇敼涓氬姟瀛楁 + * + * @param genTableColumn 涓氬姟瀛楁淇℃伅 + * @return 缁撴灉 + */ + public int updateGenTableColumn(GenTableColumn genTableColumn); + + /** + * 鍒犻櫎涓氬姟瀛楁 + * + * @param genTableColumns 鍒楁暟鎹 + * @return 缁撴灉 + */ + public int deleteGenTableColumns(List genTableColumns); + + /** + * 鎵归噺鍒犻櫎涓氬姟瀛楁 + * + * @param ids 闇瑕佸垹闄ょ殑鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteGenTableColumnByIds(Long[] ids); +} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..937656dc92699db69811ac2507098a0c7e5b7173 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/mapper/GenTableMapper.java @@ -0,0 +1,91 @@ +package com.ruoyi.generator.mapper; + +import java.util.List; +import com.ruoyi.generator.domain.GenTable; + +/** + * 涓氬姟 鏁版嵁灞 + * + * @author ruoyi + */ +public interface GenTableMapper +{ + /** + * 鏌ヨ涓氬姟鍒楄〃 + * + * @param genTable 涓氬姟淇℃伅 + * @return 涓氬姟闆嗗悎 + */ + public List selectGenTableList(GenTable genTable); + + /** + * 鏌ヨ鎹簱鍒楄〃 + * + * @param genTable 涓氬姟淇℃伅 + * @return 鏁版嵁搴撹〃闆嗗悎 + */ + public List selectDbTableList(GenTable genTable); + + /** + * 鏌ヨ鎹簱鍒楄〃 + * + * @param tableNames 琛ㄥ悕绉扮粍 + * @return 鏁版嵁搴撹〃闆嗗悎 + */ + public List selectDbTableListByNames(String[] tableNames); + + /** + * 鏌ヨ鎵鏈夎〃淇℃伅 + * + * @return 琛ㄤ俊鎭泦鍚 + */ + public List selectGenTableAll(); + + /** + * 鏌ヨ琛↖D涓氬姟淇℃伅 + * + * @param id 涓氬姟ID + * @return 涓氬姟淇℃伅 + */ + public GenTable selectGenTableById(Long id); + + /** + * 鏌ヨ琛ㄥ悕绉颁笟鍔′俊鎭 + * + * @param tableName 琛ㄥ悕绉 + * @return 涓氬姟淇℃伅 + */ + public GenTable selectGenTableByName(String tableName); + + /** + * 鏂板涓氬姟 + * + * @param genTable 涓氬姟淇℃伅 + * @return 缁撴灉 + */ + public int insertGenTable(GenTable genTable); + + /** + * 淇敼涓氬姟 + * + * @param genTable 涓氬姟淇℃伅 + * @return 缁撴灉 + */ + public int updateGenTable(GenTable genTable); + + /** + * 鎵归噺鍒犻櫎涓氬姟 + * + * @param ids 闇瑕佸垹闄ょ殑鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteGenTableByIds(Long[] ids); + + /** + * 鍒涘缓琛 + * + * @param sql 琛ㄧ粨鏋 + * @return 缁撴灉 + */ + public int createTable(String sql); +} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableColumnServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableColumnServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..0679689d2febdae8dfbdc7aff39fafbd0cd72e42 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableColumnServiceImpl.java @@ -0,0 +1,68 @@ +package com.ruoyi.generator.service; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.generator.domain.GenTableColumn; +import com.ruoyi.generator.mapper.GenTableColumnMapper; + +/** + * 涓氬姟瀛楁 鏈嶅姟灞傚疄鐜 + * + * @author ruoyi + */ +@Service +public class GenTableColumnServiceImpl implements IGenTableColumnService +{ + @Autowired + private GenTableColumnMapper genTableColumnMapper; + + /** + * 鏌ヨ涓氬姟瀛楁鍒楄〃 + * + * @param tableId 涓氬姟瀛楁缂栧彿 + * @return 涓氬姟瀛楁闆嗗悎 + */ + @Override + public List selectGenTableColumnListByTableId(Long tableId) + { + return genTableColumnMapper.selectGenTableColumnListByTableId(tableId); + } + + /** + * 鏂板涓氬姟瀛楁 + * + * @param genTableColumn 涓氬姟瀛楁淇℃伅 + * @return 缁撴灉 + */ + @Override + public int insertGenTableColumn(GenTableColumn genTableColumn) + { + return genTableColumnMapper.insertGenTableColumn(genTableColumn); + } + + /** + * 淇敼涓氬姟瀛楁 + * + * @param genTableColumn 涓氬姟瀛楁淇℃伅 + * @return 缁撴灉 + */ + @Override + public int updateGenTableColumn(GenTableColumn genTableColumn) + { + return genTableColumnMapper.updateGenTableColumn(genTableColumn); + } + + /** + * 鍒犻櫎涓氬姟瀛楁瀵硅薄 + * + * @param ids 闇瑕佸垹闄ょ殑鏁版嵁ID + * @return 缁撴灉 + */ + @Override + public int deleteGenTableColumnByIds(String ids) + { + return genTableColumnMapper.deleteGenTableColumnByIds(Convert.toLongArray(ids)); + } +} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..3fb6383e6d055de2022f09dd84292e5c9d03a6c3 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/GenTableServiceImpl.java @@ -0,0 +1,531 @@ +package com.ruoyi.generator.service; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.StringWriter; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.apache.velocity.Template; +import org.apache.velocity.VelocityContext; +import org.apache.velocity.app.Velocity; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.constant.GenConstants; +import com.ruoyi.common.core.text.CharsetKit; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.generator.domain.GenTable; +import com.ruoyi.generator.domain.GenTableColumn; +import com.ruoyi.generator.mapper.GenTableColumnMapper; +import com.ruoyi.generator.mapper.GenTableMapper; +import com.ruoyi.generator.util.GenUtils; +import com.ruoyi.generator.util.VelocityInitializer; +import com.ruoyi.generator.util.VelocityUtils; + +/** + * 涓氬姟 鏈嶅姟灞傚疄鐜 + * + * @author ruoyi + */ +@Service +public class GenTableServiceImpl implements IGenTableService +{ + private static final Logger log = LoggerFactory.getLogger(GenTableServiceImpl.class); + + @Autowired + private GenTableMapper genTableMapper; + + @Autowired + private GenTableColumnMapper genTableColumnMapper; + + /** + * 鏌ヨ涓氬姟淇℃伅 + * + * @param id 涓氬姟ID + * @return 涓氬姟淇℃伅 + */ + @Override + public GenTable selectGenTableById(Long id) + { + GenTable genTable = genTableMapper.selectGenTableById(id); + setTableFromOptions(genTable); + return genTable; + } + + /** + * 鏌ヨ涓氬姟鍒楄〃 + * + * @param genTable 涓氬姟淇℃伅 + * @return 涓氬姟闆嗗悎 + */ + @Override + public List selectGenTableList(GenTable genTable) + { + return genTableMapper.selectGenTableList(genTable); + } + + /** + * 鏌ヨ鎹簱鍒楄〃 + * + * @param genTable 涓氬姟淇℃伅 + * @return 鏁版嵁搴撹〃闆嗗悎 + */ + @Override + public List selectDbTableList(GenTable genTable) + { + return genTableMapper.selectDbTableList(genTable); + } + + /** + * 鏌ヨ鎹簱鍒楄〃 + * + * @param tableNames 琛ㄥ悕绉扮粍 + * @return 鏁版嵁搴撹〃闆嗗悎 + */ + @Override + public List selectDbTableListByNames(String[] tableNames) + { + return genTableMapper.selectDbTableListByNames(tableNames); + } + + /** + * 鏌ヨ鎵鏈夎〃淇℃伅 + * + * @return 琛ㄤ俊鎭泦鍚 + */ + @Override + public List selectGenTableAll() + { + return genTableMapper.selectGenTableAll(); + } + + /** + * 淇敼涓氬姟 + * + * @param genTable 涓氬姟淇℃伅 + * @return 缁撴灉 + */ + @Override + @Transactional + public void updateGenTable(GenTable genTable) + { + String options = JSON.toJSONString(genTable.getParams()); + genTable.setOptions(options); + int row = genTableMapper.updateGenTable(genTable); + if (row > 0) + { + for (GenTableColumn cenTableColumn : genTable.getColumns()) + { + genTableColumnMapper.updateGenTableColumn(cenTableColumn); + } + } + } + + /** + * 鍒犻櫎涓氬姟瀵硅薄 + * + * @param tableIds 闇瑕佸垹闄ょ殑鏁版嵁ID + * @return 缁撴灉 + */ + @Override + @Transactional + public void deleteGenTableByIds(Long[] tableIds) + { + genTableMapper.deleteGenTableByIds(tableIds); + genTableColumnMapper.deleteGenTableColumnByIds(tableIds); + } + + /** + * 鍒涘缓琛 + * + * @param sql 鍒涘缓琛ㄨ鍙 + * @return 缁撴灉 + */ + @Override + public boolean createTable(String sql) + { + return genTableMapper.createTable(sql) == 0; + } + + /** + * 瀵煎叆琛ㄧ粨鏋 + * + * @param tableList 瀵煎叆琛ㄥ垪琛 + */ + @Override + @Transactional + public void importGenTable(List tableList, String operName) + { + try + { + for (GenTable table : tableList) + { + String tableName = table.getTableName(); + GenUtils.initTable(table, operName); + int row = genTableMapper.insertGenTable(table); + if (row > 0) + { + // 淇濆瓨鍒椾俊鎭 + List genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); + for (GenTableColumn column : genTableColumns) + { + GenUtils.initColumnField(column, table); + genTableColumnMapper.insertGenTableColumn(column); + } + } + } + } + catch (Exception e) + { + throw new ServiceException("瀵煎叆澶辫触锛" + e.getMessage()); + } + } + + /** + * 棰勮浠g爜 + * + * @param tableId 琛ㄧ紪鍙 + * @return 棰勮鏁版嵁鍒楄〃 + */ + @Override + public Map previewCode(Long tableId) + { + Map dataMap = new LinkedHashMap<>(); + // 鏌ヨ琛ㄤ俊鎭 + GenTable table = genTableMapper.selectGenTableById(tableId); + // 璁剧疆涓诲瓙琛ㄤ俊鎭 + setSubTable(table); + // 璁剧疆涓婚敭鍒椾俊鎭 + setPkColumn(table); + VelocityInitializer.initVelocity(); + + VelocityContext context = VelocityUtils.prepareContext(table); + + // 鑾峰彇妯℃澘鍒楄〃 + List templates = VelocityUtils.getTemplateList(table.getTplCategory(), table.getTplWebType()); + for (String template : templates) + { + // 娓叉煋妯℃澘 + StringWriter sw = new StringWriter(); + Template tpl = Velocity.getTemplate(template, Constants.UTF8); + tpl.merge(context, sw); + dataMap.put(template, sw.toString()); + } + return dataMap; + } + + /** + * 鐢熸垚浠g爜锛堜笅杞芥柟寮忥級 + * + * @param tableName 琛ㄥ悕绉 + * @return 鏁版嵁 + */ + @Override + public byte[] downloadCode(String tableName) + { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ZipOutputStream zip = new ZipOutputStream(outputStream); + generatorCode(tableName, zip); + IOUtils.closeQuietly(zip); + return outputStream.toByteArray(); + } + + /** + * 鐢熸垚浠g爜锛堣嚜瀹氫箟璺緞锛 + * + * @param tableName 琛ㄥ悕绉 + */ + @Override + public void generatorCode(String tableName) + { + // 鏌ヨ琛ㄤ俊鎭 + GenTable table = genTableMapper.selectGenTableByName(tableName); + // 璁剧疆涓诲瓙琛ㄤ俊鎭 + setSubTable(table); + // 璁剧疆涓婚敭鍒椾俊鎭 + setPkColumn(table); + + VelocityInitializer.initVelocity(); + + VelocityContext context = VelocityUtils.prepareContext(table); + + // 鑾峰彇妯℃澘鍒楄〃 + List templates = VelocityUtils.getTemplateList(table.getTplCategory(), table.getTplWebType()); + for (String template : templates) + { + if (!StringUtils.containsAny(template, "sql.vm", "api.js.vm", "index.vue.vm", "index-tree.vue.vm")) + { + // 娓叉煋妯℃澘 + StringWriter sw = new StringWriter(); + Template tpl = Velocity.getTemplate(template, Constants.UTF8); + tpl.merge(context, sw); + try + { + String path = getGenPath(table, template); + FileUtils.writeStringToFile(new File(path), sw.toString(), CharsetKit.UTF_8); + } + catch (IOException e) + { + throw new ServiceException("娓叉煋妯℃澘澶辫触锛岃〃鍚嶏細" + table.getTableName()); + } + } + } + } + + /** + * 鍚屾鏁版嵁搴 + * + * @param tableName 琛ㄥ悕绉 + */ + @Override + @Transactional + public void synchDb(String tableName) + { + GenTable table = genTableMapper.selectGenTableByName(tableName); + List tableColumns = table.getColumns(); + Map tableColumnMap = tableColumns.stream().collect(Collectors.toMap(GenTableColumn::getColumnName, Function.identity())); + + List dbTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); + if (StringUtils.isEmpty(dbTableColumns)) + { + throw new ServiceException("鍚屾鏁版嵁澶辫触锛屽師琛ㄧ粨鏋勪笉瀛樺湪"); + } + List dbTableColumnNames = dbTableColumns.stream().map(GenTableColumn::getColumnName).collect(Collectors.toList()); + + dbTableColumns.forEach(column -> { + GenUtils.initColumnField(column, table); + if (tableColumnMap.containsKey(column.getColumnName())) + { + GenTableColumn prevColumn = tableColumnMap.get(column.getColumnName()); + column.setColumnId(prevColumn.getColumnId()); + if (column.isList()) + { + // 濡傛灉鏄垪琛紝缁х画淇濈暀鏌ヨ鏂瑰紡/瀛楀吀绫诲瀷閫夐」 + column.setDictType(prevColumn.getDictType()); + column.setQueryType(prevColumn.getQueryType()); + } + if (StringUtils.isNotEmpty(prevColumn.getIsRequired()) && !column.isPk() + && (column.isInsert() || column.isEdit()) + && ((column.isUsableColumn()) || (!column.isSuperColumn()))) + { + // 濡傛灉鏄(鏂板/淇敼&闈炰富閿/闈炲拷鐣ュ強鐖跺睘鎬)锛岀户缁繚鐣欏繀濉/鏄剧ず绫诲瀷閫夐」 + column.setIsRequired(prevColumn.getIsRequired()); + column.setHtmlType(prevColumn.getHtmlType()); + } + genTableColumnMapper.updateGenTableColumn(column); + } + else + { + genTableColumnMapper.insertGenTableColumn(column); + } + }); + + List delColumns = tableColumns.stream().filter(column -> !dbTableColumnNames.contains(column.getColumnName())).collect(Collectors.toList()); + if (StringUtils.isNotEmpty(delColumns)) + { + genTableColumnMapper.deleteGenTableColumns(delColumns); + } + } + + /** + * 鎵归噺鐢熸垚浠g爜锛堜笅杞芥柟寮忥級 + * + * @param tableNames 琛ㄦ暟缁 + * @return 鏁版嵁 + */ + @Override + public byte[] downloadCode(String[] tableNames) + { + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); + ZipOutputStream zip = new ZipOutputStream(outputStream); + for (String tableName : tableNames) + { + generatorCode(tableName, zip); + } + IOUtils.closeQuietly(zip); + return outputStream.toByteArray(); + } + + /** + * 鏌ヨ琛ㄤ俊鎭苟鐢熸垚浠g爜 + */ + private void generatorCode(String tableName, ZipOutputStream zip) + { + // 鏌ヨ琛ㄤ俊鎭 + GenTable table = genTableMapper.selectGenTableByName(tableName); + // 璁剧疆涓诲瓙琛ㄤ俊鎭 + setSubTable(table); + // 璁剧疆涓婚敭鍒椾俊鎭 + setPkColumn(table); + + VelocityInitializer.initVelocity(); + + VelocityContext context = VelocityUtils.prepareContext(table); + + // 鑾峰彇妯℃澘鍒楄〃 + List templates = VelocityUtils.getTemplateList(table.getTplCategory(), table.getTplWebType()); + for (String template : templates) + { + // 娓叉煋妯℃澘 + StringWriter sw = new StringWriter(); + Template tpl = Velocity.getTemplate(template, Constants.UTF8); + tpl.merge(context, sw); + try + { + // 娣诲姞鍒皕ip + zip.putNextEntry(new ZipEntry(VelocityUtils.getFileName(template, table))); + IOUtils.write(sw.toString(), zip, Constants.UTF8); + IOUtils.closeQuietly(sw); + zip.flush(); + zip.closeEntry(); + } + catch (IOException e) + { + log.error("娓叉煋妯℃澘澶辫触锛岃〃鍚嶏細" + table.getTableName(), e); + } + } + } + + /** + * 淇敼淇濆瓨鍙傛暟鏍¢獙 + * + * @param genTable 涓氬姟淇℃伅 + */ + @Override + public void validateEdit(GenTable genTable) + { + if (GenConstants.TPL_TREE.equals(genTable.getTplCategory())) + { + String options = JSON.toJSONString(genTable.getParams()); + JSONObject paramsObj = JSON.parseObject(options); + if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_CODE))) + { + throw new ServiceException("鏍戠紪鐮佸瓧娈典笉鑳戒负绌"); + } + else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_PARENT_CODE))) + { + throw new ServiceException("鏍戠埗缂栫爜瀛楁涓嶈兘涓虹┖"); + } + else if (StringUtils.isEmpty(paramsObj.getString(GenConstants.TREE_NAME))) + { + throw new ServiceException("鏍戝悕绉板瓧娈典笉鑳戒负绌"); + } + else if (GenConstants.TPL_SUB.equals(genTable.getTplCategory())) + { + if (StringUtils.isEmpty(genTable.getSubTableName())) + { + throw new ServiceException("鍏宠仈瀛愯〃鐨勮〃鍚嶄笉鑳戒负绌"); + } + else if (StringUtils.isEmpty(genTable.getSubTableFkName())) + { + throw new ServiceException("瀛愯〃鍏宠仈鐨勫閿悕涓嶈兘涓虹┖"); + } + } + } + } + + /** + * 璁剧疆涓婚敭鍒椾俊鎭 + * + * @param table 涓氬姟琛ㄤ俊鎭 + */ + public void setPkColumn(GenTable table) + { + for (GenTableColumn column : table.getColumns()) + { + if (column.isPk()) + { + table.setPkColumn(column); + break; + } + } + if (StringUtils.isNull(table.getPkColumn())) + { + table.setPkColumn(table.getColumns().get(0)); + } + if (GenConstants.TPL_SUB.equals(table.getTplCategory())) + { + for (GenTableColumn column : table.getSubTable().getColumns()) + { + if (column.isPk()) + { + table.getSubTable().setPkColumn(column); + break; + } + } + if (StringUtils.isNull(table.getSubTable().getPkColumn())) + { + table.getSubTable().setPkColumn(table.getSubTable().getColumns().get(0)); + } + } + } + + /** + * 璁剧疆涓诲瓙琛ㄤ俊鎭 + * + * @param table 涓氬姟琛ㄤ俊鎭 + */ + public void setSubTable(GenTable table) + { + String subTableName = table.getSubTableName(); + if (StringUtils.isNotEmpty(subTableName)) + { + table.setSubTable(genTableMapper.selectGenTableByName(subTableName)); + } + } + + /** + * 璁剧疆浠g爜鐢熸垚鍏朵粬閫夐」鍊 + * + * @param genTable 璁剧疆鍚庣殑鐢熸垚瀵硅薄 + */ + public void setTableFromOptions(GenTable genTable) + { + JSONObject paramsObj = JSON.parseObject(genTable.getOptions()); + if (StringUtils.isNotNull(paramsObj)) + { + String treeCode = paramsObj.getString(GenConstants.TREE_CODE); + String treeParentCode = paramsObj.getString(GenConstants.TREE_PARENT_CODE); + String treeName = paramsObj.getString(GenConstants.TREE_NAME); + String parentMenuId = paramsObj.getString(GenConstants.PARENT_MENU_ID); + String parentMenuName = paramsObj.getString(GenConstants.PARENT_MENU_NAME); + + genTable.setTreeCode(treeCode); + genTable.setTreeParentCode(treeParentCode); + genTable.setTreeName(treeName); + genTable.setParentMenuId(parentMenuId); + genTable.setParentMenuName(parentMenuName); + } + } + + /** + * 鑾峰彇浠g爜鐢熸垚鍦板潃 + * + * @param table 涓氬姟琛ㄤ俊鎭 + * @param template 妯℃澘鏂囦欢璺緞 + * @return 鐢熸垚鍦板潃 + */ + public static String getGenPath(GenTable table, String template) + { + String genPath = table.getGenPath(); + if (StringUtils.equals(genPath, "/")) + { + return System.getProperty("user.dir") + File.separator + "src" + File.separator + VelocityUtils.getFileName(template, table); + } + return genPath + File.separator + VelocityUtils.getFileName(template, table); + } +} \ No newline at end of file diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableColumnService.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableColumnService.java new file mode 100644 index 0000000000000000000000000000000000000000..3037f707e485149668c2b415ac14a911c7f07f02 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableColumnService.java @@ -0,0 +1,44 @@ +package com.ruoyi.generator.service; + +import java.util.List; +import com.ruoyi.generator.domain.GenTableColumn; + +/** + * 涓氬姟瀛楁 鏈嶅姟灞 + * + * @author ruoyi + */ +public interface IGenTableColumnService +{ + /** + * 鏌ヨ涓氬姟瀛楁鍒楄〃 + * + * @param tableId 涓氬姟瀛楁缂栧彿 + * @return 涓氬姟瀛楁闆嗗悎 + */ + public List selectGenTableColumnListByTableId(Long tableId); + + /** + * 鏂板涓氬姟瀛楁 + * + * @param genTableColumn 涓氬姟瀛楁淇℃伅 + * @return 缁撴灉 + */ + public int insertGenTableColumn(GenTableColumn genTableColumn); + + /** + * 淇敼涓氬姟瀛楁 + * + * @param genTableColumn 涓氬姟瀛楁淇℃伅 + * @return 缁撴灉 + */ + public int updateGenTableColumn(GenTableColumn genTableColumn); + + /** + * 鍒犻櫎涓氬姟瀛楁淇℃伅 + * + * @param ids 闇瑕佸垹闄ょ殑鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteGenTableColumnByIds(String ids); +} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java new file mode 100644 index 0000000000000000000000000000000000000000..695426e913eceef5514c724b93374d843199a3fd --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/service/IGenTableService.java @@ -0,0 +1,130 @@ +package com.ruoyi.generator.service; + +import java.util.List; +import java.util.Map; +import com.ruoyi.generator.domain.GenTable; + +/** + * 涓氬姟 鏈嶅姟灞 + * + * @author ruoyi + */ +public interface IGenTableService +{ + /** + * 鏌ヨ涓氬姟鍒楄〃 + * + * @param genTable 涓氬姟淇℃伅 + * @return 涓氬姟闆嗗悎 + */ + public List selectGenTableList(GenTable genTable); + + /** + * 鏌ヨ鎹簱鍒楄〃 + * + * @param genTable 涓氬姟淇℃伅 + * @return 鏁版嵁搴撹〃闆嗗悎 + */ + public List selectDbTableList(GenTable genTable); + + /** + * 鏌ヨ鎹簱鍒楄〃 + * + * @param tableNames 琛ㄥ悕绉扮粍 + * @return 鏁版嵁搴撹〃闆嗗悎 + */ + public List selectDbTableListByNames(String[] tableNames); + + /** + * 鏌ヨ鎵鏈夎〃淇℃伅 + * + * @return 琛ㄤ俊鎭泦鍚 + */ + public List selectGenTableAll(); + + /** + * 鏌ヨ涓氬姟淇℃伅 + * + * @param id 涓氬姟ID + * @return 涓氬姟淇℃伅 + */ + public GenTable selectGenTableById(Long id); + + /** + * 淇敼涓氬姟 + * + * @param genTable 涓氬姟淇℃伅 + * @return 缁撴灉 + */ + public void updateGenTable(GenTable genTable); + + /** + * 鍒犻櫎涓氬姟淇℃伅 + * + * @param tableIds 闇瑕佸垹闄ょ殑琛ㄦ暟鎹甀D + * @return 缁撴灉 + */ + public void deleteGenTableByIds(Long[] tableIds); + + /** + * 鍒涘缓琛 + * + * @param sql 鍒涘缓琛ㄨ鍙 + * @return 缁撴灉 + */ + public boolean createTable(String sql); + + /** + * 瀵煎叆琛ㄧ粨鏋 + * + * @param tableList 瀵煎叆琛ㄥ垪琛 + * @param operName 鎿嶄綔浜哄憳 + */ + public void importGenTable(List tableList, String operName); + + /** + * 棰勮浠g爜 + * + * @param tableId 琛ㄧ紪鍙 + * @return 棰勮鏁版嵁鍒楄〃 + */ + public Map previewCode(Long tableId); + + /** + * 鐢熸垚浠g爜锛堜笅杞芥柟寮忥級 + * + * @param tableName 琛ㄥ悕绉 + * @return 鏁版嵁 + */ + public byte[] downloadCode(String tableName); + + /** + * 鐢熸垚浠g爜锛堣嚜瀹氫箟璺緞锛 + * + * @param tableName 琛ㄥ悕绉 + * @return 鏁版嵁 + */ + public void generatorCode(String tableName); + + /** + * 鍚屾鏁版嵁搴 + * + * @param tableName 琛ㄥ悕绉 + */ + public void synchDb(String tableName); + + /** + * 鎵归噺鐢熸垚浠g爜锛堜笅杞芥柟寮忥級 + * + * @param tableNames 琛ㄦ暟缁 + * @return 鏁版嵁 + */ + public byte[] downloadCode(String[] tableNames); + + /** + * 淇敼淇濆瓨鍙傛暟鏍¢獙 + * + * @param genTable 涓氬姟淇℃伅 + */ + public void validateEdit(GenTable genTable); +} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..8b6d8ef990ba25869894cf0be4ae5e08e6bf6628 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java @@ -0,0 +1,257 @@ +package com.ruoyi.generator.util; + +import java.util.Arrays; +import org.apache.commons.lang3.RegExUtils; +import com.ruoyi.common.constant.GenConstants; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.generator.config.GenConfig; +import com.ruoyi.generator.domain.GenTable; +import com.ruoyi.generator.domain.GenTableColumn; + +/** + * 浠g爜鐢熸垚鍣 宸ュ叿绫 + * + * @author ruoyi + */ +public class GenUtils +{ + /** + * 鍒濆鍖栬〃淇℃伅 + */ + public static void initTable(GenTable genTable, String operName) + { + genTable.setClassName(convertClassName(genTable.getTableName())); + genTable.setPackageName(GenConfig.getPackageName()); + genTable.setModuleName(getModuleName(GenConfig.getPackageName())); + genTable.setBusinessName(getBusinessName(genTable.getTableName())); + genTable.setFunctionName(replaceText(genTable.getTableComment())); + genTable.setFunctionAuthor(GenConfig.getAuthor()); + genTable.setCreateBy(operName); + } + + /** + * 鍒濆鍖栧垪灞炴у瓧娈 + */ + public static void initColumnField(GenTableColumn column, GenTable table) + { + String dataType = getDbType(column.getColumnType()); + String columnName = column.getColumnName(); + column.setTableId(table.getTableId()); + column.setCreateBy(table.getCreateBy()); + // 璁剧疆java瀛楁鍚 + column.setJavaField(StringUtils.toCamelCase(columnName)); + // 璁剧疆榛樿绫诲瀷 + column.setJavaType(GenConstants.TYPE_STRING); + column.setQueryType(GenConstants.QUERY_EQ); + + if (arraysContains(GenConstants.COLUMNTYPE_STR, dataType) || arraysContains(GenConstants.COLUMNTYPE_TEXT, dataType)) + { + // 瀛楃涓查暱搴﹁秴杩500璁剧疆涓烘枃鏈煙 + Integer columnLength = getColumnLength(column.getColumnType()); + String htmlType = columnLength >= 500 || arraysContains(GenConstants.COLUMNTYPE_TEXT, dataType) ? GenConstants.HTML_TEXTAREA : GenConstants.HTML_INPUT; + column.setHtmlType(htmlType); + } + else if (arraysContains(GenConstants.COLUMNTYPE_TIME, dataType)) + { + column.setJavaType(GenConstants.TYPE_DATE); + column.setHtmlType(GenConstants.HTML_DATETIME); + } + else if (arraysContains(GenConstants.COLUMNTYPE_NUMBER, dataType)) + { + column.setHtmlType(GenConstants.HTML_INPUT); + + // 濡傛灉鏄诞鐐瑰瀷 缁熶竴鐢˙igDecimal + String[] str = StringUtils.split(StringUtils.substringBetween(column.getColumnType(), "(", ")"), ","); + if (str != null && str.length == 2 && Integer.parseInt(str[1]) > 0) + { + column.setJavaType(GenConstants.TYPE_BIGDECIMAL); + } + // 濡傛灉鏄暣褰 + else if (str != null && str.length == 1 && Integer.parseInt(str[0]) <= 10) + { + column.setJavaType(GenConstants.TYPE_INTEGER); + } + // 闀挎暣褰 + else + { + column.setJavaType(GenConstants.TYPE_LONG); + } + } + + // 鎻掑叆瀛楁锛堥粯璁ゆ墍鏈夊瓧娈甸兘闇瑕佹彃鍏ワ級 + column.setIsInsert(GenConstants.REQUIRE); + + // 缂栬緫瀛楁 + if (!arraysContains(GenConstants.COLUMNNAME_NOT_EDIT, columnName) && !column.isPk()) + { + column.setIsEdit(GenConstants.REQUIRE); + } + // 鍒楄〃瀛楁 + if (!arraysContains(GenConstants.COLUMNNAME_NOT_LIST, columnName) && !column.isPk()) + { + column.setIsList(GenConstants.REQUIRE); + } + // 鏌ヨ瀛楁 + if (!arraysContains(GenConstants.COLUMNNAME_NOT_QUERY, columnName) && !column.isPk()) + { + column.setIsQuery(GenConstants.REQUIRE); + } + + // 鏌ヨ瀛楁绫诲瀷 + if (StringUtils.endsWithIgnoreCase(columnName, "name")) + { + column.setQueryType(GenConstants.QUERY_LIKE); + } + // 鐘舵佸瓧娈佃缃崟閫夋 + if (StringUtils.endsWithIgnoreCase(columnName, "status")) + { + column.setHtmlType(GenConstants.HTML_RADIO); + } + // 绫诲瀷&鎬у埆瀛楁璁剧疆涓嬫媺妗 + else if (StringUtils.endsWithIgnoreCase(columnName, "type") + || StringUtils.endsWithIgnoreCase(columnName, "sex")) + { + column.setHtmlType(GenConstants.HTML_SELECT); + } + // 鍥剧墖瀛楁璁剧疆鍥剧墖涓婁紶鎺т欢 + else if (StringUtils.endsWithIgnoreCase(columnName, "image")) + { + column.setHtmlType(GenConstants.HTML_IMAGE_UPLOAD); + } + // 鏂囦欢瀛楁璁剧疆鏂囦欢涓婁紶鎺т欢 + else if (StringUtils.endsWithIgnoreCase(columnName, "file")) + { + column.setHtmlType(GenConstants.HTML_FILE_UPLOAD); + } + // 鍐呭瀛楁璁剧疆瀵屾枃鏈帶浠 + else if (StringUtils.endsWithIgnoreCase(columnName, "content")) + { + column.setHtmlType(GenConstants.HTML_EDITOR); + } + } + + /** + * 鏍¢獙鏁扮粍鏄惁鍖呭惈鎸囧畾鍊 + * + * @param arr 鏁扮粍 + * @param targetValue 鍊 + * @return 鏄惁鍖呭惈 + */ + public static boolean arraysContains(String[] arr, String targetValue) + { + return Arrays.asList(arr).contains(targetValue); + } + + /** + * 鑾峰彇妯″潡鍚 + * + * @param packageName 鍖呭悕 + * @return 妯″潡鍚 + */ + public static String getModuleName(String packageName) + { + int lastIndex = packageName.lastIndexOf("."); + int nameLength = packageName.length(); + return StringUtils.substring(packageName, lastIndex + 1, nameLength); + } + + /** + * 鑾峰彇涓氬姟鍚 + * + * @param tableName 琛ㄥ悕 + * @return 涓氬姟鍚 + */ + public static String getBusinessName(String tableName) + { + int lastIndex = tableName.lastIndexOf("_"); + int nameLength = tableName.length(); + return StringUtils.substring(tableName, lastIndex + 1, nameLength); + } + + /** + * 琛ㄥ悕杞崲鎴怞ava绫诲悕 + * + * @param tableName 琛ㄥ悕绉 + * @return 绫诲悕 + */ + public static String convertClassName(String tableName) + { + boolean autoRemovePre = GenConfig.getAutoRemovePre(); + String tablePrefix = GenConfig.getTablePrefix(); + if (autoRemovePre && StringUtils.isNotEmpty(tablePrefix)) + { + String[] searchList = StringUtils.split(tablePrefix, ","); + tableName = replaceFirst(tableName, searchList); + } + return StringUtils.convertToCamelCase(tableName); + } + + /** + * 鎵归噺鏇挎崲鍓嶇紑 + * + * @param replacementm 鏇挎崲鍊 + * @param searchList 鏇挎崲鍒楄〃 + * @return + */ + public static String replaceFirst(String replacementm, String[] searchList) + { + String text = replacementm; + for (String searchString : searchList) + { + if (replacementm.startsWith(searchString)) + { + text = replacementm.replaceFirst(searchString, ""); + break; + } + } + return text; + } + + /** + * 鍏抽敭瀛楁浛鎹 + * + * @param text 闇瑕佽鏇挎崲鐨勫悕瀛 + * @return 鏇挎崲鍚庣殑鍚嶅瓧 + */ + public static String replaceText(String text) + { + return RegExUtils.replaceAll(text, "(?:琛▅瀛︿俊鑰冭瘯)", ""); + } + + /** + * 鑾峰彇鏁版嵁搴撶被鍨嬪瓧娈 + * + * @param columnType 鍒楃被鍨 + * @return 鎴彇鍚庣殑鍒楃被鍨 + */ + public static String getDbType(String columnType) + { + if (StringUtils.indexOf(columnType, "(") > 0) + { + return StringUtils.substringBefore(columnType, "("); + } + else + { + return columnType; + } + } + + /** + * 鑾峰彇瀛楁闀垮害 + * + * @param columnType 鍒楃被鍨 + * @return 鎴彇鍚庣殑鍒楃被鍨 + */ + public static Integer getColumnLength(String columnType) + { + if (StringUtils.indexOf(columnType, "(") > 0) + { + String length = StringUtils.substringBetween(columnType, "(", ")"); + return Integer.valueOf(length); + } + else + { + return 0; + } + } +} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java new file mode 100644 index 0000000000000000000000000000000000000000..9f694038bda42791fda3cf479cff7ddc6a6be7ca --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityInitializer.java @@ -0,0 +1,34 @@ +package com.ruoyi.generator.util; + +import java.util.Properties; +import org.apache.velocity.app.Velocity; +import com.ruoyi.common.constant.Constants; + +/** + * VelocityEngine宸ュ巶 + * + * @author ruoyi + */ +public class VelocityInitializer +{ + /** + * 鍒濆鍖杤m鏂规硶 + */ + public static void initVelocity() + { + Properties p = new Properties(); + try + { + // 鍔犺浇classpath鐩綍涓嬬殑vm鏂囦欢 + p.setProperty("resource.loader.file.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"); + // 瀹氫箟瀛楃闆 + p.setProperty(Velocity.INPUT_ENCODING, Constants.UTF8); + // 鍒濆鍖朧elocity寮曟搸锛屾寚瀹氶厤缃甈roperties + Velocity.init(p); + } + catch (Exception e) + { + throw new RuntimeException(e); + } + } +} diff --git a/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..1a146819c500aaa14fcd1f86b7e988bd1e656197 --- /dev/null +++ b/ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java @@ -0,0 +1,408 @@ +package com.ruoyi.generator.util; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import org.apache.velocity.VelocityContext; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; +import com.ruoyi.common.constant.GenConstants; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.generator.domain.GenTable; +import com.ruoyi.generator.domain.GenTableColumn; + +/** + * 妯℃澘澶勭悊宸ュ叿绫 + * + * @author ruoyi + */ +public class VelocityUtils +{ + /** 椤圭洰绌洪棿璺緞 */ + private static final String PROJECT_PATH = "main/java"; + + /** mybatis绌洪棿璺緞 */ + private static final String MYBATIS_PATH = "main/resources/mapper"; + + /** 榛樿涓婄骇鑿滃崟锛岀郴缁熷伐鍏 */ + private static final String DEFAULT_PARENT_MENU_ID = "3"; + + /** + * 璁剧疆妯℃澘鍙橀噺淇℃伅 + * + * @return 妯℃澘鍒楄〃 + */ + public static VelocityContext prepareContext(GenTable genTable) + { + String moduleName = genTable.getModuleName(); + String businessName = genTable.getBusinessName(); + String packageName = genTable.getPackageName(); + String tplCategory = genTable.getTplCategory(); + String functionName = genTable.getFunctionName(); + + VelocityContext velocityContext = new VelocityContext(); + velocityContext.put("tplCategory", genTable.getTplCategory()); + velocityContext.put("tableName", genTable.getTableName()); + velocityContext.put("functionName", StringUtils.isNotEmpty(functionName) ? functionName : "銆愯濉啓鍔熻兘鍚嶇О銆"); + velocityContext.put("ClassName", genTable.getClassName()); + velocityContext.put("className", StringUtils.uncapitalize(genTable.getClassName())); + velocityContext.put("moduleName", genTable.getModuleName()); + velocityContext.put("BusinessName", StringUtils.capitalize(genTable.getBusinessName())); + velocityContext.put("businessName", genTable.getBusinessName()); + velocityContext.put("basePackage", getPackagePrefix(packageName)); + velocityContext.put("packageName", packageName); + velocityContext.put("author", genTable.getFunctionAuthor()); + velocityContext.put("datetime", DateUtils.getDate()); + velocityContext.put("pkColumn", genTable.getPkColumn()); + velocityContext.put("importList", getImportList(genTable)); + velocityContext.put("permissionPrefix", getPermissionPrefix(moduleName, businessName)); + velocityContext.put("columns", genTable.getColumns()); + velocityContext.put("table", genTable); + velocityContext.put("dicts", getDicts(genTable)); + setMenuVelocityContext(velocityContext, genTable); + if (GenConstants.TPL_TREE.equals(tplCategory)) + { + setTreeVelocityContext(velocityContext, genTable); + } + if (GenConstants.TPL_SUB.equals(tplCategory)) + { + setSubVelocityContext(velocityContext, genTable); + } + return velocityContext; + } + + public static void setMenuVelocityContext(VelocityContext context, GenTable genTable) + { + String options = genTable.getOptions(); + JSONObject paramsObj = JSON.parseObject(options); + String parentMenuId = getParentMenuId(paramsObj); + context.put("parentMenuId", parentMenuId); + } + + public static void setTreeVelocityContext(VelocityContext context, GenTable genTable) + { + String options = genTable.getOptions(); + JSONObject paramsObj = JSON.parseObject(options); + String treeCode = getTreecode(paramsObj); + String treeParentCode = getTreeParentCode(paramsObj); + String treeName = getTreeName(paramsObj); + + context.put("treeCode", treeCode); + context.put("treeParentCode", treeParentCode); + context.put("treeName", treeName); + context.put("expandColumn", getExpandColumn(genTable)); + if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) + { + context.put("tree_parent_code", paramsObj.getString(GenConstants.TREE_PARENT_CODE)); + } + if (paramsObj.containsKey(GenConstants.TREE_NAME)) + { + context.put("tree_name", paramsObj.getString(GenConstants.TREE_NAME)); + } + } + + public static void setSubVelocityContext(VelocityContext context, GenTable genTable) + { + GenTable subTable = genTable.getSubTable(); + String subTableName = genTable.getSubTableName(); + String subTableFkName = genTable.getSubTableFkName(); + String subClassName = genTable.getSubTable().getClassName(); + String subTableFkClassName = StringUtils.convertToCamelCase(subTableFkName); + + context.put("subTable", subTable); + context.put("subTableName", subTableName); + context.put("subTableFkName", subTableFkName); + context.put("subTableFkClassName", subTableFkClassName); + context.put("subTableFkclassName", StringUtils.uncapitalize(subTableFkClassName)); + context.put("subClassName", subClassName); + context.put("subclassName", StringUtils.uncapitalize(subClassName)); + context.put("subImportList", getImportList(genTable.getSubTable())); + } + + /** + * 鑾峰彇妯℃澘淇℃伅 + * @param tplCategory 鐢熸垚鐨勬ā鏉 + * @param tplWebType 鍓嶇绫诲瀷 + * @return 妯℃澘鍒楄〃 + */ + public static List getTemplateList(String tplCategory, String tplWebType) + { + String useWebType = "vm/vue"; + if ("element-plus".equals(tplWebType)) + { + useWebType = "vm/vue/v3"; + } + List templates = new ArrayList(); + templates.add("vm/java/domain.java.vm"); + templates.add("vm/java/mapper.java.vm"); + templates.add("vm/java/service.java.vm"); + templates.add("vm/java/serviceImpl.java.vm"); + templates.add("vm/java/controller.java.vm"); + templates.add("vm/xml/mapper.xml.vm"); + templates.add("vm/sql/sql.vm"); + templates.add("vm/js/api.js.vm"); + if (GenConstants.TPL_CRUD.equals(tplCategory)) + { + templates.add(useWebType + "/index.vue.vm"); + } + else if (GenConstants.TPL_TREE.equals(tplCategory)) + { + templates.add(useWebType + "/index-tree.vue.vm"); + } + else if (GenConstants.TPL_SUB.equals(tplCategory)) + { + templates.add(useWebType + "/index.vue.vm"); + templates.add("vm/java/sub-domain.java.vm"); + } + return templates; + } + + /** + * 鑾峰彇鏂囦欢鍚 + */ + public static String getFileName(String template, GenTable genTable) + { + // 鏂囦欢鍚嶇О + String fileName = ""; + // 鍖呰矾寰 + String packageName = genTable.getPackageName(); + // 妯″潡鍚 + String moduleName = genTable.getModuleName(); + // 澶у啓绫诲悕 + String className = genTable.getClassName(); + // 涓氬姟鍚嶇О + String businessName = genTable.getBusinessName(); + + String javaPath = PROJECT_PATH + "/" + StringUtils.replace(packageName, ".", "/"); + String mybatisPath = MYBATIS_PATH + "/" + moduleName; + String vuePath = "vue"; + + if (template.contains("domain.java.vm")) + { + fileName = StringUtils.format("{}/domain/{}.java", javaPath, className); + } + if (template.contains("sub-domain.java.vm") && StringUtils.equals(GenConstants.TPL_SUB, genTable.getTplCategory())) + { + fileName = StringUtils.format("{}/domain/{}.java", javaPath, genTable.getSubTable().getClassName()); + } + else if (template.contains("mapper.java.vm")) + { + fileName = StringUtils.format("{}/mapper/{}Mapper.java", javaPath, className); + } + else if (template.contains("service.java.vm")) + { + fileName = StringUtils.format("{}/service/I{}Service.java", javaPath, className); + } + else if (template.contains("serviceImpl.java.vm")) + { + fileName = StringUtils.format("{}/service/impl/{}ServiceImpl.java", javaPath, className); + } + else if (template.contains("controller.java.vm")) + { + fileName = StringUtils.format("{}/controller/{}Controller.java", javaPath, className); + } + else if (template.contains("mapper.xml.vm")) + { + fileName = StringUtils.format("{}/{}Mapper.xml", mybatisPath, className); + } + else if (template.contains("sql.vm")) + { + fileName = businessName + "Menu.sql"; + } + else if (template.contains("api.js.vm")) + { + fileName = StringUtils.format("{}/api/{}/{}.js", vuePath, moduleName, businessName); + } + else if (template.contains("index.vue.vm")) + { + fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); + } + else if (template.contains("index-tree.vue.vm")) + { + fileName = StringUtils.format("{}/views/{}/{}/index.vue", vuePath, moduleName, businessName); + } + return fileName; + } + + /** + * 鑾峰彇鍖呭墠缂 + * + * @param packageName 鍖呭悕绉 + * @return 鍖呭墠缂鍚嶇О + */ + public static String getPackagePrefix(String packageName) + { + int lastIndex = packageName.lastIndexOf("."); + return StringUtils.substring(packageName, 0, lastIndex); + } + + /** + * 鏍规嵁鍒楃被鍨嬭幏鍙栧鍏ュ寘 + * + * @param genTable 涓氬姟琛ㄥ璞 + * @return 杩斿洖闇瑕佸鍏ョ殑鍖呭垪琛 + */ + public static HashSet getImportList(GenTable genTable) + { + List columns = genTable.getColumns(); + GenTable subGenTable = genTable.getSubTable(); + HashSet importList = new HashSet(); + if (StringUtils.isNotNull(subGenTable)) + { + importList.add("java.util.List"); + } + for (GenTableColumn column : columns) + { + if (!column.isSuperColumn() && GenConstants.TYPE_DATE.equals(column.getJavaType())) + { + importList.add("java.util.Date"); + importList.add("com.fasterxml.jackson.annotation.JsonFormat"); + } + else if (!column.isSuperColumn() && GenConstants.TYPE_BIGDECIMAL.equals(column.getJavaType())) + { + importList.add("java.math.BigDecimal"); + } + } + return importList; + } + + /** + * 鏍规嵁鍒楃被鍨嬭幏鍙栧瓧鍏哥粍 + * + * @param genTable 涓氬姟琛ㄥ璞 + * @return 杩斿洖瀛楀吀缁 + */ + public static String getDicts(GenTable genTable) + { + List columns = genTable.getColumns(); + Set dicts = new HashSet(); + addDicts(dicts, columns); + if (StringUtils.isNotNull(genTable.getSubTable())) + { + List subColumns = genTable.getSubTable().getColumns(); + addDicts(dicts, subColumns); + } + return StringUtils.join(dicts, ", "); + } + + /** + * 娣诲姞瀛楀吀鍒楄〃 + * + * @param dicts 瀛楀吀鍒楄〃 + * @param columns 鍒楅泦鍚 + */ + public static void addDicts(Set dicts, List columns) + { + for (GenTableColumn column : columns) + { + if (!column.isSuperColumn() && StringUtils.isNotEmpty(column.getDictType()) && StringUtils.equalsAny( + column.getHtmlType(), + new String[] { GenConstants.HTML_SELECT, GenConstants.HTML_RADIO, GenConstants.HTML_CHECKBOX })) + { + dicts.add("'" + column.getDictType() + "'"); + } + } + } + + /** + * 鑾峰彇鏉冮檺鍓嶇紑 + * + * @param moduleName 妯″潡鍚嶇О + * @param businessName 涓氬姟鍚嶇О + * @return 杩斿洖鏉冮檺鍓嶇紑 + */ + public static String getPermissionPrefix(String moduleName, String businessName) + { + return StringUtils.format("{}:{}", moduleName, businessName); + } + + /** + * 鑾峰彇涓婄骇鑿滃崟ID瀛楁 + * + * @param paramsObj 鐢熸垚鍏朵粬閫夐」 + * @return 涓婄骇鑿滃崟ID瀛楁 + */ + public static String getParentMenuId(JSONObject paramsObj) + { + if (StringUtils.isNotEmpty(paramsObj) && paramsObj.containsKey(GenConstants.PARENT_MENU_ID) + && StringUtils.isNotEmpty(paramsObj.getString(GenConstants.PARENT_MENU_ID))) + { + return paramsObj.getString(GenConstants.PARENT_MENU_ID); + } + return DEFAULT_PARENT_MENU_ID; + } + + /** + * 鑾峰彇鏍戠紪鐮 + * + * @param paramsObj 鐢熸垚鍏朵粬閫夐」 + * @return 鏍戠紪鐮 + */ + public static String getTreecode(JSONObject paramsObj) + { + if (paramsObj.containsKey(GenConstants.TREE_CODE)) + { + return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_CODE)); + } + return StringUtils.EMPTY; + } + + /** + * 鑾峰彇鏍戠埗缂栫爜 + * + * @param paramsObj 鐢熸垚鍏朵粬閫夐」 + * @return 鏍戠埗缂栫爜 + */ + public static String getTreeParentCode(JSONObject paramsObj) + { + if (paramsObj.containsKey(GenConstants.TREE_PARENT_CODE)) + { + return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_PARENT_CODE)); + } + return StringUtils.EMPTY; + } + + /** + * 鑾峰彇鏍戝悕绉 + * + * @param paramsObj 鐢熸垚鍏朵粬閫夐」 + * @return 鏍戝悕绉 + */ + public static String getTreeName(JSONObject paramsObj) + { + if (paramsObj.containsKey(GenConstants.TREE_NAME)) + { + return StringUtils.toCamelCase(paramsObj.getString(GenConstants.TREE_NAME)); + } + return StringUtils.EMPTY; + } + + /** + * 鑾峰彇闇瑕佸湪鍝竴鍒椾笂闈㈡樉绀哄睍寮鎸夐挳 + * + * @param genTable 涓氬姟琛ㄥ璞 + * @return 灞曞紑鎸夐挳鍒楀簭鍙 + */ + public static int getExpandColumn(GenTable genTable) + { + String options = genTable.getOptions(); + JSONObject paramsObj = JSON.parseObject(options); + String treeName = paramsObj.getString(GenConstants.TREE_NAME); + int num = 0; + for (GenTableColumn column : genTable.getColumns()) + { + if (column.isList()) + { + num++; + String columnName = column.getColumnName(); + if (columnName.equals(treeName)) + { + break; + } + } + } + return num; + } +} diff --git a/ruoyi-generator/src/main/resources/generator.yml b/ruoyi-generator/src/main/resources/generator.yml new file mode 100644 index 0000000000000000000000000000000000000000..7eae68e12eded02b6f9b22ed18d387d2eabb0e64 --- /dev/null +++ b/ruoyi-generator/src/main/resources/generator.yml @@ -0,0 +1,10 @@ +# 浠g爜鐢熸垚 +gen: + # 浣滆 + author: ruoyi + # 榛樿鐢熸垚鍖呰矾寰 system 闇鏀规垚鑷繁鐨勬ā鍧楀悕绉 濡 system monitor tool + packageName: com.ruoyi.system + # 鑷姩鍘婚櫎琛ㄥ墠缂锛岄粯璁ゆ槸false + autoRemovePre: false + # 琛ㄥ墠缂锛堢敓鎴愮被鍚嶄笉浼氬寘鍚〃鍓嶇紑锛屽涓敤閫楀彿鍒嗛殧锛 + tablePrefix: sys_ \ No newline at end of file diff --git a/ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml b/ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..52857e89cf779db65beba40afdb35a43066624a1 --- /dev/null +++ b/ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select column_id, table_id, column_name, column_comment, column_type, java_type, java_field, is_pk, is_increment, is_required, is_insert, is_edit, is_list, is_query, query_type, html_type, dict_type, sort, create_by, create_time, update_by, update_time from gen_table_column + + + + + + + + insert into gen_table_column ( + table_id, + column_name, + column_comment, + column_type, + java_type, + java_field, + is_pk, + is_increment, + is_required, + is_insert, + is_edit, + is_list, + is_query, + query_type, + html_type, + dict_type, + sort, + create_by, + create_time + )values( + #{tableId}, + #{columnName}, + #{columnComment}, + #{columnType}, + #{javaType}, + #{javaField}, + #{isPk}, + #{isIncrement}, + #{isRequired}, + #{isInsert}, + #{isEdit}, + #{isList}, + #{isQuery}, + #{queryType}, + #{htmlType}, + #{dictType}, + #{sort}, + #{createBy}, + sysdate() + ) + + + + update gen_table_column + + column_comment = #{columnComment}, + java_type = #{javaType}, + java_field = #{javaField}, + is_insert = #{isInsert}, + is_edit = #{isEdit}, + is_list = #{isList}, + is_query = #{isQuery}, + is_required = #{isRequired}, + query_type = #{queryType}, + html_type = #{htmlType}, + dict_type = #{dictType}, + sort = #{sort}, + update_by = #{updateBy}, + update_time = sysdate() + + where column_id = #{columnId} + + + + delete from gen_table_column where table_id in + + #{tableId} + + + + + delete from gen_table_column where column_id in + + #{item.columnId} + + + + \ No newline at end of file diff --git a/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml b/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..e661a23ab9ef5c7fcb88f69931fdbff87ff0e681 --- /dev/null +++ b/ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select table_id, table_name, table_comment, sub_table_name, sub_table_fk_name, class_name, tpl_category, tpl_web_type, package_name, module_name, business_name, function_name, function_author, gen_type, gen_path, options, create_by, create_time, update_by, update_time, remark from gen_table + + + + + + + + + + + + + + + + + + insert into gen_table ( + table_name, + table_comment, + class_name, + tpl_category, + tpl_web_type, + package_name, + module_name, + business_name, + function_name, + function_author, + gen_type, + gen_path, + remark, + create_by, + create_time + )values( + #{tableName}, + #{tableComment}, + #{className}, + #{tplCategory}, + #{tplWebType}, + #{packageName}, + #{moduleName}, + #{businessName}, + #{functionName}, + #{functionAuthor}, + #{genType}, + #{genPath}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + ${sql} + + + + update gen_table + + table_name = #{tableName}, + table_comment = #{tableComment}, + sub_table_name = #{subTableName}, + sub_table_fk_name = #{subTableFkName}, + class_name = #{className}, + function_author = #{functionAuthor}, + gen_type = #{genType}, + gen_path = #{genPath}, + tpl_category = #{tplCategory}, + tpl_web_type = #{tplWebType}, + package_name = #{packageName}, + module_name = #{moduleName}, + business_name = #{businessName}, + function_name = #{functionName}, + options = #{options}, + update_by = #{updateBy}, + remark = #{remark}, + update_time = sysdate() + + where table_id = #{tableId} + + + + delete from gen_table where table_id in + + #{tableId} + + + + diff --git a/ruoyi-generator/src/main/resources/vm/java/controller.java.vm b/ruoyi-generator/src/main/resources/vm/java/controller.java.vm new file mode 100644 index 0000000000000000000000000000000000000000..bf8898879a90dfff108d6ddf0b0fe852d3db8f8a --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/java/controller.java.vm @@ -0,0 +1,115 @@ +package ${packageName}.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import ${packageName}.domain.${ClassName}; +import ${packageName}.service.I${ClassName}Service; +import com.ruoyi.common.utils.poi.ExcelUtil; +#if($table.crud || $table.sub) +import com.ruoyi.common.core.page.TableDataInfo; +#elseif($table.tree) +#end + +/** + * ${functionName}Controller + * + * @author ${author} + * @date ${datetime} + */ +@RestController +@RequestMapping("/${moduleName}/${businessName}") +public class ${ClassName}Controller extends BaseController +{ + @Autowired + private I${ClassName}Service ${className}Service; + + /** + * 鏌ヨ${functionName}鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('${permissionPrefix}:list')") + @GetMapping("/list") +#if($table.crud || $table.sub) + public TableDataInfo list(${ClassName} ${className}) + { + startPage(); + List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); + return getDataTable(list); + } +#elseif($table.tree) + public AjaxResult list(${ClassName} ${className}) + { + List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); + return success(list); + } +#end + + /** + * 瀵煎嚭${functionName}鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('${permissionPrefix}:export')") + @Log(title = "${functionName}", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, ${ClassName} ${className}) + { + List<${ClassName}> list = ${className}Service.select${ClassName}List(${className}); + ExcelUtil<${ClassName}> util = new ExcelUtil<${ClassName}>(${ClassName}.class); + util.exportExcel(response, list, "${functionName}鏁版嵁"); + } + + /** + * 鑾峰彇${functionName}璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('${permissionPrefix}:query')") + @GetMapping(value = "/{${pkColumn.javaField}}") + public AjaxResult getInfo(@PathVariable("${pkColumn.javaField}") ${pkColumn.javaType} ${pkColumn.javaField}) + { + return success(${className}Service.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField})); + } + + /** + * 鏂板${functionName} + */ + @PreAuthorize("@ss.hasPermi('${permissionPrefix}:add')") + @Log(title = "${functionName}", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody ${ClassName} ${className}) + { + return toAjax(${className}Service.insert${ClassName}(${className})); + } + + /** + * 淇敼${functionName} + */ + @PreAuthorize("@ss.hasPermi('${permissionPrefix}:edit')") + @Log(title = "${functionName}", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody ${ClassName} ${className}) + { + return toAjax(${className}Service.update${ClassName}(${className})); + } + + /** + * 鍒犻櫎${functionName} + */ + @PreAuthorize("@ss.hasPermi('${permissionPrefix}:remove')") + @Log(title = "${functionName}", businessType = BusinessType.DELETE) + @DeleteMapping("/{${pkColumn.javaField}s}") + public AjaxResult remove(@PathVariable ${pkColumn.javaType}[] ${pkColumn.javaField}s) + { + return toAjax(${className}Service.delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaField}s)); + } +} diff --git a/ruoyi-generator/src/main/resources/vm/java/domain.java.vm b/ruoyi-generator/src/main/resources/vm/java/domain.java.vm new file mode 100644 index 0000000000000000000000000000000000000000..bd51c177375a6318cb87dba6ad0d316547e5081c --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/java/domain.java.vm @@ -0,0 +1,105 @@ +package ${packageName}.domain; + +#foreach ($import in $importList) +import ${import}; +#end +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +#if($table.crud || $table.sub) +import com.ruoyi.common.core.domain.BaseEntity; +#elseif($table.tree) +import com.ruoyi.common.core.domain.TreeEntity; +#end + +/** + * ${functionName}瀵硅薄 ${tableName} + * + * @author ${author} + * @date ${datetime} + */ +#if($table.crud || $table.sub) +#set($Entity="BaseEntity") +#elseif($table.tree) +#set($Entity="TreeEntity") +#end +public class ${ClassName} extends ${Entity} +{ + private static final long serialVersionUID = 1L; + +#foreach ($column in $columns) +#if(!$table.isSuperColumn($column.javaField)) + /** $column.columnComment */ +#if($column.list) +#set($parentheseIndex=$column.columnComment.indexOf("锛")) +#if($parentheseIndex != -1) +#set($comment=$column.columnComment.substring(0, $parentheseIndex)) +#else +#set($comment=$column.columnComment) +#end +#if($parentheseIndex != -1) + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") +#elseif($column.javaType == 'Date') + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd") +#else + @Excel(name = "${comment}") +#end +#end + private $column.javaType $column.javaField; + +#end +#end +#if($table.sub) + /** $table.subTable.functionName淇℃伅 */ + private List<${subClassName}> ${subclassName}List; + +#end +#foreach ($column in $columns) +#if(!$table.isSuperColumn($column.javaField)) +#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) +#set($AttrName=$column.javaField) +#else +#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) +#end + public void set${AttrName}($column.javaType $column.javaField) + { + this.$column.javaField = $column.javaField; + } + + public $column.javaType get${AttrName}() + { + return $column.javaField; + } +#end +#end + +#if($table.sub) + public List<${subClassName}> get${subClassName}List() + { + return ${subclassName}List; + } + + public void set${subClassName}List(List<${subClassName}> ${subclassName}List) + { + this.${subclassName}List = ${subclassName}List; + } + +#end + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) +#foreach ($column in $columns) +#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) +#set($AttrName=$column.javaField) +#else +#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) +#end + .append("${column.javaField}", get${AttrName}()) +#end +#if($table.sub) + .append("${subclassName}List", get${subClassName}List()) +#end + .toString(); + } +} diff --git a/ruoyi-generator/src/main/resources/vm/java/mapper.java.vm b/ruoyi-generator/src/main/resources/vm/java/mapper.java.vm new file mode 100644 index 0000000000000000000000000000000000000000..7e7d7c26f4f967da6ff36ed9978e9798cdfeaeaa --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/java/mapper.java.vm @@ -0,0 +1,91 @@ +package ${packageName}.mapper; + +import java.util.List; +import ${packageName}.domain.${ClassName}; +#if($table.sub) +import ${packageName}.domain.${subClassName}; +#end + +/** + * ${functionName}Mapper鎺ュ彛 + * + * @author ${author} + * @date ${datetime} + */ +public interface ${ClassName}Mapper +{ + /** + * 鏌ヨ${functionName} + * + * @param ${pkColumn.javaField} ${functionName}涓婚敭 + * @return ${functionName} + */ + public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); + + /** + * 鏌ヨ${functionName}鍒楄〃 + * + * @param ${className} ${functionName} + * @return ${functionName}闆嗗悎 + */ + public List<${ClassName}> select${ClassName}List(${ClassName} ${className}); + + /** + * 鏂板${functionName} + * + * @param ${className} ${functionName} + * @return 缁撴灉 + */ + public int insert${ClassName}(${ClassName} ${className}); + + /** + * 淇敼${functionName} + * + * @param ${className} ${functionName} + * @return 缁撴灉 + */ + public int update${ClassName}(${ClassName} ${className}); + + /** + * 鍒犻櫎${functionName} + * + * @param ${pkColumn.javaField} ${functionName}涓婚敭 + * @return 缁撴灉 + */ + public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); + + /** + * 鎵归噺鍒犻櫎${functionName} + * + * @param ${pkColumn.javaField}s 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); +#if($table.sub) + + /** + * 鎵归噺鍒犻櫎${subTable.functionName} + * + * @param ${pkColumn.javaField}s 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); + + /** + * 鎵归噺鏂板${subTable.functionName} + * + * @param ${subclassName}List ${subTable.functionName}鍒楄〃 + * @return 缁撴灉 + */ + public int batch${subClassName}(List<${subClassName}> ${subclassName}List); + + + /** + * 閫氳繃${functionName}涓婚敭鍒犻櫎${subTable.functionName}淇℃伅 + * + * @param ${pkColumn.javaField} ${functionName}ID + * @return 缁撴灉 + */ + public int delete${subClassName}By${subTableFkClassName}(${pkColumn.javaType} ${pkColumn.javaField}); +#end +} diff --git a/ruoyi-generator/src/main/resources/vm/java/service.java.vm b/ruoyi-generator/src/main/resources/vm/java/service.java.vm new file mode 100644 index 0000000000000000000000000000000000000000..264882b270e84f00ff93a4619dfb5bc940f05dfb --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/java/service.java.vm @@ -0,0 +1,61 @@ +package ${packageName}.service; + +import java.util.List; +import ${packageName}.domain.${ClassName}; + +/** + * ${functionName}Service鎺ュ彛 + * + * @author ${author} + * @date ${datetime} + */ +public interface I${ClassName}Service +{ + /** + * 鏌ヨ${functionName} + * + * @param ${pkColumn.javaField} ${functionName}涓婚敭 + * @return ${functionName} + */ + public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); + + /** + * 鏌ヨ${functionName}鍒楄〃 + * + * @param ${className} ${functionName} + * @return ${functionName}闆嗗悎 + */ + public List<${ClassName}> select${ClassName}List(${ClassName} ${className}); + + /** + * 鏂板${functionName} + * + * @param ${className} ${functionName} + * @return 缁撴灉 + */ + public int insert${ClassName}(${ClassName} ${className}); + + /** + * 淇敼${functionName} + * + * @param ${className} ${functionName} + * @return 缁撴灉 + */ + public int update${ClassName}(${ClassName} ${className}); + + /** + * 鎵归噺鍒犻櫎${functionName} + * + * @param ${pkColumn.javaField}s 闇瑕佸垹闄ょ殑${functionName}涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s); + + /** + * 鍒犻櫎${functionName}淇℃伅 + * + * @param ${pkColumn.javaField} ${functionName}涓婚敭 + * @return 缁撴灉 + */ + public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}); +} diff --git a/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm b/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm new file mode 100644 index 0000000000000000000000000000000000000000..14746e1a2c733b3169d3e51b634f6305853f9ff9 --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/java/serviceImpl.java.vm @@ -0,0 +1,169 @@ +package ${packageName}.service.impl; + +import java.util.List; +#foreach ($column in $columns) +#if($column.javaField == 'createTime' || $column.javaField == 'updateTime') +import com.ruoyi.common.utils.DateUtils; +#break +#end +#end +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +#if($table.sub) +import java.util.ArrayList; +import com.ruoyi.common.utils.StringUtils; +import org.springframework.transaction.annotation.Transactional; +import ${packageName}.domain.${subClassName}; +#end +import ${packageName}.mapper.${ClassName}Mapper; +import ${packageName}.domain.${ClassName}; +import ${packageName}.service.I${ClassName}Service; + +/** + * ${functionName}Service涓氬姟灞傚鐞 + * + * @author ${author} + * @date ${datetime} + */ +@Service +public class ${ClassName}ServiceImpl implements I${ClassName}Service +{ + @Autowired + private ${ClassName}Mapper ${className}Mapper; + + /** + * 鏌ヨ${functionName} + * + * @param ${pkColumn.javaField} ${functionName}涓婚敭 + * @return ${functionName} + */ + @Override + public ${ClassName} select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) + { + return ${className}Mapper.select${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}); + } + + /** + * 鏌ヨ${functionName}鍒楄〃 + * + * @param ${className} ${functionName} + * @return ${functionName} + */ + @Override + public List<${ClassName}> select${ClassName}List(${ClassName} ${className}) + { + return ${className}Mapper.select${ClassName}List(${className}); + } + + /** + * 鏂板${functionName} + * + * @param ${className} ${functionName} + * @return 缁撴灉 + */ +#if($table.sub) + @Transactional +#end + @Override + public int insert${ClassName}(${ClassName} ${className}) + { +#foreach ($column in $columns) +#if($column.javaField == 'createTime') + ${className}.setCreateTime(DateUtils.getNowDate()); +#end +#end +#if($table.sub) + int rows = ${className}Mapper.insert${ClassName}(${className}); + insert${subClassName}(${className}); + return rows; +#else + return ${className}Mapper.insert${ClassName}(${className}); +#end + } + + /** + * 淇敼${functionName} + * + * @param ${className} ${functionName} + * @return 缁撴灉 + */ +#if($table.sub) + @Transactional +#end + @Override + public int update${ClassName}(${ClassName} ${className}) + { +#foreach ($column in $columns) +#if($column.javaField == 'updateTime') + ${className}.setUpdateTime(DateUtils.getNowDate()); +#end +#end +#if($table.sub) + ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${className}.get${pkColumn.capJavaField}()); + insert${subClassName}(${className}); +#end + return ${className}Mapper.update${ClassName}(${className}); + } + + /** + * 鎵归噺鍒犻櫎${functionName} + * + * @param ${pkColumn.javaField}s 闇瑕佸垹闄ょ殑${functionName}涓婚敭 + * @return 缁撴灉 + */ +#if($table.sub) + @Transactional +#end + @Override + public int delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaType}[] ${pkColumn.javaField}s) + { +#if($table.sub) + ${className}Mapper.delete${subClassName}By${subTableFkClassName}s(${pkColumn.javaField}s); +#end + return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}s(${pkColumn.javaField}s); + } + + /** + * 鍒犻櫎${functionName}淇℃伅 + * + * @param ${pkColumn.javaField} ${functionName}涓婚敭 + * @return 缁撴灉 + */ +#if($table.sub) + @Transactional +#end + @Override + public int delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaType} ${pkColumn.javaField}) + { +#if($table.sub) + ${className}Mapper.delete${subClassName}By${subTableFkClassName}(${pkColumn.javaField}); +#end + return ${className}Mapper.delete${ClassName}By${pkColumn.capJavaField}(${pkColumn.javaField}); + } +#if($table.sub) + + /** + * 鏂板${subTable.functionName}淇℃伅 + * + * @param ${className} ${functionName}瀵硅薄 + */ + public void insert${subClassName}(${ClassName} ${className}) + { + List<${subClassName}> ${subclassName}List = ${className}.get${subClassName}List(); + ${pkColumn.javaType} ${pkColumn.javaField} = ${className}.get${pkColumn.capJavaField}(); + if (StringUtils.isNotNull(${subclassName}List)) + { + List<${subClassName}> list = new ArrayList<${subClassName}>(); + for (${subClassName} ${subclassName} : ${subclassName}List) + { + ${subclassName}.set${subTableFkClassName}(${pkColumn.javaField}); + list.add(${subclassName}); + } + if (list.size() > 0) + { + ${className}Mapper.batch${subClassName}(list); + } + } + } +#end +} diff --git a/ruoyi-generator/src/main/resources/vm/java/sub-domain.java.vm b/ruoyi-generator/src/main/resources/vm/java/sub-domain.java.vm new file mode 100644 index 0000000000000000000000000000000000000000..a3f53ebab9896cd40de0fd40d80153c3d2ba812e --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/java/sub-domain.java.vm @@ -0,0 +1,76 @@ +package ${packageName}.domain; + +#foreach ($import in $subImportList) +import ${import}; +#end +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * ${subTable.functionName}瀵硅薄 ${subTableName} + * + * @author ${author} + * @date ${datetime} + */ +public class ${subClassName} extends BaseEntity +{ + private static final long serialVersionUID = 1L; + +#foreach ($column in $subTable.columns) +#if(!$table.isSuperColumn($column.javaField)) + /** $column.columnComment */ +#if($column.list) +#set($parentheseIndex=$column.columnComment.indexOf("锛")) +#if($parentheseIndex != -1) +#set($comment=$column.columnComment.substring(0, $parentheseIndex)) +#else +#set($comment=$column.columnComment) +#end +#if($parentheseIndex != -1) + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") +#elseif($column.javaType == 'Date') + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "${comment}", width = 30, dateFormat = "yyyy-MM-dd") +#else + @Excel(name = "${comment}") +#end +#end + private $column.javaType $column.javaField; + +#end +#end +#foreach ($column in $subTable.columns) +#if(!$table.isSuperColumn($column.javaField)) +#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) +#set($AttrName=$column.javaField) +#else +#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) +#end + public void set${AttrName}($column.javaType $column.javaField) + { + this.$column.javaField = $column.javaField; + } + + public $column.javaType get${AttrName}() + { + return $column.javaField; + } +#end +#end + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) +#foreach ($column in $subTable.columns) +#if($column.javaField.length() > 2 && $column.javaField.substring(1,2).matches("[A-Z]")) +#set($AttrName=$column.javaField) +#else +#set($AttrName=$column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) +#end + .append("${column.javaField}", get${AttrName}()) +#end + .toString(); + } +} diff --git a/ruoyi-generator/src/main/resources/vm/js/api.js.vm b/ruoyi-generator/src/main/resources/vm/js/api.js.vm new file mode 100644 index 0000000000000000000000000000000000000000..9295524a4b77c5f99b6b7c3f94a90735b3c7c7ab --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/js/api.js.vm @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ${functionName}鍒楄〃 +export function list${BusinessName}(query) { + return request({ + url: '/${moduleName}/${businessName}/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ${functionName}璇︾粏 +export function get${BusinessName}(${pkColumn.javaField}) { + return request({ + url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField}, + method: 'get' + }) +} + +// 鏂板${functionName} +export function add${BusinessName}(data) { + return request({ + url: '/${moduleName}/${businessName}', + method: 'post', + data: data + }) +} + +// 淇敼${functionName} +export function update${BusinessName}(data) { + return request({ + url: '/${moduleName}/${businessName}', + method: 'put', + data: data + }) +} + +// 鍒犻櫎${functionName} +export function del${BusinessName}(${pkColumn.javaField}) { + return request({ + url: '/${moduleName}/${businessName}/' + ${pkColumn.javaField}, + method: 'delete' + }) +} diff --git a/ruoyi-generator/src/main/resources/vm/sql/sql.vm b/ruoyi-generator/src/main/resources/vm/sql/sql.vm new file mode 100644 index 0000000000000000000000000000000000000000..057558350ca33f70499732c336a93e0e2d14060d --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/sql/sql.vm @@ -0,0 +1,22 @@ +-- 鑿滃崟 SQL +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}', '${parentMenuId}', '1', '${businessName}', '${moduleName}/${businessName}/index', 1, 0, 'C', '0', '0', '${permissionPrefix}:list', '#', 'admin', sysdate(), '', null, '${functionName}鑿滃崟'); + +-- 鎸夐挳鐖惰彍鍗旾D +SELECT @parentId := LAST_INSERT_ID(); + +-- 鎸夐挳 SQL +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}鏌ヨ', @parentId, '1', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:query', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}鏂板', @parentId, '2', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:add', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}淇敼', @parentId, '3', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:edit', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}鍒犻櫎', @parentId, '4', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:remove', '#', 'admin', sysdate(), '', null, ''); + +insert into sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) +values('${functionName}瀵煎嚭', @parentId, '5', '#', '', 1, 0, 'F', '0', '0', '${permissionPrefix}:export', '#', 'admin', sysdate(), '', null, ''); \ No newline at end of file diff --git a/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm new file mode 100644 index 0000000000000000000000000000000000000000..4819c2a9ffa182612166b11b2bb282bafa906980 --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/vue/index-tree.vue.vm @@ -0,0 +1,505 @@ + + + diff --git a/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm new file mode 100644 index 0000000000000000000000000000000000000000..6296014bced772c4a057c873556b11d8a34b781c --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/vue/index.vue.vm @@ -0,0 +1,602 @@ + + + diff --git a/ruoyi-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm new file mode 100644 index 0000000000000000000000000000000000000000..c54d62bf9d413304c7c5780d1e3271145d442311 --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/vue/v3/index-tree.vue.vm @@ -0,0 +1,474 @@ + + + diff --git a/ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm b/ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm new file mode 100644 index 0000000000000000000000000000000000000000..8b25665aabaef1300365404913511e8743fdcf97 --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/vue/v3/index.vue.vm @@ -0,0 +1,590 @@ + + + diff --git a/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm b/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm new file mode 100644 index 0000000000000000000000000000000000000000..456755b52d2b7cdf38e719b3ca65c366ec85e06f --- /dev/null +++ b/ruoyi-generator/src/main/resources/vm/xml/mapper.xml.vm @@ -0,0 +1,140 @@ + + + + + +#foreach ($column in $columns) + +#end + +#if($table.sub) + + + + + + +#foreach ($column in $subTable.columns) + +#end + +#end + + + select#foreach($column in $columns) $column.columnName#if($foreach.count != $columns.size()),#end#end from ${tableName} + + + + + +#if($table.sub) + + +#end + + + insert into ${tableName} + +#foreach($column in $columns) +#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment) + $column.columnName, +#end +#end + + +#foreach($column in $columns) +#if($column.columnName != $pkColumn.columnName || !$pkColumn.increment) + #{$column.javaField}, +#end +#end + + + + + update ${tableName} + +#foreach($column in $columns) +#if($column.columnName != $pkColumn.columnName) + $column.columnName = #{$column.javaField}, +#end +#end + + where ${pkColumn.columnName} = #{${pkColumn.javaField}} + + + + delete from ${tableName} where ${pkColumn.columnName} = #{${pkColumn.javaField}} + + + + delete from ${tableName} where ${pkColumn.columnName} in + + #{${pkColumn.javaField}} + + +#if($table.sub) + + + delete from ${subTableName} where ${subTableFkName} in + + #{${subTableFkclassName}} + + + + + delete from ${subTableName} where ${subTableFkName} = #{${subTableFkclassName}} + + + + insert into ${subTableName}(#foreach($column in $subTable.columns) $column.columnName#if($foreach.count != $subTable.columns.size()),#end#end) values + + (#foreach($column in $subTable.columns) #{item.$column.javaField}#if($foreach.count != $subTable.columns.size()),#end#end) + + +#end + \ No newline at end of file diff --git a/ruoyi-quartz/pom.xml b/ruoyi-quartz/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..4e7a0ce4e842db3f361bda7a19a9c6b49dd86d6d --- /dev/null +++ b/ruoyi-quartz/pom.xml @@ -0,0 +1,40 @@ + + + + ruoyi + com.ruoyi + 3.8.8 + + 4.0.0 + + ruoyi-quartz + + + quartz瀹氭椂浠诲姟 + + + + + + + org.quartz-scheduler + quartz + + + com.mchange + c3p0 + + + + + + + com.ruoyi + ruoyi-common + + + + + \ No newline at end of file diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..d4e065a1fd5f083e0f18bfdeaf8d04a03a3fbfe4 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/config/ScheduleConfig.java @@ -0,0 +1,57 @@ +//package com.ruoyi.quartz.config; +// +//import org.springframework.context.annotation.Bean; +//import org.springframework.context.annotation.Configuration; +//import org.springframework.scheduling.quartz.SchedulerFactoryBean; +//import javax.sql.DataSource; +//import java.util.Properties; +// +///** +// * 瀹氭椂浠诲姟閰嶇疆锛堝崟鏈洪儴缃插缓璁垹闄ゆ绫诲拰qrtz鏁版嵁搴撹〃锛岄粯璁よ蛋鍐呭瓨浼氭渶楂樻晥锛 +// * +// * @author ruoyi +// */ +//@Configuration +//public class ScheduleConfig +//{ +// @Bean +// public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) +// { +// SchedulerFactoryBean factory = new SchedulerFactoryBean(); +// factory.setDataSource(dataSource); +// +// // quartz鍙傛暟 +// Properties prop = new Properties(); +// prop.put("org.quartz.scheduler.instanceName", "RuoyiScheduler"); +// prop.put("org.quartz.scheduler.instanceId", "AUTO"); +// // 绾跨▼姹犻厤缃 +// prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool"); +// prop.put("org.quartz.threadPool.threadCount", "20"); +// prop.put("org.quartz.threadPool.threadPriority", "5"); +// // JobStore閰嶇疆 +// prop.put("org.quartz.jobStore.class", "org.springframework.scheduling.quartz.LocalDataSourceJobStore"); +// // 闆嗙兢閰嶇疆 +// prop.put("org.quartz.jobStore.isClustered", "true"); +// prop.put("org.quartz.jobStore.clusterCheckinInterval", "15000"); +// prop.put("org.quartz.jobStore.maxMisfiresToHandleAtATime", "10"); +// prop.put("org.quartz.jobStore.txIsolationLevelSerializable", "true"); +// +// // sqlserver 鍚敤 +// // prop.put("org.quartz.jobStore.selectWithLockSQL", "SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?"); +// prop.put("org.quartz.jobStore.misfireThreshold", "12000"); +// prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_"); +// factory.setQuartzProperties(prop); +// +// factory.setSchedulerName("RuoyiScheduler"); +// // 寤舵椂鍚姩 +// factory.setStartupDelay(1); +// factory.setApplicationContextSchedulerContextKey("applicationContextKey"); +// // 鍙夛紝QuartzScheduler +// // 鍚姩鏃舵洿鏂板繁瀛樺湪鐨凧ob锛岃繖鏍峰氨涓嶇敤姣忔淇敼targetObject鍚庡垹闄rtz_job_details琛ㄥ搴旇褰曚簡 +// factory.setOverwriteExistingJobs(true); +// // 璁剧疆鑷姩鍚姩锛岄粯璁や负true +// factory.setAutoStartup(true); +// +// return factory; +// } +//} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java new file mode 100644 index 0000000000000000000000000000000000000000..139361bc600cfbc18c5bf456a7eeec828585ab57 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobController.java @@ -0,0 +1,185 @@ +package com.ruoyi.quartz.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import org.quartz.SchedulerException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.exception.job.TaskException; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.quartz.domain.SysJob; +import com.ruoyi.quartz.service.ISysJobService; +import com.ruoyi.quartz.util.CronUtils; +import com.ruoyi.quartz.util.ScheduleUtils; + +/** + * 璋冨害浠诲姟淇℃伅鎿嶄綔澶勭悊 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/monitor/job") +public class SysJobController extends BaseController +{ + @Autowired + private ISysJobService jobService; + + /** + * 鏌ヨ瀹氭椂浠诲姟鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:list')") + @GetMapping("/list") + public TableDataInfo list(SysJob sysJob) + { + startPage(); + List list = jobService.selectJobList(sysJob); + return getDataTable(list); + } + + /** + * 瀵煎嚭瀹氭椂浠诲姟鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:export')") + @Log(title = "瀹氭椂浠诲姟", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, SysJob sysJob) + { + List list = jobService.selectJobList(sysJob); + ExcelUtil util = new ExcelUtil(SysJob.class); + util.exportExcel(response, list, "瀹氭椂浠诲姟"); + } + + /** + * 鑾峰彇瀹氭椂浠诲姟璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:query')") + @GetMapping(value = "/{jobId}") + public AjaxResult getInfo(@PathVariable("jobId") Long jobId) + { + return success(jobService.selectJobById(jobId)); + } + + /** + * 鏂板瀹氭椂浠诲姟 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:add')") + @Log(title = "瀹氭椂浠诲姟", businessType = BusinessType.INSERT) + @PostMapping + public AjaxResult add(@RequestBody SysJob job) throws SchedulerException, TaskException + { + if (!CronUtils.isValid(job.getCronExpression())) + { + return error("鏂板浠诲姟'" + job.getJobName() + "'澶辫触锛孋ron琛ㄨ揪寮忎笉姝g‘"); + } + else if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_RMI)) + { + return error("鏂板浠诲姟'" + job.getJobName() + "'澶辫触锛岀洰鏍囧瓧绗︿覆涓嶅厑璁'rmi'璋冪敤"); + } + else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[] { Constants.LOOKUP_LDAP, Constants.LOOKUP_LDAPS })) + { + return error("鏂板浠诲姟'" + job.getJobName() + "'澶辫触锛岀洰鏍囧瓧绗︿覆涓嶅厑璁'ldap(s)'璋冪敤"); + } + else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[] { Constants.HTTP, Constants.HTTPS })) + { + return error("鏂板浠诲姟'" + job.getJobName() + "'澶辫触锛岀洰鏍囧瓧绗︿覆涓嶅厑璁'http(s)'璋冪敤"); + } + else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), Constants.JOB_ERROR_STR)) + { + return error("鏂板浠诲姟'" + job.getJobName() + "'澶辫触锛岀洰鏍囧瓧绗︿覆瀛樺湪杩濊"); + } + else if (!ScheduleUtils.whiteList(job.getInvokeTarget())) + { + return error("鏂板浠诲姟'" + job.getJobName() + "'澶辫触锛岀洰鏍囧瓧绗︿覆涓嶅湪鐧藉悕鍗曞唴"); + } + job.setCreateBy(getUsername()); + return toAjax(jobService.insertJob(job)); + } + + /** + * 淇敼瀹氭椂浠诲姟 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:edit')") + @Log(title = "瀹氭椂浠诲姟", businessType = BusinessType.UPDATE) + @PutMapping + public AjaxResult edit(@RequestBody SysJob job) throws SchedulerException, TaskException + { + if (!CronUtils.isValid(job.getCronExpression())) + { + return error("淇敼浠诲姟'" + job.getJobName() + "'澶辫触锛孋ron琛ㄨ揪寮忎笉姝g‘"); + } + else if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_RMI)) + { + return error("淇敼浠诲姟'" + job.getJobName() + "'澶辫触锛岀洰鏍囧瓧绗︿覆涓嶅厑璁'rmi'璋冪敤"); + } + else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[] { Constants.LOOKUP_LDAP, Constants.LOOKUP_LDAPS })) + { + return error("淇敼浠诲姟'" + job.getJobName() + "'澶辫触锛岀洰鏍囧瓧绗︿覆涓嶅厑璁'ldap(s)'璋冪敤"); + } + else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[] { Constants.HTTP, Constants.HTTPS })) + { + return error("淇敼浠诲姟'" + job.getJobName() + "'澶辫触锛岀洰鏍囧瓧绗︿覆涓嶅厑璁'http(s)'璋冪敤"); + } + else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), Constants.JOB_ERROR_STR)) + { + return error("淇敼浠诲姟'" + job.getJobName() + "'澶辫触锛岀洰鏍囧瓧绗︿覆瀛樺湪杩濊"); + } + else if (!ScheduleUtils.whiteList(job.getInvokeTarget())) + { + return error("淇敼浠诲姟'" + job.getJobName() + "'澶辫触锛岀洰鏍囧瓧绗︿覆涓嶅湪鐧藉悕鍗曞唴"); + } + job.setUpdateBy(getUsername()); + return toAjax(jobService.updateJob(job)); + } + + /** + * 瀹氭椂浠诲姟鐘舵佷慨鏀 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:changeStatus')") + @Log(title = "瀹氭椂浠诲姟", businessType = BusinessType.UPDATE) + @PutMapping("/changeStatus") + public AjaxResult changeStatus(@RequestBody SysJob job) throws SchedulerException + { + SysJob newJob = jobService.selectJobById(job.getJobId()); + newJob.setStatus(job.getStatus()); + return toAjax(jobService.changeStatus(newJob)); + } + + /** + * 瀹氭椂浠诲姟绔嬪嵆鎵ц涓娆 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:changeStatus')") + @Log(title = "瀹氭椂浠诲姟", businessType = BusinessType.UPDATE) + @PutMapping("/run") + public AjaxResult run(@RequestBody SysJob job) throws SchedulerException + { + boolean result = jobService.run(job); + return result ? success() : error("浠诲姟涓嶅瓨鍦ㄦ垨宸茶繃鏈燂紒"); + } + + /** + * 鍒犻櫎瀹氭椂浠诲姟 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:remove')") + @Log(title = "瀹氭椂浠诲姟", businessType = BusinessType.DELETE) + @DeleteMapping("/{jobIds}") + public AjaxResult remove(@PathVariable Long[] jobIds) throws SchedulerException, TaskException + { + jobService.deleteJobByIds(jobIds); + return success(); + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java new file mode 100644 index 0000000000000000000000000000000000000000..62ecbab219e46a824b23c3e40f690a4c4a90c8a4 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/controller/SysJobLogController.java @@ -0,0 +1,92 @@ +package com.ruoyi.quartz.controller; + +import java.util.List; +import javax.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.quartz.domain.SysJobLog; +import com.ruoyi.quartz.service.ISysJobLogService; + +/** + * 璋冨害鏃ュ織鎿嶄綔澶勭悊 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/monitor/jobLog") +public class SysJobLogController extends BaseController +{ + @Autowired + private ISysJobLogService jobLogService; + + /** + * 鏌ヨ瀹氭椂浠诲姟璋冨害鏃ュ織鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:list')") + @GetMapping("/list") + public TableDataInfo list(SysJobLog sysJobLog) + { + startPage(); + List list = jobLogService.selectJobLogList(sysJobLog); + return getDataTable(list); + } + + /** + * 瀵煎嚭瀹氭椂浠诲姟璋冨害鏃ュ織鍒楄〃 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:export')") + @Log(title = "浠诲姟璋冨害鏃ュ織", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HttpServletResponse response, SysJobLog sysJobLog) + { + List list = jobLogService.selectJobLogList(sysJobLog); + ExcelUtil util = new ExcelUtil(SysJobLog.class); + util.exportExcel(response, list, "璋冨害鏃ュ織"); + } + + /** + * 鏍规嵁璋冨害缂栧彿鑾峰彇璇︾粏淇℃伅 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:query')") + @GetMapping(value = "/{jobLogId}") + public AjaxResult getInfo(@PathVariable Long jobLogId) + { + return success(jobLogService.selectJobLogById(jobLogId)); + } + + + /** + * 鍒犻櫎瀹氭椂浠诲姟璋冨害鏃ュ織 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:remove')") + @Log(title = "瀹氭椂浠诲姟璋冨害鏃ュ織", businessType = BusinessType.DELETE) + @DeleteMapping("/{jobLogIds}") + public AjaxResult remove(@PathVariable Long[] jobLogIds) + { + return toAjax(jobLogService.deleteJobLogByIds(jobLogIds)); + } + + /** + * 娓呯┖瀹氭椂浠诲姟璋冨害鏃ュ織 + */ + @PreAuthorize("@ss.hasPermi('monitor:job:remove')") + @Log(title = "璋冨害鏃ュ織", businessType = BusinessType.CLEAN) + @DeleteMapping("/clean") + public AjaxResult clean() + { + jobLogService.cleanJobLog(); + return success(); + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java new file mode 100644 index 0000000000000000000000000000000000000000..1f49695910001584573a48815365a05574861e13 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJob.java @@ -0,0 +1,171 @@ +package com.ruoyi.quartz.domain; + +import java.util.Date; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; +import com.ruoyi.common.constant.ScheduleConstants; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.quartz.util.CronUtils; + +/** + * 瀹氭椂浠诲姟璋冨害琛 sys_job + * + * @author ruoyi + */ +public class SysJob extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 浠诲姟ID */ + @Excel(name = "浠诲姟搴忓彿", cellType = ColumnType.NUMERIC) + private Long jobId; + + /** 浠诲姟鍚嶇О */ + @Excel(name = "浠诲姟鍚嶇О") + private String jobName; + + /** 浠诲姟缁勫悕 */ + @Excel(name = "浠诲姟缁勫悕") + private String jobGroup; + + /** 璋冪敤鐩爣瀛楃涓 */ + @Excel(name = "璋冪敤鐩爣瀛楃涓") + private String invokeTarget; + + /** cron鎵ц琛ㄨ揪寮 */ + @Excel(name = "鎵ц琛ㄨ揪寮 ") + private String cronExpression; + + /** cron璁″垝绛栫暐 */ + @Excel(name = "璁″垝绛栫暐 ", readConverterExp = "0=榛樿,1=绔嬪嵆瑙﹀彂鎵ц,2=瑙﹀彂涓娆℃墽琛,3=涓嶈Е鍙戠珛鍗虫墽琛") + private String misfirePolicy = ScheduleConstants.MISFIRE_DEFAULT; + + /** 鏄惁骞跺彂鎵ц锛0鍏佽 1绂佹锛 */ + @Excel(name = "骞跺彂鎵ц", readConverterExp = "0=鍏佽,1=绂佹") + private String concurrent; + + /** 浠诲姟鐘舵侊紙0姝e父 1鏆傚仠锛 */ + @Excel(name = "浠诲姟鐘舵", readConverterExp = "0=姝e父,1=鏆傚仠") + private String status; + + public Long getJobId() + { + return jobId; + } + + public void setJobId(Long jobId) + { + this.jobId = jobId; + } + + @NotBlank(message = "浠诲姟鍚嶇О涓嶈兘涓虹┖") + @Size(min = 0, max = 64, message = "浠诲姟鍚嶇О涓嶈兘瓒呰繃64涓瓧绗") + public String getJobName() + { + return jobName; + } + + public void setJobName(String jobName) + { + this.jobName = jobName; + } + + public String getJobGroup() + { + return jobGroup; + } + + public void setJobGroup(String jobGroup) + { + this.jobGroup = jobGroup; + } + + @NotBlank(message = "璋冪敤鐩爣瀛楃涓蹭笉鑳戒负绌") + @Size(min = 0, max = 500, message = "璋冪敤鐩爣瀛楃涓查暱搴︿笉鑳借秴杩500涓瓧绗") + public String getInvokeTarget() + { + return invokeTarget; + } + + public void setInvokeTarget(String invokeTarget) + { + this.invokeTarget = invokeTarget; + } + + @NotBlank(message = "Cron鎵ц琛ㄨ揪寮忎笉鑳戒负绌") + @Size(min = 0, max = 255, message = "Cron鎵ц琛ㄨ揪寮忎笉鑳借秴杩255涓瓧绗") + public String getCronExpression() + { + return cronExpression; + } + + public void setCronExpression(String cronExpression) + { + this.cronExpression = cronExpression; + } + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + public Date getNextValidTime() + { + if (StringUtils.isNotEmpty(cronExpression)) + { + return CronUtils.getNextExecution(cronExpression); + } + return null; + } + + public String getMisfirePolicy() + { + return misfirePolicy; + } + + public void setMisfirePolicy(String misfirePolicy) + { + this.misfirePolicy = misfirePolicy; + } + + public String getConcurrent() + { + return concurrent; + } + + public void setConcurrent(String concurrent) + { + this.concurrent = concurrent; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("jobId", getJobId()) + .append("jobName", getJobName()) + .append("jobGroup", getJobGroup()) + .append("cronExpression", getCronExpression()) + .append("nextValidTime", getNextValidTime()) + .append("misfirePolicy", getMisfirePolicy()) + .append("concurrent", getConcurrent()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java new file mode 100644 index 0000000000000000000000000000000000000000..121c03594e9f9e4de9012157f196411becb97645 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/domain/SysJobLog.java @@ -0,0 +1,155 @@ +package com.ruoyi.quartz.domain; + +import java.util.Date; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 瀹氭椂浠诲姟璋冨害鏃ュ織琛 sys_job_log + * + * @author ruoyi + */ +public class SysJobLog extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** ID */ + @Excel(name = "鏃ュ織搴忓彿") + private Long jobLogId; + + /** 浠诲姟鍚嶇О */ + @Excel(name = "浠诲姟鍚嶇О") + private String jobName; + + /** 浠诲姟缁勫悕 */ + @Excel(name = "浠诲姟缁勫悕") + private String jobGroup; + + /** 璋冪敤鐩爣瀛楃涓 */ + @Excel(name = "璋冪敤鐩爣瀛楃涓") + private String invokeTarget; + + /** 鏃ュ織淇℃伅 */ + @Excel(name = "鏃ュ織淇℃伅") + private String jobMessage; + + /** 鎵ц鐘舵侊紙0姝e父 1澶辫触锛 */ + @Excel(name = "鎵ц鐘舵", readConverterExp = "0=姝e父,1=澶辫触") + private String status; + + /** 寮傚父淇℃伅 */ + @Excel(name = "寮傚父淇℃伅") + private String exceptionInfo; + + /** 寮濮嬫椂闂 */ + private Date startTime; + + /** 鍋滄鏃堕棿 */ + private Date stopTime; + + public Long getJobLogId() + { + return jobLogId; + } + + public void setJobLogId(Long jobLogId) + { + this.jobLogId = jobLogId; + } + + public String getJobName() + { + return jobName; + } + + public void setJobName(String jobName) + { + this.jobName = jobName; + } + + public String getJobGroup() + { + return jobGroup; + } + + public void setJobGroup(String jobGroup) + { + this.jobGroup = jobGroup; + } + + public String getInvokeTarget() + { + return invokeTarget; + } + + public void setInvokeTarget(String invokeTarget) + { + this.invokeTarget = invokeTarget; + } + + public String getJobMessage() + { + return jobMessage; + } + + public void setJobMessage(String jobMessage) + { + this.jobMessage = jobMessage; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getExceptionInfo() + { + return exceptionInfo; + } + + public void setExceptionInfo(String exceptionInfo) + { + this.exceptionInfo = exceptionInfo; + } + + public Date getStartTime() + { + return startTime; + } + + public void setStartTime(Date startTime) + { + this.startTime = startTime; + } + + public Date getStopTime() + { + return stopTime; + } + + public void setStopTime(Date stopTime) + { + this.stopTime = stopTime; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("jobLogId", getJobLogId()) + .append("jobName", getJobName()) + .append("jobGroup", getJobGroup()) + .append("jobMessage", getJobMessage()) + .append("status", getStatus()) + .append("exceptionInfo", getExceptionInfo()) + .append("startTime", getStartTime()) + .append("stopTime", getStopTime()) + .toString(); + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..727d9169bd81487486015addcc8b6e996f3016b0 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobLogMapper.java @@ -0,0 +1,64 @@ +package com.ruoyi.quartz.mapper; + +import java.util.List; +import com.ruoyi.quartz.domain.SysJobLog; + +/** + * 璋冨害浠诲姟鏃ュ織淇℃伅 鏁版嵁灞 + * + * @author ruoyi + */ +public interface SysJobLogMapper +{ + /** + * 鑾峰彇quartz璋冨害鍣ㄦ棩蹇楃殑璁″垝浠诲姟 + * + * @param jobLog 璋冨害鏃ュ織淇℃伅 + * @return 璋冨害浠诲姟鏃ュ織闆嗗悎 + */ + public List selectJobLogList(SysJobLog jobLog); + + /** + * 鏌ヨ鎵鏈夎皟搴︿换鍔℃棩蹇 + * + * @return 璋冨害浠诲姟鏃ュ織鍒楄〃 + */ + public List selectJobLogAll(); + + /** + * 閫氳繃璋冨害浠诲姟鏃ュ織ID鏌ヨ璋冨害淇℃伅 + * + * @param jobLogId 璋冨害浠诲姟鏃ュ織ID + * @return 璋冨害浠诲姟鏃ュ織瀵硅薄淇℃伅 + */ + public SysJobLog selectJobLogById(Long jobLogId); + + /** + * 鏂板浠诲姟鏃ュ織 + * + * @param jobLog 璋冨害鏃ュ織淇℃伅 + * @return 缁撴灉 + */ + public int insertJobLog(SysJobLog jobLog); + + /** + * 鎵归噺鍒犻櫎璋冨害鏃ュ織淇℃伅 + * + * @param logIds 闇瑕佸垹闄ょ殑鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteJobLogByIds(Long[] logIds); + + /** + * 鍒犻櫎浠诲姟鏃ュ織 + * + * @param jobId 璋冨害鏃ュ織ID + * @return 缁撴灉 + */ + public int deleteJobLogById(Long jobId); + + /** + * 娓呯┖浠诲姟鏃ュ織 + */ + public void cleanJobLog(); +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..20f45dbb6e9a51aee9af27a717f467a90c865490 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/mapper/SysJobMapper.java @@ -0,0 +1,67 @@ +package com.ruoyi.quartz.mapper; + +import java.util.List; +import com.ruoyi.quartz.domain.SysJob; + +/** + * 璋冨害浠诲姟淇℃伅 鏁版嵁灞 + * + * @author ruoyi + */ +public interface SysJobMapper +{ + /** + * 鏌ヨ璋冨害浠诲姟鏃ュ織闆嗗悎 + * + * @param job 璋冨害淇℃伅 + * @return 鎿嶄綔鏃ュ織闆嗗悎 + */ + public List selectJobList(SysJob job); + + /** + * 鏌ヨ鎵鏈夎皟搴︿换鍔 + * + * @return 璋冨害浠诲姟鍒楄〃 + */ + public List selectJobAll(); + + /** + * 閫氳繃璋冨害ID鏌ヨ璋冨害浠诲姟淇℃伅 + * + * @param jobId 璋冨害ID + * @return 瑙掕壊瀵硅薄淇℃伅 + */ + public SysJob selectJobById(Long jobId); + + /** + * 閫氳繃璋冨害ID鍒犻櫎璋冨害浠诲姟淇℃伅 + * + * @param jobId 璋冨害ID + * @return 缁撴灉 + */ + public int deleteJobById(Long jobId); + + /** + * 鎵归噺鍒犻櫎璋冨害浠诲姟淇℃伅 + * + * @param ids 闇瑕佸垹闄ょ殑鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteJobByIds(Long[] ids); + + /** + * 淇敼璋冨害浠诲姟淇℃伅 + * + * @param job 璋冨害浠诲姟淇℃伅 + * @return 缁撴灉 + */ + public int updateJob(SysJob job); + + /** + * 鏂板璋冨害浠诲姟淇℃伅 + * + * @param job 璋冨害浠诲姟淇℃伅 + * @return 缁撴灉 + */ + public int insertJob(SysJob job); +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java new file mode 100644 index 0000000000000000000000000000000000000000..8546792a7a5daf711d9eab55c3e5341b9f351e04 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobLogService.java @@ -0,0 +1,56 @@ +package com.ruoyi.quartz.service; + +import java.util.List; +import com.ruoyi.quartz.domain.SysJobLog; + +/** + * 瀹氭椂浠诲姟璋冨害鏃ュ織淇℃伅淇℃伅 鏈嶅姟灞 + * + * @author ruoyi + */ +public interface ISysJobLogService +{ + /** + * 鑾峰彇quartz璋冨害鍣ㄦ棩蹇楃殑璁″垝浠诲姟 + * + * @param jobLog 璋冨害鏃ュ織淇℃伅 + * @return 璋冨害浠诲姟鏃ュ織闆嗗悎 + */ + public List selectJobLogList(SysJobLog jobLog); + + /** + * 閫氳繃璋冨害浠诲姟鏃ュ織ID鏌ヨ璋冨害淇℃伅 + * + * @param jobLogId 璋冨害浠诲姟鏃ュ織ID + * @return 璋冨害浠诲姟鏃ュ織瀵硅薄淇℃伅 + */ + public SysJobLog selectJobLogById(Long jobLogId); + + /** + * 鏂板浠诲姟鏃ュ織 + * + * @param jobLog 璋冨害鏃ュ織淇℃伅 + */ + public void addJobLog(SysJobLog jobLog); + + /** + * 鎵归噺鍒犻櫎璋冨害鏃ュ織淇℃伅 + * + * @param logIds 闇瑕佸垹闄ょ殑鏃ュ織ID + * @return 缁撴灉 + */ + public int deleteJobLogByIds(Long[] logIds); + + /** + * 鍒犻櫎浠诲姟鏃ュ織 + * + * @param jobId 璋冨害鏃ュ織ID + * @return 缁撴灉 + */ + public int deleteJobLogById(Long jobId); + + /** + * 娓呯┖浠诲姟鏃ュ織 + */ + public void cleanJobLog(); +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java new file mode 100644 index 0000000000000000000000000000000000000000..437ade82b5c08d47a016c6fc2532719c03050a76 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/ISysJobService.java @@ -0,0 +1,102 @@ +package com.ruoyi.quartz.service; + +import java.util.List; +import org.quartz.SchedulerException; +import com.ruoyi.common.exception.job.TaskException; +import com.ruoyi.quartz.domain.SysJob; + +/** + * 瀹氭椂浠诲姟璋冨害淇℃伅淇℃伅 鏈嶅姟灞 + * + * @author ruoyi + */ +public interface ISysJobService +{ + /** + * 鑾峰彇quartz璋冨害鍣ㄧ殑璁″垝浠诲姟 + * + * @param job 璋冨害淇℃伅 + * @return 璋冨害浠诲姟闆嗗悎 + */ + public List selectJobList(SysJob job); + + /** + * 閫氳繃璋冨害浠诲姟ID鏌ヨ璋冨害淇℃伅 + * + * @param jobId 璋冨害浠诲姟ID + * @return 璋冨害浠诲姟瀵硅薄淇℃伅 + */ + public SysJob selectJobById(Long jobId); + + /** + * 鏆傚仠浠诲姟 + * + * @param job 璋冨害淇℃伅 + * @return 缁撴灉 + */ + public int pauseJob(SysJob job) throws SchedulerException; + + /** + * 鎭㈠浠诲姟 + * + * @param job 璋冨害淇℃伅 + * @return 缁撴灉 + */ + public int resumeJob(SysJob job) throws SchedulerException; + + /** + * 鍒犻櫎浠诲姟鍚庯紝鎵瀵瑰簲鐨則rigger涔熷皢琚垹闄 + * + * @param job 璋冨害淇℃伅 + * @return 缁撴灉 + */ + public int deleteJob(SysJob job) throws SchedulerException; + + /** + * 鎵归噺鍒犻櫎璋冨害淇℃伅 + * + * @param jobIds 闇瑕佸垹闄ょ殑浠诲姟ID + * @return 缁撴灉 + */ + public void deleteJobByIds(Long[] jobIds) throws SchedulerException; + + /** + * 浠诲姟璋冨害鐘舵佷慨鏀 + * + * @param job 璋冨害淇℃伅 + * @return 缁撴灉 + */ + public int changeStatus(SysJob job) throws SchedulerException; + + /** + * 绔嬪嵆杩愯浠诲姟 + * + * @param job 璋冨害淇℃伅 + * @return 缁撴灉 + */ + public boolean run(SysJob job) throws SchedulerException; + + /** + * 鏂板浠诲姟 + * + * @param job 璋冨害淇℃伅 + * @return 缁撴灉 + */ + public int insertJob(SysJob job) throws SchedulerException, TaskException; + + /** + * 鏇存柊浠诲姟 + * + * @param job 璋冨害淇℃伅 + * @return 缁撴灉 + */ + public int updateJob(SysJob job) throws SchedulerException, TaskException; + + /** + * 鏍¢獙cron琛ㄨ揪寮忔槸鍚︽湁鏁 + * + * @param cronExpression 琛ㄨ揪寮 + * @return 缁撴灉 + */ + public boolean checkCronExpressionIsValid(String cronExpression); +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..812eed77f3898b5fbd81414d60b954e3433f79a6 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobLogServiceImpl.java @@ -0,0 +1,87 @@ +package com.ruoyi.quartz.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.quartz.domain.SysJobLog; +import com.ruoyi.quartz.mapper.SysJobLogMapper; +import com.ruoyi.quartz.service.ISysJobLogService; + +/** + * 瀹氭椂浠诲姟璋冨害鏃ュ織淇℃伅 鏈嶅姟灞 + * + * @author ruoyi + */ +@Service +public class SysJobLogServiceImpl implements ISysJobLogService +{ + @Autowired + private SysJobLogMapper jobLogMapper; + + /** + * 鑾峰彇quartz璋冨害鍣ㄦ棩蹇楃殑璁″垝浠诲姟 + * + * @param jobLog 璋冨害鏃ュ織淇℃伅 + * @return 璋冨害浠诲姟鏃ュ織闆嗗悎 + */ + @Override + public List selectJobLogList(SysJobLog jobLog) + { + return jobLogMapper.selectJobLogList(jobLog); + } + + /** + * 閫氳繃璋冨害浠诲姟鏃ュ織ID鏌ヨ璋冨害淇℃伅 + * + * @param jobLogId 璋冨害浠诲姟鏃ュ織ID + * @return 璋冨害浠诲姟鏃ュ織瀵硅薄淇℃伅 + */ + @Override + public SysJobLog selectJobLogById(Long jobLogId) + { + return jobLogMapper.selectJobLogById(jobLogId); + } + + /** + * 鏂板浠诲姟鏃ュ織 + * + * @param jobLog 璋冨害鏃ュ織淇℃伅 + */ + @Override + public void addJobLog(SysJobLog jobLog) + { + jobLogMapper.insertJobLog(jobLog); + } + + /** + * 鎵归噺鍒犻櫎璋冨害鏃ュ織淇℃伅 + * + * @param logIds 闇瑕佸垹闄ょ殑鏁版嵁ID + * @return 缁撴灉 + */ + @Override + public int deleteJobLogByIds(Long[] logIds) + { + return jobLogMapper.deleteJobLogByIds(logIds); + } + + /** + * 鍒犻櫎浠诲姟鏃ュ織 + * + * @param jobId 璋冨害鏃ュ織ID + */ + @Override + public int deleteJobLogById(Long jobId) + { + return jobLogMapper.deleteJobLogById(jobId); + } + + /** + * 娓呯┖浠诲姟鏃ュ織 + */ + @Override + public void cleanJobLog() + { + jobLogMapper.cleanJobLog(); + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..77fdbb572f6cc621d65bdb98de0feb18ad6d1e1c --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/service/impl/SysJobServiceImpl.java @@ -0,0 +1,261 @@ +package com.ruoyi.quartz.service.impl; + +import java.util.List; +import javax.annotation.PostConstruct; +import org.quartz.JobDataMap; +import org.quartz.JobKey; +import org.quartz.Scheduler; +import org.quartz.SchedulerException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.ruoyi.common.constant.ScheduleConstants; +import com.ruoyi.common.exception.job.TaskException; +import com.ruoyi.quartz.domain.SysJob; +import com.ruoyi.quartz.mapper.SysJobMapper; +import com.ruoyi.quartz.service.ISysJobService; +import com.ruoyi.quartz.util.CronUtils; +import com.ruoyi.quartz.util.ScheduleUtils; + +/** + * 瀹氭椂浠诲姟璋冨害淇℃伅 鏈嶅姟灞 + * + * @author ruoyi + */ +@Service +public class SysJobServiceImpl implements ISysJobService +{ + @Autowired + private Scheduler scheduler; + + @Autowired + private SysJobMapper jobMapper; + + /** + * 椤圭洰鍚姩鏃讹紝鍒濆鍖栧畾鏃跺櫒 涓昏鏄槻姝㈡墜鍔ㄤ慨鏀规暟鎹簱瀵艰嚧鏈悓姝ュ埌瀹氭椂浠诲姟澶勭悊锛堟敞锛氫笉鑳芥墜鍔ㄤ慨鏀规暟鎹簱ID鍜屼换鍔$粍鍚嶏紝鍚﹀垯浼氬鑷磋剰鏁版嵁锛 + */ + @PostConstruct + public void init() throws SchedulerException, TaskException + { + scheduler.clear(); + List jobList = jobMapper.selectJobAll(); + for (SysJob job : jobList) + { + ScheduleUtils.createScheduleJob(scheduler, job); + } + } + + /** + * 鑾峰彇quartz璋冨害鍣ㄧ殑璁″垝浠诲姟鍒楄〃 + * + * @param job 璋冨害淇℃伅 + * @return + */ + @Override + public List selectJobList(SysJob job) + { + return jobMapper.selectJobList(job); + } + + /** + * 閫氳繃璋冨害浠诲姟ID鏌ヨ璋冨害淇℃伅 + * + * @param jobId 璋冨害浠诲姟ID + * @return 璋冨害浠诲姟瀵硅薄淇℃伅 + */ + @Override + public SysJob selectJobById(Long jobId) + { + return jobMapper.selectJobById(jobId); + } + + /** + * 鏆傚仠浠诲姟 + * + * @param job 璋冨害淇℃伅 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int pauseJob(SysJob job) throws SchedulerException + { + Long jobId = job.getJobId(); + String jobGroup = job.getJobGroup(); + job.setStatus(ScheduleConstants.Status.PAUSE.getValue()); + int rows = jobMapper.updateJob(job); + if (rows > 0) + { + scheduler.pauseJob(ScheduleUtils.getJobKey(jobId, jobGroup)); + } + return rows; + } + + /** + * 鎭㈠浠诲姟 + * + * @param job 璋冨害淇℃伅 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int resumeJob(SysJob job) throws SchedulerException + { + Long jobId = job.getJobId(); + String jobGroup = job.getJobGroup(); + job.setStatus(ScheduleConstants.Status.NORMAL.getValue()); + int rows = jobMapper.updateJob(job); + if (rows > 0) + { + scheduler.resumeJob(ScheduleUtils.getJobKey(jobId, jobGroup)); + } + return rows; + } + + /** + * 鍒犻櫎浠诲姟鍚庯紝鎵瀵瑰簲鐨則rigger涔熷皢琚垹闄 + * + * @param job 璋冨害淇℃伅 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int deleteJob(SysJob job) throws SchedulerException + { + Long jobId = job.getJobId(); + String jobGroup = job.getJobGroup(); + int rows = jobMapper.deleteJobById(jobId); + if (rows > 0) + { + scheduler.deleteJob(ScheduleUtils.getJobKey(jobId, jobGroup)); + } + return rows; + } + + /** + * 鎵归噺鍒犻櫎璋冨害淇℃伅 + * + * @param jobIds 闇瑕佸垹闄ょ殑浠诲姟ID + * @return 缁撴灉 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteJobByIds(Long[] jobIds) throws SchedulerException + { + for (Long jobId : jobIds) + { + SysJob job = jobMapper.selectJobById(jobId); + deleteJob(job); + } + } + + /** + * 浠诲姟璋冨害鐘舵佷慨鏀 + * + * @param job 璋冨害淇℃伅 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int changeStatus(SysJob job) throws SchedulerException + { + int rows = 0; + String status = job.getStatus(); + if (ScheduleConstants.Status.NORMAL.getValue().equals(status)) + { + rows = resumeJob(job); + } + else if (ScheduleConstants.Status.PAUSE.getValue().equals(status)) + { + rows = pauseJob(job); + } + return rows; + } + + /** + * 绔嬪嵆杩愯浠诲姟 + * + * @param job 璋冨害淇℃伅 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public boolean run(SysJob job) throws SchedulerException + { + boolean result = false; + Long jobId = job.getJobId(); + String jobGroup = job.getJobGroup(); + SysJob properties = selectJobById(job.getJobId()); + // 鍙傛暟 + JobDataMap dataMap = new JobDataMap(); + dataMap.put(ScheduleConstants.TASK_PROPERTIES, properties); + JobKey jobKey = ScheduleUtils.getJobKey(jobId, jobGroup); + if (scheduler.checkExists(jobKey)) + { + result = true; + scheduler.triggerJob(jobKey, dataMap); + } + return result; + } + + /** + * 鏂板浠诲姟 + * + * @param job 璋冨害淇℃伅 璋冨害淇℃伅 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int insertJob(SysJob job) throws SchedulerException, TaskException + { + job.setStatus(ScheduleConstants.Status.PAUSE.getValue()); + int rows = jobMapper.insertJob(job); + if (rows > 0) + { + ScheduleUtils.createScheduleJob(scheduler, job); + } + return rows; + } + + /** + * 鏇存柊浠诲姟鐨勬椂闂磋〃杈惧紡 + * + * @param job 璋冨害淇℃伅 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateJob(SysJob job) throws SchedulerException, TaskException + { + SysJob properties = selectJobById(job.getJobId()); + int rows = jobMapper.updateJob(job); + if (rows > 0) + { + updateSchedulerJob(job, properties.getJobGroup()); + } + return rows; + } + + /** + * 鏇存柊浠诲姟 + * + * @param job 浠诲姟瀵硅薄 + * @param jobGroup 浠诲姟缁勫悕 + */ + public void updateSchedulerJob(SysJob job, String jobGroup) throws SchedulerException, TaskException + { + Long jobId = job.getJobId(); + // 鍒ゆ柇鏄惁瀛樺湪 + JobKey jobKey = ScheduleUtils.getJobKey(jobId, jobGroup); + if (scheduler.checkExists(jobKey)) + { + // 闃叉鍒涘缓鏃跺瓨鍦ㄦ暟鎹棶棰 鍏堢Щ闄わ紝鐒跺悗鍦ㄦ墽琛屽垱寤烘搷浣 + scheduler.deleteJob(jobKey); + } + ScheduleUtils.createScheduleJob(scheduler, job); + } + + /** + * 鏍¢獙cron琛ㄨ揪寮忔槸鍚︽湁鏁 + * + * @param cronExpression 琛ㄨ揪寮 + * @return 缁撴灉 + */ + @Override + public boolean checkCronExpressionIsValid(String cronExpression) + { + return CronUtils.isValid(cronExpression); + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java new file mode 100644 index 0000000000000000000000000000000000000000..853243baf91c72c9772235df75e7d80b66c02b92 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/RyTask.java @@ -0,0 +1,28 @@ +package com.ruoyi.quartz.task; + +import org.springframework.stereotype.Component; +import com.ruoyi.common.utils.StringUtils; + +/** + * 瀹氭椂浠诲姟璋冨害娴嬭瘯 + * + * @author ruoyi + */ +@Component("ryTask") +public class RyTask +{ + public void ryMultipleParams(String s, Boolean b, Long l, Double d, Integer i) + { + System.out.println(StringUtils.format("鎵ц澶氬弬鏂规硶锛 瀛楃涓茬被鍨媨}锛屽竷灏旂被鍨媨}锛岄暱鏁村瀷{}锛屾诞鐐瑰瀷{}锛屾暣褰}", s, b, l, d, i)); + } + + public void ryParams(String params) + { + System.out.println("鎵ц鏈夊弬鏂规硶锛" + params); + } + + public void ryNoParams() + { + System.out.println("鎵ц鏃犲弬鏂规硶"); + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java new file mode 100644 index 0000000000000000000000000000000000000000..731a5eb5c3c27faeb4dde36d8c357a152dd34956 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/AbstractQuartzJob.java @@ -0,0 +1,107 @@ +package com.ruoyi.quartz.util; + +import java.util.Date; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.constant.ScheduleConstants; +import com.ruoyi.common.utils.ExceptionUtil; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.bean.BeanUtils; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.quartz.domain.SysJob; +import com.ruoyi.quartz.domain.SysJobLog; +import com.ruoyi.quartz.service.ISysJobLogService; + +/** + * 鎶借薄quartz璋冪敤 + * + * @author ruoyi + */ +public abstract class AbstractQuartzJob implements Job +{ + private static final Logger log = LoggerFactory.getLogger(AbstractQuartzJob.class); + + /** + * 绾跨▼鏈湴鍙橀噺 + */ + private static ThreadLocal threadLocal = new ThreadLocal<>(); + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException + { + SysJob sysJob = new SysJob(); + BeanUtils.copyBeanProp(sysJob, context.getMergedJobDataMap().get(ScheduleConstants.TASK_PROPERTIES)); + try + { + before(context, sysJob); + if (sysJob != null) + { + doExecute(context, sysJob); + } + after(context, sysJob, null); + } + catch (Exception e) + { + log.error("浠诲姟鎵ц寮傚父 - 锛", e); + after(context, sysJob, e); + } + } + + /** + * 鎵ц鍓 + * + * @param context 宸ヤ綔鎵ц涓婁笅鏂囧璞 + * @param sysJob 绯荤粺璁″垝浠诲姟 + */ + protected void before(JobExecutionContext context, SysJob sysJob) + { + threadLocal.set(new Date()); + } + + /** + * 鎵ц鍚 + * + * @param context 宸ヤ綔鎵ц涓婁笅鏂囧璞 + * @param sysJob 绯荤粺璁″垝浠诲姟 + */ + protected void after(JobExecutionContext context, SysJob sysJob, Exception e) + { + Date startTime = threadLocal.get(); + threadLocal.remove(); + + final SysJobLog sysJobLog = new SysJobLog(); + sysJobLog.setJobName(sysJob.getJobName()); + sysJobLog.setJobGroup(sysJob.getJobGroup()); + sysJobLog.setInvokeTarget(sysJob.getInvokeTarget()); + sysJobLog.setStartTime(startTime); + sysJobLog.setStopTime(new Date()); + long runMs = sysJobLog.getStopTime().getTime() - sysJobLog.getStartTime().getTime(); + sysJobLog.setJobMessage(sysJobLog.getJobName() + " 鎬诲叡鑰楁椂锛" + runMs + "姣"); + if (e != null) + { + sysJobLog.setStatus(Constants.FAIL); + String errorMsg = StringUtils.substring(ExceptionUtil.getExceptionMessage(e), 0, 2000); + sysJobLog.setExceptionInfo(errorMsg); + } + else + { + sysJobLog.setStatus(Constants.SUCCESS); + } + + // 鍐欏叆鏁版嵁搴撳綋涓 + SpringUtils.getBean(ISysJobLogService.class).addJobLog(sysJobLog); + } + + /** + * 鎵ц鏂规硶锛岀敱瀛愮被閲嶈浇 + * + * @param context 宸ヤ綔鎵ц涓婁笅鏂囧璞 + * @param sysJob 绯荤粺璁″垝浠诲姟 + * @throws Exception 鎵ц杩囩▼涓殑寮傚父 + */ + protected abstract void doExecute(JobExecutionContext context, SysJob sysJob) throws Exception; +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..dd53839791b89b85a390c140ad84cc322043f87a --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/CronUtils.java @@ -0,0 +1,63 @@ +package com.ruoyi.quartz.util; + +import java.text.ParseException; +import java.util.Date; +import org.quartz.CronExpression; + +/** + * cron琛ㄨ揪寮忓伐鍏风被 + * + * @author ruoyi + * + */ +public class CronUtils +{ + /** + * 杩斿洖涓涓竷灏斿间唬琛ㄤ竴涓粰瀹氱殑Cron琛ㄨ揪寮忕殑鏈夋晥鎬 + * + * @param cronExpression Cron琛ㄨ揪寮 + * @return boolean 琛ㄨ揪寮忔槸鍚︽湁鏁 + */ + public static boolean isValid(String cronExpression) + { + return CronExpression.isValidExpression(cronExpression); + } + + /** + * 杩斿洖涓涓瓧绗︿覆鍊,琛ㄧず璇ユ秷鎭棤鏁圕ron琛ㄨ揪寮忕粰鍑烘湁鏁堟 + * + * @param cronExpression Cron琛ㄨ揪寮 + * @return String 鏃犳晥鏃惰繑鍥炶〃杈惧紡閿欒鎻忚堪,濡傛灉鏈夋晥杩斿洖null + */ + public static String getInvalidMessage(String cronExpression) + { + try + { + new CronExpression(cronExpression); + return null; + } + catch (ParseException pe) + { + return pe.getMessage(); + } + } + + /** + * 杩斿洖涓嬩竴涓墽琛屾椂闂存牴鎹粰瀹氱殑Cron琛ㄨ揪寮 + * + * @param cronExpression Cron琛ㄨ揪寮 + * @return Date 涓嬫Cron琛ㄨ揪寮忔墽琛屾椂闂 + */ + public static Date getNextExecution(String cronExpression) + { + try + { + CronExpression cron = new CronExpression(cronExpression); + return cron.getNextValidTimeAfter(new Date(System.currentTimeMillis())); + } + catch (ParseException e) + { + throw new IllegalArgumentException(e.getMessage()); + } + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..e3dc62c616c76a79b194e111bcf20a57b0470d60 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/JobInvokeUtil.java @@ -0,0 +1,182 @@ +package com.ruoyi.quartz.util; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.LinkedList; +import java.util.List; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.quartz.domain.SysJob; + +/** + * 浠诲姟鎵ц宸ュ叿 + * + * @author ruoyi + */ +public class JobInvokeUtil +{ + /** + * 鎵ц鏂规硶 + * + * @param sysJob 绯荤粺浠诲姟 + */ + public static void invokeMethod(SysJob sysJob) throws Exception + { + String invokeTarget = sysJob.getInvokeTarget(); + String beanName = getBeanName(invokeTarget); + String methodName = getMethodName(invokeTarget); + List methodParams = getMethodParams(invokeTarget); + + if (!isValidClassName(beanName)) + { + Object bean = SpringUtils.getBean(beanName); + invokeMethod(bean, methodName, methodParams); + } + else + { + Object bean = Class.forName(beanName).getDeclaredConstructor().newInstance(); + invokeMethod(bean, methodName, methodParams); + } + } + + /** + * 璋冪敤浠诲姟鏂规硶 + * + * @param bean 鐩爣瀵硅薄 + * @param methodName 鏂规硶鍚嶇О + * @param methodParams 鏂规硶鍙傛暟 + */ + private static void invokeMethod(Object bean, String methodName, List methodParams) + throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, + InvocationTargetException + { + if (StringUtils.isNotNull(methodParams) && methodParams.size() > 0) + { + Method method = bean.getClass().getMethod(methodName, getMethodParamsType(methodParams)); + method.invoke(bean, getMethodParamsValue(methodParams)); + } + else + { + Method method = bean.getClass().getMethod(methodName); + method.invoke(bean); + } + } + + /** + * 鏍¢獙鏄惁涓轰负class鍖呭悕 + * + * @param invokeTarget 鍚嶇О + * @return true鏄 false鍚 + */ + public static boolean isValidClassName(String invokeTarget) + { + return StringUtils.countMatches(invokeTarget, ".") > 1; + } + + /** + * 鑾峰彇bean鍚嶇О + * + * @param invokeTarget 鐩爣瀛楃涓 + * @return bean鍚嶇О + */ + public static String getBeanName(String invokeTarget) + { + String beanName = StringUtils.substringBefore(invokeTarget, "("); + return StringUtils.substringBeforeLast(beanName, "."); + } + + /** + * 鑾峰彇bean鏂规硶 + * + * @param invokeTarget 鐩爣瀛楃涓 + * @return method鏂规硶 + */ + public static String getMethodName(String invokeTarget) + { + String methodName = StringUtils.substringBefore(invokeTarget, "("); + return StringUtils.substringAfterLast(methodName, "."); + } + + /** + * 鑾峰彇method鏂规硶鍙傛暟鐩稿叧鍒楄〃 + * + * @param invokeTarget 鐩爣瀛楃涓 + * @return method鏂规硶鐩稿叧鍙傛暟鍒楄〃 + */ + public static List getMethodParams(String invokeTarget) + { + String methodStr = StringUtils.substringBetween(invokeTarget, "(", ")"); + if (StringUtils.isEmpty(methodStr)) + { + return null; + } + String[] methodParams = methodStr.split(",(?=([^\"']*[\"'][^\"']*[\"'])*[^\"']*$)"); + List classs = new LinkedList<>(); + for (int i = 0; i < methodParams.length; i++) + { + String str = StringUtils.trimToEmpty(methodParams[i]); + // String瀛楃涓茬被鍨嬶紝浠'鎴"寮澶 + if (StringUtils.startsWithAny(str, "'", "\"")) + { + classs.add(new Object[] { StringUtils.substring(str, 1, str.length() - 1), String.class }); + } + // boolean甯冨皵绫诲瀷锛岀瓑浜巘rue鎴栬協alse + else if ("true".equalsIgnoreCase(str) || "false".equalsIgnoreCase(str)) + { + classs.add(new Object[] { Boolean.valueOf(str), Boolean.class }); + } + // long闀挎暣褰紝浠缁撳熬 + else if (StringUtils.endsWith(str, "L")) + { + classs.add(new Object[] { Long.valueOf(StringUtils.substring(str, 0, str.length() - 1)), Long.class }); + } + // double娴偣绫诲瀷锛屼互D缁撳熬 + else if (StringUtils.endsWith(str, "D")) + { + classs.add(new Object[] { Double.valueOf(StringUtils.substring(str, 0, str.length() - 1)), Double.class }); + } + // 鍏朵粬绫诲瀷褰掔被涓烘暣褰 + else + { + classs.add(new Object[] { Integer.valueOf(str), Integer.class }); + } + } + return classs; + } + + /** + * 鑾峰彇鍙傛暟绫诲瀷 + * + * @param methodParams 鍙傛暟鐩稿叧鍒楄〃 + * @return 鍙傛暟绫诲瀷鍒楄〃 + */ + public static Class[] getMethodParamsType(List methodParams) + { + Class[] classs = new Class[methodParams.size()]; + int index = 0; + for (Object[] os : methodParams) + { + classs[index] = (Class) os[1]; + index++; + } + return classs; + } + + /** + * 鑾峰彇鍙傛暟鍊 + * + * @param methodParams 鍙傛暟鐩稿叧鍒楄〃 + * @return 鍙傛暟鍊煎垪琛 + */ + public static Object[] getMethodParamsValue(List methodParams) + { + Object[] classs = new Object[methodParams.size()]; + int index = 0; + for (Object[] os : methodParams) + { + classs[index] = (Object) os[0]; + index++; + } + return classs; + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzDisallowConcurrentExecution.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzDisallowConcurrentExecution.java new file mode 100644 index 0000000000000000000000000000000000000000..5e135580b6ba205ee217f74c4957494b95d62bc7 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzDisallowConcurrentExecution.java @@ -0,0 +1,21 @@ +package com.ruoyi.quartz.util; + +import org.quartz.DisallowConcurrentExecution; +import org.quartz.JobExecutionContext; +import com.ruoyi.quartz.domain.SysJob; + +/** + * 瀹氭椂浠诲姟澶勭悊锛堢姝㈠苟鍙戞墽琛岋級 + * + * @author ruoyi + * + */ +@DisallowConcurrentExecution +public class QuartzDisallowConcurrentExecution extends AbstractQuartzJob +{ + @Override + protected void doExecute(JobExecutionContext context, SysJob sysJob) throws Exception + { + JobInvokeUtil.invokeMethod(sysJob); + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzJobExecution.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzJobExecution.java new file mode 100644 index 0000000000000000000000000000000000000000..e97532617c9228434f5816b1bcb4807e816ed70d --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/QuartzJobExecution.java @@ -0,0 +1,19 @@ +package com.ruoyi.quartz.util; + +import org.quartz.JobExecutionContext; +import com.ruoyi.quartz.domain.SysJob; + +/** + * 瀹氭椂浠诲姟澶勭悊锛堝厑璁稿苟鍙戞墽琛岋級 + * + * @author ruoyi + * + */ +public class QuartzJobExecution extends AbstractQuartzJob +{ + @Override + protected void doExecute(JobExecutionContext context, SysJob sysJob) throws Exception + { + JobInvokeUtil.invokeMethod(sysJob); + } +} diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..21fedae3d044404ff5816981480264df18869912 --- /dev/null +++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/util/ScheduleUtils.java @@ -0,0 +1,141 @@ +package com.ruoyi.quartz.util; + +import org.quartz.CronScheduleBuilder; +import org.quartz.CronTrigger; +import org.quartz.Job; +import org.quartz.JobBuilder; +import org.quartz.JobDetail; +import org.quartz.JobKey; +import org.quartz.Scheduler; +import org.quartz.SchedulerException; +import org.quartz.TriggerBuilder; +import org.quartz.TriggerKey; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.constant.ScheduleConstants; +import com.ruoyi.common.exception.job.TaskException; +import com.ruoyi.common.exception.job.TaskException.Code; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.quartz.domain.SysJob; + +/** + * 瀹氭椂浠诲姟宸ュ叿绫 + * + * @author ruoyi + * + */ +public class ScheduleUtils +{ + /** + * 寰楀埌quartz浠诲姟绫 + * + * @param sysJob 鎵ц璁″垝 + * @return 鍏蜂綋鎵ц浠诲姟绫 + */ + private static Class getQuartzJobClass(SysJob sysJob) + { + boolean isConcurrent = "0".equals(sysJob.getConcurrent()); + return isConcurrent ? QuartzJobExecution.class : QuartzDisallowConcurrentExecution.class; + } + + /** + * 鏋勫缓浠诲姟瑙﹀彂瀵硅薄 + */ + public static TriggerKey getTriggerKey(Long jobId, String jobGroup) + { + return TriggerKey.triggerKey(ScheduleConstants.TASK_CLASS_NAME + jobId, jobGroup); + } + + /** + * 鏋勫缓浠诲姟閿璞 + */ + public static JobKey getJobKey(Long jobId, String jobGroup) + { + return JobKey.jobKey(ScheduleConstants.TASK_CLASS_NAME + jobId, jobGroup); + } + + /** + * 鍒涘缓瀹氭椂浠诲姟 + */ + public static void createScheduleJob(Scheduler scheduler, SysJob job) throws SchedulerException, TaskException + { + Class jobClass = getQuartzJobClass(job); + // 鏋勫缓job淇℃伅 + Long jobId = job.getJobId(); + String jobGroup = job.getJobGroup(); + JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(getJobKey(jobId, jobGroup)).build(); + + // 琛ㄨ揪寮忚皟搴︽瀯寤哄櫒 + CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(job.getCronExpression()); + cronScheduleBuilder = handleCronScheduleMisfirePolicy(job, cronScheduleBuilder); + + // 鎸夋柊鐨刢ronExpression琛ㄨ揪寮忔瀯寤轰竴涓柊鐨則rigger + CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(getTriggerKey(jobId, jobGroup)) + .withSchedule(cronScheduleBuilder).build(); + + // 鏀惧叆鍙傛暟锛岃繍琛屾椂鐨勬柟娉曞彲浠ヨ幏鍙 + jobDetail.getJobDataMap().put(ScheduleConstants.TASK_PROPERTIES, job); + + // 鍒ゆ柇鏄惁瀛樺湪 + if (scheduler.checkExists(getJobKey(jobId, jobGroup))) + { + // 闃叉鍒涘缓鏃跺瓨鍦ㄦ暟鎹棶棰 鍏堢Щ闄わ紝鐒跺悗鍦ㄦ墽琛屽垱寤烘搷浣 + scheduler.deleteJob(getJobKey(jobId, jobGroup)); + } + + // 鍒ゆ柇浠诲姟鏄惁杩囨湡 + if (StringUtils.isNotNull(CronUtils.getNextExecution(job.getCronExpression()))) + { + // 鎵ц璋冨害浠诲姟 + scheduler.scheduleJob(jobDetail, trigger); + } + + // 鏆傚仠浠诲姟 + if (job.getStatus().equals(ScheduleConstants.Status.PAUSE.getValue())) + { + scheduler.pauseJob(ScheduleUtils.getJobKey(jobId, jobGroup)); + } + } + + /** + * 璁剧疆瀹氭椂浠诲姟绛栫暐 + */ + public static CronScheduleBuilder handleCronScheduleMisfirePolicy(SysJob job, CronScheduleBuilder cb) + throws TaskException + { + switch (job.getMisfirePolicy()) + { + case ScheduleConstants.MISFIRE_DEFAULT: + return cb; + case ScheduleConstants.MISFIRE_IGNORE_MISFIRES: + return cb.withMisfireHandlingInstructionIgnoreMisfires(); + case ScheduleConstants.MISFIRE_FIRE_AND_PROCEED: + return cb.withMisfireHandlingInstructionFireAndProceed(); + case ScheduleConstants.MISFIRE_DO_NOTHING: + return cb.withMisfireHandlingInstructionDoNothing(); + default: + throw new TaskException("The task misfire policy '" + job.getMisfirePolicy() + + "' cannot be used in cron schedule tasks", Code.CONFIG_ERROR); + } + } + + /** + * 妫鏌ュ寘鍚嶆槸鍚︿负鐧藉悕鍗曢厤缃 + * + * @param invokeTarget 鐩爣瀛楃涓 + * @return 缁撴灉 + */ + public static boolean whiteList(String invokeTarget) + { + String packageName = StringUtils.substringBefore(invokeTarget, "("); + int count = StringUtils.countMatches(packageName, "."); + if (count > 1) + { + return StringUtils.containsAnyIgnoreCase(invokeTarget, Constants.JOB_WHITELIST_STR); + } + Object obj = SpringUtils.getBean(StringUtils.split(invokeTarget, ".")[0]); + String beanPackageName = obj.getClass().getPackage().getName(); + return StringUtils.containsAnyIgnoreCase(beanPackageName, Constants.JOB_WHITELIST_STR) + && !StringUtils.containsAnyIgnoreCase(beanPackageName, Constants.JOB_ERROR_STR); + } +} diff --git a/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml b/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..ba1b683778778618f5bfa633f52aaf3098f28a63 --- /dev/null +++ b/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + select job_log_id, job_name, job_group, invoke_target, job_message, status, exception_info, create_time + from sys_job_log + + + + + + + + + + delete from sys_job_log where job_log_id = #{jobLogId} + + + + delete from sys_job_log where job_log_id in + + #{jobLogId} + + + + + truncate table sys_job_log + + + + insert into sys_job_log( + job_log_id, + job_name, + job_group, + invoke_target, + job_message, + status, + exception_info, + create_time + )values( + #{jobLogId}, + #{jobName}, + #{jobGroup}, + #{invokeTarget}, + #{jobMessage}, + #{status}, + #{exceptionInfo}, + sysdate() + ) + + + \ No newline at end of file diff --git a/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml b/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..5605c4445ea0dd3d02ee4a4a7f3131e869d3780e --- /dev/null +++ b/ruoyi-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + select job_id, job_name, job_group, invoke_target, cron_expression, misfire_policy, concurrent, status, create_by, create_time, remark + from sys_job + + + + + + + + + + delete from sys_job where job_id = #{jobId} + + + + delete from sys_job where job_id in + + #{jobId} + + + + + update sys_job + + job_name = #{jobName}, + job_group = #{jobGroup}, + invoke_target = #{invokeTarget}, + cron_expression = #{cronExpression}, + misfire_policy = #{misfirePolicy}, + concurrent = #{concurrent}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where job_id = #{jobId} + + + + insert into sys_job( + job_id, + job_name, + job_group, + invoke_target, + cron_expression, + misfire_policy, + concurrent, + status, + remark, + create_by, + create_time + )values( + #{jobId}, + #{jobName}, + #{jobGroup}, + #{invokeTarget}, + #{cronExpression}, + #{misfirePolicy}, + #{concurrent}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + \ No newline at end of file diff --git a/ruoyi-system/pom.xml b/ruoyi-system/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..d9e7824e0ad0e23b106ddbc03c62c2da51bff14d --- /dev/null +++ b/ruoyi-system/pom.xml @@ -0,0 +1,28 @@ + + + + ruoyi + com.ruoyi + 3.8.8 + + 4.0.0 + + ruoyi-system + + + system绯荤粺妯″潡 + + + + + + + com.ruoyi + ruoyi-common + + + + + diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbAuthorizeHonor.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbAuthorizeHonor.java new file mode 100644 index 0000000000000000000000000000000000000000..bdd2f3eba830d84d921fd45d3e34a5a6f57673fd --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbAuthorizeHonor.java @@ -0,0 +1,97 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 鎺堟潈鑽h獕瀵硅薄 tb_authorize_honor + * + * @author ruoyi + * @date 2024-10-16 + */ +@Getter +@Setter +@ToString +public class TbAuthorizeHonor extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鎺堟潈鑽h獕涓婚敭ID */ + private Long authorizeHonorId; + + /** 鎺堟潈鑽h獕鍥 */ + @Excel(name = "鎺堟潈鑽h獕鍥") + private String authorizeHonorImg; + + /** 鎺堟潈鑽h獕鍚 */ + @Excel(name = "鎺堟潈鑽h獕鍚") + private String authorizeHonorName; + + /** 鎺堟潈鑽h獕鏍囬 */ + @Excel(name = "鎺堟潈鑽h獕鏍囬") + private String authorizeHonorTitle; + + /** 鎺堟潈鑽h獕绠浠 */ + @Excel(name = "鎺堟潈鑽h獕绠浠") + private String authorizeHonorIntroduce; + + /** 鎺堟潈鑽h獕璇︽儏 */ + @Excel(name = "鎺堟潈鑽h獕璇︽儏") + private String authorizeHonorDetails; + + /** 鎺ㄨ崘锛0-鍚︼紝1-鏄級 */ + @Excel(name = "鎺ㄨ崘", readConverterExp = "0=-鍚︼紝1-鏄") + private Integer isHot; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 瀹℃牳鐘舵侊紙0-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷锛 */ + @Excel(name = "瀹℃牳鐘舵", readConverterExp = "0=-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷") + private Integer examineStatus; + + /** 瀹℃牳鍙嶉 */ + @Excel(name = "瀹℃牳鍙嶉") + private String examineFeedback; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍙戝竷鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date publicationTime; + + /** 鍙戝竷浜 */ + @Excel(name = "鍙戝竷浜") + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbBanner.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbBanner.java new file mode 100644 index 0000000000000000000000000000000000000000..8a87ed2cb5ba6c6df583847111cb76e64d13a477 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbBanner.java @@ -0,0 +1,89 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 杞挱鍥惧璞 tb_banner + * + * @author CC + * @date 2024-03-12 + */ +@Getter +@Setter +@ToString +public class TbBanner extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 杞挱鍥 */ + private String bannerId; + + /** 鏍囬 */ + @Excel(name = "鏍囬") + private String bannerTitle; + + /** PC棣栭〉绫诲瀷锛0-棣栭〉锛1-閫氱煡鍏憡锛2-鑱屼笟鏁欒偛锛3-缁х画鏁欒偛锛4-鍦ㄧ嚎棰樺簱锛5-璇剧▼甯堣祫锛6-璇勪环鏈烘瀯锛7-瀛︿範涓績锛8-浜ф暀铻嶅悎锛9-鏁板瓧鏁欒偛澶т細*/ + @Excel(name = "杞挱绫诲瀷", readConverterExp = "0=棣栭〉") + private String type; + + /** 杞挱鍥剧墖 */ + @Excel(name = "杞挱鍥剧墖") + private String bannerImg; + + /** 鏄惁璺宠浆 (0-涓嶈烦杞,1-璺宠浆)*/ + // @Excel(name = "鏄惁璺宠浆", readConverterExp = "0=涓嶈烦杞,1=璺宠浆") + private String jumpType; + + /** 璺宠浆閾炬帴 */ + // @Excel(name = "璺宠浆閾炬帴") + private String bannerUrl; + + /** 杞挱鎺掑簭 */ + @Excel(name = "杞挱鎺掑簭") + private Long bannerSort; + + /** 鐘舵 (0-鏄剧ず锛1-闅愯棌锛*/ + @Excel(name = "鐘舵", readConverterExp = "0=鏄剧ず,1=闅愯棌") + private String bannerStatus; + + /** 鍒涘缓鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "鍒涘缓鏃堕棿", dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** 鏇存柊鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "鏇存柊鏃堕棿", dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒涘缓鑰 */ + @Excel(name = "鍒涘缓鑰") + private String createBy; + + /** 鏇存柊鑰 */ + @Excel(name = "鏇存柊鑰") + private String updateBy; + + /** 鍒犻櫎鑰 */ + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + + /** 鍚庡彴 閫変腑瀵煎嚭 */ + private String[] ids; + + /** 鍚庡彴 鎺掑簭 */ + private int orderType; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbCareerClass.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbCareerClass.java new file mode 100644 index 0000000000000000000000000000000000000000..d1efcd9393e6a024ec4fcba310405ef410c62b50 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbCareerClass.java @@ -0,0 +1,88 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.TreeEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; +import java.util.List; + +/** + * 鑱屼笟鍒嗙被瀵硅薄 tb_career_class + * + * @author ruoyi + * @date 2024-10-10 + */ +@Getter +@Setter +@ToString +public class TbCareerClass extends TreeEntity +{ + private static final long serialVersionUID = 1L; + + /** 鑱屼笟鍒嗙被涓婚敭ID */ + private Long careerId; + + /** 鐖剁骇ID */ + @Excel(name = "鐖剁骇ID") + private Long pid; + + /** 灞傜骇 0 1 2 */ + @Excel(name = "灞傜骇 0 1 2 ") + private Integer level; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** logo1 */ + @Excel(name = "logo1") + private String careerLogoOne; + + /** logo2 */ + @Excel(name = "logo2") + private String careerLogoTwo; + + /** 鍚嶇О */ + @Excel(name = "鍚嶇О") + private String careerName; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍙戝竷鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date publicationTime; + + /** 鍙戝竷浜 */ + @Excel(name = "鍙戝竷浜") + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + @Excel(name = "鍒犻櫎鏍囪", readConverterExp = "0=-姝e父锛1-鍒犻櫎") + private Integer delFlag; + + private List childrenList; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbCase.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbCase.java new file mode 100644 index 0000000000000000000000000000000000000000..1a012fece53cf7801eaec7d8d22fe3d1c2e0c4f1 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbCase.java @@ -0,0 +1,66 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 妗堜緥瀵硅薄 tb_case + * + * @author ruoyi + * @date 2024-09-14 + */ +@Getter +@Setter +@ToString +public class TbCase extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 妗堜緥id */ + private Long caseId; + + /** 妗堜緥绫诲瀷id */ + @Excel(name = "妗堜緥绫诲瀷id") + private Long caseTypeId; + + /** 鏍囬 */ + @Excel(name = "鏍囬") + private String title; + + /** 缂╃暐鍥 */ + @Excel(name = "缂╃暐鍥") + private String showImg; + + /** 绠杩 */ + @Excel(name = "绠杩") + private String prospectus; + + /** 鍙戝竷浜 */ + @Excel(name = "鍙戝竷浜") + private String publisher; + + /** 鍙戝竷鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍙戝竷鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date publicationTime; + + /** 鍐呭 */ + @Excel(name = "鍐呭") + private String content; + + /** 鍒犻櫎鏍囪(0-姝e父,1-鍒犻櫎) */ + private Integer delFlag; + + /** 鍒犻櫎鏃堕棿 */ + private Date deleteTime; + + /** 鍒犻櫎浜 */ + private String deleteBy; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbCaseType.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbCaseType.java new file mode 100644 index 0000000000000000000000000000000000000000..e580bfc63a446e0f75fce0b81cea31e14325dd00 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbCaseType.java @@ -0,0 +1,53 @@ +package com.ruoyi.hezhi.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 妗堜緥绫诲瀷瀵硅薄 tb_case_type + * + * @author ruoyi + * @date 2024-09-14 + */ +@Getter +@Setter +@ToString +public class TbCaseType extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 妗堜緥绫诲瀷id */ + private Long caseTypeId; + + /** 妗堜緥绫诲瀷logo */ + @Excel(name = "妗堜緥绫诲瀷logo") + private String typeLogo; + + /** 妗堜緥绫诲瀷鍚 */ + @Excel(name = "妗堜緥绫诲瀷鍚") + private String typeName; + + /** 鐘舵(0-灞曠ず锛1-涓嶅睍绀) */ + @Excel(name = "鐘舵",readConverterExp = "0=灞曠ず,1=涓嶅睍绀") + private Integer showStatus; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 鍒犻櫎鏍囪(0-姝e父,1-鍒犻櫎) */ + private Integer delFlag; + + /** 鍒犻櫎鏃堕棿 */ + private Date deleteTime; + + /** 鍒犻櫎浜 */ + private String deleteBy; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbConferenceNotice.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbConferenceNotice.java new file mode 100644 index 0000000000000000000000000000000000000000..63b867bf46034efc55727a50f01979dcb3fbb7db --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbConferenceNotice.java @@ -0,0 +1,112 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 鏁板瓧鏁欒偛澶т細閫氱煡瀵硅薄 tb_conference_notice + * + * @author ruoyi + * @date 2024-10-29 + */ +@Getter +@Setter +@ToString +public class TbConferenceNotice extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鏁板瓧鏁欒偛澶т細涓婚敭ID */ + private Long conferenceNoticeId; + + /** 灏侀潰鍥 */ + @Excel(name = "灏侀潰鍥") + private String conferenceNoticeLogo; + + /** 閫氱煡鍚 */ + @Excel(name = "閫氱煡鍚") + private String noticeName; + + /** 閫氱煡绠浠 */ + @Excel(name = "閫氱煡绠浠") + private String noticeIntroduce; + + /** 閫氱煡璇︽儏 */ + @Excel(name = "閫氱煡璇︽儏") + private String noticeDetails; + + /** 绫诲瀷锛0-鍏ㄩ儴锛1-鍏憡锛2-鏂板獟浣撴姤閬擄紝3-浼氳锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴锛1-鍏憡锛2-鏂板獟浣撴姤閬擄紝3-浼氳") + private Integer type; + + /** 浼氳寮濮嬫椂闂 */ + @Excel(name = "浼氳寮濮嬫椂闂") + private String conferenceStartTime; + + /** 浼氳缁撴潫鏃堕棿 */ + @Excel(name = "浼氳缁撴潫鏃堕棿") + private String conferenceEndTime; + + /** 鎶ュ悕寮濮嬫椂闂 */ + @Excel(name = "鎶ュ悕寮濮嬫椂闂") + private String enrollStartTime; + + /** 鎶ュ悕缁撴潫鏃堕棿 */ + @Excel(name = "鎶ュ悕缁撴潫鏃堕棿") + private String enrollEndTime; + + /** 浼氳鎶ュ悕瑕佹眰 */ + private String demand; + + /** 浼氳鐘舵侊紙0-缁撴潫锛1-杩涜涓紝2-鎶ュ悕涓級 */ + @Excel(name = "浼氳鐘舵", readConverterExp = "0=-缁撴潫锛1-杩涜涓紝2-鎶ュ悕涓") + private Integer conferenceStatus; + + /** 瀹℃牳鐘舵侊紙0-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷锛 */ + @Excel(name = "瀹℃牳鐘舵", readConverterExp = "0=-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷") + private Integer examineStatus; + + /** 瀹℃牳鍙嶉 */ + @Excel(name = "瀹℃牳鍙嶉") + private String examineFeedback; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍙戝竷鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date publicationTime; + + /** 鍙戝竷浜 */ + @Excel(name = "鍙戝竷浜") + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbConferencePeople.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbConferencePeople.java new file mode 100644 index 0000000000000000000000000000000000000000..ff702f4846f001c78727f7943d220fedfd09ff3c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbConferencePeople.java @@ -0,0 +1,94 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 鏁板瓧鏁欒偛澶т細鍙備細鍢夊瀵硅薄 tb_conference_people + * + * @author ruoyi + * @date 2024-10-29 + */ +@Getter +@Setter +@ToString +public class TbConferencePeople extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鍙備細鍢夊涓婚敭ID */ + private Long conferencePeopleId; + + /** 鏁板瓧鏁欒偛澶т細閫氱煡ID */ + @Excel(name = "鏁板瓧鏁欒偛澶т細閫氱煡ID") + private Long conferenceNoticeId; + + /** 鍙備細鍢夊鍥 */ + @Excel(name = "鍙備細鍢夊鍥") + private String conferencePeopleLogo; + + /** 鍙備細鍢夊鍚 */ + @Excel(name = "鍙備細鍢夊鍚") + private String peopleName; + + /** 鍙備細鍢夊鏍囬 */ + @Excel(name = "鍙備細鍢夊鏍囬") + private String peopleTitle; + + /** 鍙備細鍢夊绠浠 */ + @Excel(name = "鍙備細鍢夊绠浠") + private String peopleIntroduce; + + /** 鍙備細鍢夊璇︽儏 */ + @Excel(name = "鍙備細鍢夊璇︽儏") + private String peopleDetails; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 瀹℃牳鐘舵侊紙0-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷锛 */ + @Excel(name = "瀹℃牳鐘舵", readConverterExp = "0=-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷") + private Integer examineStatus; + + /** 瀹℃牳鍙嶉 */ + @Excel(name = "瀹℃牳鍙嶉") + private String examineFeedback; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbConferenceRegistration.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbConferenceRegistration.java new file mode 100644 index 0000000000000000000000000000000000000000..3c00c756baa1af06fae7cd1e64dc8c0ac0ad4ff3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbConferenceRegistration.java @@ -0,0 +1,162 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 鍙備細鎶ュ悕瀵硅薄 tb_conference_registration + * + * @author ruoyi + * @date 2024-10-28 + */ +@Getter +@Setter +@ToString +public class TbConferenceRegistration extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鍙備細鎶ュ悕涓婚敭ID */ + private Long conferenceRegistrationId; + + /** 鐢ㄦ埛ID */ + @Excel(name = "鐢ㄦ埛ID") + private Long memberUserId; + + /** 浼氳閫氱煡ID */ + @Excel(name = "浼氳閫氱煡ID") + private Long conferenceNoticeId; + + /** 濮撳悕 */ + @Excel(name = "濮撳悕") + private String name; + + /** 鎵嬫満鍙 */ + @Excel(name = "鎵嬫満鍙") + private String phone; + + /** 璇佷欢绫诲瀷锛0-韬唤璇侊紝1-鎶ょ収锛 */ + @Excel(name = "璇佷欢绫诲瀷", readConverterExp = "0=-韬唤璇侊紝1-鎶ょ収") + private String documentType; + + /** 璇佷欢鍙 */ + @Excel(name = "璇佷欢鍙") + private String documentNumber; + + /** 甯哥敤閭 */ + @Excel(name = "甯哥敤閭") + private String email; + + /** 鍗曚綅鍚嶇О */ + @Excel(name = "鍗曚綅鍚嶇О") + private String companyName; + + /** 鍗曚綅鎬ц川 */ + @Excel(name = "鍗曚綅鎬ц川") + private String companyType; + + /** 鑱屼綅 */ + @Excel(name = "鑱屼綅") + private String position; + + /** 鑱屼綅绫诲瀷 */ + @Excel(name = "鑱屼綅绫诲瀷") + private String positionType; + + /** 鐪両D */ + @Excel(name = "鐪両D") + private Long provinceId; + + /** 甯侷D */ + @Excel(name = "甯侷D") + private Long cityId; + + /** 鍖猴紙鍘匡級ID */ + @Excel(name = "鍖", readConverterExp = "鍘=") + private Long areaId; + + /** 鐪佸悕 */ + @Excel(name = "鐪佸悕") + private String provinceName; + + /** 甯傚悕 */ + @Excel(name = "甯傚悕") + private String cityName; + + /** 鍖哄悕 */ + @Excel(name = "鍖哄悕") + private String areaName; + + /** 璇︾粏鍦板潃 */ + @Excel(name = "璇︾粏鍦板潃") + private String address; + + /** 璇佷欢鐓х墖 */ + @Excel(name = "璇佷欢鐓х墖") + private String idPhoto; + + /** 涓昏涓氬姟 */ + @Excel(name = "涓昏涓氬姟") + private String business; + + /** 鍙備細鐩殑 */ + @Excel(name = "鍙備細鐩殑") + private String objective; + + /** 鏄惁鍙傚姞杩囧線灞婂ぇ浼 */ + @Excel(name = "鏄惁鍙傚姞杩囧線灞婂ぇ浼") + private Integer isParticipate; + + /** 鏄惁璁″垝鍙傚姞杩囦笅涓灞婂ぇ浼 */ + @Excel(name = "鏄惁璁″垝鍙傚姞杩囦笅涓灞婂ぇ浼") + private Integer isParticipateNext; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 瀹℃牳鐘舵侊紙0-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷锛 */ + @Excel(name = "瀹℃牳鐘舵", readConverterExp = "0=-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷") + private Integer examineStatus; + + /** 瀹℃牳鍙嶉 */ + @Excel(name = "瀹℃牳鍙嶉") + private String examineFeedback; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbConfig.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..f8fcebd9b36aa8fa52b89fcd7dcbc23abe15d198 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbConfig.java @@ -0,0 +1,104 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 鐩稿叧璁剧疆瀵硅薄 tb_config + * + * @author ruoyi + * @date 2024-10-22 + */ +@Getter +@Setter +@ToString +public class TbConfig extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鐩稿叧璁剧疆涓婚敭ID */ + private Long configId; + + /** 璁剧疆鏍囪瘑 */ + @Excel(name = "璁剧疆鏍囪瘑") + private String identifying; + + /** 璁剧疆鍚嶇О */ + @Excel(name = "璁剧疆鍚嶇О") + private String name; + + /** 璁剧疆瑙i噴 */ + @Excel(name = "璁剧疆瑙i噴") + private String configExplain; + + /** 璁剧疆鍐呭锛坕nt绫诲瀷锛 */ + @Excel(name = "璁剧疆鍐呭") + private Integer configInt; + + /** 璁剧疆鍐呭锛坰tring绫诲瀷锛 */ + @Excel(name = "璁剧疆鍐呭") + private String configString; + + /** 璁剧疆鍐呭2锛坰tring绫诲瀷锛 */ + @Excel(name = "璁剧疆鍐呭") + private String configString2; + + /** 璁剧疆鍐呭3锛坰tring绫诲瀷锛 */ + private String configString3; + + /** 璁剧疆鍐呭4锛坰tring绫诲瀷锛 */ + private String configString4; + + /** 璁剧疆鍐呭5锛坰tring绫诲瀷锛 */ + private String configString5; + + /** 璁剧疆鍐呭6锛坰tring绫诲瀷锛 */ + private String configString6; + + /** 璁剧疆鍐呭锛坉ecimal绫诲瀷锛 */ + private BigDecimal configDecimal; + + /** 璁剧疆鍐呭锛坉ecimal2绫诲瀷锛 */ + private BigDecimal configDecimal2; + + /** 璁剧疆绫诲瀷锛0-鏃狅紝1-int锛2-string锛3-decimal锛4-瀵屾枃鏈紝5-鍥剧墖锛 */ + private Integer type; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbContinuingEducationClass.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbContinuingEducationClass.java new file mode 100644 index 0000000000000000000000000000000000000000..3b8c986a40dc40e91f372df1661dbddaf924939c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbContinuingEducationClass.java @@ -0,0 +1,86 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 缁х画鏁欒偛鍒嗙被瀵硅薄 tb_continuing_education_class + * + * @author ruoyi + * @date 2024-10-23 + */ +@Getter +@Setter +@ToString +public class TbContinuingEducationClass extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 缁х画鏁欒偛鍒嗙被涓婚敭ID */ + private Long continuingEducationClassId; + + /** 鐖剁骇ID */ + @Excel(name = "鐖剁骇ID") + private Long pid; + + /** 灞傜骇 0 1 2 */ + @Excel(name = "灞傜骇 0 1 2 ") + private Integer level; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 缁х画鏁欒偛鍒嗙被鍚嶇О */ + @Excel(name = "缁х画鏁欒偛鍒嗙被鍚嶇О") + private String name; + + /** logo1 */ + @Excel(name = "logo1") + private String logoOne; + + /** logo2 */ + @Excel(name = "logo2") + private String logoTwo; + + /** 鎺ㄨ崘锛0-鍚︼紝1-鎺ㄨ崘锛 */ + @Excel(name = "鎺ㄨ崘", readConverterExp = "0=-鍚︼紝1-鎺ㄨ崘") + private Integer isRecommend; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbCooperatePartner.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbCooperatePartner.java new file mode 100644 index 0000000000000000000000000000000000000000..8f9efc132507ff54c50efc2494e61bd3566cc3d9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbCooperatePartner.java @@ -0,0 +1,106 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 鍚堜綔浼欎即瀵硅薄 tb_cooperate_partner + * + * @author ruoyi + * @date 2024-10-16 + */ +@Getter +@Setter +@ToString +public class TbCooperatePartner extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鍚堜綔浼欎即涓婚敭ID */ + private Long cooperatePartnerId; + + /** 鍚堜綔浼欎即鍥 */ + @Excel(name = "鍚堜綔浼欎即鍥") + private String cooperatePartnerImg; + + /** 鍚堜綔浼欎即鍚 */ + @Excel(name = "鍚堜綔浼欎即鍚") + private String cooperatePartnerName; + + /** 鍚堜綔浼欎即鏍囬 */ + @Excel(name = "鍚堜綔浼欎即鏍囬") + private String cooperatePartnerTitle; + + /** 鍚堜綔浼欎即绠浠 */ + @Excel(name = "鍚堜綔浼欎即绠浠") + private String cooperatePartnerIntroduce; + + /** 鍚堜綔浼欎即璇︽儏 */ + @Excel(name = "鍚堜綔浼欎即璇︽儏") + private String cooperatePartnerDetails; + + /** 鎺ㄨ崘锛0-鍚︼紝1-鏄級 */ + @Excel(name = "鎺ㄨ崘", readConverterExp = "0=-鍚︼紝1-鏄") + private Integer isHot; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + + /** 鏄惁璺宠浆(0-涓嶈烦杞,1-璺宠浆) */ + @Excel(name = "鏄惁璺宠浆(0-涓嶈烦杞,1-璺宠浆)") + private Integer jumpType; + + /** 璺宠浆閾炬帴 */ + @Excel(name = "璺宠浆閾炬帴") + private String jumpUrl; + + /** 瀹℃牳鐘舵侊紙0-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷锛 */ + @Excel(name = "瀹℃牳鐘舵", readConverterExp = "0=-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷") + private Integer examineStatus; + + /** 瀹℃牳鍙嶉 */ + @Excel(name = "瀹℃牳鍙嶉") + private String examineFeedback; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍙戝竷鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date publicationTime; + + /** 鍙戝竷浜 */ + @Excel(name = "鍙戝竷浜") + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbCourse.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbCourse.java new file mode 100644 index 0000000000000000000000000000000000000000..c503eef765a63b7f32df81a65591c0c75c0924a3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbCourse.java @@ -0,0 +1,177 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.hezhi.domain.vo.CaseTypeVO; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; +import java.util.List; + +/** + * 璇剧▼瀵硅薄 tb_course + * + * @author ruoyi + * @date 2024-09-14 + */ +@Getter +@Setter +@ToString +public class TbCourse extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 璇剧▼涓婚敭ID */ + private Long courseId; + + /** 鏈烘瀯ID */ + private Long evaluateAgencyId; + + /** 鏈烘瀯鍚嶇О */ + private String evaluateAgencyName; + + /** 涓撲笟鍒嗙被ID */ + @Excel(name = "涓撲笟鍒嗙被ID") + private Long majorId; + + /** 璇剧▼鍒嗙被ID */ + @Excel(name = "璇剧▼鍒嗙被ID") + private Long classId; + + /** 鑱屼笟鍒嗙被ID */ + @Excel(name = "鑱屼笟鍒嗙被ID") + private Long careerId; + + /** 鑰冭瘯ID */ + @Excel(name = "鑰冭瘯ID") + private Long examId; + + /** 棰樺簱鍒嗙被ID */ + private Long subjectWarehouseClassId; + + /** 璇剧▼绫诲瀷锛1-鑱屼笟鑰冭瘯锛2-鑱屼笟鎶鑳斤級 */ + @Excel(name = "璇剧▼绫诲瀷", readConverterExp = "1=鑱屼笟鑰冭瘯,2=鑱屼笟鎶鑳") + private Integer classType; + + /** 灏侀潰鍥 */ + @Excel(name = "灏侀潰鍥") + private String coverImage; + + /** 璇剧▼鍚 */ + @Excel(name = "璇剧▼鍚") + private String courseName; + + /** 璇剧▼鏍囬 */ + @Excel(name = "璇剧▼鏍囬") + private String courseTitle; + + /** 寮璇炬鏁 */ + @Excel(name = "寮璇炬鏁") + private String courseNum; + + /** 寮璇炬椂闂达紙寮濮嬶級 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "寮璇炬椂闂达紙寮濮嬶級", width = 30, dateFormat = "yyyy-MM-dd") + private Date courseStart; + + /** 寮璇炬椂闂达紙缁撴潫锛 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "寮璇炬椂闂达紙缁撴潫锛", width = 30, dateFormat = "yyyy-MM-dd") + private Date courseEnd; + + /** 瀛︽椂瀹夋帓 */ + @Excel(name = "瀛︽椂瀹夋帓") + private String courseArrange; + + /** 鍙傚姞浜烘暟 */ + @Excel(name = "鍙傚姞浜烘暟") + private Integer participateNum; + + /** 璇剧▼璇︽儏 */ + @Excel(name = "璇剧▼璇︽儏") + private String courseDetails; + + /** 璇剧▼姒傝堪 */ + @Excel(name = "璇剧▼姒傝堪") + private String courseOverview; + + /** 璇剧▼澶х翰 */ + @Excel(name = "璇剧▼澶х翰") + private String courseSyllabus; + + /** 棰勫鐭ヨ瘑 */ + @Excel(name = "棰勫鐭ヨ瘑") + private String courseKnowledge; + + /** 璇剧▼鍥㈤槦 */ + @Excel(name = "璇剧▼鍥㈤槦") + private String courseTeam; + + /** 鏍囩 */ + @Excel(name = "鏍囩") + private String tagName; + + /** 涓昏鑰佸笀ID闆嗗悎 */ + @Excel(name = "涓昏鑰佸笀ID闆嗗悎") + private String teacherIds; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず,1=闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "鍙戝竷鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date publicationTime; + + /** 鍙戝竷浜 */ + @Excel(name = "鍙戝竷浜") + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + + /** 鍒嗙被鍚 */ + private String className; + + /** 鍒嗙被缁 */ + private Long[] classIds; + + /** 鍒嗙被鍒楄〃 */ + private List classList; + + /** 娴忚閲 */ + private Integer viewsNum; + + /** 鎺ㄨ崘锛0-鍚︼紝1-鎺ㄨ崘锛 */ + private Integer isRecommend; + + /** 璇佷功瑕佹眰 */ + @Excel(name = "璇佷功瑕佹眰") + private String courseCertificate; + + /** 鍙傝冭祫鏂 */ + @Excel(name = "鍙傝冭祫鏂") + private String courseInformation; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbCourseChapter.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbCourseChapter.java new file mode 100644 index 0000000000000000000000000000000000000000..14c3a0c8d01927439dc26c2400237d82722c7243 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbCourseChapter.java @@ -0,0 +1,103 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.TreeEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; +import java.util.List; + +/** + * 璇剧▼绔犺妭瀵硅薄 tb_course_chapter + * + * @author ruoyi + * @date 2024-09-14 + */ +@Getter +@Setter +@ToString +public class TbCourseChapter extends TreeEntity +{ + private static final long serialVersionUID = 1L; + + /** 璇剧▼绔犺妭涓婚敭ID */ + private Long chapterId; + + /** 璇剧▼ID */ + @Excel(name = "璇剧▼ID") + private Long courseId; + + /** 鐖剁骇ID */ + @Excel(name = "鐖剁骇ID") + private Long pid; + + /** 灞傜骇 0 1 2 */ + @Excel(name = "灞傜骇 0 1 2 ") + private Integer level; + + /** 绫诲瀷锛0-鍏ㄩ儴锛1-鍒嗙被锛2-瑙嗛锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴锛1-鍒嗙被锛2-瑙嗛") + private Integer type; + + /** 鍚嶇О */ + @Excel(name = "鍚嶇О") + private String chapterName; + + /** 閾炬帴绫诲瀷锛0-榛樿锛1-涓婁紶瑙嗛锛2-杈撳叆閾炬帴锛 */ + @Excel(name = "閾炬帴绫诲瀷", readConverterExp = "0=-榛樿锛1-涓婁紶瑙嗛锛2-杈撳叆閾炬帴") + private Integer urlType; + + /** 閾炬帴鍦板潃 */ + @Excel(name = "閾炬帴鍦板潃") + private String chapterUrl; + + /** 瑙嗛鏃堕暱 */ + @Excel(name = "瑙嗛鏃堕暱") + private String videoDuration; + + /** 鏄惁瑙嗛锛0-鍚︼紝1-鏄級 */ + @Excel(name = "鏄惁瑙嗛", readConverterExp = "0=-鍚︼紝1-鏄") + private Integer isVideo; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍙戝竷鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date publicationTime; + + /** 鍙戝竷浜 */ + @Excel(name = "鍙戝竷浜") + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + + /** 娴忚閲 */ + private Integer viewsNum; + + private List childrens; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbCourseEvaluate.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbCourseEvaluate.java new file mode 100644 index 0000000000000000000000000000000000000000..fc248c0dfcb0a8e524ba2c44ac5543ab2d3e0dfa --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbCourseEvaluate.java @@ -0,0 +1,85 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 璇剧▼璇勪环瀵硅薄 tb_course_evaluate + * + * @author ruoyi + * @date 2024-09-14 + */ +@Getter +@Setter +@ToString +public class TbCourseEvaluate extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 璇剧▼璇勪环涓婚敭ID */ + private Long courseEvaluateId; + + /** 璇剧▼ID */ + @Excel(name = "璇剧▼ID") + private Long courseId; + + /** 瀛﹀憳ID */ + @Excel(name = "瀛﹀憳ID") + private Long studentId; + + /** 瀛﹀憳鍚 */ + @Excel(name = "瀛﹀憳鍚") + private String studentName; + + /** 瀛﹀憳澶村儚 */ + @Excel(name = "瀛﹀憳澶村儚") + private String studentPicture; + + /** 璇勪环鏄熺骇 */ + @Excel(name = "璇勪环鏄熺骇") + private Integer evaluateStar; + + /** 璇勪环鍐呭 */ + @Excel(name = "璇勪环鍐呭") + private String evaluateContent; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍙戝竷鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date publicationTime; + + /** 鍙戝竷浜 */ + @Excel(name = "鍙戝竷浜") + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbDownload.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbDownload.java new file mode 100644 index 0000000000000000000000000000000000000000..b36eabe0da17b1b89c9b858cf25d146e8eab85e9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbDownload.java @@ -0,0 +1,82 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 鍦ㄧ嚎涓嬭浇瀵硅薄 tb_download + * + * @author ruoyi + * @date 2024-10-30 + */ +@Getter +@Setter +@ToString +public class TbDownload extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鍦ㄧ嚎涓嬭浇涓婚敭ID */ + private Long downloadId; + + /** 绫诲瀷锛0-闄勪欢锛1-鍥剧墖 */ + @Excel(name = "绫诲瀷锛0-闄勪欢锛1-鍥剧墖") + private Integer downloadType; + + /** 鍚嶇О */ + @Excel(name = "鍚嶇О") + private String downloadName; + + /** 鏍煎紡 */ + @Excel(name = "鏍煎紡") + private String downloadFormat; + + /** 澶у皬 */ + @Excel(name = "澶у皬") + private String downloadSize; + + /** 闄勪欢璺緞 */ + @Excel(name = "闄勪欢璺緞") + private String downloadUrl; + + /** 鍐呭 */ + @Excel(name = "鍐呭") + private String content; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbEnterpriseProgress.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbEnterpriseProgress.java new file mode 100644 index 0000000000000000000000000000000000000000..49f408bbcd4b6c33660f2d0ffe6f1478bba2929f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbEnterpriseProgress.java @@ -0,0 +1,78 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 浼佷笟鍘嗙▼瀵硅薄 tb_enterprise_progress + * + * @author ruoyi + * @date 2024-11-21 + */ +@Getter +@Setter +@ToString +public class TbEnterpriseProgress extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鐩稿叧璁剧疆涓婚敭ID */ + private Long enterpriseProgressId; + + /** 鍥剧墖 */ + @Excel(name = "鍥剧墖") + private String img; + + /** 鍚嶇О */ + @Excel(name = "鍚嶇О") + private String name; + + /** 鍘嗙▼鏃堕棿锛堝勾锛 */ + @Excel(name = "鍘嗙▼鏃堕棿", readConverterExp = "骞=") + private String progressTimeYear; + + /** 鍘嗙▼鏃堕棿锛堟湀锛 */ + @Excel(name = "鍘嗙▼鏃堕棿", readConverterExp = "鏈=") + private String progressTimeMonth; + + /** 璁剧疆绫诲瀷锛0-鏃狅級 */ + @Excel(name = "璁剧疆绫诲瀷", readConverterExp = "0=-鏃") + private Integer type; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbEvaluateAgency.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbEvaluateAgency.java new file mode 100644 index 0000000000000000000000000000000000000000..c0f07c61602fa6b6324b02dc0e51f6ed9a65f73a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbEvaluateAgency.java @@ -0,0 +1,178 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 璇勪环鏈烘瀯瀵硅薄 tb_evaluate_agency + * + * @author ruoyi + * @date 2024-10-23 + */ +@Getter +@Setter +@ToString +public class TbEvaluateAgency extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 璇勪环鏈烘瀯涓婚敭ID */ + private Long evaluateAgencyId; + + /** 绯荤粺鐢ㄦ埛ID */ + @Excel(name = "绯荤粺鐢ㄦ埛ID") + private Long sysUserId; + + /** 璇勪环鏈烘瀯鍒嗙被ID */ + @Excel(name = "璇勪环鏈烘瀯鍒嗙被ID") + private Long evaluateAgencyClassId; + + /** 璇勪环鏈烘瀯缂栧彿 */ + @Excel(name = "璇勪环鏈烘瀯缂栧彿") + private String evaluateAgencyNumber; + + /** 璇勪环鏈烘瀯浠g爜 */ + @Excel(name = "璇勪环鏈烘瀯浠g爜") + private String evaluateAgencyCode; + + /** 璇勪环鏈烘瀯icon */ + @Excel(name = "璇勪环鏈烘瀯icon") + private String evaluateAgencyIcon; + + /** 璇勪环鏈烘瀯logo锛堟鏂瑰舰锛 */ + @Excel(name = "璇勪环鏈烘瀯logo锛堟鏂瑰舰锛") + private String evaluateAgencyLogo; + + /** 璇勪环鏈烘瀯logo锛堟鏂瑰舰锛 */ + @Excel(name = "璇勪环鏈烘瀯logo锛堟鏂瑰舰锛") + private String evaluateAgencyLogoRectangle; + + /** 璇︽儏澶撮儴鑳屾櫙 */ + @Excel(name = "璇︽儏澶撮儴鑳屾櫙") + private String evaluateAgencyBackground; + + /** 鏈変腑鑳屾櫙 */ + @Excel(name = "鏈変腑鑳屾櫙") + private String uncheckBackground; + + /** 閫変腑鑳屾櫙 */ + @Excel(name = "閫変腑鑳屾櫙") + private String checkBackground; + + /** 璇勪环鏈烘瀯鍚 */ + @Excel(name = "璇勪环鏈烘瀯鍚") + private String evaluateAgencyName; + + /** 璇勪环鏈烘瀯鑻辨枃鍚 */ + @Excel(name = "璇勪环鏈烘瀯鑻辨枃鍚") + private String evaluateAgencyEnglish; + + /** 璇勪环鏈烘瀯鏍囬 */ + @Excel(name = "璇勪环鏈烘瀯鏍囬") + private String evaluateAgencyTitle; + + /** 璇勪环鏈烘瀯鏍囩 */ + @Excel(name = "璇勪环鏈烘瀯鏍囩") + private String evaluateAgencyTag; + + /** 璇勪环鏈烘瀯绠浠 */ + @Excel(name = "璇勪环鏈烘瀯绠浠") + private String evaluateAgencyIntroduce; + + /** 璇勪环鏈烘瀯鎻忚堪 */ + @Excel(name = "璇勪环鏈烘瀯鎻忚堪") + private String evaluateAgencyDescribe; + + /** 璇佷功閾炬帴 */ + @Excel(name = "璇佷功閾炬帴") + private String certificateUrl; + + /** 鐪両D */ + @Excel(name = "鐪両D") + private Long provinceId; + + /** 甯侷D */ + @Excel(name = "甯侷D") + private Long cityId; + + /** 鍖猴紙鍘匡級ID */ + @Excel(name = "鍖", readConverterExp = "鍘=") + private Long areaId; + + /** 鐪佸悕 */ + @Excel(name = "鐪佸悕") + private String provinceName; + + /** 甯傚悕 */ + @Excel(name = "甯傚悕") + private String cityName; + + /** 鍖哄悕 */ + @Excel(name = "鍖哄悕") + private String areaName; + + /** 璇︾粏鍦板潃 */ + @Excel(name = "璇︾粏鍦板潃") + private String address; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 瀹℃牳鐘舵侊紙0-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷锛 */ + @Excel(name = "瀹℃牳鐘舵", readConverterExp = "0=-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷") + private Integer examineStatus; + + /** 瀹℃牳鍙嶉 */ + @Excel(name = "瀹℃牳鍙嶉") + private String examineFeedback; + + /** 鍐荤粨鐘舵侊紙0-姝e父锛1-鍐荤粨锛 */ + @Excel(name = "鍐荤粨鐘舵", readConverterExp = "0=-姝e父锛1-鍐荤粨") + private Integer frozenStatus; + + /** 鍐荤粨鐘舵佸弽棣 */ + @Excel(name = "鍐荤粨鐘舵佸弽棣") + private Integer frozenFeedback; + + /** 鎺ㄨ崘锛0-涓嶆帹鑽愶紝1-鎺ㄨ崘锛 */ + @Excel(name = "鎺ㄨ崘", readConverterExp = "0=-涓嶆帹鑽愶紝1-鎺ㄨ崘") + private Integer isRecommend; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbEvaluateAgencyClass.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbEvaluateAgencyClass.java new file mode 100644 index 0000000000000000000000000000000000000000..78d965bfdf0fe6e7c304fed137a5ffbd284543cb --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbEvaluateAgencyClass.java @@ -0,0 +1,86 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 璇勪环鏈烘瀯鍒嗙被瀵硅薄 tb_evaluate_agency_class + * + * @author ruoyi + * @date 2024-10-23 + */ +@Getter +@Setter +@ToString +public class TbEvaluateAgencyClass extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 璇勪环鏈烘瀯鍒嗙被涓婚敭ID */ + private Long evaluateAgencyClassId; + + /** 鐖剁骇ID */ + @Excel(name = "鐖剁骇ID") + private Long pid; + + /** 灞傜骇 0 1 2 */ + @Excel(name = "灞傜骇 0 1 2 ") + private Integer level; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 璇勪环鏈烘瀯鍒嗙被鍚嶇О */ + @Excel(name = "璇勪环鏈烘瀯鍒嗙被鍚嶇О") + private String name; + + /** logo1 */ + @Excel(name = "logo1") + private String logoOne; + + /** logo2 */ + @Excel(name = "logo2") + private String logoTwo; + + /** 鎺ㄨ崘锛0-鍚︼紝1-鎺ㄨ崘锛 */ + @Excel(name = "鎺ㄨ崘", readConverterExp = "0=-鍚︼紝1-鎺ㄨ崘") + private Integer isRecommend; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExam.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExam.java new file mode 100644 index 0000000000000000000000000000000000000000..7f51dec1df50580f126a3b3fea44a110dda28b03 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExam.java @@ -0,0 +1,223 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * 鑰冭瘯瀵硅薄 tb_exam + * + * @author ruoyi + * @date 2024-11-12 + */ +@Getter +@Setter +@ToString +public class TbExam extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鑰冭瘯涓婚敭ID */ + private Long examId; + + /** 鑰冭瘯缂栧彿 */ + @Excel(name = "鑰冭瘯缂栧彿") + private String examNo; + + /** 鍒嗙被ID */ + @Excel(name = "鍒嗙被ID") + private Long classId; + + /** 鍒嗙被鍚 */ + @Excel(name = "鍒嗙被鍚") + private String className; + + /** 涓撲笟ID */ + @Excel(name = "涓撲笟ID") + private Long majorId; + + /** 涓撲笟鍚 */ + @Excel(name = "涓撲笟鍚") + private String majorName; + + /** 鑱屼笟ID */ + @Excel(name = "鑱屼笟ID") + private Long careerId; + + /** 鑱屼笟鍚 */ + @Excel(name = "鑱屼笟鍚") + private String careerName; + + /** logo */ + @Excel(name = "logo") + private String logo; + + /** 鏂囦欢 */ + @Excel(name = "鏂囦欢") + private String fileUrl; + + /** 鍚嶇О */ + @Excel(name = "鍚嶇О") + private String name; + + /** 鏍囬 */ + @Excel(name = "鏍囬") + private String title; + + /** 鍐呭 */ + @Excel(name = "鍐呭") + private String content; + + /** 浠嬬粛 */ + @Excel(name = "浠嬬粛") + private String introduce; + + /** 鑰冭瘯鍗曢夐鏁 */ + @Excel(name = "鑰冭瘯鍗曢夐鏁") + private Integer singleSelectNum; + + /** 鑰冭瘯鍗曢夐姣忛X鍒 */ + @Excel(name = "鑰冭瘯鍗曢夐姣忛X鍒") + private BigDecimal singleSelectScore; + + /** 鑰冭瘯澶氶夐鏁 */ + @Excel(name = "鑰冭瘯澶氶夐鏁") + private Integer manySelectNum; + + /** 鑰冭瘯澶氶夐姣忛X鍒 */ + @Excel(name = "鑰冭瘯澶氶夐姣忛X鍒") + private BigDecimal manySelectScore; + + /** 鑰冭瘯鍒ゆ柇棰樻暟 */ + @Excel(name = "鑰冭瘯鍒ゆ柇棰樻暟") + private Integer judgeNum; + + /** 鑰冭瘯鍒ゆ柇棰樻瘡棰榅鍒 */ + @Excel(name = "鑰冭瘯鍒ゆ柇棰樻瘡棰榅鍒") + private BigDecimal judgeScore; + + /** 鑰冭瘯璁鸿堪棰樻暟 */ + @Excel(name = "鑰冭瘯璁鸿堪棰樻暟") + private Integer discussNum; + + /** 鑰冭瘯璁鸿堪棰樻瘡棰榅鍒 */ + @Excel(name = "鑰冭瘯璁鸿堪棰樻瘡棰榅鍒") + private BigDecimal discussScore; + + /** 鑰冭瘯鎬诲垎 */ + @Excel(name = "鑰冭瘯鎬诲垎") + private BigDecimal totalScore; + + /** 鍙婃牸鍒 */ + @Excel(name = "鍙婃牸鍒") + private BigDecimal passScore; + + /** 鑰冭瘯鏃堕棿锛堝垎閽燂級 */ + @Excel(name = "鑰冭瘯鏃堕棿", readConverterExp = "鍒=閽") + private Integer examMinute; + + /** 鎶ュ悕鎻愬墠澶╂暟 */ + @Excel(name = "鎶ュ悕鎻愬墠澶╂暟") + private Integer examBatchEarly; + + /** 鑰冭瘯鎵规 */ + @Excel(name = "鑰冭瘯鎵规") + private String examBatch; + + /** 鎻愮ず */ + @Excel(name = "鎻愮ず") + private String tips; + + /** 鑰冭瘯寮濮嬫椂闂 */ + @Excel(name = "鑰冭瘯寮濮嬫椂闂") + private String examStartTime; + + /** 鑰冭瘯缁撴潫鏃堕棿 */ + @Excel(name = "鑰冭瘯缁撴潫鏃堕棿") + private String examEndTime; + + /** 鎶ュ悕寮濮嬫椂闂 */ + @Excel(name = "鎶ュ悕寮濮嬫椂闂") + private String signStartTime; + + /** 鎶ュ悕缁撴潫鏃堕棿 */ + @Excel(name = "鎶ュ悕缁撴潫鏃堕棿") + private String signEndTime; + + /** 鎶ュ悕璐 */ + @Excel(name = "鎶ュ悕璐") + private BigDecimal price; + + /** 鑰冭瘯鐘舵侊紙0-鏃狅紝1-鏈紑鍚紝2-鎶ュ悕涓紝3-杩涜涓紝4-宸茬粨鏉燂級 */ + @Excel(name = "鑰冭瘯鐘舵") + private Integer examStatus; + + /** 鏄惁瀹氭椂鏇存崲棰樼洰锛0-鍚︼紝1-鏄級 */ + @Excel(name = "鏄惁瀹氭椂鏇存崲棰樼洰") + private Integer isChange; + + /** 鏇存崲棰樼洰澶╂暟 */ + @Excel(name = "鏇存崲棰樼洰澶╂暟") + private Integer changeDay; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 瀹℃牳鐘舵侊紙0-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷锛 */ + @Excel(name = "瀹℃牳鐘舵", readConverterExp = "0=-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷") + private Integer examineStatus; + + /** 瀹℃牳鍙嶉 */ + @Excel(name = "瀹℃牳鍙嶉") + private String examineFeedback; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍙戝竷鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date publicationTime; + + /** 鍙戝竷浜 */ + @Excel(name = "鍙戝竷浜") + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + + /** 绛夌骇 */ + private Integer level; + + /** 鑰冭瘯璇剧▼鍒楄〃 */ + public List examCourseList; + + public List examBatchList; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamBatch.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamBatch.java new file mode 100644 index 0000000000000000000000000000000000000000..19b20171f17f73f3530a338315bb99d909b46d58 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamBatch.java @@ -0,0 +1,61 @@ +package com.ruoyi.hezhi.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 鑰冭瘯鎵规瀵硅薄 tb_exam_batch + * + * @author ruoyi + * @date 2024-12-21 + */ +@Getter +@Setter +@ToString +public class TbExamBatch extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鑰冭瘯鎵规ID */ + @Excel(name = "鑰冭瘯鎵规ID") + private Long examBatchId; + + /** 鑰冭瘯ID */ + @Excel(name = "鑰冭瘯ID") + private Long examId; + + /** 鑰冭瘯鎵规搴忓彿 */ + @Excel(name = "鑰冭瘯鎵规搴忓彿") + private Long batchIndex; + + /** 鑰冭瘯鎵规 */ + @Excel(name = "鑰冭瘯鎵规") + private String examBatch; + + /** 鑰冭瘯寮濮嬫椂闂 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "鑰冭瘯寮濮嬫椂闂", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date examStartTime; + + /** 鑰冭瘯缁撴潫鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "鑰冭瘯缁撴潫鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date examEndTime; + + /** 鎶ュ悕寮濮嬫椂闂 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "鎶ュ悕寮濮嬫椂闂", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date signStartTime; + + /** 鎶ュ悕缁撴潫鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "鎶ュ悕缁撴潫鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date signEndTime; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamCourse.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamCourse.java new file mode 100644 index 0000000000000000000000000000000000000000..02fdfb976e6fca533220f572c2579efb38c38688 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamCourse.java @@ -0,0 +1,48 @@ +package com.ruoyi.hezhi.domain; + +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +/** + * 鑰冭瘯璇剧▼ tb_exam + * + * @author ruoyi + * @date 2024-11-12 + */ +@Getter +@Setter +@ToString +public class TbExamCourse extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鑰冭瘯璇剧▼ID */ + private Long examCourseId; + + /** 瀛︿範涓績ID */ + private Long studyCenterId; + + /** 鑰冭瘯ID */ + private Long examId; + + /** 妯℃嫙鑰冭瘯ID */ + private Long subjectWarehouseClassId; + + /** 鐩存挱ID */ + private Long liveBroadcastId; + + /** 璇勪环鏈烘瀯ID */ + private Long evaluateAgencyId; + + /** 璇勪环鏈烘瀯鍚嶇О */ + private String evaluateAgencyName; + + /** 璇剧▼ID */ + private Long courseId; + + /** 璇剧▼鍚嶇О */ + private String courseName; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamFile.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamFile.java new file mode 100644 index 0000000000000000000000000000000000000000..831c720988ca57cd2ebaf75309a4bf09f6bdd9b2 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamFile.java @@ -0,0 +1,94 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 鑰冭瘯鎷嶆憚鏂囦欢瀵硅薄 tb_exam_file + * + * @author ruoyi + * @date 2024-11-14 + */ +@Getter +@Setter +@ToString +public class TbExamFile extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鑰冭瘯鎷嶆憚鏂囦欢涓婚敭ID */ + private Long examFileId; + + /** 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏ID */ + @Excel(name = "鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏ID") + private Long examSimulateInfoId; + + /** 鐢ㄦ埛ID */ + @Excel(name = "鐢ㄦ埛ID") + private Long memberUserId; + + /** 鑰冭瘯ID */ + @Excel(name = "鑰冭瘯ID") + private Long examId; + + /** 鏂囦欢绫诲瀷锛0-鏃狅紝1-鍥剧墖锛 */ + @Excel(name = "鏂囦欢绫诲瀷", readConverterExp = "0=-鏃狅紝1-鍥剧墖") + private Integer fileType; + + /** 鏂囦欢鍦板潃 */ + @Excel(name = "鏂囦欢鍦板潃") + private String fileUrl; + + /** 鑰冭瘯鍒嗙被锛0-鏃狅紝1-姝e紡鑰冭瘯锛2-妯℃嫙鑰冭瘯锛 */ + @Excel(name = "鑰冭瘯鍒嗙被", readConverterExp = "0=-鏃狅紝1-姝e紡鑰冭瘯锛2-妯℃嫙鑰冭瘯") + private Integer examType; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 瀹℃牳鐘舵侊紙0-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷锛 */ + @Excel(name = "瀹℃牳鐘舵", readConverterExp = "0=-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷") + private Integer examineStatus; + + /** 瀹℃牳鍙嶉 */ + @Excel(name = "瀹℃牳鍙嶉") + private String examineFeedback; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamNotice.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamNotice.java new file mode 100644 index 0000000000000000000000000000000000000000..6bb2795ea890378e8c12ab016c77ac556325a516 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamNotice.java @@ -0,0 +1,120 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.util.Date; + +/** + * 鑰冭瘯閫氱煡瀵硅薄 tb_exam_notice + * + * @author ruoyi + * @date 2024-10-16 + */ +@Getter +@Setter +@ToString +public class TbExamNotice extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鑰冭瘯閫氱煡涓婚敭ID */ + @Excel(name = "鑰冭瘯閫氱煡涓婚敭ID") + private Long examNoticeId; + + /** 鑰冭瘯ID */ + @NotBlank(message = "鑰冭瘯ID涓嶈兘涓虹┖") + private Long examId; + + /** 鑰冭瘯鍚 */ + @NotBlank(message = "鑰冭瘯鍚嶄笉鑳戒负绌") + private String examName; + + /** 鑰冭瘯閫氱煡logo */ + @Excel(name = "鑰冭瘯閫氱煡logo") + private String examNoticeLogo; + + /** 鑰冭瘯閫氱煡鍚 */ + @Excel(name = "鑰冭瘯閫氱煡鍚") + @NotBlank(message = "鑰冭瘯閫氱煡鍚嶄笉鑳戒负绌") + private String examNoticeName; + + /** 鑰冭瘯閫氱煡绠浠 */ + @Excel(name = "鑰冭瘯閫氱煡绠浠") + private String examNoticeIntroduce; + + /** 鑰冭瘯閫氱煡璇︽儏 */ + @Excel(name = "鑰冭瘯閫氱煡璇︽儏") + private String examNoticeDetails; + + /** 鑰冭瘯寮濮嬫椂闂 */ + @Excel(name = "鑰冭瘯寮濮嬫椂闂") + @NotNull(message = "鑰冭瘯寮濮嬫椂闂翠笉鑳戒负绌") + private String examStartTime; + + /** 鑰冭瘯缁撴潫鏃堕棿 */ + @Excel(name = "鑰冭瘯缁撴潫鏃堕棿") + @NotNull(message = "鑰冭瘯缁撴潫鏃堕棿涓嶈兘涓虹┖") + private String examEndTime; + + /** 鑰冭瘯鐘舵侊紙0-缁撴潫锛1-杩涜涓級 */ + @Excel(name = "鑰冭瘯鐘舵", readConverterExp = "0=-缁撴潫锛1-杩涜涓") + private Integer examStatus; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 瀹℃牳鐘舵侊紙0-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷锛 */ + @Excel(name = "瀹℃牳鐘舵", readConverterExp = "0=-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷") + private Integer examineStatus; + + /** 瀹℃牳鍙嶉 */ + @Excel(name = "瀹℃牳鍙嶉") + private String examineFeedback; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍙戝竷鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date publicationTime; + + /** 鍙戝竷浜 */ + @Excel(name = "鍙戝竷浜") + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + + /** 鑰冭瘯鎵规搴忓彿 */ + @Excel(name = "鑰冭瘯鎵规搴忓彿") + @NotBlank(message = "鑰冭瘯鎵规搴忓彿涓嶈兘涓虹┖") + private Long batchIndex; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamRegistration.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamRegistration.java new file mode 100644 index 0000000000000000000000000000000000000000..0c1fe1ab03893236f52f782e01c8cadc10f69f90 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamRegistration.java @@ -0,0 +1,338 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 鑰冭瘯鎶ュ悕瀵硅薄 tb_exam_registration + * + * @author ruoyi + * @date 2024-11-05 + */ +@Getter +@Setter +@ToString +public class TbExamRegistration extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鑰冭瘯鎶ュ悕涓婚敭ID */ + private Long examRegistrationId; + + /** 鐢ㄦ埛ID */ +// @Excel(name = "鐢ㄦ埛ID") + private Long memberUserId; + + /** 鑰冭瘯ID */ +// @Excel(name = "鑰冭瘯ID") + private Long examId; + + /** 鎶ュ悕鎵规搴忓彿 */ +// @Excel(name = "鎶ュ悕鎵规搴忓彿") + private Integer examBatchIndex; + + /** 濮撳悕 */ + @Excel(name = "濮撳悕") + private String name; + + /** 鎬у埆锛0-鐢凤紝1-濂筹紝2-鏈煡锛 */ +// @Excel(name = "鎬у埆", readConverterExp = "0=-鐢凤紝1-濂筹紝2-鏈煡") + private Integer sex; + + /** 鏇剧敤鍚 */ +// @Excel(name = "鏇剧敤鍚") + private String formerName; + + /** 姘戞棌 */ +// @Excel(name = "姘戞棌") + private String nation; + + /** 韬唤璇佸彿 */ +// @Excel(name = "韬唤璇佸彿") + private String identityCard; + + /** 鍑虹敓鏃ユ湡 */ +// @Excel(name = "鍑虹敓鏃ユ湡") + private String birthday; + + /** 鐢熸簮绫诲瀷 */ +// @Excel(name = "鐢熸簮绫诲瀷") + private String sourceType; + + /** 绫嶈疮 */ +// @Excel(name = "绫嶈疮") + private String nativePlace; + + /** 鏀挎不闈㈣矊 */ +// @Excel(name = "鏀挎不闈㈣矊") + private String politicalStatus; + + /** 瀛﹀巻锛0-鏃狅紝1-灏忓锛2-鍒濅腑锛3-楂樹腑锛4-涓笓锛5-涓撶锛6-鏈锛7-鐮旂┒鐢燂級 */ + @Excel(name = "瀛﹀巻") + private String education; + + /** 涓撲笟 */ + @Excel(name = "涓撲笟") + private String major; + + /** 鎵鍦ㄥ鏍★紙姣曚笟瀛︽牎锛 */ + @Excel(name = "鎵鍦ㄥ鏍") + private String graduationSchool; + + /** 鍏ュ骞翠唤锛堟瘯涓氬勾浠斤級 */ +// @Excel(name = "鍏ュ骞翠唤") + private String entranceYear; + + /** 鑱旂郴鏂瑰紡 */ + @Excel(name = "鑱旂郴鏂瑰紡") + private String contactInformation; + + /** 鐪両D */ +// @Excel(name = "鐪両D") + private Long provinceId; + + /** 甯侷D */ +// @Excel(name = "甯侷D") + private Long cityId; + + /** 鍖猴紙鍘匡級ID */ +// @Excel(name = "鍖", readConverterExp = "鍘=") + private Long areaId; + + /** 鐪佸悕 */ +// @Excel(name = "鐪佸悕") + private String provinceName; + + /** 甯傚悕 */ +// @Excel(name = "甯傚悕") + private String cityName; + + /** 鍖哄悕 */ +// @Excel(name = "鍖哄悕") + private String areaName; + + /** 璇︾粏鍦板潃 */ +// @Excel(name = "璇︾粏鍦板潃") + private String address; + + /** 閭紪 */ +// @Excel(name = "閭紪") + private String zipCode; + + /** 鑱旂郴鐢佃瘽 */ +// @Excel(name = "鑱旂郴鐢佃瘽") + private String contactPhone; + + /** 鐢靛瓙閭 */ +// @Excel(name = "鐢靛瓙閭") + private String email; + + /** 钃濆簳璇佷欢鐓 */ +// @Excel(name = "钃濆簳璇佷欢鐓") + private String idPhoto; + + /** 韬唤璇佸浗寰介潰锛堟闈級 */ +// @Excel(name = "韬唤璇佸浗寰介潰", readConverterExp = "姝=闈") + private String identityCardBadge; + + /** 韬唤璇佷汉鍍忛潰锛堝弽闈級 */ +// @Excel(name = "韬唤璇佷汉鍍忛潰", readConverterExp = "鍙=闈") + private String identityCardPortrait; + + /** 姣曚笟璇佷功锛堝涓敤鑻辨枃閫楀彿闅斿紑锛 */ +// @Excel(name = "姣曚笟璇佷功", readConverterExp = "澶=涓敤鑻辨枃閫楀彿闅斿紑") + private String graduationCertificate; + + /** 鏈烘瀯ID */ +// @Excel(name = "鏈烘瀯ID") + private Long agencyId; + + /** 鏈烘瀯鍚嶇О */ + @Excel(name = "鏈烘瀯鍚嶇О") + private String agencyName; + + /** 鑱屼笟ID */ +// @Excel(name = "鑱屼笟ID") + private Long careerId; + + /** 鑱屼笟鍚嶇О */ + @Excel(name = "鑱屼笟鍚嶇О") + private String careerName; + + /** 鑰冭瘯绛夌骇 */ + @Excel(name = "鑰冭瘯绛夌骇") + private String examLevel; + + /** 鎶ュ悕鎵规 */ + @Excel(name = "鎶ュ悕鎵规") + private String registrationBatch; + + /** 瀛︿範涓績ID */ +// @Excel(name = "瀛︿範涓績ID") + private Long studyCenterId; + + /** 瀛︿範涓績 */ + @Excel(name = "瀛︿範涓績") + private String studyCenter; + + /** 鏈烘瀯浠g爜 */ + @Excel(name = "鏈烘瀯浠g爜") + private String agencyCode; + + /** 鏄惁鑷煡鐢宠璧勬枡瀹屾暣鎬э紙0-鍚︼紝1-鏄級 */ +// @Excel(name = "鏄惁鑷煡鐢宠璧勬枡瀹屾暣鎬", readConverterExp = "0=-鍚︼紝1-鏄") + private Integer isInspect; + + /** 绛惧瓧鐓 */ +// @Excel(name = "绛惧瓧鐓") + private String signPhoto; + + /** 鏀粯鐘舵侊紙0-鏈敮浠橈紝1-宸叉敮浠橈紝-1-宸插彇娑堬級 */ +// @Excel(name = "鏀粯鐘舵", readConverterExp = "0=鏈敮浠,1=宸叉敮浠橈紝-1-宸插彇娑") + private Integer isPay; + + /** 瀹℃牳鐘舵侊紙0-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷锛 */ + @Excel(name = "鑰冭瘯鐘舵", readConverterExp = "0=寰呰冭瘯,1=閫氳繃,2=鏈氳繃") + private Integer examineStatus; + + //璁㈠崟閲戦 + @Excel(name = "鎶ュ悕璐圭敤") + private BigDecimal orderPrice; + + /** 鏀粯閲戦 */ + @Excel(name = "鏀粯閲戦") + private BigDecimal payPrice; + + /** 鏀粯鏂瑰紡锛0-鏈敮浠橈紝1-寰俊锛2-鏀粯瀹,3-绾夸笅锛 */ + @Excel(name = "鏀粯鏂瑰紡", readConverterExp = "0=鏈敮浠,1=寰俊,2=鏀粯瀹,3=绾夸笅") + private Integer payType; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ +// @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 瀹℃牳鍙嶉 */ +// @Excel(name = "瀹℃牳鍙嶉") + private String examineFeedback; + + /** 鎺掑簭 */ +// @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ +// @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ +// @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") +// @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ +// @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + + /** 鎶ュ悕琛 */ +// @Excel(name = "鎶ュ悕琛") + private String registrationForm; + + /** 鍑嗚冭瘉 */ +// @Excel(name = "鍑嗚冭瘉") + private String admissionTicket; + + /** 鎴愮哗鍗 */ +// @Excel(name = "鎴愮哗鍗") + private String transcript; + + /** 璇佷功 */ +// @Excel(name = "璇佷功") + private String certificate; + + /** 璇佷功閭瘎鐘舵侊紙0-鏈笂浼犲湴鍧锛1-寰呭彂璐э紝2-宸插彂璐э紝3-宸查佽揪锛 */ +// @Excel(name = "璇佷功閭瘎鐘舵", readConverterExp = "0=鏈笂浼犲湴鍧锛1-寰呭彂璐э紝2-宸插彂璐э紝3-宸查佽揪") + private Integer certificateStatus; + + /** 濉啓鍦板潃鏃堕棿 */ +// @Excel(name = "濉啓鍦板潃鏃堕棿") + private String writeAt; + + /** 鍙戣揣鏃堕棿 */ +// @Excel(name = "鍙戣揣鏃堕棿") + private String consignAt; + + /** 纭鏀惰揣鏃堕棿 */ +// @Excel(name = "纭鏀惰揣鏃堕棿") + private String enterAt; + + /** 蹇掑叕鍙镐唬鍙 */ +// @Excel(name = "蹇掑叕鍙镐唬鍙") + private String shippingMark; + + /** 鐗╂祦鍚嶇О */ +// @Excel(name = "鐗╂祦鍚嶇О") + private String shippingName; + + /** 鐗╂祦鍗曞彿 */ +// @Excel(name = "鐗╂祦鍗曞彿") + private String shippingCode; + + /** 蹇掍换鍔D shipping_task_id */ + private String shippingTaskId; + + /** 蹇掕鍗旾D shipping_order_id */ + private String shippingOrderId; + + /** 蹇掓煡璇㈠瘑閽 shipping_poll_token */ + private String shippingPollToken; + + /** 瀵勪欢浜哄鍚 send_man_name */ + private String sendManName; + + /** 瀵勪欢浜烘墜鏈哄彿 send_man_mobile */ + private String sendManMobile; + + /** 瀵勪欢浜哄湴鍧 sendMan_print_addr */ + private String sendManPrintAddr; + + /** 璁㈠崟鐘舵 shipping_status锛 0锛'涓嬪崟鎴愬姛'锛 1锛'宸叉帴鍗'锛 2锛'鏀朵欢涓'锛 9锛'鐢ㄦ埛涓诲姩鍙栨秷'锛10锛'宸插彇浠'锛 11锛'鎻借揣澶辫触'锛12锛'宸查鍥'锛 13锛'宸茬鏀'锛 14锛'寮傚父绛炬敹'锛15锛'宸茬粨绠' 锛99锛'璁㈠崟宸插彇娑'锛101锛'杩愯緭涓'锛200锛'宸插嚭鍗'锛201锛'鍑哄崟澶辫触'锛610锛'涓嬪崟澶辫触'锛155锛'淇敼閲嶉噺'(娉ㄦ剰闇瑕佸湪宸ュ崟绯荤粺涓彂璧峰紓甯稿弽棣堝苟鐢卞揩閫100鏈嶅姟浜哄憳纭璋冮噸鍚庢墠浼氭湁姝ょ姸鎬佸洖璋冿紝鍥炶皟鍐呭鍖呭惈淇敼閲嶉噺鍚庣殑閲嶉噺銆佽繍璐广佽垂鐢ㄦ槑缁嗐佷笟鍔$被鍨)锛166锛氳鍗曞娲伙紙璁㈠崟琚彇娑堬紝浣嗘槸瀹為檯鍖呰9宸茬粡鍙戝嚭锛屾甯歌璐癸級锛400锛氭淳閫佷腑锛 */ + private String shippingStatus; + + /** 璇剧▼ID */ + private Long courseId; + + //璁㈠崟鍙 + @Excel(name = "璁㈠崟鍙") + private String orderNo; + + //鍑嗚冭瘉鍙 + private String zkzh; + + /** 鍒涘缓鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒涘缓鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date createTime; + + //鏄惁鎶ュ悕 + private String isEnroll; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamSimulateInfo.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamSimulateInfo.java new file mode 100644 index 0000000000000000000000000000000000000000..2047940e1ee1a490fe912f98d069d00c63001c1d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamSimulateInfo.java @@ -0,0 +1,154 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏瀵硅薄 tb_exam_simulate_info + * + * @author ruoyi + * @date 2024-11-11 + */ +@Getter +@Setter +@ToString +public class TbExamSimulateInfo extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏涓婚敭ID */ + private Long examSimulateInfoId; + + /** 鑰冨彴缂栧彿 */ + @Excel(name = "鑰冨彴缂栧彿") + private String examPlatformNumber; + + /** 鐢ㄦ埛ID */ + @Excel(name = "鐢ㄦ埛ID") + private Long memberUserId; + + /** 鑰冭瘯ID */ + @Excel(name = "鑰冭瘯ID") + private Long examId; + + /** 棰樺簱鍒嗙被ID */ + @Excel(name = "棰樺簱鍒嗙被ID") + private Long subjectWarehouseClassId; + + /** 鑰冭瘯鍒嗙被锛0-鏃狅紝1-姝e紡鑰冭瘯锛2-妯℃嫙鑰冭瘯锛 */ + @Excel(name = "鑰冭瘯鍒嗙被", readConverterExp = "0=-鏃狅紝1-姝e紡鑰冭瘯锛2-妯℃嫙鑰冭瘯") + private Integer examType; + + /** 鑰冭瘯鏃堕棿锛堝垎閽燂級 */ + @Excel(name = "鑰冭瘯鏃堕棿", readConverterExp = "鍒=閽") + private Integer examMinute; + + /** 鑰冭瘯寮濮嬫椂闂 */ + @Excel(name = "鑰冭瘯寮濮嬫椂闂") + private String examStartTime; + + /** 鑰冭瘯缁撴潫鏃堕棿 */ + @Excel(name = "鑰冭瘯缁撴潫鏃堕棿") + private String examEndTime; + + /** 鑰冭瘯鐘舵侊紙0-鏈紑濮嬶紝1-杩涜涓紝2-宸茬粨鏉燂級 */ + @Excel(name = "鑰冭瘯鐘舵", readConverterExp = "0=-鏈紑濮嬶紝1-杩涜涓紝2-宸茬粨鏉") + private Integer examStatus; + + /** 瀹屾垚鐘舵侊紙0-鏃狅紝1-杩涜涓紝2-宸插畬鎴愶級 */ + @Excel(name = "瀹屾垚鐘舵", readConverterExp = "0=-鏃狅紝1-杩涜涓紝2-宸插畬鎴") + private Integer completeStatus; + + /** 瀹屾垚鏃堕棿 */ + @Excel(name = "瀹屾垚鏃堕棿") + private String completeTime; + + /** 寮濮嬬瓟鍗锋椂闂 */ + @Excel(name = "寮濮嬬瓟鍗锋椂闂") + private String startTime; + + /** 缁撴潫绛斿嵎鏃堕棿 */ + @Excel(name = "缁撴潫绛斿嵎鏃堕棿") + private String endTime; + + /** 浜ゅ嵎鐘舵侊紙0-鏃狅紝1-鑷富浜ゅ嵎锛2-绯荤粺浜ゅ嵎锛 */ + @Excel(name = "浜ゅ嵎鐘舵", readConverterExp = "0=-鏃狅紝1-鑷富浜ゅ嵎锛2-绯荤粺浜ゅ嵎") + private Integer submitStatus; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 瀹℃牳鐘舵侊紙0-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷锛 */ + @Excel(name = "瀹℃牳鐘舵", readConverterExp = "0=-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷") + private Integer examineStatus; + + /** 瀹℃牳鍙嶉 */ + @Excel(name = "瀹℃牳鍙嶉") + private String examineFeedback; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + + /** 鑰冭瘯鎬诲垎 */ + @Excel(name = "鑰冭瘯鎬诲垎") + private BigDecimal totalScore; + + /** 鍙婃牸鍒 */ + @Excel(name = "鍙婃牸鍒") + private BigDecimal passScore; + + /** 寰楀垎 */ + @Excel(name = "寰楀垎") + private BigDecimal completeScore; + + /** 閫氳繃鐘舵侊紙0-鏃狅紝1-閫氳繃锛2-鏈氳繃锛 */ + @Excel(name = "閫氳繃鐘舵", readConverterExp = "0=-鏃狅紝1-閫氳繃锛2-鏈氳繃") + private Integer passStatus; + + /** 鏄惁琛ヨ冿紙0-鍚︼紝1-鏄級 */ + private Integer isAgain; + + /** 鎴愮哗鍗曠紪鍙 */ + @Excel(name = "鎴愮哗鍗曠紪鍙") + private String transcriptCode; + + /** 鐢ㄦ椂 */ + @Excel(name = "鐢ㄦ椂") + private String usageTime; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamSubject.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamSubject.java new file mode 100644 index 0000000000000000000000000000000000000000..220808d7eae90e78787c74e3e9707378a06e85f3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamSubject.java @@ -0,0 +1,157 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * 鑰冭瘯棰樼洰瀵硅薄 tb_exam_subject + * + * @author ruoyi + * @date 2024-11-04 + */ +@Getter +@Setter +@ToString +public class TbExamSubject extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鑰冭瘯棰樼洰涓婚敭ID */ + private Long examSubjectId; + + /** 鑰冭瘯棰樼洰缂栧彿 */ +// @Excel(name = "鑰冭瘯棰樼洰缂栧彿") + private String examSubjectNo; + + /** 鑰冭瘯绫诲瀷 exam_type锛0-鑰冭瘯,1-妯℃嫙鑰冭瘯锛 */ + @Excel(name = "鑰冭瘯绫诲瀷", readConverterExp = "0=鑰冭瘯,1=妯℃嫙鑰冭瘯") + private String examType; + + /** 绛夌骇 */ + @Excel(name = "绛夌骇",readConverterExp = "1=鍒濈骇,2=涓骇,3=楂樼骇") + private Integer level; + + /** 鑰冭瘯ID exam_id */ + private Long examId; + + /** 棰樺簱鍒嗙被ID */ + private Long subjectWarehouseClassId; + + /** 棰樺簱鍒嗙被 */ + private String subjectWarehouseClassName; + + /** 鍒嗙被ID */ +// @Excel(name = "鍒嗙被ID") + private Long classId; + + /** 鍒嗙被鍚 */ +// @Excel(name = "鍒嗙被鍚") + private String className; + + /** 涓撲笟ID */ +// @Excel(name = "涓撲笟ID") + private Long majorId; + + /** 涓撲笟鍚 */ +// @Excel(name = "涓撲笟鍚") + private String majorName; + + /** 棰樼洰 */ + @Excel(name = "棰樼洰") + private String question; + + /** 鏂囦欢 */ +// @Excel(name = "鏂囦欢") + private String fileUrl; + + /** 鏂囦欢绫诲瀷锛0-鏃,1-鍥剧墖,2-瑙嗛锛 */ +// @Excel(name = "鏂囦欢绫诲瀷", readConverterExp = "0=-鏃,1-鍥剧墖,2-瑙嗛") + private Integer fileType; + + /** 棰樼洰绫诲瀷锛1-鍗曢,2-澶氶,3-鍒ゆ柇,4-璁鸿堪锛 */ + @Excel(name = "棰樼洰绫诲瀷", readConverterExp = "1=鍗曢,2-澶氶,3-鍒ゆ柇,4-璁鸿堪") + private Integer subjectType; + + /** 鏄惁绮鹃夛紙0-涓嶇簿閫,1-绮鹃夛級 */ +// @Excel(name = "鏄惁绮鹃", readConverterExp = "0=-涓嶇簿閫,1-绮鹃") + private Integer isSelected; + + /** 绛旀ID闆嗗悎 */ +// @Excel(name = "绛旀ID闆嗗悎") + private String answerIds; + + /** 绛旀 */ + @Excel(name = "绛旀") + private String answer; + + /** 璇曢璇﹁В */ +// @Excel(name = "璇曢璇﹁В") + private String subjectExplain; + + /** 鍒嗘暟 */ + @Excel(name = "鍒嗘暟") + private BigDecimal score; + + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ +// @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 瀹℃牳鐘舵侊紙0-寰呭鏍,1-瀹℃牳閫氳繃,2-瀹℃牳鎷掔粷锛 */ +// @Excel(name = "瀹℃牳鐘舵", readConverterExp = "0=-寰呭鏍,1-瀹℃牳閫氳繃,2-瀹℃牳鎷掔粷") + private Integer examineStatus; + + /** 瀹℃牳鍙嶉 */ +// @Excel(name = "瀹℃牳鍙嶉") + private String examineFeedback; + + /** 鎺掑簭 */ +// @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ +// @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず,1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=鏄剧ず,1=闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") +// @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ +// @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父,1-鍒犻櫎锛 */ + private Integer delFlag; + + /** 鑰冭瘯棰樼洰绛旀閫夐」鍒楄〃 */ + private List examSubjectAnswerList; + + /** 鑰冭瘯ID */ +// private Long examId; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒涘缓鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date createTime; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamSubjectAnswer.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamSubjectAnswer.java new file mode 100644 index 0000000000000000000000000000000000000000..6ebc3d6e2903207dd9a7f3443afd068b1119aee0 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamSubjectAnswer.java @@ -0,0 +1,103 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 鑰冭瘯棰樼洰绛旀閫夐」瀵硅薄 tb_exam_subject_answer + * + * @author ruoyi + * @date 2024-11-04 + */ +@Getter +@Setter +@ToString +public class TbExamSubjectAnswer extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鑰冭瘯棰樼洰绛旀閫夐」涓婚敭ID */ + private Long examSubjectAnswerId; + + /** 鑰冭瘯棰樼洰ID */ + @Excel(name = "鑰冭瘯棰樼洰ID") + private Long examSubjectId; + + /** 鑰冭瘯棰樼洰缂栧彿 */ + @Excel(name = "鑰冭瘯棰樼洰缂栧彿") + private String examSubjectNo; + + /** 棰樼洰绫诲瀷锛1-鍗曢夛紝2-澶氶夛紝3-鍒ゆ柇锛4-璁鸿堪锛 */ + @Excel(name = "棰樼洰绫诲瀷", readConverterExp = "1=-鍗曢夛紝2-澶氶夛紝3-鍒ゆ柇锛4-璁鸿堪") + private Integer subjectType; + + /** 閫夐」锛圓BCDE锛 */ + @Excel(name = "閫夐」", readConverterExp = "A=BCDE") + private String subjectOption; + + /** 閫夐」鍐呭锛堣杩伴涓虹瓟妗堝叧閿瘝锛 */ + @Excel(name = "閫夐」鍐呭", readConverterExp = "璁=杩伴涓虹瓟妗堝叧閿瘝") + private String subjectName; + + /** 鏄惁绛旀锛0-鍚︼紝1-鏄級 */ + @Excel(name = "鏄惁绛旀", readConverterExp = "0=-鍚︼紝1-鏄") + private Integer isAnswer; + + /** 鍒嗘暟 */ + @Excel(name = "鍒嗘暟") + private BigDecimal score; + + /** 绛夌骇 */ + @Excel(name = "绛夌骇") + private Integer level; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 瀹℃牳鐘舵侊紙0-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷锛 */ + @Excel(name = "瀹℃牳鐘舵", readConverterExp = "0=-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷") + private Integer examineStatus; + + /** 瀹℃牳鍙嶉 */ + @Excel(name = "瀹℃牳鍙嶉") + private String examineFeedback; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamSubjectFormal.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamSubjectFormal.java new file mode 100644 index 0000000000000000000000000000000000000000..46d0b6126f7c44f71a8a6e760b6fe2d9e4941039 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamSubjectFormal.java @@ -0,0 +1,111 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 姝e紡鑰冭瘯棰樼洰瀵硅薄 tb_exam_subject_formal + * + * @author ruoyi + * @date 2024-11-13 + */ +@Getter +@Setter +@ToString +public class TbExamSubjectFormal extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 妯℃嫙鑰冭瘯棰樼洰涓婚敭ID */ + private Long examSubjectFormalId; + + /** 鍒嗙被ID */ + @Excel(name = "鍒嗙被ID") + private Long classId; + + /** 鍒嗙被鍚 */ + @Excel(name = "鍒嗙被鍚") + private String className; + + /** 涓撲笟ID */ + @Excel(name = "涓撲笟ID") + private Long majorId; + + /** 涓撲笟鍚 */ + @Excel(name = "涓撲笟鍚") + private String majorName; + + /** 鑱屼笟ID */ + @Excel(name = "鑱屼笟ID") + private Long careerId; + + /** 鑱屼笟鍚 */ + @Excel(name = "鑱屼笟鍚") + private String careerName; + + /** 棰樺簱鍒嗙被ID */ + @Excel(name = "棰樺簱鍒嗙被ID") + private Long subjectWarehouseClassId; + + /** 鑰冭瘯ID */ + @Excel(name = "鑰冭瘯ID") + private Long examId; + + /** 鑰冭瘯棰樼洰ID */ + @Excel(name = "鑰冭瘯棰樼洰ID") + private Long examSubjectId; + + /** 鑰冭瘯棰樼洰缂栧彿 */ + @Excel(name = "鑰冭瘯棰樼洰缂栧彿") + private String examSubjectNo; + + /** 鍒嗘暟 */ + @Excel(name = "鍒嗘暟") + private BigDecimal score; + + /** 绛夌骇 */ + @Excel(name = "绛夌骇") + private Integer level; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamSubjectSimulate.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamSubjectSimulate.java new file mode 100644 index 0000000000000000000000000000000000000000..8817c30bf0c1c1f9c447dd7e5d5a9eb517f1a7eb --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExamSubjectSimulate.java @@ -0,0 +1,83 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 妯℃嫙鑰冭瘯棰樼洰瀵硅薄 tb_exam_subject_simulate + * + * @author ruoyi + * @date 2024-11-08 + */ +@Getter +@Setter +@ToString +public class TbExamSubjectSimulate extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 妯℃嫙鑰冭瘯棰樼洰涓婚敭ID */ + private Long examSubjectSimulateId; + + /** 棰樺簱鍒嗙被ID */ + @Excel(name = "棰樺簱鍒嗙被ID") + private Long subjectWarehouseClassId; + + /** 鑰冭瘯棰樼洰ID */ + @Excel(name = "鑰冭瘯棰樼洰ID") + private Long examSubjectId; + + /** 鑰冭瘯棰樼洰缂栧彿 */ + @Excel(name = "鑰冭瘯棰樼洰缂栧彿") + private String examSubjectNo; + + /** 鍒嗘暟 */ + @Excel(name = "鍒嗘暟") + private BigDecimal score; + + /** 绛夌骇 */ + @Excel(name = "绛夌骇") + private Integer level; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExpressKdCode.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExpressKdCode.java new file mode 100644 index 0000000000000000000000000000000000000000..29e0172ff2eea7b620c18dcf8b82f129f8620e15 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbExpressKdCode.java @@ -0,0 +1,52 @@ +package com.ruoyi.hezhi.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +/** + * 蹇掔紪鐮佸璞 tb_express_kd_code + * + * @author ruoyi + * @date 2024-11-20 + */ +@Getter +@Setter +@ToString +public class TbExpressKdCode extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 蹇掍富閿 */ + private Long id; + + /** 蹇掔紪鐮 */ + @Excel(name = "蹇掔紪鐮") + private String code; + + /** 蹇掑悕绉 */ + @Excel(name = "蹇掑悕绉") + private String name; + + /** 寰俊灏忕▼搴忚繍鍔沬d */ + @Excel(name = "寰俊灏忕▼搴忚繍鍔沬d") + private String deliveryId; + + /** 鏄惁鏄父鐢ㄥ揩閫掞紙0-鍚︼紝1-鏄級 */ + @Excel(name = "鏄惁鏄父鐢ㄥ揩閫", readConverterExp = "0=-鍚︼紝1-鏄") + private Integer isDefault; + + /** 鏄惁绂佺敤锛0-鍚︼紝1-鏄級 */ + @Excel(name = "鏄惁绂佺敤", readConverterExp = "0=-鍚︼紝1-鏄") + private Integer disabled; + + /** logo */ + @Excel(name = "logo") + private String logo; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbLink.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbLink.java new file mode 100644 index 0000000000000000000000000000000000000000..f90d0869787431f0d9843f0e62a59aca917b4a2c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbLink.java @@ -0,0 +1,85 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 璧勬簮鍏宠仈瀵硅薄 tb_link + * + * @author ruoyi + * @date 2024-10-22 + */ +@Getter +@Setter +@ToString +public class TbLink extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 璧勬簮鍏宠仈涓婚敭ID */ + private Long linkId; + + /** 璧勬簮涓ID */ + @Excel(name = "璧勬簮涓ID") + private Long resourcesOneId; + + /** 璧勬簮涓鍚 */ + @Excel(name = "璧勬簮涓鍚") + private String resourcesOneName; + + /** 璧勬簮浜孖D */ + @Excel(name = "璧勬簮浜孖D") + private Long resourcesTwoId; + + /** 璧勬簮浜屽悕 */ + @Excel(name = "璧勬簮浜屽悕") + private String resourcesTwoName; + + private String resourcesTwoImg; + + /** 绫诲瀷锛0-榛樿锛1-鐩存挱涓庤佸笀鍏宠仈锛2-鐩存挱涓庝笓涓氬叧鑱旓紝3-鑰佸笀涓庝笓涓氬叧鑱旓紝4-瀛︿範涓績涓庣户缁暀鑲插垎绫诲叧鑱旓級 */ + private Integer type; + + /** 鏍规嵁绫诲瀷瀹氫箟涓嶅悓鎰忔 */ + // type=1 鐩存挱涓庤佸笀鍏宠仈锛堟槸鍚︿富璁诧細0-涓嶆槸涓昏锛1-鏄富璁诧級 + // type=4 瀛︿範涓績涓庣户缁暀鑲插垎绫诲叧鑱 锛堟槸鍚︽帹鑽愶細0-榛樿锛1-鎺ㄨ崘锛 + // type=5 璇勪环鏈烘瀯涓庤绋嬪叧鑱 + private Integer linkOne; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbLiveBroadcast.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbLiveBroadcast.java new file mode 100644 index 0000000000000000000000000000000000000000..bdf470ef3a24ceba1469fdec6be0a61bc70cc93f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbLiveBroadcast.java @@ -0,0 +1,118 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; +import java.util.List; + +/** + * 鐩存挱瀵硅薄 tb_live_broadcast + * + * @author ruoyi + * @date 2024-10-22 + */ +@Getter +@Setter +@ToString +public class TbLiveBroadcast extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鐩存挱涓婚敭ID */ + private Long liveBroadcastId; + + /** 鐩存挱灏侀潰鍥 */ + @Excel(name = "鐩存挱灏侀潰鍥") + private String liveBroadcastImg; + + /** 鐩存挱鍚 */ + @Excel(name = "鐩存挱鍚") + private String liveBroadcastName; + + /** 鐩存挱鏍囬 */ + @Excel(name = "鐩存挱鏍囬") + private String liveBroadcastTitle; + + /** 鐩存挱淇℃伅 */ + @Excel(name = "鐩存挱淇℃伅") + private String liveBroadcastInfo; + + /** 鐩存挱绠浠 */ + @Excel(name = "鐩存挱绠浠") + private String liveBroadcastIntroduce; + + /** 鐩存挱璇︽儏 */ + @Excel(name = "鐩存挱璇︽儏") + private String liveBroadcastDetails; + + /** 鐩存挱鏍囩 */ + @Excel(name = "鐩存挱鏍囩") + private String liveBroadcastTag; + + /** 鐩存挱鍦板潃 */ + @Excel(name = "鐩存挱鍦板潃") + private String liveBroadcastUrl; + + /** 鐩存挱寮濮嬫椂闂 */ + @Excel(name = "鐩存挱寮濮嬫椂闂") + private String startTime; + + /** 鐩存挱缁撴潫鏃堕棿 */ + @Excel(name = "鐩存挱缁撴潫鏃堕棿") + private String endTime; + + /** 绫诲瀷锛0-瑙嗛锛1-鐩存挱锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-瑙嗛锛1-鐩存挱") + private Integer type; + + /** 鎺ㄨ崘锛0-鍚︼紝1-鏄級 */ + @Excel(name = "鎺ㄨ崘", readConverterExp = "0=-鍚︼紝1-鏄") + private Integer isRecommend; + + /** 瀹℃牳鐘舵侊紙0-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷锛 */ + @Excel(name = "瀹℃牳鐘舵", readConverterExp = "0=-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷") + private Integer examineStatus; + + /** 瀹℃牳鍙嶉 */ + @Excel(name = "瀹℃牳鍙嶉") + private String examineFeedback; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + + /** 鑰冭瘯璇剧▼鍒楄〃 */ + public List examCourseList; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMajorClass.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMajorClass.java new file mode 100644 index 0000000000000000000000000000000000000000..f3ef85ee0c9f746fca24aa9359d6dd1bc8d55a5d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMajorClass.java @@ -0,0 +1,117 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.TreeEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; +import java.util.List; + +/** + * 涓撲笟鍒嗙被瀵硅薄 tb_major_class + * + * @author ruoyi + * @date 2024-10-16 + */ +@Getter +@Setter +@ToString +public class TbMajorClass extends TreeEntity +{ + private static final long serialVersionUID = 1L; + + /** 涓撲笟鍒嗙被涓婚敭ID */ + @Excel(name = "涓撲笟鍒嗙被涓婚敭ID") + private Long majorId; + + /** 鐖剁骇ID */ + @Excel(name = "鐖剁骇ID") + private Long pid; + + /** 灞傜骇 0 1 2 */ + @Excel(name = "灞傜骇 0 1 2 ") + private Integer level; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 涓撲笟鍚嶇О */ + @Excel(name = "涓撲笟鍚嶇О") + private String majorName; + + /** logo1 */ + @Excel(name = "logo1") + private String majorLogoOne; + + /** logo2 */ + @Excel(name = "logo2") + private String majorLogoTwo; + + /** 鎺ㄨ崘锛0-鍚︼紝1-鎺ㄨ崘锛 */ + @Excel(name = "鎺ㄨ崘", readConverterExp = "0=-鍚︼紝1-鎺ㄨ崘") + private Integer isRecommend; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍙戝竷鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date publicationTime; + + /** 鍙戝竷浜 */ + @Excel(name = "鍙戝竷浜") + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + + /** 涓撲笟璇︽儏 */ + @Excel(name = "涓撲笟璇︽儏") + private String majorDetails; + + /** 涓撲笟姒傝堪 */ + @Excel(name = "涓撲笟姒傝堪") + private String majorOverview; + + /** 涓撲笟澶х翰 */ + @Excel(name = "涓撲笟澶х翰") + private String majorSyllabus; + + /** 棰勫鐭ヨ瘑 */ + @Excel(name = "棰勫鐭ヨ瘑") + private String majorKnowledge; + + /** 璇佷功瑕佹眰 */ + @Excel(name = "璇佷功瑕佹眰") + private String majorCertificate; + + /** 鍙傝冭祫鏂 */ + @Excel(name = "鍙傝冭祫鏂") + private String majorInformation; + + private List childrenList; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberAddress.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberAddress.java new file mode 100644 index 0000000000000000000000000000000000000000..48e96486da9b5c59d5b95786e17ea0eace513b5e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberAddress.java @@ -0,0 +1,114 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 鐢ㄦ埛鍦板潃瀵硅薄 tb_member_address + * + * @author ruoyi + * @date 2024-10-30 + */ +@Getter +@Setter +@ToString +public class TbMemberAddress extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鐢ㄦ埛鍦板潃涓婚敭ID */ + private Long memberAddressId; + + /** 鐢ㄦ埛ID */ + @Excel(name = "鐢ㄦ埛ID") + private Long memberUserId; + + /** 濮撳悕 */ + @Excel(name = "濮撳悕") + private String name; + + /** 鎵嬫満鍙 */ + @Excel(name = "鎵嬫満鍙") + private String phone; + + /** 鐪両D */ + @Excel(name = "鐪両D") + private Long provinceId; + + /** 甯侷D */ + @Excel(name = "甯侷D") + private Long cityId; + + /** 鍖猴紙鍘匡級ID */ + @Excel(name = "鍖", readConverterExp = "鍘=") + private Long areaId; + + /** 鐪佸悕 */ + @Excel(name = "鐪佸悕") + private String provinceName; + + /** 甯傚悕 */ + @Excel(name = "甯傚悕") + private String cityName; + + /** 鍖哄悕 */ + @Excel(name = "鍖哄悕") + private String areaName; + + /** 璇︾粏鍦板潃 */ + @Excel(name = "璇︾粏鍦板潃") + private String address; + + /** 鍦板潃 */ + @Excel(name = "鍦板潃") + private String location; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 瀹℃牳鐘舵侊紙0-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷锛 */ + @Excel(name = "瀹℃牳鐘舵", readConverterExp = "0=-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷") + private Integer examineStatus; + + /** 瀹℃牳鍙嶉 */ + @Excel(name = "瀹℃牳鍙嶉") + private String examineFeedback; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberDiscuss.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberDiscuss.java new file mode 100644 index 0000000000000000000000000000000000000000..8395f499139a3f3fc9517506f089ec41f2d934cd --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberDiscuss.java @@ -0,0 +1,78 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 鐢ㄦ埛璁ㄨ瀵硅薄 tb_member_discuss + * + * @author ruoyi + * @date 2024-11-19 + */ +@Getter +@Setter +@ToString +public class TbMemberDiscuss extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鐢ㄦ埛璁ㄨ涓婚敭ID */ + private Long memberDiscussId; + + /** 鐢ㄦ埛ID */ + @Excel(name = "鐢ㄦ埛ID") + private Long memberUserId; + + /** 鐩存挱ID */ + @Excel(name = "鐩存挱ID") + private Long liveBroadcastId; + + /** 璇剧▼ID */ + @Excel(name = "璇剧▼ID") + private Long courseId; + + /** 绔犺妭ID */ + @Excel(name = "绔犺妭ID") + private Long chapterId; + + /** 鍐呭 */ + @Excel(name = "鍐呭") + private String content; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberExamSimulateAll.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberExamSimulateAll.java new file mode 100644 index 0000000000000000000000000000000000000000..2ab25fe24847251ec4c20d41b425efbd6b534029 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberExamSimulateAll.java @@ -0,0 +1,97 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛夊璞 tb_member_exam_simulate_all + * + * @author ruoyi + * @date 2024-11-11 + */ +@Getter +@Setter +@ToString +public class TbMemberExamSimulateAll extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛変富閿甀D */ + private Long memberExamSimulateAllId; + + /** 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏ID */ + @Excel(name = "鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏ID") + private Long examSimulateInfoId; + + /** 鐢ㄦ埛ID */ + @Excel(name = "鐢ㄦ埛ID") + private Long memberUserId; + + /** 棰樼洰ID */ + @Excel(name = "棰樼洰ID") + private Long examSubjectId; + + /** 棰樼洰绫诲瀷锛1-鍗曢夛紝2-澶氶夛紝3-鍒ゆ柇锛4-璁鸿堪锛 */ + @Excel(name = "棰樼洰绫诲瀷", readConverterExp = "1=-鍗曢夛紝2-澶氶夛紝3-鍒ゆ柇锛4-璁鸿堪") + private Integer subjectType; + + /** 鑰冭瘯鍒嗙被锛0-鏃狅紝1-姝e紡鑰冭瘯锛2-妯℃嫙鑰冭瘯锛 */ + @Excel(name = "鑰冭瘯鍒嗙被", readConverterExp = "0=-鏃狅紝1-姝e紡鑰冭瘯锛2-妯℃嫙鑰冭瘯") + private Integer examType; + + /** 搴忓彿 */ + @Excel(name = "搴忓彿") + private Long location; + + /** 鎴戠殑绛旀 */ + @Excel(name = "鎴戠殑绛旀") + private String myAnswer; + + /** 绛旀 */ + @Excel(name = "绛旀") + private String answer; + + /** 鍒嗘暟 */ + @Excel(name = "鍒嗘暟") + private BigDecimal score; + + /** 0-鏈洖绛旓紝1-姝g‘锛2-閿欒锛3-璁鸿堪 */ + @Excel(name = "0-鏈洖绛旓紝1-姝g‘锛2-閿欒锛3-璁鸿堪") + private Integer status; + + /** 绛夌骇 */ + @Excel(name = "绛夌骇") + private Integer level; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberJoin.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberJoin.java new file mode 100644 index 0000000000000000000000000000000000000000..fe5ff575af233e9dcba46cbe701f7b489bb2cf17 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberJoin.java @@ -0,0 +1,70 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 鐢ㄦ埛鍙備笌瀵硅薄 tb_member_join + * + * @author ruoyi + * @date 2024-11-15 + */ +@Getter +@Setter +@ToString +public class TbMemberJoin extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鐢ㄦ埛鍙備笌涓婚敭ID */ + private Long memberJoinId; + + /** 鐢ㄦ埛ID */ + @Excel(name = "鐢ㄦ埛ID") + private Long memberUserId; + + /** 鐩稿叧璧勬簮ID */ + @Excel(name = "鐩稿叧璧勬簮ID") + private Long resId; + + /** 璧勬簮绫诲瀷锛0-鏃狅紝1-涓撲笟锛2-璇剧▼锛3-璇剧▼甯堣祫锛4-鑱屼笟鑰冭瘯锛 */ + @Excel(name = "璧勬簮绫诲瀷", readConverterExp = "0=-鏃狅紝1-涓撲笟锛2-璇剧▼") + private Integer type; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberMajor.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberMajor.java new file mode 100644 index 0000000000000000000000000000000000000000..5f9af82b55e04c16a9f5adf257e058140c67793c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberMajor.java @@ -0,0 +1,64 @@ +package com.ruoyi.hezhi.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 鐢ㄦ埛棰樺簱涓撲笟瀵硅薄 tb_member_major + * + * @author ruoyi + * @date 2024-11-29 + */ +@Getter +@Setter +@ToString +public class TbMemberMajor extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鐢ㄦ埛棰樺簱涓撲笟涓婚敭ID */ + private Long memberMajorId; + + /** 鐢ㄦ埛ID */ + @Excel(name = "鐢ㄦ埛ID") + private Long memberUserId; + + /** 涓撲笟ID */ + @Excel(name = "涓撲笟ID") + private Long majorId; + + /** 鐩稿叧璧勬簮ID */ + @Excel(name = "鐩稿叧璧勬簮ID") + private Long resId; + + /** 绫诲瀷锛0-鏃狅紝1-鎶ュ悕锛2-鐐瑰嚮锛 */ + @Excel(name = "璧勬簮绫诲瀷", readConverterExp = "0=-鏃狅紝1-涓撲笟") + private Integer type; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍒犻櫎鏃堕棿 */ + private Date deleteTime; + + /** 鍒犻櫎浜 */ + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberOrder.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberOrder.java new file mode 100644 index 0000000000000000000000000000000000000000..a1db93c7065a5b48fb6460bc3d8db2ec80ea03d0 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberOrder.java @@ -0,0 +1,114 @@ +package com.ruoyi.hezhi.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.math.BigDecimal; + +/** + * 浼氬憳璁㈠崟淇℃伅瀵硅薄 tb_member_order + * + * @author ruoyi + * @date 2024-11-18 + */ +@Getter +@Setter +@ToString +public class TbMemberOrder extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 璁㈠崟Id */ + private Long orderId; + + /** 璁㈠崟缂栧彿 */ + @Excel(name = "璁㈠崟缂栧彿") + private String orderNo; + + /** 浼氬憳ID */ + @Excel(name = "浼氬憳ID") + private Long memberUserId; + + /** 鍏宠仈鏁版嵁ID */ + @Excel(name = "鍏宠仈鏁版嵁ID") + private Long dataId; + + /** 璁㈠崟绫诲瀷锛1-浼氬憳璐癸紝2-鑰冭瘯锛 */ + @Excel(name = "璁㈠崟绫诲瀷", readConverterExp = "1=-浼氬憳璐癸紝2-鑰冭瘯") + private Integer orderType; + + /** 璁㈠崟鍚嶇О */ + @Excel(name = "璁㈠崟鍚嶇О") + private String orderName; + + /** 璁㈠崟澶囨敞 */ + @Excel(name = "璁㈠崟澶囨敞") + private String remarks; + + /** 鍥剧墖 */ + @Excel(name = "鍥剧墖") + private String img; + + /** 鏀粯鏂瑰紡锛1-寰俊锛2-鏀粯瀹濓級 */ + @Excel(name = "鏀粯鏂瑰紡", readConverterExp = "1=-寰俊锛2-鏀粯瀹") + private Integer payType; + + /** 鏀粯璐圭敤 锛堝厓锛 */ + @Excel(name = "鏀粯璐圭敤 ", readConverterExp = "鍏=") + private BigDecimal payPrice; + + /** 鏀粯鐘舵侊紙0-鏈敮浠橈紝1-宸叉敮浠橈級 */ + @Excel(name = "鏀粯鐘舵", readConverterExp = "0=-鏈敮浠橈紝1-宸叉敮浠") + private Integer payStatus; + + /** 鏀粯鏃堕棿 */ + @Excel(name = "鏀粯鏃堕棿") + private String payTime; + + /** 鏀惰揣浜哄鍚 */ + @Excel(name = "鏀惰揣浜哄鍚") + private String name; + + /** 鏀惰揣浜烘墜鏈哄彿 */ + @Excel(name = "鏀惰揣浜烘墜鏈哄彿") + private String phone; + + /** 鐪佸悕 */ + @Excel(name = "鐪佸悕") + private String provinceName; + + /** 甯傚悕 */ + @Excel(name = "甯傚悕") + private String cityName; + + /** 鍖哄悕 */ + @Excel(name = "鍖哄悕") + private String areaName; + + /** 鏀惰揣浜鸿缁嗗湴鍧 */ + @Excel(name = "鏀惰揣浜鸿缁嗗湴鍧") + private String address; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + + /** 璁㈠崟閲戦 锛堝厓锛 */ + @Excel(name = "璁㈠崟閲戦 ") + private BigDecimal orderPrice; + + /** 浼樻儬閲戦 锛堝厓锛 */ + @Excel(name = "浼樻儬閲戦 ") + private BigDecimal discountPrice; + + /** 鎶垫墸绉垎 */ + @Excel(name = "鎶垫墸绉垎 ") + private BigDecimal deductionScore; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberScore.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberScore.java new file mode 100644 index 0000000000000000000000000000000000000000..986da34c0bc82dcd55db33088fcd8a2a8a03c5db --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberScore.java @@ -0,0 +1,95 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 鐢ㄦ埛绉垎璇︽儏瀵硅薄 tb_member_score + * + * @author ruoyi + * @date 2024-10-31 + */ +@Getter +@Setter +@ToString +public class TbMemberScore extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** ID */ + private Long memberScoreId; + + /** 鐢ㄦ埛ID */ + @Excel(name = "鐢ㄦ埛ID") + private Long memberUserId; + + /** 鍚嶇О */ + @Excel(name = "鍚嶇О") + private String name; + + /** 绉垎 */ + @Excel(name = "绉垎") + private BigDecimal score; + + /** 绫诲瀷锛0-鏃狅紝1-绛惧埌锛2-鎺ㄦ柊浜猴紝3-娑堣垂鑷繑锛4-鍏戞崲娑堣楋級 */ + @Excel(name = "绫诲瀷") + private Integer type; + + /** 鏀跺叆鏀嚭锛0-鏃狅紝1-鏀跺叆锛2-鏀嚭锛 */ + @Excel(name = "鏀跺叆鏀嚭", readConverterExp = "1=-鏀跺叆锛2-鏀嚭") + private Integer incomeExpenses; + + /** 璁㈠崟ID */ + @Excel(name = "璁㈠崟ID") + private Long orderId; + + /** 閲戦 */ + @Excel(name = "閲戦") + private BigDecimal price; + + /** 璇存槑 */ + @Excel(name = "璇存槑") + private String explains; + + /** 涓嬬骇ID */ + @Excel(name = "涓嬬骇ID") + private Long lower; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberSign.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberSign.java new file mode 100644 index 0000000000000000000000000000000000000000..3d79bbf58a6b70f08828b638b3ea7af8a985b5cb --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberSign.java @@ -0,0 +1,83 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 鐢ㄦ埛绛惧埌瀵硅薄 tb_member_sign + * + * @author ruoyi + * @date 2024-10-31 + */ +@Getter +@Setter +@ToString +public class TbMemberSign extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鐢ㄦ埛绛惧埌涓婚敭ID */ + private Long memberSignId; + + /** 鐢ㄦ埛ID */ + @Excel(name = "鐢ㄦ埛ID") + private Long memberUserId; + + /** 绛惧埌骞 */ + @Excel(name = "绛惧埌骞") + private String signYear; + + /** 绛惧埌鏈 */ + @Excel(name = "绛惧埌鏈") + private String signMonth; + + /** 绛惧埌鏃 */ + @Excel(name = "绛惧埌鏃") + private String signDay; + + /** 绛惧埌鏃ユ湡 */ + @Excel(name = "绛惧埌鏃ユ湡") + private String signDate; + + /** 绛惧埌绉垎 */ + @Excel(name = "绛惧埌绉垎") + private BigDecimal signScore; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberSubjectAll.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberSubjectAll.java new file mode 100644 index 0000000000000000000000000000000000000000..35260557f56b2cb18f0a6bbfd9009db008e36dd9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberSubjectAll.java @@ -0,0 +1,99 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 鎴戠殑棰樼洰瀵硅薄 tb_member_subject_all + * + * @author ruoyi + * @date 2024-11-06 + */ +@Getter +@Setter +@ToString +public class TbMemberSubjectAll extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鎴戠殑棰樼洰涓婚敭ID */ + private Long memberSubjectAllId; + + /** 鐢ㄦ埛ID */ + @Excel(name = "鐢ㄦ埛ID") + private Long memberUserId; + + /** 棰樼洰ID */ + @Excel(name = "棰樼洰ID") + private Long examSubjectId; + + /** 棰樼洰绫诲瀷锛1-鍗曢夛紝2-澶氶夛紝3-鍒ゆ柇锛4-璁鸿堪锛 */ + @Excel(name = "棰樼洰绫诲瀷", readConverterExp = "1=-鍗曢夛紝2-澶氶夛紝3-鍒ゆ柇锛4-璁鸿堪") + private Integer subjectType; + + /** 缁冧範绫诲瀷锛1-椤哄簭缁冧範锛2-涓撻」缁冧範锛3-绔犺妭缁冧範锛4-闅忔満缁冧範锛 */ + @Excel(name = "缁冧範绫诲瀷", readConverterExp = "1=-椤哄簭缁冧範锛2-涓撻」缁冧範锛3-绔犺妭缁冧範锛4-闅忔満缁冧範") + private Integer practiceType; + + /** 搴忓彿 */ + @Excel(name = "搴忓彿") + private Long location; + + /** 鎴戠殑绛旀 */ + @Excel(name = "鎴戠殑绛旀") + private String myAnswer; + + /** 绛旀 */ + @Excel(name = "绛旀") + private String answer; + + /** 鍒嗘暟 */ + @Excel(name = "鍒嗘暟") + private BigDecimal score; + + /** 0-鏈洖绛旓紝1-姝g‘锛2-閿欒锛3-璁鸿堪 */ + @Excel(name = "0-鏈洖绛旓紝1-姝g‘锛2-閿欒锛3-璁鸿堪") + private Integer status; + + /** 绛夌骇 */ + @Excel(name = "绛夌骇") + private Integer level; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + + /** 涓撲笟ID */ + private Long majorId; + + /** 棰樺簱鍒嗙被ID */ + private Long subjectWarehouseClassId; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberSubjectCollect.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberSubjectCollect.java new file mode 100644 index 0000000000000000000000000000000000000000..1afbda553cf2822d5476cd61707fc1dec289cdd3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberSubjectCollect.java @@ -0,0 +1,68 @@ +package com.ruoyi.hezhi.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 鎴戠殑鏀惰棌棰樼洰瀵硅薄 tb_member_subject_collect + * + * @author ruoyi + * @date 2024-11-07 + */ +@Getter +@Setter +@ToString +public class TbMemberSubjectCollect extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鎴戠殑棰樼洰涓婚敭ID */ + private Long memberSubjectCollectId; + + /** 鐢ㄦ埛ID */ + @Excel(name = "鐢ㄦ埛ID") + private Long memberUserId; + + /** 棰樼洰ID */ + @Excel(name = "棰樼洰ID") + private Long examSubjectId; + + /** 璇剧▼ID */ + @Excel(name = "璇剧▼ID") + private Long courseId; + + /** 缁冧範绫诲瀷锛1-椤哄簭缁冧範锛2-涓撻」缁冧範锛3-绔犺妭缁冧範锛4-闅忔満缁冧範锛 */ + @Excel(name = "缁冧範绫诲瀷", readConverterExp = "1=-椤哄簭缁冧範锛2-涓撻」缁冧範锛3-绔犺妭缁冧範锛4-闅忔満缁冧範") + private Integer practiceType; + + /** 搴忓彿 */ + @Excel(name = "搴忓彿") + private Long location; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鍒犻櫎鏃堕棿 */ + private Date deleteTime; + + /** 鍒犻櫎浜 */ + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberSubjectWrong.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberSubjectWrong.java new file mode 100644 index 0000000000000000000000000000000000000000..5b00c066c89adb18ad53b5f87fce2802f0f10a38 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbMemberSubjectWrong.java @@ -0,0 +1,81 @@ +package com.ruoyi.hezhi.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 鎴戠殑閿欓瀵硅薄 tb_member_subject_wrong + * + * @author ruoyi + * @date 2024-11-07 + */ +@Getter +@Setter +@ToString +public class TbMemberSubjectWrong extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鎴戠殑棰樼洰涓婚敭ID */ + private Long memberSubjectWrongId; + + /** 鐢ㄦ埛ID */ + @Excel(name = "鐢ㄦ埛ID") + private Long memberUserId; + + /** 棰樼洰ID */ + @Excel(name = "棰樼洰ID") + private Long examSubjectId; + + /** 缁冧範绫诲瀷锛1-椤哄簭缁冧範锛2-涓撻」缁冧範锛3-绔犺妭缁冧範锛4-闅忔満缁冧範锛 */ + @Excel(name = "缁冧範绫诲瀷", readConverterExp = "1=-椤哄簭缁冧範锛2-涓撻」缁冧範锛3-绔犺妭缁冧範锛4-闅忔満缁冧範") + private Integer practiceType; + + /** 搴忓彿 */ + @Excel(name = "搴忓彿") + private Long location; + + /** 鎴戠殑绛旀 */ + @Excel(name = "鎴戠殑绛旀") + private String myAnswer; + + /** 绛旀 */ + @Excel(name = "绛旀") + private String answer; + + /** 鍒嗘暟 */ + @Excel(name = "鍒嗘暟") + private BigDecimal score; + + /** 0-鏈洖绛旓紝1-姝g‘锛2-閿欒锛3-璁鸿堪 */ + @Excel(name = "0-鏈洖绛旓紝1-姝g‘锛2-閿欒锛3-璁鸿堪") + private Integer status; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鍒犻櫎鏃堕棿 */ + private Date deleteTime; + + /** 鍒犻櫎浜 */ + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbNews.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbNews.java new file mode 100644 index 0000000000000000000000000000000000000000..f990ed1a48298b48a5aef94692771ef6c2cfa5ee --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbNews.java @@ -0,0 +1,61 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 鏂伴椈鍜ㄨ瀵硅薄 tb_news + * + * @author ruoyi + * @date 2024-09-14 + */ +@Getter +@Setter +@ToString +public class TbNews extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鏂伴椈id */ + private Long newsId; + + /** 鏍囬 */ + @Excel(name = "鏍囬") + private String title; + + /** 缂╃暐鍥 */ + @Excel(name = "缂╃暐鍥") + private String showImg; + + /** 绠杩 */ + @Excel(name = "绠杩") + private String prospectus; + + /** 鍙戝竷浜 */ + @Excel(name = "鍙戝竷浜") + private String publisher; + + /** 鍙戝竷鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍙戝竷鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date publicationTime; + + /** 鍐呭 */ + private String content; + + /** 鍒犻櫎鏍囪(0-姝e父,1-鍒犻櫎) */ + private Integer delFlag; + + /** 鍒犻櫎鏃堕棿 */ + private Date deleteTime; + + /** 鍒犻櫎浜 */ + private String deleteBy; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbNotice.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbNotice.java new file mode 100644 index 0000000000000000000000000000000000000000..227914dfe90b8d9eaa08215ae4e4e264413962d4 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbNotice.java @@ -0,0 +1,81 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 閫氱煡鍏憡瀵硅薄 tb_notice + * + * @author ruoyi + * @date 2024-09-14 + */ +@Getter +@Setter +@ToString +public class TbNotice extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 閫氱煡鍏憡id */ + private Long noticeId; + + /** 鏍囬 */ + @Excel(name = "鏍囬") + private String title; + + /** 缂╃暐鍥 */ + @Excel(name = "缂╃暐鍥") + private String showImg; + + /** 鍙戝竷浜 */ + @Excel(name = "鍙戝竷浜") + private String publisher; + + /** 鍙戝竷鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm") + @Excel(name = "鍙戝竷鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm") + private Date publicationTime; + + /** 鍐呭 */ + private String content; + + /** 鍒犻櫎鏍囪(0-姝e父,1-鍒犻櫎) */ + private Integer delFlag; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍙戝竷浜篒D锛0-绠$悊鍛橈級 */ + private Long publisherId; + + /** 閫氱煡绫诲瀷锛0-閫氱煡鍏憡锛1-涓撻涓撴爮锛2-鏀跨瓥瑙h锛3-濯掍綋鑱氱劍锛4-鏁欒偛璇勮锛5-浜ф暀铻嶅悎锛 */ + private Integer type; + + /** 鏍规嵁type浜岀骇绫诲瀷锛坱ype=1锛1-涓撻涓撴爮1,2-涓撻涓撴爮2,3-涓撻涓撴爮3锛 */ + private Integer typeTwo; + + /** 娴忚閲 */ + private Integer viewsNum; + + /** 绠杩 */ + private String prospectus; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + private Integer status; + + /** 鏄惁閲嶈锛0-鍚︼紝1-鏄級 */ + private Integer isMain; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbPostAddress.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbPostAddress.java new file mode 100644 index 0000000000000000000000000000000000000000..0b8a499b176af4d946712703446c53a9b61c9667 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbPostAddress.java @@ -0,0 +1,114 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 閭瘎鍦板潃瀵硅薄 tb_post_address + * + * @author ruoyi + * @date 2024-11-20 + */ +@Getter +@Setter +@ToString +public class TbPostAddress extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 閭瘎鍦板潃涓婚敭ID */ + private Long postAddressId; + + /** 鐢ㄦ埛ID */ + @Excel(name = "鐢ㄦ埛ID") + private Long memberUserId; + + /** 濮撳悕 */ + @Excel(name = "濮撳悕") + private String name; + + /** 鎵嬫満鍙 */ + @Excel(name = "鎵嬫満鍙") + private String phone; + + /** 鐪両D */ + @Excel(name = "鐪両D") + private Long provinceId; + + /** 甯侷D */ + @Excel(name = "甯侷D") + private Long cityId; + + /** 鍖猴紙鍘匡級ID */ + @Excel(name = "鍖", readConverterExp = "鍘=") + private Long areaId; + + /** 鐪佸悕 */ + @Excel(name = "鐪佸悕") + private String provinceName; + + /** 甯傚悕 */ + @Excel(name = "甯傚悕") + private String cityName; + + /** 鍖哄悕 */ + @Excel(name = "鍖哄悕") + private String areaName; + + /** 璇︾粏鍦板潃 */ + @Excel(name = "璇︾粏鍦板潃") + private String address; + + /** 鐩稿叧璧勬簮ID */ + @Excel(name = "鐩稿叧璧勬簮ID") + private Long dataId; + + /** 绫诲瀷锛0-鍏ㄩ儴锛1-璇佷功锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴锛1-璇佷功") + private Integer type; + + /** 瀹℃牳鐘舵侊紙0-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷锛 */ + @Excel(name = "瀹℃牳鐘舵", readConverterExp = "0=-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷") + private Integer examineStatus; + + /** 瀹℃牳鍙嶉 */ + @Excel(name = "瀹℃牳鍙嶉") + private String examineFeedback; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbRegion.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbRegion.java new file mode 100644 index 0000000000000000000000000000000000000000..7053e95a1ca4894eb685f774f3e6c22ea8b3715b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbRegion.java @@ -0,0 +1,87 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.TreeEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; +import java.util.List; + +/** + * 琛屾斂鍖哄煙瀵硅薄 tb_region + * + * @author ruoyi + * @date 2024-10-21 + */ +@Getter +@Setter +@ToString +public class TbRegion extends TreeEntity +{ + private static final long serialVersionUID = 1L; + + /** 琛屾斂鍖哄煙涓婚敭ID */ + private Long id; + + /** 鐖秈d */ + @Excel(name = "鐖秈d") + private Long pid; + + /** 绠绉 */ + @Excel(name = "绠绉") + private String shortname; + + /** 鍚嶇О */ + @Excel(name = "鍚嶇О") + private String name; + + /** 鍏ㄧО */ + @Excel(name = "鍏ㄧО") + private String mergerName; + + /** 灞傜骇 0 1 2 鐪佸競鍖哄幙 */ + @Excel(name = "灞傜骇 0 1 2 鐪佸競鍖哄幙") + private Integer type; + + /** 鎷奸煶 */ + @Excel(name = "鎷奸煶") + private String pinyin; + + /** 闀块斿尯鍙 */ + @Excel(name = "闀块斿尯鍙") + private String phoneCode; + + /** 閭紪 */ + @Excel(name = "閭紪") + private String code; + + /** 棣栧瓧姣 */ + @Excel(name = "棣栧瓧姣") + private String first; + + /** 缁忓害 */ + @Excel(name = "缁忓害") + private String lng; + + /** 绾害 */ + @Excel(name = "绾害") + private String lat; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + + private List childrenList; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbSmsCode.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbSmsCode.java new file mode 100644 index 0000000000000000000000000000000000000000..73c51779758b2fce3cfd64bb47e75792f2a22ca2 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbSmsCode.java @@ -0,0 +1,44 @@ +package com.ruoyi.hezhi.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +/** + * 鐭俊楠岃瘉鐮佸璞 tb_sms_code + * + * @author ruoyi + * @date 2024-11-06 + */ +@Getter +@Setter +@ToString +public class TbSmsCode extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 楠岃瘉鐮両D */ + private Long smsCodeId; + + /** 鎵嬫満鍙 */ + @Excel(name = "鎵嬫満鍙") + private String phone; + + /** 楠岃瘉鐮 */ + @Excel(name = "楠岃瘉鐮") + private String smsCode; + + /** 绫诲瀷锛0-榛樿锛1-鎵嬫満鍙风櫥褰曪紝2-淇敼涓汉璧勬枡锛3-鑰冭瘯鎶ュ悕锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-榛樿锛1-鎵嬫満鍙风櫥褰曪紝2-淇敼涓汉璧勬枡锛3-鑰冭瘯鎶ュ悕") + private Integer type; + + /** 鐘舵侊紙0-鏈娇鐢紝1-宸蹭娇鐢級 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏈娇鐢紝1-宸蹭娇鐢") + private Integer status; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbStudent.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbStudent.java new file mode 100644 index 0000000000000000000000000000000000000000..ffc6decbf7b90acb00c590ce88fff5d07770daf5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbStudent.java @@ -0,0 +1,199 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotBlank; +import java.util.Date; + +/** + * 瀛﹀憳瀵硅薄 tb_student + * + * @author ruoyi + * @date 2024-10-21 + */ +@Getter +@Setter +@ToString +public class TbStudent extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 瀛﹀憳涓婚敭ID */ + private Long studentId; + + /** 灏忕▼搴弌penId */ + private String openId; + + /** 鍏紬鍙穙penId */ + private String gzhOpenId; + + /** 寮鏀惧钩鍙皍nionId */ + private String unionId; + + /** 瀛﹀憳缂栧彿 */ + @Excel(name = "瀛﹀憳缂栧彿") + private String studentNumber; + + /** 鐧诲綍token */ + private String loginToken; + + /** 鐧诲綍token鍔犲瘑 */ + private String loginTokenEncrypt; + + /** 閭璇蜂汉ID */ + private Long parentId; + + /** 閭璇蜂汉缂栧彿 */ + private String parentNumber; + + /** 澶村儚 */ + @Excel(name = "澶村儚") + private String headPortrait; + + /** 鏄电О */ + @Excel(name = "鏄电О") + private String nickName; + + /** 濮撳悕 */ + @Excel(name = "濮撳悕") + private String studentName; + + /** 鎬у埆锛0-鐢凤紝1-濂筹紝2-鏈煡锛 */ + @Excel(name = "鎬у埆", readConverterExp = "0=鐢,1=濂,2=鏈煡") + private Integer sex; + + /** 鍑虹敓鏃ユ湡 */ + @Excel(name = "鍑虹敓鏃ユ湡") + private String birthday; + + /** 鐢佃瘽/鎵嬫満 */ + @Excel(name = "鐢佃瘽/鎵嬫満") + @NotBlank(message = "缂哄皯鐢佃瘽/鎵嬫満") + private String phone; + + /** 韬唤璇佸彿 */ + @Excel(name = "韬唤璇佸彿") + private String identityCard; + + /** 韬唤璇佸浗寰介潰锛堟闈級 */ + @Excel(name = "韬唤璇佸浗寰介潰") + private String identityCardBadge; + + /** 韬唤璇佷汉鍍忛潰锛堝弽闈級 */ + @Excel(name = "韬唤璇佷汉鍍忛潰") + private String identityCardPortrait; + + /** 姣曚笟璇佷功锛堝涓敤鑻辨枃閫楀彿闅斿紑锛 */ + @Excel(name = "姣曚笟璇佷功") + private String graduationCertificate; + + /** 瀛﹀巻锛0-鏃狅紝1-灏忓锛2-鍒濅腑锛3-楂樹腑锛4-涓笓锛5-涓撶锛6-鏈锛7-鐮旂┒鐢燂級 */ + @Excel(name = "瀛﹀巻") + private String education; + + /** 姣曚笟闄㈡牎ID */ + private Long graduationSchoolId; + + /** 姣曚笟闄㈡牎 */ + @Excel(name = "姣曚笟闄㈡牎") + private String graduationSchool; + + /** 姣曚笟鏃堕棿 */ + @Excel(name = "姣曚笟鏃堕棿") + private String graduationTime; + + /** 鐧诲綍绫诲瀷锛0-榛樿锛1-鎵嬫満鍙凤紝2-寰俊锛3-韬唤璇佸彿锛 */ + private Integer loginType; + + /** openId */ + private String openid; + + /** 瀵嗙爜 */ + private String password; + + /** 瀵嗙爜鏈姞瀵 */ + private String passwordUnencrypted; + + /** 閭璇风爜鍥 */ + private String invitationCodeImg; + + /** 绫诲瀷 */ + private Integer type; + + /** 甯侷D */ + private Long cityId; + + /** 鐪両D */ + private Long provinceId; + + /** 鍖猴紙鍘匡級ID */ + private Long areaId; + + /** 鐪佸悕 */ + private String provinceName; + + /** 甯傚悕 */ + private String cityName; + + /** 鍖哄悕 */ + private String areaName; + + /** 璇︾粏鍦板潃 */ + private String address; + + /** 瀹℃牳鐘舵侊紙0-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷 3-鏈璇侊級 */ + @Excel(name = "瀹℃牳鐘舵", readConverterExp = "0=寰呭鏍,1=瀹℃牳閫氳繃,2=瀹℃牳鎷掔粷,3=鏈璇") + private Integer examineStatus; + + /** 瀹℃牳鍙嶉 */ + private String examineFeedback; + + /** 鍐荤粨鐘舵侊紙0-姝e父锛1-鍐荤粨锛 */ + @Excel(name = "鍐荤粨鐘舵", readConverterExp = "0=姝e父,1=鍐荤粨") + private Integer frozenStatus; + + /** 鍐荤粨鐘舵佸弽棣 */ + private Integer frozenFeedback; + + /** 鎺掑簭 */ + private Integer sort; + + /** 澶囨敞 */ + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + private Date deleteTime; + + /** 鍒犻櫎浜 */ + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + + /** 鑰佸笀ID */ + private Long teacherId; + + //鑰佸瘑鐮 + private String oldPassword; + + /** 鍒涘缓鏃堕棿 */ + @Excel(name = "鍒涘缓鏃堕棿",dateFormat = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbStudyCenter.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbStudyCenter.java new file mode 100644 index 0000000000000000000000000000000000000000..d4653fe3a6747dae17d2dd30cd0b5e54affcf751 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbStudyCenter.java @@ -0,0 +1,200 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; +import java.util.List; + +/** + * 瀛︿範涓績瀵硅薄 tb_study_center + * + * @author ruoyi + * @date 2024-10-21 + */ +@Getter +@Setter +@ToString +public class TbStudyCenter extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 瀛︿範涓績涓婚敭ID */ + private Long studyCenterId; + + /** 绯荤粺鐢ㄦ埛ID */ + @Excel(name = "绯荤粺鐢ㄦ埛ID") + private Long sysUserId; + + /** 瀛︿範涓績鍒嗙被ID */ + @Excel(name = "瀛︿範涓績鍒嗙被ID") + private Long studyCenterClassId; + + /** 缁х画鏁欒偛鍒嗙被ID */ + @Excel(name = "缁х画鏁欒偛鍒嗙被ID") + private Long continuingEducationClassId; + + /** 瀛︿範涓績缂栧彿 */ + @Excel(name = "瀛︿範涓績缂栧彿") + private String studyCenterNumber; + + /** 瀛︿範涓績logo */ + @Excel(name = "瀛︿範涓績logo") + private String studyCenterLogo; + + /** 瀛︿範涓績鑳屾櫙 */ + @Excel(name = "瀛︿範涓績鑳屾櫙") + private String studyCenterBackground; + + /** 瀛︽牎鍚 */ + @Excel(name = "瀛︽牎鍚") + private String schoolName; + + /** 瀛︿範涓績鍚 */ + @Excel(name = "瀛︿範涓績鍚") + private String studyCenterName; + + /** 瀛︿範涓績鏍囬 */ + @Excel(name = "瀛︿範涓績鏍囬") + private String studyCenterTitle; + + /** 瀛︿範涓績鎻忚堪 */ + @Excel(name = "瀛︿範涓績鎻忚堪") + private String studyCenterDescribe; + + /** 瀛︿範涓績鏍囩 */ + @Excel(name = "瀛︿範涓績鏍囩") + private String studyCenterTag; + + /** 瀛︿範涓績绠浠 */ + @Excel(name = "瀛︿範涓績绠浠") + private String studyCenterIntroduce; + + /** 鎺ㄨ崘璇剧▼ */ + @Excel(name = "鎺ㄨ崘璇剧▼") + private String recommendCourse; + + /** 璐熻矗浜 */ + @Excel(name = "璐熻矗浜") + private String superintendent; + + /** 鐢佃瘽/鎵嬫満 */ + @Excel(name = "鐢佃瘽/鎵嬫満") + private String phone; + + /** 浼佷笟鍚嶇О */ + @Excel(name = "浼佷笟鍚嶇О") + private String enterpriseName; + + /** 钀ヤ笟鎵х収淇$敤浠g爜 */ + @Excel(name = "钀ヤ笟鎵х収淇$敤浠g爜") + private String businessLicenseCreditCode; + + /** 钀ヤ笟鎵х収鍥撅紙澶氫釜鐢ㄨ嫳鏂囬楀彿闅斿紑锛 */ + @Excel(name = "钀ヤ笟鎵х収鍥") + private String businessLicenseImg; + + /** 鐪両D */ + @Excel(name = "鐪両D") + private Long provinceId; + + /** 甯侷D */ + @Excel(name = "甯侷D") + private Long cityId; + + /** 鍖猴紙鍘匡級ID */ + @Excel(name = "鍖", readConverterExp = "鍘=") + private Long areaId; + + /** 鐪佸悕 */ + @Excel(name = "鐪佸悕") + private String provinceName; + + /** 甯傚悕 */ + @Excel(name = "甯傚悕") + private String cityName; + + /** 鍖哄悕 */ + @Excel(name = "鍖哄悕") + private String areaName; + + /** 璇︾粏鍦板潃 */ + @Excel(name = "璇︾粏鍦板潃") + private String address; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 瀹℃牳鐘舵侊紙0-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷锛 */ + @Excel(name = "瀹℃牳鐘舵", readConverterExp = "0=-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷") + private Integer examineStatus; + + /** 瀹℃牳鍙嶉 */ + @Excel(name = "瀹℃牳鍙嶉") + private String examineFeedback; + + /** 鍐荤粨鐘舵侊紙0-姝e父锛1-鍐荤粨锛 */ + @Excel(name = "鍐荤粨鐘舵", readConverterExp = "0=-姝e父锛1-鍐荤粨") + private Integer frozenStatus; + + /** 鍐荤粨鐘舵佸弽棣 */ + @Excel(name = "鍐荤粨鐘舵佸弽棣") + private Integer frozenFeedback; + + /** 鎺ㄨ崘锛0-涓嶆帹鑽愶紝1-鎺ㄨ崘锛 */ + @Excel(name = "鎺ㄨ崘", readConverterExp = "0=-涓嶆帹鑽愶紝1-鎺ㄨ崘") + private Integer isRecommend; + + /** 鑰佸笀鍚嶇О */ + @Excel(name = "鑰佸笀鍚嶇О") + private String teacherName; + + /** 鑰佸笀鐢佃瘽 */ + @Excel(name = "鑰佸笀鐢佃瘽") + private String teacherPhone; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍙戝竷鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date publicationTime; + + /** 鍙戝竷浜 */ + @Excel(name = "鍙戝竷浜") + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + + /** 鑰冭瘯璇剧▼鍒楄〃 */ + public List examCourseList; + + /** 鏁欏笀鍒楄〃 */ + public List studyCenterTeacherList; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbStudyCenterClass.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbStudyCenterClass.java new file mode 100644 index 0000000000000000000000000000000000000000..140e60ee1e09dfea9276d7e38be2bde609eddc0f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbStudyCenterClass.java @@ -0,0 +1,86 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 瀛︿範涓績鍒嗙被瀵硅薄 tb_study_center_class + * + * @author ruoyi + * @date 2024-10-23 + */ +@Getter +@Setter +@ToString +public class TbStudyCenterClass extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 瀛︿範涓績鍒嗙被涓婚敭ID */ + private Long studyCenterClassId; + + /** 鐖剁骇ID */ + @Excel(name = "鐖剁骇ID") + private Long pid; + + /** 灞傜骇 0 1 2 */ + @Excel(name = "灞傜骇 0 1 2 ") + private Integer level; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 瀛︿範涓績鍒嗙被鍚嶇О */ + @Excel(name = "瀛︿範涓績鍒嗙被鍚嶇О") + private String name; + + /** logo1 */ + @Excel(name = "logo1") + private String logoOne; + + /** logo2 */ + @Excel(name = "logo2") + private String logoTwo; + + /** 鎺ㄨ崘锛0-鍚︼紝1-鎺ㄨ崘锛 */ + @Excel(name = "鎺ㄨ崘", readConverterExp = "0=-鍚︼紝1-鎺ㄨ崘") + private Integer isRecommend; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbStudyCenterFile.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbStudyCenterFile.java new file mode 100644 index 0000000000000000000000000000000000000000..672ed6c70dca0319725221ee8229db9745f3b017 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbStudyCenterFile.java @@ -0,0 +1,94 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 瀛︿範涓績鏂囦欢瀵硅薄 tb_study_center_file + * + * @author ruoyi + * @date 2024-11-18 + */ +@Getter +@Setter +@ToString +public class TbStudyCenterFile extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 瀛︿範涓績鏂囦欢涓婚敭ID */ + private Long studyCenterFileId; + + /** 瀛︿範涓績ID */ + @Excel(name = "瀛︿範涓績ID") + private Long studyCenterId; + + /** 鏂囦欢璺緞 */ + @Excel(name = "鏂囦欢璺緞") + private String fileUrl; + + /** 鏂囦欢绫诲瀷锛0-鏃狅紝1-鍥剧墖锛2-瑙嗛锛 */ + @Excel(name = "鏂囦欢绫诲瀷", readConverterExp = "0=-鏃狅紝1-鍥剧墖锛2-瑙嗛") + private Integer fileType; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 瀹℃牳鐘舵侊紙0-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷锛 */ + @Excel(name = "瀹℃牳鐘舵", readConverterExp = "0=-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷") + private Integer examineStatus; + + /** 瀹℃牳鍙嶉 */ + @Excel(name = "瀹℃牳鍙嶉") + private String examineFeedback; + + /** 鍐荤粨鐘舵侊紙0-姝e父锛1-鍐荤粨锛 */ + @Excel(name = "鍐荤粨鐘舵", readConverterExp = "0=-姝e父锛1-鍐荤粨") + private Integer frozenStatus; + + /** 鍐荤粨鐘舵佸弽棣 */ + @Excel(name = "鍐荤粨鐘舵佸弽棣") + private Integer frozenFeedback; + + /** 鎺ㄨ崘锛0-涓嶆帹鑽愶紝1-鎺ㄨ崘锛 */ + @Excel(name = "鎺ㄨ崘", readConverterExp = "0=-涓嶆帹鑽愶紝1-鎺ㄨ崘") + private Integer isRecommend; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbStudyCenterTeacher.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbStudyCenterTeacher.java new file mode 100644 index 0000000000000000000000000000000000000000..9cd886d82399990bbf736d4e76e7a997336c3e50 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbStudyCenterTeacher.java @@ -0,0 +1,59 @@ +package com.ruoyi.hezhi.domain; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 瀛︿範涓績鏁欏笀瀵硅薄 tb_study_center_teacher + * + * @author ruoyi + * @date 2025-01-09 + */ +@Setter +@Getter +@ToString +public class TbStudyCenterTeacher extends BaseEntity +{ + + private static final long serialVersionUID = 1L; + + /** 瀛︿範涓績鏁欏笀ID */ + @Excel(name = "瀛︿範涓績鏁欏笀ID") + private Long studyCenterTeacherId; + + /** 瀛︿範涓績ID */ + @Excel(name = "瀛︿範涓績ID") + private Long studyCenterId; + + /** 鏁欏笀鍚嶇О */ + @Excel(name = "鏁欏笀鍚嶇О") + private String teacherName; + + /** 鏁欏笀鐢佃瘽 */ + @Excel(name = "鏁欏笀鐢佃瘽") + private String teacherPhone; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎鑰 */ + @Excel(name = "鍒犻櫎鑰") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + @Excel(name = "鍒犻櫎鏍囪", readConverterExp = "0=-姝e父锛1-鍒犻櫎") + private Integer delFlag; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbSubjectWarehouseClass.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbSubjectWarehouseClass.java new file mode 100644 index 0000000000000000000000000000000000000000..6399c634ea513abdccc5879cb416c69810b2bda1 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbSubjectWarehouseClass.java @@ -0,0 +1,163 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * 棰樺簱鍒嗙被瀵硅薄 tb_subject_warehouse_class + * + * @author ruoyi + * @date 2024-11-06 + */ +@Getter +@Setter +@ToString +public class TbSubjectWarehouseClass extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 棰樺簱鍒嗙被涓婚敭ID */ + private Long subjectWarehouseClassId; + + /** 棰樺簱鍒嗙被缂栧彿 */ + @Excel(name = "棰樺簱鍒嗙被缂栧彿") + private String subjectWarehouseClassNo; + + /** 鍒嗙被ID */ + @Excel(name = "鍒嗙被ID") + private Long classId; + + /** 鍒嗙被鍚 */ + @Excel(name = "鍒嗙被鍚") + private String className; + + /** 涓撲笟ID */ + @Excel(name = "涓撲笟ID") + private Long majorId; + + /** 涓撲笟鍚 */ + @Excel(name = "涓撲笟鍚") + private String majorName; + + /** 棰樺簱鍒嗙被 */ + @Excel(name = "棰樺簱鍒嗙被") + private String name; + + /** logo */ + @Excel(name = "logo") + private String logo; + + /** 鏂囦欢 */ + @Excel(name = "鏂囦欢") + private String fileUrl; + + /** 浠嬬粛 */ + @Excel(name = "浠嬬粛") + private String introduce; + + /** 鎻愮ず */ + @Excel(name = "鎻愮ず") + private String tips; + + /** 绫诲瀷锛0-鍏ㄩ儴锛 */ + @Excel(name = "绫诲瀷", readConverterExp = "0=-鍏ㄩ儴") + private Integer type; + + /** 瀹℃牳鐘舵侊紙0-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷锛 */ + @Excel(name = "瀹℃牳鐘舵", readConverterExp = "0=-寰呭鏍革紝1-瀹℃牳閫氳繃锛2-瀹℃牳鎷掔粷") + private Integer examineStatus; + + /** 瀹℃牳鍙嶉 */ + @Excel(name = "瀹℃牳鍙嶉") + private String examineFeedback; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + private Date publicationTime; + + /** 鍙戝竷浜 */ + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + + /** 妯℃嫙鑰冭瘯鍗曢夐鏁 */ + @Excel(name = "妯℃嫙鑰冭瘯鍗曢夐鏁") + private Integer singleSelectNum; + + /** 妯℃嫙鑰冭瘯鍗曢夐姣忛X鍒 */ + @Excel(name = "妯℃嫙鑰冭瘯鍗曢夐姣忛X鍒") + private BigDecimal singleSelectScore; + + /** 妯℃嫙鑰冭瘯澶氶夐鏁 */ + @Excel(name = "妯℃嫙鑰冭瘯澶氶夐鏁") + private Integer manySelectNum; + + /** 妯℃嫙鑰冭瘯澶氶夐姣忛X鍒 */ + @Excel(name = "妯℃嫙鑰冭瘯澶氶夐姣忛X鍒") + private BigDecimal manySelectScore; + + /** 妯℃嫙鑰冭瘯鍒ゆ柇棰樻暟 */ + @Excel(name = "妯℃嫙鑰冭瘯鍒ゆ柇棰樻暟") + private Integer judgeNum; + + /** 妯℃嫙鑰冭瘯鍒ゆ柇棰樻瘡棰榅鍒 */ + @Excel(name = "妯℃嫙鑰冭瘯鍒ゆ柇棰樻瘡棰榅鍒") + private BigDecimal judgeScore; + + /** 妯℃嫙鑰冭瘯璁鸿堪棰樻暟 */ + @Excel(name = "妯℃嫙鑰冭瘯璁鸿堪棰樻暟") + private Integer discussNum; + + /** 妯℃嫙鑰冭瘯璁鸿堪棰樻瘡棰榅鍒 */ + @Excel(name = "妯℃嫙鑰冭瘯璁鸿堪棰樻瘡棰榅鍒") + private BigDecimal discussScore; + + /** 妯℃嫙鑰冭瘯鎬诲垎 */ + @Excel(name = "妯℃嫙鑰冭瘯鎬诲垎") + private BigDecimal totalScore; + + /** 妯℃嫙鍙婃牸鍒 */ + @Excel(name = "妯℃嫙鍙婃牸鍒") + private BigDecimal passScore; + + /** 妯℃嫙鑰冭瘯鏃堕棿锛堝垎閽燂級 */ + @Excel(name = "妯℃嫙鑰冭瘯鏃堕棿") + private Integer simulationExamMinute; + + /** 妯℃嫙鑰冭瘯鐘舵侊紙0-鍏抽棴锛1-寮鍚級 */ + @Excel(name = "妯℃嫙鑰冭瘯鐘舵", readConverterExp = "0=-鍏抽棴锛1-寮鍚") + private Integer simulationStatus; + + /** 鑰冭瘯璇剧▼鍒楄〃 */ + public List examCourseList; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbTeacher.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbTeacher.java new file mode 100644 index 0000000000000000000000000000000000000000..6968c51814432e2639852104c8d41da0e2e1ea06 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbTeacher.java @@ -0,0 +1,76 @@ +package com.ruoyi.hezhi.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 鏁欏笀瀵硅薄 tb_teacher + * + * @author ruoyi + * @date 2024-09-14 + */ +@Getter +@Setter +@ToString +public class TbTeacher extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鏁欏笀id */ + private Long teacherId; + + /** 濮撳悕 */ + @Excel(name = "濮撳悕") + private String teacherName; + + + /** 鐢佃瘽 */ + @Excel(name = "鎵嬫満鍙") + private String teacherPhone; + + /** 澶村儚 */ + @Excel(name = "澶村儚") + private String idImg; + + /** 鍏ㄨ韩鐓 */ + @Excel(name = "鍏ㄨ韩鐓") + private String wholeImg; + + /** 姣曚笟闄㈡牎 */ + @Excel(name = "瀛︿範涓績") + private String collegeName; + + /** 鑱岀О */ + @Excel(name = "鑱岀О") + private String teacherTitle; + + /** 涓昏璇剧▼绫诲瀷id */ +// @Excel(name = "涓昏璇剧▼绫诲瀷id") + private Long teacherTypeId; + + /** 绠杩 */ + @Excel(name = "绠杩") + private String prospectus; + + /** 缁忓巻 */ + private String content; + + /** 鍒犻櫎鏍囪(0-姝e父,1-鍒犻櫎) */ + private Integer delFlag; + + /** 鍒犻櫎鏃堕棿 */ + private Date deleteTime; + + /** 鍒犻櫎浜 */ + private String deleteBy; + + + //韬唤璇佸彿 + private String identityCard; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbTeacherAuthentication.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbTeacherAuthentication.java new file mode 100644 index 0000000000000000000000000000000000000000..4a516af7a3b137af91da833188cdee8c9a37b844 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbTeacherAuthentication.java @@ -0,0 +1,108 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 鍚嶅笀璁よ瘉瀵硅薄 tb_teacher_authentication + * + * @author ruoyi + * @date 2024-12-13 + */ +@Getter +@Setter +@ToString +public class TbTeacherAuthentication extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鏁欏笀璁よ瘉ID */ +// @Excel(name = "鏁欏笀璁よ瘉ID") + private Long teacherAuthenticationId; + + /** 鐢ㄦ埛ID */ +// @Excel(name = "鐢ㄦ埛ID") + private Long memberUserId; + + /** 濮撳悕 */ + @Excel(name = "濮撳悕") + private String name; + + /** 鎬у埆锛0鐢 1濂筹級 */ + @Excel(name = "鎬у埆", readConverterExp = "0=鐢,1=濂") + private Integer sex; + + /** 鐢熸棩 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鐢熸棩", width = 30, dateFormat = "yyyy-MM-dd") + private Date birth; + + /** 鐢佃瘽 */ + @Excel(name = "鐢佃瘽") + private String phone; + + /** 韬唤璇佹闈 */ + @Excel(name = "韬唤璇佸彿") + private String identityCard; + + /** 韬唤璇佹闈 */ + @Excel(name = "韬唤璇佹闈") + private String idCardFront; + + /** 韬唤璇佸弽闈 */ + @Excel(name = "韬唤璇佸弽闈") + private String idCardBack; + + /** 姣曚笟璇佷功 */ + @Excel(name = "姣曚笟璇佷功") + private String graduationCertificate; + + /** 鐮旂┒鎴愭灉 */ + @Excel(name = "鐮旂┒鎴愭灉") + private String researchFindings; + + /** 鑽h獕璇佷功 */ + @Excel(name = "鑽h獕璇佷功") + private String certificateUrl; + + /** 鐘舵侊紙0寰呭鏍 1瀹℃牳閫氳繃 2瀹℃牳椹冲洖锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=寰呭鏍,1=瀹℃牳閫氳繃,2=瀹℃牳椹冲洖") + private Integer status; + + /** 椹冲洖鍘熷洜 */ + @Excel(name = "椹冲洖鍘熷洜") + private String refuseRemark; + + /** 鍒涘缓鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "鍒涘缓鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date createTime; + + /** 鏇存柊鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") +// @Excel(name = "鏇存柊鏃堕棿") + private Date updateTime; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒涘缓鑰 */ + private String createBy; + + /** 鏇存柊鑰 */ + private String updateBy; + + /** 鍒犻櫎鑰 */ + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0姝e父 1鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbTeacherCourse.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbTeacherCourse.java new file mode 100644 index 0000000000000000000000000000000000000000..a1814da595f3b47261fa8f6f55f492c75a87dd0c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbTeacherCourse.java @@ -0,0 +1,79 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 鑰佸笀璇剧▼鍏宠仈瀵硅薄 tb_teacher_course + * + * @author ruoyi + * @date 2024-09-14 + */ +@Getter +@Setter +@ToString +public class TbTeacherCourse extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鑰佸笀璇剧▼鍏宠仈涓婚敭ID */ + private Long teacherCourseId; + + /** 鑰佸笀ID */ + @Excel(name = "鑰佸笀ID") + private Long teacherId; + + /** 璇剧▼ID */ + @Excel(name = "璇剧▼ID") + private Long courseId; + + /** 鏄惁涓昏锛0-鍚︼紝1-鏄級 */ + @Excel(name = "鏄惁涓昏", readConverterExp = "0=鍚,1=鏄") + private Integer isSpeak; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍙戝竷鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date publicationTime; + + /** 鍙戝竷浜 */ + @Excel(name = "鍙戝竷浜") + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + + /** 鑰佸笀濮撳悕 */ + private String teacherName; + + /** 鑰佸笀澶村儚 */ + private String teacherImage; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbTrends.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbTrends.java new file mode 100644 index 0000000000000000000000000000000000000000..1c1784d9dacf876d9c19ee05689979d5098972aa --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbTrends.java @@ -0,0 +1,54 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 闄㈠唴鍔ㄦ佸璞 tb_trends + * + * @author ruoyi + * @date 2024-09-14 + */ +@Getter +@Setter +@ToString +public class TbTrends extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鍔ㄦ乮d */ + private Long trendsId; + + /** 鏍囬 */ + @Excel(name = "鏍囬") + private String title; + + /** 鍙戝竷浜 */ + @Excel(name = "鍙戝竷浜") + private String publisher; + + /** 鍙戝竷鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍙戝竷鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date publicationTime; + + /** 鍐呭 */ + @Excel(name = "鍐呭") + private String content; + + /** 鍒犻櫎鏍囪(0-姝e父,1-鍒犻櫎) */ + private Integer delFlag; + + /** 鍒犻櫎鏃堕棿 */ + private Date deleteTime; + + /** 鍒犻櫎浜 */ + private String deleteBy; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbTypeCourse.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbTypeCourse.java new file mode 100644 index 0000000000000000000000000000000000000000..bedaaf02295f33b65f8b9721f51f4cbcb64a41db --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/TbTypeCourse.java @@ -0,0 +1,69 @@ +package com.ruoyi.hezhi.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +/** + * 绫诲瀷璇剧▼鍏宠仈瀵硅薄 tb_type_course + * + * @author ruoyi + * @date 2024-09-19 + */ +@Getter +@Setter +@ToString +public class TbTypeCourse extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 绫诲瀷璇剧▼鍏宠仈涓婚敭ID */ + private Long typeCourseId; + + /** 绫诲瀷ID */ + @Excel(name = "绫诲瀷ID") + private Long caseTypeId; + + /** 璇剧▼ID */ + @Excel(name = "璇剧▼ID") + private Long courseId; + + /** 澶囨敞 */ + @Excel(name = "澶囨敞") + private String remarks; + + /** 鎺掑簭 */ + @Excel(name = "鎺掑簭") + private Integer sort; + + /** 鐘舵侊紙0-鏄剧ず锛1-闅愯棌锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=-鏄剧ず锛1-闅愯棌") + private Integer status; + + /** 鍙戝竷鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍙戝竷鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date publicationTime; + + /** 鍙戝竷浜 */ + @Excel(name = "鍙戝竷浜") + private String publisher; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鍒犻櫎鏍囪锛0-姝e父锛1-鍒犻櫎锛 */ + private Integer delFlag; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/BannerDTO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/BannerDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..5b2bc277d2cebd9981b1e0cc1f7fbfb4b349625d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/BannerDTO.java @@ -0,0 +1,21 @@ +package com.ruoyi.hezhi.domain.dto; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 杞挱鍥惧璞 tb_banner + * + * @author CC + * @date 2024-03-12 + */ +@Data +public class BannerDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** PC棣栭〉绫诲瀷锛0-棣栭〉锛1-閫氱煡鍏憡锛2-鑱屼笟鏁欒偛锛3-缁х画鏁欒偛锛4-鍦ㄧ嚎棰樺簱锛5-璇剧▼甯堣祫锛6-璇勪环鏈烘瀯锛7-瀛︿範涓績锛8-浜ф暀铻嶅悎锛9-鏁板瓧鏁欒偛澶т細*/ + private String type; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/ConferenceRegistrationDTO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/ConferenceRegistrationDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..d68939a2cde836fa36aee5dd713f029b59e58530 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/ConferenceRegistrationDTO.java @@ -0,0 +1,105 @@ +package com.ruoyi.hezhi.domain.dto; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 鍙備細鎶ュ悕瀵硅薄 tb_conference_registration + * + * @author ruoyi + * @date 2024-10-28 + */ +@Getter +@Setter +@ToString +public class ConferenceRegistrationDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** 鍙備細鎶ュ悕 */ + public interface conferenceRegistration{} + + /** 鍙備細鎶ュ悕涓婚敭ID */ + private Long conferenceRegistrationId; + + /** 鐢ㄦ埛ID */ + @NotNull(message = "璇峰厛鐧诲綍", groups = {conferenceRegistration.class}) + private Long memberUserId; + + /** 浼氳閫氱煡ID */ + @NotNull(message = "缂哄皯浼氳閫氱煡ID", groups = {conferenceRegistration.class}) + private Long conferenceNoticeId; + + /** 濮撳悕 */ + @NotBlank(message = "缂哄皯濮撳悕", groups = {conferenceRegistration.class}) + private String name; + + /** 鎵嬫満鍙 */ + @NotBlank(message = "缂哄皯鎵嬫満鍙", groups = {conferenceRegistration.class}) + private String phone; + + /** 璇佷欢绫诲瀷锛0-韬唤璇侊紝1-鎶ょ収锛 */ + @NotBlank(message = "缂哄皯璇佷欢绫诲瀷", groups = {conferenceRegistration.class}) + private String documentType; + + /** 璇佷欢鍙 */ + @NotBlank(message = "缂哄皯璇佷欢鍙", groups = {conferenceRegistration.class}) + private String documentNumber; + + /** 甯哥敤閭 */ +// @NotBlank(message = "缂哄皯甯哥敤閭", groups = {conferenceRegistration.class}) + private String email; + + /** 鍗曚綅鍚嶇О */ + @NotBlank(message = "缂哄皯鍗曚綅鍚嶇О", groups = {conferenceRegistration.class}) + private String companyName; + + /** 鍗曚綅鎬ц川 */ + @NotBlank(message = "缂哄皯鍗曚綅鎬ц川", groups = {conferenceRegistration.class}) + private String companyType; + + /** 鑱屼綅 */ + @NotBlank(message = "缂哄皯鑱屼綅", groups = {conferenceRegistration.class}) + private String position; + + /** 鑱屼綅绫诲瀷 */ + @NotBlank(message = "缂哄皯鑱屼綅绫诲瀷", groups = {conferenceRegistration.class}) + private String positionType; + + /** 鐪両D */ + @NotNull(message = "缂哄皯鐪", groups = {conferenceRegistration.class}) + private Long provinceId; + + /** 甯侷D */ + @NotNull(message = "缂哄皯甯", groups = {conferenceRegistration.class}) + private Long cityId; + + /** 鍖猴紙鍘匡級ID */ + @NotNull(message = "缂哄皯鍖", groups = {conferenceRegistration.class}) + private Long areaId; + + /** 璇佷欢鐓х墖 */ + @NotBlank(message = "缂哄皯璇佷欢鐓х墖", groups = {conferenceRegistration.class}) + private String idPhoto; + + /** 涓昏涓氬姟 */ + @NotBlank(message = "缂哄皯涓昏涓氬姟", groups = {conferenceRegistration.class}) + private String business; + + /** 鍙備細鐩殑 */ + @NotBlank(message = "缂哄皯鍙備細鐩殑", groups = {conferenceRegistration.class}) + private String objective; + + /** 鏄惁鍙傚姞杩囧線灞婂ぇ浼 */ + @NotNull(message = "缂哄皯鏄惁鍙傚姞杩囧線灞婂ぇ浼", groups = {conferenceRegistration.class}) + private Integer isParticipate; + + /** 鏄惁璁″垝鍙傚姞杩囦笅涓灞婂ぇ浼 */ + @NotNull(message = "缂哄皯鏄惁璁″垝鍙傚姞杩囦笅涓灞婂ぇ浼", groups = {conferenceRegistration.class}) + private Integer isParticipateNext; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/CourseDTO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/CourseDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..056ad8472d719c4c20ad3239d624d19a693c2968 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/CourseDTO.java @@ -0,0 +1,85 @@ +package com.ruoyi.hezhi.domain.dto; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.Date; + +/** + * 璇剧▼瀵硅薄 tb_course + * + * @author ruoyi + * @date 2024-09-14 + */ +@Getter +@Setter +@ToString +public class CourseDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** 绔嬪嵆鍙傚姞 */ + public interface joinNow{} + + + /** 璇剧▼涓婚敭ID */ + @NotNull(message = "缂哄皯璇剧▼ID", groups = {joinNow.class}) + private Long courseId; + + /** 璇剧▼鍒嗙被ID */ + private Long classId; + + /** 璇剧▼绫诲瀷锛0-榛樿锛1-鎬濇斂绀鸿寖璇剧▼锛2-绮惧搧鍦ㄧ嚎璇剧▼锛 */ + private Integer classType; + + /** 灏侀潰鍥 */ + private String coverImage; + + /** 璇剧▼鍚 */ + private String courseName; + + /** 璇剧▼鏍囬 */ + private String courseTitle; + + /** 寮璇炬鏁 */ + private String courseNum; + + /** 寮璇炬椂闂达紙寮濮嬶級 */ + private Date courseStart; + + /** 寮璇炬椂闂达紙缁撴潫锛 */ + private Date courseEnd; + + /** 瀛︽椂瀹夋帓 */ + private String courseArrange; + + /** 鍙傚姞浜烘暟 */ + private Integer participateNum; + + /** 璇剧▼璇︽儏 */ + private String courseDetails; + + /** 璇剧▼姒傝堪 */ + private String courseOverview; + + /** 璇剧▼澶х翰 */ + private String courseSyllabus; + + /** 棰勫鐭ヨ瘑 */ + private String courseKnowledge; + + /** 璇剧▼鍥㈤槦 */ + private String courseTeam; + + /** 鏍囩 */ + private String tagName; + + /** 涓昏鑰佸笀ID闆嗗悎 */ + private String teacherIds; + + /** 澶囨敞 */ + private String remarks; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/CourseEvaluateDTO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/CourseEvaluateDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..9dd619a5650b58a41d2f53c747315c84adba39fb --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/CourseEvaluateDTO.java @@ -0,0 +1,40 @@ +package com.ruoyi.hezhi.domain.dto; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 璇剧▼璇勪环瀵硅薄 tb_course_evaluate + * + * @author ruoyi + * @date 2024-09-14 + */ +@Getter +@Setter +@ToString +public class CourseEvaluateDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** 鎻愪氦璇勪环 */ + public interface submitEvaluation{} + + + /** 璇剧▼璇勪环涓婚敭ID */ + private Long courseEvaluateId; + + /** 璇剧▼ID */ + @NotNull(message = "缂哄皯璇剧▼ID", groups = {submitEvaluation.class}) + private Long courseId; + + /** 璇勪环鏄熺骇 */ + @NotNull(message = "缂哄皯璇勪环鏄熺骇", groups = {submitEvaluation.class}) + private Integer evaluateStar; + + /** 璇勪环鍐呭 */ + private String evaluateContent; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/DelHistoricalRecordsDTO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/DelHistoricalRecordsDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..ecd4c57ed132480dfa04ebb4d155e8cdecf97501 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/DelHistoricalRecordsDTO.java @@ -0,0 +1,16 @@ +package com.ruoyi.hezhi.domain.dto; + +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * @Author haoxuyang + * @Date 2025/1/21 15:22 + */ +@Data +public class DelHistoricalRecordsDTO { + /** 鐢ㄦ埛ID */ + @NotNull(message = "璇峰厛鐧诲綍") + private Long memberUserId; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/ExamFileDTO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/ExamFileDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..428513fd90bd3c366f0758cfe2d539c8f8a43c94 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/ExamFileDTO.java @@ -0,0 +1,48 @@ +package com.ruoyi.hezhi.domain.dto; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 鑰冭瘯鎷嶆憚鏂囦欢瀵硅薄 tb_exam_file + * + * @author ruoyi + * @date 2024-11-14 + */ +@Getter +@Setter +@ToString +public class ExamFileDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** 姝e紡鑰冭瘯鎷嶆憚 */ + public interface subjectFormalAgain{} + + /** 鑰冭瘯鎷嶆憚鏂囦欢涓婚敭ID */ + private Long examFileId; + + /** 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏ID */ + @NotNull(message = "缂哄皯鑰冭瘯鑰冪敓璇︽儏ID", groups = {subjectFormalAgain.class}) + private Long examSimulateInfoId; + + /** 鐢ㄦ埛ID */ + @NotNull(message = "璇峰厛鐧诲綍", groups = {subjectFormalAgain.class}) + private Long memberUserId; + + /** 鑰冭瘯ID */ + private Long examId; + + /** 鏂囦欢绫诲瀷锛0-鏃狅紝1-鍥剧墖锛 */ + private Integer fileType; + + /** 鏂囦欢鍦板潃 */ + private String fileUrl; + + /** 鑰冭瘯鍒嗙被锛0-鏃狅紝1-姝e紡鑰冭瘯锛2-妯℃嫙鑰冭瘯锛 */ + private Integer examType; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/ExamPayInfoDto.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/ExamPayInfoDto.java new file mode 100644 index 0000000000000000000000000000000000000000..457a2935cee27b0a3df8bc9cb0407e032adabdaa --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/ExamPayInfoDto.java @@ -0,0 +1,41 @@ +package com.ruoyi.hezhi.domain.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class ExamPayInfoDto { +// t1.exam_id examId, +// t1.exam_batch_index as examBatchIndex, +// t2.exam_start_time as examStartTime, +// t3.exam_batch_early as examBatchEarly, +// NOW() > DATE_SUB(t2.exam_start_time, INTERVAL t3.exam_batch_early DAY) AS isExpired + + /* + * 鑰冭瘯id + * */ + private Long examId; + /* + * 鑰冭瘯鎵规index + * */ + private Integer examBatchIndex; + /* + * 鑰冭瘯鎵规 + * */ + private String examBatch; + /* + * 鑰冭瘯寮濮嬫椂闂 + * */ + private String examStartTime; + /* + * 鑰冭瘯鎻愬墠鏃堕棿 + * */ + private Integer examBatchEarly; + /* + * 鏄惁杩囨湡 0-鏈繃鏈 1-宸茶繃鏈 + * */ + private Integer isExpired; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/ExamRegistrationDTO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/ExamRegistrationDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..35958a07a7e412d41d61a13d4f325ce5cd174086 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/ExamRegistrationDTO.java @@ -0,0 +1,241 @@ +package com.ruoyi.hezhi.domain.dto; + +import com.ruoyi.common.annotation.Excel; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.List; + +/** + * 鑰冭瘯鎶ュ悕瀵硅薄 tb_exam_registration + * + * @author ruoyi + * @date 2024-11-05 + */ +@Getter +@Setter +@ToString +public class ExamRegistrationDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** 鑰冭瘯鎶ュ悕 */ + public interface examRegistration{} + + /** 鑰冭瘯鎶ュ悕涓婚敭ID */ + private Long examRegistrationId; + + /** 鐢ㄦ埛ID */ + @NotNull(message = "璇峰厛鐧诲綍", groups = {examRegistration.class}) + private Long memberUserId; + + /** 鑰冭瘯ID */ +// @NotNull(message = "缂哄皯鑰冭瘯ID", groups = {examRegistration.class}) + private Long examId; + + /** 濮撳悕 */ + @NotBlank(message = "缂哄皯濮撳悕", groups = {examRegistration.class}) + private String name; + + /** 鎬у埆锛0-鐢凤紝1-濂筹紝2-鏈煡锛 */ + @NotNull(message = "缂哄皯鎬у埆", groups = {examRegistration.class}) + private Integer sex; + + /** 鏇剧敤鍚 */ + private String formerName; + + /** 姘戞棌 */ + @NotBlank(message = "缂哄皯姘戞棌", groups = {examRegistration.class}) + private String nation; + + /** 韬唤璇佸彿 */ + @NotBlank(message = "缂哄皯韬唤璇佸彿", groups = {examRegistration.class}) + private String identityCard; + + /** 鍑虹敓鏃ユ湡 */ + @NotBlank(message = "缂哄皯鍑虹敓鏃ユ湡", groups = {examRegistration.class}) + private String birthday; + + /** 鐢熸簮绫诲瀷 */ + @NotBlank(message = "缂哄皯鐢熸簮绫诲瀷", groups = {examRegistration.class}) + private String sourceType; + + /** 绫嶈疮 */ + /* @NotBlank(message = "缂哄皯绫嶈疮", groups = {examRegistration.class}) + private String nativePlace;*/ + + /** 绫嶈疮 */ + @NotEmpty(message = "缂哄皯绫嶈疮", groups = {examRegistration.class}) + private List nativePlace; + + /** 鏀挎不闈㈣矊 */ + @NotBlank(message = "缂哄皯鏀挎不闈㈣矊", groups = {examRegistration.class}) + private String politicalStatus; + + /** 瀛﹀巻锛0-鏃狅紝1-灏忓锛2-鍒濅腑锛3-楂樹腑锛4-涓笓锛5-涓撶锛6-鏈锛7-鐮旂┒鐢燂級 */ + @NotBlank(message = "缂哄皯瀛﹀巻", groups = {examRegistration.class}) + private String education; + + /** 涓撲笟 */ + @NotBlank(message = "缂哄皯涓撲笟", groups = {examRegistration.class}) + private String major; + + /** 鎵鍦ㄥ鏍★紙姣曚笟瀛︽牎锛 */ + @NotBlank(message = "缂哄皯鎵鍦ㄥ鏍★紙姣曚笟瀛︽牎锛", groups = {examRegistration.class}) + private String graduationSchool; + + /** 鍏ュ骞翠唤锛堟瘯涓氬勾浠斤級 */ + @NotBlank(message = "缂哄皯鍏ュ骞翠唤锛堟瘯涓氬勾浠斤級", groups = {examRegistration.class}) + private String entranceYear; + + /** 鑱旂郴鏂瑰紡 */ + @NotBlank(message = "缂哄皯鑱旂郴鏂瑰紡", groups = {examRegistration.class}) + private String contactInformation; + + /** 鐪両D */ +// @NotNull(message = "缂哄皯鐪両D", groups = {examRegistration.class}) + private Long provinceId; + + /** 甯侷D */ +// @NotNull(message = "缂哄皯甯侷D", groups = {examRegistration.class}) + private Long cityId; + + /** 鍖猴紙鍘匡級ID */ +// @NotNull(message = "缂哄皯鍖猴紙鍘匡級ID ", groups = {examRegistration.class}) + private Long areaId; + + /** 鐪佸悕 */ + private String provinceName; + + /** 甯傚悕 */ + private String cityName; + + /** 鍖哄悕 */ + private String areaName; + + /** 璇︾粏鍦板潃 */ + @NotBlank(message = "缂哄皯璇︾粏鍦板潃", groups = {examRegistration.class}) + private String address; + + /** 閭紪 */ + private String zipCode; + + /** 鑱旂郴鐢佃瘽 */ + @NotBlank(message = "缂哄皯鑱旂郴鐢佃瘽", groups = {examRegistration.class}) + private String contactPhone; + + /** 鐢靛瓙閭 */ + private String email; + + /** 钃濆簳璇佷欢鐓 */ + @NotBlank(message = "缂哄皯钃濆簳璇佷欢鐓", groups = {examRegistration.class}) + private String idPhoto; + + /** 韬唤璇佸浗寰介潰锛堟闈級 */ + @NotBlank(message = "缂哄皯韬唤璇佸浗寰介潰锛堟闈級", groups = {examRegistration.class}) + private String identityCardBadge; + + /** 韬唤璇佷汉鍍忛潰锛堝弽闈級 */ + @NotBlank(message = "缂哄皯韬唤璇佷汉鍍忛潰锛堝弽闈級", groups = {examRegistration.class}) + private String identityCardPortrait; + + /** 姣曚笟璇佷功锛堝涓敤鑻辨枃閫楀彿闅斿紑锛 */ + // @NotBlank(message = "缂哄皯姣曚笟璇佷功", groups = {examRegistration.class}) + private String graduationCertificate; + + /** 鏈烘瀯鍚嶇О */ + @NotBlank(message = "缂哄皯鏈烘瀯鍚嶇О", groups = {examRegistration.class}) + private String agencyName; + + /** 鑱屼笟ID */ + private Long careerId; + + /** 鑱屼笟鍚嶇О */ + @NotBlank(message = "缂哄皯鑱屼笟鍚嶇О", groups = {examRegistration.class}) + private String careerName; + + /** 鑰冭瘯绛夌骇 */ + @NotBlank(message = "缂哄皯鑰冭瘯绛夌骇", groups = {examRegistration.class}) + private String examLevel; + + /** 鎶ュ悕鎵规 */ + @NotBlank(message = "缂哄皯鎶ュ悕鎵规", groups = {examRegistration.class}) + private String registrationBatch; + + /** 瀛︿範涓績ID */ + @NotNull(message = "缂哄皯瀛︿範涓績ID", groups = {examRegistration.class}) + private Long studyCenterId; + + /** 瀛︿範涓績 */ + @NotBlank(message = "缂哄皯瀛︿範涓績", groups = {examRegistration.class}) + private String studyCenter; + + /** 鏈烘瀯浠g爜 */ + @NotBlank(message = "缂哄皯鏈烘瀯浠g爜", groups = {examRegistration.class}) + private String agencyCode; + + /** 鏄惁鑷煡鐢宠璧勬枡瀹屾暣鎬э紙0-鍚︼紝1-鏄級 */ + @NotNull(message = "缂哄皯鑷煡鐢宠璧勬枡瀹屾暣鎬", groups = {examRegistration.class}) + private Integer isInspect; + + /** 绛惧瓧鐓 */ + // @NotBlank(message = "缂哄皯绛惧瓧鐓", groups = {examRegistration.class}) + private String signPhoto; + + /** 鎶ュ悕琛 */ + @Excel(name = "鎶ュ悕琛") + private String registrationForm; + + /** 鍑嗚冭瘉 */ + @Excel(name = "鍑嗚冭瘉") + private String admissionTicket; + + /** 鎴愮哗鍗 */ + @Excel(name = "鎴愮哗鍗") + private String transcript; + + /** 璇佷功 */ + @Excel(name = "璇佷功") + private String certificate; + + /** 璇佷功閭瘎鐘舵侊紙0-鏈笂浼犲湴鍧锛1-寰呭彂璐э紝1-宸插彂璐э級 */ + @Excel(name = "璇佷功閭瘎鐘舵", readConverterExp = "0=-鏈笂浼犲湴鍧锛1-寰呭彂璐э紝1-宸插彂璐") + private Integer certificateStatus; + + /** 濉啓鍦板潃鏃堕棿 */ + @Excel(name = "濉啓鍦板潃鏃堕棿") + private String writeAt; + + /** 鍙戣揣鏃堕棿 */ + @Excel(name = "鍙戣揣鏃堕棿") + private String consignAt; + + /** 纭鏀惰揣鏃堕棿 */ + @Excel(name = "纭鏀惰揣鏃堕棿") + private String enterAt; + + /** 蹇掑叕鍙镐唬鍙 */ + @Excel(name = "蹇掑叕鍙镐唬鍙") + private String shippingMark; + + /** 鐗╂祦鍚嶇О */ + @Excel(name = "鐗╂祦鍚嶇О") + private String shippingName; + + /** 鐗╂祦鍗曞彿 */ + @Excel(name = "鐗╂祦鍗曞彿") + private String shippingCode; + + /** 鏈烘瀯ID */ + private Long agencyId; + + /** 璇剧▼D */ + private Long courseId; + + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/ImportStudentDTO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/ImportStudentDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..ba3b36c569df2e029bbe9fb7c49c26f63dbd7651 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/ImportStudentDTO.java @@ -0,0 +1,69 @@ +package com.ruoyi.hezhi.domain.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; +import java.util.Date; + +/** + * 瀛﹀憳瀵煎叆 + */ +@Data +public class ImportStudentDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 濮撳悕 */ + @Excel(name = "濮撳悕") + @NotBlank(message = "濮撳悕涓嶈兘涓虹┖") + private String studentName; + + /** 鎬у埆锛0-鐢凤紝1-濂筹紝2-鏈煡锛 */ + @Excel(name = "鎬у埆", readConverterExp = "0=鐢,1=濂", combo = {"鐢", "濂"}) + @NotBlank(message = "鎬у埆涓嶈兘涓虹┖") + private Integer sex; + + /** 鍑虹敓鏃ユ湡 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍑虹敓鏃ユ湡", dateFormat = "yyyy-MM-dd") + private String birthday; + + /** 鐢佃瘽/鎵嬫満 */ + @Excel(name = "鐢佃瘽/鎵嬫満") + @NotBlank(message = "鐢佃瘽/鎵嬫満涓嶈兘涓虹┖") + private String phone; + + /** 韬唤璇佸彿 */ + @Excel(name = "韬唤璇佸彿") + @NotBlank(message = "韬唤璇佸彿涓嶈兘涓虹┖") + private String identityCard; + + /** 瀛﹀巻锛0-鏃狅紝1-灏忓锛2-鍒濅腑锛3-楂樹腑锛4-涓笓锛5-涓撶锛6-鏈锛7-鐮旂┒鐢燂級 */ + @Excel(name = "瀛﹀巻", combo = {"鏃", "灏忓", "鍒濅腑", "楂樹腑", "涓笓", "涓撶", "鏈", "鐮旂┒鐢"}) + private String education; + + @Excel(name = "姣曚笟闄㈡牎") + private String graduationSchool; + + /** 姣曚笟鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "姣曚笟鏃堕棿", dateFormat = "yyyy-MM-dd") + private String graduationTime; +// +// /** 韬唤璇佷汉鍍忛潰 */ +// @Excel(name = "韬唤璇佷汉鍍忛潰",cellType = Excel.ColumnType.IMAGE) +// private String identityCardPortrait; +// +// /** 韬唤璇佸浗寰介潰 */ +// @Excel(name = "韬唤璇佸浗寰介潰",cellType = Excel.ColumnType.IMAGE) +// private String identityCardBadge; +// +// /** 姣曚笟璇佷功 */ +// @Excel(name = "姣曚笟璇佷功",cellType = Excel.ColumnType.IMAGE) +// private String graduationCertificate; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberAddressDTO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberAddressDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..cdee1004c85c711698bac513cb129733a1f87794 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberAddressDTO.java @@ -0,0 +1,69 @@ +package com.ruoyi.hezhi.domain.dto; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 鐢ㄦ埛鍦板潃瀵硅薄 tb_member_address + * + * @author ruoyi + * @date 2024-10-30 + */ +@Getter +@Setter +@ToString +public class MemberAddressDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** 鏂板鍦板潃 */ + public interface addMemberAddress{} + /** 淇敼鍦板潃 */ + public interface updateMemberAddress{} + /** 鍒犻櫎鍦板潃 */ + public interface deleteMemberAddress{} + + /** 鐢ㄦ埛鍦板潃涓婚敭ID */ + @NotNull(message = "缂哄皯鐢ㄦ埛鍦板潃ID", groups = {updateMemberAddress.class, deleteMemberAddress.class}) + private Long memberAddressId; + + /** 鐢ㄦ埛ID */ + @NotNull(message = "璇峰厛鐧诲綍", groups = {addMemberAddress.class}) + private Long memberUserId; + + /** 濮撳悕 */ + @NotBlank(message = "缂哄皯濮撳悕", groups = {addMemberAddress.class, updateMemberAddress.class}) + private String name; + + /** 鎵嬫満鍙 */ + @NotBlank(message = "缂哄皯鎵嬫満鍙", groups = {addMemberAddress.class, updateMemberAddress.class}) + private String phone; + + /** 鐪両D */ +// @NotNull(message = "缂哄皯鐪", groups = {addMemberAddress.class, updateMemberAddress.class}) + private Long provinceId; + private String provinceName; + + /** 甯侷D */ +// @NotNull(message = "缂哄皯甯", groups = {addMemberAddress.class, updateMemberAddress.class}) + private Long cityId; + private String cityName; + + /** 鍖猴紙鍘匡級ID */ +// @NotNull(message = "缂哄皯鍖", groups = {addMemberAddress.class, updateMemberAddress.class}) + private Long areaId; + private String areaName; + + /** 璇︾粏鍦板潃 */ + @NotBlank(message = "缂哄皯璇︾粏鍦板潃", groups = {addMemberAddress.class, updateMemberAddress.class}) + private String address; + + /** 鍦板潃 */ +// @NotBlank(message = "缂哄皯鍦板潃", groups = {addMemberAddress.class, updateMemberAddress.class}) + private String location; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberDiscussDTO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberDiscussDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..d5c0b8d6c3d3858afaeed32996cdc52f481192b4 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberDiscussDTO.java @@ -0,0 +1,47 @@ +package com.ruoyi.hezhi.domain.dto; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 鐢ㄦ埛璁ㄨ瀵硅薄 tb_member_discuss + * + * @author ruoyi + * @date 2024-11-19 + */ +@Getter +@Setter +@ToString +public class MemberDiscussDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** 鍙戝竷璁ㄨ淇℃伅 */ + public interface releaseMemberDiscuss{} + + /** 鐢ㄦ埛璁ㄨ涓婚敭ID */ + private Long memberDiscussId; + + /** 鐢ㄦ埛ID */ + @NotNull(message = "璇峰厛鐧诲綍", groups = {releaseMemberDiscuss.class}) + private Long memberUserId; + + /** 鐩存挱ID */ + @NotNull(message = "缂哄皯鐩存挱ID", groups = {releaseMemberDiscuss.class}) + private Long liveBroadcastId; + + /** 璇剧▼ID */ + private Long courseId; + + /** 绔犺妭ID */ + private Long chapterId; + + /** 鍐呭 */ + @NotBlank(message = "璇峰~鍐欏唴瀹", groups = {releaseMemberDiscuss.class}) + private String content; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberExamSimulateAllDTO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberExamSimulateAllDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..bc6762edee8a2635d992fa0dabfd9f5ec8a5cc19 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberExamSimulateAllDTO.java @@ -0,0 +1,97 @@ +package com.ruoyi.hezhi.domain.dto; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +/** + * 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛夊璞 tb_member_exam_simulate_all + * + * @author ruoyi + * @date 2024-11-11 + */ +@Getter +@Setter +@ToString +public class MemberExamSimulateAllDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** 妯℃嫙鑰冭瘯绛旈 */ + public interface subjectSimulateAnswer{} + /** 妯℃嫙鑰冭瘯浜ゅ嵎 */ + public interface subjectSimulateSubmit{} + /** 姝e紡鑰冭瘯浜ゅ嵎 */ + public interface subjectFormalAnswer{} + /** 姝e紡鑰冭瘯鐐瑰嚮纭畾寮濮嬬瓟棰 */ + public interface subjectFormalClickOK{} + /** 姝e紡鑰冭瘯浜ゅ嵎 */ + public interface subjectFormalSubmit{} + /** 姝e紡鑰冭瘯琛ヨ */ + public interface subjectFormalAgain{} + + /** 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛変富閿甀D */ + private Long memberExamSimulateAllId; + + /** 棰樺簱鍒嗙被ID */ +// @NotNull(message = "缂哄皯棰樺簱鍒嗙被ID", groups = {subjectSimulateAnswer.class}) + private Long subjectWarehouseClassId; + + /** 璇剧▼ID */ + @NotNull(message = "缂哄皯璇剧▼ID", groups = {subjectSimulateAnswer.class}) + private Long courseId; + + /** 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏ID */ + @NotNull(message = "缂哄皯妯℃嫙鑰冭瘯鑰冪敓璇︽儏ID", groups = {subjectSimulateAnswer.class, subjectSimulateSubmit.class, subjectFormalAnswer.class, subjectFormalClickOK.class, subjectFormalSubmit.class}) + private Long examSimulateInfoId; + + /** 鐢ㄦ埛ID */ + @NotNull(message = "璇峰厛鐧诲綍", groups = {subjectSimulateAnswer.class, subjectSimulateSubmit.class, subjectFormalAnswer.class, subjectFormalClickOK.class, subjectFormalSubmit.class, subjectFormalAgain.class}) + private Long memberUserId; + + /** 棰樼洰ID */ + @NotNull(message = "缂哄皯棰樼洰ID", groups = {subjectSimulateAnswer.class, subjectFormalAnswer.class}) + private Long examSubjectId; + + /** 棰樼洰绫诲瀷锛1-鍗曢夛紝2-澶氶夛紝3-鍒ゆ柇锛4-璁鸿堪锛 */ + private Integer subjectType; + + /** 鑰冭瘯鍒嗙被锛0-鏃狅紝1-姝e紡鑰冭瘯锛2-妯℃嫙鑰冭瘯锛 */ + private Integer examType; + + /** 搴忓彿 */ + @NotNull(message = "缂哄皯搴忓彿", groups = {subjectSimulateAnswer.class}) + private Long location; + + /** 鎴戠殑绛旀 */ + private String myAnswer; + + /** 绛旀 */ + private String answer; + + /** 鍒嗘暟 */ + private BigDecimal score; + + /** 0-鏈洖绛旓紝1-姝g‘锛2-閿欒锛3-璁鸿堪 */ + private Integer status; + + /** 绛夌骇 */ + private Integer level; + + /** 鑰冭瘯ID */ + @NotNull(message = "缂哄皯鑰冭瘯ID", groups = {subjectFormalAnswer.class, subjectFormalAgain.class}) + private Long examId; + + /** 浜ゅ嵎鐘舵侊紙0-鏃狅紝1-鑷富浜ゅ嵎锛2-绯荤粺浜ゅ嵎锛 */ + @NotNull(message = "缂哄皯浜ゅ嵎鐘舵", groups = {subjectFormalSubmit.class}) + private Integer submitStatus; + + @NotEmpty(message = "绛旈鍗′笉鑳戒负绌") + private List memberExamSimulateAllList; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberJoinDTO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberJoinDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..47f9724be4585e6894e8ed0a3306a68dff49dcaa --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberJoinDTO.java @@ -0,0 +1,40 @@ +package com.ruoyi.hezhi.domain.dto; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 鐢ㄦ埛鍙備笌瀵硅薄 tb_member_join + * + * @author ruoyi + * @date 2024-11-15 + */ +@Getter +@Setter +@ToString +public class MemberJoinDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** 绔嬪嵆鍙傚姞 */ + public interface joinNow{} + + /** 鐢ㄦ埛鍙備笌涓婚敭ID */ + private Long memberJoinId; + + /** 鐢ㄦ埛ID */ + @NotNull(message = "璇峰厛鐧诲綍", groups = {joinNow.class}) + private Long memberUserId; + + /** 鐩稿叧璧勬簮ID */ + @NotNull(message = "缂哄皯鐩稿叧璧勬簮ID", groups = {joinNow.class}) + private Long resId; + + /** 璧勬簮绫诲瀷锛0-鏃狅紝1-涓撲笟锛2-璇剧▼锛 */ + @NotNull(message = "缂哄皯璧勬簮绫诲瀷", groups = {joinNow.class}) + private Integer type; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberMajorDTO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberMajorDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..ddf0b4e58425abf3f045d5056c693f35fbd049d2 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberMajorDTO.java @@ -0,0 +1,40 @@ +package com.ruoyi.hezhi.domain.dto; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 鐢ㄦ埛棰樺簱涓撲笟瀵硅薄 tb_member_major + * + * @author ruoyi + * @date 2024-11-29 + */ +@Getter +@Setter +@ToString +public class MemberMajorDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** 鐢ㄦ埛鏂板棰樺簱涓撲笟 */ + public interface insertMemberMajor{} + + /** 鐢ㄦ埛棰樺簱涓撲笟涓婚敭ID */ + private Long memberMajorId; + + /** 鐢ㄦ埛ID */ + @NotNull(message = "璇峰厛鐧诲綍", groups = {insertMemberMajor.class}) + private Long memberUserId; + + /** 涓撲笟ID */ + @NotNull(message = "缂哄皯majorId", groups = {insertMemberMajor.class}) + private Long majorId; + + /** 璇剧▼ID */ + @NotNull(message = "缂哄皯courseId", groups = {insertMemberMajor.class}) + private Long courseId; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberSignDTO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberSignDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..b0c7c501c4a09a730a2f1edd673c51908ce3a4d2 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberSignDTO.java @@ -0,0 +1,48 @@ +package com.ruoyi.hezhi.domain.dto; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 鐢ㄦ埛绛惧埌瀵硅薄 tb_member_sign + * + * @author ruoyi + * @date 2024-10-31 + */ +@Getter +@Setter +@ToString +public class MemberSignDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** 鐢ㄦ埛绛惧埌 */ + public interface memberSignDay{} + + /** 鐢ㄦ埛绛惧埌涓婚敭ID */ + private Long memberSignId; + + /** 鐢ㄦ埛ID */ + @NotNull(message = "璇峰厛鐧诲綍", groups = {StudentDTO.authenticationStudent.class}) + private Long memberUserId; + + /** 绛惧埌骞 */ + private String signYear; + + /** 绛惧埌鏈 */ + private String signMonth; + + /** 绛惧埌鏃 */ + private String signDay; + + /** 绛惧埌鏃ユ湡 */ + private String signDate; + + /** 绛惧埌绉垎 */ + private BigDecimal signScore; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberSubjectAllDTO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberSubjectAllDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..51d5e4df0fb160f83687882399f97738b6b629cd --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberSubjectAllDTO.java @@ -0,0 +1,70 @@ +package com.ruoyi.hezhi.domain.dto; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * 鎴戠殑棰樼洰瀵硅薄 tb_member_subject_all + * + * @author ruoyi + * @date 2024-11-06 + */ +@Getter +@Setter +@ToString +public class MemberSubjectAllDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** 缁冧範绛旈 */ + public interface subjectPracticeAnswer{} + + /** 鎴戠殑棰樼洰涓婚敭ID */ + private Long memberSubjectAllId; + + /** 鐢ㄦ埛ID */ + @NotNull(message = "璇峰厛鐧诲綍", groups = {subjectPracticeAnswer.class}) + private Long memberUserId; + + /** 棰樼洰ID */ + @NotNull(message = "缂哄皯棰樼洰ID", groups = {subjectPracticeAnswer.class}) + private Long examSubjectId; + + /** 璇剧▼ID **/ + @NotNull(message = "缂哄皯璇剧▼ID", groups = {subjectPracticeAnswer.class}) + private Long courseId; + + /** 棰樼洰绫诲瀷锛1-鍗曢夛紝2-澶氶夛紝3-鍒ゆ柇锛4-璁鸿堪锛 */ + private Integer subjectType; + + /** 缁冧範绫诲瀷锛1-椤哄簭缁冧範锛2-涓撻」缁冧範锛3-绔犺妭缁冧範锛4-闅忔満缁冧範锛 */ + @NotNull(message = "缂哄皯缁冧範绫诲瀷", groups = {subjectPracticeAnswer.class}) + private Integer practiceType; + + /** 搴忓彿 */ + @NotNull(message = "缂哄皯搴忓彿", groups = {subjectPracticeAnswer.class}) + private Long location; + + /** 鎴戠殑绛旀 */ + private String myAnswer; + + /** 绛旀 */ + private String answer; + + /** 鍒嗘暟 */ + private BigDecimal score; + + /** 0-鏈洖绛旓紝1-姝g‘锛2-閿欒锛3-璁鸿堪 */ + private Integer status; + + /** 涓撲笟ID */ + private Long majorId; + + /** 棰樺簱鍒嗙被ID */ + private Long subjectWarehouseClassId; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberSubjectCollectDTO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberSubjectCollectDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..689dde8a03632dc6bb38007207696dd7b5bf76a1 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberSubjectCollectDTO.java @@ -0,0 +1,45 @@ +package com.ruoyi.hezhi.domain.dto; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 鎴戠殑鏀惰棌棰樼洰瀵硅薄 tb_member_subject_collect + * + * @author ruoyi + * @date 2024-11-07 + */ +@Getter +@Setter +@ToString +public class MemberSubjectCollectDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** 鍙戦侀獙璇佺爜 */ + public interface subjectCollectOrCancelCollect{} + + /** 鎴戠殑棰樼洰涓婚敭ID */ + private Long memberSubjectCollectId; + + /** 鐢ㄦ埛ID */ + @NotNull(message = "璇峰厛鐧诲綍", groups = {subjectCollectOrCancelCollect.class}) + private Long memberUserId; + + /** 棰樼洰ID */ + @NotNull(message = "缂哄皯棰樼洰ID", groups = {subjectCollectOrCancelCollect.class}) + private Long examSubjectId; + + /** 缁冧範绫诲瀷锛1-椤哄簭缁冧範锛2-涓撻」缁冧範锛3-绔犺妭缁冧範锛4-闅忔満缁冧範锛 */ + private Integer practiceType; + + /** 搴忓彿 */ + private Long location; + + /** 璇剧▼ID */ + private Long courseId; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberUserLoginDTO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberUserLoginDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..c356fd5af77e56c1dc4acfb30ece4c983978c258 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/MemberUserLoginDTO.java @@ -0,0 +1,40 @@ +package com.ruoyi.hezhi.domain.dto; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +/** + * 鐢ㄦ埛鐧诲綍dto + * @author Wzp + */ +@Data +public class MemberUserLoginDTO implements Serializable { + + /** 灏忕▼搴忔巿鏉冪櫥褰 */ + public interface MemberUserLogin{ + + } + + /** 灏忕▼搴忔巿鏉冩敞鍐 */ + public interface MemberUserRegister{ + + } + + /** 鐧诲綍code */ + @NotBlank(message = "鐧诲綍code涓嶈兘涓虹┖", groups = {MemberUserLogin.class, MemberUserRegister.class}) + private String loginCode; + + /** 鎵嬫満鍙穋ode */ + @NotBlank(message = "鎵嬫満鍙穋ode涓嶈兘涓虹┖", groups = {MemberUserLogin.class,MemberUserRegister.class}) + private String phoneCode; + + /** 澶村儚 */ +// @NotBlank(message = "澶村儚涓嶈兘涓虹┖", groups = {MemberUserRegister.class}) + private String avatarUrl; + + /** 鏄电О */ +// @NotBlank(message = "鏄电О涓嶈兘涓虹┖", groups = {MemberUserRegister.class}) + private String nickName; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/PostAddressDTO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/PostAddressDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..85d15c9126e39b4950cf64faaeb7e530ec276c56 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/PostAddressDTO.java @@ -0,0 +1,76 @@ +package com.ruoyi.hezhi.domain.dto; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 閭瘎鍦板潃瀵硅薄 tb_post_address + * + * @author ruoyi + * @date 2024-11-20 + */ +@Getter +@Setter +@ToString +public class PostAddressDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** 濉啓璇佷功鏀惰揣淇℃伅 */ + public interface submitCertificateGoodsInfo{} + + /** 閭瘎鍦板潃涓婚敭ID */ + private Long postAddressId; + + /** 鐢ㄦ埛ID */ + @NotNull(message = "璇峰厛鐧诲綍", groups = {submitCertificateGoodsInfo.class}) + private Long memberUserId; + + /** 濮撳悕 */ + @NotBlank(message = "缂哄皯濮撳悕", groups = {submitCertificateGoodsInfo.class}) + private String name; + + /** 鎵嬫満鍙 */ + @NotBlank(message = "缂哄皯鎵嬫満鍙", groups = {submitCertificateGoodsInfo.class}) + private String phone; + + /** 鐪両D */ + @NotNull(message = "缂哄皯鐪両D", groups = {submitCertificateGoodsInfo.class}) + private Long provinceId; + + /** 甯侷D */ + @NotNull(message = "缂哄皯甯侷D", groups = {submitCertificateGoodsInfo.class}) + private Long cityId; + + /** 鍖猴紙鍘匡級ID */ + @NotNull(message = "缂哄皯鍖猴紙鍘匡級ID", groups = {submitCertificateGoodsInfo.class}) + private Long areaId; + + /** 鐪佸悕 */ + private String provinceName; + + /** 甯傚悕 */ + private String cityName; + + /** 鍖哄悕 */ + private String areaName; + + /** 璇︾粏鍦板潃 */ + @NotBlank(message = "缂哄皯璇︾粏鍦板潃", groups = {submitCertificateGoodsInfo.class}) + private String address; + + /** 鐩稿叧璧勬簮ID */ + private Long dataId; + + /** 鎶ュ悕ID */ + @NotNull(message = "缂哄皯鎶ュ悕ID", groups = {submitCertificateGoodsInfo.class}) + private Long examRegistrationId; + + /** 绫诲瀷锛0-鍏ㄩ儴锛1-璇佷功锛 */ + private Integer type; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/SmsCodeDTO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/SmsCodeDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..e828939471bdc39e2a254633f1c46be8c4009441 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/SmsCodeDTO.java @@ -0,0 +1,43 @@ +package com.ruoyi.hezhi.domain.dto; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 鐭俊楠岃瘉鐮佸璞 tb_sms_code + * + * @author ruoyi + * @date 2024-11-06 + */ +@Getter +@Setter +@ToString +public class SmsCodeDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** 鍙戦侀獙璇佺爜 */ + public interface sendSmsCode{} + + /** 楠岃瘉鐮両D */ + private Long smsCodeId; + + /** 鎵嬫満鍙 */ + @NotBlank(message = "缂哄皯鎵嬫満鍙", groups = {sendSmsCode.class}) + private String phone; + + /** 楠岃瘉鐮 */ + private String smsCode; + + /** 绫诲瀷锛0-榛樿锛1-鎵嬫満鍙风櫥褰曪紝2-淇敼涓汉璧勬枡锛3-鑰冭瘯鎶ュ悕锛 */ + @NotNull(message = "缂哄皯绫诲瀷", groups = {sendSmsCode.class}) + private Integer type; + + /** 鐘舵侊紙0-鏈娇鐢紝1-宸蹭娇鐢級 */ + private Integer status; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/StudentDTO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/StudentDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..06903b57b495d3061590bbc8c1095d6ace7b7812 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/StudentDTO.java @@ -0,0 +1,124 @@ +package com.ruoyi.hezhi.domain.dto; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 瀛﹀憳瀵硅薄 tb_student + * + * @author ruoyi + * @date 2024-10-21 + */ +@Getter +@Setter +@ToString +public class StudentDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** 瀛﹀憳璁よ瘉 */ + public interface authenticationStudent{} + /** 鎵嬫満鍙风櫥褰 */ + public interface userPhoneLogin{} + /** 韬唤璇佸彿鐮佺櫥褰 */ + public interface userIdentityCardLogin{} + /** 鎵惧洖瀵嗙爜 */ + public interface userRetrievePassword{} + /** 鐢ㄦ埛淇敼涓汉璧勬枡 */ + public interface updateMemberInfo{} + /** 鎵爜鐧诲綍杞 */ + public interface userCodeLogin{} + + /** 瀛﹀憳涓婚敭ID */ + private Long studentId; + + /** 鐢ㄦ埛ID */ + @NotNull(message = "璇峰厛鐧诲綍", groups = {updateMemberInfo.class}) + private Long memberUserId; + + /** 閭璇蜂汉ID */ + private Long parentId; + + /** 閭璇蜂汉缂栧彿 */ + private String parentNumber; + + /** 澶村儚 */ + private String headPortrait; + + /** 鏄电О */ + @NotBlank(message = "缂哄皯鏄电О", groups = {updateMemberInfo.class}) + private String nickName; + + /** 濮撳悕 */ + @NotBlank(message = "缂哄皯濮撳悕", groups = {authenticationStudent.class}) + private String studentName; + + /** 鎬у埆锛0-鐢凤紝1-濂筹紝2-鏈煡锛 */ + @NotNull(message = "缂哄皯鎬у埆", groups = {authenticationStudent.class, updateMemberInfo.class}) + private Integer sex; + + /** 鍑虹敓鏃ユ湡 */ + @NotBlank(message = "缂哄皯鍑虹敓鏃ユ湡", groups = {authenticationStudent.class}) + private String birthday; + + /** 鐢佃瘽/鎵嬫満 */ + @NotBlank(message = "缂哄皯鐢佃瘽/鎵嬫満", groups = {authenticationStudent.class, userPhoneLogin.class, userRetrievePassword.class, updateMemberInfo.class}) + private String phone; + + /** 韬唤璇佸彿 */ + @NotBlank(message = "缂哄皯韬唤璇佸彿", groups = {userIdentityCardLogin.class, userRetrievePassword.class}) + private String identityCard; + + /** 韬唤璇佸浗寰介潰锛堟闈級 */ + @NotBlank(message = "缂哄皯韬唤璇佸浗寰介潰锛堟闈級", groups = {authenticationStudent.class}) + private String identityCardBadge; + + /** 韬唤璇佷汉鍍忛潰锛堝弽闈級 */ + @NotBlank(message = "缂哄皯韬唤璇佷汉鍍忛潰锛堝弽闈級", groups = {authenticationStudent.class}) + private String identityCardPortrait; + + /** 姣曚笟璇佷功锛堝涓敤鑻辨枃閫楀彿闅斿紑锛 */ + // @NotBlank(message = "缂哄皯姣曚笟璇佷功", groups = {authenticationStudent.class}) + private String graduationCertificate; + + /** 瀛﹀巻锛0-鏃狅紝1-灏忓锛2-鍒濅腑锛3-楂樹腑锛4-涓笓锛5-涓撶锛6-鏈锛7-鐮旂┒鐢燂級 */ + @NotNull(message = "缂哄皯瀛﹀巻", groups = {updateMemberInfo.class}) + private String education; + + /** 楠岃瘉鐮乽uid */ + @NotBlank(message = "楠岃瘉鐮乽uid涓嶈兘涓虹┖", groups = {userPhoneLogin.class}) + private String uuid; + + /** 鍥惧舰楠岃瘉鐮 */ + @NotBlank(message = "鍥惧舰楠岃瘉鐮佷笉鑳戒负绌", groups = {userPhoneLogin.class, userRetrievePassword.class}) + private String code; + + /** 鐭俊楠岃瘉鐮 */ + @NotBlank(message = "鐭俊楠岄獙璇佺爜涓嶈兘涓虹┖", groups = {userPhoneLogin.class, updateMemberInfo.class}) + private String smsCode; + + /** 瀵嗙爜鏈姞瀵 */ + @NotBlank(message = "缂哄皯瀵嗙爜", groups = {userIdentityCardLogin.class, userRetrievePassword.class}) + private String passwordUnencrypted; + + /** 纭瀵嗙爜鏈姞瀵 */ + @NotBlank(message = "缂哄皯纭瀵嗙爜", groups = {userRetrievePassword.class}) + private String passwordUnencryptedConfirm; + + /** 姣曚笟闄㈡牎 */ + @NotBlank(message = "缂哄皯姣曚笟闄㈡牎", groups = {updateMemberInfo.class}) + private String graduationSchool; + + /** 姣曚笟鏃堕棿 */ + @NotBlank(message = "缂哄皯姣曚笟鏃堕棿", groups = {updateMemberInfo.class}) + private String graduationTime; + + /** 鎵爜鐧诲綍uuid */ + @NotBlank(message = "鎵爜涓嶈兘涓虹┖", groups = {userCodeLogin.class}) + private String scanUuid; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/StudyCenterDTO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/StudyCenterDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..b7089999f0700418bb9ab8d6a83ffb0444817d25 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/StudyCenterDTO.java @@ -0,0 +1,66 @@ +package com.ruoyi.hezhi.domain.dto; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 瀛︿範涓績瀵硅薄 tb_study_center + * + * @author ruoyi + * @date 2024-10-21 + */ +@Getter +@Setter +@ToString +public class StudyCenterDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** 瀛︿範涓績鍏ラ┗ */ + public interface joinInStudyCenter{} + + + /** 瀛︿範涓績涓婚敭ID */ + private Long studyCenterId; + + /** 璐熻矗浜 */ + @NotBlank(message = "缂哄皯璐熻矗浜", groups = {joinInStudyCenter.class}) + private String superintendent; + + /** 鐢佃瘽/鎵嬫満 */ + @NotBlank(message = "缂哄皯鐢佃瘽/鎵嬫満", groups = {joinInStudyCenter.class}) + private String phone; + + /** 浼佷笟鍚嶇О */ + @NotBlank(message = "缂哄皯浼佷笟鍚嶇О", groups = {joinInStudyCenter.class}) + private String enterpriseName; + + /** 瀛︿範涓績鍚嶇О */ + @NotBlank(message = "缂哄皯瀛︿範涓績鍚嶇О", groups = {joinInStudyCenter.class}) + private String studyCenterName; + + /** 钀ヤ笟鎵х収淇$敤浠g爜 */ + @NotBlank(message = "缂哄皯钀ヤ笟鎵х収淇$敤浠g爜", groups = {joinInStudyCenter.class}) + private String businessLicenseCreditCode; + + /** 钀ヤ笟鎵х収鍥撅紙澶氫釜鐢ㄨ嫳鏂囬楀彿闅斿紑锛 */ + @NotBlank(message = "缂哄皯钀ヤ笟鎵х収鍥", groups = {joinInStudyCenter.class}) + private String businessLicenseImg; + + /** 鐪両D */ + @NotNull(message = "缂哄皯鐪両D", groups = {joinInStudyCenter.class}) + private Long provinceId; + + /** 甯侷D */ + @NotNull(message = "缂哄皯甯侷D", groups = {joinInStudyCenter.class}) + private Long cityId; + + /** 鍖猴紙鍘匡級ID */ + @NotNull(message = "缂哄皯鍖猴紙鍘匡級ID", groups = {joinInStudyCenter.class}) + private Long areaId; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/TeacherAuthenticationDTO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/TeacherAuthenticationDTO.java new file mode 100644 index 0000000000000000000000000000000000000000..b5cb7f2b08ffa8ce7d76f9ae4666c6c3473f7540 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/dto/TeacherAuthenticationDTO.java @@ -0,0 +1,62 @@ +package com.ruoyi.hezhi.domain.dto; + +import lombok.Data; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.io.Serializable; +import java.util.Date; + +/** + * 鍚嶅笀璁よ瘉 + */ +@Data +public class TeacherAuthenticationDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 鐢ㄦ埛ID */ + @NotNull(message = "璇峰厛鐧诲綍") + private Long memberUserId; + + /** 濮撳悕 */ + @NotBlank(message = "濮撳悕涓嶈兘涓虹┖") + private String name; + + /** 鎬у埆锛0鐢 1濂筹級 */ + @NotNull(message = "鎬у埆涓嶈兘涓虹┖") + private Integer sex; + + /** 鐢熸棩 */ + @NotNull(message = "鐢熸棩涓嶈兘涓虹┖") + private Date birth; + + /** 鐢佃瘽 */ + @NotBlank(message = "鐢佃瘽涓嶈兘涓虹┖") + private String phone; + + /** 韬唤璇佸彿*/ + @NotBlank(message = "韬唤璇佸彿涓嶈兘涓虹┖") + private String identityCard; + + /** 韬唤璇佹闈 */ + @NotBlank(message = "韬唤璇佹闈笉鑳戒负绌") + private String idCardFront; + + /** 韬唤璇佸弽闈 */ + @NotBlank(message = "韬唤璇佸弽闈笉鑳戒负绌") + private String idCardBack; + + /** 姣曚笟璇佷功 */ + @NotBlank(message = "姣曚笟璇佷功涓嶈兘涓虹┖") + private String graduationCertificate; + + /** 鐮旂┒鎴愭灉 */ + @NotBlank(message = "鐮旂┒鎴愭灉涓嶈兘涓虹┖") + private String researchFindings; + + /** 鑽h獕璇佷功 */ + @NotBlank(message = "鑽h獕璇佷功涓嶈兘涓虹┖") + private String certificateUrl; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/BannerVO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/BannerVO.java new file mode 100644 index 0000000000000000000000000000000000000000..fb1c4848aa4fe20e7ab545b89c1f91956ea7a2b0 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/BannerVO.java @@ -0,0 +1,35 @@ +package com.ruoyi.hezhi.domain.vo; + +import lombok.Data; + +import java.io.Serializable; + +/** + * 杞挱鍥惧璞 tb_banner + * + * @author CC + * @date 2024-03-12 + */ +@Data +public class BannerVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 杞挱鍥 */ + private String bannerId; + + /** 鏍囬 */ + private String bannerTitle; + + /** 杞挱鍥剧墖 */ + private String bannerImg; + + /** 鏄惁璺宠浆 */ + private String jumpType; + + /** 璺宠浆閾炬帴 */ + private String bannerUrl; + + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/CareerExamListVO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/CareerExamListVO.java new file mode 100644 index 0000000000000000000000000000000000000000..5f70b852264169f07ba0af9390e20f842163e1c6 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/CareerExamListVO.java @@ -0,0 +1,21 @@ +package com.ruoyi.hezhi.domain.vo; + +import lombok.Data; + +/** + * @Author haoxuyang + * @Date 2024/12/19 18:31 + */ +@Data +public class CareerExamListVO { + private Long examId; + private String level; + private Long courseId; + private String examNo; + + private String majorName; + private String careerName; + private String logo; + private String name; + private Integer joinNum; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/CaseTypeVO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/CaseTypeVO.java new file mode 100644 index 0000000000000000000000000000000000000000..98b545ad45603276e92a0c10d2f1a72c3527a3ca --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/CaseTypeVO.java @@ -0,0 +1,30 @@ +package com.ruoyi.hezhi.domain.vo; + +import com.ruoyi.common.annotation.Excel; +import lombok.Data; + +import java.io.Serializable; + +/** + * 妗堜緥绫诲瀷瀵硅薄 tb_case_type + * + * @author ruoyi + * @date 2024-09-14 + */ +@Data +public class CaseTypeVO implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 妗堜緥绫诲瀷id */ + private Long caseTypeId; + + /** 妗堜緥绫诲瀷logo */ + @Excel(name = "妗堜緥绫诲瀷logo") + private String typeLogo; + + /** 妗堜緥绫诲瀷鍚 */ + @Excel(name = "妗堜緥绫诲瀷鍚") + private String typeName; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/CaseVO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/CaseVO.java new file mode 100644 index 0000000000000000000000000000000000000000..919696033738d842dda7e5b87481ff4f7a97237f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/CaseVO.java @@ -0,0 +1,53 @@ +package com.ruoyi.hezhi.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 妗堜緥瀵硅薄 tb_case + * + * @author ruoyi + * @date 2024-09-14 + */ +@Data +public class CaseVO implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 妗堜緥id */ + private Long caseId; + +// /** 妗堜緥绫诲瀷id */ +// @Excel(name = "妗堜緥绫诲瀷id") +// private Long caseTypeId; + + /** 鏍囬 */ + @Excel(name = "鏍囬") + private String title; + + /** 缂╃暐鍥 */ + @Excel(name = "缂╃暐鍥") + private String showImg; + + /** 绠杩 */ + @Excel(name = "绠杩") + private String prospectus; + + /** 鍙戝竷浜 */ + @Excel(name = "鍙戝竷浜") + private String publisher; + + /** 鍙戝竷鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm") + @Excel(name = "鍙戝竷鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm") + private Date publicationTime; + + /** 鍐呭 */ + private String content; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/CourseCardVO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/CourseCardVO.java new file mode 100644 index 0000000000000000000000000000000000000000..0c00daea3deddc08051f55229ea62980b6d67574 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/CourseCardVO.java @@ -0,0 +1,51 @@ +package com.ruoyi.hezhi.domain.vo; + +import com.ruoyi.common.annotation.Excel; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +/** + * 璇剧▼瀵硅薄 tb_course + * + * @author ruoyi + * @date 2024-09-14 + */ +@Getter +@Setter +@ToString +public class CourseCardVO implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 璇剧▼涓婚敭ID */ + private Long courseId; + + /** 璇剧▼鍒嗙被ID */ + @Excel(name = "璇剧▼鍒嗙被ID") + private Long classId; + + /** 璇剧▼绫诲瀷锛0-榛樿锛1-鎬濇斂绀鸿寖璇剧▼锛2-绮惧搧鍦ㄧ嚎璇剧▼锛 */ + @Excel(name = "璇剧▼绫诲瀷", readConverterExp = "0=-榛樿锛1-鎬濇斂绀鸿寖璇剧▼锛2-绮惧搧鍦ㄧ嚎璇剧▼") + private Integer classType; + + /** 灏侀潰鍥 */ + @Excel(name = "灏侀潰鍥") + private String coverImage; + + /** 璇剧▼鍚 */ + @Excel(name = "璇剧▼鍚") + private String courseName; + + /** 璇剧▼鏍囬 */ + @Excel(name = "璇剧▼鏍囬") + private String courseTitle; + + /** 鏍囩 */ + @Excel(name = "鏍囩") + private String tagName; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/CourseListVO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/CourseListVO.java new file mode 100644 index 0000000000000000000000000000000000000000..2fa53bfdae1dabd32dc7cd298eafc0fcac1d3d6a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/CourseListVO.java @@ -0,0 +1,36 @@ +package com.ruoyi.hezhi.domain.vo; + +import lombok.Data; + +/** + * @Author haoxuyang + * @Date 2024/12/20 9:41 + */ +@Data +public class CourseListVO { + + /** + * 璇剧▼id + */ + private Long courseId; + + /** + * 鏈烘瀯id + */ + private Long evaluateAgencyId; + + /** + * 璇剧▼鍚嶇О + */ + private String courseName; + + /** 鑰冭瘯鎵规 */ + private String examBatch; + + /** 鑰冭瘯ID */ + private Long examId; + + /** 鑰冭瘯绛夌骇 */ + private String level; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/DictParamVO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/DictParamVO.java new file mode 100644 index 0000000000000000000000000000000000000000..56d976ed4281871a99a7949c6d4d4d978d4b7342 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/DictParamVO.java @@ -0,0 +1,29 @@ +package com.ruoyi.hezhi.domain.vo; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +/** + * 瀛楀吀鍙傛暟VO + * @author Wzp + * @date 2024-02-28 + */ +@Getter +@Setter +@ToString +public class DictParamVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 瀛楀吀鍊 */ + private String dictValue; + + /** 瀛楀吀绫诲瀷 */ + private String dictType; + + /** 瀛楀吀鏍囩 */ + private String dictLabel; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/EvaluateAgencyVO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/EvaluateAgencyVO.java new file mode 100644 index 0000000000000000000000000000000000000000..768a9b60b7cf23f37e8c84927c79409555faeb83 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/EvaluateAgencyVO.java @@ -0,0 +1,28 @@ +package com.ruoyi.hezhi.domain.vo; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +/** + * 鏈烘瀯 + */ +@Getter +@Setter +@ToString +public class EvaluateAgencyVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 璇勪环鏈烘瀯涓婚敭ID */ + private Long evaluateAgencyId; + + /** 璇勪环鏈烘瀯鍚 */ + private String evaluateAgencyName; + + /** 璇勪环鏈烘瀯浠g爜 */ + private String evaluateAgencyCode; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/NewsVO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/NewsVO.java new file mode 100644 index 0000000000000000000000000000000000000000..52f229c60d23f5775473d774d4b9489d57a06186 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/NewsVO.java @@ -0,0 +1,49 @@ +package com.ruoyi.hezhi.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 鏂伴椈鍜ㄨ瀵硅薄 tb_news + * + * @author ruoyi + * @date 2024-09-14 + */ +@Data +public class NewsVO implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 鏂伴椈id */ + private Long newsId; + + /** 鏍囬 */ + @Excel(name = "鏍囬") + private String title; + + /** 缂╃暐鍥 */ + @Excel(name = "缂╃暐鍥") + private String showImg; + + /** 绠杩 */ + @Excel(name = "绠杩") + private String prospectus; + + /** 鍙戝竷浜 */ + @Excel(name = "鍙戝竷浜") + private String publisher; + + /** 鍙戝竷鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍙戝竷鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date publicationTime; + + /** 鍐呭 */ + private String content; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/NoticeVO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/NoticeVO.java new file mode 100644 index 0000000000000000000000000000000000000000..f19824112492e2ebd71c25ec1592e013d8b98aa1 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/NoticeVO.java @@ -0,0 +1,60 @@ +package com.ruoyi.hezhi.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 閫氱煡鍏憡瀵硅薄 tb_notice + * + * @author ruoyi + * @date 2024-09-14 + */ +@Data +public class NoticeVO implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 閫氱煡鍏憡id */ + private Long noticeId; + + /** 鏍囬 */ + @Excel(name = "鏍囬") + private String title; + + /** 缂╃暐鍥 */ + @Excel(name = "缂╃暐鍥") + private String showImg; + + /** 鍙戝竷浜 */ + @Excel(name = "鍙戝竷浜") + private String publisher; + + /** 鍙戝竷鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍙戝竷鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date publicationTime; + + /** 鍐呭 */ + private String content; + + /** 鍒犻櫎鏍囪(0-姝e父,1-鍒犻櫎) */ + private Integer delFlag; + + /** 鍒犻櫎鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍒犻櫎鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date deleteTime; + + /** 鍒犻櫎浜 */ + @Excel(name = "鍒犻櫎浜") + private String deleteBy; + + /** 鏄惁閲嶈锛0-鍚︼紝1-鏄級 */ + private Integer isMain; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/StudyCenterTeacherVO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/StudyCenterTeacherVO.java new file mode 100644 index 0000000000000000000000000000000000000000..98c11345e6feb90eb8f9aa6f7b67604f02db6c66 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/StudyCenterTeacherVO.java @@ -0,0 +1,25 @@ +package com.ruoyi.hezhi.domain.vo; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; + +/** + * 瀛︿範涓績鑰佸笀 + */ +@Getter +@Setter +@ToString +public class StudyCenterTeacherVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 鏁欏笀鍚嶇О */ + private String teacherName; + + /** 鏁欏笀鐢佃瘽 */ + private String teacherPhone; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/StudyCenterVO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/StudyCenterVO.java new file mode 100644 index 0000000000000000000000000000000000000000..f68654ab4fcb4dcb58f3f1afab08db78dada47ba --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/StudyCenterVO.java @@ -0,0 +1,27 @@ +package com.ruoyi.hezhi.domain.vo; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.util.List; + +/** + * 瀛︿範涓績 + */ +@Getter +@Setter +@ToString +public class StudyCenterVO implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 瀛︿範涓績涓婚敭ID */ + private Long studyCenterId; + + /** 瀛︿範涓績鍚 */ + private String studyCenterName; + + private List studyCenterTeacherList; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/TbExamRegistrationCodeVo.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/TbExamRegistrationCodeVo.java new file mode 100644 index 0000000000000000000000000000000000000000..8ebf75ba2805b37efbf580924113d6724428622e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/TbExamRegistrationCodeVo.java @@ -0,0 +1,17 @@ +package com.ruoyi.hezhi.domain.vo; + +import lombok.Data; + +@Data +public class TbExamRegistrationCodeVo { + + /** 鏈烘瀯id */ + private Long evaluateAencyId; + + /** 鑰冭瘯id */ + private Long examId; + + /** 鎵规搴忓彿 */ + private Integer batchIndex; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/TbExamRegistrationVO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/TbExamRegistrationVO.java new file mode 100644 index 0000000000000000000000000000000000000000..773d1e2f9ac2764aa5e1bff92d5c03ae592567c4 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/TbExamRegistrationVO.java @@ -0,0 +1,132 @@ +package com.ruoyi.hezhi.domain.vo; + +import com.ruoyi.common.annotation.Excel; +import lombok.Data; +import lombok.EqualsAndHashCode; + + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +@Data +@EqualsAndHashCode(of = {"identityCard", "registrationBatch", "careerName","agencyName","contactInformation"}) +public class TbExamRegistrationVO { + + /** 濮撳悕 */ + @Excel(name = "濮撳悕") + private String name; + + /** 鏇剧敤鍚 */ + @Excel(name = "鏇剧敤鍚") + private String formerName; + + /** 鎬у埆锛0-鐢凤紝1-濂筹級 */ + @Excel(name = "鎬у埆", readConverterExp = "0=鐢,1=濂") + private Integer sex; + + /** 姘戞棌 */ + @Excel(name = "姘戞棌") + private String nation; + + /** 韬唤璇佸彿 */ + @Excel(name = "韬唤璇佸彿") + @NotBlank(message = "韬唤璇佸彿涓嶈兘涓虹┖") + private String identityCard; + + /** 鍑虹敓鏃ユ湡 */ + @Excel(name = "鍑虹敓鏃ユ湡") + private String birthday; + + /** 绫嶈疮 */ + @Excel(name = "绫嶈疮") + private String nativePlace; + + /** 瀛﹀巻锛0-鏃狅紝1-灏忓锛2-鍒濅腑锛3-楂樹腑锛4-涓笓锛5-涓撶锛6-鏈锛7-鐮旂┒鐢燂級 */ + @Excel(name = "瀛﹀巻") + private String education; + + /** 涓撲笟 */ + @Excel(name = "涓撲笟") + private String major; + + /** 鎵鍦ㄥ鏍★紙姣曚笟瀛︽牎锛 */ + @Excel(name = "鎵鍦ㄥ鏍") + private String graduationSchool; + + /** 鍏ュ骞翠唤锛堟瘯涓氬勾浠斤級 */ + @Excel(name = "鍏ュ骞翠唤") + private String entranceYear; + + /** 鑱旂郴鏂瑰紡 */ + @Excel(name = "鑱旂郴鏂瑰紡") + @NotBlank(message = "鑱旂郴鏂瑰紡涓嶈兘涓虹┖锛屾涓哄鍛樻墜鏈哄彿") + private String contactInformation; + + /** 鐪佸悕 */ + @Excel(name = "鐪佸悕") + private String provinceName; + + /** 甯傚悕 */ + @Excel(name = "甯傚悕") + private String cityName; + + /** 鍖哄悕 */ + @Excel(name = "鍖哄悕") + private String areaName; + + /** 璇︾粏鍦板潃 */ + @Excel(name = "璇︾粏鍦板潃") + private String address; + + /** 鑱旂郴鐢佃瘽 */ + @Excel(name = "鑱旂郴鐢佃瘽") + private String contactPhone; + + /** 鏈烘瀯鍚嶇О */ + @Excel(name = "鏈烘瀯鍚嶇О") + @NotBlank(message = "鏈烘瀯鍚嶇О涓嶈兘涓虹┖") + private String agencyName; + + /** 鑱屼笟鍚嶇О */ + @Excel(name = "鑱屼笟鍚嶇О") + @NotBlank(message = "鑱屼笟鍚嶇О涓嶈兘涓虹┖") + private String careerName; + + /** 鑰冭瘯绛夌骇 */ + @Excel(name = "鑰冭瘯绛夌骇") + private String examLevel; + + /** 鎶ュ悕鎵规 */ + @Excel(name = "鎶ュ悕鎵规") + @NotBlank(message = "鎶ュ悕鎵规涓嶈兘涓虹┖") + private String registrationBatch; + + + /** 瀛︿範涓績 */ + @Excel(name = "瀛︿範涓績") + private String studyCenter; + + /** 鏈烘瀯浠g爜 */ + @Excel(name = "鏈烘瀯浠g爜") + private String agencyCode; + +// /** 璁㈠崟缂栧彿 */ +// @Excel(name = "璁㈠崟缂栧彿") +// private String orderNo; +// +// /** 鎶ュ悕璐圭敤 锛堝厓锛 */ +// @Excel(name = "鎶ュ悕璐圭敤 ") +// private BigDecimal orderPrice; +// +// /** 鏀粯閲戦 */ +// @Excel(name = "鏀粯閲戦") +// private BigDecimal payPrice; +// +// /** 鏀粯鏂瑰紡锛0-鏈敮浠橈紝1-寰俊锛2-鏀粯瀹濓級 */ +// @Excel(name = "鏀粯鏂瑰紡", readConverterExp = "0=-鏈敮浠橈紝1-寰俊锛2-鏀粯瀹") +// private Integer payType; + + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/TeacherDetailVO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/TeacherDetailVO.java new file mode 100644 index 0000000000000000000000000000000000000000..37feadcc1f6dbd671e115466ece9d8c2b8a30d05 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/TeacherDetailVO.java @@ -0,0 +1,29 @@ +package com.ruoyi.hezhi.domain.vo; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 鏁欏笀瀵硅薄 tb_teacher + * + * @author ruoyi + * @date 2024-09-14 + */ +@Data +public class TeacherDetailVO implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 鏁欏笀 */ + private TeacherVO teacher; + + /** 涓昏璇剧▼ */ + private List mainCourse; + + /** 杈呰璇剧▼ */ + public List subCourse; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/TeacherVO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/TeacherVO.java new file mode 100644 index 0000000000000000000000000000000000000000..157ca580f9aef05d53e656ec34f5072586d7de87 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/TeacherVO.java @@ -0,0 +1,57 @@ +package com.ruoyi.hezhi.domain.vo; + +import com.ruoyi.common.annotation.Excel; +import lombok.Data; + +import java.io.Serializable; + +/** + * 鏁欏笀瀵硅薄 tb_teacher + * + * @author ruoyi + * @date 2024-09-14 + */ +@Data +public class TeacherVO implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 鏁欏笀id */ + private Long teacherId; + + /** 濮撳悕 */ + @Excel(name = "濮撳悕") + private String teacherName; + + /** 澶村儚 */ + @Excel(name = "澶村儚") + private String idImg; + + /** 鍏ㄨ韩鐓 */ + @Excel(name = "鍏ㄨ韩鐓") + private String wholeImg; + + /** 姣曚笟闄㈡牎 */ + @Excel(name = "姣曚笟闄㈡牎") + private String collegeName; + + /** 鑱岀О */ + @Excel(name = "鑱岀О") + private String teacherTitle; + + /** 涓昏璇剧▼绫诲瀷id */ + @Excel(name = "涓昏璇剧▼绫诲瀷id") + private Long teacherTypeId; + + /** 涓昏璇剧▼绫诲瀷鍚*/ + private String teacherTypeName; + + /** 绠杩 */ + @Excel(name = "绠杩") + private String prospectus; + + /** 缁忓巻 */ + private String content; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/TopicImportTemplateVO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/TopicImportTemplateVO.java new file mode 100644 index 0000000000000000000000000000000000000000..d89a069afa1132e9ba2ee89c7ba18834b47feefd --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/TopicImportTemplateVO.java @@ -0,0 +1,153 @@ +package com.ruoyi.hezhi.domain.vo; + +import com.ruoyi.common.annotation.Excel; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @Author haoxuyang + * @Date 2025/1/20 15:39 + */ +@Data +public class TopicImportTemplateVO { + + /** + * 鑰冭瘯绫诲瀷 exam_type锛0-鑰冭瘯锛1-妯℃嫙鑰冭瘯锛 + */ + @Excel(name = "鑰冭瘯绫诲瀷", readConverterExp = "0=鑰冭瘯,1=妯℃嫙鑰冭瘯,3=鑰冭瘯銆佹ā鎷熻冭瘯") + private String examType; + + /** + * 鑰冭瘯 + */ + @Excel(name = "鑰冭瘯") + private String examName; + + /** + * 妯℃嫙鑰冭瘯 + */ + @Excel(name = "妯℃嫙鑰冭瘯") + private String subjectWarehouseClassName; + + /** + * 绛旀 + */ + @Excel(name = "绛旀") + private String answer; + + /** + * 绛夌骇 + */ + @Excel(name = "绛夌骇", readConverterExp = "1=鍒濈骇,2=涓骇,3=楂樼骇") + private Integer level; + + /** + * 鍒嗘暟 + */ + @Excel(name = "鍒嗘暟") + private BigDecimal score; + + /** + * 棰樼洰 + */ + @Excel(name = "棰樼洰") + private String question; + + /** + * 棰樼洰绫诲瀷锛1-鍗曢夛紝2-澶氶夛紝3-鍒ゆ柇锛4-璁鸿堪锛 + */ + @Excel(name = "绫诲瀷", readConverterExp = "1=鍗曢,2=澶氶,3=鍒ゆ柇,4=璁鸿堪") + private Integer subjectType; + + /** + * 璇曢璇﹁В + */ + @Excel(name = "璇曢璇﹁В") + private String subjectExplain; + + /** + * 閫夐」A + */ + @Excel(name = "閫夐」A") + private String subjectNameA; + + /** + * 閫夐」B + */ + @Excel(name = "閫夐」B") + private String subjectNameB; + + /** + * 閫夐」C + */ + @Excel(name = "閫夐」C") + private String subjectNameC; + + /** + * 閫夐」D + */ + @Excel(name = "閫夐」D") + private String subjectNameD; + + /** + * 閫夐」E + */ + @Excel(name = "閫夐」E") + private String subjectNameE; + + /** + * 閫夐」F + */ + @Excel(name = "閫夐」F") + private String subjectNameF; + + /** + * 閫夐」G + */ + @Excel(name = "閫夐」G") + private String subjectNameG; + + /** + * 閫夐」A鍒嗘暟 + */ + @Excel(name = "閫夐」A鍒嗘暟") + private BigDecimal fractionA; + + /** + * 閫夐」B鍒嗘暟 + */ + @Excel(name = "閫夐」B鍒嗘暟") + private BigDecimal fractionB; + + /** + * 閫夐」C鍒嗘暟 + */ + @Excel(name = "閫夐」C鍒嗘暟") + private BigDecimal fractionC; + + /** + * 閫夐」D鍒嗘暟 + */ + @Excel(name = "閫夐」D鍒嗘暟") + private BigDecimal fractionD; + + /** + * 閫夐」E鍒嗘暟 + */ + @Excel(name = "閫夐」E鍒嗘暟") + private BigDecimal fractionE; + + /** + * 閫夐」F鍒嗘暟 + */ + @Excel(name = "閫夐」F鍒嗘暟") + private BigDecimal fractionF; + + /** + * 閫夐」G鍒嗘暟 + */ + @Excel(name = "閫夐」G鍒嗘暟") + private BigDecimal fractionG; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/TrendsVO.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/TrendsVO.java new file mode 100644 index 0000000000000000000000000000000000000000..2abd96bc7b01dad39549f32d8089367d0c45d4f5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/domain/vo/TrendsVO.java @@ -0,0 +1,41 @@ +package com.ruoyi.hezhi.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 闄㈠唴鍔ㄦ佸璞 tb_trends + * + * @author ruoyi + * @date 2024-09-14 + */ +@Data +public class TrendsVO implements Serializable +{ + private static final long serialVersionUID = 1L; + + /** 鍔ㄦ乮d */ + private Long trendsId; + + /** 鏍囬 */ + @Excel(name = "鏍囬") + private String title; + + /** 鍙戝竷浜 */ + @Excel(name = "鍙戝竷浜") + private String publisher; + + /** 鍙戝竷鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "鍙戝竷鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd") + private Date publicationTime; + + /** 鍐呭 */ + @Excel(name = "鍐呭") + private String content; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbAuthorizeHonorMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbAuthorizeHonorMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..53485989a600513a024f1cc7c2936895b86867ac --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbAuthorizeHonorMapper.java @@ -0,0 +1,71 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbAuthorizeHonor; + +import java.util.List; +import java.util.Map; + +/** + * 鎺堟潈鑽h獕Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-16 + */ +public interface TbAuthorizeHonorMapper +{ + /** + * 鏌ヨ鎺堟潈鑽h獕 + * + * @param authorizeHonorId 鎺堟潈鑽h獕涓婚敭 + * @return 鎺堟潈鑽h獕 + */ + public TbAuthorizeHonor selectTbAuthorizeHonorByAuthorizeHonorId(Long authorizeHonorId); + + /** + * 鏌ヨ鎺堟潈鑽h獕鍒楄〃 + * + * @param tbAuthorizeHonor 鎺堟潈鑽h獕 + * @return 鎺堟潈鑽h獕闆嗗悎 + */ + public List selectTbAuthorizeHonorList(TbAuthorizeHonor tbAuthorizeHonor); + + /** + * 鏂板鎺堟潈鑽h獕 + * + * @param tbAuthorizeHonor 鎺堟潈鑽h獕 + * @return 缁撴灉 + */ + public int insertTbAuthorizeHonor(TbAuthorizeHonor tbAuthorizeHonor); + + /** + * 淇敼鎺堟潈鑽h獕 + * + * @param tbAuthorizeHonor 鎺堟潈鑽h獕 + * @return 缁撴灉 + */ + public int updateTbAuthorizeHonor(TbAuthorizeHonor tbAuthorizeHonor); + + /** + * 鍒犻櫎鎺堟潈鑽h獕 + * + * @param authorizeHonorId 鎺堟潈鑽h獕涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbAuthorizeHonorByAuthorizeHonorId(Long authorizeHonorId); + + /** + * 鎵归噺鍒犻櫎鎺堟潈鑽h獕 + * + * @param authorizeHonorIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbAuthorizeHonorByAuthorizeHonorIds(Long[] authorizeHonorIds); + + /** + * 鎺堟潈鍙婅崳瑾夊垪琛 + * + * @param params 鍙傛暟 + * @return 鎺堟潈鍙婅崳瑾夊垪琛 + */ + public List> getAuthorizeHonorList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbBannerMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbBannerMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..e1a05660da6dcc22bb97d2f5023b6e679b75c024 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbBannerMapper.java @@ -0,0 +1,83 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbBanner; +import com.ruoyi.hezhi.domain.dto.BannerDTO; +import com.ruoyi.hezhi.domain.vo.BannerVO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 杞挱鍥綧apper鎺ュ彛 + * + * @author CC + * @date 2024-03-12 + */ +public interface TbBannerMapper +{ + /** + * 鏌ヨ杞挱鍥 + * + * @param bannerId 杞挱鍥句富閿 + * @return 杞挱鍥 + */ + public TbBanner selectTbBannerByBannerId(String bannerId); + + /** + * 鏌ヨ杞挱鍥惧垪琛 + * + * @param tbBanner 杞挱鍥 + * @return 杞挱鍥鹃泦鍚 + */ + public List selectTbBannerList(TbBanner tbBanner); + + /** + * 鏂板杞挱鍥 + * + * @param tbBanner 杞挱鍥 + * @return 缁撴灉 + */ + public int insertTbBanner(TbBanner tbBanner); + + /** + * 楠岃瘉鎺掑簭 + * @param sort 鎺掑簭 + * @param id 缂栧彿 + * @return + */ + public int checkSort(@Param("sort") Long sort, @Param("id") String id, @Param("type") String type); + + /** + * 淇敼杞挱鍥 + * + * @param tbBanner 杞挱鍥 + * @return 缁撴灉 + */ + public int updateTbBanner(TbBanner tbBanner); + + /** + * 鍒犻櫎杞挱鍥 + * + * @param bannerId 杞挱鍥句富閿 + * @return 缁撴灉 + */ + public int deleteTbBannerByBannerId(@Param("bannerId") String bannerId, + @Param("deleteBy") String deleteBy); + + /** + * 鎵归噺鍒犻櫎杞挱鍥 + * + * @param bannerIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbBannerByBannerIds(@Param("bannerIds") String[] bannerIds, + @Param("deleteBy") String deleteBy); + + /** + * 鏌ヨ杞挱鍥惧垪琛 + * + * @param dto 杞挱鍥 + * @return 杞挱鍥鹃泦鍚 + */ + public List selectBannerListForXcxCommon(BannerDTO dto); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbCareerClassMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbCareerClassMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..98b41b6681eb6b46d3a30ab140c6c07ca1c8277e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbCareerClassMapper.java @@ -0,0 +1,71 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbCareerClass; + +import java.util.List; +import java.util.Map; + +/** + * 鑱屼笟鍒嗙被Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-10 + */ +public interface TbCareerClassMapper +{ + /** + * 鏌ヨ鑱屼笟鍒嗙被 + * + * @param careerId 鑱屼笟鍒嗙被涓婚敭 + * @return 鑱屼笟鍒嗙被 + */ + public TbCareerClass selectTbCareerClassByCareerId(Long careerId); + + /** + * 鏌ヨ鑱屼笟鍒嗙被鍒楄〃 + * + * @param tbCareerClass 鑱屼笟鍒嗙被 + * @return 鑱屼笟鍒嗙被闆嗗悎 + */ + public List selectTbCareerClassList(TbCareerClass tbCareerClass); + + /** + * 鏂板鑱屼笟鍒嗙被 + * + * @param tbCareerClass 鑱屼笟鍒嗙被 + * @return 缁撴灉 + */ + public int insertTbCareerClass(TbCareerClass tbCareerClass); + + /** + * 淇敼鑱屼笟鍒嗙被 + * + * @param tbCareerClass 鑱屼笟鍒嗙被 + * @return 缁撴灉 + */ + public int updateTbCareerClass(TbCareerClass tbCareerClass); + + /** + * 鍒犻櫎鑱屼笟鍒嗙被 + * + * @param careerId 鑱屼笟鍒嗙被涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbCareerClassByCareerId(Long careerId); + + /** + * 鎵归噺鍒犻櫎鑱屼笟鍒嗙被 + * + * @param careerIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbCareerClassByCareerIds(Long[] careerIds); + + /** + * 鑱屼笟鍒嗙被鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鑱屼笟鍒嗙被闆嗗悎鍒楄〃 + */ + public List> selectTbCareerClassMapList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbCaseMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbCaseMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..c7df01b551f4efc6ad6155e9263007def0d23c90 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbCaseMapper.java @@ -0,0 +1,70 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbCase; +import com.ruoyi.hezhi.domain.vo.CaseVO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 妗堜緥Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-09-14 + */ +public interface TbCaseMapper +{ + /** + * 鏌ヨ妗堜緥 + * + * @param caseId 妗堜緥涓婚敭 + * @return 妗堜緥 + */ + public TbCase selectTbCaseByCaseId(Long caseId); + + /** + * 鏌ヨ妗堜緥鍒楄〃 + * + * @param tbCase 妗堜緥 + * @return 妗堜緥闆嗗悎 + */ + public List selectTbCaseList(TbCase tbCase); + + /** + * 鏂板妗堜緥 + * + * @param tbCase 妗堜緥 + * @return 缁撴灉 + */ + public int insertTbCase(TbCase tbCase); + + /** + * 淇敼妗堜緥 + * + * @param tbCase 妗堜緥 + * @return 缁撴灉 + */ + public int updateTbCase(TbCase tbCase); + + /** + * 鍒犻櫎妗堜緥 + * + * @param caseId 妗堜緥涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbCaseByCaseId(Long caseId); + + /** + * 鎵归噺鍒犻櫎妗堜緥 + * + * @param caseIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbCaseByCaseIds(Long[] caseIds); + + /** + * 鑾峰彇妗堜緥鍒楄〃 by 鍒嗙被id + * @return + */ + public List selectCaseListByType(@Param("caseTypeId") Long caseTypeId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbCaseTypeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbCaseTypeMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..60a29e7f485d04d89617f9fa3030b16936677bcc --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbCaseTypeMapper.java @@ -0,0 +1,69 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbCaseType; +import com.ruoyi.hezhi.domain.vo.CaseTypeVO; + +import java.util.List; + +/** + * 妗堜緥绫诲瀷Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-09-14 + */ +public interface TbCaseTypeMapper +{ + /** + * 鏌ヨ妗堜緥绫诲瀷 + * + * @param caseTypeId 妗堜緥绫诲瀷涓婚敭 + * @return 妗堜緥绫诲瀷 + */ + public TbCaseType selectTbCaseTypeByCaseTypeId(Long caseTypeId); + + /** + * 鏌ヨ妗堜緥绫诲瀷鍒楄〃 + * + * @param tbCaseType 妗堜緥绫诲瀷 + * @return 妗堜緥绫诲瀷闆嗗悎 + */ + public List selectTbCaseTypeList(TbCaseType tbCaseType); + + /** + * 鏂板妗堜緥绫诲瀷 + * + * @param tbCaseType 妗堜緥绫诲瀷 + * @return 缁撴灉 + */ + public int insertTbCaseType(TbCaseType tbCaseType); + + /** + * 淇敼妗堜緥绫诲瀷 + * + * @param tbCaseType 妗堜緥绫诲瀷 + * @return 缁撴灉 + */ + public int updateTbCaseType(TbCaseType tbCaseType); + + /** + * 鍒犻櫎妗堜緥绫诲瀷 + * + * @param caseTypeId 妗堜緥绫诲瀷涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbCaseTypeByCaseTypeId(Long caseTypeId); + + /** + * 鎵归噺鍒犻櫎妗堜緥绫诲瀷 + * + * @param caseTypeIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbCaseTypeByCaseTypeIds(Long[] caseTypeIds); + + /** + * 鑾峰彇绫诲瀷鍒楄〃 + * @return + */ + public List getTypeList(); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbConferenceNoticeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbConferenceNoticeMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..bc6fd2a3076819dce760cc8a8672c21c066817ae --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbConferenceNoticeMapper.java @@ -0,0 +1,96 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbConferenceNotice; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 鏁板瓧鏁欒偛澶т細閫氱煡Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-29 + */ +public interface TbConferenceNoticeMapper +{ + /** + * 鏌ヨ鏁板瓧鏁欒偛澶т細閫氱煡 + * + * @param conferenceNoticeId 鏁板瓧鏁欒偛澶т細閫氱煡涓婚敭 + * @return 鏁板瓧鏁欒偛澶т細閫氱煡 + */ + public TbConferenceNotice selectTbConferenceNoticeByConferenceNoticeId(Long conferenceNoticeId); + + /** + * 鏌ヨ鏁板瓧鏁欒偛澶т細閫氱煡鍒楄〃 + * + * @param tbConferenceNotice 鏁板瓧鏁欒偛澶т細閫氱煡 + * @return 鏁板瓧鏁欒偛澶т細閫氱煡闆嗗悎 + */ + public List selectTbConferenceNoticeList(TbConferenceNotice tbConferenceNotice); + + /** + * 鏂板鏁板瓧鏁欒偛澶т細閫氱煡 + * + * @param tbConferenceNotice 鏁板瓧鏁欒偛澶т細閫氱煡 + * @return 缁撴灉 + */ + public int insertTbConferenceNotice(TbConferenceNotice tbConferenceNotice); + + /** + * 淇敼鏁板瓧鏁欒偛澶т細閫氱煡 + * + * @param tbConferenceNotice 鏁板瓧鏁欒偛澶т細閫氱煡 + * @return 缁撴灉 + */ + public int updateTbConferenceNotice(TbConferenceNotice tbConferenceNotice); + + /** + * 鍒犻櫎鏁板瓧鏁欒偛澶т細閫氱煡 + * + * @param conferenceNoticeId 鏁板瓧鏁欒偛澶т細閫氱煡涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbConferenceNoticeByConferenceNoticeId(Long conferenceNoticeId); + + /** + * 鎵归噺鍒犻櫎鏁板瓧鏁欒偛澶т細閫氱煡 + * + * @param conferenceNoticeIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbConferenceNoticeByConferenceNoticeIds(Long[] conferenceNoticeIds); + + /** + * 鏁板瓧鏁欒偛澶т細閫氱煡鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鏁板瓧鏁欒偛澶т細閫氱煡鍒楄〃 + */ + public List> getCourseTeacherList(Map params); + + /** + * 鏁板瓧鏁欒偛澶т細閫氱煡璇︽儏 + * + * @param params 鍙傛暟 + * @return 鏁板瓧鏁欒偛澶т細閫氱煡璇︽儏 + */ + public Map getConferenceNoticeInfo(Map params); + + /** + * 鏌ヨ鏈鏂版暟瀛楁暀鑲插ぇ浼氫細璁氱煡锛堜細璁紑濮嬫椂闂存湭寮濮嬶級 + * + * @return 鏁板瓧鏁欒偛澶т細閫氱煡 + */ + public TbConferenceNotice selectTbConferenceNoticeByNew(); + + /** + * 鏌ヨ寮濮嬫姤鍚嶇殑鏁板瓧鏁欒偛澶т細浼氳閫氱煡 + * + * @return 鏁板瓧鏁欒偛澶т細閫氱煡 + */ + public TbConferenceNotice selectTbConferenceNoticeByEnroll(); + + List selectTbConferenceNoticeBy(@Param("conferenceStartTime") String conferenceStartTime,@Param("conferenceEndTime") String conferenceEndTime); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbConferencePeopleMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbConferencePeopleMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..2b068a2c0daa2a0247c78ead4d044d76495cd956 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbConferencePeopleMapper.java @@ -0,0 +1,71 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbConferencePeople; + +import java.util.List; +import java.util.Map; + +/** + * 鏁板瓧鏁欒偛澶т細鍙備細鍢夊Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-29 + */ +public interface TbConferencePeopleMapper +{ + /** + * 鏌ヨ鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + * + * @param conferencePeopleId 鏁板瓧鏁欒偛澶т細鍙備細鍢夊涓婚敭 + * @return 鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + */ + public TbConferencePeople selectTbConferencePeopleByConferencePeopleId(Long conferencePeopleId); + + /** + * 鏌ヨ鏁板瓧鏁欒偛澶т細鍙備細鍢夊鍒楄〃 + * + * @param tbConferencePeople 鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + * @return 鏁板瓧鏁欒偛澶т細鍙備細鍢夊闆嗗悎 + */ + public List selectTbConferencePeopleList(TbConferencePeople tbConferencePeople); + + /** + * 鏂板鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + * + * @param tbConferencePeople 鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + * @return 缁撴灉 + */ + public int insertTbConferencePeople(TbConferencePeople tbConferencePeople); + + /** + * 淇敼鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + * + * @param tbConferencePeople 鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + * @return 缁撴灉 + */ + public int updateTbConferencePeople(TbConferencePeople tbConferencePeople); + + /** + * 鍒犻櫎鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + * + * @param conferencePeopleId 鏁板瓧鏁欒偛澶т細鍙備細鍢夊涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbConferencePeopleByConferencePeopleId(Long conferencePeopleId); + + /** + * 鎵归噺鍒犻櫎鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + * + * @param conferencePeopleIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbConferencePeopleByConferencePeopleIds(Long[] conferencePeopleIds); + + /** + * 鍙備細鍢夊鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鍙備細鍢夊鍒楄〃 + */ + public List> getConferencePeopleList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbConferenceRegistrationMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbConferenceRegistrationMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..ac18d436acb9c2eea0b3119a98cec2e8a0971a09 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbConferenceRegistrationMapper.java @@ -0,0 +1,73 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbConferenceRegistration; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 鍙備細鎶ュ悕Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-28 + */ +public interface TbConferenceRegistrationMapper +{ + /** + * 鏌ヨ鍙備細鎶ュ悕 + * + * @param conferenceRegistrationId 鍙備細鎶ュ悕涓婚敭 + * @return 鍙備細鎶ュ悕 + */ + public TbConferenceRegistration selectTbConferenceRegistrationByConferenceRegistrationId(Long conferenceRegistrationId); + + /** + * 鏌ヨ鍙備細鎶ュ悕鍒楄〃 + * + * @param tbConferenceRegistration 鍙備細鎶ュ悕 + * @return 鍙備細鎶ュ悕闆嗗悎 + */ + public List selectTbConferenceRegistrationList(TbConferenceRegistration tbConferenceRegistration); + + /** + * 鏂板鍙備細鎶ュ悕 + * + * @param tbConferenceRegistration 鍙備細鎶ュ悕 + * @return 缁撴灉 + */ + public int insertTbConferenceRegistration(TbConferenceRegistration tbConferenceRegistration); + + /** + * 淇敼鍙備細鎶ュ悕 + * + * @param tbConferenceRegistration 鍙備細鎶ュ悕 + * @return 缁撴灉 + */ + public int updateTbConferenceRegistration(TbConferenceRegistration tbConferenceRegistration); + + /** + * 鍒犻櫎鍙備細鎶ュ悕 + * + * @param conferenceRegistrationId 鍙備細鎶ュ悕涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbConferenceRegistrationByConferenceRegistrationId(Long conferenceRegistrationId); + + /** + * 鎵归噺鍒犻櫎鍙備細鎶ュ悕 + * + * @param conferenceRegistrationIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbConferenceRegistrationByConferenceRegistrationIds(Long[] conferenceRegistrationIds); + + /** + * 鏌ヨ鍙備細鎶ュ悕 + * + * @param memberUserId 鐢ㄦ埛ID + * @param conferenceNoticeId 浼氳閫氱煡ID + * @return 鍙備細鎶ュ悕 + */ + public TbConferenceRegistration selectTbConferenceRegistrationBy(@Param("memberUserId") Long memberUserId, @Param("conferenceNoticeId") Long conferenceNoticeId); + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbConfigMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbConfigMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..33907732719c67da2e3f408f463dd98d9d91e0e3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbConfigMapper.java @@ -0,0 +1,79 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbConfig; + +import java.util.List; +import java.util.Map; + +/** + * 鐩稿叧璁剧疆Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-22 + */ +public interface TbConfigMapper +{ + /** + * 鏌ヨ鐩稿叧璁剧疆 + * + * @param configId 鐩稿叧璁剧疆涓婚敭 + * @return 鐩稿叧璁剧疆 + */ + public TbConfig selectTbConfigByConfigId(Long configId); + + /** + * 鏌ヨ鐩稿叧璁剧疆鍒楄〃 + * + * @param tbConfig 鐩稿叧璁剧疆 + * @return 鐩稿叧璁剧疆闆嗗悎 + */ + public List selectTbConfigList(TbConfig tbConfig); + + /** + * 鏂板鐩稿叧璁剧疆 + * + * @param tbConfig 鐩稿叧璁剧疆 + * @return 缁撴灉 + */ + public int insertTbConfig(TbConfig tbConfig); + + /** + * 淇敼鐩稿叧璁剧疆 + * + * @param tbConfig 鐩稿叧璁剧疆 + * @return 缁撴灉 + */ + public int updateTbConfig(TbConfig tbConfig); + + /** + * 鍒犻櫎鐩稿叧璁剧疆 + * + * @param configId 鐩稿叧璁剧疆涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbConfigByConfigId(Long configId); + + /** + * 鎵归噺鍒犻櫎鐩稿叧璁剧疆 + * + * @param configIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbConfigByConfigIds(Long[] configIds); + + /** + * 鐩稿叧璁剧疆 + * + * @param params 鍙傛暟 + * @return 鐩稿叧璁剧疆璇︽儏 + */ + public Map getLiveBroadcastInfo(Map params); + + /** + * 鏌ヨ鐩稿叧璁剧疆 + * + * @param identifying 璁剧疆鏍囪瘑 + * @return 鐩稿叧璁剧疆 + */ + public TbConfig selectTbConfigByIdentifying(String identifying); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbContinuingEducationClassMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbContinuingEducationClassMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..d452e152eca09e2b5465eba007b5224d3bf55241 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbContinuingEducationClassMapper.java @@ -0,0 +1,86 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbContinuingEducationClass; + +import java.util.List; +import java.util.Map; + +/** + * 缁х画鏁欒偛鍒嗙被Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-23 + */ +public interface TbContinuingEducationClassMapper +{ + /** + * 鏌ヨ缁х画鏁欒偛鍒嗙被 + * + * @param continuingEducationClassId 缁х画鏁欒偛鍒嗙被涓婚敭 + * @return 缁х画鏁欒偛鍒嗙被 + */ + public TbContinuingEducationClass selectTbContinuingEducationClassByContinuingEducationClassId(Long continuingEducationClassId); + + /** + * 鏌ヨ缁х画鏁欒偛鍒嗙被鍒楄〃 + * + * @param tbContinuingEducationClass 缁х画鏁欒偛鍒嗙被 + * @return 缁х画鏁欒偛鍒嗙被闆嗗悎 + */ + public List selectTbContinuingEducationClassList(TbContinuingEducationClass tbContinuingEducationClass); + + /** + * 鏌ヨ缁х画鏁欒偛鍒嗙被鍒楄〃 + * + * @return 缁х画鏁欒偛鍒嗙被闆嗗悎 + */ + public List getAllContinuingEducationClassList(); + + /** + * 鏂板缁х画鏁欒偛鍒嗙被 + * + * @param tbContinuingEducationClass 缁х画鏁欒偛鍒嗙被 + * @return 缁撴灉 + */ + public int insertTbContinuingEducationClass(TbContinuingEducationClass tbContinuingEducationClass); + + /** + * 淇敼缁х画鏁欒偛鍒嗙被 + * + * @param tbContinuingEducationClass 缁х画鏁欒偛鍒嗙被 + * @return 缁撴灉 + */ + public int updateTbContinuingEducationClass(TbContinuingEducationClass tbContinuingEducationClass); + + /** + * 鍒犻櫎缁х画鏁欒偛鍒嗙被 + * + * @param continuingEducationClassId 缁х画鏁欒偛鍒嗙被涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbContinuingEducationClassByContinuingEducationClassId(Long continuingEducationClassId); + + /** + * 鎵归噺鍒犻櫎缁х画鏁欒偛鍒嗙被 + * + * @param continuingEducationClassIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbContinuingEducationClassByContinuingEducationClassIds(Long[] continuingEducationClassIds); + + /** + * 缁х画鏁欒偛鍒嗙被鍒楄〃 + * + * @param params 鍙傛暟 + * @return 缁х画鏁欒偛鍒嗙被鍒楄〃 + */ + public List> getContinuingEducationClassMapList(Map params); + + /** + * 缁х画鏁欒偛鍒楄〃 + * + * @param params 鍙傛暟 + * @return 缁х画鏁欒偛鍒楄〃 + */ + public List> getContinuingEducationList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbCooperatePartnerMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbCooperatePartnerMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..72f885b8d702e3a06ba5b63d956701be8ab808cd --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbCooperatePartnerMapper.java @@ -0,0 +1,71 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbCooperatePartner; + +import java.util.List; +import java.util.Map; + +/** + * 鍚堜綔浼欎即Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-16 + */ +public interface TbCooperatePartnerMapper +{ + /** + * 鏌ヨ鍚堜綔浼欎即 + * + * @param cooperatePartnerId 鍚堜綔浼欎即涓婚敭 + * @return 鍚堜綔浼欎即 + */ + public TbCooperatePartner selectTbCooperatePartnerByCooperatePartnerId(Long cooperatePartnerId); + + /** + * 鏌ヨ鍚堜綔浼欎即鍒楄〃 + * + * @param tbCooperatePartner 鍚堜綔浼欎即 + * @return 鍚堜綔浼欎即闆嗗悎 + */ + public List selectTbCooperatePartnerList(TbCooperatePartner tbCooperatePartner); + + /** + * 鏂板鍚堜綔浼欎即 + * + * @param tbCooperatePartner 鍚堜綔浼欎即 + * @return 缁撴灉 + */ + public int insertTbCooperatePartner(TbCooperatePartner tbCooperatePartner); + + /** + * 淇敼鍚堜綔浼欎即 + * + * @param tbCooperatePartner 鍚堜綔浼欎即 + * @return 缁撴灉 + */ + public int updateTbCooperatePartner(TbCooperatePartner tbCooperatePartner); + + /** + * 鍒犻櫎鍚堜綔浼欎即 + * + * @param cooperatePartnerId 鍚堜綔浼欎即涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbCooperatePartnerByCooperatePartnerId(Long cooperatePartnerId); + + /** + * 鎵归噺鍒犻櫎鍚堜綔浼欎即 + * + * @param cooperatePartnerIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbCooperatePartnerByCooperatePartnerIds(Long[] cooperatePartnerIds); + + /** + * 鍚堜綔浼欎即鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鍚堜綔浼欎即鍒楄〃 + */ + public List> getCooperatePartnerList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbCourseChapterMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbCourseChapterMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..5c14e0a7f557791487fc3a11b378f7ad50181bee --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbCourseChapterMapper.java @@ -0,0 +1,72 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbCourseChapter; + +import java.util.List; +import java.util.Map; + +/** + * 璇剧▼绔犺妭Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-09-14 + */ +public interface TbCourseChapterMapper +{ + /** + * 鏌ヨ璇剧▼绔犺妭 + * + * @param chapterId 璇剧▼绔犺妭涓婚敭 + * @return 璇剧▼绔犺妭 + */ + public TbCourseChapter selectTbCourseChapterByChapterId(Long chapterId); + + /** + * 鏌ヨ璇剧▼绔犺妭鍒楄〃 + * + * @param tbCourseChapter 璇剧▼绔犺妭 + * @return 璇剧▼绔犺妭闆嗗悎 + */ + public List selectTbCourseChapterList(TbCourseChapter tbCourseChapter); + + /** + * 鏂板璇剧▼绔犺妭 + * + * @param tbCourseChapter 璇剧▼绔犺妭 + * @return 缁撴灉 + */ + public int insertTbCourseChapter(TbCourseChapter tbCourseChapter); + + /** + * 淇敼璇剧▼绔犺妭 + * + * @param tbCourseChapter 璇剧▼绔犺妭 + * @return 缁撴灉 + */ + public int updateTbCourseChapter(TbCourseChapter tbCourseChapter); + + /** + * 鍒犻櫎璇剧▼绔犺妭 + * + * @param chapterId 璇剧▼绔犺妭涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbCourseChapterByChapterId(Long chapterId); + + /** + * 鎵归噺鍒犻櫎璇剧▼绔犺妭 + * + * @param chapterIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbCourseChapterByChapterIds(Long[] chapterIds); + + + /** + * 瑙嗛鍒楄〃 + * + * @param params 鍙傛暟 + * @return ok + */ + public List> getCourseChapterList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbCourseEvaluateMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbCourseEvaluateMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..f9d56691bd830b150d1bf1440ac6ddf19980f5c5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbCourseEvaluateMapper.java @@ -0,0 +1,79 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbCourseEvaluate; + +import java.util.List; +import java.util.Map; + +/** + * 璇剧▼璇勪环Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-09-14 + */ +public interface TbCourseEvaluateMapper +{ + /** + * 鏌ヨ璇剧▼璇勪环 + * + * @param courseEvaluateId 璇剧▼璇勪环涓婚敭 + * @return 璇剧▼璇勪环 + */ + public TbCourseEvaluate selectTbCourseEvaluateByCourseEvaluateId(Long courseEvaluateId); + + /** + * 鏌ヨ璇剧▼璇勪环鍒楄〃 + * + * @param tbCourseEvaluate 璇剧▼璇勪环 + * @return 璇剧▼璇勪环闆嗗悎 + */ + public List selectTbCourseEvaluateList(TbCourseEvaluate tbCourseEvaluate); + + /** + * 鏂板璇剧▼璇勪环 + * + * @param tbCourseEvaluate 璇剧▼璇勪环 + * @return 缁撴灉 + */ + public int insertTbCourseEvaluate(TbCourseEvaluate tbCourseEvaluate); + + /** + * 淇敼璇剧▼璇勪环 + * + * @param tbCourseEvaluate 璇剧▼璇勪环 + * @return 缁撴灉 + */ + public int updateTbCourseEvaluate(TbCourseEvaluate tbCourseEvaluate); + + /** + * 鍒犻櫎璇剧▼璇勪环 + * + * @param courseEvaluateId 璇剧▼璇勪环涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbCourseEvaluateByCourseEvaluateId(Long courseEvaluateId); + + /** + * 鎵归噺鍒犻櫎璇剧▼璇勪环 + * + * @param courseEvaluateIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbCourseEvaluateByCourseEvaluateIds(Long[] courseEvaluateIds); + + /** + * 鏌ヨ璇剧▼璇勪环鍒楄〃 + * + * @param params 鍙傛暟 + * @return ok + */ + public List> getCourseEvaluateList(Map params); + + /** + * 鏌ヨ璇剧▼璇勪环璇勫垎 + * + * @param params 鍙傛暟 + * @return ok + */ + public Map getCourseEvaluateScore(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbCourseMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbCourseMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..9c88ce18dff78214fdab4c65d3783db2009674c3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbCourseMapper.java @@ -0,0 +1,117 @@ +package com.ruoyi.hezhi.mapper; + +import com.github.pagehelper.PageInfo; +import com.ruoyi.hezhi.domain.TbCourse; +import com.ruoyi.hezhi.domain.TbSubjectWarehouseClass; +import com.ruoyi.hezhi.domain.vo.CourseListVO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 璇剧▼Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-09-14 + */ +public interface TbCourseMapper +{ + /** + * 鏌ヨ璇剧▼ + * + * @param courseId 璇剧▼涓婚敭 + * @return 璇剧▼ + */ + public TbCourse selectTbCourseByCourseId(Long courseId); + + /** + * 鏌ヨ璇剧▼鍒楄〃 + * + * @param tbCourse 璇剧▼ + * @return 璇剧▼闆嗗悎 + */ + public List selectTbCourseList(TbCourse tbCourse); + /** + * 鏌ヨ璇剧▼鍒楄〃 + * + * @param courseName 璇剧▼ + * @return 璇剧▼闆嗗悎 + */ + public TbCourse selectTbCourseByName(String courseName); + + /** + * 鏌ヨ璇剧▼鍒楄〃 + * + * @return 璇剧▼闆嗗悎 + */ + public List getAllCourseList(); + + /** + * 鏂板璇剧▼ + * + * @param tbCourse 璇剧▼ + * @return 缁撴灉 + */ + public int insertTbCourse(TbCourse tbCourse); + + /** + * 淇敼璇剧▼ + * + * @param tbCourse 璇剧▼ + * @return 缁撴灉 + */ + public int updateTbCourse(TbCourse tbCourse); + + /** + * 鍒犻櫎璇剧▼ + * + * @param courseId 璇剧▼涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbCourseByCourseId(Long courseId); + + /** + * 鎵归噺鍒犻櫎璇剧▼ + * + * @param courseIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbCourseByCourseIds(Long[] courseIds); + + /** + * 鏌ヨ璇剧▼鍒楄〃 + * + * @param params 鍙傛暟 + * @return ok + */ + public List> getCourseList(Map params); + + /** + * 鏌ヨ璇剧▼璇︽儏 + * + * @param params 鍙傛暟 + * @return ok + */ + public Map getCourseInfo(Map params); + + /** + * 娴忚閲+1 + * + * @param courseId 璇剧▼涓婚敭 + * @return 缁撴灉 + */ + public int addViewsNum(Long courseId); + + /** + * 鏍规嵁鏈烘瀯id鏌ヨ璇剧▼鍒楄〃 + * + * @param evaluateAgencyId 鏈烘瀯鍚嶇О + * @return List + */ + List getCourseListByEvaluateAgency(@Param("evaluateAgencyId") Long evaluateAgencyId); + + public List> getCourseNameListForInput(@Param("searchValue") String searchValue); + + TbCourse selectTbCourseByNameAndEva(@Param("courseName") String courseName,@Param("evaluateAgencyId") Long evaluateAgencyId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbDownloadMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbDownloadMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..17052e6ec4101d0851b34a021e25038a03c68ce3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbDownloadMapper.java @@ -0,0 +1,71 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbDownload; + +import java.util.List; +import java.util.Map; + +/** + * 鍦ㄧ嚎涓嬭浇Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-30 + */ +public interface TbDownloadMapper +{ + /** + * 鏌ヨ鍦ㄧ嚎涓嬭浇 + * + * @param downloadId 鍦ㄧ嚎涓嬭浇涓婚敭 + * @return 鍦ㄧ嚎涓嬭浇 + */ + public TbDownload selectTbDownloadByDownloadId(Long downloadId); + + /** + * 鏌ヨ鍦ㄧ嚎涓嬭浇鍒楄〃 + * + * @param tbDownload 鍦ㄧ嚎涓嬭浇 + * @return 鍦ㄧ嚎涓嬭浇闆嗗悎 + */ + public List selectTbDownloadList(TbDownload tbDownload); + + /** + * 鏂板鍦ㄧ嚎涓嬭浇 + * + * @param tbDownload 鍦ㄧ嚎涓嬭浇 + * @return 缁撴灉 + */ + public int insertTbDownload(TbDownload tbDownload); + + /** + * 淇敼鍦ㄧ嚎涓嬭浇 + * + * @param tbDownload 鍦ㄧ嚎涓嬭浇 + * @return 缁撴灉 + */ + public int updateTbDownload(TbDownload tbDownload); + + /** + * 鍒犻櫎鍦ㄧ嚎涓嬭浇 + * + * @param downloadId 鍦ㄧ嚎涓嬭浇涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbDownloadByDownloadId(Long downloadId); + + /** + * 鎵归噺鍒犻櫎鍦ㄧ嚎涓嬭浇 + * + * @param downloadIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbDownloadByDownloadIds(Long[] downloadIds); + + /** + * 鍦ㄧ嚎涓嬭浇鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鍦ㄧ嚎涓嬭浇鍒楄〃鍒楄〃 + */ + public List> getDownloadList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbEnterpriseProgressMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbEnterpriseProgressMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..9ee07cc58c2a88947107c8dd1e5e20d14c32e7c2 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbEnterpriseProgressMapper.java @@ -0,0 +1,70 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbEnterpriseProgress; + +import java.util.List; +import java.util.Map; + +/** + * 浼佷笟鍘嗙▼Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-21 + */ +public interface TbEnterpriseProgressMapper +{ + /** + * 鏌ヨ浼佷笟鍘嗙▼ + * + * @param enterpriseProgressId 浼佷笟鍘嗙▼涓婚敭 + * @return 浼佷笟鍘嗙▼ + */ + public TbEnterpriseProgress selectTbEnterpriseProgressByEnterpriseProgressId(Long enterpriseProgressId); + + /** + * 鏌ヨ浼佷笟鍘嗙▼鍒楄〃 + * + * @param tbEnterpriseProgress 浼佷笟鍘嗙▼ + * @return 浼佷笟鍘嗙▼闆嗗悎 + */ + public List selectTbEnterpriseProgressList(TbEnterpriseProgress tbEnterpriseProgress); + + /** + * 鏂板浼佷笟鍘嗙▼ + * + * @param tbEnterpriseProgress 浼佷笟鍘嗙▼ + * @return 缁撴灉 + */ + public int insertTbEnterpriseProgress(TbEnterpriseProgress tbEnterpriseProgress); + + /** + * 淇敼浼佷笟鍘嗙▼ + * + * @param tbEnterpriseProgress 浼佷笟鍘嗙▼ + * @return 缁撴灉 + */ + public int updateTbEnterpriseProgress(TbEnterpriseProgress tbEnterpriseProgress); + + /** + * 鍒犻櫎浼佷笟鍘嗙▼ + * + * @param enterpriseProgressId 浼佷笟鍘嗙▼涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbEnterpriseProgressByEnterpriseProgressId(Long enterpriseProgressId); + + /** + * 鎵归噺鍒犻櫎浼佷笟鍘嗙▼ + * + * @param enterpriseProgressIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbEnterpriseProgressByEnterpriseProgressIds(Long[] enterpriseProgressIds); + + /** + * 浼佷笟鍘嗙▼鍒楄〃 + * + * @return 浼佷笟鍘嗙▼鍒楄〃 + */ + public List> getEnterpriseProgressList(); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbEvaluateAgencyClassMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbEvaluateAgencyClassMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..cb2aa58246583e0d449826d13270415399a23913 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbEvaluateAgencyClassMapper.java @@ -0,0 +1,71 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbEvaluateAgencyClass; + +import java.util.List; +import java.util.Map; + +/** + * 璇勪环鏈烘瀯鍒嗙被Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-23 + */ +public interface TbEvaluateAgencyClassMapper +{ + /** + * 鏌ヨ璇勪环鏈烘瀯鍒嗙被 + * + * @param evaluateAgencyClassId 璇勪环鏈烘瀯鍒嗙被涓婚敭 + * @return 璇勪环鏈烘瀯鍒嗙被 + */ + public TbEvaluateAgencyClass selectTbEvaluateAgencyClassByEvaluateAgencyClassId(Long evaluateAgencyClassId); + + /** + * 鏌ヨ璇勪环鏈烘瀯鍒嗙被鍒楄〃 + * + * @param tbEvaluateAgencyClass 璇勪环鏈烘瀯鍒嗙被 + * @return 璇勪环鏈烘瀯鍒嗙被闆嗗悎 + */ + public List selectTbEvaluateAgencyClassList(TbEvaluateAgencyClass tbEvaluateAgencyClass); + + /** + * 鏂板璇勪环鏈烘瀯鍒嗙被 + * + * @param tbEvaluateAgencyClass 璇勪环鏈烘瀯鍒嗙被 + * @return 缁撴灉 + */ + public int insertTbEvaluateAgencyClass(TbEvaluateAgencyClass tbEvaluateAgencyClass); + + /** + * 淇敼璇勪环鏈烘瀯鍒嗙被 + * + * @param tbEvaluateAgencyClass 璇勪环鏈烘瀯鍒嗙被 + * @return 缁撴灉 + */ + public int updateTbEvaluateAgencyClass(TbEvaluateAgencyClass tbEvaluateAgencyClass); + + /** + * 鍒犻櫎璇勪环鏈烘瀯鍒嗙被 + * + * @param evaluateAgencyClassId 璇勪环鏈烘瀯鍒嗙被涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbEvaluateAgencyClassByEvaluateAgencyClassId(Long evaluateAgencyClassId); + + /** + * 鎵归噺鍒犻櫎璇勪环鏈烘瀯鍒嗙被 + * + * @param evaluateAgencyClassIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbEvaluateAgencyClassByEvaluateAgencyClassIds(Long[] evaluateAgencyClassIds); + + /** + * 璇勪环鏈烘瀯鍒嗙被鍒楄〃 + * + * @param params 鍙傛暟 + * @return 璇勪环鏈烘瀯鍒嗙被鍒楄〃 + */ + public List> getEvaluateAgencyClassMapList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbEvaluateAgencyMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbEvaluateAgencyMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..e5b8344bd824ec1bf4a93f868de808936ddccb87 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbEvaluateAgencyMapper.java @@ -0,0 +1,104 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbEvaluateAgency; +import com.ruoyi.hezhi.domain.TbEvaluateAgencyClass; +import com.ruoyi.hezhi.domain.vo.EvaluateAgencyVO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 璇勪环鏈烘瀯Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-23 + */ +public interface TbEvaluateAgencyMapper +{ + /** + * 鏌ヨ璇勪环鏈烘瀯 + * + * @param evaluateAgencyId 璇勪环鏈烘瀯涓婚敭 + * @return 璇勪环鏈烘瀯 + */ + public TbEvaluateAgency selectTbEvaluateAgencyByEvaluateAgencyId(Long evaluateAgencyId); + + /** + * 鏌ヨ璇勪环鏈烘瀯鍒楄〃 + * + * @param tbEvaluateAgency 璇勪环鏈烘瀯 + * @return 璇勪环鏈烘瀯闆嗗悎 + */ + public List selectTbEvaluateAgencyList(TbEvaluateAgency tbEvaluateAgency); + + /** + * 鏂板璇勪环鏈烘瀯 + * + * @param tbEvaluateAgency 璇勪环鏈烘瀯 + * @return 缁撴灉 + */ + public int insertTbEvaluateAgency(TbEvaluateAgency tbEvaluateAgency); + + /** + * 淇敼璇勪环鏈烘瀯 + * + * @param tbEvaluateAgency 璇勪环鏈烘瀯 + * @return 缁撴灉 + */ + public int updateTbEvaluateAgency(TbEvaluateAgency tbEvaluateAgency); + + /** + * 鍒犻櫎璇勪环鏈烘瀯 + * + * @param evaluateAgencyId 璇勪环鏈烘瀯涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbEvaluateAgencyByEvaluateAgencyId(Long evaluateAgencyId); + + /** + * 鎵归噺鍒犻櫎璇勪环鏈烘瀯 + * + * @param evaluateAgencyIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbEvaluateAgencyByEvaluateAgencyIds(Long[] evaluateAgencyIds); + + /** + * 鑾峰彇绛涢夊垪琛 + * @return 缁撴灉 + */ + public List getSelectList(); + + /** + * 璇勪环鏈烘瀯鍒楄〃 + * + * @param params 鍙傛暟 + * @return 璇勪环鏈烘瀯鍒楄〃 + */ + public List> getEvaluateAgencyList(Map params); + + /** + * 鑾峰彇鏈夋帹鑽愯绋嬬殑璇勪环鏈烘瀯鍒楄〃 + * @return 缁撴灉 + */ + public List> getEvaluateAgencyListHasCourse(Map params); + + /** + * 璇勪环鏈烘瀯璇︽儏 + * + * @param params 鍙傛暟 + * @return 璇勪环鏈烘瀯璇︽儏 + */ + public Map getEvaluateAgencyInfo(Map params); + + /** + * 鏍规嵁璇剧▼绫诲瀷鑾峰彇鏈烘瀯鍒楄〃 + * @param classType 1-鑱屼笟鑰冭瘯锛2-鑱屼笟鎶鑳 + * @return 缁撴灉 + */ + public List> getEvaluateAgencyListByClassType(@Param("classType") Integer classType); + + // 鏍规嵁璇勪环鏈烘瀯鍚嶇О鑾峰彇璇勪环鏈烘瀯 + TbEvaluateAgency selectTbEvaluateAgencyByName(String agencyName); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamBatchMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamBatchMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..aae6ca64bf2e8ce7410d62818531d2b5ca98d939 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamBatchMapper.java @@ -0,0 +1,116 @@ +package com.ruoyi.hezhi.mapper; + +import java.util.List; +import com.ruoyi.hezhi.domain.TbExamBatch; +import org.apache.ibatis.annotations.Param; + +/** + * 鑰冭瘯鎵规Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-12-21 + */ +public interface TbExamBatchMapper +{ + /** + * 鏌ヨ鑰冭瘯鎵规 + * + * @param examBatchId 鑰冭瘯鎵规涓婚敭 + * @return 鑰冭瘯鎵规 + */ + public TbExamBatch selectTbExamBatchByExamBatchId(Long examBatchId); + + /** + * 鏌ヨ鑰冭瘯鎵规鍒楄〃 + * + * @param tbExamBatch 鑰冭瘯鎵规 + * @return 鑰冭瘯鎵规闆嗗悎 + */ + public List selectTbExamBatchList(TbExamBatch tbExamBatch); + + /** + * 鏌ヨ鑰冭瘯鎵规 + * + * @param + * @return 鑰冭瘯鎵规 + */ + public TbExamBatch selectTbExamBatchByExamIdAndUserId(@Param("examId") Long examId,@Param("memberUserId") Long memberUserId); + + /** + * 鏂板鑰冭瘯鎵规 + * + * @param tbExamBatch 鑰冭瘯鎵规 + * @return 缁撴灉 + */ + public int insertTbExamBatch(TbExamBatch tbExamBatch); + + /** + * 淇敼鑰冭瘯鎵规 + * + * @param tbExamBatch 鑰冭瘯鎵规 + * @return 缁撴灉 + */ + public int updateTbExamBatch(TbExamBatch tbExamBatch); + + /** + * 鍒犻櫎鑰冭瘯鎵规 + * + * @param examBatchId 鑰冭瘯鎵规涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbExamBatchByExamBatchId(Long examBatchId); + + /** + * 鎵归噺鍒犻櫎鑰冭瘯鎵规 + * + * @param examBatchIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbExamBatchByExamBatchIds(Long[] examBatchIds); + + /** + * 鍒犻櫎鑰冭瘯鎵规 + * + * @param examId 鑰冭瘯ID + * @return 缁撴灉 + */ + public int deleteByExamId(@Param("examId") Long examId); + + /** + * 鑰冭瘯鎵规 + * @param examId 鑰冭瘯ID + * @return 缁撴灉 + */ + public List getByExamId(@Param("examId") Long examId); + /** + * 鑰冭瘯鎵规 + * @param examBatch 鑰冭瘯ID + * @return 缁撴灉 + */ + public TbExamBatch getByexamBatch(@Param("examBatch") String examBatch); + + /** + * 鑰冭瘯鎵规 + * @param examId 鑰冭瘯ID + * @param examBatchEarly 鑰冭瘯鎻愬墠澶╂暟 + * @return 缁撴灉 + */ + public List getEnableByExamId(@Param("examId") Long examId, + @Param("examBatchEarly") Integer examBatchEarly); + + /** + * 鎵归噺鏂板鑰冭瘯鎵规 + * @param tbExamBatchList 鍒楄〃 + * @return 缁撴灉 + */ + public int insertTbExamBatchBatch(@Param("tbExamBatchList") List tbExamBatchList); + + /** + * 鏌ヨ鑰冭瘯鎵规 + * @param examId 鑰冭瘯ID + * @param batchIndex 鎵规搴忓彿 + * @return 缁撴灉 + */ + public TbExamBatch getByExamIdBatchIndex(@Param("examId") Long examId, + @Param("batchIndex") Integer batchIndex); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamCourseMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamCourseMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..7d90896b85cfce1295c06a8862b2cd0d9ed870be --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamCourseMapper.java @@ -0,0 +1,98 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbExamCourse; +import com.ruoyi.hezhi.domain.vo.TbExamRegistrationCodeVo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 鑰冭瘯璇剧▼Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-12-18 + */ +public interface TbExamCourseMapper +{ + + /** + * 鑾峰彇鑰冭瘯璇剧▼鍒楄〃 + * @param studyCenterId 瀛︿範涓績ID + * @param examId 鑰冭瘯ID + * @param subjectWarehouseClassId 妯℃嫙鑰冭瘯ID + * @param liveBroadcastId 鐩存挱ID + * @return 缁撴灉 + */ + public List getExamCourseList(@Param("studyCenterId") Long studyCenterId, + @Param("examId") Long examId, + @Param("subjectWarehouseClassId")Long subjectWarehouseClassId, + @Param("liveBroadcastId")Long liveBroadcastId); + + /** + * 鏂板鑰冭瘯璇剧▼ + * + * @param tbExamCourse 鑰冭瘯璇剧▼ + * @return 缁撴灉 + */ + public int insertTbExamCourse(TbExamCourse tbExamCourse); + + /** + * 淇敼鑰冭瘯璇剧▼ + * + * @param tbExamCourse 鑰冭瘯璇剧▼ + * @return 缁撴灉 + */ + public int updateTbExamCourse(TbExamCourse tbExamCourse); + + /** + * 鍒犻櫎鑰冭瘯璇剧▼ + * + * @param studyCenterId 瀛︿範涓績ID + * @param examId 鑰冭瘯ID + * @param subjectWarehouseClassId 妯℃嫙鑰冭瘯ID + * @param liveBroadcastId 鐩存挱ID + * @return 缁撴灉 + */ + public int deleteTbExamCourse(@Param("studyCenterId") Long studyCenterId, + @Param("examId") Long examId, + @Param("subjectWarehouseClassId") Long subjectWarehouseClassId, + @Param("liveBroadcastId")Long liveBroadcastId); + + public List> getEvaluateAgencyList(@Param("studyCenterId") Long studyCenterId); + + public List> getStudyCenterCourseList(@Param("studyCenterId") Long studyCenterId, + @Param("evaluateAgencyId") Long evaluateAgencyId); + + /** + * 鑾峰彇鑰冭瘯璇剧▼鍒楄〃 + * @param courseId 璇剧▼ID + * @return 缁撴灉 + */ + public TbExamCourse getExamCourseDetail(@Param("courseId") Long courseId); + + /** + * 鏍规嵁鑰冭瘯ID 鏍规嵁璇剧▼ID + * @param courseId 璇剧▼ID + * @return 缁撴灉 + */ + public TbExamCourse getSubjectWarehouseClassIdByCourseId(@Param("courseId") Long courseId); + + /** + * 鏍规嵁鑰冭瘯ID 鏍规嵁璇剧▼ID + * @param courseId 璇剧▼ID + * @return 缁撴灉 + */ + public TbExamCourse getExamIdByCourseId(@Param("courseId") Long courseId); + + + /** + * 鏍规嵁鏈烘瀯鍚嶇О鍜岃亴涓氬悕鏌ヨ鑰冭瘯id鏈烘瀯id + * @param agencyName 鏈烘瀯鍚嶇О + * @param careerName 鑱屼笟鍚嶇О + * @return 缁撴灉 + */ + TbExamRegistrationCodeVo selectExamRegistrationCode(@Param("agencyName") String agencyName + , @Param("careerName") String careerName + , @Param("registrationBatch")String registrationBatch); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamFileMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamFileMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..7fe9bb8eec8fa15ab432bee63f43c750c2c6f178 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamFileMapper.java @@ -0,0 +1,71 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbExamFile; + +import java.util.List; +import java.util.Map; + +/** + * 鑰冭瘯鎷嶆憚鏂囦欢Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-14 + */ +public interface TbExamFileMapper +{ + /** + * 鏌ヨ鑰冭瘯鎷嶆憚鏂囦欢 + * + * @param examFileId 鑰冭瘯鎷嶆憚鏂囦欢涓婚敭 + * @return 鑰冭瘯鎷嶆憚鏂囦欢 + */ + public TbExamFile selectTbExamFileByExamFileId(Long examFileId); + + /** + * 鏌ヨ鑰冭瘯鎷嶆憚鏂囦欢鍒楄〃 + * + * @param tbExamFile 鑰冭瘯鎷嶆憚鏂囦欢 + * @return 鑰冭瘯鎷嶆憚鏂囦欢闆嗗悎 + */ + public List selectTbExamFileList(TbExamFile tbExamFile); + + /** + * 鏂板鑰冭瘯鎷嶆憚鏂囦欢 + * + * @param tbExamFile 鑰冭瘯鎷嶆憚鏂囦欢 + * @return 缁撴灉 + */ + public int insertTbExamFile(TbExamFile tbExamFile); + + /** + * 淇敼鑰冭瘯鎷嶆憚鏂囦欢 + * + * @param tbExamFile 鑰冭瘯鎷嶆憚鏂囦欢 + * @return 缁撴灉 + */ + public int updateTbExamFile(TbExamFile tbExamFile); + + /** + * 鍒犻櫎鑰冭瘯鎷嶆憚鏂囦欢 + * + * @param examFileId 鑰冭瘯鎷嶆憚鏂囦欢涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbExamFileByExamFileId(Long examFileId); + + /** + * 鎵归噺鍒犻櫎鑰冭瘯鎷嶆憚鏂囦欢 + * + * @param examFileIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbExamFileByExamFileIds(Long[] examFileIds); + + /** + * 鎴戠殑姝e紡鑰冭瘯鎷嶇収鍒楄〃 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public List> getSubjectFormalPhotographList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..50257bebdfe2fe0f395256afd158d487547a86ec --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamMapper.java @@ -0,0 +1,89 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbExam; +import com.ruoyi.hezhi.domain.TbExamCourse; +import com.ruoyi.hezhi.domain.vo.CareerExamListVO; + +import java.util.List; +import java.util.Map; + +/** + * 鑰冭瘯Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-12 + */ +public interface TbExamMapper +{ + /** + * 鏌ヨ鑰冭瘯 + * + * @param examId 鑰冭瘯涓婚敭 + * @return 鑰冭瘯 + */ + public TbExam selectTbExamByExamId(Long examId); + + /** + * 鏌ヨ鑰冭瘯鍒楄〃 + * + * @param tbExam 鑰冭瘯 + * @return 鑰冭瘯闆嗗悎 + */ + public List selectTbExamList(TbExam tbExam); + + /** + * 鏌ヨ鑰冭瘯鍒楄〃 + * + * @param tbExam 鑰冭瘯 + * @return 鑰冭瘯闆嗗悎 + */ + public List selectTbExamListByName(TbExam tbExam); + + /** + * 鏂板鑰冭瘯 + * + * @param tbExam 鑰冭瘯 + * @return 缁撴灉 + */ + public int insertTbExam(TbExam tbExam); + + /** + * 淇敼鑰冭瘯 + * + * @param tbExam 鑰冭瘯 + * @return 缁撴灉 + */ + public int updateTbExam(TbExam tbExam); + + /** + * 鍒犻櫎鑰冭瘯 + * + * @param examId 鑰冭瘯涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbExamByExamId(Long examId); + + /** + * 鎵归噺鍒犻櫎鑰冭瘯 + * + * @param examIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbExamByExamIds(Long[] examIds); + + /** + * 鑱屼笟鑰冭瘯鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鑱屼笟鑰冭瘯鍒楄〃 + */ + public List getCareerExamList(Map params); + + /** + * 鑱屼笟鑰冭瘯璇︽儏 + * + * @param params 鍙傛暟 + * @return 鑱屼笟鑰冭瘯璇︽儏 + */ + public Map getCareerExamInfo(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamNoticeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamNoticeMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..a92fc24c8f4b8fe0270504416d49a86fce45ac56 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamNoticeMapper.java @@ -0,0 +1,80 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbExamNotice; + +import java.util.List; +import java.util.Map; + +/** + * 鑰冭瘯閫氱煡Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-16 + */ +public interface TbExamNoticeMapper +{ + /** + * 鏌ヨ鑰冭瘯閫氱煡 + * + * @param examNoticeId 鑰冭瘯閫氱煡涓婚敭 + * @return 鑰冭瘯閫氱煡 + */ + public TbExamNotice selectTbExamNoticeByExamNoticeId(Long examNoticeId); + + /** + * 鏌ヨ鑰冭瘯閫氱煡鍒楄〃 + * + * @param tbExamNotice 鑰冭瘯閫氱煡 + * @return 鑰冭瘯閫氱煡闆嗗悎 + */ + public List selectTbExamNoticeList(TbExamNotice tbExamNotice); + + /** + * 鏂板鑰冭瘯閫氱煡 + * + * @param tbExamNotice 鑰冭瘯閫氱煡 + * @return 缁撴灉 + */ + public int insertTbExamNotice(TbExamNotice tbExamNotice); + + /** + * 淇敼鑰冭瘯閫氱煡 + * + * @param tbExamNotice 鑰冭瘯閫氱煡 + * @return 缁撴灉 + */ + public int updateTbExamNotice(TbExamNotice tbExamNotice); + + /** + * 鍒犻櫎鑰冭瘯閫氱煡 + * + * @param examNoticeId 鑰冭瘯閫氱煡涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbExamNoticeByExamNoticeId(Long examNoticeId); + + /** + * 鎵归噺鍒犻櫎鑰冭瘯閫氱煡 + * + * @param examNoticeIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbExamNoticeByExamNoticeIds(Long[] examNoticeIds); + + /** + * 鑰冭瘯閫氱煡鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鑰冭瘯閫氱煡鍒楄〃 + */ + public List> getExamNoticeList(Map params); + + + /** + * 鑰冭瘯閫氱煡璇︽儏 + * + * @param params 鍙傛暟 + * @return 鑰冭瘯閫氱煡璇︽儏 + */ + public Map getExamNoticeInfo(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamRegistrationMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamRegistrationMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..079789389073cd7f4baff451cd3320f0db5229b2 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamRegistrationMapper.java @@ -0,0 +1,158 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbExamRegistration; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 鑰冭瘯鎶ュ悕Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-05 + */ +public interface TbExamRegistrationMapper +{ + + + /** + * 鏌ヨ鑰冭瘯鎶ュ悕 + * + * @param examRegistrationId 鑰冭瘯鎶ュ悕涓婚敭 + * @return 鑰冭瘯鎶ュ悕 + */ + public TbExamRegistration selectTbExamRegistrationByExamRegistrationId(Long examRegistrationId); + /** + * 鏌ヨ鍙戣揣淇℃伅 + * + * @param examRegistrationId 鑰冭瘯鎶ュ悕涓婚敭 + * @return 鑰冭瘯鎶ュ悕 + */ + public TbExamRegistration selectTbExamRegistrationByExamRegistrationIdFahuo(Long examRegistrationId); + + /** + * 鏌ヨ鑰冭瘯鎶ュ悕鍒楄〃 + * + * @param tbExamRegistration 鑰冭瘯鎶ュ悕 + * @return 鑰冭瘯鎶ュ悕闆嗗悎 + */ + public List selectTbExamRegistrationList(TbExamRegistration tbExamRegistration); + + /** + * 鏂板鑰冭瘯鎶ュ悕 + * + * @param tbExamRegistration 鑰冭瘯鎶ュ悕 + * @return 缁撴灉 + */ + public int insertTbExamRegistration(TbExamRegistration tbExamRegistration); + + /** + * 淇敼鑰冭瘯鎶ュ悕 + * + * @param tbExamRegistration 鑰冭瘯鎶ュ悕 + * @return 缁撴灉 + */ + public int updateTbExamRegistration(TbExamRegistration tbExamRegistration); + + /** + * 鍒犻櫎鑰冭瘯鎶ュ悕 + * + * @param examRegistrationId 鑰冭瘯鎶ュ悕涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbExamRegistrationByExamRegistrationId(Long examRegistrationId); + + /** + * 鎵归噺鍒犻櫎鑰冭瘯鎶ュ悕 + * + * @param examRegistrationIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbExamRegistrationByExamRegistrationIds(Long[] examRegistrationIds); + + /** + * 鏌ヨ鑰冭瘯鎶ュ悕淇℃伅锛堢敤鎴稩D銆佽冭瘯ID锛 + * + * @param memberUserId 鐢ㄦ埛ID + * @param examId 鑰冭瘯ID + * @return 鑰冭瘯鎶ュ悕 + */ + public TbExamRegistration selectTbExamRegistrationByUserIdExamId(@Param("memberUserId") Long memberUserId, @Param("examId") Long examId); + + /** + * 鎴戠殑鑰冭瘯鍒楄〃 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public List> getMemberExamList(Map params); + + /** + * 鎴戠殑鑰冭瘯璇︽儏 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public Map getMemberExamInfo(Map params); + + /** + * 鏌ヨ鑰冭瘯鎶ュ悕璇︽儏 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public Map getExamRegistrationInfo(Map params); + + + /** + * 瀛︿範璁″垝-鎴戠殑璇句欢鍒楄〃 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public List> getMemberCoursewareList(Map params); + + /** + * 鎴戠殑鎶ュ悕琛ㄣ佸噯鑰冭瘉銆佽瘉涔 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public Map getMemberCertificateMore(Map params); + + /** + * 鎶ュ悕鑰冭瘯鍗冲皢寮濮嬪脊绐楀垪琛 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public Map getStartNowPopupList(Map params); + + /** + * 鏌ヨ鑰冭瘯鎶ュ悕淇℃伅锛堢敤鎴稩D銆佽冭瘯ID锛 + * + * @param memberUserId 鐢ㄦ埛ID + * @param examRegistrationId 鑰冭瘯鎶ュ悕ID + * @return 鑰冭瘯鎶ュ悕 + */ + public TbExamRegistration getByExamRegistrationId(@Param("memberUserId") Long memberUserId, + @Param("examRegistrationId") Long examRegistrationId); + + /** + * 鏌ヨ鑰冭瘯鎶ュ悕淇℃伅 + * + * @param shippingOrderId 蹇掕鍗旾D + * @return 鑰冭瘯鎶ュ悕 + */ + public TbExamRegistration getByShippingOrderId(@Param("shippingOrderId") String shippingOrderId); + + + TbExamRegistration selectTbExamRegistrationByCode(TbExamRegistration tbExamRegistration); + + int importDataList(@Param("list") List listTbExamRegistration); + + int updateTbExamRegistrationByOrderNos(@Param("orderNos") List orderNos); + + List selectCourseIsPay(@Param("memberUserId") String memberUserId,@Param("courseIdList") List courseIdList); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamSimulateInfoMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamSimulateInfoMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..5ee87fd87990ccc996252ec62db446f603fef04e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamSimulateInfoMapper.java @@ -0,0 +1,123 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbExamSimulateInfo; +import org.apache.ibatis.annotations.Param; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + +/** + * 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-11 + */ +public interface TbExamSimulateInfoMapper +{ + /** + * 鏌ヨ鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + * + * @param examSimulateInfoId 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏涓婚敭 + * @return 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + */ + public TbExamSimulateInfo selectTbExamSimulateInfoByExamSimulateInfoId(Long examSimulateInfoId); + + /** + * 鏌ヨ鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏鍒楄〃 + * + * @param tbExamSimulateInfo 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + * @return 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏闆嗗悎 + */ + public List selectTbExamSimulateInfoList(TbExamSimulateInfo tbExamSimulateInfo); + + /** + * 鏂板鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + * + * @param tbExamSimulateInfo 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + * @return 缁撴灉 + */ + public int insertTbExamSimulateInfo(TbExamSimulateInfo tbExamSimulateInfo); + + /** + * 淇敼鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + * + * @param tbExamSimulateInfo 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + * @return 缁撴灉 + */ + public int updateTbExamSimulateInfo(TbExamSimulateInfo tbExamSimulateInfo); + + /** + * 鍒犻櫎鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + * + * @param examSimulateInfoId 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbExamSimulateInfoByExamSimulateInfoId(Long examSimulateInfoId); + + /** + * 鎵归噺鍒犻櫎鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + * + * @param examSimulateInfoIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbExamSimulateInfoByExamSimulateInfoIds(Long[] examSimulateInfoIds); + + /** + * 鏌ヨ妯℃嫙鑰冭瘯鑰冪敓鍙婅冭瘯淇℃伅 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public Map getSimulateSubjectAllInfo(Map params); + + /** + * 璁$畻鎬诲垎 + * + * @param examSimulateInfoId 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏涓婚敭 + * @return 缁撴灉 + */ + public BigDecimal countTotalScore(Long examSimulateInfoId); + + /** + * 鏌ヨ姝e紡鑰冭瘯鑰冪敓鍙婅冭瘯淇℃伅 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public Map getFormalSubjectAllInfo(Map params); + + /** + * 鏌ヨ鏈澶х殑鑰冨彴缂栧彿 + * + * @param examId 鑰冭瘯ID + * @return 缁撴灉 + */ + public Integer selectMaxExamPlatformNumber(Long examId); + + /** + * 鏌ヨ鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏锛堜繚鐣欐暣鏁帮級 + * + * @param examSimulateInfoId 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏涓婚敭 + * @return 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + */ + public TbExamSimulateInfo selectTbExamSimulateInfoByExamSimulateInfoIdRetain(Long examSimulateInfoId); + + /** + * 妯℃嫙鑰冭瘯涓婃鑰冭瘯鐘舵 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public Map getSimulateSubjectUp(Map params); + + /** + * 鏌ヨ鑰冭瘯璇︽儏锛堢敤鎴稩D銆佽冭瘯ID锛 + * + * @param memberUserId 鐢ㄦ埛ID + * @param examId 鑰冭瘯鎶ュ悕ID + * @return 鑰冭瘯鎶ュ悕 + */ + public TbExamSimulateInfo getByMemberUserId(@Param("memberUserId") Long memberUserId, + @Param("examId") Long examId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamSubjectAnswerMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamSubjectAnswerMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..9344b177ee5c601f3521743ae4535a9ff6514685 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamSubjectAnswerMapper.java @@ -0,0 +1,115 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbExamSubjectAnswer; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 鑰冭瘯棰樼洰绛旀閫夐」Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-04 + */ +public interface TbExamSubjectAnswerMapper +{ + /** + * 鏌ヨ鑰冭瘯棰樼洰绛旀閫夐」 + * + * @param examSubjectAnswerId 鑰冭瘯棰樼洰绛旀閫夐」涓婚敭 + * @return 鑰冭瘯棰樼洰绛旀閫夐」 + */ + public TbExamSubjectAnswer selectTbExamSubjectAnswerByExamSubjectAnswerId(Long examSubjectAnswerId); + + /** + * 鏌ヨ鑰冭瘯棰樼洰绛旀閫夐」鍒楄〃 + * + * @param tbExamSubjectAnswer 鑰冭瘯棰樼洰绛旀閫夐」 + * @return 鑰冭瘯棰樼洰绛旀閫夐」闆嗗悎 + */ + public List selectTbExamSubjectAnswerList(TbExamSubjectAnswer tbExamSubjectAnswer); + + /** + * 鏂板鑰冭瘯棰樼洰绛旀閫夐」 + * + * @param tbExamSubjectAnswer 鑰冭瘯棰樼洰绛旀閫夐」 + * @return 缁撴灉 + */ + public int insertTbExamSubjectAnswer(TbExamSubjectAnswer tbExamSubjectAnswer); + + /** + * 淇敼鑰冭瘯棰樼洰绛旀閫夐」 + * + * @param tbExamSubjectAnswer 鑰冭瘯棰樼洰绛旀閫夐」 + * @return 缁撴灉 + */ + public int updateTbExamSubjectAnswer(TbExamSubjectAnswer tbExamSubjectAnswer); + + /** + * 鍒犻櫎鑰冭瘯棰樼洰绛旀閫夐」 + * + * @param examSubjectAnswerId 鑰冭瘯棰樼洰绛旀閫夐」涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbExamSubjectAnswerByExamSubjectAnswerId(Long examSubjectAnswerId); + + /** + * 鎵归噺鍒犻櫎鑰冭瘯棰樼洰绛旀閫夐」 + * + * @param examSubjectAnswerIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbExamSubjectAnswerByExamSubjectAnswerIds(Long[] examSubjectAnswerIds); + + /** + * 鎵归噺鏂板鑰冭瘯棰樼洰绛旀閫夐」 + * + * @param list 鑰冭瘯棰樼洰绛旀閫夐」 + * @return 缁撴灉 + */ + public int batchInsertTbExamSubjectAnswer(List list); + + /** + * 鏌ヨ绛旀ID闆嗗悎鍜岀瓟妗堥泦鍚 + * + * @param examSubjectId 鑰冭瘯棰樼洰涓婚敭ID + * @param examSubjectNo 鑰冭瘯棰樼洰缂栧彿 + * @return 缁撴灉 + */ + public Map selectAnswerIdsAndAnswer(@Param("examSubjectId") Long examSubjectId, @Param("examSubjectNo") String examSubjectNo); + + /** + * 鏌ヨ鑰冭瘯棰樼洰绛旀閫夐」鍒楄〃锛堣冭瘯棰樼洰缂栧彿锛 + * + * @param examSubjectNo 鑰冭瘯棰樼洰缂栧彿 + * @return 鑰冭瘯棰樼洰绛旀閫夐」闆嗗悎 + */ + public List selectTbExamSubjectAnswerListBy(String examSubjectNo); + + /** + * 鎵归噺鍒犻櫎鑰冭瘯棰樼洰绛旀閫夐」淇℃伅锛堣冭瘯棰樼洰缂栧彿锛 + * + * @param examSubjectNo 鑰冭瘯棰樼洰缂栧彿 + * @return 缁撴灉 + */ + public int batchDeleteTbExamSubjectAnswerByExamSubjectNo(String examSubjectNo); + + /** + * 鏌ヨ閫夐」鍒楄〃 + * + * @param examSubjectId 鑰冭瘯棰樼洰涓婚敭ID + * @param examSubjectNo 鑰冭瘯棰樼洰缂栧彿 + * @return 缁撴灉 + */ + public List> selectSelectList(@Param("examSubjectId") Long examSubjectId, @Param("examSubjectNo") String examSubjectNo); + + /** + * 鏌ヨ绛旀鍒楄〃 + * + * @param examSubjectId 鑰冭瘯棰樼洰涓婚敭ID + * @param examSubjectNo 鑰冭瘯棰樼洰缂栧彿 + * @return 缁撴灉 + */ + public List> selectAnswerList(@Param("examSubjectId") Long examSubjectId, @Param("examSubjectNo") String examSubjectNo); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamSubjectFormalMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamSubjectFormalMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..52320b7d75c355147073fa7fba1e5c351e80af39 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamSubjectFormalMapper.java @@ -0,0 +1,88 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbExamSubject; +import com.ruoyi.hezhi.domain.TbExamSubjectFormal; + +import java.util.List; +import java.util.Map; + +/** + * 姝e紡鑰冭瘯棰樼洰Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-13 + */ +public interface TbExamSubjectFormalMapper +{ + /** + * 鏌ヨ姝e紡鑰冭瘯棰樼洰 + * + * @param examSubjectFormalId 姝e紡鑰冭瘯棰樼洰涓婚敭 + * @return 姝e紡鑰冭瘯棰樼洰 + */ + public TbExamSubjectFormal selectTbExamSubjectFormalByExamSubjectFormalId(Long examSubjectFormalId); + + /** + * 鏌ヨ姝e紡鑰冭瘯棰樼洰鍒楄〃 + * + * @param tbExamSubjectFormal 姝e紡鑰冭瘯棰樼洰 + * @return 姝e紡鑰冭瘯棰樼洰闆嗗悎 + */ + public List selectTbExamSubjectFormalList(TbExamSubjectFormal tbExamSubjectFormal); + + /** + * 鏂板姝e紡鑰冭瘯棰樼洰 + * + * @param tbExamSubjectFormal 姝e紡鑰冭瘯棰樼洰 + * @return 缁撴灉 + */ + public int insertTbExamSubjectFormal(TbExamSubjectFormal tbExamSubjectFormal); + + /** + * 淇敼姝e紡鑰冭瘯棰樼洰 + * + * @param tbExamSubjectFormal 姝e紡鑰冭瘯棰樼洰 + * @return 缁撴灉 + */ + public int updateTbExamSubjectFormal(TbExamSubjectFormal tbExamSubjectFormal); + + /** + * 鍒犻櫎姝e紡鑰冭瘯棰樼洰 + * + * @param examSubjectFormalId 姝e紡鑰冭瘯棰樼洰涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbExamSubjectFormalByExamSubjectFormalId(Long examSubjectFormalId); + + /** + * 鎵归噺鍒犻櫎姝e紡鑰冭瘯棰樼洰 + * + * @param examSubjectFormalIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbExamSubjectFormalByExamSubjectFormalIds(Long[] examSubjectFormalIds); + + /** + * 鍒犻櫎姝e紡鑰冭瘯棰樼洰 + * + * @param examId 鑰冭瘯ID + * @return 缁撴灉 + */ + public int deleteTbExamSubjectFormalByExamId(Long examId); + + /** + * 鎵归噺鏂板妯℃嫙鑰冭瘯棰樼洰 + * + * @param list 鑰冭瘯棰樼洰鍒楄〃 + * @return 缁撴灉 + */ + public int batchInsertTbExamSubjectFormalBy(List list); + + /** + * 鏌ヨ鎵鏈夐鐩 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public List> getAllTbExamSubjectFormal(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamSubjectMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamSubjectMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..fac939895c43cf72ebab81ed8249e6b49ff9adac --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamSubjectMapper.java @@ -0,0 +1,126 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbExamSubject; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 鑰冭瘯棰樼洰Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-04 + */ +public interface TbExamSubjectMapper +{ + /** + * 鏌ヨ鑰冭瘯棰樼洰 + * + * @param examSubjectId 鑰冭瘯棰樼洰涓婚敭 + * @return 鑰冭瘯棰樼洰 + */ + public TbExamSubject selectTbExamSubjectByExamSubjectId(Long examSubjectId); + + /** + * 鏌ヨ鑰冭瘯棰樼洰鍒楄〃 + * + * @param tbExamSubject 鑰冭瘯棰樼洰 + * @return 鑰冭瘯棰樼洰闆嗗悎 + */ + public List selectTbExamSubjectList(TbExamSubject tbExamSubject); + + /** + * 鏂板鑰冭瘯棰樼洰 + * + * @param tbExamSubject 鑰冭瘯棰樼洰 + * @return 缁撴灉 + */ + public int insertTbExamSubject(TbExamSubject tbExamSubject); + + /** + * 淇敼鑰冭瘯棰樼洰 + * + * @param tbExamSubject 鑰冭瘯棰樼洰 + * @return 缁撴灉 + */ + public int updateTbExamSubject(TbExamSubject tbExamSubject); + + /** + * 鍒犻櫎鑰冭瘯棰樼洰 + * + * @param examSubjectId 鑰冭瘯棰樼洰涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbExamSubjectByExamSubjectId(Long examSubjectId); + + /** + * 鎵归噺鍒犻櫎鑰冭瘯棰樼洰 + * + * @param examSubjectIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbExamSubjectByExamSubjectIds(Long[] examSubjectIds); + + /** + * 鏌ヨ鎵鏈夐鐩 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + List> queryByParam(Map params); + + /** + * 棰樺簱璇︽儏 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public Map getExamSubjectInfo(Map params); + + /** + * 涓撻」缁冧範锛堣冭瘯鏍囬锛 + * + * @return 缁撴灉 + */ + public List> getSpecialPracticeList(Map params); + + /** + * 鏌ヨ缁冧範棰樻暟閲 + * + * @return 缁撴灉 + */ + public List> getPracticeListCount(Map params); + + /** + * 绔犺妭缁冧範锛堣冭瘯鏍囬锛 + * + * @return 缁撴灉 + */ + public List> getMajorPracticeList(); + + /** + * 绛涢夋潯浠朵笅鍗曢夈佸閫夈佸垽鏂佽杩伴鐩暟 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public Map getExamSubjectNum(Map params); + + /** + * 闅忔満鐢熸垚鑰冭瘯棰樼洰鍒楄〃 + * + * @param params 鑰冭瘯棰樼洰 + * @return 鑰冭瘯棰樼洰闆嗗悎 + */ + public List randomGenerateTbExamSubjectList(Map params); + + /** + * 鏌ヨ棰樼洰 + * @param examId 鑰冭瘯ID + * @param subjectWarehouseClassId 妯℃嫙鑰冭瘯ID + * @return 缁撴灉 + */ + public List getExamSubjectList(@Param("examId") Long examId, + @Param("subjectWarehouseClassId") Long subjectWarehouseClassId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamSubjectSimulateMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamSubjectSimulateMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..c046e0c21f867e0f21d5ccbeabbfcee5eab8eab2 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExamSubjectSimulateMapper.java @@ -0,0 +1,88 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbExamSubject; +import com.ruoyi.hezhi.domain.TbExamSubjectSimulate; + +import java.util.List; +import java.util.Map; + +/** + * 妯℃嫙鑰冭瘯棰樼洰Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-08 + */ +public interface TbExamSubjectSimulateMapper +{ + /** + * 鏌ヨ妯℃嫙鑰冭瘯棰樼洰 + * + * @param examSubjectSimulateId 妯℃嫙鑰冭瘯棰樼洰涓婚敭 + * @return 妯℃嫙鑰冭瘯棰樼洰 + */ + public TbExamSubjectSimulate selectTbExamSubjectSimulateByExamSubjectSimulateId(Long examSubjectSimulateId); + + /** + * 鏌ヨ妯℃嫙鑰冭瘯棰樼洰鍒楄〃 + * + * @param tbExamSubjectSimulate 妯℃嫙鑰冭瘯棰樼洰 + * @return 妯℃嫙鑰冭瘯棰樼洰闆嗗悎 + */ + public List selectTbExamSubjectSimulateList(TbExamSubjectSimulate tbExamSubjectSimulate); + + /** + * 鏂板妯℃嫙鑰冭瘯棰樼洰 + * + * @param tbExamSubjectSimulate 妯℃嫙鑰冭瘯棰樼洰 + * @return 缁撴灉 + */ + public int insertTbExamSubjectSimulate(TbExamSubjectSimulate tbExamSubjectSimulate); + + /** + * 淇敼妯℃嫙鑰冭瘯棰樼洰 + * + * @param tbExamSubjectSimulate 妯℃嫙鑰冭瘯棰樼洰 + * @return 缁撴灉 + */ + public int updateTbExamSubjectSimulate(TbExamSubjectSimulate tbExamSubjectSimulate); + + /** + * 鍒犻櫎妯℃嫙鑰冭瘯棰樼洰 + * + * @param examSubjectSimulateId 妯℃嫙鑰冭瘯棰樼洰涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbExamSubjectSimulateByExamSubjectSimulateId(Long examSubjectSimulateId); + + /** + * 鎵归噺鍒犻櫎妯℃嫙鑰冭瘯棰樼洰 + * + * @param examSubjectSimulateIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbExamSubjectSimulateByExamSubjectSimulateIds(Long[] examSubjectSimulateIds); + + /** + * 鎵归噺鏂板妯℃嫙鑰冭瘯棰樼洰 + * + * @param list 鑰冭瘯棰樼洰鍒楄〃 + * @return 缁撴灉 + */ + public int batchInsertTbExamSubjectSimulateBy(List list); + + /** + * 鍒犻櫎妯℃嫙鑰冭瘯棰樼洰 + * + * @param subjectWarehouseClassId 棰樺簱鍒嗙被ID + * @return 缁撴灉 + */ + public int deleteTbExamSubjectSimulateBySubjectWarehouseClassId(Long subjectWarehouseClassId); + + /** + * 鏌ヨ鎵鏈夐鐩 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public List> getAllTbExamSubjectSimulate(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExpressKdCodeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExpressKdCodeMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..eeac549982a25eb8fc9c88f057a91a7599db0522 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbExpressKdCodeMapper.java @@ -0,0 +1,70 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbExpressKdCode; + +import java.util.List; + +/** + * 蹇掔紪鐮丮apper鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-20 + */ +public interface TbExpressKdCodeMapper +{ + /** + * 鏌ヨ蹇掔紪鐮 + * + * @param id 蹇掔紪鐮佷富閿 + * @return 蹇掔紪鐮 + */ + public TbExpressKdCode selectTbExpressKdCodeById(Long id); + + /** + * 鏌ヨ蹇掔紪鐮佸垪琛 + * + * @param tbExpressKdCode 蹇掔紪鐮 + * @return 蹇掔紪鐮侀泦鍚 + */ + public List selectTbExpressKdCodeList(TbExpressKdCode tbExpressKdCode); + + /** + * 鏂板蹇掔紪鐮 + * + * @param tbExpressKdCode 蹇掔紪鐮 + * @return 缁撴灉 + */ + public int insertTbExpressKdCode(TbExpressKdCode tbExpressKdCode); + + /** + * 淇敼蹇掔紪鐮 + * + * @param tbExpressKdCode 蹇掔紪鐮 + * @return 缁撴灉 + */ + public int updateTbExpressKdCode(TbExpressKdCode tbExpressKdCode); + + /** + * 鍒犻櫎蹇掔紪鐮 + * + * @param id 蹇掔紪鐮佷富閿 + * @return 缁撴灉 + */ + public int deleteTbExpressKdCodeById(Long id); + + /** + * 鎵归噺鍒犻櫎蹇掔紪鐮 + * + * @param ids 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbExpressKdCodeByIds(Long[] ids); + + /** + * 鏌ヨ蹇 + * + * @param code 蹇掔紪鐮 + * @return 蹇掔紪鐮 + */ + public TbExpressKdCode selectTbExpressKdCodeByCode(String code); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbLinkMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbLinkMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..6158c4990bac8deaf504970c35d9e84ed4e7de74 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbLinkMapper.java @@ -0,0 +1,78 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbLink; + +import java.util.List; + +/** + * 璧勬簮鍏宠仈Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-22 + */ +public interface TbLinkMapper +{ + /** + * 鏌ヨ璧勬簮鍏宠仈 + * + * @param linkId 璧勬簮鍏宠仈涓婚敭 + * @return 璧勬簮鍏宠仈 + */ + public TbLink selectTbLinkByLinkId(Long linkId); + + /** + * 鏌ヨ璧勬簮鍏宠仈鍒楄〃 + * + * @param tbLink 璧勬簮鍏宠仈 + * @return 璧勬簮鍏宠仈闆嗗悎 + */ + public List selectTbLinkList(TbLink tbLink); + + /** + * 鏂板璧勬簮鍏宠仈 + * + * @param tbLink 璧勬簮鍏宠仈 + * @return 缁撴灉 + */ + public int insertTbLink(TbLink tbLink); + + /** + * 淇敼璧勬簮鍏宠仈 + * + * @param tbLink 璧勬簮鍏宠仈 + * @return 缁撴灉 + */ + public int updateTbLink(TbLink tbLink); + + /** + * 鍒犻櫎璧勬簮鍏宠仈 + * + * @param linkId 璧勬簮鍏宠仈涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbLinkByLinkId(Long linkId); + + /** + * 鎵归噺鍒犻櫎璧勬簮鍏宠仈 + * + * @param linkIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbLinkByLinkIds(Long[] linkIds); + + /** + * 鏌ヨ璇勪环鏈烘瀯涓庤绋嬪叧鑱斿垪琛 + * + * @param tbLink 璧勬簮鍏宠仈 + * @return 璧勬簮鍏宠仈闆嗗悎 + */ + public List listLinkEvaluateAgencyCourse(TbLink tbLink); + + /** + * 鏌ヨ鐩存挱涓庤佸笀鍏宠仈鍒楄〃 + * + * @param tbLink 璧勬簮鍏宠仈 + * @return 璧勬簮鍏宠仈闆嗗悎 + */ + public List listLinkLiveBroadcastTeacher(TbLink tbLink); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbLiveBroadcastMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbLiveBroadcastMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..00aaafab5d90ebfbbda25f89485753c3786d7223 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbLiveBroadcastMapper.java @@ -0,0 +1,81 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbLiveBroadcast; + +import java.util.List; +import java.util.Map; + +/** + * 鐩存挱Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-22 + */ +public interface TbLiveBroadcastMapper +{ + /** + * 鏌ヨ鐩存挱 + * + * @param liveBroadcastId 鐩存挱涓婚敭 + * @return 鐩存挱 + */ + public TbLiveBroadcast selectTbLiveBroadcastByLiveBroadcastId(Long liveBroadcastId); + + /** + * 鏌ヨ鐩存挱鍒楄〃 + * + * @param tbLiveBroadcast 鐩存挱 + * @return 鐩存挱闆嗗悎 + */ + public List selectTbLiveBroadcastList(TbLiveBroadcast tbLiveBroadcast); + + /** + * 鏂板鐩存挱 + * + * @param tbLiveBroadcast 鐩存挱 + * @return 缁撴灉 + */ + public int insertTbLiveBroadcast(TbLiveBroadcast tbLiveBroadcast); + + /** + * 淇敼鐩存挱 + * + * @param tbLiveBroadcast 鐩存挱 + * @return 缁撴灉 + */ + public int updateTbLiveBroadcast(TbLiveBroadcast tbLiveBroadcast); + + /** + * 鍒犻櫎鐩存挱 + * + * @param liveBroadcastId 鐩存挱涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbLiveBroadcastByLiveBroadcastId(Long liveBroadcastId); + + /** + * 鎵归噺鍒犻櫎鐩存挱 + * + * @param liveBroadcastIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbLiveBroadcastByLiveBroadcastIds(Long[] liveBroadcastIds); + + /** + * 鐩存挱棰勫憡鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鐩存挱棰勫憡鍒楄〃 + */ + public List> getLiveBroadcastList(Map params); + + public List> getLiveBroadcastEvaluateAgencyList(); + + /** + * 鐩存挱棰勫憡璇︽儏 + * + * @param params 鍙傛暟 + * @return 鐩存挱棰勫憡璇︽儏 + */ + public Map getLiveBroadcastInfo(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMajorClassMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMajorClassMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..81b90558c277eafe6ac8c84af8761284c0dfaff9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMajorClassMapper.java @@ -0,0 +1,111 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbMajorClass; + +import java.util.List; +import java.util.Map; + +/** + * 涓撲笟鍒嗙被Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-16 + */ +public interface TbMajorClassMapper +{ + + /** + * 鏌ヨ涓撲笟鍒嗙被 + * + * @param majorId 涓撲笟鍒嗙被涓婚敭 + * @return 涓撲笟鍒嗙被 + */ + public TbMajorClass selectTbMajorClassByMajorId(Long majorId); + + /** + * 鏌ヨ涓撲笟鍒嗙被鍒楄〃 + * + * @param tbMajorClass 涓撲笟鍒嗙被 + * @return 涓撲笟鍒嗙被闆嗗悎 + */ + public List selectTbMajorClassList(TbMajorClass tbMajorClass); + + /** + * 鏌ヨ涓撲笟鍒嗙被鍒楄〃 + * + * @return 涓撲笟鍒嗙被闆嗗悎 + */ + public List getAllMajorClassList(); + + /** + * 鏂板涓撲笟鍒嗙被 + * + * @param tbMajorClass 涓撲笟鍒嗙被 + * @return 缁撴灉 + */ + public int insertTbMajorClass(TbMajorClass tbMajorClass); + + /** + * 淇敼涓撲笟鍒嗙被 + * + * @param tbMajorClass 涓撲笟鍒嗙被 + * @return 缁撴灉 + */ + public int updateTbMajorClass(TbMajorClass tbMajorClass); + + /** + * 鍒犻櫎涓撲笟鍒嗙被 + * + * @param majorId 涓撲笟鍒嗙被涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbMajorClassByMajorId(Long majorId); + + /** + * 鎵归噺鍒犻櫎涓撲笟鍒嗙被 + * + * @param majorIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbMajorClassByMajorIds(Long[] majorIds); + + /** + * 涓撲笟鍒嗙被鍒楄〃 + * + * @param params 鍙傛暟 + * @return 涓撲笟鍒嗙被鍒楄〃 + */ + public List> selectTbMajorClassMapList(Map params); + + /** + * 涓撲笟璇剧▼鍒楄〃 + * + * @param params 鍙傛暟 + * @return 涓撲笟璇剧▼鍒楄〃 + */ + public List> getMajorCourseList(Map params); + + /** + * 涓撲笟璇剧▼璇︽儏 + * + * @param params 鍙傛暟 + * @return 涓撲笟璇剧▼璇︽儏 + */ + public Map getMajorCourseInfo(Map params); + + /** + * 璇剧▼甯堣祫鍒楄〃 + * + * @param params 鍙傛暟 + * @return 璇剧▼甯堣祫鍒楄〃 + */ + public List> getCourseTeacherList(Map params); + + /** + * 涓撲笟璇剧▼瑙嗛鍒楄〃 + * + * @param params 鍙傛暟 + * @return 涓撲笟璇剧▼瑙嗛鍒楄〃 + */ + public List> getMajorCourseVideoList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberAddressMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberAddressMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..d05f7ea6f3c42895b42f9027715f84fa4b0b9337 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberAddressMapper.java @@ -0,0 +1,79 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbMemberAddress; + +import java.util.List; +import java.util.Map; + +/** + * 鐢ㄦ埛鍦板潃Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-30 + */ +public interface TbMemberAddressMapper +{ + /** + * 鏌ヨ鐢ㄦ埛鍦板潃 + * + * @param memberAddressId 鐢ㄦ埛鍦板潃涓婚敭 + * @return 鐢ㄦ埛鍦板潃 + */ + public TbMemberAddress selectTbMemberAddressByMemberAddressId(Long memberAddressId); + + /** + * 鏌ヨ鐢ㄦ埛鍦板潃鍒楄〃 + * + * @param tbMemberAddress 鐢ㄦ埛鍦板潃 + * @return 鐢ㄦ埛鍦板潃闆嗗悎 + */ + public List selectTbMemberAddressList(TbMemberAddress tbMemberAddress); + + /** + * 鏂板鐢ㄦ埛鍦板潃 + * + * @param tbMemberAddress 鐢ㄦ埛鍦板潃 + * @return 缁撴灉 + */ + public int insertTbMemberAddress(TbMemberAddress tbMemberAddress); + + /** + * 淇敼鐢ㄦ埛鍦板潃 + * + * @param tbMemberAddress 鐢ㄦ埛鍦板潃 + * @return 缁撴灉 + */ + public int updateTbMemberAddress(TbMemberAddress tbMemberAddress); + + /** + * 鍒犻櫎鐢ㄦ埛鍦板潃 + * + * @param memberAddressId 鐢ㄦ埛鍦板潃涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbMemberAddressByMemberAddressId(Long memberAddressId); + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛鍦板潃 + * + * @param memberAddressIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbMemberAddressByMemberAddressIds(Long[] memberAddressIds); + + /** + * 鍦板潃绠$悊鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鍦板潃绠$悊鍒楄〃 + */ + public List> getMemberAddressList(Map params); + + /** + * 鍦板潃绠$悊璇︽儏 + * + * @param params 鍙傛暟 + * @return 鍦板潃绠$悊璇︽儏 + */ + public Map getMemberAddressInfo(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberDiscussMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberDiscussMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..dc24f4f8f2511aac0786433f1878a292af23a676 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberDiscussMapper.java @@ -0,0 +1,71 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbMemberDiscuss; + +import java.util.List; +import java.util.Map; + +/** + * 鐢ㄦ埛璁ㄨMapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-19 + */ +public interface TbMemberDiscussMapper +{ + /** + * 鏌ヨ鐢ㄦ埛璁ㄨ + * + * @param memberDiscussId 鐢ㄦ埛璁ㄨ涓婚敭 + * @return 鐢ㄦ埛璁ㄨ + */ + public TbMemberDiscuss selectTbMemberDiscussByMemberDiscussId(Long memberDiscussId); + + /** + * 鏌ヨ鐢ㄦ埛璁ㄨ鍒楄〃 + * + * @param tbMemberDiscuss 鐢ㄦ埛璁ㄨ + * @return 鐢ㄦ埛璁ㄨ闆嗗悎 + */ + public List selectTbMemberDiscussList(TbMemberDiscuss tbMemberDiscuss); + + /** + * 鏂板鐢ㄦ埛璁ㄨ + * + * @param tbMemberDiscuss 鐢ㄦ埛璁ㄨ + * @return 缁撴灉 + */ + public int insertTbMemberDiscuss(TbMemberDiscuss tbMemberDiscuss); + + /** + * 淇敼鐢ㄦ埛璁ㄨ + * + * @param tbMemberDiscuss 鐢ㄦ埛璁ㄨ + * @return 缁撴灉 + */ + public int updateTbMemberDiscuss(TbMemberDiscuss tbMemberDiscuss); + + /** + * 鍒犻櫎鐢ㄦ埛璁ㄨ + * + * @param memberDiscussId 鐢ㄦ埛璁ㄨ涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbMemberDiscussByMemberDiscussId(Long memberDiscussId); + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛璁ㄨ + * + * @param memberDiscussIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbMemberDiscussByMemberDiscussIds(Long[] memberDiscussIds); + + /** + * 鐢ㄦ埛璁ㄨ鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鐢ㄦ埛璁ㄨ鍒楄〃 + */ + public List> getMemberDiscussList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberExamSimulateAllMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberExamSimulateAllMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..c45090171fe385e72ac2ad34069ece11fd472d57 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberExamSimulateAllMapper.java @@ -0,0 +1,82 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbMemberExamSimulateAll; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛塎apper鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-11 + */ +public interface TbMemberExamSimulateAllMapper +{ + /** + * 鏌ヨ鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + * + * @param memberExamSimulateAllId 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛変富閿 + * @return 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + */ + public TbMemberExamSimulateAll selectTbMemberExamSimulateAllByMemberExamSimulateAllId(Long memberExamSimulateAllId); + + /** + * 鏌ヨ鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛夊垪琛 + * + * @param tbMemberExamSimulateAll 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + * @return 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛夐泦鍚 + */ + public List selectTbMemberExamSimulateAllList(TbMemberExamSimulateAll tbMemberExamSimulateAll); + + /** + * 鏂板鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + * + * @param tbMemberExamSimulateAll 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + * @return 缁撴灉 + */ + public int insertTbMemberExamSimulateAll(TbMemberExamSimulateAll tbMemberExamSimulateAll); + + /** + * 淇敼鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + * + * @param tbMemberExamSimulateAll 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + * @return 缁撴灉 + */ + public int updateTbMemberExamSimulateAll(TbMemberExamSimulateAll tbMemberExamSimulateAll); + + /** + * 鍒犻櫎鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + * + * @param memberExamSimulateAllId 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛変富閿 + * @return 缁撴灉 + */ + public int deleteTbMemberExamSimulateAllByMemberExamSimulateAllId(Long memberExamSimulateAllId); + + /** + * 鎵归噺鍒犻櫎鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + * + * @param memberExamSimulateAllIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbMemberExamSimulateAllByMemberExamSimulateAllIds(Long[] memberExamSimulateAllIds); + + /** + * 鏌ヨ鑰冭瘯銆佹ā鎷熼鐩 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public TbMemberExamSimulateAll queryMemberExamSimulateAllByParam(Map params); + + /** + * 鏌ヨ鑰冭瘯銆佹ā鎷熼鐩 + * + * @param memberUserId 鐢ㄦ埛ID + * @param examSimulateInfoId + * @return 缁撴灉 + */ + public List queryMemberExamSimulateAllList(@Param("memberUserId") Long memberUserId, + @Param("examSimulateInfoId") Long examSimulateInfoId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberJoinMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberJoinMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..707ab95646b5f97b2be237a8043fdd3071352ff5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberJoinMapper.java @@ -0,0 +1,62 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbMemberJoin; + +import java.util.List; + +/** + * 鐢ㄦ埛鍙備笌Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-15 + */ +public interface TbMemberJoinMapper +{ + /** + * 鏌ヨ鐢ㄦ埛鍙備笌 + * + * @param memberJoinId 鐢ㄦ埛鍙備笌涓婚敭 + * @return 鐢ㄦ埛鍙備笌 + */ + public TbMemberJoin selectTbMemberJoinByMemberJoinId(Long memberJoinId); + + /** + * 鏌ヨ鐢ㄦ埛鍙備笌鍒楄〃 + * + * @param tbMemberJoin 鐢ㄦ埛鍙備笌 + * @return 鐢ㄦ埛鍙備笌闆嗗悎 + */ + public List selectTbMemberJoinList(TbMemberJoin tbMemberJoin); + + /** + * 鏂板鐢ㄦ埛鍙備笌 + * + * @param tbMemberJoin 鐢ㄦ埛鍙備笌 + * @return 缁撴灉 + */ + public int insertTbMemberJoin(TbMemberJoin tbMemberJoin); + + /** + * 淇敼鐢ㄦ埛鍙備笌 + * + * @param tbMemberJoin 鐢ㄦ埛鍙備笌 + * @return 缁撴灉 + */ + public int updateTbMemberJoin(TbMemberJoin tbMemberJoin); + + /** + * 鍒犻櫎鐢ㄦ埛鍙備笌 + * + * @param memberJoinId 鐢ㄦ埛鍙備笌涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbMemberJoinByMemberJoinId(Long memberJoinId); + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛鍙備笌 + * + * @param memberJoinIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbMemberJoinByMemberJoinIds(Long[] memberJoinIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberMajorMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberMajorMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..30161f2a9c04745e7baedf7b48a86b37236f3b83 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberMajorMapper.java @@ -0,0 +1,99 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbMemberMajor; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 鐢ㄦ埛棰樺簱涓撲笟Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-29 + */ +public interface TbMemberMajorMapper +{ + /** + * 鏌ヨ鐢ㄦ埛棰樺簱涓撲笟 + * + * @param memberMajorId 鐢ㄦ埛棰樺簱涓撲笟涓婚敭 + * @return 鐢ㄦ埛棰樺簱涓撲笟 + */ + public TbMemberMajor selectTbMemberMajorByMemberMajorId(Long memberMajorId); + + /** + * 鏌ヨ鐢ㄦ埛棰樺簱涓撲笟鍒楄〃 + * + * @param tbMemberMajor 鐢ㄦ埛棰樺簱涓撲笟 + * @return 鐢ㄦ埛棰樺簱涓撲笟闆嗗悎 + */ + public List selectTbMemberMajorList(TbMemberMajor tbMemberMajor); + + /** + * 鏂板鐢ㄦ埛棰樺簱涓撲笟 + * + * @param tbMemberMajor 鐢ㄦ埛棰樺簱涓撲笟 + * @return 缁撴灉 + */ + public int insertTbMemberMajor(TbMemberMajor tbMemberMajor); + + /** + * 淇敼鐢ㄦ埛棰樺簱涓撲笟 + * + * @param tbMemberMajor 鐢ㄦ埛棰樺簱涓撲笟 + * @return 缁撴灉 + */ + public int updateTbMemberMajor(TbMemberMajor tbMemberMajor); + + /** + * 鍒犻櫎鐢ㄦ埛棰樺簱涓撲笟 + * + * @param memberMajorId 鐢ㄦ埛棰樺簱涓撲笟涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbMemberMajorByMemberMajorId(Long memberMajorId); + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛棰樺簱涓撲笟 + * + * @param memberMajorIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbMemberMajorByMemberMajorIds(Long[] memberMajorIds); + + /** + * 鏌ヨ鐢ㄦ埛棰樺簱涓撲笟 + * + * @param memberUserId 鐢ㄦ埛ID + * @param majorId 涓撲笟ID + * @param resId 璧勬簮ID + * @return 鐢ㄦ埛棰樺簱涓撲笟 + */ + public TbMemberMajor selectTbMemberMajorByMemberAndMajorId(@Param("memberUserId") Long memberUserId, + @Param("majorId")Long majorId, + @Param("resId")Long resId); + + /** + * 鐢ㄦ埛棰樺簱涓撲笟鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鐢ㄦ埛棰樺簱涓撲笟鍒楄〃 + */ + public List> getMemberMajorList(Map params); + + /** + * 鐢ㄦ埛棰樺簱涓撲笟鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鐢ㄦ埛棰樺簱涓撲笟鍒楄〃 + */ + public List> getMemberMajorByCourseId(Map params); + + /** + * 鐢ㄦ埛棰樺簱鎺ㄨ崘涓撲笟鍒楄〃 + * + * @return 鐢ㄦ埛棰樺簱鎺ㄨ崘涓撲笟鍒楄〃 + */ + public List> getMemberMajorRecommendClassList(); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberOrderMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberOrderMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..257bf1dc101fb7b85a42153a52ef6789fa445442 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberOrderMapper.java @@ -0,0 +1,105 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbMemberOrder; +import com.ruoyi.hezhi.domain.dto.ExamPayInfoDto; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 浼氬憳璁㈠崟淇℃伅Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-18 + */ +public interface TbMemberOrderMapper +{ + /** + * 鏌ヨ浼氬憳璁㈠崟淇℃伅 + * + * @param orderId 浼氬憳璁㈠崟淇℃伅涓婚敭 + * @return 浼氬憳璁㈠崟淇℃伅 + */ + public TbMemberOrder selectTbMemberOrderByOrderId(Long orderId); + + /** + * 鏌ヨ浼氬憳璁㈠崟淇℃伅鍒楄〃 + * + * @param tbMemberOrder 浼氬憳璁㈠崟淇℃伅 + * @return 浼氬憳璁㈠崟淇℃伅闆嗗悎 + */ + public List selectTbMemberOrderList(TbMemberOrder tbMemberOrder); + + /** + * 鏂板浼氬憳璁㈠崟淇℃伅 + * + * @param tbMemberOrder 浼氬憳璁㈠崟淇℃伅 + * @return 缁撴灉 + */ + public int insertTbMemberOrder(TbMemberOrder tbMemberOrder); + + /** + * 淇敼浼氬憳璁㈠崟淇℃伅 + * + * @param tbMemberOrder 浼氬憳璁㈠崟淇℃伅 + * @return 缁撴灉 + */ + public int updateTbMemberOrder(TbMemberOrder tbMemberOrder); + + /** + * 鍒犻櫎浼氬憳璁㈠崟淇℃伅 + * + * @param orderId 浼氬憳璁㈠崟淇℃伅涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbMemberOrderByOrderId(Long orderId); + + /** + * 鎵归噺鍒犻櫎浼氬憳璁㈠崟淇℃伅 + * + * @param orderIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbMemberOrderByOrderIds(Long[] orderIds); + + /** + * 鏌ヨ浼氬憳璁㈠崟淇℃伅 + * + * @param orderNo 璁㈠崟缂栧彿 + * @return 浼氬憳璁㈠崟淇℃伅 + */ + public TbMemberOrder selectOrderByOrderNo(String orderNo); + + /** + * 鏌ヨ浼氬憳璁㈠崟淇℃伅 + * + * @param dataId 鎶ュ悕琛↖D + * @return 浼氬憳璁㈠崟淇℃伅 + */ + public TbMemberOrder selectOrderByDataId(@Param("dataId") Long dataId); + + /** + * 淇敼浼氬憳璁㈠崟淇℃伅 + * + * @param tbMemberOrder 浼氬憳璁㈠崟淇℃伅 + * @return 缁撴灉 + */ + public int updateTbMemberOrderByOrderNo(TbMemberOrder tbMemberOrder); + + /** + * 鎴戠殑璁㈠崟鍒楄〃 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public List> getMemberOrderList(Map params); + + ExamPayInfoDto selectExamPayInfoByOrderNo(@Param("orderNo") String orderNo); + + List selectExpiredUnpaidOrderNos(); + int deleteExamRegistrationByOrderNos(@Param("orderNos") List orderNos); + int deleteMemberOrderByOrderNos(@Param("orderNos") List orderNos); + + boolean existsUnpaidExamOrder(@Param("memberUserId") Long memberUserId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberScoreMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberScoreMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..8d6dcf6037ff8f256296a0317d23c212f10e6bc3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberScoreMapper.java @@ -0,0 +1,80 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbMemberScore; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + +/** + * 鐢ㄦ埛绉垎璇︽儏Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-31 + */ +public interface TbMemberScoreMapper +{ + /** + * 鏌ヨ鐢ㄦ埛绉垎璇︽儏 + * + * @param memberScoreId 鐢ㄦ埛绉垎璇︽儏涓婚敭 + * @return 鐢ㄦ埛绉垎璇︽儏 + */ + public TbMemberScore selectTbMemberScoreByMemberScoreId(Long memberScoreId); + + /** + * 鏌ヨ鐢ㄦ埛绉垎璇︽儏鍒楄〃 + * + * @param tbMemberScore 鐢ㄦ埛绉垎璇︽儏 + * @return 鐢ㄦ埛绉垎璇︽儏闆嗗悎 + */ + public List selectTbMemberScoreList(TbMemberScore tbMemberScore); + + /** + * 鏂板鐢ㄦ埛绉垎璇︽儏 + * + * @param tbMemberScore 鐢ㄦ埛绉垎璇︽儏 + * @return 缁撴灉 + */ + public int insertTbMemberScore(TbMemberScore tbMemberScore); + + /** + * 淇敼鐢ㄦ埛绉垎璇︽儏 + * + * @param tbMemberScore 鐢ㄦ埛绉垎璇︽儏 + * @return 缁撴灉 + */ + public int updateTbMemberScore(TbMemberScore tbMemberScore); + + /** + * 鍒犻櫎鐢ㄦ埛绉垎璇︽儏 + * + * @param memberScoreId 鐢ㄦ埛绉垎璇︽儏涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbMemberScoreByMemberScoreId(Long memberScoreId); + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛绉垎璇︽儏 + * + * @param memberScoreIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbMemberScoreByMemberScoreIds(Long[] memberScoreIds); + + /** + * 鎴戠殑绉垎鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鎴戠殑绉垎鍒楄〃 + */ + public List> getMemberScoreList(Map params); + + /** + * 鎴戠殑绉垎 + * + * @param params 鍙傛暟 + * @return 鎴戠殑绉垎 + */ + public Map getMemberScore(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberSignMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberSignMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..ae92f37a546d391b48e01684276660d1b5be4a46 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberSignMapper.java @@ -0,0 +1,71 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbMemberSign; + +import java.util.List; +import java.util.Map; + +/** + * 鐢ㄦ埛绛惧埌Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-31 + */ +public interface TbMemberSignMapper +{ + /** + * 鏌ヨ鐢ㄦ埛绛惧埌 + * + * @param memberSignId 鐢ㄦ埛绛惧埌涓婚敭 + * @return 鐢ㄦ埛绛惧埌 + */ + public TbMemberSign selectTbMemberSignByMemberSignId(Long memberSignId); + + /** + * 鏌ヨ鐢ㄦ埛绛惧埌鍒楄〃 + * + * @param tbMemberSign 鐢ㄦ埛绛惧埌 + * @return 鐢ㄦ埛绛惧埌闆嗗悎 + */ + public List selectTbMemberSignList(TbMemberSign tbMemberSign); + + /** + * 鏂板鐢ㄦ埛绛惧埌 + * + * @param tbMemberSign 鐢ㄦ埛绛惧埌 + * @return 缁撴灉 + */ + public int insertTbMemberSign(TbMemberSign tbMemberSign); + + /** + * 淇敼鐢ㄦ埛绛惧埌 + * + * @param tbMemberSign 鐢ㄦ埛绛惧埌 + * @return 缁撴灉 + */ + public int updateTbMemberSign(TbMemberSign tbMemberSign); + + /** + * 鍒犻櫎鐢ㄦ埛绛惧埌 + * + * @param memberSignId 鐢ㄦ埛绛惧埌涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbMemberSignByMemberSignId(Long memberSignId); + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛绛惧埌 + * + * @param memberSignIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbMemberSignByMemberSignIds(Long[] memberSignIds); + + /** + * 鐢ㄦ埛绛惧埌寮圭獥 + * + * @param params 鍙傛暟 + * @return 鐢ㄦ埛绛惧埌寮圭獥 + */ + public Map getMemberSignPopup(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberSubjectAllMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberSubjectAllMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..9df580f2e086b494f8e16d67e90b3e9814cfeb46 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberSubjectAllMapper.java @@ -0,0 +1,95 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbMemberSubjectAll; + +import java.util.List; +import java.util.Map; + +/** + * 鎴戠殑棰樼洰Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-06 + */ +public interface TbMemberSubjectAllMapper +{ + /** + * 鏌ヨ鎴戠殑棰樼洰 + * + * @param memberSubjectAllId 鎴戠殑棰樼洰涓婚敭 + * @return 鎴戠殑棰樼洰 + */ + public TbMemberSubjectAll selectTbMemberSubjectAllByMemberSubjectAllId(Long memberSubjectAllId); + + /** + * 鏌ヨ鎴戠殑棰樼洰鍒楄〃 + * + * @param tbMemberSubjectAll 鎴戠殑棰樼洰 + * @return 鎴戠殑棰樼洰闆嗗悎 + */ + public List selectTbMemberSubjectAllList(TbMemberSubjectAll tbMemberSubjectAll); + + /** + * 鏂板鎴戠殑棰樼洰 + * + * @param tbMemberSubjectAll 鎴戠殑棰樼洰 + * @return 缁撴灉 + */ + public int insertTbMemberSubjectAll(TbMemberSubjectAll tbMemberSubjectAll); + + /** + * 淇敼鎴戠殑棰樼洰 + * + * @param tbMemberSubjectAll 鎴戠殑棰樼洰 + * @return 缁撴灉 + */ + public int updateTbMemberSubjectAll(TbMemberSubjectAll tbMemberSubjectAll); + + /** + * 鍒犻櫎鎴戠殑棰樼洰 + * + * @param memberSubjectAllId 鎴戠殑棰樼洰涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbMemberSubjectAllByMemberSubjectAllId(Long memberSubjectAllId); + + /** + * 鍒犻櫎鎴戠殑棰樼洰閫氳繃member_id subjectWarehouseClassId practice_type + * + * @param params 鎴戠殑棰樼洰涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbMemberSubjectAllByMsp(Map params); + + /** + * 鎵归噺鍒犻櫎鎴戠殑棰樼洰 + * + * @param memberSubjectAllIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbMemberSubjectAllByMemberSubjectAllIds(Long[] memberSubjectAllIds); + + /** + * 棰樼洰鏁伴噺 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public int memberSubjectAllCount(Map params); + + /** + * 鏌ヨ鎴戠殑棰樼洰 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public TbMemberSubjectAll queryMemberSubjectAllByParam(Map params); + + /** + * 鏌ヨ鎴戠殑棰樼洰鍒楄〃 + * + * @param memberSubjectAll 鎴戠殑棰樼洰 + * @return 鎴戠殑棰樼洰闆嗗悎 + */ + public List selectMemberSubjectAllList(TbMemberSubjectAll memberSubjectAll); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberSubjectCollectMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberSubjectCollectMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..7b29e748f7813569d3b0a442e5cd176f44d6f786 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberSubjectCollectMapper.java @@ -0,0 +1,86 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbMemberSubjectCollect; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 鎴戠殑鏀惰棌棰樼洰Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-07 + */ +public interface TbMemberSubjectCollectMapper +{ + /** + * 鏌ヨ鎴戠殑鏀惰棌棰樼洰 + * + * @param memberSubjectCollectId 鎴戠殑鏀惰棌棰樼洰涓婚敭 + * @return 鎴戠殑鏀惰棌棰樼洰 + */ + public TbMemberSubjectCollect selectTbMemberSubjectCollectByMemberSubjectCollectId(Long memberSubjectCollectId); + + /** + * 鏌ヨ鎴戠殑鏀惰棌棰樼洰鍒楄〃 + * + * @param tbMemberSubjectCollect 鎴戠殑鏀惰棌棰樼洰 + * @return 鎴戠殑鏀惰棌棰樼洰闆嗗悎 + */ + public List selectTbMemberSubjectCollectList(TbMemberSubjectCollect tbMemberSubjectCollect); + + /** + * 鏂板鎴戠殑鏀惰棌棰樼洰 + * + * @param tbMemberSubjectCollect 鎴戠殑鏀惰棌棰樼洰 + * @return 缁撴灉 + */ + public int insertTbMemberSubjectCollect(TbMemberSubjectCollect tbMemberSubjectCollect); + + /** + * 淇敼鎴戠殑鏀惰棌棰樼洰 + * + * @param tbMemberSubjectCollect 鎴戠殑鏀惰棌棰樼洰 + * @return 缁撴灉 + */ + public int updateTbMemberSubjectCollect(TbMemberSubjectCollect tbMemberSubjectCollect); + + /** + * 鍒犻櫎鎴戠殑鏀惰棌棰樼洰 + * + * @param memberSubjectCollectId 鎴戠殑鏀惰棌棰樼洰涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbMemberSubjectCollectByMemberSubjectCollectId(Long memberSubjectCollectId); + + /** + * 鎵归噺鍒犻櫎鎴戠殑鏀惰棌棰樼洰 + * + * @param memberSubjectCollectIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbMemberSubjectCollectByMemberSubjectCollectIds(Long[] memberSubjectCollectIds); + + /** + * 鏌ヨ鎴戠殑鏀惰棌棰樼洰 + * + * @param memberUserId 鐢ㄦ埛ID + * @param examSubjectId 棰樼洰ID + * @param courseId 璇剧▼ID + * @return 鎴戠殑鏀惰棌棰樼洰 + */ + public TbMemberSubjectCollect selectTbMemberSubjectCollectByMemberUserIdSubjectId(@Param("memberUserId") Long memberUserId, + @Param("examSubjectId") Long examSubjectId, + @Param("courseId") Long courseId); + + /** + * 棰樼洰鏀惰棌鍒楄〃 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public List> getMemberSubjectCollectList(Map params); + + public int insertMemberSubjectCollectBatch(@Param("tbMemberSubjectCollectList") List tbMemberSubjectCollectList); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberSubjectWrongMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberSubjectWrongMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..17b94e0226ffa38ce79375e93aaad46b93eb00e0 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbMemberSubjectWrongMapper.java @@ -0,0 +1,71 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbMemberSubjectWrong; + +import java.util.List; +import java.util.Map; + +/** + * 鎴戠殑閿欓Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-07 + */ +public interface TbMemberSubjectWrongMapper +{ + /** + * 鏌ヨ鎴戠殑閿欓 + * + * @param memberSubjectWrongId 鎴戠殑閿欓涓婚敭 + * @return 鎴戠殑閿欓 + */ + public TbMemberSubjectWrong selectTbMemberSubjectWrongByMemberSubjectWrongId(Long memberSubjectWrongId); + + /** + * 鏌ヨ鎴戠殑閿欓鍒楄〃 + * + * @param tbMemberSubjectWrong 鎴戠殑閿欓 + * @return 鎴戠殑閿欓闆嗗悎 + */ + public List selectTbMemberSubjectWrongList(TbMemberSubjectWrong tbMemberSubjectWrong); + + /** + * 鏂板鎴戠殑閿欓 + * + * @param tbMemberSubjectWrong 鎴戠殑閿欓 + * @return 缁撴灉 + */ + public int insertTbMemberSubjectWrong(TbMemberSubjectWrong tbMemberSubjectWrong); + + /** + * 淇敼鎴戠殑閿欓 + * + * @param tbMemberSubjectWrong 鎴戠殑閿欓 + * @return 缁撴灉 + */ + public int updateTbMemberSubjectWrong(TbMemberSubjectWrong tbMemberSubjectWrong); + + /** + * 鍒犻櫎鎴戠殑閿欓 + * + * @param memberSubjectWrongId 鎴戠殑閿欓涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbMemberSubjectWrongByMemberSubjectWrongId(Long memberSubjectWrongId); + + /** + * 鎵归噺鍒犻櫎鎴戠殑閿欓 + * + * @param memberSubjectWrongIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbMemberSubjectWrongByMemberSubjectWrongIds(Long[] memberSubjectWrongIds); + + /** + * 閿欓鏁伴噺 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public int countByParams(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbNewsMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbNewsMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..58cf74c3a7b68cc3950538a711ad7a814cf7822c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbNewsMapper.java @@ -0,0 +1,71 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbNews; +import com.ruoyi.hezhi.domain.vo.NewsVO; + +import java.util.List; + +/** + * 鏂伴椈鍜ㄨMapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-09-14 + */ +public interface TbNewsMapper +{ + /** + * 鏌ヨ鏂伴椈鍜ㄨ + * + * @param newsId 鏂伴椈鍜ㄨ涓婚敭 + * @return 鏂伴椈鍜ㄨ + */ + public TbNews selectTbNewsByNewsId(Long newsId); + + /** + * 鏌ヨ鏂伴椈鍜ㄨ鍒楄〃 + * + * @param tbNews 鏂伴椈鍜ㄨ + * @return 鏂伴椈鍜ㄨ闆嗗悎 + */ + public List selectTbNewsList(TbNews tbNews); + + /** + * 鏂板鏂伴椈鍜ㄨ + * + * @param tbNews 鏂伴椈鍜ㄨ + * @return 缁撴灉 + */ + public int insertTbNews(TbNews tbNews); + + /** + * 淇敼鏂伴椈鍜ㄨ + * + * @param tbNews 鏂伴椈鍜ㄨ + * @return 缁撴灉 + */ + public int updateTbNews(TbNews tbNews); + + /** + * 鍒犻櫎鏂伴椈鍜ㄨ + * + * @param newsId 鏂伴椈鍜ㄨ涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbNewsByNewsId(Long newsId); + + /** + * 鎵归噺鍒犻櫎鏂伴椈鍜ㄨ + * + * @param newsIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbNewsByNewsIds(Long[] newsIds); + + /** + * 鏌ヨ鏂伴椈鍜ㄨ鍒楄〃 + * + * @param tbNews 鏂伴椈鍜ㄨ + * @return 鏂伴椈鍜ㄨ闆嗗悎 + */ + public List selectNewsList(TbNews tbNews); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbNoticeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbNoticeMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..3e04d06b737fcc8d1515b1e1d59d96ef86f00613 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbNoticeMapper.java @@ -0,0 +1,94 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbNotice; +import com.ruoyi.hezhi.domain.vo.NoticeVO; + +import java.util.List; +import java.util.Map; + +/** + * 閫氱煡鍏憡Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-09-14 + */ +public interface TbNoticeMapper +{ + /** + * 鏌ヨ閫氱煡鍏憡 + * + * @param noticeId 閫氱煡鍏憡涓婚敭 + * @return 閫氱煡鍏憡 + */ + public TbNotice selectTbNoticeByNoticeId(Long noticeId); + + /** + * 鏌ヨ閫氱煡鍏憡鍒楄〃 + * + * @param tbNotice 閫氱煡鍏憡 + * @return 閫氱煡鍏憡闆嗗悎 + */ + public List selectTbNoticeList(TbNotice tbNotice); + + /** + * 鏂板閫氱煡鍏憡 + * + * @param tbNotice 閫氱煡鍏憡 + * @return 缁撴灉 + */ + public int insertTbNotice(TbNotice tbNotice); + + /** + * 淇敼閫氱煡鍏憡 + * + * @param tbNotice 閫氱煡鍏憡 + * @return 缁撴灉 + */ + public int updateTbNotice(TbNotice tbNotice); + + /** + * 鍒犻櫎閫氱煡鍏憡 + * + * @param noticeId 閫氱煡鍏憡涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbNoticeByNoticeId(Long noticeId); + + /** + * 鎵归噺鍒犻櫎閫氱煡鍏憡 + * + * @param noticeIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbNoticeByNoticeIds(Long[] noticeIds); + + /** + * 鑾峰彇鍏憡鍒楄〃 + * @return + */ + public List selectNoticeList(); + + /** + * 鑾峰彇鍏憡鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鍏憡鍒楄〃 + */ + public List> getPCNoticeList(Map params); + + /** + * 鏌ヨ鍏憡璇︽儏 + * + * @param params 鍙傛暟 + * @return 鍏憡鍒楄〃 + */ + public Map getNoticeInfo(Map params); + + /** + * 娴忚閲+1 + * + * @param noticeId 閫氱煡鍏憡涓婚敭 + * @return 缁撴灉 + */ + public int addViewsNum(Long noticeId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbPostAddressMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbPostAddressMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..01f0c84cc368b4b04f346eb64b1f743e3a38653b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbPostAddressMapper.java @@ -0,0 +1,73 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbPostAddress; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 閭瘎鍦板潃Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-20 + */ +public interface TbPostAddressMapper +{ + /** + * 鏌ヨ閭瘎鍦板潃 + * + * @param postAddressId 閭瘎鍦板潃涓婚敭 + * @return 閭瘎鍦板潃 + */ + public TbPostAddress selectTbPostAddressByPostAddressId(Long postAddressId); + + /** + * 鏌ヨ閭瘎鍦板潃鍒楄〃 + * + * @param tbPostAddress 閭瘎鍦板潃 + * @return 閭瘎鍦板潃闆嗗悎 + */ + public List selectTbPostAddressList(TbPostAddress tbPostAddress); + + /** + * 鏂板閭瘎鍦板潃 + * + * @param tbPostAddress 閭瘎鍦板潃 + * @return 缁撴灉 + */ + public int insertTbPostAddress(TbPostAddress tbPostAddress); + + /** + * 淇敼閭瘎鍦板潃 + * + * @param tbPostAddress 閭瘎鍦板潃 + * @return 缁撴灉 + */ + public int updateTbPostAddress(TbPostAddress tbPostAddress); + + /** + * 鍒犻櫎閭瘎鍦板潃 + * + * @param postAddressId 閭瘎鍦板潃涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbPostAddressByPostAddressId(Long postAddressId); + + /** + * 鎵归噺鍒犻櫎閭瘎鍦板潃 + * + * @param postAddressIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbPostAddressByPostAddressIds(Long[] postAddressIds); + + /** + * 鏌ヨ閭瘎鍦板潃 + * + * @param memberUserId 鐢ㄦ埛ID + * @param dataId 鐩稿叧璧勬簮ID + * @param type 绫诲瀷锛0-鍏ㄩ儴锛1-璇佷功锛 + * @return 閭瘎鍦板潃 + */ + public TbPostAddress selectTbPostAddressByMemberUserIdDataId(@Param("memberUserId") Long memberUserId, @Param("dataId") Long dataId, @Param("type") Integer type); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbRegionMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbRegionMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..e67032351ce889937cd1e8bd6d34f5aa0fe8161d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbRegionMapper.java @@ -0,0 +1,100 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbRegion; +import org.apache.ibatis.annotations.Param; + +import javax.validation.constraints.NotBlank; +import java.util.List; +import java.util.Map; + +/** + * 琛屾斂鍖哄煙Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-21 + */ +public interface TbRegionMapper +{ + /** + * 鏌ヨ琛屾斂鍖哄煙 + * + * @param id 琛屾斂鍖哄煙涓婚敭 + * @return 琛屾斂鍖哄煙 + */ + public TbRegion selectTbRegionById(Long id); + + //鏌ヨ鐪乮d + public Long selectIdByName1(String name); + //鏌ヨ甯俰d + public Long selectIdByName2(String name); + //鏌ヨ鍖篿d + public Long selectIdByName3(@Param("name") String name,@Param("pid") Long pid); + + /** + * 鏌ヨ琛屾斂鍖哄煙鍒楄〃 + * + * @param tbRegion 琛屾斂鍖哄煙 + * @return 琛屾斂鍖哄煙闆嗗悎 + */ + public List selectTbRegionList(TbRegion tbRegion); + + /** + * 鏂板琛屾斂鍖哄煙 + * + * @param tbRegion 琛屾斂鍖哄煙 + * @return 缁撴灉 + */ + public int insertTbRegion(TbRegion tbRegion); + + /** + * 淇敼琛屾斂鍖哄煙 + * + * @param tbRegion 琛屾斂鍖哄煙 + * @return 缁撴灉 + */ + public int updateTbRegion(TbRegion tbRegion); + + /** + * 鍒犻櫎琛屾斂鍖哄煙 + * + * @param id 琛屾斂鍖哄煙涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbRegionById(Long id); + + /** + * 鎵归噺鍒犻櫎琛屾斂鍖哄煙 + * + * @param ids 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbRegionByIds(Long[] ids); + + /** + * 鏌ヨ琛屾斂鍖哄煙鍒楄〃 + * + * @param params 鍙傛暟 + * @return 琛屾斂鍖哄煙闆嗗悎 + */ + public List getRegionList(Map params); + + /** + * 鏌ヨ琛屾斂鍖哄煙鍒楄〃鐪 + * + * @return 琛屾斂鍖哄煙闆嗗悎 + */ + public List selectRegionProvinceList(); + + /** + * 鏌ヨ琛屾斂鍖哄煙鍒楄〃鐪 + * + * @return 琛屾斂鍖哄煙闆嗗悎 + */ + public List selectRegionCityOrAreaList(Integer id); + + /** + * @param nativePlace id 闆嗗悎 + * @return + */ + List getRegionListByIds(@Param("nativePlace") List nativePlace); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbSmsCodeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbSmsCodeMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..76ebb6fde385f2e399d7c45b3afbf8d9fd8ceba1 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbSmsCodeMapper.java @@ -0,0 +1,72 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbSmsCode; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 鐭俊楠岃瘉鐮丮apper鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-06 + */ +public interface TbSmsCodeMapper +{ + /** + * 鏌ヨ鐭俊楠岃瘉鐮 + * + * @param smsCodeId 鐭俊楠岃瘉鐮佷富閿 + * @return 鐭俊楠岃瘉鐮 + */ + public TbSmsCode selectTbSmsCodeBySmsCodeId(Long smsCodeId); + + /** + * 鏌ヨ鐭俊楠岃瘉鐮佸垪琛 + * + * @param tbSmsCode 鐭俊楠岃瘉鐮 + * @return 鐭俊楠岃瘉鐮侀泦鍚 + */ + public List selectTbSmsCodeList(TbSmsCode tbSmsCode); + + /** + * 鏂板鐭俊楠岃瘉鐮 + * + * @param tbSmsCode 鐭俊楠岃瘉鐮 + * @return 缁撴灉 + */ + public int insertTbSmsCode(TbSmsCode tbSmsCode); + + /** + * 淇敼鐭俊楠岃瘉鐮 + * + * @param tbSmsCode 鐭俊楠岃瘉鐮 + * @return 缁撴灉 + */ + public int updateTbSmsCode(TbSmsCode tbSmsCode); + + /** + * 鍒犻櫎鐭俊楠岃瘉鐮 + * + * @param smsCodeId 鐭俊楠岃瘉鐮佷富閿 + * @return 缁撴灉 + */ + public int deleteTbSmsCodeBySmsCodeId(Long smsCodeId); + + /** + * 鎵归噺鍒犻櫎鐭俊楠岃瘉鐮 + * + * @param smsCodeIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbSmsCodeBySmsCodeIds(Long[] smsCodeIds); + + /** + * 鏍¢獙楠岃瘉鐮 + * @param phone 鎵嬫満鍙 + * @param smsCode 楠岃瘉鐮 + * @param type 绫诲瀷锛0-榛樿锛1-鎵嬫満鍙风櫥褰曪紝2-淇敼涓汉璧勬枡锛3-鑰冭瘯鎶ュ悕锛 + * @return 缁撴灉 + */ + public TbSmsCode checkSmsCode(@Param("phone") String phone, @Param("smsCode") String smsCode, @Param("type") Integer type); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbStudentMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbStudentMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..26c61c1288bf388ad5232fb6d764fcd6a6d89f3e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbStudentMapper.java @@ -0,0 +1,119 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbStudent; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Set; + +/** + * 瀛﹀憳Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-21 + */ +public interface TbStudentMapper +{ + /** + * 鏌ヨ瀛﹀憳 + * + * @param studentId 瀛﹀憳涓婚敭 + * @return 瀛﹀憳 + */ + public TbStudent selectTbStudentByStudentId(Long studentId); + + /** + * 鏌ヨ瀛﹀憳鍒楄〃 + * + * @param tbStudent 瀛﹀憳 + * @return 瀛﹀憳闆嗗悎 + */ + public List selectTbStudentList(TbStudent tbStudent); + + /** + * 鏂板瀛﹀憳 + * + * @param tbStudent 瀛﹀憳 + * @return 缁撴灉 + */ + public int insertTbStudent(TbStudent tbStudent); + + /** + * 淇敼瀛﹀憳 + * + * @param tbStudent 瀛﹀憳 + * @return 缁撴灉 + */ + public int updateTbStudent(TbStudent tbStudent); + + /** + * 鍒犻櫎瀛﹀憳 + * + * @param studentId 瀛﹀憳涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbStudentByStudentId(Long studentId); + + /** + * 鎵归噺鍒犻櫎瀛﹀憳 + * + * @param studentIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbStudentByStudentIds(Long[] studentIds); + + /** + * 鏌ヨ瀛﹀憳 + * + * @param phone 鐢佃瘽/鎵嬫満 + * @param identityCard 韬唤璇佸彿 + * @return 缁撴灉 + */ + public TbStudent selectTbStudentBy(@Param("phone") String phone, @Param("identityCard") String identityCard); + + /** + * 鏌ヨ瀛﹀憳 鍏紬鍙穙penId + * + * @param gzhOpenId 鍏紬鍙穙penId + * @return 瀛﹀憳 + */ + public TbStudent selectTbStudentByGzhOpenId(String gzhOpenId); + + /** + * 鏍规嵁openid鑾峰彇鐢ㄦ埛淇℃伅 + * + * @param openId openId + * @return TbStudent + */ + TbStudent getByOpenId(@Param("openId") String openId); + + /** + * 鏍规嵁unionId鑾峰彇鐢ㄦ埛淇℃伅 + * + * @param unionId unionId + * @return TbStudent + */ + TbStudent getByUnionId(@Param("unionId") String unionId); + + /** + * 鏍规嵁韬唤璇佸彿鑾峰彇瀵瑰簲鐨勭敤鎴穒d + * + * @param identityCard 韬唤璇佸彿 + * @return TbStudent + */ + Long selectTbStudentByIdCard(String identityCard); + + /** + * 鏍规嵁鎵嬫満鍙疯幏鍙栧搴旂殑鐢ㄦ埛id + * + * @param phone 鎵嬫満鍙 + * @return TbStudent + */ + Long selectTbStudentByPhone(String phone); + + List selectTbStudentByPhones(@Param("phoneSet") Set phoneSet); + + List selectTbStudentByIdCards(@Param("idCardSet") Set idCardSet); + + int batchInsertStudents(List insertList); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbStudyCenterClassMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbStudyCenterClassMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..66f65eb09068babb5b9d4a349bd20a131078daeb --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbStudyCenterClassMapper.java @@ -0,0 +1,71 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbStudyCenterClass; + +import java.util.List; +import java.util.Map; + +/** + * 瀛︿範涓績鍒嗙被Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-23 + */ +public interface TbStudyCenterClassMapper +{ + /** + * 鏌ヨ瀛︿範涓績鍒嗙被 + * + * @param studyCenterClassId 瀛︿範涓績鍒嗙被涓婚敭 + * @return 瀛︿範涓績鍒嗙被 + */ + public TbStudyCenterClass selectTbStudyCenterClassByStudyCenterClassId(Long studyCenterClassId); + + /** + * 鏌ヨ瀛︿範涓績鍒嗙被鍒楄〃 + * + * @param tbStudyCenterClass 瀛︿範涓績鍒嗙被 + * @return 瀛︿範涓績鍒嗙被闆嗗悎 + */ + public List selectTbStudyCenterClassList(TbStudyCenterClass tbStudyCenterClass); + + /** + * 鏂板瀛︿範涓績鍒嗙被 + * + * @param tbStudyCenterClass 瀛︿範涓績鍒嗙被 + * @return 缁撴灉 + */ + public int insertTbStudyCenterClass(TbStudyCenterClass tbStudyCenterClass); + + /** + * 淇敼瀛︿範涓績鍒嗙被 + * + * @param tbStudyCenterClass 瀛︿範涓績鍒嗙被 + * @return 缁撴灉 + */ + public int updateTbStudyCenterClass(TbStudyCenterClass tbStudyCenterClass); + + /** + * 鍒犻櫎瀛︿範涓績鍒嗙被 + * + * @param studyCenterClassId 瀛︿範涓績鍒嗙被涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbStudyCenterClassByStudyCenterClassId(Long studyCenterClassId); + + /** + * 鎵归噺鍒犻櫎瀛︿範涓績鍒嗙被 + * + * @param studyCenterClassIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbStudyCenterClassByStudyCenterClassIds(Long[] studyCenterClassIds); + + /** + * 瀛︿範涓績鍒嗙被鍒楄〃 + * + * @param params 鍙傛暟 + * @return 瀛︿範涓績鍒嗙被鍒楄〃 + */ + public List> getStudyCenterClassMapList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbStudyCenterFileMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbStudyCenterFileMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..e0dd8bdb8fbc625f0d96c1a9fed93427e6d140e0 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbStudyCenterFileMapper.java @@ -0,0 +1,71 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbStudyCenterFile; + +import java.util.List; +import java.util.Map; + +/** + * 瀛︿範涓績鏂囦欢Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-18 + */ +public interface TbStudyCenterFileMapper +{ + /** + * 鏌ヨ瀛︿範涓績鏂囦欢 + * + * @param studyCenterFileId 瀛︿範涓績鏂囦欢涓婚敭 + * @return 瀛︿範涓績鏂囦欢 + */ + public TbStudyCenterFile selectTbStudyCenterFileByStudyCenterFileId(Long studyCenterFileId); + + /** + * 鏌ヨ瀛︿範涓績鏂囦欢鍒楄〃 + * + * @param tbStudyCenterFile 瀛︿範涓績鏂囦欢 + * @return 瀛︿範涓績鏂囦欢闆嗗悎 + */ + public List selectTbStudyCenterFileList(TbStudyCenterFile tbStudyCenterFile); + + /** + * 鏂板瀛︿範涓績鏂囦欢 + * + * @param tbStudyCenterFile 瀛︿範涓績鏂囦欢 + * @return 缁撴灉 + */ + public int insertTbStudyCenterFile(TbStudyCenterFile tbStudyCenterFile); + + /** + * 淇敼瀛︿範涓績鏂囦欢 + * + * @param tbStudyCenterFile 瀛︿範涓績鏂囦欢 + * @return 缁撴灉 + */ + public int updateTbStudyCenterFile(TbStudyCenterFile tbStudyCenterFile); + + /** + * 鍒犻櫎瀛︿範涓績鏂囦欢 + * + * @param studyCenterFileId 瀛︿範涓績鏂囦欢涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbStudyCenterFileByStudyCenterFileId(Long studyCenterFileId); + + /** + * 鎵归噺鍒犻櫎瀛︿範涓績鏂囦欢 + * + * @param studyCenterFileIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbStudyCenterFileByStudyCenterFileIds(Long[] studyCenterFileIds); + + /** + * 瀛︿範涓績鏂囦欢鍒楄〃 + * + * @param params 鍙傛暟 + * @return 瀛︿範涓績鏂囦欢鍒楄〃 + */ + public List> getStudyCenterFileList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbStudyCenterMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbStudyCenterMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..2396fc38ef833f4e2f1c3f796371bb8c0daf05fa --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbStudyCenterMapper.java @@ -0,0 +1,112 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbStudyCenter; +import com.ruoyi.hezhi.domain.vo.StudyCenterVO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 瀛︿範涓績Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-21 + */ +public interface TbStudyCenterMapper +{ + /** + * 鏌ヨ瀛︿範涓績 + * + * @param studyCenterId 瀛︿範涓績涓婚敭 + * @return 瀛︿範涓績 + */ + public TbStudyCenter selectTbStudyCenterByStudyCenterId(Long studyCenterId); + /** + * 鏌ヨ瀛︿範涓績 + * + * @param studyCenterName 瀛︿範涓績涓婚敭 + * @return 瀛︿範涓績 + */ + public TbStudyCenter selectTbStudyCenterByStudyCenterName(String studyCenterName); + + /** + * 鏌ヨ瀛︿範涓績鍒楄〃 + * + * @param tbStudyCenter 瀛︿範涓績 + * @return 瀛︿範涓績闆嗗悎 + */ + public List selectTbStudyCenterList(TbStudyCenter tbStudyCenter); + + /** + * 鏌ヨ瀛︿範涓績鍒楄〃 + * + * @return 瀛︿範涓績闆嗗悎 + */ + public List getAllStudyCenterList(); + + /** + * 鏂板瀛︿範涓績 + * + * @param tbStudyCenter 瀛︿範涓績 + * @return 缁撴灉 + */ + public int insertTbStudyCenter(TbStudyCenter tbStudyCenter); + + /** + * 淇敼瀛︿範涓績 + * + * @param tbStudyCenter 瀛︿範涓績 + * @return 缁撴灉 + */ + public int updateTbStudyCenter(TbStudyCenter tbStudyCenter); + + /** + * 鍒犻櫎瀛︿範涓績 + * + * @param studyCenterId 瀛︿範涓績涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbStudyCenterByStudyCenterId(Long studyCenterId); + + /** + * 鎵归噺鍒犻櫎瀛︿範涓績 + * + * @param studyCenterIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbStudyCenterByStudyCenterIds(Long[] studyCenterIds); + + /** + * 鏌ヨ瀛︿範涓績 + * + * @param enterpriseName 浼佷笟鍚嶇О + * @param businessLicenseCreditCode 钀ヤ笟鎵х収淇$敤浠g爜 + * @return 缁撴灉 + */ + public TbStudyCenter selectTbStudyCenterBy(@Param("enterpriseName") String enterpriseName, @Param("businessLicenseCreditCode") String businessLicenseCreditCode); + + /** + * 瀛︿範涓績鍒楄〃 + * + * @param params 鍙傛暟 + * @return 瀛︿範涓績鍒楄〃 + */ + public List> getStudyCenterList(Map params); + + /** + * 瀛︿範涓績璇︽儏 + * + * @param params 鍙傛暟 + * @return 瀛︿範涓績璇︽儏 + */ + public Map getStudyCenterInfo(Map params); + + /** + * getStudyListByCourse + * + * @param courseId 璇剧▼id + * @return List + */ + List getStudyListByCourse(@Param("courseId") Long courseId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbStudyCenterTeacherMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbStudyCenterTeacherMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..287e8895c56a11ad290efa72907642ff50c292f5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbStudyCenterTeacherMapper.java @@ -0,0 +1,77 @@ +package com.ruoyi.hezhi.mapper; + +import java.util.List; +import com.ruoyi.hezhi.domain.TbStudyCenterTeacher; + +/** + * 瀛︿範涓績鏁欏笀Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2025-01-09 + */ +public interface TbStudyCenterTeacherMapper +{ + /** + * 鏌ヨ瀛︿範涓績鏁欏笀 + * + * @param studyCenterTeacherId 瀛︿範涓績鏁欏笀涓婚敭 + * @return 瀛︿範涓績鏁欏笀 + */ + public TbStudyCenterTeacher selectTbStudyCenterTeacherByStudyCenterTeacherId(Long studyCenterTeacherId); + + /** + * 鏌ヨ瀛︿範涓績鏁欏笀鍒楄〃 + * + * @param tbStudyCenterTeacher 瀛︿範涓績鏁欏笀 + * @return 瀛︿範涓績鏁欏笀闆嗗悎 + */ + public List selectTbStudyCenterTeacherList(TbStudyCenterTeacher tbStudyCenterTeacher); + + /** + * 鏌ヨ瀛︿範涓績鏁欏笀鍒楄〃 + * + * @param studyCenterId 瀛︿範涓績ID + * @return 瀛︿範涓績鏁欏笀闆嗗悎 + */ + public List getByStudyCenterId(Long studyCenterId); + + /** + * 鏂板瀛︿範涓績鏁欏笀 + * + * @param tbStudyCenterTeacher 瀛︿範涓績鏁欏笀 + * @return 缁撴灉 + */ + public int insertTbStudyCenterTeacher(TbStudyCenterTeacher tbStudyCenterTeacher); + + /** + * 淇敼瀛︿範涓績鏁欏笀 + * + * @param tbStudyCenterTeacher 瀛︿範涓績鏁欏笀 + * @return 缁撴灉 + */ + public int updateTbStudyCenterTeacher(TbStudyCenterTeacher tbStudyCenterTeacher); + + /** + * 鍒犻櫎瀛︿範涓績鏁欏笀 + * + * @param studyCenterTeacherId 瀛︿範涓績鏁欏笀涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbStudyCenterTeacherByStudyCenterTeacherId(Long studyCenterTeacherId); + + /** + * 鍒犻櫎瀛︿範涓績鏁欏笀 + * + * @param studyCenterId 瀛︿範涓績ID + * @return 缁撴灉 + */ + public int deleteByStudyCenterId(Long studyCenterId); + + /** + * 鎵归噺鍒犻櫎瀛︿範涓績鏁欏笀 + * + * @param studyCenterTeacherIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbStudyCenterTeacherByStudyCenterTeacherIds(Long[] studyCenterTeacherIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbSubjectWarehouseClassMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbSubjectWarehouseClassMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..d32320bbc226bfa20ae0e02c17100841c7db8667 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbSubjectWarehouseClassMapper.java @@ -0,0 +1,80 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbSubjectWarehouseClass; + +import java.util.List; +import java.util.Map; + +/** + * 棰樺簱鍒嗙被Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-06 + */ +public interface TbSubjectWarehouseClassMapper +{ + /** + * 鏌ヨ棰樺簱鍒嗙被 + * + * @param subjectWarehouseClassId 棰樺簱鍒嗙被涓婚敭 + * @return 棰樺簱鍒嗙被 + */ + public TbSubjectWarehouseClass selectTbSubjectWarehouseClassBySubjectWarehouseClassId(Long subjectWarehouseClassId); + + /** + * 鏌ヨ棰樺簱鍒嗙被鍒楄〃 + * + * @param tbSubjectWarehouseClass 棰樺簱鍒嗙被 + * @return 棰樺簱鍒嗙被闆嗗悎 + */ + public List selectTbSubjectWarehouseClassList(TbSubjectWarehouseClass tbSubjectWarehouseClass); + + /** + * 鏌ヨ棰樺簱鍒嗙被鍒楄〃 + * + * @return 棰樺簱鍒嗙被闆嗗悎 + */ + public List getAllSubjectWarehouseCalssList(); + + /** + * 鏂板棰樺簱鍒嗙被 + * + * @param tbSubjectWarehouseClass 棰樺簱鍒嗙被 + * @return 缁撴灉 + */ + public int insertTbSubjectWarehouseClass(TbSubjectWarehouseClass tbSubjectWarehouseClass); + + /** + * 淇敼棰樺簱鍒嗙被 + * + * @param tbSubjectWarehouseClass 棰樺簱鍒嗙被 + * @return 缁撴灉 + */ + public int updateTbSubjectWarehouseClass(TbSubjectWarehouseClass tbSubjectWarehouseClass); + + /** + * 鍒犻櫎棰樺簱鍒嗙被 + * + * @param subjectWarehouseClassId 棰樺簱鍒嗙被涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbSubjectWarehouseClassBySubjectWarehouseClassId(Long subjectWarehouseClassId); + + /** + * 鎵归噺鍒犻櫎棰樺簱鍒嗙被 + * + * @param subjectWarehouseClassIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbSubjectWarehouseClassBySubjectWarehouseClassIds(Long[] subjectWarehouseClassIds); + + /** + * 棰樺簱鍒楄〃 + * + * @param params 鍙傛暟 + * @return 棰樺簱鍒楄〃 + */ + public List> getSubjectWarehouseClassList(Map params); + + public TbSubjectWarehouseClass getSubjectWarehouseClass(Long subjectWarehouseClassId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbTeacherAuthenticationMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbTeacherAuthenticationMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..e52c00fd6c8d7740c81ef6362e946b78b4ab8ed8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbTeacherAuthenticationMapper.java @@ -0,0 +1,77 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbTeacherAuthentication; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 鍚嶅笀璁よ瘉Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-12-13 + */ +public interface TbTeacherAuthenticationMapper +{ + /** + * 鏌ヨ鍚嶅笀璁よ瘉 + * + * @param teacherAuthenticationId 鍚嶅笀璁よ瘉涓婚敭 + * @return 鍚嶅笀璁よ瘉 + */ + public TbTeacherAuthentication selectTbTeacherAuthenticationByTeacherAuthenticationId(Long teacherAuthenticationId); + /** + * 鏌ヨ鍚嶅笀璁よ瘉 + * + * @param phone 鍚嶅笀璁よ瘉涓婚敭 + * @return 鍚嶅笀璁よ瘉 + */ + public TbTeacherAuthentication selectTbTeacherAuthenticationByPhone(String phone); + + /** + * 鏌ヨ鍚嶅笀璁よ瘉鍒楄〃 + * + * @param tbTeacherAuthentication 鍚嶅笀璁よ瘉 + * @return 鍚嶅笀璁よ瘉闆嗗悎 + */ + public List selectTbTeacherAuthenticationList(TbTeacherAuthentication tbTeacherAuthentication); + + /** + * 鏂板鍚嶅笀璁よ瘉 + * + * @param tbTeacherAuthentication 鍚嶅笀璁よ瘉 + * @return 缁撴灉 + */ + public int insertTbTeacherAuthentication(TbTeacherAuthentication tbTeacherAuthentication); + + /** + * 淇敼鍚嶅笀璁よ瘉 + * + * @param tbTeacherAuthentication 鍚嶅笀璁よ瘉 + * @return 缁撴灉 + */ + public int updateTbTeacherAuthentication(TbTeacherAuthentication tbTeacherAuthentication); + + /** + * 鍒犻櫎鍚嶅笀璁よ瘉 + * + * @param teacherAuthenticationId 鍚嶅笀璁よ瘉涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbTeacherAuthenticationByTeacherAuthenticationId(Long teacherAuthenticationId); + + /** + * 鎵归噺鍒犻櫎鍚嶅笀璁よ瘉 + * + * @param teacherAuthenticationIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbTeacherAuthenticationByTeacherAuthenticationIds(Long[] teacherAuthenticationIds); + + /** + * 鑾峰彇鍚嶅笀璁よ瘉 + * @param memberUserId 鐢ㄦ埛ID + * @return 缁撴灉 + */ + public TbTeacherAuthentication getByMemberUserId(@Param("memberUserId") Long memberUserId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbTeacherCourseMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbTeacherCourseMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..581ce3ded03c960f3f30ddd59f43aebb18db78ae --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbTeacherCourseMapper.java @@ -0,0 +1,81 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbTeacherCourse; +import com.ruoyi.hezhi.domain.vo.CourseCardVO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 鑰佸笀璇剧▼鍏宠仈Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-09-14 + */ +public interface TbTeacherCourseMapper +{ + /** + * 鏌ヨ鑰佸笀璇剧▼鍏宠仈 + * + * @param teacherCourseId 鑰佸笀璇剧▼鍏宠仈涓婚敭 + * @return 鑰佸笀璇剧▼鍏宠仈 + */ + public TbTeacherCourse selectTbTeacherCourseByTeacherCourseId(Long teacherCourseId); + + /** + * 鏌ヨ鑰佸笀璇剧▼鍏宠仈鍒楄〃 + * + * @param tbTeacherCourse 鑰佸笀璇剧▼鍏宠仈 + * @return 鑰佸笀璇剧▼鍏宠仈闆嗗悎 + */ + public List selectTbTeacherCourseList(TbTeacherCourse tbTeacherCourse); + + /** + * 鏂板鑰佸笀璇剧▼鍏宠仈 + * + * @param tbTeacherCourse 鑰佸笀璇剧▼鍏宠仈 + * @return 缁撴灉 + */ + public int insertTbTeacherCourse(TbTeacherCourse tbTeacherCourse); + + /** + * 淇敼鑰佸笀璇剧▼鍏宠仈 + * + * @param tbTeacherCourse 鑰佸笀璇剧▼鍏宠仈 + * @return 缁撴灉 + */ + public int updateTbTeacherCourse(TbTeacherCourse tbTeacherCourse); + + /** + * 鍒犻櫎鑰佸笀璇剧▼鍏宠仈 + * + * @param teacherCourseId 鑰佸笀璇剧▼鍏宠仈涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbTeacherCourseByTeacherCourseId(Long teacherCourseId); + + /** + * 鎵归噺鍒犻櫎鑰佸笀璇剧▼鍏宠仈 + * + * @param teacherCourseIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbTeacherCourseByTeacherCourseIds(Long[] teacherCourseIds); + + /** + * 鏌ヨ鏁欏笀璇剧▼鍒楄〃 + * @param teacherId 鏁欏笀id + * @param isSpeak 鏄惁涓昏锛0-鍚︼紝1-鏄級 + * @return + */ + public List selectTeacherCourseList(@Param("teacherId") Long teacherId, @Param("isSpeak")Integer isSpeak); + + /** + * 鏌ヨ璇剧▼涓嬫暀甯堝垪琛 + * + * @param params 鍙傛暟 + * @return ok + */ + public List> getTeacherList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbTeacherMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbTeacherMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..275d408435a0dd895ea46050c74b5eea63981b64 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbTeacherMapper.java @@ -0,0 +1,88 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbTeacher; +import com.ruoyi.hezhi.domain.vo.TeacherVO; + +import java.util.List; +import java.util.Map; + +/** + * 鏁欏笀Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-09-14 + */ +public interface TbTeacherMapper +{ + /** + * 鏌ヨ鏁欏笀 + * + * @param teacherId 鏁欏笀涓婚敭 + * @return 鏁欏笀 + */ + public TbTeacher selectTbTeacherByTeacherId(Long teacherId); + + /** + * 鏌ヨ鏁欏笀鍒楄〃 + * + * @param tbTeacher 鏁欏笀 + * @return 鏁欏笀闆嗗悎 + */ + public List selectTbTeacherList(TbTeacher tbTeacher); + + /** + * 鏂板鏁欏笀 + * + * @param tbTeacher 鏁欏笀 + * @return 缁撴灉 + */ + public int insertTbTeacher(TbTeacher tbTeacher); + + /** + * 淇敼鏁欏笀 + * + * @param tbTeacher 鏁欏笀 + * @return 缁撴灉 + */ + public int updateTbTeacher(TbTeacher tbTeacher); + + /** + * 鍒犻櫎鏁欏笀 + * + * @param teacherId 鏁欏笀涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbTeacherByTeacherId(Long teacherId); + + /** + * 鎵归噺鍒犻櫎鏁欏笀 + * + * @param teacherIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbTeacherByTeacherIds(Long[] teacherIds); + + /** + * 鏌ヨ鏁欏笀鍒楄〃 + * @param typeId 鍒嗙被id + * @return + */ + public List selectTeacherList(Long typeId); + + /** + * 甯堣祫鍥㈤槦鍒楄〃 + * + * @param params 鍙傛暟 + * @return 甯堣祫鍥㈤槦鍒楄〃 + */ + public List> getTeacherList(Map params); + + /** + * 鑰佸笀璇︽儏 + * + * @param params 鍙傛暟 + * @return 鑰佸笀璇︽儏 + */ + public Map getTeacherInfo(Map params); + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbTrendsMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbTrendsMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..5611d2d405a1699f19cd172bb70dfd1adb2dbe69 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbTrendsMapper.java @@ -0,0 +1,69 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbTrends; +import com.ruoyi.hezhi.domain.vo.TrendsVO; + +import java.util.List; + +/** + * 闄㈠唴鍔ㄦ丮apper鎺ュ彛 + * + * @author ruoyi + * @date 2024-09-14 + */ +public interface TbTrendsMapper +{ + /** + * 鏌ヨ闄㈠唴鍔ㄦ + * + * @param trendsId 闄㈠唴鍔ㄦ佷富閿 + * @return 闄㈠唴鍔ㄦ + */ + public TbTrends selectTbTrendsByTrendsId(Long trendsId); + + /** + * 鏌ヨ闄㈠唴鍔ㄦ佸垪琛 + * + * @param tbTrends 闄㈠唴鍔ㄦ + * @return 闄㈠唴鍔ㄦ侀泦鍚 + */ + public List selectTbTrendsList(TbTrends tbTrends); + + /** + * 鏂板闄㈠唴鍔ㄦ + * + * @param tbTrends 闄㈠唴鍔ㄦ + * @return 缁撴灉 + */ + public int insertTbTrends(TbTrends tbTrends); + + /** + * 淇敼闄㈠唴鍔ㄦ + * + * @param tbTrends 闄㈠唴鍔ㄦ + * @return 缁撴灉 + */ + public int updateTbTrends(TbTrends tbTrends); + + /** + * 鍒犻櫎闄㈠唴鍔ㄦ + * + * @param trendsId 闄㈠唴鍔ㄦ佷富閿 + * @return 缁撴灉 + */ + public int deleteTbTrendsByTrendsId(Long trendsId); + + /** + * 鎵归噺鍒犻櫎闄㈠唴鍔ㄦ + * + * @param trendsIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbTrendsByTrendsIds(Long[] trendsIds); + + /** + * 鑾峰彇鍔ㄦ乴ist + * @return + */ + public List getTrendsList(TbTrends tbTrends); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbTypeCourseMapper.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbTypeCourseMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..8e27bfa3b7e382c09ec19a1a7a0aa82db80a5cbc --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/mapper/TbTypeCourseMapper.java @@ -0,0 +1,95 @@ +package com.ruoyi.hezhi.mapper; + +import com.ruoyi.hezhi.domain.TbTypeCourse; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 绫诲瀷璇剧▼鍏宠仈Mapper鎺ュ彛 + * + * @author ruoyi + * @date 2024-09-19 + */ +public interface TbTypeCourseMapper +{ + /** + * 鏌ヨ绫诲瀷璇剧▼鍏宠仈 + * + * @param typeCourseId 绫诲瀷璇剧▼鍏宠仈涓婚敭 + * @return 绫诲瀷璇剧▼鍏宠仈 + */ + public TbTypeCourse selectTbTypeCourseByTypeCourseId(Long typeCourseId); + + /** + * 鏌ヨ绫诲瀷璇剧▼鍏宠仈鍒楄〃 + * + * @param tbTypeCourse 绫诲瀷璇剧▼鍏宠仈 + * @return 绫诲瀷璇剧▼鍏宠仈闆嗗悎 + */ + public List selectTbTypeCourseList(TbTypeCourse tbTypeCourse); + + /** + * 鏂板绫诲瀷璇剧▼鍏宠仈 + * + * @param tbTypeCourse 绫诲瀷璇剧▼鍏宠仈 + * @return 缁撴灉 + */ + public int insertTbTypeCourse(TbTypeCourse tbTypeCourse); + + /** + * 淇敼绫诲瀷璇剧▼鍏宠仈 + * + * @param tbTypeCourse 绫诲瀷璇剧▼鍏宠仈 + * @return 缁撴灉 + */ + public int updateTbTypeCourse(TbTypeCourse tbTypeCourse); + + /** + * 鍒犻櫎绫诲瀷璇剧▼鍏宠仈 + * + * @param typeCourseId 绫诲瀷璇剧▼鍏宠仈涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbTypeCourseByTypeCourseId(Long typeCourseId); + + /** + * 鎵归噺鍒犻櫎绫诲瀷璇剧▼鍏宠仈 + * + * @param typeCourseIds 闇瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbTypeCourseByTypeCourseIds(Long[] typeCourseIds); + + /** + * 鏍规嵁璇剧▼ID鍒犻櫎绫诲瀷璇剧▼鍏宠仈淇℃伅 + * + * @param courseId 璇剧▼ID + * @return 缁撴灉 + */ + public int deleteTbTypeCourseByCourseId(Long courseId); + + /** + * 鏍规嵁璇剧▼ID闆嗗悎 + * @param evaluateAgencyId 鏈烘瀯ID + * @return 缁撴灉 + */ + public List> getTypeCourseByEvaluateAgencyId(@Param("evaluateAgencyId") Long evaluateAgencyId); + + /** + * 鎵归噺鏂板绫诲瀷璇剧▼鍏宠仈 + * + * @param list 鍏宠仈 + * @return 缁撴灉 + */ + public int batchInsertTbTypeCourse(List list); + + /** + * 绫诲瀷ID鎵归噺鍒犻櫎绫诲瀷璇剧▼鍏宠仈 + * + * @param caseTypeId 闇瑕佸垹闄ょ殑绫诲瀷ID涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbTypeCourseByCaseTypeIds(Long[] caseTypeId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbAuthorizeHonorService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbAuthorizeHonorService.java new file mode 100644 index 0000000000000000000000000000000000000000..5b2a1b5a5a0338c33b07545fbde066c2530c8a64 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbAuthorizeHonorService.java @@ -0,0 +1,72 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbAuthorizeHonor; + +import java.util.List; +import java.util.Map; + +/** + * 鎺堟潈鑽h獕Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-16 + */ +public interface ITbAuthorizeHonorService +{ + /** + * 鏌ヨ鎺堟潈鑽h獕 + * + * @param authorizeHonorId 鎺堟潈鑽h獕涓婚敭 + * @return 鎺堟潈鑽h獕 + */ + public TbAuthorizeHonor selectTbAuthorizeHonorByAuthorizeHonorId(Long authorizeHonorId); + + /** + * 鏌ヨ鎺堟潈鑽h獕鍒楄〃 + * + * @param tbAuthorizeHonor 鎺堟潈鑽h獕 + * @return 鎺堟潈鑽h獕闆嗗悎 + */ + public List selectTbAuthorizeHonorList(TbAuthorizeHonor tbAuthorizeHonor); + + /** + * 鏂板鎺堟潈鑽h獕 + * + * @param tbAuthorizeHonor 鎺堟潈鑽h獕 + * @return 缁撴灉 + */ + public int insertTbAuthorizeHonor(TbAuthorizeHonor tbAuthorizeHonor); + + /** + * 淇敼鎺堟潈鑽h獕 + * + * @param tbAuthorizeHonor 鎺堟潈鑽h獕 + * @return 缁撴灉 + */ + public int updateTbAuthorizeHonor(TbAuthorizeHonor tbAuthorizeHonor); + + /** + * 鎵归噺鍒犻櫎鎺堟潈鑽h獕 + * + * @param authorizeHonorIds 闇瑕佸垹闄ょ殑鎺堟潈鑽h獕涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbAuthorizeHonorByAuthorizeHonorIds(Long[] authorizeHonorIds); + + /** + * 鍒犻櫎鎺堟潈鑽h獕淇℃伅 + * + * @param authorizeHonorId 鎺堟潈鑽h獕涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbAuthorizeHonorByAuthorizeHonorId(Long authorizeHonorId); + + /** + * 鎺堟潈鍙婅崳瑾夊垪琛 + * + * @param params 鍙傛暟 + * @return 鎺堟潈鍙婅崳瑾夊垪琛 + */ + public List> getAuthorizeHonorList(Map params); + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbBannerService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbBannerService.java new file mode 100644 index 0000000000000000000000000000000000000000..1bbc4d6077145435ef5dd4bd5e807ab067c499d8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbBannerService.java @@ -0,0 +1,73 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbBanner; +import com.ruoyi.hezhi.domain.dto.BannerDTO; +import com.ruoyi.hezhi.domain.vo.BannerVO; + +import java.util.List; + +/** + * 杞挱鍥維ervice鎺ュ彛 + * + * @author CC + * @date 2024-03-12 + */ +public interface ITbBannerService +{ + /** + * 鏌ヨ杞挱鍥 + * + * @param bannerId 杞挱鍥句富閿 + * @return 杞挱鍥 + */ + public TbBanner selectTbBannerByBannerId(String bannerId); + + /** + * 鏌ヨ杞挱鍥惧垪琛 + * + * @param tbBanner 杞挱鍥 + * @return 杞挱鍥鹃泦鍚 + */ + public List selectTbBannerList(TbBanner tbBanner); + + /** + * 鏂板杞挱鍥 + * + * @param tbBanner 杞挱鍥 + * @return 缁撴灉 + */ + public int insertTbBanner(TbBanner tbBanner); + + /** + * 淇敼杞挱鍥 + * + * @param tbBanner 杞挱鍥 + * @return 缁撴灉 + */ + public int updateTbBanner(TbBanner tbBanner); + + /** + * 鎵归噺鍒犻櫎杞挱鍥 + * + * @param bannerIds 闇瑕佸垹闄ょ殑杞挱鍥句富閿泦鍚 + * @return 缁撴灉 + */ + public int deleteTbBannerByBannerIds(String[] bannerIds); + + /** + * 鍒犻櫎杞挱鍥句俊鎭 + * + * @param bannerId 杞挱鍥句富閿 + * @return 缁撴灉 + */ + public int deleteTbBannerByBannerId(String bannerId); + + /** + * xcx閫氱敤鈥斺旀煡璇㈣疆鎾浘鍒楄〃 + * + * @param banner 杞挱鍥惧弬鏁 + * @return 杞挱鍥鹃泦鍚 + */ + public List selectBannerListForXcxCommon(BannerDTO banner); + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbCareerClassService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbCareerClassService.java new file mode 100644 index 0000000000000000000000000000000000000000..caa4b2d8b1edfd908ec35f97f0effd937f31e3d0 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbCareerClassService.java @@ -0,0 +1,87 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbCareerClass; + +import java.util.List; +import java.util.Map; + +/** + * 鑱屼笟鍒嗙被Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-10 + */ +public interface ITbCareerClassService +{ + /** + * 鏌ヨ鑱屼笟鍒嗙被 + * + * @param careerId 鑱屼笟鍒嗙被涓婚敭 + * @return 鑱屼笟鍒嗙被 + */ + public TbCareerClass selectTbCareerClassByCareerId(Long careerId); + + /** + * 鏌ヨ鑱屼笟鍒嗙被鍒楄〃 + * + * @param tbCareerClass 鑱屼笟鍒嗙被 + * @return 鑱屼笟鍒嗙被闆嗗悎 + */ + public List selectTbCareerClassList(TbCareerClass tbCareerClass); + + /** + * 鏂板鑱屼笟鍒嗙被 + * + * @param tbCareerClass 鑱屼笟鍒嗙被 + * @return 缁撴灉 + */ + public int insertTbCareerClass(TbCareerClass tbCareerClass); + + /** + * 淇敼鑱屼笟鍒嗙被 + * + * @param tbCareerClass 鑱屼笟鍒嗙被 + * @return 缁撴灉 + */ + public int updateTbCareerClass(TbCareerClass tbCareerClass); + + /** + * 鎵归噺鍒犻櫎鑱屼笟鍒嗙被 + * + * @param careerIds 闇瑕佸垹闄ょ殑鑱屼笟鍒嗙被涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbCareerClassByCareerIds(Long[] careerIds); + + /** + * 鍒犻櫎鑱屼笟鍒嗙被淇℃伅 + * + * @param careerId 鑱屼笟鍒嗙被涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbCareerClassByCareerId(Long careerId); + + /** + * 鏌ヨ鑱屼笟鍒嗙被鍒楄〃 + * + * @return 鑱屼笟鍒嗙被闆嗗悎 + */ + public List selectTbCareerClassTreeList(); + + /** + * 鏌ヨ鑱屼笟鍒嗙被鏍戝垪琛 + * + * @param treeList 鑱屼笟鍒嗙被鍒楄〃 + * @param pid 鐖剁骇ID + * @return 鑱屼笟鍒嗙被闆嗗悎 + */ + public List toTree(List treeList, Long pid); + + /** + * 鑱屼笟鍒嗙被鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鑱屼笟鍒嗙被闆嗗悎鍒楄〃 + */ + public List> selectTbCareerClassMapList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbCaseService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbCaseService.java new file mode 100644 index 0000000000000000000000000000000000000000..e0bfaaa67d9bbf5f1c8470614588a03b045dee2b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbCaseService.java @@ -0,0 +1,77 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbCase; +import com.ruoyi.hezhi.domain.vo.CaseVO; + +import java.util.List; + +/** + * 妗堜緥Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-09-14 + */ +public interface ITbCaseService +{ + /** + * 鏌ヨ妗堜緥 + * + * @param caseId 妗堜緥涓婚敭 + * @return 妗堜緥 + */ + public TbCase selectTbCaseByCaseId(Long caseId); + + /** + * 鏌ヨ妗堜緥鍒楄〃 + * + * @param tbCase 妗堜緥 + * @return 妗堜緥闆嗗悎 + */ + public List selectTbCaseList(TbCase tbCase); + + /** + * 鏂板妗堜緥 + * + * @param tbCase 妗堜緥 + * @return 缁撴灉 + */ + public int insertTbCase(TbCase tbCase); + + /** + * 淇敼妗堜緥 + * + * @param tbCase 妗堜緥 + * @return 缁撴灉 + */ + public int updateTbCase(TbCase tbCase); + + /** + * 鎵归噺鍒犻櫎妗堜緥 + * + * @param caseIds 闇瑕佸垹闄ょ殑妗堜緥涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbCaseByCaseIds(Long[] caseIds); + + /** + * 鍒犻櫎妗堜緥淇℃伅 + * + * @param caseId 妗堜緥涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbCaseByCaseId(Long caseId); + + /** + * 妗堜緥list + * @param caseTypeId 妗堜緥绫诲瀷id 0鍏ㄩ儴 + * @return + */ + public List selectCaseListByType(Long caseTypeId); + + /** + * 璇︽儏 + * @param id + * @return + */ + public CaseVO getDetail(Long id); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbCaseTypeService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbCaseTypeService.java new file mode 100644 index 0000000000000000000000000000000000000000..b467f7e517932a7b3533c48a5cc7917c3a1dc441 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbCaseTypeService.java @@ -0,0 +1,69 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbCaseType; +import com.ruoyi.hezhi.domain.vo.CaseTypeVO; + +import java.util.List; + +/** + * 妗堜緥绫诲瀷Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-09-14 + */ +public interface ITbCaseTypeService +{ + /** + * 鏌ヨ妗堜緥绫诲瀷 + * + * @param caseTypeId 妗堜緥绫诲瀷涓婚敭 + * @return 妗堜緥绫诲瀷 + */ + public TbCaseType selectTbCaseTypeByCaseTypeId(Long caseTypeId); + + /** + * 鏌ヨ妗堜緥绫诲瀷鍒楄〃 + * + * @param tbCaseType 妗堜緥绫诲瀷 + * @return 妗堜緥绫诲瀷闆嗗悎 + */ + public List selectTbCaseTypeList(TbCaseType tbCaseType); + + /** + * 鏂板妗堜緥绫诲瀷 + * + * @param tbCaseType 妗堜緥绫诲瀷 + * @return 缁撴灉 + */ + public int insertTbCaseType(TbCaseType tbCaseType); + + /** + * 淇敼妗堜緥绫诲瀷 + * + * @param tbCaseType 妗堜緥绫诲瀷 + * @return 缁撴灉 + */ + public int updateTbCaseType(TbCaseType tbCaseType); + + /** + * 鎵归噺鍒犻櫎妗堜緥绫诲瀷 + * + * @param caseTypeIds 闇瑕佸垹闄ょ殑妗堜緥绫诲瀷涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbCaseTypeByCaseTypeIds(Long[] caseTypeIds); + + /** + * 鍒犻櫎妗堜緥绫诲瀷淇℃伅 + * + * @param caseTypeId 妗堜緥绫诲瀷涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbCaseTypeByCaseTypeId(Long caseTypeId); + + /** + * 鑾峰彇妗堜緥鍒嗙被list + * @return + */ + public List getCaseTypeList(); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbConferenceNoticeService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbConferenceNoticeService.java new file mode 100644 index 0000000000000000000000000000000000000000..a8e4971fb8220d8981cd064a4d484bc084377425 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbConferenceNoticeService.java @@ -0,0 +1,93 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbConferenceNotice; + +import java.util.List; +import java.util.Map; + +/** + * 鏁板瓧鏁欒偛澶т細閫氱煡Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-29 + */ +public interface ITbConferenceNoticeService +{ + /** + * 鏌ヨ鏁板瓧鏁欒偛澶т細閫氱煡 + * + * @param conferenceNoticeId 鏁板瓧鏁欒偛澶т細閫氱煡涓婚敭 + * @return 鏁板瓧鏁欒偛澶т細閫氱煡 + */ + public TbConferenceNotice selectTbConferenceNoticeByConferenceNoticeId(Long conferenceNoticeId); + + /** + * 鏌ヨ鏁板瓧鏁欒偛澶т細閫氱煡鍒楄〃 + * + * @param tbConferenceNotice 鏁板瓧鏁欒偛澶т細閫氱煡 + * @return 鏁板瓧鏁欒偛澶т細閫氱煡闆嗗悎 + */ + public List selectTbConferenceNoticeList(TbConferenceNotice tbConferenceNotice); + + /** + * 鏂板鏁板瓧鏁欒偛澶т細閫氱煡 + * + * @param tbConferenceNotice 鏁板瓧鏁欒偛澶т細閫氱煡 + * @return 缁撴灉 + */ + public int insertTbConferenceNotice(TbConferenceNotice tbConferenceNotice); + + /** + * 淇敼鏁板瓧鏁欒偛澶т細閫氱煡 + * + * @param tbConferenceNotice 鏁板瓧鏁欒偛澶т細閫氱煡 + * @return 缁撴灉 + */ + public int updateTbConferenceNotice(TbConferenceNotice tbConferenceNotice); + + /** + * 鎵归噺鍒犻櫎鏁板瓧鏁欒偛澶т細閫氱煡 + * + * @param conferenceNoticeIds 闇瑕佸垹闄ょ殑鏁板瓧鏁欒偛澶т細閫氱煡涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbConferenceNoticeByConferenceNoticeIds(Long[] conferenceNoticeIds); + + /** + * 鍒犻櫎鏁板瓧鏁欒偛澶т細閫氱煡淇℃伅 + * + * @param conferenceNoticeId 鏁板瓧鏁欒偛澶т細閫氱煡涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbConferenceNoticeByConferenceNoticeId(Long conferenceNoticeId); + + /** + * 鏁板瓧鏁欒偛澶т細閫氱煡鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鏁板瓧鏁欒偛澶т細閫氱煡鍒楄〃 + */ + public List> getCourseTeacherList(Map params); + + /** + * 鏁板瓧鏁欒偛澶т細閫氱煡璇︽儏 + * + * @param params 鍙傛暟 + * @return 鏁板瓧鏁欒偛澶т細閫氱煡璇︽儏 + */ + public Map getConferenceNoticeInfo(Map params); + + /** + * 鏌ヨ鏈鏂版暟瀛楁暀鑲插ぇ浼氫細璁氱煡锛堜細璁紑濮嬫椂闂存湭寮濮嬶級 + * + * @return 鏁板瓧鏁欒偛澶т細閫氱煡 + */ + public TbConferenceNotice selectTbConferenceNoticeByNew(); + + /** + * 鏌ヨ寮濮嬫姤鍚嶇殑鏁板瓧鏁欒偛澶т細浼氳閫氱煡 + * + * @return 鏁板瓧鏁欒偛澶т細閫氱煡 + */ + public TbConferenceNotice selectTbConferenceNoticeByEnroll(); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbConferencePeopleService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbConferencePeopleService.java new file mode 100644 index 0000000000000000000000000000000000000000..2e9405fd69cdbb2025fabc28fc8268c702f93f53 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbConferencePeopleService.java @@ -0,0 +1,71 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbConferencePeople; + +import java.util.List; +import java.util.Map; + +/** + * 鏁板瓧鏁欒偛澶т細鍙備細鍢夊Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-29 + */ +public interface ITbConferencePeopleService +{ + /** + * 鏌ヨ鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + * + * @param conferencePeopleId 鏁板瓧鏁欒偛澶т細鍙備細鍢夊涓婚敭 + * @return 鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + */ + public TbConferencePeople selectTbConferencePeopleByConferencePeopleId(Long conferencePeopleId); + + /** + * 鏌ヨ鏁板瓧鏁欒偛澶т細鍙備細鍢夊鍒楄〃 + * + * @param tbConferencePeople 鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + * @return 鏁板瓧鏁欒偛澶т細鍙備細鍢夊闆嗗悎 + */ + public List selectTbConferencePeopleList(TbConferencePeople tbConferencePeople); + + /** + * 鏂板鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + * + * @param tbConferencePeople 鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + * @return 缁撴灉 + */ + public int insertTbConferencePeople(TbConferencePeople tbConferencePeople); + + /** + * 淇敼鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + * + * @param tbConferencePeople 鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + * @return 缁撴灉 + */ + public int updateTbConferencePeople(TbConferencePeople tbConferencePeople); + + /** + * 鎵归噺鍒犻櫎鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + * + * @param conferencePeopleIds 闇瑕佸垹闄ょ殑鏁板瓧鏁欒偛澶т細鍙備細鍢夊涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbConferencePeopleByConferencePeopleIds(Long[] conferencePeopleIds); + + /** + * 鍒犻櫎鏁板瓧鏁欒偛澶т細鍙備細鍢夊淇℃伅 + * + * @param conferencePeopleId 鏁板瓧鏁欒偛澶т細鍙備細鍢夊涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbConferencePeopleByConferencePeopleId(Long conferencePeopleId); + + /** + * 鍙備細鍢夊鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鍙備細鍢夊鍒楄〃 + */ + public List> getConferencePeopleList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbConferenceRegistrationService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbConferenceRegistrationService.java new file mode 100644 index 0000000000000000000000000000000000000000..82b7639f35023170289e3b7c498d45770906036d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbConferenceRegistrationService.java @@ -0,0 +1,81 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.hezhi.domain.TbConferenceRegistration; +import com.ruoyi.hezhi.domain.dto.ConferenceRegistrationDTO; + +import java.util.List; +import java.util.Map; + +/** + * 鍙備細鎶ュ悕Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-28 + */ +public interface ITbConferenceRegistrationService +{ + /** + * 鏌ヨ鍙備細鎶ュ悕 + * + * @param conferenceRegistrationId 鍙備細鎶ュ悕涓婚敭 + * @return 鍙備細鎶ュ悕 + */ + public TbConferenceRegistration selectTbConferenceRegistrationByConferenceRegistrationId(Long conferenceRegistrationId); + + /** + * 鏌ヨ鍙備細鎶ュ悕鍒楄〃 + * + * @param tbConferenceRegistration 鍙備細鎶ュ悕 + * @return 鍙備細鎶ュ悕闆嗗悎 + */ + public List selectTbConferenceRegistrationList(TbConferenceRegistration tbConferenceRegistration); + + /** + * 鏂板鍙備細鎶ュ悕 + * + * @param tbConferenceRegistration 鍙備細鎶ュ悕 + * @return 缁撴灉 + */ + public int insertTbConferenceRegistration(TbConferenceRegistration tbConferenceRegistration); + + /** + * 淇敼鍙備細鎶ュ悕 + * + * @param tbConferenceRegistration 鍙備細鎶ュ悕 + * @return 缁撴灉 + */ + public int updateTbConferenceRegistration(TbConferenceRegistration tbConferenceRegistration); + + /** + * 鎵归噺鍒犻櫎鍙備細鎶ュ悕 + * + * @param conferenceRegistrationIds 闇瑕佸垹闄ょ殑鍙備細鎶ュ悕涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbConferenceRegistrationByConferenceRegistrationIds(Long[] conferenceRegistrationIds); + + /** + * 鍒犻櫎鍙備細鎶ュ悕淇℃伅 + * + * @param conferenceRegistrationId 鍙備細鎶ュ悕涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbConferenceRegistrationByConferenceRegistrationId(Long conferenceRegistrationId); + + /** + * 鍙備細鎶ュ悕 + * + * @param conferenceRegistrationDTO + * @return ok + */ + public AjaxResult conferenceRegistration(ConferenceRegistrationDTO conferenceRegistrationDTO); + + /** + * 鍙備細鎶ュ悕璇︽儏 + * + * @param params 鍙傛暟 + * @return 鍙備細鎶ュ悕璇︽儏 + */ + public Map getConferenceRegistrationInfo(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbConfigService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbConfigService.java new file mode 100644 index 0000000000000000000000000000000000000000..6c373f6d9a71e3e223ae9e6a3668e9c1f4508279 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbConfigService.java @@ -0,0 +1,71 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbConfig; + +import java.util.List; +import java.util.Map; + +/** + * 鐩稿叧璁剧疆Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-22 + */ +public interface ITbConfigService +{ + /** + * 鏌ヨ鐩稿叧璁剧疆 + * + * @param configId 鐩稿叧璁剧疆涓婚敭 + * @return 鐩稿叧璁剧疆 + */ + public TbConfig selectTbConfigByConfigId(Long configId); + + /** + * 鏌ヨ鐩稿叧璁剧疆鍒楄〃 + * + * @param tbConfig 鐩稿叧璁剧疆 + * @return 鐩稿叧璁剧疆闆嗗悎 + */ + public List selectTbConfigList(TbConfig tbConfig); + + /** + * 鏂板鐩稿叧璁剧疆 + * + * @param tbConfig 鐩稿叧璁剧疆 + * @return 缁撴灉 + */ + public int insertTbConfig(TbConfig tbConfig); + + /** + * 淇敼鐩稿叧璁剧疆 + * + * @param tbConfig 鐩稿叧璁剧疆 + * @return 缁撴灉 + */ + public int updateTbConfig(TbConfig tbConfig); + + /** + * 鎵归噺鍒犻櫎鐩稿叧璁剧疆 + * + * @param configIds 闇瑕佸垹闄ょ殑鐩稿叧璁剧疆涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbConfigByConfigIds(Long[] configIds); + + /** + * 鍒犻櫎鐩稿叧璁剧疆淇℃伅 + * + * @param configId 鐩稿叧璁剧疆涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbConfigByConfigId(Long configId); + + /** + * 鐩稿叧璁剧疆 + * + * @param params 鍙傛暟 + * @return 鐩稿叧璁剧疆璇︽儏 + */ + public Map getLiveBroadcastInfo(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbContinuingEducationClassService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbContinuingEducationClassService.java new file mode 100644 index 0000000000000000000000000000000000000000..285ff1b6bfcee98fa2cb4c6e0f4895d89e88b1a1 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbContinuingEducationClassService.java @@ -0,0 +1,86 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbContinuingEducationClass; + +import java.util.List; +import java.util.Map; + +/** + * 缁х画鏁欒偛鍒嗙被Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-23 + */ +public interface ITbContinuingEducationClassService +{ + /** + * 鏌ヨ缁х画鏁欒偛鍒嗙被 + * + * @param continuingEducationClassId 缁х画鏁欒偛鍒嗙被涓婚敭 + * @return 缁х画鏁欒偛鍒嗙被 + */ + public TbContinuingEducationClass selectTbContinuingEducationClassByContinuingEducationClassId(Long continuingEducationClassId); + + /** + * 鏌ヨ缁х画鏁欒偛鍒嗙被鍒楄〃 + * + * @param tbContinuingEducationClass 缁х画鏁欒偛鍒嗙被 + * @return 缁х画鏁欒偛鍒嗙被闆嗗悎 + */ + public List selectTbContinuingEducationClassList(TbContinuingEducationClass tbContinuingEducationClass); + + /** + * 鏌ヨ缁х画鏁欒偛鍒嗙被鍒楄〃 + * + * @return 缁х画鏁欒偛鍒嗙被闆嗗悎 + */ + public List getAllContinuingEducationClassList(); + + /** + * 鏂板缁х画鏁欒偛鍒嗙被 + * + * @param tbContinuingEducationClass 缁х画鏁欒偛鍒嗙被 + * @return 缁撴灉 + */ + public int insertTbContinuingEducationClass(TbContinuingEducationClass tbContinuingEducationClass); + + /** + * 淇敼缁х画鏁欒偛鍒嗙被 + * + * @param tbContinuingEducationClass 缁х画鏁欒偛鍒嗙被 + * @return 缁撴灉 + */ + public int updateTbContinuingEducationClass(TbContinuingEducationClass tbContinuingEducationClass); + + /** + * 鎵归噺鍒犻櫎缁х画鏁欒偛鍒嗙被 + * + * @param continuingEducationClassIds 闇瑕佸垹闄ょ殑缁х画鏁欒偛鍒嗙被涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbContinuingEducationClassByContinuingEducationClassIds(Long[] continuingEducationClassIds); + + /** + * 鍒犻櫎缁х画鏁欒偛鍒嗙被淇℃伅 + * + * @param continuingEducationClassId 缁х画鏁欒偛鍒嗙被涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbContinuingEducationClassByContinuingEducationClassId(Long continuingEducationClassId); + + /** + * 缁х画鏁欒偛鍒嗙被鍒楄〃 + * + * @param params 鍙傛暟 + * @return 缁х画鏁欒偛鍒嗙被鍒楄〃 + */ + public List> getContinuingEducationClassMapList(Map params); + + /** + * 缁х画鏁欒偛鍒楄〃 + * + * @param params 鍙傛暟 + * @return 缁х画鏁欒偛鍒楄〃 + */ + public List> getContinuingEducationList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbCooperatePartnerService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbCooperatePartnerService.java new file mode 100644 index 0000000000000000000000000000000000000000..74591e09a61cb4c92c5654e7683cbb81973d5e86 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbCooperatePartnerService.java @@ -0,0 +1,71 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbCooperatePartner; + +import java.util.List; +import java.util.Map; + +/** + * 鍚堜綔浼欎即Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-16 + */ +public interface ITbCooperatePartnerService +{ + /** + * 鏌ヨ鍚堜綔浼欎即 + * + * @param cooperatePartnerId 鍚堜綔浼欎即涓婚敭 + * @return 鍚堜綔浼欎即 + */ + public TbCooperatePartner selectTbCooperatePartnerByCooperatePartnerId(Long cooperatePartnerId); + + /** + * 鏌ヨ鍚堜綔浼欎即鍒楄〃 + * + * @param tbCooperatePartner 鍚堜綔浼欎即 + * @return 鍚堜綔浼欎即闆嗗悎 + */ + public List selectTbCooperatePartnerList(TbCooperatePartner tbCooperatePartner); + + /** + * 鏂板鍚堜綔浼欎即 + * + * @param tbCooperatePartner 鍚堜綔浼欎即 + * @return 缁撴灉 + */ + public int insertTbCooperatePartner(TbCooperatePartner tbCooperatePartner); + + /** + * 淇敼鍚堜綔浼欎即 + * + * @param tbCooperatePartner 鍚堜綔浼欎即 + * @return 缁撴灉 + */ + public int updateTbCooperatePartner(TbCooperatePartner tbCooperatePartner); + + /** + * 鎵归噺鍒犻櫎鍚堜綔浼欎即 + * + * @param cooperatePartnerIds 闇瑕佸垹闄ょ殑鍚堜綔浼欎即涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbCooperatePartnerByCooperatePartnerIds(Long[] cooperatePartnerIds); + + /** + * 鍒犻櫎鍚堜綔浼欎即淇℃伅 + * + * @param cooperatePartnerId 鍚堜綔浼欎即涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbCooperatePartnerByCooperatePartnerId(Long cooperatePartnerId); + + /** + * 鍚堜綔浼欎即鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鍚堜綔浼欎即鍒楄〃 + */ + public List> getCooperatePartnerList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbCourseChapterService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbCourseChapterService.java new file mode 100644 index 0000000000000000000000000000000000000000..bcbfa05d5c4c3bd6f5f857d9f4462f5cf1b3fe7b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbCourseChapterService.java @@ -0,0 +1,79 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbCourseChapter; + +import java.util.List; + +/** + * 璇剧▼绔犺妭Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-09-14 + */ +public interface ITbCourseChapterService +{ + /** + * 鏌ヨ璇剧▼绔犺妭 + * + * @param chapterId 璇剧▼绔犺妭涓婚敭 + * @return 璇剧▼绔犺妭 + */ + public TbCourseChapter selectTbCourseChapterByChapterId(Long chapterId); + + /** + * 鏌ヨ璇剧▼绔犺妭鍒楄〃 + * + * @param tbCourseChapter 璇剧▼绔犺妭 + * @return 璇剧▼绔犺妭闆嗗悎 + */ + public List selectTbCourseChapterList(TbCourseChapter tbCourseChapter); + + /** + * 鏂板璇剧▼绔犺妭 + * + * @param tbCourseChapter 璇剧▼绔犺妭 + * @return 缁撴灉 + */ + public int insertTbCourseChapter(TbCourseChapter tbCourseChapter); + + /** + * 淇敼璇剧▼绔犺妭 + * + * @param tbCourseChapter 璇剧▼绔犺妭 + * @return 缁撴灉 + */ + public int updateTbCourseChapter(TbCourseChapter tbCourseChapter); + + /** + * 鎵归噺鍒犻櫎璇剧▼绔犺妭 + * + * @param chapterIds 闇瑕佸垹闄ょ殑璇剧▼绔犺妭涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbCourseChapterByChapterIds(Long[] chapterIds); + + /** + * 鍒犻櫎璇剧▼绔犺妭淇℃伅 + * + * @param chapterId 璇剧▼绔犺妭涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbCourseChapterByChapterId(Long chapterId); + + /** + * 鏌ヨ璇剧▼绔犺妭鏍戝垪琛 + * + * @param courseId 璇剧▼ID + * @return 璇剧▼绔犺妭闆嗗悎 + */ + public List getCourseChapterTreeList(Long courseId); + + /** + * 鏌ヨ璇剧▼绔犺妭鏍戝垪琛 + * + * @param treeList 璇剧▼绔犺妭鍒楄〃 + * @param pid 鐖剁骇ID + * @return 璇剧▼绔犺妭闆嗗悎 + */ + public List toTree(List treeList, Long pid); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbCourseEvaluateService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbCourseEvaluateService.java new file mode 100644 index 0000000000000000000000000000000000000000..f6ba3881ab957819ea083280396448a6ab0e14b8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbCourseEvaluateService.java @@ -0,0 +1,89 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.hezhi.domain.TbCourseEvaluate; +import com.ruoyi.hezhi.domain.dto.CourseEvaluateDTO; + +import java.util.List; +import java.util.Map; + +/** + * 璇剧▼璇勪环Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-09-14 + */ +public interface ITbCourseEvaluateService +{ + /** + * 鏌ヨ璇剧▼璇勪环 + * + * @param courseEvaluateId 璇剧▼璇勪环涓婚敭 + * @return 璇剧▼璇勪环 + */ + public TbCourseEvaluate selectTbCourseEvaluateByCourseEvaluateId(Long courseEvaluateId); + + /** + * 鏌ヨ璇剧▼璇勪环鍒楄〃 + * + * @param tbCourseEvaluate 璇剧▼璇勪环 + * @return 璇剧▼璇勪环闆嗗悎 + */ + public List selectTbCourseEvaluateList(TbCourseEvaluate tbCourseEvaluate); + + /** + * 鏂板璇剧▼璇勪环 + * + * @param tbCourseEvaluate 璇剧▼璇勪环 + * @return 缁撴灉 + */ + public int insertTbCourseEvaluate(TbCourseEvaluate tbCourseEvaluate); + + /** + * 淇敼璇剧▼璇勪环 + * + * @param tbCourseEvaluate 璇剧▼璇勪环 + * @return 缁撴灉 + */ + public int updateTbCourseEvaluate(TbCourseEvaluate tbCourseEvaluate); + + /** + * 鎵归噺鍒犻櫎璇剧▼璇勪环 + * + * @param courseEvaluateIds 闇瑕佸垹闄ょ殑璇剧▼璇勪环涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbCourseEvaluateByCourseEvaluateIds(Long[] courseEvaluateIds); + + /** + * 鍒犻櫎璇剧▼璇勪环淇℃伅 + * + * @param courseEvaluateId 璇剧▼璇勪环涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbCourseEvaluateByCourseEvaluateId(Long courseEvaluateId); + + /** + * 鏌ヨ璇剧▼璇勪环鍒楄〃 + * + * @param params 鍙傛暟 + * @return ok + */ + public List> getCourseEvaluateList(Map params); + + /** + * 鏌ヨ璇剧▼璇勪环璇勫垎 + * + * @param params 鍙傛暟 + * @return ok + */ + public Map getCourseEvaluateScore(Map params); + + /** + * 鎻愪氦璇勪环 + * + * @param courseEvaluateDTO + * @return ok + */ + public AjaxResult submitEvaluation(CourseEvaluateDTO courseEvaluateDTO); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbCourseService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbCourseService.java new file mode 100644 index 0000000000000000000000000000000000000000..ecf1e29fb3682dd9ab97804be19b5d3ee281631c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbCourseService.java @@ -0,0 +1,108 @@ +package com.ruoyi.hezhi.service; + +import com.github.pagehelper.PageInfo; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.hezhi.domain.TbCourse; +import com.ruoyi.hezhi.domain.TbSubjectWarehouseClass; +import com.ruoyi.hezhi.domain.dto.CourseDTO; + +import java.util.List; +import java.util.Map; + +/** + * 璇剧▼Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-09-14 + */ +public interface ITbCourseService +{ + /** + * 鏌ヨ璇剧▼ + * + * @param courseId 璇剧▼涓婚敭 + * @return 璇剧▼ + */ + public TbCourse selectTbCourseByCourseId(Long courseId); + + /** + * 鏌ヨ璇剧▼鍒楄〃 + * + * @param tbCourse 璇剧▼ + * @return 璇剧▼闆嗗悎 + */ + public List selectTbCourseList(TbCourse tbCourse); + + /** + * 鏌ヨ璇剧▼鍒楄〃 + * + * @return 璇剧▼闆嗗悎 + */ + public List getAllCourseList(); + + /** + * 鏂板璇剧▼ + * + * @param tbCourse 璇剧▼ + * @return 缁撴灉 + */ + public int insertTbCourse(TbCourse tbCourse); + + /** + * 淇敼璇剧▼ + * + * @param tbCourse 璇剧▼ + * @return 缁撴灉 + */ + public int updateTbCourse(TbCourse tbCourse); + + /** + * 鎵归噺鍒犻櫎璇剧▼ + * + * @param courseIds 闇瑕佸垹闄ょ殑璇剧▼涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbCourseByCourseIds(Long[] courseIds); + + /** + * 鍒犻櫎璇剧▼淇℃伅 + * + * @param courseId 璇剧▼涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbCourseByCourseId(Long courseId); + + /** + * 鏌ヨ璇剧▼鍒楄〃 + * + * @param params 鍙傛暟 + * @return ok + */ + public List> getCourseList(Map params); + + /** + * 鏌ヨ璇剧▼璇︽儏 + * + * @param params 鍙傛暟 + * @return ok + */ + public Map getCourseInfo(Map params); + + /** + * 绔嬪嵆鍙傚姞 + * + * @param courseDTO + * @return ok + */ + public AjaxResult joinNow(CourseDTO courseDTO); + + /** + * 娴忚閲+1 + * + * @param courseId 璇剧▼涓婚敭 + * @return 缁撴灉 + */ + public int addViewsNum(Long courseId); + + public PageInfo> getCourseNameListForInput(Integer pageNum, Integer pageSize, String searchValue,Long memberUserId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbDownloadService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbDownloadService.java new file mode 100644 index 0000000000000000000000000000000000000000..a57a61e067c4fd45d8e89837effca677626bec1f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbDownloadService.java @@ -0,0 +1,71 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbDownload; + +import java.util.List; +import java.util.Map; + +/** + * 鍦ㄧ嚎涓嬭浇Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-30 + */ +public interface ITbDownloadService +{ + /** + * 鏌ヨ鍦ㄧ嚎涓嬭浇 + * + * @param downloadId 鍦ㄧ嚎涓嬭浇涓婚敭 + * @return 鍦ㄧ嚎涓嬭浇 + */ + public TbDownload selectTbDownloadByDownloadId(Long downloadId); + + /** + * 鏌ヨ鍦ㄧ嚎涓嬭浇鍒楄〃 + * + * @param tbDownload 鍦ㄧ嚎涓嬭浇 + * @return 鍦ㄧ嚎涓嬭浇闆嗗悎 + */ + public List selectTbDownloadList(TbDownload tbDownload); + + /** + * 鏂板鍦ㄧ嚎涓嬭浇 + * + * @param tbDownload 鍦ㄧ嚎涓嬭浇 + * @return 缁撴灉 + */ + public int insertTbDownload(TbDownload tbDownload); + + /** + * 淇敼鍦ㄧ嚎涓嬭浇 + * + * @param tbDownload 鍦ㄧ嚎涓嬭浇 + * @return 缁撴灉 + */ + public int updateTbDownload(TbDownload tbDownload); + + /** + * 鎵归噺鍒犻櫎鍦ㄧ嚎涓嬭浇 + * + * @param downloadIds 闇瑕佸垹闄ょ殑鍦ㄧ嚎涓嬭浇涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbDownloadByDownloadIds(Long[] downloadIds); + + /** + * 鍒犻櫎鍦ㄧ嚎涓嬭浇淇℃伅 + * + * @param downloadId 鍦ㄧ嚎涓嬭浇涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbDownloadByDownloadId(Long downloadId); + + /** + * 鍦ㄧ嚎涓嬭浇鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鍦ㄧ嚎涓嬭浇鍒楄〃鍒楄〃 + */ + public List> getDownloadList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbEnterpriseProgressService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbEnterpriseProgressService.java new file mode 100644 index 0000000000000000000000000000000000000000..357ecc929d8600be2f7f87bcc24ef1703ba232a6 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbEnterpriseProgressService.java @@ -0,0 +1,70 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbEnterpriseProgress; + +import java.util.List; +import java.util.Map; + +/** + * 浼佷笟鍘嗙▼Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-21 + */ +public interface ITbEnterpriseProgressService +{ + /** + * 鏌ヨ浼佷笟鍘嗙▼ + * + * @param enterpriseProgressId 浼佷笟鍘嗙▼涓婚敭 + * @return 浼佷笟鍘嗙▼ + */ + public TbEnterpriseProgress selectTbEnterpriseProgressByEnterpriseProgressId(Long enterpriseProgressId); + + /** + * 鏌ヨ浼佷笟鍘嗙▼鍒楄〃 + * + * @param tbEnterpriseProgress 浼佷笟鍘嗙▼ + * @return 浼佷笟鍘嗙▼闆嗗悎 + */ + public List selectTbEnterpriseProgressList(TbEnterpriseProgress tbEnterpriseProgress); + + /** + * 鏂板浼佷笟鍘嗙▼ + * + * @param tbEnterpriseProgress 浼佷笟鍘嗙▼ + * @return 缁撴灉 + */ + public int insertTbEnterpriseProgress(TbEnterpriseProgress tbEnterpriseProgress); + + /** + * 淇敼浼佷笟鍘嗙▼ + * + * @param tbEnterpriseProgress 浼佷笟鍘嗙▼ + * @return 缁撴灉 + */ + public int updateTbEnterpriseProgress(TbEnterpriseProgress tbEnterpriseProgress); + + /** + * 鎵归噺鍒犻櫎浼佷笟鍘嗙▼ + * + * @param enterpriseProgressIds 闇瑕佸垹闄ょ殑浼佷笟鍘嗙▼涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbEnterpriseProgressByEnterpriseProgressIds(Long[] enterpriseProgressIds); + + /** + * 鍒犻櫎浼佷笟鍘嗙▼淇℃伅 + * + * @param enterpriseProgressId 浼佷笟鍘嗙▼涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbEnterpriseProgressByEnterpriseProgressId(Long enterpriseProgressId); + + /** + * 浼佷笟鍘嗙▼鍒楄〃 + * + * @return 浼佷笟鍘嗙▼鍒楄〃 + */ + public List> getEnterpriseProgressList(); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbEvaluateAgencyClassService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbEvaluateAgencyClassService.java new file mode 100644 index 0000000000000000000000000000000000000000..6dfc3237e20dd1ab77347c816649bd7f57b5317d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbEvaluateAgencyClassService.java @@ -0,0 +1,71 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbEvaluateAgencyClass; + +import java.util.List; +import java.util.Map; + +/** + * 璇勪环鏈烘瀯鍒嗙被Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-23 + */ +public interface ITbEvaluateAgencyClassService +{ + /** + * 鏌ヨ璇勪环鏈烘瀯鍒嗙被 + * + * @param evaluateAgencyClassId 璇勪环鏈烘瀯鍒嗙被涓婚敭 + * @return 璇勪环鏈烘瀯鍒嗙被 + */ + public TbEvaluateAgencyClass selectTbEvaluateAgencyClassByEvaluateAgencyClassId(Long evaluateAgencyClassId); + + /** + * 鏌ヨ璇勪环鏈烘瀯鍒嗙被鍒楄〃 + * + * @param tbEvaluateAgencyClass 璇勪环鏈烘瀯鍒嗙被 + * @return 璇勪环鏈烘瀯鍒嗙被闆嗗悎 + */ + public List selectTbEvaluateAgencyClassList(TbEvaluateAgencyClass tbEvaluateAgencyClass); + + /** + * 鏂板璇勪环鏈烘瀯鍒嗙被 + * + * @param tbEvaluateAgencyClass 璇勪环鏈烘瀯鍒嗙被 + * @return 缁撴灉 + */ + public int insertTbEvaluateAgencyClass(TbEvaluateAgencyClass tbEvaluateAgencyClass); + + /** + * 淇敼璇勪环鏈烘瀯鍒嗙被 + * + * @param tbEvaluateAgencyClass 璇勪环鏈烘瀯鍒嗙被 + * @return 缁撴灉 + */ + public int updateTbEvaluateAgencyClass(TbEvaluateAgencyClass tbEvaluateAgencyClass); + + /** + * 鎵归噺鍒犻櫎璇勪环鏈烘瀯鍒嗙被 + * + * @param evaluateAgencyClassIds 闇瑕佸垹闄ょ殑璇勪环鏈烘瀯鍒嗙被涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbEvaluateAgencyClassByEvaluateAgencyClassIds(Long[] evaluateAgencyClassIds); + + /** + * 鍒犻櫎璇勪环鏈烘瀯鍒嗙被淇℃伅 + * + * @param evaluateAgencyClassId 璇勪环鏈烘瀯鍒嗙被涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbEvaluateAgencyClassByEvaluateAgencyClassId(Long evaluateAgencyClassId); + + /** + * 璇勪环鏈烘瀯鍒嗙被鍒楄〃 + * + * @param params 鍙傛暟 + * @return 璇勪环鏈烘瀯鍒嗙被鍒楄〃 + */ + public List> getEvaluateAgencyClassMapList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbEvaluateAgencyService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbEvaluateAgencyService.java new file mode 100644 index 0000000000000000000000000000000000000000..636cccc22aa0d6ba262af34d77ade4c171473348 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbEvaluateAgencyService.java @@ -0,0 +1,99 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbEvaluateAgency; +import com.ruoyi.hezhi.domain.vo.EvaluateAgencyVO; + +import java.util.List; +import java.util.Map; + +/** + * 璇勪环鏈烘瀯Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-23 + */ +public interface ITbEvaluateAgencyService +{ + /** + * 鏌ヨ璇勪环鏈烘瀯 + * + * @param evaluateAgencyId 璇勪环鏈烘瀯涓婚敭 + * @return 璇勪环鏈烘瀯 + */ + public TbEvaluateAgency selectTbEvaluateAgencyByEvaluateAgencyId(Long evaluateAgencyId); + + /** + * 鏌ヨ璇勪环鏈烘瀯鍒楄〃 + * + * @param tbEvaluateAgency 璇勪环鏈烘瀯 + * @return 璇勪环鏈烘瀯闆嗗悎 + */ + public List selectTbEvaluateAgencyList(TbEvaluateAgency tbEvaluateAgency); + + /** + * 鏂板璇勪环鏈烘瀯 + * + * @param tbEvaluateAgency 璇勪环鏈烘瀯 + * @return 缁撴灉 + */ + public int insertTbEvaluateAgency(TbEvaluateAgency tbEvaluateAgency); + + /** + * 淇敼璇勪环鏈烘瀯 + * + * @param tbEvaluateAgency 璇勪环鏈烘瀯 + * @return 缁撴灉 + */ + public int updateTbEvaluateAgency(TbEvaluateAgency tbEvaluateAgency); + + /** + * 鎵归噺鍒犻櫎璇勪环鏈烘瀯 + * + * @param evaluateAgencyIds 闇瑕佸垹闄ょ殑璇勪环鏈烘瀯涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbEvaluateAgencyByEvaluateAgencyIds(Long[] evaluateAgencyIds); + + /** + * 鍒犻櫎璇勪环鏈烘瀯淇℃伅 + * + * @param evaluateAgencyId 璇勪环鏈烘瀯涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbEvaluateAgencyByEvaluateAgencyId(Long evaluateAgencyId); + + /** + * 鑾峰彇绛涢夊垪琛 + * @return 缁撴灉 + */ + public List getSelectList(); + + /** + * 璇勪环鏈烘瀯鍒楄〃 + * + * @param params 鍙傛暟 + * @return 璇勪环鏈烘瀯鍒楄〃 + */ + public List> getEvaluateAgencyList(Map params); + + /** + * 鑾峰彇鏈夋帹鑽愯绋嬬殑璇勪环鏈烘瀯鍒楄〃 + * @return 缁撴灉 + */ + public List> getEvaluateAgencyListHasCourse(Map params); + + /** + * 璇勪环鏈烘瀯璇︽儏 + * + * @param params 鍙傛暟 + * @return 璇勪环鏈烘瀯璇︽儏 + */ + public Map getEvaluateAgencyInfo(Map params); + + /** + * 鏍规嵁璇剧▼绫诲瀷鑾峰彇鏈烘瀯鍒楄〃 + * @param classType 1-鑱屼笟鑰冭瘯锛2-鑱屼笟鎶鑳 + * @return 缁撴灉 + */ + public List> getEvaluateAgencyListByClassType(Integer classType); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamBatchService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamBatchService.java new file mode 100644 index 0000000000000000000000000000000000000000..06c46c6cb8a624b9b668c7122dbdefc5a5284f8d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamBatchService.java @@ -0,0 +1,69 @@ +package com.ruoyi.hezhi.service; + +import java.util.List; +import com.ruoyi.hezhi.domain.TbExamBatch; + +/** + * 鑰冭瘯鎵规Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-12-21 + */ +public interface ITbExamBatchService +{ + /** + * 鏌ヨ鑰冭瘯鎵规 + * + * @param examBatchId 鑰冭瘯鎵规涓婚敭 + * @return 鑰冭瘯鎵规 + */ + public TbExamBatch selectTbExamBatchByExamBatchId(Long examBatchId); + + /** + * 鏌ヨ鑰冭瘯鎵规鍒楄〃 + * + * @param tbExamBatch 鑰冭瘯鎵规 + * @return 鑰冭瘯鎵规闆嗗悎 + */ + public List selectTbExamBatchList(TbExamBatch tbExamBatch); + + /** + * 鏂板鑰冭瘯鎵规 + * + * @param tbExamBatch 鑰冭瘯鎵规 + * @return 缁撴灉 + */ + public int insertTbExamBatch(TbExamBatch tbExamBatch); + + /** + * 淇敼鑰冭瘯鎵规 + * + * @param tbExamBatch 鑰冭瘯鎵规 + * @return 缁撴灉 + */ + public int updateTbExamBatch(TbExamBatch tbExamBatch); + + /** + * 鎵归噺鍒犻櫎鑰冭瘯鎵规 + * + * @param examBatchIds 闇瑕佸垹闄ょ殑鑰冭瘯鎵规涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbExamBatchByExamBatchIds(Long[] examBatchIds); + + /** + * 鍒犻櫎鑰冭瘯鎵规淇℃伅 + * + * @param examBatchId 鑰冭瘯鎵规涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbExamBatchByExamBatchId(Long examBatchId); + + /** + * 鏌ヨ鑰冭瘯鎵规 + * @param examId 鑰冭瘯ID + * @param batchIndex 鎵规搴忓彿 + * @return 缁撴灉 + */ + public TbExamBatch getByExamIdBatchIndex(Long examId, Integer batchIndex); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamFileService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamFileService.java new file mode 100644 index 0000000000000000000000000000000000000000..e7a7b5a1927ce115a1c6dae0bc5e2abf3006c7d8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamFileService.java @@ -0,0 +1,81 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.hezhi.domain.TbExamFile; +import com.ruoyi.hezhi.domain.dto.ExamFileDTO; + +import java.util.List; +import java.util.Map; + +/** + * 鑰冭瘯鎷嶆憚鏂囦欢Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-14 + */ +public interface ITbExamFileService +{ + /** + * 鏌ヨ鑰冭瘯鎷嶆憚鏂囦欢 + * + * @param examFileId 鑰冭瘯鎷嶆憚鏂囦欢涓婚敭 + * @return 鑰冭瘯鎷嶆憚鏂囦欢 + */ + public TbExamFile selectTbExamFileByExamFileId(Long examFileId); + + /** + * 鏌ヨ鑰冭瘯鎷嶆憚鏂囦欢鍒楄〃 + * + * @param tbExamFile 鑰冭瘯鎷嶆憚鏂囦欢 + * @return 鑰冭瘯鎷嶆憚鏂囦欢闆嗗悎 + */ + public List selectTbExamFileList(TbExamFile tbExamFile); + + /** + * 鏂板鑰冭瘯鎷嶆憚鏂囦欢 + * + * @param tbExamFile 鑰冭瘯鎷嶆憚鏂囦欢 + * @return 缁撴灉 + */ + public int insertTbExamFile(TbExamFile tbExamFile); + + /** + * 淇敼鑰冭瘯鎷嶆憚鏂囦欢 + * + * @param tbExamFile 鑰冭瘯鎷嶆憚鏂囦欢 + * @return 缁撴灉 + */ + public int updateTbExamFile(TbExamFile tbExamFile); + + /** + * 鎵归噺鍒犻櫎鑰冭瘯鎷嶆憚鏂囦欢 + * + * @param examFileIds 闇瑕佸垹闄ょ殑鑰冭瘯鎷嶆憚鏂囦欢涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbExamFileByExamFileIds(Long[] examFileIds); + + /** + * 鍒犻櫎鑰冭瘯鎷嶆憚鏂囦欢淇℃伅 + * + * @param examFileId 鑰冭瘯鎷嶆憚鏂囦欢涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbExamFileByExamFileId(Long examFileId); + + /** + * 姝e紡鑰冭瘯鎷嶆憚 + * + * @param examFileDTO + * @return ok + */ + public AjaxResult subjectFormalPhotograph(ExamFileDTO examFileDTO); + + /** + * 鎴戠殑姝e紡鑰冭瘯鎷嶇収鍒楄〃 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public List> getSubjectFormalPhotographList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamNoticeService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamNoticeService.java new file mode 100644 index 0000000000000000000000000000000000000000..f9cb992cc371cf0fe3a06f06261d4c8febecf3de --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamNoticeService.java @@ -0,0 +1,79 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbExamNotice; + +import java.util.List; +import java.util.Map; + +/** + * 鑰冭瘯閫氱煡Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-16 + */ +public interface ITbExamNoticeService +{ + /** + * 鏌ヨ鑰冭瘯閫氱煡 + * + * @param examNoticeId 鑰冭瘯閫氱煡涓婚敭 + * @return 鑰冭瘯閫氱煡 + */ + public TbExamNotice selectTbExamNoticeByExamNoticeId(Long examNoticeId); + + /** + * 鏌ヨ鑰冭瘯閫氱煡鍒楄〃 + * + * @param tbExamNotice 鑰冭瘯閫氱煡 + * @return 鑰冭瘯閫氱煡闆嗗悎 + */ + public List selectTbExamNoticeList(TbExamNotice tbExamNotice); + + /** + * 鏂板鑰冭瘯閫氱煡 + * + * @param tbExamNotice 鑰冭瘯閫氱煡 + * @return 缁撴灉 + */ + public int insertTbExamNotice(TbExamNotice tbExamNotice); + + /** + * 淇敼鑰冭瘯閫氱煡 + * + * @param tbExamNotice 鑰冭瘯閫氱煡 + * @return 缁撴灉 + */ + public int updateTbExamNotice(TbExamNotice tbExamNotice); + + /** + * 鎵归噺鍒犻櫎鑰冭瘯閫氱煡 + * + * @param examNoticeIds 闇瑕佸垹闄ょ殑鑰冭瘯閫氱煡涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbExamNoticeByExamNoticeIds(Long[] examNoticeIds); + + /** + * 鍒犻櫎鑰冭瘯閫氱煡淇℃伅 + * + * @param examNoticeId 鑰冭瘯閫氱煡涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbExamNoticeByExamNoticeId(Long examNoticeId); + + /** + * 鑰冭瘯閫氱煡鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鑰冭瘯閫氱煡鍒楄〃 + */ + public List> getExamNoticeList(Map params); + + /** + * 鑰冭瘯閫氱煡璇︽儏 + * + * @param params 鍙傛暟 + * @return 鑰冭瘯閫氱煡璇︽儏 + */ + public Map getExamNoticeInfo(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamRegistrationService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamRegistrationService.java new file mode 100644 index 0000000000000000000000000000000000000000..fcde89b06db5161e5be6e3583a5cc60e9398a6b3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamRegistrationService.java @@ -0,0 +1,184 @@ +package com.ruoyi.hezhi.service; + +import com.alibaba.fastjson2.JSONObject; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.hezhi.domain.TbExamRegistration; +import com.ruoyi.hezhi.domain.dto.ExamRegistrationDTO; +import com.ruoyi.hezhi.domain.dto.PostAddressDTO; +import com.ruoyi.hezhi.domain.vo.TbExamRegistrationVO; +import com.ruoyi.hezhi.domain.vo.TopicImportTemplateVO; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.Valid; +import java.util.List; +import java.util.Map; + +/** + * 鑰冭瘯鎶ュ悕Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-05 + */ +public interface ITbExamRegistrationService +{ + /** + * 鏌ヨ鑰冭瘯鎶ュ悕 + * + * @param examRegistrationId 鑰冭瘯鎶ュ悕涓婚敭 + * @return 鑰冭瘯鎶ュ悕 + */ + public TbExamRegistration selectTbExamRegistrationByExamRegistrationId(Long examRegistrationId); + /** + * 鏌ヨ鍙戣揣淇℃伅 + * + * @param examRegistrationId 鑰冭瘯鎶ュ悕涓婚敭 + * @return 鑰冭瘯鎶ュ悕 + */ + public TbExamRegistration selectTbExamRegistrationByExamRegistrationIdFahuo(Long examRegistrationId); + + /** + * 鏌ヨ鑰冭瘯鎶ュ悕鍒楄〃 + * + * @param tbExamRegistration 鑰冭瘯鎶ュ悕 + * @return 鑰冭瘯鎶ュ悕闆嗗悎 + */ + public List selectTbExamRegistrationList(TbExamRegistration tbExamRegistration); + + /** + * 鏂板鑰冭瘯鎶ュ悕 + * + * @param tbExamRegistration 鑰冭瘯鎶ュ悕 + * @return 缁撴灉 + */ + public int insertTbExamRegistration(TbExamRegistration tbExamRegistration); + + /** + * 淇敼鑰冭瘯鎶ュ悕 + * + * @param tbExamRegistration 鑰冭瘯鎶ュ悕 + * @return 缁撴灉 + */ + public int updateTbExamRegistration(TbExamRegistration tbExamRegistration); + + /** + * 鎵归噺鍒犻櫎鑰冭瘯鎶ュ悕 + * + * @param examRegistrationIds 闇瑕佸垹闄ょ殑鑰冭瘯鎶ュ悕涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbExamRegistrationByExamRegistrationIds(Long[] examRegistrationIds); + + /** + * 鍒犻櫎鑰冭瘯鎶ュ悕淇℃伅 + * + * @param examRegistrationId 鑰冭瘯鎶ュ悕涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbExamRegistrationByExamRegistrationId(Long examRegistrationId); + + /** + * 璇佷功鍙戣揣 + * @param tbExamRegistration 鍙傛暟 + * @return 缁撴灉 + */ + public int certificateSend(TbExamRegistration tbExamRegistration); + + /** + * 鑰冭瘯鎶ュ悕 + * + * @param examRegistrationDTO + * @return ok + */ + public AjaxResult examRegistration(ExamRegistrationDTO examRegistrationDTO); + + /** + * 鏌ヨ鐢ㄦ埛鑰冭瘯鎶ュ悕 + * + * @param memberUserId 鐢ㄦ埛ID + * @param examId 鑰冭瘯ID + * @return 鑰冭瘯鎶ュ悕 + */ + public TbExamRegistration selectTbExamRegistrationByUserIdExamId(Long memberUserId, Long examId); + + /** + * 鎴戠殑鑰冭瘯鍒楄〃 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public List> getMemberExamList(Map params); + + /** + * 鎴戠殑鑰冭瘯璇︽儏 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public Map getMemberExamInfo(Map params); + + /** + * 鏌ヨ鑰冭瘯鎶ュ悕璇︽儏 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public Map getExamRegistrationInfo(Map params); + + /** + * 瀛︿範璁″垝-鎴戠殑璇句欢鍒楄〃 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public List> getMemberCoursewareList(Map params); + + /** + * 鎴戠殑鎶ュ悕琛ㄣ佸噯鑰冭瘉銆佽瘉涔 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public Map getMemberCertificateMore(Map params); + + // /** + // * 鏌ョ湅蹇掍俊鎭 + // * + // * @param params 鍙傛暟 + // * @return 缁撴灉 + // */ + // public Map getExpressInfo(Map params); + + /** + * 濉啓璇佷功鏀惰揣淇℃伅 + * + * @param postAddressDTO + * @return ok + */ + public AjaxResult submitCertificateGoodsInfo(PostAddressDTO postAddressDTO); + + /** + * 鎶ュ悕鑰冭瘯鍗冲皢寮濮嬪脊绐楀垪琛 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public Map getStartNowPopupList(Map params); + + /** + * 鑾峰彇鑰冭瘯鎶ュ悕琛 + * @param type 1-鍑嗚冭瘉锛4-璇佷功锛10-鎶ュ悕琛紝11-鎴愮哗鍗 + * @param memberUserId 鐢ㄦ埛ID + * @param examRegistrationId 鑰冭瘯鎶ュ悕ID + * @return 缁撴灉 + */ + public JSONObject getReportFormView(Long type, Long memberUserId, Long examRegistrationId); + + /** + * 瀵煎叆鑰冭瘯棰樼洰 + * @param list 鏂囦欢 + * @return 缁撴灉 + */ + String importData(@Valid List list)throws Exception; + + AjaxResult havaOrderToPay(Long memberUserId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamService.java new file mode 100644 index 0000000000000000000000000000000000000000..8e57974347f233f635945c8b8ef45c58577a525c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamService.java @@ -0,0 +1,96 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbExam; +import com.ruoyi.hezhi.domain.vo.CareerExamListVO; +import com.ruoyi.hezhi.domain.vo.CourseListVO; +import com.ruoyi.hezhi.domain.vo.StudyCenterVO; + +import java.util.List; +import java.util.Map; + +/** + * 鑰冭瘯Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-12 + */ +public interface ITbExamService +{ + /** + * 鏌ヨ鑰冭瘯 + * + * @param examId 鑰冭瘯涓婚敭 + * @return 鑰冭瘯 + */ + public TbExam selectTbExamByExamId(Long examId); + + /** + * 鏌ヨ鑰冭瘯鍒楄〃 + * + * @param tbExam 鑰冭瘯 + * @return 鑰冭瘯闆嗗悎 + */ + public List selectTbExamList(TbExam tbExam); + + /** + * 鏂板鑰冭瘯 + * + * @param tbExam 鑰冭瘯 + * @return 缁撴灉 + */ + public int insertTbExam(TbExam tbExam); + + /** + * 淇敼鑰冭瘯 + * + * @param tbExam 鑰冭瘯 + * @return 缁撴灉 + */ + public int updateTbExam(TbExam tbExam); + + /** + * 鎵归噺鍒犻櫎鑰冭瘯 + * + * @param examIds 闇瑕佸垹闄ょ殑鑰冭瘯涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbExamByExamIds(Long[] examIds); + + /** + * 鍒犻櫎鑰冭瘯淇℃伅 + * + * @param examId 鑰冭瘯涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbExamByExamId(Long examId); + + /** + * 鑱屼笟鑰冭瘯鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鑱屼笟鑰冭瘯鍒楄〃 + */ + public List getCareerExamList(Map params); + + /** + * 鑱屼笟鑰冭瘯璇︽儏 + * + * @param params 鍙傛暟 + * @return 鑱屼笟鑰冭瘯璇︽儏 + */ + public Map getCareerExamInfo(Map params); + + /** + * 鏍规嵁鏈烘瀯id鏌ヨ璇剧▼鍒楄〃 + * @param evaluateAgencyId 鏈烘瀯鍚嶇О + * @return List + */ + List getCourseListByEvaluateAgency(Long evaluateAgencyId); + + /** + * 鏍规嵁璇剧▼id鏌ヨ瀛︿範涓績 + * @param courseId 璇剧▼id + * @return + */ + List getStudyListByCourse(Long courseId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamSimulateInfoService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamSimulateInfoService.java new file mode 100644 index 0000000000000000000000000000000000000000..4bbe354d5b1d528fdfd498692f09f4c984be5bb5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamSimulateInfoService.java @@ -0,0 +1,107 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.hezhi.domain.TbExamSimulateInfo; +import com.ruoyi.hezhi.domain.dto.MemberExamSimulateAllDTO; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + +/** + * 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-11 + */ +public interface ITbExamSimulateInfoService +{ + /** + * 鏌ヨ鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + * + * @param examSimulateInfoId 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏涓婚敭 + * @return 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + */ + public TbExamSimulateInfo selectTbExamSimulateInfoByExamSimulateInfoId(Long examSimulateInfoId); + + /** + * 鏌ヨ鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏鍒楄〃 + * + * @param tbExamSimulateInfo 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + * @return 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏闆嗗悎 + */ + public List selectTbExamSimulateInfoList(TbExamSimulateInfo tbExamSimulateInfo); + + /** + * 鏂板鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + * + * @param tbExamSimulateInfo 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + * @return 缁撴灉 + */ + public int insertTbExamSimulateInfo(TbExamSimulateInfo tbExamSimulateInfo); + + /** + * 淇敼鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + * + * @param tbExamSimulateInfo 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + * @return 缁撴灉 + */ + public int updateTbExamSimulateInfo(TbExamSimulateInfo tbExamSimulateInfo); + + /** + * 鎵归噺鍒犻櫎鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + * + * @param examSimulateInfoIds 闇瑕佸垹闄ょ殑鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbExamSimulateInfoByExamSimulateInfoIds(Long[] examSimulateInfoIds); + + /** + * 鍒犻櫎鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏淇℃伅 + * + * @param examSimulateInfoId 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbExamSimulateInfoByExamSimulateInfoId(Long examSimulateInfoId); + + /** + * 鏌ヨ妯℃嫙鑰冭瘯鑰冪敓鍙婅冭瘯淇℃伅 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public Map getSimulateSubjectAllInfo(Map params); + + /** + * 鑰冭瘯浜ゅ嵎 + * + * @param memberExamSimulateAllDTO + * @return ok + */ + public AjaxResult subjectExamSubmit(MemberExamSimulateAllDTO memberExamSimulateAllDTO); + + /** + * 璁$畻鎬诲垎 + * + * @param examSimulateInfoId 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏涓婚敭 + * @return 缁撴灉 + */ + public BigDecimal countTotalScore(Long examSimulateInfoId); + + /** + * 鏌ヨ姝e紡鑰冭瘯鑰冪敓鍙婅冭瘯淇℃伅 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public Map getFormalSubjectAllInfo(Map params); + + /** + * 姝e紡鑰冭瘯琛ヨ + * + * @param memberExamSimulateAllDTO + * @return ok + */ + public AjaxResult subjectFormalAgain(MemberExamSimulateAllDTO memberExamSimulateAllDTO); + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamSubjectAnswerService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamSubjectAnswerService.java new file mode 100644 index 0000000000000000000000000000000000000000..46e2c28dd358faab0b8ed579f694bebd53740f26 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamSubjectAnswerService.java @@ -0,0 +1,106 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbExamSubjectAnswer; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + +/** + * 鑰冭瘯棰樼洰绛旀閫夐」Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-04 + */ +public interface ITbExamSubjectAnswerService +{ + /** + * 鏌ヨ鑰冭瘯棰樼洰绛旀閫夐」 + * + * @param examSubjectAnswerId 鑰冭瘯棰樼洰绛旀閫夐」涓婚敭 + * @return 鑰冭瘯棰樼洰绛旀閫夐」 + */ + public TbExamSubjectAnswer selectTbExamSubjectAnswerByExamSubjectAnswerId(Long examSubjectAnswerId); + + /** + * 鏌ヨ鑰冭瘯棰樼洰绛旀閫夐」鍒楄〃 + * + * @param tbExamSubjectAnswer 鑰冭瘯棰樼洰绛旀閫夐」 + * @return 鑰冭瘯棰樼洰绛旀閫夐」闆嗗悎 + */ + public List selectTbExamSubjectAnswerList(TbExamSubjectAnswer tbExamSubjectAnswer); + + /** + * 鏂板鑰冭瘯棰樼洰绛旀閫夐」 + * + * @param tbExamSubjectAnswer 鑰冭瘯棰樼洰绛旀閫夐」 + * @return 缁撴灉 + */ + public int insertTbExamSubjectAnswer(TbExamSubjectAnswer tbExamSubjectAnswer); + + /** + * 淇敼鑰冭瘯棰樼洰绛旀閫夐」 + * + * @param tbExamSubjectAnswer 鑰冭瘯棰樼洰绛旀閫夐」 + * @return 缁撴灉 + */ + public int updateTbExamSubjectAnswer(TbExamSubjectAnswer tbExamSubjectAnswer); + + /** + * 鎵归噺鍒犻櫎鑰冭瘯棰樼洰绛旀閫夐」 + * + * @param examSubjectAnswerIds 闇瑕佸垹闄ょ殑鑰冭瘯棰樼洰绛旀閫夐」涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbExamSubjectAnswerByExamSubjectAnswerIds(Long[] examSubjectAnswerIds); + + /** + * 鍒犻櫎鑰冭瘯棰樼洰绛旀閫夐」淇℃伅 + * + * @param examSubjectAnswerId 鑰冭瘯棰樼洰绛旀閫夐」涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbExamSubjectAnswerByExamSubjectAnswerId(Long examSubjectAnswerId); + + /** + * 鎵归噺鏂板鑰冭瘯棰樼洰绛旀閫夐」 + * + * @param list 鑰冭瘯棰樼洰绛旀閫夐」 + * @return 缁撴灉 + */ + public int batchInsertTbExamSubjectAnswer(List list); + + /** + * 鏌ヨ绛旀ID闆嗗悎鍜岀瓟妗堥泦鍚 + * + * @param examSubjectId 鑰冭瘯棰樼洰涓婚敭ID + * @param examSubjectNo 鑰冭瘯棰樼洰缂栧彿 + * @return 缁撴灉 + */ + public Map selectAnswerIdsAndAnswer(Long examSubjectId, String examSubjectNo); + + /** + * 鏌ヨ鑰冭瘯棰樼洰绛旀閫夐」鍒楄〃锛堣冭瘯棰樼洰缂栧彿锛 + * + * @param examSubjectNo 鑰冭瘯棰樼洰缂栧彿 + * @return 鑰冭瘯棰樼洰绛旀閫夐」闆嗗悎 + */ + public List selectTbExamSubjectAnswerListBy(String examSubjectNo); + + /** + * 鎵归噺鍒犻櫎鑰冭瘯棰樼洰绛旀閫夐」淇℃伅锛堣冭瘯棰樼洰缂栧彿锛 + * + * @param examSubjectNo 鑰冭瘯棰樼洰缂栧彿 + * @return 缁撴灉 + */ + public int batchDeleteTbExamSubjectAnswerByExamSubjectNo(String examSubjectNo); + + /** + * 璁鸿堪棰樺垎鏁 + * + * @param examSubjectNo 鑰冭瘯棰樼洰缂栧彿 + * @param myAnswer 绛旀 + * @return 缁撴灉 + */ + public BigDecimal getDiscussScore(String examSubjectNo, String myAnswer); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamSubjectFormalService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamSubjectFormalService.java new file mode 100644 index 0000000000000000000000000000000000000000..8766b645b78853ee43862593d5902c1e7e780f44 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamSubjectFormalService.java @@ -0,0 +1,80 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbExam; +import com.ruoyi.hezhi.domain.TbExamSubjectFormal; + +import java.util.List; +import java.util.Map; + +/** + * 姝e紡鑰冭瘯棰樼洰Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-13 + */ +public interface ITbExamSubjectFormalService +{ + /** + * 鏌ヨ姝e紡鑰冭瘯棰樼洰 + * + * @param examSubjectFormalId 姝e紡鑰冭瘯棰樼洰涓婚敭 + * @return 姝e紡鑰冭瘯棰樼洰 + */ + public TbExamSubjectFormal selectTbExamSubjectFormalByExamSubjectFormalId(Long examSubjectFormalId); + + /** + * 鏌ヨ姝e紡鑰冭瘯棰樼洰鍒楄〃 + * + * @param tbExamSubjectFormal 姝e紡鑰冭瘯棰樼洰 + * @return 姝e紡鑰冭瘯棰樼洰闆嗗悎 + */ + public List selectTbExamSubjectFormalList(TbExamSubjectFormal tbExamSubjectFormal); + + /** + * 鏂板姝e紡鑰冭瘯棰樼洰 + * + * @param tbExamSubjectFormal 姝e紡鑰冭瘯棰樼洰 + * @return 缁撴灉 + */ + public int insertTbExamSubjectFormal(TbExamSubjectFormal tbExamSubjectFormal); + + /** + * 淇敼姝e紡鑰冭瘯棰樼洰 + * + * @param tbExamSubjectFormal 姝e紡鑰冭瘯棰樼洰 + * @return 缁撴灉 + */ + public int updateTbExamSubjectFormal(TbExamSubjectFormal tbExamSubjectFormal); + + /** + * 鎵归噺鍒犻櫎姝e紡鑰冭瘯棰樼洰 + * + * @param examSubjectFormalIds 闇瑕佸垹闄ょ殑姝e紡鑰冭瘯棰樼洰涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbExamSubjectFormalByExamSubjectFormalIds(Long[] examSubjectFormalIds); + + /** + * 鍒犻櫎姝e紡鑰冭瘯棰樼洰淇℃伅 + * + * @param examSubjectFormalId 姝e紡鑰冭瘯棰樼洰涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbExamSubjectFormalByExamSubjectFormalId(Long examSubjectFormalId); + + /** + * 鎵归噺鏂板姝e紡鑰冭瘯棰樼洰 + * + * @param tbExam + * @return 缁撴灉 + */ + public int batchInsertTbExamSubjectFormalBy(TbExam tbExam); + + /** + * 鏌ヨ姝e紡鑰冭瘯鎵鏈夐鐩 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public List> getAllTbExamSubjectFormal(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamSubjectService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamSubjectService.java new file mode 100644 index 0000000000000000000000000000000000000000..a1aa86348f5fa91c43c226464562827d12992e71 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamSubjectService.java @@ -0,0 +1,126 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbExamSubject; +import com.ruoyi.hezhi.domain.vo.TopicImportTemplateVO; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.List; +import java.util.Map; + +/** + * 鑰冭瘯棰樼洰Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-04 + */ +public interface ITbExamSubjectService +{ + /** + * 鏌ヨ鑰冭瘯棰樼洰 + * + * @param examSubjectId 鑰冭瘯棰樼洰涓婚敭 + * @return 鑰冭瘯棰樼洰 + */ + public TbExamSubject selectTbExamSubjectByExamSubjectId(Long examSubjectId); + + /** + * 鏌ヨ鑰冭瘯棰樼洰鍒楄〃 + * + * @param tbExamSubject 鑰冭瘯棰樼洰 + * @return 鑰冭瘯棰樼洰闆嗗悎 + */ + public List selectTbExamSubjectList(TbExamSubject tbExamSubject); + + /** + * 鏂板鑰冭瘯棰樼洰 + * + * @param tbExamSubject 鑰冭瘯棰樼洰 + * @return 缁撴灉 + */ + public int insertTbExamSubject(TbExamSubject tbExamSubject); + + /** + * 淇敼鑰冭瘯棰樼洰 + * + * @param tbExamSubject 鑰冭瘯棰樼洰 + * @return 缁撴灉 + */ + public int updateTbExamSubject(TbExamSubject tbExamSubject); + + /** + * 鎵归噺鍒犻櫎鑰冭瘯棰樼洰 + * + * @param examSubjectIds 闇瑕佸垹闄ょ殑鑰冭瘯棰樼洰涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbExamSubjectByExamSubjectIds(Long[] examSubjectIds); + + /** + * 鍒犻櫎鑰冭瘯棰樼洰淇℃伅 + * + * @param examSubjectId 鑰冭瘯棰樼洰涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbExamSubjectByExamSubjectId(Long examSubjectId); + + /** + * 鏌ヨ鎵鏈夐鐩 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public List> queryByParam(Map params); + + /** + * 棰樼洰璇︽儏 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public Map getExamSubjectInfo(Map params); + + /** + * 涓撻」缁冧範锛堣冭瘯鏍囬锛 + * + * @return 缁撴灉 + */ + public List> getSpecialPracticeList(Map params); + + /** + * 鏌ヨ缁冧範棰樻暟閲 + * + * @return 缁撴灉 + */ + public List> getPracticeListCount(Map params); + + /** + * 绔犺妭缁冧範锛堣冭瘯鏍囬锛 + * + * @return 缁撴灉 + */ + public List> getMajorPracticeList(); + + /** + * 绛涢夋潯浠朵笅鍗曢夈佸閫夈佸垽鏂佽杩伴鐩暟 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public Map getExamSubjectNum(Map params); + + /** + * 瀵煎叆鑰冭瘯棰樼洰 + * @param list 鏂囦欢 + * @param username 鐢ㄦ埛 + * @return 缁撴灉 + */ + String importData(List list,String username) throws IOException; + + /** + * 涓嬭浇瀵煎叆妯℃澘 + * @param response 鍝嶅簲娴 + */ + void importTemplate(HttpServletResponse response) throws IOException; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamSubjectSimulateService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamSubjectSimulateService.java new file mode 100644 index 0000000000000000000000000000000000000000..f022e7923a197e8c9f40193cf255260b6d93c30c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExamSubjectSimulateService.java @@ -0,0 +1,80 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbExamSubjectSimulate; +import com.ruoyi.hezhi.domain.TbSubjectWarehouseClass; + +import java.util.List; +import java.util.Map; + +/** + * 妯℃嫙鑰冭瘯棰樼洰Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-08 + */ +public interface ITbExamSubjectSimulateService +{ + /** + * 鏌ヨ妯℃嫙鑰冭瘯棰樼洰 + * + * @param examSubjectSimulateId 妯℃嫙鑰冭瘯棰樼洰涓婚敭 + * @return 妯℃嫙鑰冭瘯棰樼洰 + */ + public TbExamSubjectSimulate selectTbExamSubjectSimulateByExamSubjectSimulateId(Long examSubjectSimulateId); + + /** + * 鏌ヨ妯℃嫙鑰冭瘯棰樼洰鍒楄〃 + * + * @param tbExamSubjectSimulate 妯℃嫙鑰冭瘯棰樼洰 + * @return 妯℃嫙鑰冭瘯棰樼洰闆嗗悎 + */ + public List selectTbExamSubjectSimulateList(TbExamSubjectSimulate tbExamSubjectSimulate); + + /** + * 鏂板妯℃嫙鑰冭瘯棰樼洰 + * + * @param tbExamSubjectSimulate 妯℃嫙鑰冭瘯棰樼洰 + * @return 缁撴灉 + */ + public int insertTbExamSubjectSimulate(TbExamSubjectSimulate tbExamSubjectSimulate); + + /** + * 淇敼妯℃嫙鑰冭瘯棰樼洰 + * + * @param tbExamSubjectSimulate 妯℃嫙鑰冭瘯棰樼洰 + * @return 缁撴灉 + */ + public int updateTbExamSubjectSimulate(TbExamSubjectSimulate tbExamSubjectSimulate); + + /** + * 鎵归噺鍒犻櫎妯℃嫙鑰冭瘯棰樼洰 + * + * @param examSubjectSimulateIds 闇瑕佸垹闄ょ殑妯℃嫙鑰冭瘯棰樼洰涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbExamSubjectSimulateByExamSubjectSimulateIds(Long[] examSubjectSimulateIds); + + /** + * 鍒犻櫎妯℃嫙鑰冭瘯棰樼洰淇℃伅 + * + * @param examSubjectSimulateId 妯℃嫙鑰冭瘯棰樼洰涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbExamSubjectSimulateByExamSubjectSimulateId(Long examSubjectSimulateId); + + /** + * 鎵归噺鏂板妯℃嫙鑰冭瘯棰樼洰 + * + * @param tbSubjectWarehouseClass + * @return 缁撴灉 + */ + public int batchInsertTbExamSubjectSimulateBy(TbSubjectWarehouseClass tbSubjectWarehouseClass); + + /** + * 鏌ヨ鎵鏈夐鐩 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public List> getAllTbExamSubjectSimulate(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExpressKdCodeService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExpressKdCodeService.java new file mode 100644 index 0000000000000000000000000000000000000000..e19735e7b7a44c1681004a7485b4fded976b90c6 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbExpressKdCodeService.java @@ -0,0 +1,79 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbExpressKdCode; + +import java.util.List; + +/** + * 蹇掔紪鐮丼ervice鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-20 + */ +public interface ITbExpressKdCodeService +{ + /** + * 鏌ヨ蹇掔紪鐮 + * + * @param id 蹇掔紪鐮佷富閿 + * @return 蹇掔紪鐮 + */ + public TbExpressKdCode selectTbExpressKdCodeById(Long id); + + /** + * 鏌ヨ蹇掔紪鐮佸垪琛 + * + * @param tbExpressKdCode 蹇掔紪鐮 + * @return 蹇掔紪鐮侀泦鍚 + */ + public List selectTbExpressKdCodeList(TbExpressKdCode tbExpressKdCode); + + /** + * 鏂板蹇掔紪鐮 + * + * @param tbExpressKdCode 蹇掔紪鐮 + * @return 缁撴灉 + */ + public int insertTbExpressKdCode(TbExpressKdCode tbExpressKdCode); + + /** + * 淇敼蹇掔紪鐮 + * + * @param tbExpressKdCode 蹇掔紪鐮 + * @return 缁撴灉 + */ + public int updateTbExpressKdCode(TbExpressKdCode tbExpressKdCode); + + /** + * 鎵归噺鍒犻櫎蹇掔紪鐮 + * + * @param ids 闇瑕佸垹闄ょ殑蹇掔紪鐮佷富閿泦鍚 + * @return 缁撴灉 + */ + public int deleteTbExpressKdCodeByIds(Long[] ids); + + /** + * 鍒犻櫎蹇掔紪鐮佷俊鎭 + * + * @param id 蹇掔紪鐮佷富閿 + * @return 缁撴灉 + */ + public int deleteTbExpressKdCodeById(Long id); + + /** + * 鏌ヨ蹇 + * + * @param code 蹇掔紪鐮 + * @return 蹇掔紪鐮 + */ + public TbExpressKdCode selectTbExpressKdCodeByCode(String code); + + // /** + // * 鏌ヨ蹇掍俊鎭 + // * + // * @param shippingMark 蹇掑叕鍙镐唬鍙 + // * @param shippingCode 蹇掑崟鍙 + // * @return 缁撴灉 + // */ + // public List> checkExpressInfoMessage(String shippingMark, String shippingCode); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbLinkService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbLinkService.java new file mode 100644 index 0000000000000000000000000000000000000000..541690f0adff69579286a990bdf6ddddafe9c317 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbLinkService.java @@ -0,0 +1,78 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbLink; + +import java.util.List; + +/** + * 璧勬簮鍏宠仈Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-22 + */ +public interface ITbLinkService +{ + /** + * 鏌ヨ璧勬簮鍏宠仈 + * + * @param linkId 璧勬簮鍏宠仈涓婚敭 + * @return 璧勬簮鍏宠仈 + */ + public TbLink selectTbLinkByLinkId(Long linkId); + + /** + * 鏌ヨ璧勬簮鍏宠仈鍒楄〃 + * + * @param tbLink 璧勬簮鍏宠仈 + * @return 璧勬簮鍏宠仈闆嗗悎 + */ + public List selectTbLinkList(TbLink tbLink); + + /** + * 鏂板璧勬簮鍏宠仈 + * + * @param tbLink 璧勬簮鍏宠仈 + * @return 缁撴灉 + */ + public int insertTbLink(TbLink tbLink); + + /** + * 淇敼璧勬簮鍏宠仈 + * + * @param tbLink 璧勬簮鍏宠仈 + * @return 缁撴灉 + */ + public int updateTbLink(TbLink tbLink); + + /** + * 鎵归噺鍒犻櫎璧勬簮鍏宠仈 + * + * @param linkIds 闇瑕佸垹闄ょ殑璧勬簮鍏宠仈涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbLinkByLinkIds(Long[] linkIds); + + /** + * 鍒犻櫎璧勬簮鍏宠仈淇℃伅 + * + * @param linkId 璧勬簮鍏宠仈涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbLinkByLinkId(Long linkId); + + /** + * 鏌ヨ璇勪环鏈烘瀯涓庤绋嬪叧鑱斿垪琛 + * + * @param tbLink 璧勬簮鍏宠仈 + * @return 璧勬簮鍏宠仈闆嗗悎 + */ + public List listLinkEvaluateAgencyCourse(TbLink tbLink); + + /** + * 鏌ヨ鐩存挱涓庤佸笀鍏宠仈鍒楄〃 + * + * @param tbLink 璧勬簮鍏宠仈 + * @return 璧勬簮鍏宠仈闆嗗悎 + */ + public List listLinkLiveBroadcastTeacher(TbLink tbLink); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbLiveBroadcastService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbLiveBroadcastService.java new file mode 100644 index 0000000000000000000000000000000000000000..2e8970a9239d3d61b3d71694d2995b10dad1141e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbLiveBroadcastService.java @@ -0,0 +1,81 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbLiveBroadcast; + +import java.util.List; +import java.util.Map; + +/** + * 鐩存挱Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-22 + */ +public interface ITbLiveBroadcastService +{ + /** + * 鏌ヨ鐩存挱 + * + * @param liveBroadcastId 鐩存挱涓婚敭 + * @return 鐩存挱 + */ + public TbLiveBroadcast selectTbLiveBroadcastByLiveBroadcastId(Long liveBroadcastId); + + /** + * 鏌ヨ鐩存挱鍒楄〃 + * + * @param tbLiveBroadcast 鐩存挱 + * @return 鐩存挱闆嗗悎 + */ + public List selectTbLiveBroadcastList(TbLiveBroadcast tbLiveBroadcast); + + /** + * 鏂板鐩存挱 + * + * @param tbLiveBroadcast 鐩存挱 + * @return 缁撴灉 + */ + public int insertTbLiveBroadcast(TbLiveBroadcast tbLiveBroadcast); + + /** + * 淇敼鐩存挱 + * + * @param tbLiveBroadcast 鐩存挱 + * @return 缁撴灉 + */ + public int updateTbLiveBroadcast(TbLiveBroadcast tbLiveBroadcast); + + /** + * 鎵归噺鍒犻櫎鐩存挱 + * + * @param liveBroadcastIds 闇瑕佸垹闄ょ殑鐩存挱涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbLiveBroadcastByLiveBroadcastIds(Long[] liveBroadcastIds); + + /** + * 鍒犻櫎鐩存挱淇℃伅 + * + * @param liveBroadcastId 鐩存挱涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbLiveBroadcastByLiveBroadcastId(Long liveBroadcastId); + + /** + * 鐩存挱棰勫憡鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鐩存挱棰勫憡鍒楄〃 + */ + public List> getLiveBroadcastList(Map params); + + public List> getLiveBroadcastEvaluateAgencyList(); + + /** + * 鐩存挱棰勫憡璇︽儏 + * + * @param params 鍙傛暟 + * @return 鐩存挱棰勫憡璇︽儏 + */ + public Map getLiveBroadcastInfo(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMajorClassService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMajorClassService.java new file mode 100644 index 0000000000000000000000000000000000000000..0ce1493727933d92815b574f1a8508931aabeec9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMajorClassService.java @@ -0,0 +1,140 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbMajorClass; + +import java.util.List; +import java.util.Map; + +/** + * 涓撲笟鍒嗙被Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-16 + */ +public interface ITbMajorClassService +{ + /** + * 鏌ヨ涓撲笟鍒嗙被 + * + * @param majorId 涓撲笟鍒嗙被涓婚敭 + * @return 涓撲笟鍒嗙被 + */ + public TbMajorClass selectTbMajorClassByMajorId(Long majorId); + + /** + * 鏌ヨ涓撲笟鍒嗙被鍒楄〃 + * + * @param tbMajorClass 涓撲笟鍒嗙被 + * @return 涓撲笟鍒嗙被闆嗗悎 + */ + public List selectTbMajorClassList(TbMajorClass tbMajorClass); + + /** + * 鏌ヨ涓撲笟鍒嗙被鍒楄〃 + * + * @return 涓撲笟鍒嗙被闆嗗悎 + */ + public List getAllMajorClassList(); + + /** + * 鏂板涓撲笟鍒嗙被 + * + * @param tbMajorClass 涓撲笟鍒嗙被 + * @return 缁撴灉 + */ + public int insertTbMajorClass(TbMajorClass tbMajorClass); + + /** + * 淇敼涓撲笟鍒嗙被 + * + * @param tbMajorClass 涓撲笟鍒嗙被 + * @return 缁撴灉 + */ + public int updateTbMajorClass(TbMajorClass tbMajorClass); + + /** + * 鎵归噺鍒犻櫎涓撲笟鍒嗙被 + * + * @param majorIds 闇瑕佸垹闄ょ殑涓撲笟鍒嗙被涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbMajorClassByMajorIds(Long[] majorIds); + + /** + * 鍒犻櫎涓撲笟鍒嗙被淇℃伅 + * + * @param majorId 涓撲笟鍒嗙被涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbMajorClassByMajorId(Long majorId); + + /** + * 涓撲笟鍒嗙被鍒楄〃 + * + * @param params 鍙傛暟 + * @return 涓撲笟鍒嗙被鍒楄〃 + */ + public List> selectTbMajorClassMapList(Map params); + + /** + * 涓撲笟鍒嗙被鏍戝垪琛 + * + * @return 涓撲笟鍒嗙被鏍戝垪琛 + */ + public List selectTbMajorClassTreeList(); + + /** + * 鏍戝垪琛 + * + * @param treeList 涓撲笟鍒嗙被鍒楄〃 + * @param pid 鐖剁骇ID + * @return 涓撲笟鍒嗙被闆嗗悎 + */ + public List toTree(List treeList, Long pid); + + /** + * 涓撲笟璇剧▼鍒楄〃 + * + * @param params 鍙傛暟 + * @return 涓撲笟璇剧▼鍒楄〃 + */ + public List> getMajorCourseList(Map params); + + /** + * 鑾峰彇鏈烘瀯涓撲笟鍒嗙被 + * @param evaluateAgencyId 鏈烘瀯ID + * @return 涓撲笟璇剧▼鍒楄〃 + */ + public List> getEvaluateAgencyMajorClass(Long evaluateAgencyId); + + /** + * 涓撲笟璇剧▼璇︽儏 + * + * @param params 鍙傛暟 + * @return 涓撲笟璇剧▼璇︽儏 + */ + public Map getMajorCourseInfo(Map params); + + /** + * 璇剧▼甯堣祫鍒楄〃 + * + * @param params 鍙傛暟 + * @return 璇剧▼甯堣祫鍒楄〃 + */ + public List> getCourseTeacherList(Map params); + + /** + * 鏌ヨ涓撲笟鍒嗙被鍒楄〃-涓嬫媺妗嗘爲鍒楄〃 + * + * @return 涓撲笟鍒嗙被闆嗗悎 + */ + public List> getTbMajorClassTreeList(); + + /** + * 涓撲笟璇剧▼瑙嗛鍒楄〃 + * + * @param params 鍙傛暟 + * @return 涓撲笟璇剧▼瑙嗛鍒楄〃 + */ + public List> getMajorCourseVideoList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberAddressService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberAddressService.java new file mode 100644 index 0000000000000000000000000000000000000000..1b604f9c1c15ad8a16abd8a20769e939fdc9ab37 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberAddressService.java @@ -0,0 +1,105 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.hezhi.domain.TbMemberAddress; +import com.ruoyi.hezhi.domain.dto.MemberAddressDTO; + +import java.util.List; +import java.util.Map; + +/** + * 鐢ㄦ埛鍦板潃Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-30 + */ +public interface ITbMemberAddressService +{ + /** + * 鏌ヨ鐢ㄦ埛鍦板潃 + * + * @param memberAddressId 鐢ㄦ埛鍦板潃涓婚敭 + * @return 鐢ㄦ埛鍦板潃 + */ + public TbMemberAddress selectTbMemberAddressByMemberAddressId(Long memberAddressId); + + /** + * 鏌ヨ鐢ㄦ埛鍦板潃鍒楄〃 + * + * @param tbMemberAddress 鐢ㄦ埛鍦板潃 + * @return 鐢ㄦ埛鍦板潃闆嗗悎 + */ + public List selectTbMemberAddressList(TbMemberAddress tbMemberAddress); + + /** + * 鏂板鐢ㄦ埛鍦板潃 + * + * @param tbMemberAddress 鐢ㄦ埛鍦板潃 + * @return 缁撴灉 + */ + public int insertTbMemberAddress(TbMemberAddress tbMemberAddress); + + /** + * 淇敼鐢ㄦ埛鍦板潃 + * + * @param tbMemberAddress 鐢ㄦ埛鍦板潃 + * @return 缁撴灉 + */ + public int updateTbMemberAddress(TbMemberAddress tbMemberAddress); + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛鍦板潃 + * + * @param memberAddressIds 闇瑕佸垹闄ょ殑鐢ㄦ埛鍦板潃涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbMemberAddressByMemberAddressIds(Long[] memberAddressIds); + + /** + * 鍒犻櫎鐢ㄦ埛鍦板潃淇℃伅 + * + * @param memberAddressId 鐢ㄦ埛鍦板潃涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbMemberAddressByMemberAddressId(Long memberAddressId); + + /** + * 鍦板潃绠$悊鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鍦板潃绠$悊鍒楄〃 + */ + public List> getMemberAddressList(Map params); + + /** + * 鍦板潃绠$悊璇︽儏 + * + * @param params 鍙傛暟 + * @return 鍦板潃绠$悊璇︽儏 + */ + public Map getMemberAddressInfo(Map params); + + /** + * 鏂板鍦板潃 + * + * @param memberAddressDTO + * @return ok + */ + public AjaxResult userRetrievePassword(MemberAddressDTO memberAddressDTO); + + /** + * 淇敼鍦板潃 + * + * @param memberAddressDTO + * @return ok + */ + public AjaxResult updateMemberAddress(MemberAddressDTO memberAddressDTO); + + /** + * 鍒犻櫎鍦板潃 + * + * @param memberAddressDTO + * @return ok + */ + public AjaxResult deleteMemberAddress(MemberAddressDTO memberAddressDTO); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberDiscussService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberDiscussService.java new file mode 100644 index 0000000000000000000000000000000000000000..68638728357fb41d2ae540ac1d309cdb1fe108a4 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberDiscussService.java @@ -0,0 +1,81 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.hezhi.domain.TbMemberDiscuss; +import com.ruoyi.hezhi.domain.dto.MemberDiscussDTO; + +import java.util.List; +import java.util.Map; + +/** + * 鐢ㄦ埛璁ㄨService鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-19 + */ +public interface ITbMemberDiscussService +{ + /** + * 鏌ヨ鐢ㄦ埛璁ㄨ + * + * @param memberDiscussId 鐢ㄦ埛璁ㄨ涓婚敭 + * @return 鐢ㄦ埛璁ㄨ + */ + public TbMemberDiscuss selectTbMemberDiscussByMemberDiscussId(Long memberDiscussId); + + /** + * 鏌ヨ鐢ㄦ埛璁ㄨ鍒楄〃 + * + * @param tbMemberDiscuss 鐢ㄦ埛璁ㄨ + * @return 鐢ㄦ埛璁ㄨ闆嗗悎 + */ + public List selectTbMemberDiscussList(TbMemberDiscuss tbMemberDiscuss); + + /** + * 鏂板鐢ㄦ埛璁ㄨ + * + * @param tbMemberDiscuss 鐢ㄦ埛璁ㄨ + * @return 缁撴灉 + */ + public int insertTbMemberDiscuss(TbMemberDiscuss tbMemberDiscuss); + + /** + * 淇敼鐢ㄦ埛璁ㄨ + * + * @param tbMemberDiscuss 鐢ㄦ埛璁ㄨ + * @return 缁撴灉 + */ + public int updateTbMemberDiscuss(TbMemberDiscuss tbMemberDiscuss); + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛璁ㄨ + * + * @param memberDiscussIds 闇瑕佸垹闄ょ殑鐢ㄦ埛璁ㄨ涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbMemberDiscussByMemberDiscussIds(Long[] memberDiscussIds); + + /** + * 鍒犻櫎鐢ㄦ埛璁ㄨ淇℃伅 + * + * @param memberDiscussId 鐢ㄦ埛璁ㄨ涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbMemberDiscussByMemberDiscussId(Long memberDiscussId); + + /** + * 鐢ㄦ埛璁ㄨ鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鐢ㄦ埛璁ㄨ鍒楄〃 + */ + public List> getMemberDiscussList(Map params); + + /** + * 鍙戝竷璁ㄨ淇℃伅 + * + * @param memberDiscussDTO + * @return ok + */ + public AjaxResult releaseMemberDiscuss(MemberDiscussDTO memberDiscussDTO); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberExamSimulateAllService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberExamSimulateAllService.java new file mode 100644 index 0000000000000000000000000000000000000000..c9669c0065f1c996ec7c49734f9a3da0cc95249a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberExamSimulateAllService.java @@ -0,0 +1,88 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.hezhi.domain.TbMemberExamSimulateAll; +import com.ruoyi.hezhi.domain.dto.MemberExamSimulateAllDTO; + +import java.util.List; + +/** + * 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛塖ervice鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-11 + */ +public interface ITbMemberExamSimulateAllService +{ + /** + * 鏌ヨ鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + * + * @param memberExamSimulateAllId 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛変富閿 + * @return 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + */ + public TbMemberExamSimulateAll selectTbMemberExamSimulateAllByMemberExamSimulateAllId(Long memberExamSimulateAllId); + + /** + * 鏌ヨ鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛夊垪琛 + * + * @param tbMemberExamSimulateAll 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + * @return 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛夐泦鍚 + */ + public List selectTbMemberExamSimulateAllList(TbMemberExamSimulateAll tbMemberExamSimulateAll); + + /** + * 鏂板鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + * + * @param tbMemberExamSimulateAll 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + * @return 缁撴灉 + */ + public int insertTbMemberExamSimulateAll(TbMemberExamSimulateAll tbMemberExamSimulateAll); + + /** + * 淇敼鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + * + * @param tbMemberExamSimulateAll 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + * @return 缁撴灉 + */ + public int updateTbMemberExamSimulateAll(TbMemberExamSimulateAll tbMemberExamSimulateAll); + + /** + * 鎵归噺鍒犻櫎鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + * + * @param memberExamSimulateAllIds 闇瑕佸垹闄ょ殑鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛変富閿泦鍚 + * @return 缁撴灉 + */ + public int deleteTbMemberExamSimulateAllByMemberExamSimulateAllIds(Long[] memberExamSimulateAllIds); + + /** + * 鍒犻櫎鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛変俊鎭 + * + * @param memberExamSimulateAllId 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛変富閿 + * @return 缁撴灉 + */ + public int deleteTbMemberExamSimulateAllByMemberExamSimulateAllId(Long memberExamSimulateAllId); + + /** + * 妯℃嫙鑰冭瘯绛旈 + * + * @param memberExamSimulateAllDTO + * @return ok + */ + public AjaxResult subjectSimulateAnswer(MemberExamSimulateAllDTO memberExamSimulateAllDTO); + + /** + * 姝e紡鑰冭瘯鐐瑰嚮纭畾寮濮嬬瓟棰 + * + * @param memberExamSimulateAllDTO + * @return ok + */ + public AjaxResult subjectFormalClickOK(MemberExamSimulateAllDTO memberExamSimulateAllDTO); + + /** + * 姝e紡鑰冭瘯绛旈 + * + * @param memberExamSimulateAllDTO + * @return ok + */ + public AjaxResult subjectFormalAnswer(MemberExamSimulateAllDTO memberExamSimulateAllDTO); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberJoinService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberJoinService.java new file mode 100644 index 0000000000000000000000000000000000000000..9c935e339308d6496a49b3ec890a784f70125bb0 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberJoinService.java @@ -0,0 +1,72 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.hezhi.domain.TbMemberJoin; +import com.ruoyi.hezhi.domain.dto.MemberJoinDTO; + +import java.util.List; + +/** + * 鐢ㄦ埛鍙備笌Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-15 + */ +public interface ITbMemberJoinService +{ + /** + * 鏌ヨ鐢ㄦ埛鍙備笌 + * + * @param memberJoinId 鐢ㄦ埛鍙備笌涓婚敭 + * @return 鐢ㄦ埛鍙備笌 + */ + public TbMemberJoin selectTbMemberJoinByMemberJoinId(Long memberJoinId); + + /** + * 鏌ヨ鐢ㄦ埛鍙備笌鍒楄〃 + * + * @param tbMemberJoin 鐢ㄦ埛鍙備笌 + * @return 鐢ㄦ埛鍙備笌闆嗗悎 + */ + public List selectTbMemberJoinList(TbMemberJoin tbMemberJoin); + + /** + * 鏂板鐢ㄦ埛鍙備笌 + * + * @param tbMemberJoin 鐢ㄦ埛鍙備笌 + * @return 缁撴灉 + */ + public int insertTbMemberJoin(TbMemberJoin tbMemberJoin); + + /** + * 淇敼鐢ㄦ埛鍙備笌 + * + * @param tbMemberJoin 鐢ㄦ埛鍙備笌 + * @return 缁撴灉 + */ + public int updateTbMemberJoin(TbMemberJoin tbMemberJoin); + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛鍙備笌 + * + * @param memberJoinIds 闇瑕佸垹闄ょ殑鐢ㄦ埛鍙備笌涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbMemberJoinByMemberJoinIds(Long[] memberJoinIds); + + /** + * 鍒犻櫎鐢ㄦ埛鍙備笌淇℃伅 + * + * @param memberJoinId 鐢ㄦ埛鍙備笌涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbMemberJoinByMemberJoinId(Long memberJoinId); + + /** + * 绔嬪嵆鍙傚姞 + * + * @param memberJoinDTO + * @return ok + */ + public AjaxResult joinNow(MemberJoinDTO memberJoinDTO); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberMajorService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberMajorService.java new file mode 100644 index 0000000000000000000000000000000000000000..ac07649af3d05f85efb3bfeb76f198cfb5617365 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberMajorService.java @@ -0,0 +1,81 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.hezhi.domain.TbMemberMajor; +import com.ruoyi.hezhi.domain.dto.MemberMajorDTO; + +import java.util.List; +import java.util.Map; + +/** + * 鐢ㄦ埛棰樺簱涓撲笟Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-29 + */ +public interface ITbMemberMajorService +{ + /** + * 鏌ヨ鐢ㄦ埛棰樺簱涓撲笟 + * + * @param memberMajorId 鐢ㄦ埛棰樺簱涓撲笟涓婚敭 + * @return 鐢ㄦ埛棰樺簱涓撲笟 + */ + public TbMemberMajor selectTbMemberMajorByMemberMajorId(Long memberMajorId); + + /** + * 鏌ヨ鐢ㄦ埛棰樺簱涓撲笟鍒楄〃 + * + * @param tbMemberMajor 鐢ㄦ埛棰樺簱涓撲笟 + * @return 鐢ㄦ埛棰樺簱涓撲笟闆嗗悎 + */ + public List selectTbMemberMajorList(TbMemberMajor tbMemberMajor); + + /** + * 鏂板鐢ㄦ埛棰樺簱涓撲笟 + * + * @param tbMemberMajor 鐢ㄦ埛棰樺簱涓撲笟 + * @return 缁撴灉 + */ + public int insertTbMemberMajor(TbMemberMajor tbMemberMajor); + + /** + * 淇敼鐢ㄦ埛棰樺簱涓撲笟 + * + * @param tbMemberMajor 鐢ㄦ埛棰樺簱涓撲笟 + * @return 缁撴灉 + */ + public int updateTbMemberMajor(TbMemberMajor tbMemberMajor); + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛棰樺簱涓撲笟 + * + * @param memberMajorIds 闇瑕佸垹闄ょ殑鐢ㄦ埛棰樺簱涓撲笟涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbMemberMajorByMemberMajorIds(Long[] memberMajorIds); + + /** + * 鍒犻櫎鐢ㄦ埛棰樺簱涓撲笟淇℃伅 + * + * @param memberMajorId 鐢ㄦ埛棰樺簱涓撲笟涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbMemberMajorByMemberMajorId(Long memberMajorId); + + /** + * 鐢ㄦ埛鏂板棰樺簱涓撲笟 + * + * @param memberMajorDTO + * @return ok + */ + public AjaxResult insertMemberMajor(MemberMajorDTO memberMajorDTO); + + /** + * 鐢ㄦ埛鏂板棰樺簱涓撲笟鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鐢ㄦ埛鏂板棰樺簱涓撲笟鍒楄〃 + */ + public List> getMemberMajorList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberOrderService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberOrderService.java new file mode 100644 index 0000000000000000000000000000000000000000..a03649ae2bc7992406cf92909ebff25daba36e21 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberOrderService.java @@ -0,0 +1,109 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbMemberOrder; +import com.ruoyi.hezhi.domain.dto.ExamPayInfoDto; + +import java.util.List; +import java.util.Map; + +/** + * 浼氬憳璁㈠崟淇℃伅Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-18 + */ +public interface ITbMemberOrderService +{ + /** + * 鏌ヨ浼氬憳璁㈠崟淇℃伅 + * + * @param orderId 浼氬憳璁㈠崟淇℃伅涓婚敭 + * @return 浼氬憳璁㈠崟淇℃伅 + */ + public TbMemberOrder selectTbMemberOrderByOrderId(Long orderId); + + /** + * 鏌ヨ浼氬憳璁㈠崟淇℃伅鍒楄〃 + * + * @param tbMemberOrder 浼氬憳璁㈠崟淇℃伅 + * @return 浼氬憳璁㈠崟淇℃伅闆嗗悎 + */ + public List selectTbMemberOrderList(TbMemberOrder tbMemberOrder); + + /** + * 鏂板浼氬憳璁㈠崟淇℃伅 + * + * @param tbMemberOrder 浼氬憳璁㈠崟淇℃伅 + * @return 缁撴灉 + */ + public int insertTbMemberOrder(TbMemberOrder tbMemberOrder); + + /** + * 淇敼浼氬憳璁㈠崟淇℃伅 + * + * @param tbMemberOrder 浼氬憳璁㈠崟淇℃伅 + * @return 缁撴灉 + */ + public int updateTbMemberOrder(TbMemberOrder tbMemberOrder); + + /** + * 鎵归噺鍒犻櫎浼氬憳璁㈠崟淇℃伅 + * + * @param orderIds 闇瑕佸垹闄ょ殑浼氬憳璁㈠崟淇℃伅涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbMemberOrderByOrderIds(Long[] orderIds); + + /** + * 鍒犻櫎浼氬憳璁㈠崟淇℃伅淇℃伅 + * + * @param orderId 浼氬憳璁㈠崟淇℃伅涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbMemberOrderByOrderId(Long orderId); + + /** + * 鏌ヨ浼氬憳璁㈠崟淇℃伅 + * + * @param orderNo 璁㈠崟缂栧彿 + * @return 浼氬憳璁㈠崟淇℃伅 + */ + public TbMemberOrder selectOrderByOrderNo(String orderNo); + + /** + * 鏌ヨ鑰冭瘯鏄惁鍙敮浠樹俊鎭 + * + * @param orderNo 璁㈠崟缂栧彿 + * @return 鑰冭瘯鏄惁鍙敮浠樹俊鎭 + */ + public ExamPayInfoDto selectExamPayInfoByOrderNo(String orderNo); + + /** + * 鍒犻櫎鑰冭瘯涓嶅彲鏀粯璁㈠崟 + * @return 鍒犻櫎缁撴灉 + */ + public int deleteExamCantPayOrder(); + + /** + * 鏀粯鍥炶皟涓氬姟澶勭悊 + * @param orderNo 璁㈠崟鍙 + * @param payType 鏀粯鏂瑰紡 锛1-寰俊鏀粯锛2-鏀粯瀹濇敮浠橈級 + */ + public String orderPayNotify(String orderNo, Integer payType); + + /** + * 淇敼浼氬憳璁㈠崟淇℃伅 + * + * @param tbMemberOrder 浼氬憳璁㈠崟淇℃伅 + * @return 缁撴灉 + */ + public int updateTbMemberOrderByOrderNo(TbMemberOrder tbMemberOrder); + + /** + * 鎴戠殑璁㈠崟鍒楄〃 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public List> getMemberOrderList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberScoreService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberScoreService.java new file mode 100644 index 0000000000000000000000000000000000000000..d9d0cd8ff95437d29a6c9b52272105cbb79d1915 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberScoreService.java @@ -0,0 +1,80 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbMemberScore; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + +/** + * 鐢ㄦ埛绉垎璇︽儏Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-31 + */ +public interface ITbMemberScoreService +{ + /** + * 鏌ヨ鐢ㄦ埛绉垎璇︽儏 + * + * @param memberScoreId 鐢ㄦ埛绉垎璇︽儏涓婚敭 + * @return 鐢ㄦ埛绉垎璇︽儏 + */ + public TbMemberScore selectTbMemberScoreByMemberScoreId(Long memberScoreId); + + /** + * 鏌ヨ鐢ㄦ埛绉垎璇︽儏鍒楄〃 + * + * @param tbMemberScore 鐢ㄦ埛绉垎璇︽儏 + * @return 鐢ㄦ埛绉垎璇︽儏闆嗗悎 + */ + public List selectTbMemberScoreList(TbMemberScore tbMemberScore); + + /** + * 鏂板鐢ㄦ埛绉垎璇︽儏 + * + * @param tbMemberScore 鐢ㄦ埛绉垎璇︽儏 + * @return 缁撴灉 + */ + public int insertTbMemberScore(TbMemberScore tbMemberScore); + + /** + * 淇敼鐢ㄦ埛绉垎璇︽儏 + * + * @param tbMemberScore 鐢ㄦ埛绉垎璇︽儏 + * @return 缁撴灉 + */ + public int updateTbMemberScore(TbMemberScore tbMemberScore); + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛绉垎璇︽儏 + * + * @param memberScoreIds 闇瑕佸垹闄ょ殑鐢ㄦ埛绉垎璇︽儏涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbMemberScoreByMemberScoreIds(Long[] memberScoreIds); + + /** + * 鍒犻櫎鐢ㄦ埛绉垎璇︽儏淇℃伅 + * + * @param memberScoreId 鐢ㄦ埛绉垎璇︽儏涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbMemberScoreByMemberScoreId(Long memberScoreId); + + /** + * 鎴戠殑绉垎鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鎴戠殑绉垎鍒楄〃 + */ + public List> getMemberScoreList(Map params); + + /** + * 鎴戠殑绉垎 + * + * @param params 鍙傛暟 + * @return 鎴戠殑绉垎 + */ + public Map getMemberScore(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberSignService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberSignService.java new file mode 100644 index 0000000000000000000000000000000000000000..91bb1331afda04fe85a6d0e9117943a08791f029 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberSignService.java @@ -0,0 +1,81 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.hezhi.domain.TbMemberSign; +import com.ruoyi.hezhi.domain.dto.MemberSignDTO; + +import java.util.List; +import java.util.Map; + +/** + * 鐢ㄦ埛绛惧埌Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-31 + */ +public interface ITbMemberSignService +{ + /** + * 鏌ヨ鐢ㄦ埛绛惧埌 + * + * @param memberSignId 鐢ㄦ埛绛惧埌涓婚敭 + * @return 鐢ㄦ埛绛惧埌 + */ + public TbMemberSign selectTbMemberSignByMemberSignId(Long memberSignId); + + /** + * 鏌ヨ鐢ㄦ埛绛惧埌鍒楄〃 + * + * @param tbMemberSign 鐢ㄦ埛绛惧埌 + * @return 鐢ㄦ埛绛惧埌闆嗗悎 + */ + public List selectTbMemberSignList(TbMemberSign tbMemberSign); + + /** + * 鏂板鐢ㄦ埛绛惧埌 + * + * @param tbMemberSign 鐢ㄦ埛绛惧埌 + * @return 缁撴灉 + */ + public int insertTbMemberSign(TbMemberSign tbMemberSign); + + /** + * 淇敼鐢ㄦ埛绛惧埌 + * + * @param tbMemberSign 鐢ㄦ埛绛惧埌 + * @return 缁撴灉 + */ + public int updateTbMemberSign(TbMemberSign tbMemberSign); + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛绛惧埌 + * + * @param memberSignIds 闇瑕佸垹闄ょ殑鐢ㄦ埛绛惧埌涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbMemberSignByMemberSignIds(Long[] memberSignIds); + + /** + * 鍒犻櫎鐢ㄦ埛绛惧埌淇℃伅 + * + * @param memberSignId 鐢ㄦ埛绛惧埌涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbMemberSignByMemberSignId(Long memberSignId); + + /** + * 鐢ㄦ埛绛惧埌寮圭獥 + * + * @param params 鍙傛暟 + * @return 鐢ㄦ埛绛惧埌寮圭獥 + */ + public Map getMemberSignPopup(Map params); + + /** + * 鐢ㄦ埛绛惧埌 + * + * @param memberSignDTO + * @return ok + */ + public AjaxResult memberSignDay(MemberSignDTO memberSignDTO); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberSubjectAllService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberSubjectAllService.java new file mode 100644 index 0000000000000000000000000000000000000000..919b2e39fb3eb7349d60e678205f9b73e5a50883 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberSubjectAllService.java @@ -0,0 +1,99 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.hezhi.domain.TbMemberSubjectAll; +import com.ruoyi.hezhi.domain.dto.MemberSubjectAllDTO; + +import java.util.List; +import java.util.Map; + +/** + * 鎴戠殑棰樼洰Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-06 + */ +public interface ITbMemberSubjectAllService +{ + /** + * 鏌ヨ鎴戠殑棰樼洰 + * + * @param memberSubjectAllId 鎴戠殑棰樼洰涓婚敭 + * @return 鎴戠殑棰樼洰 + */ + public TbMemberSubjectAll selectTbMemberSubjectAllByMemberSubjectAllId(Long memberSubjectAllId); + + /** + * 鏌ヨ鎴戠殑棰樼洰鍒楄〃 + * + * @param tbMemberSubjectAll 鎴戠殑棰樼洰 + * @return 鎴戠殑棰樼洰闆嗗悎 + */ + public List selectTbMemberSubjectAllList(TbMemberSubjectAll tbMemberSubjectAll); + + /** + * 鏂板鎴戠殑棰樼洰 + * + * @param tbMemberSubjectAll 鎴戠殑棰樼洰 + * @return 缁撴灉 + */ + public int insertTbMemberSubjectAll(TbMemberSubjectAll tbMemberSubjectAll); + + /** + * 淇敼鎴戠殑棰樼洰 + * + * @param tbMemberSubjectAll 鎴戠殑棰樼洰 + * @return 缁撴灉 + */ + public int updateTbMemberSubjectAll(TbMemberSubjectAll tbMemberSubjectAll); + + /** + * 鎵归噺鍒犻櫎鎴戠殑棰樼洰 + * + * @param memberSubjectAllIds 闇瑕佸垹闄ょ殑鎴戠殑棰樼洰涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbMemberSubjectAllByMemberSubjectAllIds(Long[] memberSubjectAllIds); + + /** + * 鍒犻櫎鎴戠殑棰樼洰淇℃伅 + * + * @param memberSubjectAllId 鎴戠殑棰樼洰涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbMemberSubjectAllByMemberSubjectAllId(Long memberSubjectAllId); + + /** + * 棰樼洰鏁伴噺 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public int memberSubjectAllCount(Map params); + + /** + * 鏌ヨ鎴戠殑棰樼洰 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public TbMemberSubjectAll queryMemberSubjectAllByParam(Map params); + + /** + * 鏌ヨ鎴戠殑棰樼洰鍒楄〃 + * + * @param memberSubjectAll 鎴戠殑棰樼洰 + * @return 鎴戠殑棰樼洰闆嗗悎 + */ + public List selectMemberSubjectAllList(TbMemberSubjectAll memberSubjectAll); + + /** + * 缁冧範绛旈 + * + * @param memberSubjectAllDTO + * @return ok + */ + public AjaxResult subjectPracticeAnswer(MemberSubjectAllDTO memberSubjectAllDTO); + + AjaxResult subjectPracticeAnswerClear(MemberSubjectAllDTO memberSubjectAllDTO); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberSubjectCollectService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberSubjectCollectService.java new file mode 100644 index 0000000000000000000000000000000000000000..7e63896efa0d8d32690f42c470576d32f81e7c97 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberSubjectCollectService.java @@ -0,0 +1,81 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.hezhi.domain.TbMemberSubjectCollect; +import com.ruoyi.hezhi.domain.dto.MemberSubjectCollectDTO; + +import java.util.List; +import java.util.Map; + +/** + * 鎴戠殑鏀惰棌棰樼洰Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-07 + */ +public interface ITbMemberSubjectCollectService +{ + /** + * 鏌ヨ鎴戠殑鏀惰棌棰樼洰 + * + * @param memberSubjectCollectId 鎴戠殑鏀惰棌棰樼洰涓婚敭 + * @return 鎴戠殑鏀惰棌棰樼洰 + */ + public TbMemberSubjectCollect selectTbMemberSubjectCollectByMemberSubjectCollectId(Long memberSubjectCollectId); + + /** + * 鏌ヨ鎴戠殑鏀惰棌棰樼洰鍒楄〃 + * + * @param tbMemberSubjectCollect 鎴戠殑鏀惰棌棰樼洰 + * @return 鎴戠殑鏀惰棌棰樼洰闆嗗悎 + */ + public List selectTbMemberSubjectCollectList(TbMemberSubjectCollect tbMemberSubjectCollect); + + /** + * 鏂板鎴戠殑鏀惰棌棰樼洰 + * + * @param tbMemberSubjectCollect 鎴戠殑鏀惰棌棰樼洰 + * @return 缁撴灉 + */ + public int insertTbMemberSubjectCollect(TbMemberSubjectCollect tbMemberSubjectCollect); + + /** + * 淇敼鎴戠殑鏀惰棌棰樼洰 + * + * @param tbMemberSubjectCollect 鎴戠殑鏀惰棌棰樼洰 + * @return 缁撴灉 + */ + public int updateTbMemberSubjectCollect(TbMemberSubjectCollect tbMemberSubjectCollect); + + /** + * 鎵归噺鍒犻櫎鎴戠殑鏀惰棌棰樼洰 + * + * @param memberSubjectCollectIds 闇瑕佸垹闄ょ殑鎴戠殑鏀惰棌棰樼洰涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbMemberSubjectCollectByMemberSubjectCollectIds(Long[] memberSubjectCollectIds); + + /** + * 鍒犻櫎鎴戠殑鏀惰棌棰樼洰淇℃伅 + * + * @param memberSubjectCollectId 鎴戠殑鏀惰棌棰樼洰涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbMemberSubjectCollectByMemberSubjectCollectId(Long memberSubjectCollectId); + + /** + * 鏀惰棌鎴栧彇娑堟敹钘忛鐩 + * + * @param memberSubjectCollectDTO + * @return ok + */ + public AjaxResult subjectCollectOrCancelCollect(MemberSubjectCollectDTO memberSubjectCollectDTO); + + /** + * 棰樼洰鏀惰棌鍒楄〃 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public List> getMemberSubjectCollectList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberSubjectWrongService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberSubjectWrongService.java new file mode 100644 index 0000000000000000000000000000000000000000..02b8674b8631595e8eced0b414e7796b09edca2c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbMemberSubjectWrongService.java @@ -0,0 +1,71 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbMemberSubjectWrong; + +import java.util.List; +import java.util.Map; + +/** + * 鎴戠殑閿欓Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-07 + */ +public interface ITbMemberSubjectWrongService +{ + /** + * 鏌ヨ鎴戠殑閿欓 + * + * @param memberSubjectWrongId 鎴戠殑閿欓涓婚敭 + * @return 鎴戠殑閿欓 + */ + public TbMemberSubjectWrong selectTbMemberSubjectWrongByMemberSubjectWrongId(Long memberSubjectWrongId); + + /** + * 鏌ヨ鎴戠殑閿欓鍒楄〃 + * + * @param tbMemberSubjectWrong 鎴戠殑閿欓 + * @return 鎴戠殑閿欓闆嗗悎 + */ + public List selectTbMemberSubjectWrongList(TbMemberSubjectWrong tbMemberSubjectWrong); + + /** + * 鏂板鎴戠殑閿欓 + * + * @param tbMemberSubjectWrong 鎴戠殑閿欓 + * @return 缁撴灉 + */ + public int insertTbMemberSubjectWrong(TbMemberSubjectWrong tbMemberSubjectWrong); + + /** + * 淇敼鎴戠殑閿欓 + * + * @param tbMemberSubjectWrong 鎴戠殑閿欓 + * @return 缁撴灉 + */ + public int updateTbMemberSubjectWrong(TbMemberSubjectWrong tbMemberSubjectWrong); + + /** + * 鎵归噺鍒犻櫎鎴戠殑閿欓 + * + * @param memberSubjectWrongIds 闇瑕佸垹闄ょ殑鎴戠殑閿欓涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbMemberSubjectWrongByMemberSubjectWrongIds(Long[] memberSubjectWrongIds); + + /** + * 鍒犻櫎鎴戠殑閿欓淇℃伅 + * + * @param memberSubjectWrongId 鎴戠殑閿欓涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbMemberSubjectWrongByMemberSubjectWrongId(Long memberSubjectWrongId); + + /** + * 閿欓鏁伴噺 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + public int countByParams(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbNewsService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbNewsService.java new file mode 100644 index 0000000000000000000000000000000000000000..d07baca283942e9c10ad4f3e5e925f34a8af4a8c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbNewsService.java @@ -0,0 +1,77 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbNews; +import com.ruoyi.hezhi.domain.vo.NewsVO; + +import java.util.List; + +/** + * 鏂伴椈鍜ㄨService鎺ュ彛 + * + * @author ruoyi + * @date 2024-09-14 + */ +public interface ITbNewsService +{ + /** + * 鏌ヨ鏂伴椈鍜ㄨ + * + * @param newsId 鏂伴椈鍜ㄨ涓婚敭 + * @return 鏂伴椈鍜ㄨ + */ + public TbNews selectTbNewsByNewsId(Long newsId); + + /** + * 鏌ヨ鏂伴椈鍜ㄨ鍒楄〃 + * + * @param tbNews 鏂伴椈鍜ㄨ + * @return 鏂伴椈鍜ㄨ闆嗗悎 + */ + public List selectTbNewsList(TbNews tbNews); + + /** + * 鏂板鏂伴椈鍜ㄨ + * + * @param tbNews 鏂伴椈鍜ㄨ + * @return 缁撴灉 + */ + public int insertTbNews(TbNews tbNews); + + /** + * 淇敼鏂伴椈鍜ㄨ + * + * @param tbNews 鏂伴椈鍜ㄨ + * @return 缁撴灉 + */ + public int updateTbNews(TbNews tbNews); + + /** + * 鎵归噺鍒犻櫎鏂伴椈鍜ㄨ + * + * @param newsIds 闇瑕佸垹闄ょ殑鏂伴椈鍜ㄨ涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbNewsByNewsIds(Long[] newsIds); + + /** + * 鍒犻櫎鏂伴椈鍜ㄨ淇℃伅 + * + * @param newsId 鏂伴椈鍜ㄨ涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbNewsByNewsId(Long newsId); + + /** + * 鑾峰彇鏂伴椈鍒楄〃 + * @return + */ + public List getNewsList(); + + /** + * 鑾峰彇璇︽儏 + * @param id + * @return + */ + public NewsVO getDetail(Long id); + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbNoticeService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbNoticeService.java new file mode 100644 index 0000000000000000000000000000000000000000..9aa277b660ef52caa0eba604a88d2e10f5cbc2f9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbNoticeService.java @@ -0,0 +1,101 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbNotice; +import com.ruoyi.hezhi.domain.vo.NoticeVO; + +import java.util.List; +import java.util.Map; + +/** + * 閫氱煡鍏憡Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-09-14 + */ +public interface ITbNoticeService +{ + /** + * 鏌ヨ閫氱煡鍏憡 + * + * @param noticeId 閫氱煡鍏憡涓婚敭 + * @return 閫氱煡鍏憡 + */ + public TbNotice selectTbNoticeByNoticeId(Long noticeId); + + /** + * 鏌ヨ閫氱煡鍏憡鍒楄〃 + * + * @param tbNotice 閫氱煡鍏憡 + * @return 閫氱煡鍏憡闆嗗悎 + */ + public List selectTbNoticeList(TbNotice tbNotice); + + /** + * 鏂板閫氱煡鍏憡 + * + * @param tbNotice 閫氱煡鍏憡 + * @return 缁撴灉 + */ + public int insertTbNotice(TbNotice tbNotice); + + /** + * 淇敼閫氱煡鍏憡 + * + * @param tbNotice 閫氱煡鍏憡 + * @return 缁撴灉 + */ + public int updateTbNotice(TbNotice tbNotice); + + /** + * 鎵归噺鍒犻櫎閫氱煡鍏憡 + * + * @param noticeIds 闇瑕佸垹闄ょ殑閫氱煡鍏憡涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbNoticeByNoticeIds(Long[] noticeIds); + + /** + * 鍒犻櫎閫氱煡鍏憡淇℃伅 + * + * @param noticeId 閫氱煡鍏憡涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbNoticeByNoticeId(Long noticeId); + + /** + * 鑾峰彇鍏憡鍒楄〃 + * @return + */ + public List getNoticeList(); + + /** + * 鏌ヨ鍏憡鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鍏憡鍒楄〃 + */ + public List> getPCNoticeList(Map params); + + /** + * 鏌ヨ鍏憡璇︽儏 + * + * @param params 鍙傛暟 + * @return 鍏憡鍒楄〃 + */ + public Map getNoticeInfo(Map params); + + /** + * 娴忚閲+1 + * + * @param noticeId 閫氱煡鍏憡涓婚敭 + * @return 缁撴灉 + */ + public int addViewsNum(Long noticeId); + + /** + * 鑾峰彇璇︽儏 + * @param id + * @return + */ + public NoticeVO getDetail(Long id); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbPostAddressService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbPostAddressService.java new file mode 100644 index 0000000000000000000000000000000000000000..cdcb8997262a944f41e6f2f964f1eef599e9e8e3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbPostAddressService.java @@ -0,0 +1,72 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbPostAddress; + +import java.util.List; + +/** + * 閭瘎鍦板潃Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-20 + */ +public interface ITbPostAddressService +{ + /** + * 鏌ヨ閭瘎鍦板潃 + * + * @param postAddressId 閭瘎鍦板潃涓婚敭 + * @return 閭瘎鍦板潃 + */ + public TbPostAddress selectTbPostAddressByPostAddressId(Long postAddressId); + + /** + * 鏌ヨ閭瘎鍦板潃鍒楄〃 + * + * @param tbPostAddress 閭瘎鍦板潃 + * @return 閭瘎鍦板潃闆嗗悎 + */ + public List selectTbPostAddressList(TbPostAddress tbPostAddress); + + /** + * 鏂板閭瘎鍦板潃 + * + * @param tbPostAddress 閭瘎鍦板潃 + * @return 缁撴灉 + */ + public int insertTbPostAddress(TbPostAddress tbPostAddress); + + /** + * 淇敼閭瘎鍦板潃 + * + * @param tbPostAddress 閭瘎鍦板潃 + * @return 缁撴灉 + */ + public int updateTbPostAddress(TbPostAddress tbPostAddress); + + /** + * 鎵归噺鍒犻櫎閭瘎鍦板潃 + * + * @param postAddressIds 闇瑕佸垹闄ょ殑閭瘎鍦板潃涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbPostAddressByPostAddressIds(Long[] postAddressIds); + + /** + * 鍒犻櫎閭瘎鍦板潃淇℃伅 + * + * @param postAddressId 閭瘎鍦板潃涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbPostAddressByPostAddressId(Long postAddressId); + + /** + * 鏌ヨ閭瘎鍦板潃 + * + * @param memberUserId 鐢ㄦ埛ID + * @param dataId 鐩稿叧璧勬簮ID + * @param type 绫诲瀷锛0-鍏ㄩ儴锛1-璇佷功锛 + * @return 閭瘎鍦板潃 + */ + public TbPostAddress selectTbPostAddressByMemberUserIdDataId(Long memberUserId, Long dataId, Integer type); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbRegionService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbRegionService.java new file mode 100644 index 0000000000000000000000000000000000000000..f863a1495dc4c71d0401f07ecec38682a1fc2326 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbRegionService.java @@ -0,0 +1,101 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbRegion; + +import java.util.List; +import java.util.Map; + +/** + * 琛屾斂鍖哄煙Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-21 + */ +public interface ITbRegionService +{ + /** + * 鏌ヨ琛屾斂鍖哄煙 + * + * @param id 琛屾斂鍖哄煙涓婚敭 + * @return 琛屾斂鍖哄煙 + */ + public TbRegion selectTbRegionById(Long id); + + /** + * 鏌ヨ琛屾斂鍖哄煙鍒楄〃 + * + * @param tbRegion 琛屾斂鍖哄煙 + * @return 琛屾斂鍖哄煙闆嗗悎 + */ + public List selectTbRegionList(TbRegion tbRegion); + + /** + * 鏂板琛屾斂鍖哄煙 + * + * @param tbRegion 琛屾斂鍖哄煙 + * @return 缁撴灉 + */ + public int insertTbRegion(TbRegion tbRegion); + + /** + * 淇敼琛屾斂鍖哄煙 + * + * @param tbRegion 琛屾斂鍖哄煙 + * @return 缁撴灉 + */ + public int updateTbRegion(TbRegion tbRegion); + + /** + * 鎵归噺鍒犻櫎琛屾斂鍖哄煙 + * + * @param ids 闇瑕佸垹闄ょ殑琛屾斂鍖哄煙涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbRegionByIds(Long[] ids); + + /** + * 鍒犻櫎琛屾斂鍖哄煙淇℃伅 + * + * @param id 琛屾斂鍖哄煙涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbRegionById(Long id); + + /** + * 鏌ヨ琛屾斂鍖哄煙鍒楄〃 + * + * @param params 鍙傛暟 + * @return 琛屾斂鍖哄煙闆嗗悎 + */ + public List getRegionList(Map params); + + /** + * 琛屾斂鍖哄煙鏍戝垪琛 + * + * @return 琛屾斂鍖哄煙鏍戝垪琛 + */ + public List selectTbRegionTreeList(); + + /** + * 鏍戝垪琛 + * + * @param treeList 琛屾斂鍖哄煙鍒楄〃 + * @param pid 鐖剁骇ID + * @return 琛屾斂鍖哄煙闆嗗悎 + */ + public List toTree(List treeList, Long pid); + + /** + * 鏌ヨ琛屾斂鍖哄煙鍒楄〃鐪 + * + * @return 琛屾斂鍖哄煙闆嗗悎 + */ + public List selectRegionProvinceList(); + + /** + * 鏌ヨ琛屾斂鍖哄煙鍒楄〃鐪 + * + * @return 琛屾斂鍖哄煙闆嗗悎 + */ + public List selectRegionCityOrAreaList(Integer id); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbSmsCodeService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbSmsCodeService.java new file mode 100644 index 0000000000000000000000000000000000000000..c5bc0f6b18f59850d15d5dc64fa4e5aa1032fd15 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbSmsCodeService.java @@ -0,0 +1,90 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.hezhi.domain.TbSmsCode; + +import java.util.List; + +/** + * 鐭俊楠岃瘉鐮丼ervice鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-06 + */ +public interface ITbSmsCodeService +{ + /** + * 鏌ヨ鐭俊楠岃瘉鐮 + * + * @param smsCodeId 鐭俊楠岃瘉鐮佷富閿 + * @return 鐭俊楠岃瘉鐮 + */ + public TbSmsCode selectTbSmsCodeBySmsCodeId(Long smsCodeId); + + /** + * 鏌ヨ鐭俊楠岃瘉鐮佸垪琛 + * + * @param tbSmsCode 鐭俊楠岃瘉鐮 + * @return 鐭俊楠岃瘉鐮侀泦鍚 + */ + public List selectTbSmsCodeList(TbSmsCode tbSmsCode); + + /** + * 鏂板鐭俊楠岃瘉鐮 + * + * @param tbSmsCode 鐭俊楠岃瘉鐮 + * @return 缁撴灉 + */ + public int insertTbSmsCode(TbSmsCode tbSmsCode); + + /** + * 淇敼鐭俊楠岃瘉鐮 + * + * @param tbSmsCode 鐭俊楠岃瘉鐮 + * @return 缁撴灉 + */ + public int updateTbSmsCode(TbSmsCode tbSmsCode); + + /** + * 鎵归噺鍒犻櫎鐭俊楠岃瘉鐮 + * + * @param smsCodeIds 闇瑕佸垹闄ょ殑鐭俊楠岃瘉鐮佷富閿泦鍚 + * @return 缁撴灉 + */ + public int deleteTbSmsCodeBySmsCodeIds(Long[] smsCodeIds); + + /** + * 鍒犻櫎鐭俊楠岃瘉鐮佷俊鎭 + * + * @param smsCodeId 鐭俊楠岃瘉鐮佷富閿 + * @return 缁撴灉 + */ + public int deleteTbSmsCodeBySmsCodeId(Long smsCodeId); + + /** + * 鐢熸垚楠岃瘉鐮佽褰 + * @param phone 鎵嬫満鍙 + * @param smsCode 楠岃瘉鐮 + * @param type 绫诲瀷锛0-榛樿锛1-鎵嬫満鍙风櫥褰曪紝2-淇敼涓汉璧勬枡锛3-鑰冭瘯鎶ュ悕锛 + * @return 缁撴灉 + */ + public AjaxResult sendSmsCodeInsert(String phone, String smsCode, Integer type); + + /** + * 鏍¢獙楠岃瘉鐮 + * @param phone 鎵嬫満鍙 + * @param smsCode 楠岃瘉鐮 + * @param type 绫诲瀷锛0-榛樿锛1-鎵嬫満鍙风櫥褰曪紝2-淇敼涓汉璧勬枡锛3-鑰冭瘯鎶ュ悕锛 + * @return 缁撴灉 + */ + public String checkSmsCode(String phone, String smsCode, Integer type); + + /** + * 鐢熸垚楠岃瘉鐮佽褰 + * @param phone 鎵嬫満鍙 + * @param smsCode 楠岃瘉鐮 + * @param type 绫诲瀷锛0-榛樿锛1-鎵嬫満鍙风櫥褰曪紝2-淇敼涓汉璧勬枡锛3-鑰冭瘯鎶ュ悕锛 + * @return 缁撴灉 + */ + public AjaxResult checkPhoneSmsCode(String phone, String smsCode, Integer type); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbStudentService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbStudentService.java new file mode 100644 index 0000000000000000000000000000000000000000..7ae15d68329d366c4d95c2ae8b89272b077d68f8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbStudentService.java @@ -0,0 +1,140 @@ +package com.ruoyi.hezhi.service; + +import com.alibaba.fastjson2.JSONObject; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.hezhi.domain.TbStudent; +import com.ruoyi.hezhi.domain.dto.ImportStudentDTO; +import com.ruoyi.hezhi.domain.dto.MemberUserLoginDTO; +import com.ruoyi.hezhi.domain.dto.StudentDTO; + +import java.util.List; + +/** + * 瀛﹀憳Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-21 + */ +public interface ITbStudentService +{ + /** + * 鏌ヨ瀛﹀憳 + * + * @param studentId 瀛﹀憳涓婚敭 + * @return 瀛﹀憳 + */ + public TbStudent selectTbStudentByStudentId(Long studentId); + + /** + * 鏌ヨ瀛﹀憳鍒楄〃 + * + * @param tbStudent 瀛﹀憳 + * @return 瀛﹀憳闆嗗悎 + */ + public List selectTbStudentList(TbStudent tbStudent); + + public String importUser(List list); + + /** + * 鏂板瀛﹀憳 + * + * @param tbStudent 瀛﹀憳 + * @return 缁撴灉 + */ + public int insertTbStudent(TbStudent tbStudent); + + /** + * 淇敼瀛﹀憳 + * + * @param tbStudent 瀛﹀憳 + * @return 缁撴灉 + */ + public int updateTbStudent(TbStudent tbStudent); + + /** + * 鎵归噺鍒犻櫎瀛﹀憳 + * + * @param studentIds 闇瑕佸垹闄ょ殑瀛﹀憳涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbStudentByStudentIds(Long[] studentIds); + + /** + * 鍒犻櫎瀛﹀憳淇℃伅 + * + * @param studentId 瀛﹀憳涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbStudentByStudentId(Long studentId); + + /** + * 瀛﹀憳璁よ瘉 + * + * @param studentDTO + * @return ok + */ + public AjaxResult authenticationStudent(StudentDTO studentDTO); + + /** + * 鎵爜鐧婚檰杞 + * @param studentDTO 鍙傛暟 + * @return 缁撴灉 + */ + public AjaxResult userCodeLogin(StudentDTO studentDTO); + + /** + * 鎵嬫満鍙风櫥褰 + * + * @param studentDTO 鍙傛暟 + * @return 缁撴灉 + */ + public AjaxResult userPhoneLogin(StudentDTO studentDTO); + + /** + * 韬唤璇佸彿鐮佺櫥褰 + * + * @param studentDTO 鍙傛暟 + * @return 缁撴灉 + */ + public AjaxResult userIdentityCardLogin(StudentDTO studentDTO); + + /** + * 鎵惧洖瀵嗙爜 + * + * @param studentDTO 鍙傛暟 + * @return 缁撴灉 + */ + public AjaxResult userRetrievePassword(StudentDTO studentDTO); + + /** + * 鏌ヨ瀛﹀憳 + * + * @param openId openId + * @return 瀛﹀憳 + */ + public TbStudent selectTbStudentByGzhOpenId(String openId); + + /** + * 鐢ㄦ埛淇敼涓汉璧勬枡 + * + * @param studentDTO + * @return ok + */ + public AjaxResult updateMemberInfo(StudentDTO studentDTO); + + /** + * 灏忕▼搴忔巿鏉冪櫥褰 + * @param memberUserLoginDTO 鐧婚檰token + * @return JSONObject + */ + JSONObject memberUserLogin(MemberUserLoginDTO memberUserLoginDTO); + + /** + * 灏忕▼搴忔敞鍐 + * @param memberUserLoginDTO 鐧婚檰token + * @return JSONObject + */ + JSONObject memberUserRegister(MemberUserLoginDTO memberUserLoginDTO); + + int editPassword(TbStudent tbStudent); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbStudyCenterClassService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbStudyCenterClassService.java new file mode 100644 index 0000000000000000000000000000000000000000..d62c19f37fa0b4778e89d408b0d365787578b522 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbStudyCenterClassService.java @@ -0,0 +1,71 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbStudyCenterClass; + +import java.util.List; +import java.util.Map; + +/** + * 瀛︿範涓績鍒嗙被Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-23 + */ +public interface ITbStudyCenterClassService +{ + /** + * 鏌ヨ瀛︿範涓績鍒嗙被 + * + * @param studyCenterClassId 瀛︿範涓績鍒嗙被涓婚敭 + * @return 瀛︿範涓績鍒嗙被 + */ + public TbStudyCenterClass selectTbStudyCenterClassByStudyCenterClassId(Long studyCenterClassId); + + /** + * 鏌ヨ瀛︿範涓績鍒嗙被鍒楄〃 + * + * @param tbStudyCenterClass 瀛︿範涓績鍒嗙被 + * @return 瀛︿範涓績鍒嗙被闆嗗悎 + */ + public List selectTbStudyCenterClassList(TbStudyCenterClass tbStudyCenterClass); + + /** + * 鏂板瀛︿範涓績鍒嗙被 + * + * @param tbStudyCenterClass 瀛︿範涓績鍒嗙被 + * @return 缁撴灉 + */ + public int insertTbStudyCenterClass(TbStudyCenterClass tbStudyCenterClass); + + /** + * 淇敼瀛︿範涓績鍒嗙被 + * + * @param tbStudyCenterClass 瀛︿範涓績鍒嗙被 + * @return 缁撴灉 + */ + public int updateTbStudyCenterClass(TbStudyCenterClass tbStudyCenterClass); + + /** + * 鎵归噺鍒犻櫎瀛︿範涓績鍒嗙被 + * + * @param studyCenterClassIds 闇瑕佸垹闄ょ殑瀛︿範涓績鍒嗙被涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbStudyCenterClassByStudyCenterClassIds(Long[] studyCenterClassIds); + + /** + * 鍒犻櫎瀛︿範涓績鍒嗙被淇℃伅 + * + * @param studyCenterClassId 瀛︿範涓績鍒嗙被涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbStudyCenterClassByStudyCenterClassId(Long studyCenterClassId); + + /** + * 瀛︿範涓績鍒嗙被鍒楄〃 + * + * @param params 鍙傛暟 + * @return 瀛︿範涓績鍒嗙被鍒楄〃 + */ + public List> getStudyCenterClassMapList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbStudyCenterFileService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbStudyCenterFileService.java new file mode 100644 index 0000000000000000000000000000000000000000..c77787e36cce949d80591e20ff9e5cdbee4abf09 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbStudyCenterFileService.java @@ -0,0 +1,62 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbStudyCenterFile; + +import java.util.List; + +/** + * 瀛︿範涓績鏂囦欢Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-18 + */ +public interface ITbStudyCenterFileService +{ + /** + * 鏌ヨ瀛︿範涓績鏂囦欢 + * + * @param studyCenterFileId 瀛︿範涓績鏂囦欢涓婚敭 + * @return 瀛︿範涓績鏂囦欢 + */ + public TbStudyCenterFile selectTbStudyCenterFileByStudyCenterFileId(Long studyCenterFileId); + + /** + * 鏌ヨ瀛︿範涓績鏂囦欢鍒楄〃 + * + * @param tbStudyCenterFile 瀛︿範涓績鏂囦欢 + * @return 瀛︿範涓績鏂囦欢闆嗗悎 + */ + public List selectTbStudyCenterFileList(TbStudyCenterFile tbStudyCenterFile); + + /** + * 鏂板瀛︿範涓績鏂囦欢 + * + * @param tbStudyCenterFile 瀛︿範涓績鏂囦欢 + * @return 缁撴灉 + */ + public int insertTbStudyCenterFile(TbStudyCenterFile tbStudyCenterFile); + + /** + * 淇敼瀛︿範涓績鏂囦欢 + * + * @param tbStudyCenterFile 瀛︿範涓績鏂囦欢 + * @return 缁撴灉 + */ + public int updateTbStudyCenterFile(TbStudyCenterFile tbStudyCenterFile); + + /** + * 鎵归噺鍒犻櫎瀛︿範涓績鏂囦欢 + * + * @param studyCenterFileIds 闇瑕佸垹闄ょ殑瀛︿範涓績鏂囦欢涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbStudyCenterFileByStudyCenterFileIds(Long[] studyCenterFileIds); + + /** + * 鍒犻櫎瀛︿範涓績鏂囦欢淇℃伅 + * + * @param studyCenterFileId 瀛︿範涓績鏂囦欢涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbStudyCenterFileByStudyCenterFileId(Long studyCenterFileId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbStudyCenterService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbStudyCenterService.java new file mode 100644 index 0000000000000000000000000000000000000000..7daa18ba3f876113230df783af9c0985d623504c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbStudyCenterService.java @@ -0,0 +1,102 @@ +package com.ruoyi.hezhi.service; + +import com.github.pagehelper.PageInfo; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.hezhi.domain.TbStudyCenter; +import com.ruoyi.hezhi.domain.dto.StudyCenterDTO; +import com.ruoyi.hezhi.domain.vo.StudyCenterVO; + +import java.util.List; +import java.util.Map; + +/** + * 瀛︿範涓績Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-10-21 + */ +public interface ITbStudyCenterService +{ + /** + * 鏌ヨ瀛︿範涓績 + * + * @param studyCenterId 瀛︿範涓績涓婚敭 + * @return 瀛︿範涓績 + */ + public TbStudyCenter selectTbStudyCenterByStudyCenterId(Long studyCenterId); + + /** + * 鏌ヨ瀛︿範涓績鍒楄〃 + * + * @param tbStudyCenter 瀛︿範涓績 + * @return 瀛︿範涓績闆嗗悎 + */ + public List selectTbStudyCenterList(TbStudyCenter tbStudyCenter); + + /** + * 鏌ヨ瀛︿範涓績鍒楄〃 + * + * @return 瀛︿範涓績闆嗗悎 + */ + public List getAllStudyCenterList(); + + /** + * 鏂板瀛︿範涓績 + * + * @param tbStudyCenter 瀛︿範涓績 + * @return 缁撴灉 + */ + public int insertTbStudyCenter(TbStudyCenter tbStudyCenter); + + /** + * 淇敼瀛︿範涓績 + * + * @param tbStudyCenter 瀛︿範涓績 + * @return 缁撴灉 + */ + public int updateTbStudyCenter(TbStudyCenter tbStudyCenter); + + /** + * 鎵归噺鍒犻櫎瀛︿範涓績 + * + * @param studyCenterIds 闇瑕佸垹闄ょ殑瀛︿範涓績涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbStudyCenterByStudyCenterIds(Long[] studyCenterIds); + + /** + * 鍒犻櫎瀛︿範涓績淇℃伅 + * + * @param studyCenterId 瀛︿範涓績涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbStudyCenterByStudyCenterId(Long studyCenterId); + + /** + * 瀛︿範涓績鍏ラ┗ + * + * @param studyCenterDTO + * @return ok + */ + public AjaxResult joinInStudyCenter(StudyCenterDTO studyCenterDTO); + + /** + * 瀛︿範涓績鍒楄〃 + * + * @param params 鍙傛暟 + * @return 瀛︿範涓績鍒楄〃 + */ + public List> getStudyCenterList(Map params); + + /** + * 瀛︿範涓績璇︽儏 + * + * @param params 鍙傛暟 + * @return 瀛︿範涓績璇︽儏 + */ + public Map getStudyCenterInfo(Map params); + + public List> getStudyCenterEvaluateAgencyList(Long studyCenterId); + + public PageInfo> getStudyCenterCourseList(Integer pageNum, Integer pageSize, Long studyCenterId, Long evaluateAgencyId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbSubjectWarehouseClassService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbSubjectWarehouseClassService.java new file mode 100644 index 0000000000000000000000000000000000000000..06c2445447c35ebbeb5534571b049a4975887e59 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbSubjectWarehouseClassService.java @@ -0,0 +1,80 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbSubjectWarehouseClass; + +import java.util.List; +import java.util.Map; + +/** + * 棰樺簱鍒嗙被Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-11-06 + */ +public interface ITbSubjectWarehouseClassService +{ + /** + * 鏌ヨ棰樺簱鍒嗙被 + * + * @param subjectWarehouseClassId 棰樺簱鍒嗙被涓婚敭 + * @return 棰樺簱鍒嗙被 + */ + public TbSubjectWarehouseClass selectTbSubjectWarehouseClassBySubjectWarehouseClassId(Long subjectWarehouseClassId); + + /** + * 鏌ヨ棰樺簱鍒嗙被鍒楄〃 + * + * @param tbSubjectWarehouseClass 棰樺簱鍒嗙被 + * @return 棰樺簱鍒嗙被闆嗗悎 + */ + public List selectTbSubjectWarehouseClassList(TbSubjectWarehouseClass tbSubjectWarehouseClass); + + /** + * 鏌ヨ棰樺簱鍒嗙被鍒楄〃 + * + * @return 棰樺簱鍒嗙被闆嗗悎 + */ + public List getAllSubjectWarehouseCalssList(); + + /** + * 鏂板棰樺簱鍒嗙被 + * + * @param tbSubjectWarehouseClass 棰樺簱鍒嗙被 + * @return 缁撴灉 + */ + public int insertTbSubjectWarehouseClass(TbSubjectWarehouseClass tbSubjectWarehouseClass); + + /** + * 淇敼棰樺簱鍒嗙被 + * + * @param tbSubjectWarehouseClass 棰樺簱鍒嗙被 + * @return 缁撴灉 + */ + public int updateTbSubjectWarehouseClass(TbSubjectWarehouseClass tbSubjectWarehouseClass); + + /** + * 鎵归噺鍒犻櫎棰樺簱鍒嗙被 + * + * @param subjectWarehouseClassIds 闇瑕佸垹闄ょ殑棰樺簱鍒嗙被涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbSubjectWarehouseClassBySubjectWarehouseClassIds(Long[] subjectWarehouseClassIds); + + /** + * 鍒犻櫎棰樺簱鍒嗙被淇℃伅 + * + * @param subjectWarehouseClassId 棰樺簱鍒嗙被涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbSubjectWarehouseClassBySubjectWarehouseClassId(Long subjectWarehouseClassId); + + /** + * 棰樺簱鍒楄〃 + * + * @param params 鍙傛暟 + * @return 棰樺簱鍒楄〃 + */ + public List> getSubjectWarehouseClassList(Map params); + + public TbSubjectWarehouseClass getSubjectWarehouseClass(Long courseId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbTeacherAuthenticationService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbTeacherAuthenticationService.java new file mode 100644 index 0000000000000000000000000000000000000000..4e99a17d9b8810fc131aa50f0790967ddeee7487 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbTeacherAuthenticationService.java @@ -0,0 +1,78 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbTeacherAuthentication; +import com.ruoyi.hezhi.domain.dto.TeacherAuthenticationDTO; + +import java.util.List; + +/** + * 鍚嶅笀璁よ瘉Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-12-13 + */ +public interface ITbTeacherAuthenticationService +{ + /** + * 鏌ヨ鍚嶅笀璁よ瘉 + * + * @param teacherAuthenticationId 鍚嶅笀璁よ瘉涓婚敭 + * @return 鍚嶅笀璁よ瘉 + */ + public TbTeacherAuthentication selectTbTeacherAuthenticationByTeacherAuthenticationId(Long teacherAuthenticationId); + /** + * 鏌ヨ鍚嶅笀璁よ瘉 + * + * @param phone 鍚嶅笀璁よ瘉涓婚敭 + * @return 鍚嶅笀璁よ瘉 + */ + public TbTeacherAuthentication selectTbTeacherAuthenticationByPhone(String phone); + + /** + * 鏌ヨ鍚嶅笀璁よ瘉鍒楄〃 + * + * @param tbTeacherAuthentication 鍚嶅笀璁よ瘉 + * @return 鍚嶅笀璁よ瘉闆嗗悎 + */ + public List selectTbTeacherAuthenticationList(TbTeacherAuthentication tbTeacherAuthentication); + + /** + * 鏂板鍚嶅笀璁よ瘉 + * + * @param tbTeacherAuthentication 鍚嶅笀璁よ瘉 + * @return 缁撴灉 + */ + public int insertTbTeacherAuthentication(TbTeacherAuthentication tbTeacherAuthentication); + + /** + * 淇敼鍚嶅笀璁よ瘉 + * + * @param tbTeacherAuthentication 鍚嶅笀璁よ瘉 + * @return 缁撴灉 + */ + public int updateTbTeacherAuthentication(TbTeacherAuthentication tbTeacherAuthentication); + + /** + * 鎵归噺鍒犻櫎鍚嶅笀璁よ瘉 + * + * @param teacherAuthenticationIds 闇瑕佸垹闄ょ殑鍚嶅笀璁よ瘉涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbTeacherAuthenticationByTeacherAuthenticationIds(Long[] teacherAuthenticationIds); + + /** + * 鍒犻櫎鍚嶅笀璁よ瘉淇℃伅 + * + * @param teacherAuthenticationId 鍚嶅笀璁よ瘉涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbTeacherAuthenticationByTeacherAuthenticationId(Long teacherAuthenticationId); + + /** + * 鎻愪氦鍚嶅笀璁よ瘉 + * @param teacherAuthenticationDTO 鍙傛暟 + * @return 缁撴灉 + */ + public int submitTeacherAuthentication(TeacherAuthenticationDTO teacherAuthenticationDTO); + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbTeacherCourseService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbTeacherCourseService.java new file mode 100644 index 0000000000000000000000000000000000000000..1c334eb734911c4b2f37ceeb2656a0f9a1f6cbef --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbTeacherCourseService.java @@ -0,0 +1,80 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbTeacherCourse; +import com.ruoyi.hezhi.domain.vo.CourseCardVO; + +import java.util.List; +import java.util.Map; + +/** + * 鑰佸笀璇剧▼鍏宠仈Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-09-14 + */ +public interface ITbTeacherCourseService +{ + /** + * 鏌ヨ鑰佸笀璇剧▼鍏宠仈 + * + * @param teacherCourseId 鑰佸笀璇剧▼鍏宠仈涓婚敭 + * @return 鑰佸笀璇剧▼鍏宠仈 + */ + public TbTeacherCourse selectTbTeacherCourseByTeacherCourseId(Long teacherCourseId); + + /** + * 鏌ヨ鑰佸笀璇剧▼鍏宠仈鍒楄〃 + * + * @param tbTeacherCourse 鑰佸笀璇剧▼鍏宠仈 + * @return 鑰佸笀璇剧▼鍏宠仈闆嗗悎 + */ + public List selectTbTeacherCourseList(TbTeacherCourse tbTeacherCourse); + + /** + * 鏂板鑰佸笀璇剧▼鍏宠仈 + * + * @param tbTeacherCourse 鑰佸笀璇剧▼鍏宠仈 + * @return 缁撴灉 + */ + public int insertTbTeacherCourse(TbTeacherCourse tbTeacherCourse); + + /** + * 淇敼鑰佸笀璇剧▼鍏宠仈 + * + * @param tbTeacherCourse 鑰佸笀璇剧▼鍏宠仈 + * @return 缁撴灉 + */ + public int updateTbTeacherCourse(TbTeacherCourse tbTeacherCourse); + + /** + * 鎵归噺鍒犻櫎鑰佸笀璇剧▼鍏宠仈 + * + * @param teacherCourseIds 闇瑕佸垹闄ょ殑鑰佸笀璇剧▼鍏宠仈涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbTeacherCourseByTeacherCourseIds(Long[] teacherCourseIds); + + /** + * 鍒犻櫎鑰佸笀璇剧▼鍏宠仈淇℃伅 + * + * @param teacherCourseId 鑰佸笀璇剧▼鍏宠仈涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbTeacherCourseByTeacherCourseId(Long teacherCourseId); + + /** + * 鏌ヨ鏁欏笀璇剧▼鍒楄〃 + * @param teacherId 鏁欏笀id + * @param isSpeak 鏄惁涓昏锛0-鍚︼紝1-鏄級 + * @return + */ + public List selectTeacherCourseList(Long teacherId, Integer isSpeak); + + /** + * 鏌ヨ璇剧▼涓嬫暀甯堝垪琛 + * + * @param params 鍙傛暟 + * @return ok + */ + public List> getTeacherList(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbTeacherService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbTeacherService.java new file mode 100644 index 0000000000000000000000000000000000000000..5d10e644486c55473a5330955a58b79834b5991f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbTeacherService.java @@ -0,0 +1,95 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbTeacher; +import com.ruoyi.hezhi.domain.vo.TeacherDetailVO; +import com.ruoyi.hezhi.domain.vo.TeacherVO; + +import java.util.List; +import java.util.Map; + +/** + * 鏁欏笀Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-09-14 + */ +public interface ITbTeacherService +{ + /** + * 鏌ヨ鏁欏笀 + * + * @param teacherId 鏁欏笀涓婚敭 + * @return 鏁欏笀 + */ + public TbTeacher selectTbTeacherByTeacherId(Long teacherId); + + /** + * 鏌ヨ鏁欏笀鍒楄〃 + * + * @param tbTeacher 鏁欏笀 + * @return 鏁欏笀闆嗗悎 + */ + public List selectTbTeacherList(TbTeacher tbTeacher); + + /** + * 鏂板鏁欏笀 + * + * @param tbTeacher 鏁欏笀 + * @return 缁撴灉 + */ + public int insertTbTeacher(TbTeacher tbTeacher); + + /** + * 淇敼鏁欏笀 + * + * @param tbTeacher 鏁欏笀 + * @return 缁撴灉 + */ + public int updateTbTeacher(TbTeacher tbTeacher); + + /** + * 鎵归噺鍒犻櫎鏁欏笀 + * + * @param teacherIds 闇瑕佸垹闄ょ殑鏁欏笀涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbTeacherByTeacherIds(Long[] teacherIds); + + /** + * 鍒犻櫎鏁欏笀淇℃伅 + * + * @param teacherId 鏁欏笀涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbTeacherByTeacherId(Long teacherId); + + /** + * 妗堜緥list + * @param typeId 绫诲瀷id 0鍏ㄩ儴 + * @return + */ + public List selectTeacherListByType(Long typeId); + + /** + * 璇︽儏 + * @param id + * @return + */ + public TeacherDetailVO getDetail(Long id); + + /** + * 甯堣祫鍥㈤槦鍒楄〃 + * + * @param params 鍙傛暟 + * @return 甯堣祫鍥㈤槦鍒楄〃 + */ + public List> getTeacherList(Map params); + + /** + * 鑰佸笀璇︽儏 + * + * @param params 鍙傛暟 + * @return 鑰佸笀璇︽儏 + */ + public Map getTeacherInfo(Map params); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbTrendsService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbTrendsService.java new file mode 100644 index 0000000000000000000000000000000000000000..27f6d3f7d96fc61ff55478399c15d5d318c5b2e9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbTrendsService.java @@ -0,0 +1,76 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbTrends; +import com.ruoyi.hezhi.domain.vo.TrendsVO; + +import java.util.List; + +/** + * 闄㈠唴鍔ㄦ丼ervice鎺ュ彛 + * + * @author ruoyi + * @date 2024-09-14 + */ +public interface ITbTrendsService +{ + /** + * 鏌ヨ闄㈠唴鍔ㄦ + * + * @param trendsId 闄㈠唴鍔ㄦ佷富閿 + * @return 闄㈠唴鍔ㄦ + */ + public TbTrends selectTbTrendsByTrendsId(Long trendsId); + + /** + * 鏌ヨ闄㈠唴鍔ㄦ佸垪琛 + * + * @param tbTrends 闄㈠唴鍔ㄦ + * @return 闄㈠唴鍔ㄦ侀泦鍚 + */ + public List selectTbTrendsList(TbTrends tbTrends); + + /** + * 鏂板闄㈠唴鍔ㄦ + * + * @param tbTrends 闄㈠唴鍔ㄦ + * @return 缁撴灉 + */ + public int insertTbTrends(TbTrends tbTrends); + + /** + * 淇敼闄㈠唴鍔ㄦ + * + * @param tbTrends 闄㈠唴鍔ㄦ + * @return 缁撴灉 + */ + public int updateTbTrends(TbTrends tbTrends); + + /** + * 鎵归噺鍒犻櫎闄㈠唴鍔ㄦ + * + * @param trendsIds 闇瑕佸垹闄ょ殑闄㈠唴鍔ㄦ佷富閿泦鍚 + * @return 缁撴灉 + */ + public int deleteTbTrendsByTrendsIds(Long[] trendsIds); + + /** + * 鍒犻櫎闄㈠唴鍔ㄦ佷俊鎭 + * + * @param trendsId 闄㈠唴鍔ㄦ佷富閿 + * @return 缁撴灉 + */ + public int deleteTbTrendsByTrendsId(Long trendsId); + + /** + * 鑾峰彇鍔ㄦ乴ist + * @return + */ + public List getTrendsVoList(); + + /** + * 鑾峰彇璇︽儏 + * @param id + * @return + */ + public TrendsVO getDetail(Long id); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbTypeCourseService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbTypeCourseService.java new file mode 100644 index 0000000000000000000000000000000000000000..4c3578f0e592593cb2e7b741be82f26a6b658860 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/ITbTypeCourseService.java @@ -0,0 +1,79 @@ +package com.ruoyi.hezhi.service; + +import com.ruoyi.hezhi.domain.TbTypeCourse; + +import java.util.List; + +/** + * 绫诲瀷璇剧▼鍏宠仈Service鎺ュ彛 + * + * @author ruoyi + * @date 2024-09-19 + */ +public interface ITbTypeCourseService +{ + /** + * 鏌ヨ绫诲瀷璇剧▼鍏宠仈 + * + * @param typeCourseId 绫诲瀷璇剧▼鍏宠仈涓婚敭 + * @return 绫诲瀷璇剧▼鍏宠仈 + */ + public TbTypeCourse selectTbTypeCourseByTypeCourseId(Long typeCourseId); + + /** + * 鏌ヨ绫诲瀷璇剧▼鍏宠仈鍒楄〃 + * + * @param tbTypeCourse 绫诲瀷璇剧▼鍏宠仈 + * @return 绫诲瀷璇剧▼鍏宠仈闆嗗悎 + */ + public List selectTbTypeCourseList(TbTypeCourse tbTypeCourse); + + /** + * 鏂板绫诲瀷璇剧▼鍏宠仈 + * + * @param tbTypeCourse 绫诲瀷璇剧▼鍏宠仈 + * @return 缁撴灉 + */ + public int insertTbTypeCourse(TbTypeCourse tbTypeCourse); + + /** + * 淇敼绫诲瀷璇剧▼鍏宠仈 + * + * @param tbTypeCourse 绫诲瀷璇剧▼鍏宠仈 + * @return 缁撴灉 + */ + public int updateTbTypeCourse(TbTypeCourse tbTypeCourse); + + /** + * 鎵归噺鍒犻櫎绫诲瀷璇剧▼鍏宠仈 + * + * @param typeCourseIds 闇瑕佸垹闄ょ殑绫诲瀷璇剧▼鍏宠仈涓婚敭闆嗗悎 + * @return 缁撴灉 + */ + public int deleteTbTypeCourseByTypeCourseIds(Long[] typeCourseIds); + + /** + * 鍒犻櫎绫诲瀷璇剧▼鍏宠仈淇℃伅 + * + * @param typeCourseId 绫诲瀷璇剧▼鍏宠仈涓婚敭 + * @return 缁撴灉 + */ + public int deleteTbTypeCourseByTypeCourseId(Long typeCourseId); + + /** + * 鏍规嵁璇剧▼ID鍒犻櫎绫诲瀷璇剧▼鍏宠仈淇℃伅 + * + * @param courseId 璇剧▼ID + * @return 缁撴灉 + */ + public int deleteTbTypeCourseByCourseId(Long courseId); + + /** + * 鎵归噺鏂板绫诲瀷璇剧▼鍏宠仈 + * + * @param classIds 鍒嗙被缁 + * @param courseId 璇剧▼ID + * @return 缁撴灉 + */ + public int batchInsertTbTypeCourse(Long[] classIds, Long courseId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/IWxPayService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/IWxPayService.java new file mode 100644 index 0000000000000000000000000000000000000000..d9dd500ff43651f16eab683f086d0b33bff2f9b7 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/IWxPayService.java @@ -0,0 +1,18 @@ +package com.ruoyi.hezhi.service; + +import org.springframework.stereotype.Service; + +/** + * @Author haoxuyang + * @Date 2025/2/6 14:08 + */ +@Service +public interface IWxPayService { + /** + * 鍒涘缓璁㈠崟鏀粯 + * + * @param orderNo 璁㈠崟id + * @return Object + */ + Object createOrder(String orderNo); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbAuthorizeHonorServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbAuthorizeHonorServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..01be2794965036fc615181fd57d378250108f59f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbAuthorizeHonorServiceImpl.java @@ -0,0 +1,109 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbAuthorizeHonor; +import com.ruoyi.hezhi.mapper.TbAuthorizeHonorMapper; +import com.ruoyi.hezhi.service.ITbAuthorizeHonorService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * 鎺堟潈鑽h獕Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-10-16 + */ +@Service +public class TbAuthorizeHonorServiceImpl implements ITbAuthorizeHonorService +{ + @Autowired + private TbAuthorizeHonorMapper tbAuthorizeHonorMapper; + + /** + * 鏌ヨ鎺堟潈鑽h獕 + * + * @param authorizeHonorId 鎺堟潈鑽h獕涓婚敭 + * @return 鎺堟潈鑽h獕 + */ + @Override + public TbAuthorizeHonor selectTbAuthorizeHonorByAuthorizeHonorId(Long authorizeHonorId) + { + return tbAuthorizeHonorMapper.selectTbAuthorizeHonorByAuthorizeHonorId(authorizeHonorId); + } + + /** + * 鏌ヨ鎺堟潈鑽h獕鍒楄〃 + * + * @param tbAuthorizeHonor 鎺堟潈鑽h獕 + * @return 鎺堟潈鑽h獕 + */ + @Override + public List selectTbAuthorizeHonorList(TbAuthorizeHonor tbAuthorizeHonor) + { + return tbAuthorizeHonorMapper.selectTbAuthorizeHonorList(tbAuthorizeHonor); + } + + /** + * 鏂板鎺堟潈鑽h獕 + * + * @param tbAuthorizeHonor 鎺堟潈鑽h獕 + * @return 缁撴灉 + */ + @Override + public int insertTbAuthorizeHonor(TbAuthorizeHonor tbAuthorizeHonor) + { + tbAuthorizeHonor.setCreateTime(DateUtils.getNowDate()); + return tbAuthorizeHonorMapper.insertTbAuthorizeHonor(tbAuthorizeHonor); + } + + /** + * 淇敼鎺堟潈鑽h獕 + * + * @param tbAuthorizeHonor 鎺堟潈鑽h獕 + * @return 缁撴灉 + */ + @Override + public int updateTbAuthorizeHonor(TbAuthorizeHonor tbAuthorizeHonor) + { + tbAuthorizeHonor.setUpdateTime(DateUtils.getNowDate()); + return tbAuthorizeHonorMapper.updateTbAuthorizeHonor(tbAuthorizeHonor); + } + + /** + * 鎵归噺鍒犻櫎鎺堟潈鑽h獕 + * + * @param authorizeHonorIds 闇瑕佸垹闄ょ殑鎺堟潈鑽h獕涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbAuthorizeHonorByAuthorizeHonorIds(Long[] authorizeHonorIds) + { + return tbAuthorizeHonorMapper.deleteTbAuthorizeHonorByAuthorizeHonorIds(authorizeHonorIds); + } + + /** + * 鍒犻櫎鎺堟潈鑽h獕淇℃伅 + * + * @param authorizeHonorId 鎺堟潈鑽h獕涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbAuthorizeHonorByAuthorizeHonorId(Long authorizeHonorId) + { + return tbAuthorizeHonorMapper.deleteTbAuthorizeHonorByAuthorizeHonorId(authorizeHonorId); + } + + /** + * 鎺堟潈鍙婅崳瑾夊垪琛 + * + * @param params 鍙傛暟 + * @return 鎺堟潈鍙婅崳瑾夊垪琛 + */ + @Override + public List> getAuthorizeHonorList(Map params) { + return tbAuthorizeHonorMapper.getAuthorizeHonorList(params); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbBannerServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbBannerServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..a845f93fce3dc9b94d94ca14253bbc71c08786ab --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbBannerServiceImpl.java @@ -0,0 +1,133 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.hezhi.domain.TbBanner; +import com.ruoyi.hezhi.domain.dto.BannerDTO; +import com.ruoyi.hezhi.domain.vo.BannerVO; +import com.ruoyi.hezhi.mapper.TbBannerMapper; +import com.ruoyi.hezhi.service.ITbBannerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * 杞挱鍥維ervice涓氬姟灞傚鐞 + * + * @author CC + * @date 2024-03-12 + */ +@Service +public class TbBannerServiceImpl implements ITbBannerService +{ + @Autowired + private TbBannerMapper tbBannerMapper; + + /** + * 鏌ヨ杞挱鍥 + * + * @param bannerId 杞挱鍥句富閿 + * @return 杞挱鍥 + */ + @Override + public TbBanner selectTbBannerByBannerId(String bannerId) + { + return tbBannerMapper.selectTbBannerByBannerId(bannerId); + } + + /** + * 鏌ヨ杞挱鍥惧垪琛 + * + * @param tbBanner 杞挱鍥 + * @return 杞挱鍥 + */ + @Override + public List selectTbBannerList(TbBanner tbBanner) + { + return tbBannerMapper.selectTbBannerList(tbBanner); + } + + /** + * 鏂板杞挱鍥 + * + * @param tbBanner 杞挱鍥 + * @return 缁撴灉 + */ + @Override + @Transactional(rollbackFor = {Exception.class}) + public int insertTbBanner(TbBanner tbBanner) + { + // checkSort(tbBanner.getBannerSort(), null,tbBanner.getType()); + tbBanner.setBannerId(IdUtils.fastSimpleUUID()); + tbBanner.setCreateBy(SecurityUtils.getUsername()); + tbBanner.setCreateTime(DateUtils.getNowDate()); + return tbBannerMapper.insertTbBanner(tbBanner); + } + + /** + * 鏍¢獙鎺掑簭 + * @param sort 鎺掑簭 + * @param id 缂栧彿 + */ + public void checkSort(Long sort, String id, String type){ + int i = tbBannerMapper.checkSort(sort, id, type); + if (i>0){ + throw new ServiceException("鎺掑簭搴忓彿閲嶅"); + } + } + + /** + * 淇敼杞挱鍥 + * + * @param tbBanner 杞挱鍥 + * @return 缁撴灉 + */ + @Override + @Transactional(rollbackFor = {Exception.class}) + public int updateTbBanner(TbBanner tbBanner) + { + // checkSort(tbBanner.getBannerSort(), tbBanner.getBannerId(),tbBanner.getType()); + tbBanner.setUpdateTime(DateUtils.getNowDate()); + tbBanner.setUpdateBy(SecurityUtils.getUsername()); + return tbBannerMapper.updateTbBanner(tbBanner); + } + + /** + * 鎵归噺鍒犻櫎杞挱鍥 + * + * @param bannerIds 闇瑕佸垹闄ょ殑杞挱鍥句富閿 + * @return 缁撴灉 + */ + @Override + public int deleteTbBannerByBannerIds(String[] bannerIds) + { + return tbBannerMapper.deleteTbBannerByBannerIds(bannerIds,SecurityUtils.getUsername()); + } + + /** + * 鍒犻櫎杞挱鍥句俊鎭 + * + * @param bannerId 杞挱鍥句富閿 + * @return 缁撴灉 + */ + @Override + public int deleteTbBannerByBannerId(String bannerId) + { + return tbBannerMapper.deleteTbBannerByBannerId(bannerId,SecurityUtils.getUsername()); + } + + /** + * xcx閫氱敤鈥斺旀煡璇㈣疆鎾浘鍒楄〃 + * + * @param banner 杞挱鍥惧弬鏁 + * @return 杞挱鍥鹃泦鍚 + */ + @Override + public List selectBannerListForXcxCommon(BannerDTO banner) { + return tbBannerMapper.selectBannerListForXcxCommon(banner); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbCareerClassServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbCareerClassServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..8d6c893b2a82b5a3e136e04c77cadd00a010475d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbCareerClassServiceImpl.java @@ -0,0 +1,148 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbCareerClass; +import com.ruoyi.hezhi.mapper.TbCareerClassMapper; +import com.ruoyi.hezhi.service.ITbCareerClassService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * 鑱屼笟鍒嗙被Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-10-10 + */ +@Service +public class TbCareerClassServiceImpl implements ITbCareerClassService +{ + @Autowired + private TbCareerClassMapper tbCareerClassMapper; + + /** + * 鏌ヨ鑱屼笟鍒嗙被 + * + * @param careerId 鑱屼笟鍒嗙被涓婚敭 + * @return 鑱屼笟鍒嗙被 + */ + @Override + public TbCareerClass selectTbCareerClassByCareerId(Long careerId) + { + return tbCareerClassMapper.selectTbCareerClassByCareerId(careerId); + } + + /** + * 鏌ヨ鑱屼笟鍒嗙被鍒楄〃 + * + * @param tbCareerClass 鑱屼笟鍒嗙被 + * @return 鑱屼笟鍒嗙被 + */ + @Override + public List selectTbCareerClassList(TbCareerClass tbCareerClass) + { + return tbCareerClassMapper.selectTbCareerClassList(tbCareerClass); + } + + /** + * 鏂板鑱屼笟鍒嗙被 + * + * @param tbCareerClass 鑱屼笟鍒嗙被 + * @return 缁撴灉 + */ + @Override + public int insertTbCareerClass(TbCareerClass tbCareerClass) + { + tbCareerClass.setCreateTime(DateUtils.getNowDate()); + return tbCareerClassMapper.insertTbCareerClass(tbCareerClass); + } + + /** + * 淇敼鑱屼笟鍒嗙被 + * + * @param tbCareerClass 鑱屼笟鍒嗙被 + * @return 缁撴灉 + */ + @Override + public int updateTbCareerClass(TbCareerClass tbCareerClass) + { + tbCareerClass.setUpdateTime(DateUtils.getNowDate()); + return tbCareerClassMapper.updateTbCareerClass(tbCareerClass); + } + + /** + * 鎵归噺鍒犻櫎鑱屼笟鍒嗙被 + * + * @param careerIds 闇瑕佸垹闄ょ殑鑱屼笟鍒嗙被涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbCareerClassByCareerIds(Long[] careerIds) + { + return tbCareerClassMapper.deleteTbCareerClassByCareerIds(careerIds); + } + + /** + * 鍒犻櫎鑱屼笟鍒嗙被淇℃伅 + * + * @param careerId 鑱屼笟鍒嗙被涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbCareerClassByCareerId(Long careerId) + { + return tbCareerClassMapper.deleteTbCareerClassByCareerId(careerId); + } + + /** + * 鏌ヨ鑱屼笟鍒嗙被鍒楄〃 + * + * @return 鑱屼笟鍒嗙被闆嗗悎 + */ + @Override + public List selectTbCareerClassTreeList() { + TbCareerClass tbCareerClass = new TbCareerClass(); + tbCareerClass.setStatus(0); + tbCareerClass.setDelFlag(0); + List list = tbCareerClassMapper.selectTbCareerClassList(tbCareerClass); + return this.toTree(list, 0L); + } + + /** + * 鏂瑰紡涓锛氫娇鐢ㄤ袱灞傚惊鐜疄鐜 + * @param treeList + * @return + */ + @Override + public List toTree(List treeList, Long pid) { + List retList = new ArrayList(); + for (TbCareerClass parent : treeList) { + if (pid.equals(parent.getPid())) { + retList.add(parent); + } + for (TbCareerClass childOne : treeList) { + if (childOne.getPid().equals(parent.getCareerId())) { + if (parent.getChildrenList() == null) { + parent.setChildrenList(new ArrayList()); + } + parent.getChildrenList().add(childOne); + } + } + } + return retList; + } + + /** + * 鑱屼笟鍒嗙被鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鑱屼笟鍒嗙被闆嗗悎鍒楄〃 + */ + @Override + public List> selectTbCareerClassMapList(Map params) { + return tbCareerClassMapper.selectTbCareerClassMapList(params); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbCaseServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbCaseServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..76b7f6d9894663077f5e2ab29e22475d19982207 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbCaseServiceImpl.java @@ -0,0 +1,142 @@ +package com.ruoyi.hezhi.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbCase; +import com.ruoyi.hezhi.domain.TbCaseType; +import com.ruoyi.hezhi.domain.vo.CaseVO; +import com.ruoyi.hezhi.mapper.TbCaseMapper; +import com.ruoyi.hezhi.service.ITbCaseService; +import com.ruoyi.hezhi.service.ITbCaseTypeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 妗堜緥Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-09-14 + */ +@Service +public class TbCaseServiceImpl implements ITbCaseService +{ + @Autowired + private TbCaseMapper tbCaseMapper; + + @Resource + private ITbCaseTypeService caseTypeService; + + /** + * 鏌ヨ妗堜緥 + * + * @param caseId 妗堜緥涓婚敭 + * @return 妗堜緥 + */ + @Override + public TbCase selectTbCaseByCaseId(Long caseId) + { + return tbCaseMapper.selectTbCaseByCaseId(caseId); + } + + /** + * 鏌ヨ妗堜緥鍒楄〃 + * + * @param tbCase 妗堜緥 + * @return 妗堜緥 + */ + @Override + public List selectTbCaseList(TbCase tbCase) + { + return tbCaseMapper.selectTbCaseList(tbCase); + } + + /** + * 鏂板妗堜緥 + * + * @param tbCase 妗堜緥 + * @return 缁撴灉 + */ + @Override + public int insertTbCase(TbCase tbCase) + { + tbCase.setCreateTime(DateUtils.getNowDate()); + return tbCaseMapper.insertTbCase(tbCase); + } + + /** + * 淇敼妗堜緥 + * + * @param tbCase 妗堜緥 + * @return 缁撴灉 + */ + @Override + public int updateTbCase(TbCase tbCase) + { + tbCase.setUpdateTime(DateUtils.getNowDate()); + return tbCaseMapper.updateTbCase(tbCase); + } + + /** + * 鎵归噺鍒犻櫎妗堜緥 + * + * @param caseIds 闇瑕佸垹闄ょ殑妗堜緥涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbCaseByCaseIds(Long[] caseIds) + { + return tbCaseMapper.deleteTbCaseByCaseIds(caseIds); + } + + /** + * 鍒犻櫎妗堜緥淇℃伅 + * + * @param caseId 妗堜緥涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbCaseByCaseId(Long caseId) + { + return tbCaseMapper.deleteTbCaseByCaseId(caseId); + } + + /** + * 妗堜緥list + * @param caseTypeId 妗堜緥绫诲瀷id 0鍏ㄩ儴 + * @return + */ + @Override + public List selectCaseListByType(Long caseTypeId) { + if(null != caseTypeId && 0 != caseTypeId ){ + TbCaseType tbCaseType = caseTypeService.selectTbCaseTypeByCaseTypeId(caseTypeId); + if(ObjectUtils.isEmpty(tbCaseType)){ + throw new ServiceException("鏈煡璇㈠埌妗堜緥鍒嗙被",500); + } + if(tbCaseType.getShowStatus() == 1){ + throw new ServiceException("鏈煡璇㈠埌妗堜緥鍒嗙被",500); + } + } + return tbCaseMapper.selectCaseListByType(caseTypeId); + } + + /** + * 璇︽儏 + * @param id + * @return + */ + @Override + public CaseVO getDetail(Long id) { + TbCase detail = tbCaseMapper.selectTbCaseByCaseId(id); + CaseVO vo = BeanUtil.toBean(detail,CaseVO.class); + if(ObjectUtils.isEmpty(vo)){ + throw new ServiceException("鏌ヨ妗堜緥璇︽儏寮傚父",500); + }else{ + return vo; + } + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbCaseTypeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbCaseTypeServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..04632a9ed4e02b57565c04ca2ae529c9255d55fa --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbCaseTypeServiceImpl.java @@ -0,0 +1,112 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbCaseType; +import com.ruoyi.hezhi.domain.vo.CaseTypeVO; +import com.ruoyi.hezhi.mapper.TbCaseTypeMapper; +import com.ruoyi.hezhi.mapper.TbTypeCourseMapper; +import com.ruoyi.hezhi.service.ITbCaseTypeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 妗堜緥绫诲瀷Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-09-14 + */ +@Service +public class TbCaseTypeServiceImpl implements ITbCaseTypeService +{ + @Autowired + private TbCaseTypeMapper tbCaseTypeMapper; + @Autowired + private TbTypeCourseMapper tbTypeCourseMapper; + + /** + * 鏌ヨ妗堜緥绫诲瀷 + * + * @param caseTypeId 妗堜緥绫诲瀷涓婚敭 + * @return 妗堜緥绫诲瀷 + */ + @Override + public TbCaseType selectTbCaseTypeByCaseTypeId(Long caseTypeId) + { + return tbCaseTypeMapper.selectTbCaseTypeByCaseTypeId(caseTypeId); + } + + /** + * 鏌ヨ妗堜緥绫诲瀷鍒楄〃 + * + * @param tbCaseType 妗堜緥绫诲瀷 + * @return 妗堜緥绫诲瀷 + */ + @Override + public List selectTbCaseTypeList(TbCaseType tbCaseType) + { + return tbCaseTypeMapper.selectTbCaseTypeList(tbCaseType); + } + + /** + * 鏂板妗堜緥绫诲瀷 + * + * @param tbCaseType 妗堜緥绫诲瀷 + * @return 缁撴灉 + */ + @Override + public int insertTbCaseType(TbCaseType tbCaseType) + { + tbCaseType.setCreateTime(DateUtils.getNowDate()); + return tbCaseTypeMapper.insertTbCaseType(tbCaseType); + } + + /** + * 淇敼妗堜緥绫诲瀷 + * + * @param tbCaseType 妗堜緥绫诲瀷 + * @return 缁撴灉 + */ + @Override + public int updateTbCaseType(TbCaseType tbCaseType) + { + tbCaseType.setUpdateTime(DateUtils.getNowDate()); + return tbCaseTypeMapper.updateTbCaseType(tbCaseType); + } + + /** + * 鎵归噺鍒犻櫎妗堜緥绫诲瀷 + * + * @param caseTypeIds 闇瑕佸垹闄ょ殑妗堜緥绫诲瀷涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbCaseTypeByCaseTypeIds(Long[] caseTypeIds) + { + // 绫诲瀷ID鎵归噺鍒犻櫎绫诲瀷璇剧▼鍏宠仈 + tbTypeCourseMapper.deleteTbTypeCourseByCaseTypeIds(caseTypeIds); + return tbCaseTypeMapper.deleteTbCaseTypeByCaseTypeIds(caseTypeIds); + } + + /** + * 鍒犻櫎妗堜緥绫诲瀷淇℃伅 + * + * @param caseTypeId 妗堜緥绫诲瀷涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbCaseTypeByCaseTypeId(Long caseTypeId) + { + return tbCaseTypeMapper.deleteTbCaseTypeByCaseTypeId(caseTypeId); + } + + /** + * 鑾峰彇妗堜緥鍒嗙被list + * @return + */ + @Override + public List getCaseTypeList() { + return tbCaseTypeMapper.getTypeList(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbConferenceNoticeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbConferenceNoticeServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..d0f1285269db2697480bf81cca0ebb8609fe924d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbConferenceNoticeServiceImpl.java @@ -0,0 +1,148 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbConferenceNotice; +import com.ruoyi.hezhi.mapper.TbConferenceNoticeMapper; +import com.ruoyi.hezhi.service.ITbConferenceNoticeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; + +/** + * 鏁板瓧鏁欒偛澶т細閫氱煡Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-10-29 + */ +@Service +public class TbConferenceNoticeServiceImpl implements ITbConferenceNoticeService +{ + @Autowired + private TbConferenceNoticeMapper tbConferenceNoticeMapper; + + /** + * 鏌ヨ鏁板瓧鏁欒偛澶т細閫氱煡 + * + * @param conferenceNoticeId 鏁板瓧鏁欒偛澶т細閫氱煡涓婚敭 + * @return 鏁板瓧鏁欒偛澶т細閫氱煡 + */ + @Override + public TbConferenceNotice selectTbConferenceNoticeByConferenceNoticeId(Long conferenceNoticeId) + { + return tbConferenceNoticeMapper.selectTbConferenceNoticeByConferenceNoticeId(conferenceNoticeId); + } + + /** + * 鏌ヨ鏁板瓧鏁欒偛澶т細閫氱煡鍒楄〃 + * + * @param tbConferenceNotice 鏁板瓧鏁欒偛澶т細閫氱煡 + * @return 鏁板瓧鏁欒偛澶т細閫氱煡 + */ + @Override + public List selectTbConferenceNoticeList(TbConferenceNotice tbConferenceNotice) + { + return tbConferenceNoticeMapper.selectTbConferenceNoticeList(tbConferenceNotice); + } + + /** + * 鏂板鏁板瓧鏁欒偛澶т細閫氱煡 + * + * @param tbConferenceNotice 鏁板瓧鏁欒偛澶т細閫氱煡 + * @return 缁撴灉 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int insertTbConferenceNotice(TbConferenceNotice tbConferenceNotice) + { + //鍏堟牎楠屾槸鍚︽湁鏃堕棿閲嶅悎鐨 + List conferenceNotice = tbConferenceNoticeMapper.selectTbConferenceNoticeBy(tbConferenceNotice.getConferenceStartTime(), tbConferenceNotice.getConferenceEndTime()); + if (!conferenceNotice.isEmpty()) { + throw new ServiceException("鏂板澶辫触锛屽瓨鍦ㄩ噸鍚堢殑浼氳鏃堕棿"); + } + tbConferenceNotice.setCreateTime(DateUtils.getNowDate()); + return tbConferenceNoticeMapper.insertTbConferenceNotice(tbConferenceNotice); + } + + /** + * 淇敼鏁板瓧鏁欒偛澶т細閫氱煡 + * + * @param tbConferenceNotice 鏁板瓧鏁欒偛澶т細閫氱煡 + * @return 缁撴灉 + */ + @Override + public int updateTbConferenceNotice(TbConferenceNotice tbConferenceNotice) + { + tbConferenceNotice.setUpdateTime(DateUtils.getNowDate()); + return tbConferenceNoticeMapper.updateTbConferenceNotice(tbConferenceNotice); + } + + /** + * 鎵归噺鍒犻櫎鏁板瓧鏁欒偛澶т細閫氱煡 + * + * @param conferenceNoticeIds 闇瑕佸垹闄ょ殑鏁板瓧鏁欒偛澶т細閫氱煡涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbConferenceNoticeByConferenceNoticeIds(Long[] conferenceNoticeIds) + { + return tbConferenceNoticeMapper.deleteTbConferenceNoticeByConferenceNoticeIds(conferenceNoticeIds); + } + + /** + * 鍒犻櫎鏁板瓧鏁欒偛澶т細閫氱煡淇℃伅 + * + * @param conferenceNoticeId 鏁板瓧鏁欒偛澶т細閫氱煡涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbConferenceNoticeByConferenceNoticeId(Long conferenceNoticeId) + { + return tbConferenceNoticeMapper.deleteTbConferenceNoticeByConferenceNoticeId(conferenceNoticeId); + } + + /** + * 鏁板瓧鏁欒偛澶т細閫氱煡鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鏁板瓧鏁欒偛澶т細閫氱煡鍒楄〃 + */ + @Override + public List> getCourseTeacherList(Map params) { + return tbConferenceNoticeMapper.getCourseTeacherList(params); + } + + /** + * 鏁板瓧鏁欒偛澶т細閫氱煡璇︽儏 + * + * @param params 鍙傛暟 + * @return 鏁板瓧鏁欒偛澶т細閫氱煡璇︽儏 + */ + @Override + public Map getConferenceNoticeInfo(Map params) { + return tbConferenceNoticeMapper.getConferenceNoticeInfo(params); + } + + /** + * 鏌ヨ鏈鏂版暟瀛楁暀鑲插ぇ浼氫細璁氱煡锛堜細璁紑濮嬫椂闂存湭寮濮嬶級 + * + * @return 鏁板瓧鏁欒偛澶т細閫氱煡 + */ + @Override + public TbConferenceNotice selectTbConferenceNoticeByNew() { + return tbConferenceNoticeMapper.selectTbConferenceNoticeByNew(); + } + + /** + * 鏌ヨ寮濮嬫姤鍚嶇殑鏁板瓧鏁欒偛澶т細浼氳閫氱煡 + * + * @return 鏁板瓧鏁欒偛澶т細閫氱煡 + */ + @Override + public TbConferenceNotice selectTbConferenceNoticeByEnroll() { + return tbConferenceNoticeMapper.selectTbConferenceNoticeByEnroll(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbConferencePeopleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbConferencePeopleServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..162f19ec95135fb563a307768b0dd29673ab8b9b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbConferencePeopleServiceImpl.java @@ -0,0 +1,109 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbConferencePeople; +import com.ruoyi.hezhi.mapper.TbConferencePeopleMapper; +import com.ruoyi.hezhi.service.ITbConferencePeopleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * 鏁板瓧鏁欒偛澶т細鍙備細鍢夊Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-10-29 + */ +@Service +public class TbConferencePeopleServiceImpl implements ITbConferencePeopleService +{ + @Autowired + private TbConferencePeopleMapper tbConferencePeopleMapper; + + /** + * 鏌ヨ鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + * + * @param conferencePeopleId 鏁板瓧鏁欒偛澶т細鍙備細鍢夊涓婚敭 + * @return 鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + */ + @Override + public TbConferencePeople selectTbConferencePeopleByConferencePeopleId(Long conferencePeopleId) + { + return tbConferencePeopleMapper.selectTbConferencePeopleByConferencePeopleId(conferencePeopleId); + } + + /** + * 鏌ヨ鏁板瓧鏁欒偛澶т細鍙備細鍢夊鍒楄〃 + * + * @param tbConferencePeople 鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + * @return 鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + */ + @Override + public List selectTbConferencePeopleList(TbConferencePeople tbConferencePeople) + { + return tbConferencePeopleMapper.selectTbConferencePeopleList(tbConferencePeople); + } + + /** + * 鏂板鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + * + * @param tbConferencePeople 鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + * @return 缁撴灉 + */ + @Override + public int insertTbConferencePeople(TbConferencePeople tbConferencePeople) + { + tbConferencePeople.setCreateTime(DateUtils.getNowDate()); + return tbConferencePeopleMapper.insertTbConferencePeople(tbConferencePeople); + } + + /** + * 淇敼鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + * + * @param tbConferencePeople 鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + * @return 缁撴灉 + */ + @Override + public int updateTbConferencePeople(TbConferencePeople tbConferencePeople) + { + tbConferencePeople.setUpdateTime(DateUtils.getNowDate()); + return tbConferencePeopleMapper.updateTbConferencePeople(tbConferencePeople); + } + + /** + * 鎵归噺鍒犻櫎鏁板瓧鏁欒偛澶т細鍙備細鍢夊 + * + * @param conferencePeopleIds 闇瑕佸垹闄ょ殑鏁板瓧鏁欒偛澶т細鍙備細鍢夊涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbConferencePeopleByConferencePeopleIds(Long[] conferencePeopleIds) + { + return tbConferencePeopleMapper.deleteTbConferencePeopleByConferencePeopleIds(conferencePeopleIds); + } + + /** + * 鍒犻櫎鏁板瓧鏁欒偛澶т細鍙備細鍢夊淇℃伅 + * + * @param conferencePeopleId 鏁板瓧鏁欒偛澶т細鍙備細鍢夊涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbConferencePeopleByConferencePeopleId(Long conferencePeopleId) + { + return tbConferencePeopleMapper.deleteTbConferencePeopleByConferencePeopleId(conferencePeopleId); + } + + /** + * 鍙備細鍢夊鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鍙備細鍢夊鍒楄〃 + */ + @Override + public List> getConferencePeopleList(Map params) { + return tbConferencePeopleMapper.getConferencePeopleList(params); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbConferenceRegistrationServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbConferenceRegistrationServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..c794527f41c33263eb22b7dde77307de85b947a0 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbConferenceRegistrationServiceImpl.java @@ -0,0 +1,181 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbConferenceNotice; +import com.ruoyi.hezhi.domain.TbConferenceRegistration; +import com.ruoyi.hezhi.domain.dto.ConferenceRegistrationDTO; +import com.ruoyi.hezhi.mapper.TbConferenceRegistrationMapper; +import com.ruoyi.hezhi.service.ITbConferenceNoticeService; +import com.ruoyi.hezhi.service.ITbConferenceRegistrationService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 鍙備細鎶ュ悕Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-10-28 + */ +@Service +public class TbConferenceRegistrationServiceImpl implements ITbConferenceRegistrationService +{ + @Autowired + private TbConferenceRegistrationMapper tbConferenceRegistrationMapper; + @Resource + private ITbConferenceNoticeService conferenceNoticeService; + + /** + * 鏌ヨ鍙備細鎶ュ悕 + * + * @param conferenceRegistrationId 鍙備細鎶ュ悕涓婚敭 + * @return 鍙備細鎶ュ悕 + */ + @Override + public TbConferenceRegistration selectTbConferenceRegistrationByConferenceRegistrationId(Long conferenceRegistrationId) + { + return tbConferenceRegistrationMapper.selectTbConferenceRegistrationByConferenceRegistrationId(conferenceRegistrationId); + } + + /** + * 鏌ヨ鍙備細鎶ュ悕鍒楄〃 + * + * @param tbConferenceRegistration 鍙備細鎶ュ悕 + * @return 鍙備細鎶ュ悕 + */ + @Override + public List selectTbConferenceRegistrationList(TbConferenceRegistration tbConferenceRegistration) + { + return tbConferenceRegistrationMapper.selectTbConferenceRegistrationList(tbConferenceRegistration); + } + + /** + * 鏂板鍙備細鎶ュ悕 + * + * @param tbConferenceRegistration 鍙備細鎶ュ悕 + * @return 缁撴灉 + */ + @Override + public int insertTbConferenceRegistration(TbConferenceRegistration tbConferenceRegistration) + { + tbConferenceRegistration.setCreateTime(DateUtils.getNowDate()); + return tbConferenceRegistrationMapper.insertTbConferenceRegistration(tbConferenceRegistration); + } + + /** + * 淇敼鍙備細鎶ュ悕 + * + * @param tbConferenceRegistration 鍙備細鎶ュ悕 + * @return 缁撴灉 + */ + @Override + public int updateTbConferenceRegistration(TbConferenceRegistration tbConferenceRegistration) + { + tbConferenceRegistration.setUpdateTime(DateUtils.getNowDate()); + return tbConferenceRegistrationMapper.updateTbConferenceRegistration(tbConferenceRegistration); + } + + /** + * 鎵归噺鍒犻櫎鍙備細鎶ュ悕 + * + * @param conferenceRegistrationIds 闇瑕佸垹闄ょ殑鍙備細鎶ュ悕涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbConferenceRegistrationByConferenceRegistrationIds(Long[] conferenceRegistrationIds) + { + return tbConferenceRegistrationMapper.deleteTbConferenceRegistrationByConferenceRegistrationIds(conferenceRegistrationIds); + } + + /** + * 鍒犻櫎鍙備細鎶ュ悕淇℃伅 + * + * @param conferenceRegistrationId 鍙備細鎶ュ悕涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbConferenceRegistrationByConferenceRegistrationId(Long conferenceRegistrationId) + { + return tbConferenceRegistrationMapper.deleteTbConferenceRegistrationByConferenceRegistrationId(conferenceRegistrationId); + } + + /** + * 鍙備細鎶ュ悕 + * + * @param conferenceRegistrationDTO + * @return ok + */ + @Override + public AjaxResult conferenceRegistration(ConferenceRegistrationDTO conferenceRegistrationDTO) { + TbConferenceNotice conferenceNotice = conferenceNoticeService.selectTbConferenceNoticeByEnroll(); + if (conferenceNotice == null) { + return AjaxResult.error("浼氳鏈惎鍔ㄦ姤鍚"); + } + TbConferenceRegistration userRegistration = tbConferenceRegistrationMapper.selectTbConferenceRegistrationBy(conferenceRegistrationDTO.getMemberUserId(), conferenceNotice.getConferenceNoticeId()); + if (userRegistration != null) { + return AjaxResult.error("鎮ㄥ凡鎶ュ悕锛岃鍕块噸澶嶆彁浜"); + } + TbConferenceRegistration registration = new TbConferenceRegistration(); + registration.setMemberUserId(conferenceRegistrationDTO.getMemberUserId()); + registration.setConferenceNoticeId(conferenceRegistrationDTO.getConferenceNoticeId()); + registration.setName(conferenceRegistrationDTO.getName()); + registration.setPhone(conferenceRegistrationDTO.getPhone()); + registration.setDocumentType(conferenceRegistrationDTO.getDocumentType()); + registration.setDocumentNumber(conferenceRegistrationDTO.getDocumentNumber()); + registration.setEmail(conferenceRegistrationDTO.getEmail()); + registration.setCompanyName(conferenceRegistrationDTO.getCompanyName()); + registration.setCompanyType(conferenceRegistrationDTO.getCompanyType()); + registration.setPosition(conferenceRegistrationDTO.getPosition()); + registration.setPositionType(conferenceRegistrationDTO.getPositionType()); + registration.setProvinceId(conferenceRegistrationDTO.getProvinceId()); + registration.setCityId(conferenceRegistrationDTO.getCityId()); + registration.setAreaId(conferenceRegistrationDTO.getAreaId()); + registration.setIdPhoto(conferenceRegistrationDTO.getIdPhoto()); + registration.setBusiness(conferenceRegistrationDTO.getBusiness()); + registration.setObjective(conferenceRegistrationDTO.getObjective()); + registration.setIsParticipate(conferenceRegistrationDTO.getIsParticipate()); + registration.setIsParticipateNext(conferenceRegistrationDTO.getIsParticipateNext()); + + registration.setCreateTime(DateUtils.getNowDate()); + tbConferenceRegistrationMapper.insertTbConferenceRegistration(registration); + return AjaxResult.success(); + } + + /** + * 鍙備細鎶ュ悕璇︽儏 + * + * @param params 鍙傛暟 + * @return 鍙備細鎶ュ悕璇︽儏 + */ + @Override + public Map getConferenceRegistrationInfo(Map params) { + HashMap map = new HashMap<>(); + int conferenceStatus = 0;// 榛樿鏃犱細璁 + String demand = "";// 浼氳鎶ュ悕瑕佹眰 + Long conferenceNoticeId = 0L;// 浼氳閫氱煡ID + + TbConferenceNotice conferenceNotice = conferenceNoticeService.selectTbConferenceNoticeByEnroll(); + if (conferenceNotice != null) { + TbConferenceRegistration userRegistration = tbConferenceRegistrationMapper.selectTbConferenceRegistrationBy(Long.parseLong(params.get("memberUserId").toString()), conferenceNotice.getConferenceNoticeId()); + if (userRegistration == null) { + // 鍙姤鍚 + conferenceStatus = 1; + } else { + // 宸叉姤鍚 + conferenceStatus = 2; + } + + demand = conferenceNotice.getDemand(); + conferenceNoticeId = conferenceNotice.getConferenceNoticeId(); + } + map.put("conferenceStatus", conferenceStatus); + map.put("demand", demand); + map.put("conferenceNoticeId", conferenceNoticeId); + return map; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbConfigServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..5f3c90633ffb787a3ba6528523f96c8d354f3b29 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbConfigServiceImpl.java @@ -0,0 +1,109 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbConfig; +import com.ruoyi.hezhi.mapper.TbConfigMapper; +import com.ruoyi.hezhi.service.ITbConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * 鐩稿叧璁剧疆Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-10-22 + */ +@Service +public class TbConfigServiceImpl implements ITbConfigService +{ + @Autowired + private TbConfigMapper tbConfigMapper; + + /** + * 鏌ヨ鐩稿叧璁剧疆 + * + * @param configId 鐩稿叧璁剧疆涓婚敭 + * @return 鐩稿叧璁剧疆 + */ + @Override + public TbConfig selectTbConfigByConfigId(Long configId) + { + return tbConfigMapper.selectTbConfigByConfigId(configId); + } + + /** + * 鏌ヨ鐩稿叧璁剧疆鍒楄〃 + * + * @param tbConfig 鐩稿叧璁剧疆 + * @return 鐩稿叧璁剧疆 + */ + @Override + public List selectTbConfigList(TbConfig tbConfig) + { + return tbConfigMapper.selectTbConfigList(tbConfig); + } + + /** + * 鏂板鐩稿叧璁剧疆 + * + * @param tbConfig 鐩稿叧璁剧疆 + * @return 缁撴灉 + */ + @Override + public int insertTbConfig(TbConfig tbConfig) + { + tbConfig.setCreateTime(DateUtils.getNowDate()); + return tbConfigMapper.insertTbConfig(tbConfig); + } + + /** + * 淇敼鐩稿叧璁剧疆 + * + * @param tbConfig 鐩稿叧璁剧疆 + * @return 缁撴灉 + */ + @Override + public int updateTbConfig(TbConfig tbConfig) + { + tbConfig.setUpdateTime(DateUtils.getNowDate()); + return tbConfigMapper.updateTbConfig(tbConfig); + } + + /** + * 鎵归噺鍒犻櫎鐩稿叧璁剧疆 + * + * @param configIds 闇瑕佸垹闄ょ殑鐩稿叧璁剧疆涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbConfigByConfigIds(Long[] configIds) + { + return tbConfigMapper.deleteTbConfigByConfigIds(configIds); + } + + /** + * 鍒犻櫎鐩稿叧璁剧疆淇℃伅 + * + * @param configId 鐩稿叧璁剧疆涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbConfigByConfigId(Long configId) + { + return tbConfigMapper.deleteTbConfigByConfigId(configId); + } + + /** + * 鐩稿叧璁剧疆 + * + * @param params 鍙傛暟 + * @return 鐩稿叧璁剧疆璇︽儏 + */ + @Override + public Map getLiveBroadcastInfo(Map params) { + return tbConfigMapper.getLiveBroadcastInfo(params); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbContinuingEducationClassServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbContinuingEducationClassServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..0473ffb1a8ad565923acd66e8cb9979805d47d86 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbContinuingEducationClassServiceImpl.java @@ -0,0 +1,131 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbContinuingEducationClass; +import com.ruoyi.hezhi.mapper.TbContinuingEducationClassMapper; +import com.ruoyi.hezhi.service.ITbContinuingEducationClassService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * 缁х画鏁欒偛鍒嗙被Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-10-23 + */ +@Service +public class TbContinuingEducationClassServiceImpl implements ITbContinuingEducationClassService +{ + @Autowired + private TbContinuingEducationClassMapper tbContinuingEducationClassMapper; + + /** + * 鏌ヨ缁х画鏁欒偛鍒嗙被 + * + * @param continuingEducationClassId 缁х画鏁欒偛鍒嗙被涓婚敭 + * @return 缁х画鏁欒偛鍒嗙被 + */ + @Override + public TbContinuingEducationClass selectTbContinuingEducationClassByContinuingEducationClassId(Long continuingEducationClassId) + { + return tbContinuingEducationClassMapper.selectTbContinuingEducationClassByContinuingEducationClassId(continuingEducationClassId); + } + + /** + * 鏌ヨ缁х画鏁欒偛鍒嗙被鍒楄〃 + * + * @param tbContinuingEducationClass 缁х画鏁欒偛鍒嗙被 + * @return 缁х画鏁欒偛鍒嗙被 + */ + @Override + public List selectTbContinuingEducationClassList(TbContinuingEducationClass tbContinuingEducationClass) + { + return tbContinuingEducationClassMapper.selectTbContinuingEducationClassList(tbContinuingEducationClass); + } + + /** + * 鏌ヨ缁х画鏁欒偛鍒嗙被鍒楄〃 + * + * @return 缁х画鏁欒偛鍒嗙被 + */ + @Override + public List getAllContinuingEducationClassList() + { + return tbContinuingEducationClassMapper.getAllContinuingEducationClassList(); + } + + /** + * 鏂板缁х画鏁欒偛鍒嗙被 + * + * @param tbContinuingEducationClass 缁х画鏁欒偛鍒嗙被 + * @return 缁撴灉 + */ + @Override + public int insertTbContinuingEducationClass(TbContinuingEducationClass tbContinuingEducationClass) + { + tbContinuingEducationClass.setCreateTime(DateUtils.getNowDate()); + return tbContinuingEducationClassMapper.insertTbContinuingEducationClass(tbContinuingEducationClass); + } + + /** + * 淇敼缁х画鏁欒偛鍒嗙被 + * + * @param tbContinuingEducationClass 缁х画鏁欒偛鍒嗙被 + * @return 缁撴灉 + */ + @Override + public int updateTbContinuingEducationClass(TbContinuingEducationClass tbContinuingEducationClass) + { + tbContinuingEducationClass.setUpdateTime(DateUtils.getNowDate()); + return tbContinuingEducationClassMapper.updateTbContinuingEducationClass(tbContinuingEducationClass); + } + + /** + * 鎵归噺鍒犻櫎缁х画鏁欒偛鍒嗙被 + * + * @param continuingEducationClassIds 闇瑕佸垹闄ょ殑缁х画鏁欒偛鍒嗙被涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbContinuingEducationClassByContinuingEducationClassIds(Long[] continuingEducationClassIds) + { + return tbContinuingEducationClassMapper.deleteTbContinuingEducationClassByContinuingEducationClassIds(continuingEducationClassIds); + } + + /** + * 鍒犻櫎缁х画鏁欒偛鍒嗙被淇℃伅 + * + * @param continuingEducationClassId 缁х画鏁欒偛鍒嗙被涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbContinuingEducationClassByContinuingEducationClassId(Long continuingEducationClassId) + { + return tbContinuingEducationClassMapper.deleteTbContinuingEducationClassByContinuingEducationClassId(continuingEducationClassId); + } + + /** + * 缁х画鏁欒偛鍒嗙被鍒楄〃 + * + * @param params 鍙傛暟 + * @return 缁х画鏁欒偛鍒嗙被鍒楄〃 + */ + @Override + public List> getContinuingEducationClassMapList(Map params) { + return tbContinuingEducationClassMapper.getContinuingEducationClassMapList(params); + } + + /** + * 缁х画鏁欒偛鍒楄〃 + * + * @param params 鍙傛暟 + * @return 缁х画鏁欒偛鍒楄〃 + */ + @Override + public List> getContinuingEducationList(Map params) { + return tbContinuingEducationClassMapper.getContinuingEducationList(params); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbCooperatePartnerServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbCooperatePartnerServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..5a0e1376253dec285e5c58e0163bf6e69f068f1e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbCooperatePartnerServiceImpl.java @@ -0,0 +1,109 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbCooperatePartner; +import com.ruoyi.hezhi.mapper.TbCooperatePartnerMapper; +import com.ruoyi.hezhi.service.ITbCooperatePartnerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * 鍚堜綔浼欎即Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-10-16 + */ +@Service +public class TbCooperatePartnerServiceImpl implements ITbCooperatePartnerService +{ + @Autowired + private TbCooperatePartnerMapper tbCooperatePartnerMapper; + + /** + * 鏌ヨ鍚堜綔浼欎即 + * + * @param cooperatePartnerId 鍚堜綔浼欎即涓婚敭 + * @return 鍚堜綔浼欎即 + */ + @Override + public TbCooperatePartner selectTbCooperatePartnerByCooperatePartnerId(Long cooperatePartnerId) + { + return tbCooperatePartnerMapper.selectTbCooperatePartnerByCooperatePartnerId(cooperatePartnerId); + } + + /** + * 鏌ヨ鍚堜綔浼欎即鍒楄〃 + * + * @param tbCooperatePartner 鍚堜綔浼欎即 + * @return 鍚堜綔浼欎即 + */ + @Override + public List selectTbCooperatePartnerList(TbCooperatePartner tbCooperatePartner) + { + return tbCooperatePartnerMapper.selectTbCooperatePartnerList(tbCooperatePartner); + } + + /** + * 鏂板鍚堜綔浼欎即 + * + * @param tbCooperatePartner 鍚堜綔浼欎即 + * @return 缁撴灉 + */ + @Override + public int insertTbCooperatePartner(TbCooperatePartner tbCooperatePartner) + { + tbCooperatePartner.setCreateTime(DateUtils.getNowDate()); + return tbCooperatePartnerMapper.insertTbCooperatePartner(tbCooperatePartner); + } + + /** + * 淇敼鍚堜綔浼欎即 + * + * @param tbCooperatePartner 鍚堜綔浼欎即 + * @return 缁撴灉 + */ + @Override + public int updateTbCooperatePartner(TbCooperatePartner tbCooperatePartner) + { + tbCooperatePartner.setUpdateTime(DateUtils.getNowDate()); + return tbCooperatePartnerMapper.updateTbCooperatePartner(tbCooperatePartner); + } + + /** + * 鎵归噺鍒犻櫎鍚堜綔浼欎即 + * + * @param cooperatePartnerIds 闇瑕佸垹闄ょ殑鍚堜綔浼欎即涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbCooperatePartnerByCooperatePartnerIds(Long[] cooperatePartnerIds) + { + return tbCooperatePartnerMapper.deleteTbCooperatePartnerByCooperatePartnerIds(cooperatePartnerIds); + } + + /** + * 鍒犻櫎鍚堜綔浼欎即淇℃伅 + * + * @param cooperatePartnerId 鍚堜綔浼欎即涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbCooperatePartnerByCooperatePartnerId(Long cooperatePartnerId) + { + return tbCooperatePartnerMapper.deleteTbCooperatePartnerByCooperatePartnerId(cooperatePartnerId); + } + + /** + * 鍚堜綔浼欎即鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鍚堜綔浼欎即鍒楄〃 + */ + @Override + public List> getCooperatePartnerList(Map params) { + return tbCooperatePartnerMapper.getCooperatePartnerList(params); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbCourseChapterServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbCourseChapterServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..76fbd520b5bc408be2762d9121e722a55b5f40bf --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbCourseChapterServiceImpl.java @@ -0,0 +1,138 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbCourseChapter; +import com.ruoyi.hezhi.mapper.TbCourseChapterMapper; +import com.ruoyi.hezhi.service.ITbCourseChapterService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * 璇剧▼绔犺妭Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-09-14 + */ +@Service +public class TbCourseChapterServiceImpl implements ITbCourseChapterService +{ + @Autowired + private TbCourseChapterMapper tbCourseChapterMapper; + + /** + * 鏌ヨ璇剧▼绔犺妭 + * + * @param chapterId 璇剧▼绔犺妭涓婚敭 + * @return 璇剧▼绔犺妭 + */ + @Override + public TbCourseChapter selectTbCourseChapterByChapterId(Long chapterId) + { + return tbCourseChapterMapper.selectTbCourseChapterByChapterId(chapterId); + } + + /** + * 鏌ヨ璇剧▼绔犺妭鍒楄〃 + * + * @param tbCourseChapter 璇剧▼绔犺妭 + * @return 璇剧▼绔犺妭 + */ + @Override + public List selectTbCourseChapterList(TbCourseChapter tbCourseChapter) + { + return tbCourseChapterMapper.selectTbCourseChapterList(tbCourseChapter); + } + + /** + * 鏂板璇剧▼绔犺妭 + * + * @param tbCourseChapter 璇剧▼绔犺妭 + * @return 缁撴灉 + */ + @Override + public int insertTbCourseChapter(TbCourseChapter tbCourseChapter) + { + tbCourseChapter.setCreateTime(DateUtils.getNowDate()); + return tbCourseChapterMapper.insertTbCourseChapter(tbCourseChapter); + } + + /** + * 淇敼璇剧▼绔犺妭 + * + * @param tbCourseChapter 璇剧▼绔犺妭 + * @return 缁撴灉 + */ + @Override + public int updateTbCourseChapter(TbCourseChapter tbCourseChapter) + { + tbCourseChapter.setUpdateTime(DateUtils.getNowDate()); + return tbCourseChapterMapper.updateTbCourseChapter(tbCourseChapter); + } + + /** + * 鎵归噺鍒犻櫎璇剧▼绔犺妭 + * + * @param chapterIds 闇瑕佸垹闄ょ殑璇剧▼绔犺妭涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbCourseChapterByChapterIds(Long[] chapterIds) + { + return tbCourseChapterMapper.deleteTbCourseChapterByChapterIds(chapterIds); + } + + /** + * 鍒犻櫎璇剧▼绔犺妭淇℃伅 + * + * @param chapterId 璇剧▼绔犺妭涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbCourseChapterByChapterId(Long chapterId) + { + return tbCourseChapterMapper.deleteTbCourseChapterByChapterId(chapterId); + } + + /** + * 鏌ヨ璇剧▼绔犺妭鏍戝垪琛 + * + * @param courseId 璇剧▼ID + * @return 璇剧▼绔犺妭闆嗗悎 + */ + @Override + public List getCourseChapterTreeList(Long courseId) { + TbCourseChapter tbCourseChapter = new TbCourseChapter(); + tbCourseChapter.setCourseId(courseId); + tbCourseChapter.setStatus(0); + tbCourseChapter.setDelFlag(0); + List list = tbCourseChapterMapper.selectTbCourseChapterList(tbCourseChapter); + return this.toTree(list,0L); + } + + /** + * 鏂瑰紡涓锛氫娇鐢ㄤ袱灞傚惊鐜疄鐜 + * @param treeList + * @return + */ + @Override + public List toTree(List treeList, Long pid) { + List retList = new ArrayList(); + for (TbCourseChapter parent : treeList) { + if (pid.equals(parent.getPid())) { + retList.add(parent); + } + for (TbCourseChapter child : treeList) { + if (child.getPid().equals(parent.getChapterId())) { + if (parent.getChildrens() == null) { + parent.setChildrens(new ArrayList()); + } + parent.getChildrens().add(child); + } + } + } + return retList; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbCourseEvaluateServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbCourseEvaluateServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..72f109e0b7adb6abcd3e20917f931ff3e9ba5f26 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbCourseEvaluateServiceImpl.java @@ -0,0 +1,141 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.hezhi.domain.TbCourseEvaluate; +import com.ruoyi.hezhi.domain.dto.CourseEvaluateDTO; +import com.ruoyi.hezhi.mapper.TbCourseEvaluateMapper; +import com.ruoyi.hezhi.service.ITbCourseEvaluateService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * 璇剧▼璇勪环Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-09-14 + */ +@Service +public class TbCourseEvaluateServiceImpl implements ITbCourseEvaluateService +{ + @Autowired + private TbCourseEvaluateMapper tbCourseEvaluateMapper; + + /** + * 鏌ヨ璇剧▼璇勪环 + * + * @param courseEvaluateId 璇剧▼璇勪环涓婚敭 + * @return 璇剧▼璇勪环 + */ + @Override + public TbCourseEvaluate selectTbCourseEvaluateByCourseEvaluateId(Long courseEvaluateId) + { + return tbCourseEvaluateMapper.selectTbCourseEvaluateByCourseEvaluateId(courseEvaluateId); + } + + /** + * 鏌ヨ璇剧▼璇勪环鍒楄〃 + * + * @param tbCourseEvaluate 璇剧▼璇勪环 + * @return 璇剧▼璇勪环 + */ + @Override + public List selectTbCourseEvaluateList(TbCourseEvaluate tbCourseEvaluate) + { + return tbCourseEvaluateMapper.selectTbCourseEvaluateList(tbCourseEvaluate); + } + + /** + * 鏂板璇剧▼璇勪环 + * + * @param tbCourseEvaluate 璇剧▼璇勪环 + * @return 缁撴灉 + */ + @Override + public int insertTbCourseEvaluate(TbCourseEvaluate tbCourseEvaluate) + { + tbCourseEvaluate.setCreateTime(DateUtils.getNowDate()); + return tbCourseEvaluateMapper.insertTbCourseEvaluate(tbCourseEvaluate); + } + + /** + * 淇敼璇剧▼璇勪环 + * + * @param tbCourseEvaluate 璇剧▼璇勪环 + * @return 缁撴灉 + */ + @Override + public int updateTbCourseEvaluate(TbCourseEvaluate tbCourseEvaluate) + { + tbCourseEvaluate.setUpdateTime(DateUtils.getNowDate()); + return tbCourseEvaluateMapper.updateTbCourseEvaluate(tbCourseEvaluate); + } + + /** + * 鎵归噺鍒犻櫎璇剧▼璇勪环 + * + * @param courseEvaluateIds 闇瑕佸垹闄ょ殑璇剧▼璇勪环涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbCourseEvaluateByCourseEvaluateIds(Long[] courseEvaluateIds) + { + return tbCourseEvaluateMapper.deleteTbCourseEvaluateByCourseEvaluateIds(courseEvaluateIds); + } + + /** + * 鍒犻櫎璇剧▼璇勪环淇℃伅 + * + * @param courseEvaluateId 璇剧▼璇勪环涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbCourseEvaluateByCourseEvaluateId(Long courseEvaluateId) + { + return tbCourseEvaluateMapper.deleteTbCourseEvaluateByCourseEvaluateId(courseEvaluateId); + } + + /** + * 鏌ヨ璇剧▼璇勪环鍒楄〃 + * + * @param params 鍙傛暟 + * @return ok + */ + @Override + public List> getCourseEvaluateList(Map params) { + return tbCourseEvaluateMapper.getCourseEvaluateList(params); + } + + /** + * 鏌ヨ璇剧▼璇勪环璇勫垎 + * + * @param params 鍙傛暟 + * @return ok + */ + @Override + public Map getCourseEvaluateScore(Map params) { + return tbCourseEvaluateMapper.getCourseEvaluateScore(params); + } + + /** + * 鎻愪氦璇勪环 + * + * @param courseEvaluateDTO + * @return ok + */ + @Override + public AjaxResult submitEvaluation(CourseEvaluateDTO courseEvaluateDTO) { + TbCourseEvaluate courseEvaluate = new TbCourseEvaluate(); + courseEvaluate.setCourseId(courseEvaluateDTO.getCourseId()); + courseEvaluate.setStudentName("瀛﹀憳_" + IdUtils.fastSimpleUUID().substring(1,8)); + courseEvaluate.setEvaluateStar(courseEvaluateDTO.getEvaluateStar()); + courseEvaluate.setEvaluateContent(courseEvaluateDTO.getEvaluateContent()); + courseEvaluate.setCreateTime(DateUtils.getNowDate()); + tbCourseEvaluateMapper.insertTbCourseEvaluate(courseEvaluate); + return AjaxResult.success(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbCourseServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbCourseServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..2d6765d0ed730784895ee05e1b04917f26cd6834 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbCourseServiceImpl.java @@ -0,0 +1,331 @@ +package com.ruoyi.hezhi.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.enums.ServiceResponseEnum; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.hezhi.domain.TbCourse; +import com.ruoyi.hezhi.domain.TbSubjectWarehouseClass; +import com.ruoyi.hezhi.domain.dto.CourseDTO; +import com.ruoyi.hezhi.domain.dto.DelHistoricalRecordsDTO; +import com.ruoyi.hezhi.mapper.TbCourseChapterMapper; +import com.ruoyi.hezhi.mapper.TbCourseMapper; +import com.ruoyi.hezhi.mapper.TbTeacherCourseMapper; +import com.ruoyi.hezhi.service.ITbCourseService; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 璇剧▼Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-09-14 + */ +@Service +public class TbCourseServiceImpl implements ITbCourseService +{ + @Autowired + private TbCourseMapper tbCourseMapper; + @Autowired + private TbTeacherCourseMapper tbTeacherCourseMapper; + @Autowired + private TbCourseChapterMapper tbCourseChapterMapper; + @Resource + private RedisCache redisCache; + @Resource + private ThreadPoolTaskExecutor threadPoolTaskExecutor; + + /** + * 鏌ヨ璇剧▼ + * + * @param courseId 璇剧▼涓婚敭 + * @return 璇剧▼ + */ + @Override + public TbCourse selectTbCourseByCourseId(Long courseId) + { + return tbCourseMapper.selectTbCourseByCourseId(courseId); + } + + /** + * 鏌ヨ璇剧▼鍒楄〃 + * + * @param tbCourse 璇剧▼ + * @return 璇剧▼ + */ + @Override + public List selectTbCourseList(TbCourse tbCourse) + { + // 鏈烘瀯ID + if (SecurityUtils.hasRole("evaluateAgency") && !SecurityUtils.isAdmin(SecurityUtils.getUserId())){ + tbCourse.setEvaluateAgencyId(SecurityUtils.getEvaluateAgencyId()); + } + return tbCourseMapper.selectTbCourseList(tbCourse); + } + + /** + * 鏌ヨ璇剧▼鍒楄〃 + * + * @return 璇剧▼ + */ + @Override + public List getAllCourseList() + { + return tbCourseMapper.getAllCourseList(); + } + + /** + * 鏂板璇剧▼ + * + * @param tbCourse 璇剧▼ + * @return 缁撴灉 + */ + @Override + public int insertTbCourse(TbCourse tbCourse) + { + // 鏈烘瀯ID + if (SecurityUtils.hasRole("evaluateAgency") && !SecurityUtils.isAdmin(SecurityUtils.getUserId())){ + tbCourse.setEvaluateAgencyId(SecurityUtils.getEvaluateAgencyId()); + } + //璇剧▼鍚嶄笉鑳介噸澶 + TbCourse tbCourse1 = tbCourseMapper.selectTbCourseByNameAndEva(tbCourse.getCourseName(),tbCourse.getEvaluateAgencyId()); + if (tbCourse1 != null){ + throw new ServiceException("鍚屼竴鏈烘瀯涓嬭绋嬪悕涓嶈兘閲嶅"); + } + tbCourse.setCreateTime(DateUtils.getNowDate()); + return tbCourseMapper.insertTbCourse(tbCourse); + } + + /** + * 淇敼璇剧▼ + * + * @param tbCourse 璇剧▼ + * @return 缁撴灉 + */ + @Override + public int updateTbCourse(TbCourse tbCourse) + { + // 鏈烘瀯ID + if (SecurityUtils.hasRole("evaluateAgency") && !SecurityUtils.isAdmin(SecurityUtils.getUserId())){ + Long evaluateAgencyId = SecurityUtils.getEvaluateAgencyId(); + TbCourse oldCourse = tbCourseMapper.selectTbCourseByCourseId(tbCourse.getCourseId()); + if (oldCourse.getEvaluateAgencyId() == null || !oldCourse.getEvaluateAgencyId().equals(evaluateAgencyId)){ + throw new ServiceException(ServiceResponseEnum.NO_AUTH_OPERATION); + } + tbCourse.setEvaluateAgencyId(evaluateAgencyId); + } + tbCourse.setUpdateTime(DateUtils.getNowDate()); + return tbCourseMapper.updateTbCourse(tbCourse); + } + + /** + * 鎵归噺鍒犻櫎璇剧▼ + * + * @param courseIds 闇瑕佸垹闄ょ殑璇剧▼涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbCourseByCourseIds(Long[] courseIds) + { + return tbCourseMapper.deleteTbCourseByCourseIds(courseIds); + } + + /** + * 鍒犻櫎璇剧▼淇℃伅 + * + * @param courseId 璇剧▼涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbCourseByCourseId(Long courseId) + { + return tbCourseMapper.deleteTbCourseByCourseId(courseId); + } + + /** + * 鏌ヨ璇剧▼鍒楄〃 + * + * @param params 鍙傛暟 + * @return ok + */ + @Override + public List> getCourseList(Map params) { + return tbCourseMapper.getCourseList(params); + } + + /** + * 鏌ヨ璇剧▼璇︽儏 + * + * @param params 鍙傛暟 + * @return ok + */ + @Override + public Map getCourseInfo(Map params) { + Map courseInfo = tbCourseMapper.getCourseInfo(params); + if (!courseInfo.isEmpty()) { + // 涓昏鑰佸笀 + courseInfo.put("teacherList", tbTeacherCourseMapper.getTeacherList(params)); + // 瑙嗛鍒楄〃 + List> chapterList = tbCourseChapterMapper.getCourseChapterList(params); + courseInfo.put("videoList", chapterList); + if(chapterList.size() > 0) { + courseInfo.put("chapterUrl", chapterList.get(0).get("chapterUrl").toString()); + } else { + courseInfo.put("chapterUrl", ""); + } + } + return courseInfo; + } + + /** + * 绔嬪嵆鍙傚姞 + * + * @param courseDTO + * @return ok + */ + @Override + public AjaxResult joinNow(CourseDTO courseDTO) { + TbCourse tbCourse = tbCourseMapper.selectTbCourseByCourseId(courseDTO.getCourseId()); + if (tbCourse != null) { + TbCourse updateCourse = new TbCourse(); + updateCourse.setCourseId(courseDTO.getCourseId()); + updateCourse.setParticipateNum(tbCourse.getParticipateNum() + 1); + tbCourseMapper.updateTbCourse(updateCourse); + } + return AjaxResult.success(); + } + + /** + * 娴忚閲+1 + * + * @param courseId 璇剧▼涓婚敭 + * @return 缁撴灉 + */ + @Override + public int addViewsNum(Long courseId) { + return tbCourseMapper.addViewsNum(courseId); + } + + @Override + public PageInfo> getCourseNameListForInput(Integer pageNum, Integer pageSize, String searchValue,Long memberUserId){ + PageHelper.startPage(pageNum, pageSize); + if (StringUtils.isNotNull(memberUserId)&&StringUtils.isNotEmpty(searchValue)){ + threadPoolTaskExecutor.execute(() -> { + //澶勭悊鍘嗗彶璁板綍 + processHistoricalRecords(memberUserId,searchValue); + }); + } + List> courseNameListForInput = tbCourseMapper.getCourseNameListForInput(searchValue); + return new PageInfo<>(courseNameListForInput); + } + + /** + * 澶勭悊鎼滅储璁板綍 + * @param memberUserId 鐢ㄦ埛id + * @param searchValue 鎼滅储鍊 + */ + private void processHistoricalRecords(Long memberUserId, String searchValue) { + Boolean b = redisCache.hasKey(CacheConstants.COURSE_SEARCH_HISTORY_KEY + memberUserId); + if (b){ + //淇濆瓨鍘嗗彶鎼滅储璁板綍 + List searchHistoryList = redisCache.getCacheObject(CacheConstants.COURSE_SEARCH_HISTORY_KEY + memberUserId); + searchHistoryList.add(searchValue); + redisCache.setCacheObject(CacheConstants.COURSE_SEARCH_HISTORY_KEY + memberUserId, searchHistoryList); + }else { + List searchHistoryList = new ArrayList<>(); + searchHistoryList.add(searchValue); + redisCache.setCacheObject(CacheConstants.COURSE_SEARCH_HISTORY_KEY + memberUserId, searchHistoryList); + } + //鐑悳 + Boolean a = redisCache.hasKey(CacheConstants.COURSE_HOT_SEARCH_KEY); + if (a){ + //淇濆瓨鍘嗗彶鎼滅储璁板綍 + List searchHistoryList = redisCache.getCacheObject(CacheConstants.COURSE_HOT_SEARCH_KEY); + searchHistoryList.add(searchValue); + redisCache.setCacheObject(CacheConstants.COURSE_HOT_SEARCH_KEY, searchHistoryList); + }else { + List searchHistoryList = new ArrayList<>(); + searchHistoryList.add(searchValue); + redisCache.setCacheObject(CacheConstants.COURSE_HOT_SEARCH_KEY, searchHistoryList); + } + } + + /** + * 鑾峰彇鎼滅储璁板綍 + * @return + */ + public List getHotSearch(Integer size) { + if (StringUtils.isNull(size)){ + size=10; + } + Boolean b = redisCache.hasKey(CacheConstants.COURSE_HOT_SEARCH_KEY); + if (!b) { + return new ArrayList<>(); + } + List searchHistoryList = redisCache.getCacheObject(CacheConstants.COURSE_HOT_SEARCH_KEY); + // 璁$畻姣忎釜瀛楃涓茬殑鍑虹幇娆℃暟 + Map frequencyMap = searchHistoryList.stream() + .collect(Collectors.groupingBy(s -> s, Collectors.counting())); + // 鏍规嵁鍑虹幇娆℃暟浠庨珮鍒颁綆鎺掑簭锛屽幓閲嶅悗杈撳嚭鎸夋鏁版帓搴忕殑瀛楃涓 + List sortedList = frequencyMap.entrySet().stream() + .sorted((entry1, entry2) -> entry2.getValue().compareTo(entry1.getValue())) // 鎸夋鏁伴檷搴忔帓搴 + .map(Map.Entry::getKey) // 鎻愬彇瀛楃涓查儴鍒嗭紝鍘绘帀璁℃暟鍊 + .collect(Collectors.toList()); + if (sortedList.size() > size) { + sortedList = sortedList.subList(0, size); + } + return sortedList; + } + + /** + * 鎼滅储鍘嗗彶璁板綍 + * @param memberUserId 鐢ㄦ埛id + * @param size 鏁伴噺 + * @return + */ + public List getHistoricalRecords(Long memberUserId, Integer size) { + if (StringUtils.isNull(size)){ + size=10; + } + Boolean b = redisCache.hasKey(CacheConstants.COURSE_SEARCH_HISTORY_KEY + memberUserId); + if (!b){ + return new ArrayList<>(); + } + List searchHistoryList = redisCache.getCacheObject(CacheConstants.COURSE_SEARCH_HISTORY_KEY + memberUserId); + Collections.reverse(searchHistoryList); + searchHistoryList=searchHistoryList.stream().distinct().collect(Collectors.toList()); + if (searchHistoryList.size() > size) { + searchHistoryList = searchHistoryList.subList(0, size); + } + return searchHistoryList; + } + + /** + * 鍒犻櫎鍘嗗彶璁板綍 + * @param dto + * @return + */ + public int delHistoricalRecords(DelHistoricalRecordsDTO dto) { + Boolean b = redisCache.hasKey(CacheConstants.COURSE_SEARCH_HISTORY_KEY + dto.getMemberUserId()); + if (!b){ + return 1; + } + redisCache.deleteObject(CacheConstants.COURSE_SEARCH_HISTORY_KEY + dto.getMemberUserId()); + return 1; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbDownloadServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbDownloadServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..8445dcf44f0b6ab3e306092267b140efd5a907d9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbDownloadServiceImpl.java @@ -0,0 +1,109 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbDownload; +import com.ruoyi.hezhi.mapper.TbDownloadMapper; +import com.ruoyi.hezhi.service.ITbDownloadService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * 鍦ㄧ嚎涓嬭浇Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-10-30 + */ +@Service +public class TbDownloadServiceImpl implements ITbDownloadService +{ + @Autowired + private TbDownloadMapper tbDownloadMapper; + + /** + * 鏌ヨ鍦ㄧ嚎涓嬭浇 + * + * @param downloadId 鍦ㄧ嚎涓嬭浇涓婚敭 + * @return 鍦ㄧ嚎涓嬭浇 + */ + @Override + public TbDownload selectTbDownloadByDownloadId(Long downloadId) + { + return tbDownloadMapper.selectTbDownloadByDownloadId(downloadId); + } + + /** + * 鏌ヨ鍦ㄧ嚎涓嬭浇鍒楄〃 + * + * @param tbDownload 鍦ㄧ嚎涓嬭浇 + * @return 鍦ㄧ嚎涓嬭浇 + */ + @Override + public List selectTbDownloadList(TbDownload tbDownload) + { + return tbDownloadMapper.selectTbDownloadList(tbDownload); + } + + /** + * 鏂板鍦ㄧ嚎涓嬭浇 + * + * @param tbDownload 鍦ㄧ嚎涓嬭浇 + * @return 缁撴灉 + */ + @Override + public int insertTbDownload(TbDownload tbDownload) + { + tbDownload.setCreateTime(DateUtils.getNowDate()); + return tbDownloadMapper.insertTbDownload(tbDownload); + } + + /** + * 淇敼鍦ㄧ嚎涓嬭浇 + * + * @param tbDownload 鍦ㄧ嚎涓嬭浇 + * @return 缁撴灉 + */ + @Override + public int updateTbDownload(TbDownload tbDownload) + { + tbDownload.setUpdateTime(DateUtils.getNowDate()); + return tbDownloadMapper.updateTbDownload(tbDownload); + } + + /** + * 鎵归噺鍒犻櫎鍦ㄧ嚎涓嬭浇 + * + * @param downloadIds 闇瑕佸垹闄ょ殑鍦ㄧ嚎涓嬭浇涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbDownloadByDownloadIds(Long[] downloadIds) + { + return tbDownloadMapper.deleteTbDownloadByDownloadIds(downloadIds); + } + + /** + * 鍒犻櫎鍦ㄧ嚎涓嬭浇淇℃伅 + * + * @param downloadId 鍦ㄧ嚎涓嬭浇涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbDownloadByDownloadId(Long downloadId) + { + return tbDownloadMapper.deleteTbDownloadByDownloadId(downloadId); + } + + /** + * 鍦ㄧ嚎涓嬭浇鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鍦ㄧ嚎涓嬭浇鍒楄〃鍒楄〃 + */ + @Override + public List> getDownloadList(Map params) { + return tbDownloadMapper.getDownloadList(params); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbEnterpriseProgressServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbEnterpriseProgressServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..280a1c9ba4641d1480ae9defe8be193f4078d439 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbEnterpriseProgressServiceImpl.java @@ -0,0 +1,108 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbEnterpriseProgress; +import com.ruoyi.hezhi.mapper.TbEnterpriseProgressMapper; +import com.ruoyi.hezhi.service.ITbEnterpriseProgressService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * 浼佷笟鍘嗙▼Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-11-21 + */ +@Service +public class TbEnterpriseProgressServiceImpl implements ITbEnterpriseProgressService +{ + @Autowired + private TbEnterpriseProgressMapper tbEnterpriseProgressMapper; + + /** + * 鏌ヨ浼佷笟鍘嗙▼ + * + * @param enterpriseProgressId 浼佷笟鍘嗙▼涓婚敭 + * @return 浼佷笟鍘嗙▼ + */ + @Override + public TbEnterpriseProgress selectTbEnterpriseProgressByEnterpriseProgressId(Long enterpriseProgressId) + { + return tbEnterpriseProgressMapper.selectTbEnterpriseProgressByEnterpriseProgressId(enterpriseProgressId); + } + + /** + * 鏌ヨ浼佷笟鍘嗙▼鍒楄〃 + * + * @param tbEnterpriseProgress 浼佷笟鍘嗙▼ + * @return 浼佷笟鍘嗙▼ + */ + @Override + public List selectTbEnterpriseProgressList(TbEnterpriseProgress tbEnterpriseProgress) + { + return tbEnterpriseProgressMapper.selectTbEnterpriseProgressList(tbEnterpriseProgress); + } + + /** + * 鏂板浼佷笟鍘嗙▼ + * + * @param tbEnterpriseProgress 浼佷笟鍘嗙▼ + * @return 缁撴灉 + */ + @Override + public int insertTbEnterpriseProgress(TbEnterpriseProgress tbEnterpriseProgress) + { + tbEnterpriseProgress.setCreateTime(DateUtils.getNowDate()); + return tbEnterpriseProgressMapper.insertTbEnterpriseProgress(tbEnterpriseProgress); + } + + /** + * 淇敼浼佷笟鍘嗙▼ + * + * @param tbEnterpriseProgress 浼佷笟鍘嗙▼ + * @return 缁撴灉 + */ + @Override + public int updateTbEnterpriseProgress(TbEnterpriseProgress tbEnterpriseProgress) + { + tbEnterpriseProgress.setUpdateTime(DateUtils.getNowDate()); + return tbEnterpriseProgressMapper.updateTbEnterpriseProgress(tbEnterpriseProgress); + } + + /** + * 鎵归噺鍒犻櫎浼佷笟鍘嗙▼ + * + * @param enterpriseProgressIds 闇瑕佸垹闄ょ殑浼佷笟鍘嗙▼涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbEnterpriseProgressByEnterpriseProgressIds(Long[] enterpriseProgressIds) + { + return tbEnterpriseProgressMapper.deleteTbEnterpriseProgressByEnterpriseProgressIds(enterpriseProgressIds); + } + + /** + * 鍒犻櫎浼佷笟鍘嗙▼淇℃伅 + * + * @param enterpriseProgressId 浼佷笟鍘嗙▼涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbEnterpriseProgressByEnterpriseProgressId(Long enterpriseProgressId) + { + return tbEnterpriseProgressMapper.deleteTbEnterpriseProgressByEnterpriseProgressId(enterpriseProgressId); + } + + /** + * 浼佷笟鍘嗙▼鍒楄〃 + * + * @return 浼佷笟鍘嗙▼鍒楄〃 + */ + @Override + public List> getEnterpriseProgressList() { + return tbEnterpriseProgressMapper.getEnterpriseProgressList(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbEvaluateAgencyClassServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbEvaluateAgencyClassServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..cad8536e3f8fb4241e56c2f9494c278102f657a1 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbEvaluateAgencyClassServiceImpl.java @@ -0,0 +1,109 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbEvaluateAgencyClass; +import com.ruoyi.hezhi.mapper.TbEvaluateAgencyClassMapper; +import com.ruoyi.hezhi.service.ITbEvaluateAgencyClassService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * 璇勪环鏈烘瀯鍒嗙被Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-10-23 + */ +@Service +public class TbEvaluateAgencyClassServiceImpl implements ITbEvaluateAgencyClassService +{ + @Autowired + private TbEvaluateAgencyClassMapper tbEvaluateAgencyClassMapper; + + /** + * 鏌ヨ璇勪环鏈烘瀯鍒嗙被 + * + * @param evaluateAgencyClassId 璇勪环鏈烘瀯鍒嗙被涓婚敭 + * @return 璇勪环鏈烘瀯鍒嗙被 + */ + @Override + public TbEvaluateAgencyClass selectTbEvaluateAgencyClassByEvaluateAgencyClassId(Long evaluateAgencyClassId) + { + return tbEvaluateAgencyClassMapper.selectTbEvaluateAgencyClassByEvaluateAgencyClassId(evaluateAgencyClassId); + } + + /** + * 鏌ヨ璇勪环鏈烘瀯鍒嗙被鍒楄〃 + * + * @param tbEvaluateAgencyClass 璇勪环鏈烘瀯鍒嗙被 + * @return 璇勪环鏈烘瀯鍒嗙被 + */ + @Override + public List selectTbEvaluateAgencyClassList(TbEvaluateAgencyClass tbEvaluateAgencyClass) + { + return tbEvaluateAgencyClassMapper.selectTbEvaluateAgencyClassList(tbEvaluateAgencyClass); + } + + /** + * 鏂板璇勪环鏈烘瀯鍒嗙被 + * + * @param tbEvaluateAgencyClass 璇勪环鏈烘瀯鍒嗙被 + * @return 缁撴灉 + */ + @Override + public int insertTbEvaluateAgencyClass(TbEvaluateAgencyClass tbEvaluateAgencyClass) + { + tbEvaluateAgencyClass.setCreateTime(DateUtils.getNowDate()); + return tbEvaluateAgencyClassMapper.insertTbEvaluateAgencyClass(tbEvaluateAgencyClass); + } + + /** + * 淇敼璇勪环鏈烘瀯鍒嗙被 + * + * @param tbEvaluateAgencyClass 璇勪环鏈烘瀯鍒嗙被 + * @return 缁撴灉 + */ + @Override + public int updateTbEvaluateAgencyClass(TbEvaluateAgencyClass tbEvaluateAgencyClass) + { + tbEvaluateAgencyClass.setUpdateTime(DateUtils.getNowDate()); + return tbEvaluateAgencyClassMapper.updateTbEvaluateAgencyClass(tbEvaluateAgencyClass); + } + + /** + * 鎵归噺鍒犻櫎璇勪环鏈烘瀯鍒嗙被 + * + * @param evaluateAgencyClassIds 闇瑕佸垹闄ょ殑璇勪环鏈烘瀯鍒嗙被涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbEvaluateAgencyClassByEvaluateAgencyClassIds(Long[] evaluateAgencyClassIds) + { + return tbEvaluateAgencyClassMapper.deleteTbEvaluateAgencyClassByEvaluateAgencyClassIds(evaluateAgencyClassIds); + } + + /** + * 鍒犻櫎璇勪环鏈烘瀯鍒嗙被淇℃伅 + * + * @param evaluateAgencyClassId 璇勪环鏈烘瀯鍒嗙被涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbEvaluateAgencyClassByEvaluateAgencyClassId(Long evaluateAgencyClassId) + { + return tbEvaluateAgencyClassMapper.deleteTbEvaluateAgencyClassByEvaluateAgencyClassId(evaluateAgencyClassId); + } + + /** + * 璇勪环鏈烘瀯鍒嗙被鍒楄〃 + * + * @param params 鍙傛暟 + * @return 璇勪环鏈烘瀯鍒嗙被鍒楄〃 + */ + @Override + public List> getEvaluateAgencyClassMapList(Map params) { + return tbEvaluateAgencyClassMapper.getEvaluateAgencyClassMapList(params); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbEvaluateAgencyServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbEvaluateAgencyServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..2d5e89165a849e65829059e09854f1a05efdd9c6 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbEvaluateAgencyServiceImpl.java @@ -0,0 +1,158 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.enums.ServiceResponseEnum; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.hezhi.domain.TbEvaluateAgency; +import com.ruoyi.hezhi.domain.vo.EvaluateAgencyVO; +import com.ruoyi.hezhi.mapper.TbEvaluateAgencyMapper; +import com.ruoyi.hezhi.service.ITbEvaluateAgencyService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * 璇勪环鏈烘瀯Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-10-23 + */ +@Service +public class TbEvaluateAgencyServiceImpl implements ITbEvaluateAgencyService +{ + @Autowired + private TbEvaluateAgencyMapper tbEvaluateAgencyMapper; + + /** + * 鏌ヨ璇勪环鏈烘瀯 + * + * @param evaluateAgencyId 璇勪环鏈烘瀯涓婚敭 + * @return 璇勪环鏈烘瀯 + */ + @Override + public TbEvaluateAgency selectTbEvaluateAgencyByEvaluateAgencyId(Long evaluateAgencyId) + { + return tbEvaluateAgencyMapper.selectTbEvaluateAgencyByEvaluateAgencyId(evaluateAgencyId); + } + + /** + * 鏌ヨ璇勪环鏈烘瀯鍒楄〃 + * + * @param tbEvaluateAgency 璇勪环鏈烘瀯 + * @return 璇勪环鏈烘瀯 + */ + @Override + public List selectTbEvaluateAgencyList(TbEvaluateAgency tbEvaluateAgency) + { + // 鏈烘瀯ID + if (SecurityUtils.hasRole("evaluateAgency") && !SecurityUtils.isAdmin(SecurityUtils.getUserId())){ + tbEvaluateAgency.setEvaluateAgencyId(SecurityUtils.getEvaluateAgencyId()); + } + return tbEvaluateAgencyMapper.selectTbEvaluateAgencyList(tbEvaluateAgency); + } + + /** + * 鏂板璇勪环鏈烘瀯 + * + * @param tbEvaluateAgency 璇勪环鏈烘瀯 + * @return 缁撴灉 + */ + @Override + public int insertTbEvaluateAgency(TbEvaluateAgency tbEvaluateAgency) + { + tbEvaluateAgency.setEvaluateAgencyNumber(IdUtils.fastSimpleUUID()); + tbEvaluateAgency.setCreateTime(DateUtils.getNowDate()); + return tbEvaluateAgencyMapper.insertTbEvaluateAgency(tbEvaluateAgency); + } + + /** + * 淇敼璇勪环鏈烘瀯 + * + * @param tbEvaluateAgency 璇勪环鏈烘瀯 + * @return 缁撴灉 + */ + @Override + public int updateTbEvaluateAgency(TbEvaluateAgency tbEvaluateAgency) + { + tbEvaluateAgency.setUpdateTime(DateUtils.getNowDate()); + return tbEvaluateAgencyMapper.updateTbEvaluateAgency(tbEvaluateAgency); + } + + /** + * 鎵归噺鍒犻櫎璇勪环鏈烘瀯 + * + * @param evaluateAgencyIds 闇瑕佸垹闄ょ殑璇勪环鏈烘瀯涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbEvaluateAgencyByEvaluateAgencyIds(Long[] evaluateAgencyIds) + { + return tbEvaluateAgencyMapper.deleteTbEvaluateAgencyByEvaluateAgencyIds(evaluateAgencyIds); + } + + /** + * 鍒犻櫎璇勪环鏈烘瀯淇℃伅 + * + * @param evaluateAgencyId 璇勪环鏈烘瀯涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbEvaluateAgencyByEvaluateAgencyId(Long evaluateAgencyId) + { + return tbEvaluateAgencyMapper.deleteTbEvaluateAgencyByEvaluateAgencyId(evaluateAgencyId); + } + + /** + * 鑾峰彇绛涢夊垪琛 + * @return 缁撴灉 + */ + @Override + public List getSelectList(){ + return tbEvaluateAgencyMapper.getSelectList(); + } + + /** + * 璇勪环鏈烘瀯鍒楄〃 + * + * @param params 鍙傛暟 + * @return 璇勪环鏈烘瀯鍒楄〃 + */ + @Override + public List> getEvaluateAgencyList(Map params) { + return tbEvaluateAgencyMapper.getEvaluateAgencyList(params); + } + + /** + * 鑾峰彇鏈夋帹鑽愯绋嬬殑璇勪环鏈烘瀯鍒楄〃 + * @return 缁撴灉 + */ + @Override + public List> getEvaluateAgencyListHasCourse(Map params){ + return tbEvaluateAgencyMapper.getEvaluateAgencyListHasCourse(params); + } + + /** + * 璇勪环鏈烘瀯璇︽儏 + * + * @param params 鍙傛暟 + * @return 璇勪环鏈烘瀯璇︽儏 + */ + @Override + public Map getEvaluateAgencyInfo(Map params) { + return tbEvaluateAgencyMapper.getEvaluateAgencyInfo(params); + } + + /** + * 鏍规嵁璇剧▼绫诲瀷鑾峰彇鏈烘瀯鍒楄〃 + * @param classType 1-鑱屼笟鑰冭瘯锛2-鑱屼笟鎶鑳 + * @return 缁撴灉 + */ + @Override + public List> getEvaluateAgencyListByClassType(Integer classType){ + return tbEvaluateAgencyMapper.getEvaluateAgencyListByClassType(classType); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamBatchServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamBatchServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..c90bd781fa44c9df286bc9ced770e694e7534721 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamBatchServiceImpl.java @@ -0,0 +1,104 @@ +package com.ruoyi.hezhi.service.impl; + +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.ruoyi.hezhi.mapper.TbExamBatchMapper; +import com.ruoyi.hezhi.domain.TbExamBatch; +import com.ruoyi.hezhi.service.ITbExamBatchService; + +/** + * 鑰冭瘯鎵规Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-12-21 + */ +@Service +public class TbExamBatchServiceImpl implements ITbExamBatchService +{ + @Autowired + private TbExamBatchMapper tbExamBatchMapper; + + /** + * 鏌ヨ鑰冭瘯鎵规 + * + * @param examBatchId 鑰冭瘯鎵规涓婚敭 + * @return 鑰冭瘯鎵规 + */ + @Override + public TbExamBatch selectTbExamBatchByExamBatchId(Long examBatchId) + { + return tbExamBatchMapper.selectTbExamBatchByExamBatchId(examBatchId); + } + + /** + * 鏌ヨ鑰冭瘯鎵规鍒楄〃 + * + * @param tbExamBatch 鑰冭瘯鎵规 + * @return 鑰冭瘯鎵规 + */ + @Override + public List selectTbExamBatchList(TbExamBatch tbExamBatch) + { + return tbExamBatchMapper.selectTbExamBatchList(tbExamBatch); + } + + /** + * 鏂板鑰冭瘯鎵规 + * + * @param tbExamBatch 鑰冭瘯鎵规 + * @return 缁撴灉 + */ + @Override + public int insertTbExamBatch(TbExamBatch tbExamBatch) + { + return tbExamBatchMapper.insertTbExamBatch(tbExamBatch); + } + + /** + * 淇敼鑰冭瘯鎵规 + * + * @param tbExamBatch 鑰冭瘯鎵规 + * @return 缁撴灉 + */ + @Override + public int updateTbExamBatch(TbExamBatch tbExamBatch) + { + return tbExamBatchMapper.updateTbExamBatch(tbExamBatch); + } + + /** + * 鎵归噺鍒犻櫎鑰冭瘯鎵规 + * + * @param examBatchIds 闇瑕佸垹闄ょ殑鑰冭瘯鎵规涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbExamBatchByExamBatchIds(Long[] examBatchIds) + { + return tbExamBatchMapper.deleteTbExamBatchByExamBatchIds(examBatchIds); + } + + /** + * 鍒犻櫎鑰冭瘯鎵规淇℃伅 + * + * @param examBatchId 鑰冭瘯鎵规涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbExamBatchByExamBatchId(Long examBatchId) + { + return tbExamBatchMapper.deleteTbExamBatchByExamBatchId(examBatchId); + } + + /** + * 鏌ヨ鑰冭瘯鎵规 + * @param examId 鑰冭瘯ID + * @param batchIndex 鎵规搴忓彿 + * @return 缁撴灉 + */ + @Override + public TbExamBatch getByExamIdBatchIndex(Long examId, Integer batchIndex){ + return tbExamBatchMapper.getByExamIdBatchIndex(examId, batchIndex); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamFileServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamFileServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..47ecba754e65a223537586756721edabafce5401 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamFileServiceImpl.java @@ -0,0 +1,139 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbExamFile; +import com.ruoyi.hezhi.domain.TbExamSimulateInfo; +import com.ruoyi.hezhi.domain.dto.ExamFileDTO; +import com.ruoyi.hezhi.mapper.TbExamFileMapper; +import com.ruoyi.hezhi.mapper.TbExamSimulateInfoMapper; +import com.ruoyi.hezhi.service.ITbExamFileService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * 鑰冭瘯鎷嶆憚鏂囦欢Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-11-14 + */ +@Service +public class TbExamFileServiceImpl implements ITbExamFileService +{ + @Autowired + private TbExamFileMapper tbExamFileMapper; + @Autowired + private TbExamSimulateInfoMapper examSimulateInfoMapper; + + /** + * 鏌ヨ鑰冭瘯鎷嶆憚鏂囦欢 + * + * @param examFileId 鑰冭瘯鎷嶆憚鏂囦欢涓婚敭 + * @return 鑰冭瘯鎷嶆憚鏂囦欢 + */ + @Override + public TbExamFile selectTbExamFileByExamFileId(Long examFileId) + { + return tbExamFileMapper.selectTbExamFileByExamFileId(examFileId); + } + + /** + * 鏌ヨ鑰冭瘯鎷嶆憚鏂囦欢鍒楄〃 + * + * @param tbExamFile 鑰冭瘯鎷嶆憚鏂囦欢 + * @return 鑰冭瘯鎷嶆憚鏂囦欢 + */ + @Override + public List selectTbExamFileList(TbExamFile tbExamFile) + { + return tbExamFileMapper.selectTbExamFileList(tbExamFile); + } + + /** + * 鏂板鑰冭瘯鎷嶆憚鏂囦欢 + * + * @param tbExamFile 鑰冭瘯鎷嶆憚鏂囦欢 + * @return 缁撴灉 + */ + @Override + public int insertTbExamFile(TbExamFile tbExamFile) + { + tbExamFile.setCreateTime(DateUtils.getNowDate()); + return tbExamFileMapper.insertTbExamFile(tbExamFile); + } + + /** + * 淇敼鑰冭瘯鎷嶆憚鏂囦欢 + * + * @param tbExamFile 鑰冭瘯鎷嶆憚鏂囦欢 + * @return 缁撴灉 + */ + @Override + public int updateTbExamFile(TbExamFile tbExamFile) + { + tbExamFile.setUpdateTime(DateUtils.getNowDate()); + return tbExamFileMapper.updateTbExamFile(tbExamFile); + } + + /** + * 鎵归噺鍒犻櫎鑰冭瘯鎷嶆憚鏂囦欢 + * + * @param examFileIds 闇瑕佸垹闄ょ殑鑰冭瘯鎷嶆憚鏂囦欢涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbExamFileByExamFileIds(Long[] examFileIds) + { + return tbExamFileMapper.deleteTbExamFileByExamFileIds(examFileIds); + } + + /** + * 鍒犻櫎鑰冭瘯鎷嶆憚鏂囦欢淇℃伅 + * + * @param examFileId 鑰冭瘯鎷嶆憚鏂囦欢涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbExamFileByExamFileId(Long examFileId) + { + return tbExamFileMapper.deleteTbExamFileByExamFileId(examFileId); + } + + /** + * 姝e紡鑰冭瘯鎷嶆憚 + * + * @param examFileDTO + * @return ok + */ + @Override + public AjaxResult subjectFormalPhotograph(ExamFileDTO examFileDTO) { + TbExamFile examFile = new TbExamFile(); + examFile.setExamSimulateInfoId(examFileDTO.getExamSimulateInfoId()); + examFile.setMemberUserId(examFileDTO.getMemberUserId()); + examFile.setFileUrl(examFileDTO.getFileUrl()); + examFile.setExamType(1); + examFile.setFileType(1); + examFile.setCreateTime(DateUtils.getNowDate()); + + TbExamSimulateInfo tbExamSimulateInfo = examSimulateInfoMapper.selectTbExamSimulateInfoByExamSimulateInfoId(examFileDTO.getExamSimulateInfoId()); + if (tbExamSimulateInfo != null) { + examFile.setExamId(tbExamSimulateInfo.getExamId()); + } + tbExamFileMapper.insertTbExamFile(examFile); + return AjaxResult.success(); + } + + /** + * 鎴戠殑姝e紡鑰冭瘯鎷嶇収鍒楄〃 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public List> getSubjectFormalPhotographList(Map params) { + return tbExamFileMapper.getSubjectFormalPhotographList(params); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamNoticeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamNoticeServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..6784d592ec6bd33676f0caf04e78e9dcd2f9a914 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamNoticeServiceImpl.java @@ -0,0 +1,136 @@ +package com.ruoyi.hezhi.service.impl; + +import cn.hutool.core.collection.CollUtil; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbExamNotice; +import com.ruoyi.hezhi.mapper.TbExamNoticeMapper; +import com.ruoyi.hezhi.service.ITbExamNoticeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * 鑰冭瘯閫氱煡Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-10-16 + */ +@Service +public class TbExamNoticeServiceImpl implements ITbExamNoticeService +{ + @Autowired + private TbExamNoticeMapper tbExamNoticeMapper; + + /** + * 鏌ヨ鑰冭瘯閫氱煡 + * + * @param examNoticeId 鑰冭瘯閫氱煡涓婚敭 + * @return 鑰冭瘯閫氱煡 + */ + @Override + public TbExamNotice selectTbExamNoticeByExamNoticeId(Long examNoticeId) + { + return tbExamNoticeMapper.selectTbExamNoticeByExamNoticeId(examNoticeId); + } + + /** + * 鏌ヨ鑰冭瘯閫氱煡鍒楄〃 + * + * @param tbExamNotice 鑰冭瘯閫氱煡 + * @return 鑰冭瘯閫氱煡 + */ + @Override + public List selectTbExamNoticeList(TbExamNotice tbExamNotice) + { + return tbExamNoticeMapper.selectTbExamNoticeList(tbExamNotice); + } + + /** + * 鏂板鑰冭瘯閫氱煡 + * + * @param tbExamNotice 鑰冭瘯閫氱煡 + * @return 缁撴灉 + */ + @Override + public int insertTbExamNotice(TbExamNotice tbExamNotice) + { + //鍏堟牴鎹甧xamId鍜宐atchIndex鏌ヨ锛屽鏋滃瓨鍦ㄥ垯鎻愮ず璇ユ壒娆$殑鑰冭瘯閫氱煡宸插瓨鍦 + TbExamNotice paramDto = new TbExamNotice(); + paramDto.setExamId(tbExamNotice.getExamId()); + paramDto.setBatchIndex(tbExamNotice.getBatchIndex()); + List list = tbExamNoticeMapper.selectTbExamNoticeList(paramDto); + if (!list.isEmpty()) { + throw new ServiceException("璇ユ壒娆$殑鑰冭瘯閫氱煡宸插瓨鍦"); + } + tbExamNotice.setCreateTime(DateUtils.getNowDate()); + return tbExamNoticeMapper.insertTbExamNotice(tbExamNotice); + } + + /** + * 淇敼鑰冭瘯閫氱煡 + * + * @param tbExamNotice 鑰冭瘯閫氱煡 + * @return 缁撴灉 + */ + @Override + public int updateTbExamNotice(TbExamNotice tbExamNotice) + { + tbExamNotice.setUpdateTime(DateUtils.getNowDate()); + return tbExamNoticeMapper.updateTbExamNotice(tbExamNotice); + } + + /** + * 鎵归噺鍒犻櫎鑰冭瘯閫氱煡 + * + * @param examNoticeIds 闇瑕佸垹闄ょ殑鑰冭瘯閫氱煡涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbExamNoticeByExamNoticeIds(Long[] examNoticeIds) + { + return tbExamNoticeMapper.deleteTbExamNoticeByExamNoticeIds(examNoticeIds); + } + + /** + * 鍒犻櫎鑰冭瘯閫氱煡淇℃伅 + * + * @param examNoticeId 鑰冭瘯閫氱煡涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbExamNoticeByExamNoticeId(Long examNoticeId) + { + return tbExamNoticeMapper.deleteTbExamNoticeByExamNoticeId(examNoticeId); + } + + /** + * 鑰冭瘯閫氱煡鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鑰冭瘯閫氱煡鍒楄〃 + */ + @Override + public List> getExamNoticeList(Map params) { + return tbExamNoticeMapper.getExamNoticeList(params); + + } + + /** + * 鑰冭瘯閫氱煡璇︽儏 + * + * @param params 鍙傛暟 + * @return 鑰冭瘯閫氱煡璇︽儏 + */ + @Override + public Map getExamNoticeInfo(Map params) { + Map examNoticeInfo = tbExamNoticeMapper.getExamNoticeInfo(params);//todo 鐜板湪蹇呴』鏈夎冭瘯閫氱煡鎵嶈兘鏌ュ嚭鑰冭瘯鏃堕棿 + if (CollUtil.isEmpty(examNoticeInfo)){ + throw new ServiceException("鏆傛棤瀵瑰簲鑰冭瘯閫氱煡锛岃鑱旂郴鑰佸笀"); + } + return examNoticeInfo; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamRegistrationServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamRegistrationServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..41ddc549325b94af2aa969242ed5fc1aff5da11c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamRegistrationServiceImpl.java @@ -0,0 +1,1470 @@ +package com.ruoyi.hezhi.service.impl; + + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.crypto.digest.MD5; +import com.alibaba.fastjson2.JSONObject; +import com.kuaidi100.sdk.contant.CompanyConstant; +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.ImgUpload; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.asPose.AsposeUtil; +import com.ruoyi.common.utils.bean.BeanUtils; +import com.ruoyi.common.utils.kd100.Kd100Util; +import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.hezhi.domain.*; +import com.ruoyi.hezhi.domain.dto.ExamRegistrationDTO; +import com.ruoyi.hezhi.domain.dto.PostAddressDTO; +import com.ruoyi.hezhi.domain.vo.TbExamRegistrationCodeVo; +import com.ruoyi.hezhi.domain.vo.TbExamRegistrationVO; +import com.ruoyi.hezhi.domain.vo.TopicImportTemplateVO; +import com.ruoyi.hezhi.mapper.*; +import com.ruoyi.hezhi.service.*; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.ibatis.session.ExecutorType; +import org.apache.ibatis.session.SqlSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.repository.init.ResourceReader; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.multipart.MultipartFile; + +import javax.annotation.Resource; +import javax.validation.*; +import java.io.FileInputStream; +import java.io.IOException; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * 鑰冭瘯鎶ュ悕Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-11-05 + */ +@Slf4j +@Service +@Validated +public class TbExamRegistrationServiceImpl implements ITbExamRegistrationService +{ + @Autowired + private TbExamRegistrationMapper tbExamRegistrationMapper; + @Autowired + private ITbExamService examService; + @Autowired + private ITbExamFileService examFileService; + @Autowired + private ITbMemberOrderService memberOrderService; + @Autowired + private TbMemberScoreMapper tbMemberScoreMapper; + @Autowired + private TbConfigMapper tbConfigMapper; + @Autowired + private ITbPostAddressService tbPostAddressService; + @Autowired + private ITbExpressKdCodeService tbExpressKdCodeService; + @Autowired + private TbMemberMajorMapper tbMemberMajorMapper; + @Autowired + private TbExamMapper tbExamMapper; + @Autowired + private TbExamSimulateInfoMapper tbExamSimulateInfoMapper; + @Autowired + private Kd100Util kd100Util; + @Resource + private ThreadPoolTaskExecutor threadPoolTaskExecutor; + @Autowired + private TbCourseMapper tbCourseMapper;; + @Resource + private TbRegionMapper tbRegionMapper;; + @Autowired + private TbExamCourseMapper tbExamCourseMapper; + @Autowired + private TbExamBatchMapper tbExamBatchMapper; + @Autowired + private TbMemberOrderMapper tbMemberOrderMapper; + @Autowired + private TbStudyCenterTeacherMapper tbStudyCenterTeacherMapper; + + @Resource + private TbStudentMapper tbStudentMapper; + @Resource + private TbEvaluateAgencyMapper tbEvaluateAgencyMapper; + @Resource + private TbStudyCenterMapper tbStudyCenterMapper; + + @Autowired + private RedisCache redisCache; + + /** + * 鏌ヨ鑰冭瘯鎶ュ悕 + * + * @param examRegistrationId 鑰冭瘯鎶ュ悕涓婚敭 + * @return 鑰冭瘯鎶ュ悕 + */ + @Override + public TbExamRegistration selectTbExamRegistrationByExamRegistrationId(Long examRegistrationId) + { + return tbExamRegistrationMapper.selectTbExamRegistrationByExamRegistrationId(examRegistrationId); + } + /** + * 鏌ヨ鍙戣揣淇℃伅 + * + * @param examRegistrationId 鑰冭瘯鎶ュ悕涓婚敭 + * @return 鑰冭瘯鎶ュ悕 + */ + @Override + public TbExamRegistration selectTbExamRegistrationByExamRegistrationIdFahuo(Long examRegistrationId) + { + return tbExamRegistrationMapper.selectTbExamRegistrationByExamRegistrationIdFahuo(examRegistrationId); + } + + /** + * 鏌ヨ鑰冭瘯鎶ュ悕鍒楄〃 + * + * @param tbExamRegistration 鑰冭瘯鎶ュ悕 + * @return 鑰冭瘯鎶ュ悕 + */ + @Override + public List selectTbExamRegistrationList(TbExamRegistration tbExamRegistration) + { + return tbExamRegistrationMapper.selectTbExamRegistrationList(tbExamRegistration); + } + + /** + * 鏂板鑰冭瘯鎶ュ悕 + * + * @param tbExamRegistration 鑰冭瘯鎶ュ悕 + * @return 缁撴灉 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int insertTbExamRegistration(TbExamRegistration tbExamRegistration) + { + tbExamRegistration.setCreateTime(DateUtils.getNowDate()); + tbExamRegistration.setPayType(0); + tbExamRegistration.setIsPay(0); + Long courseId = tbExamRegistration.getCourseId(); + if (courseId == null){ + throw new ServiceException("璇烽夋嫨璇剧▼"); + } + // 鏍规嵁璇剧▼ID 鑾峰彇鑰冭瘯ID + TbExamCourse tbExamCourse = tbExamCourseMapper.getExamIdByCourseId(tbExamRegistration.getCourseId()); + if (ObjectUtils.isEmpty(tbExamCourse)){ + throw new ServiceException("鏈煡璇㈠埌鑰冭瘯淇℃伅"); + } + TbExam tbExam = examService.selectTbExamByExamId(tbExamCourse.getExamId()); + if (ObjectUtils.isEmpty(tbExam)) { + throw new ServiceException("鑰冭瘯淇℃伅寮傚父锛岃鑱旂郴绠$悊鍛橈紒锛侊紒"); + } + + // 鏌ヨ鑰冭瘯鎵规 + List tbExamBatchList = tbExamBatchMapper.getEnableByExamId(tbExam.getExamId(), tbExam.getExamBatchEarly()); + if (tbExamBatchList.isEmpty()){ + throw new ServiceException("鏃犲彲鎶ュ悕鎵规"); + } + TbExamBatch tbExamBatch = tbExamBatchList.get(0); + tbExamRegistration.setExamBatchIndex(tbExamBatch.getBatchIndex().intValue()); + tbExamRegistration.setRegistrationBatch(tbExamBatch.getExamBatch()); + //濡傛灉娌℃湁鐢ㄦ埛锛屽垱寤 + Long userId = tbStudentMapper.selectTbStudentByPhone(tbExamRegistration.getContactInformation()); + if (ObjectUtils.isEmpty(userId)) { + // 鏂板鐢ㄦ埛 + TbStudent insertStudent = new TbStudent(); + //鎶ュ悕淇℃伅鐩存帴璧嬪肩粰鐢ㄦ埛 + insertStudent.setStudentName(tbExamRegistration.getName());//濮撳悕 + insertStudent.setSex(tbExamRegistration.getSex());//鎬у埆 + insertStudent.setEducation(tbExamRegistration.getEducation());//瀛﹀巻 + insertStudent.setGraduationSchool(tbExamRegistration.getGraduationSchool());//姣曚笟闄㈡牎 + insertStudent.setBirthday(tbExamRegistration.getBirthday());//鍑虹敓鏃ユ湡 + insertStudent.setPhone(tbExamRegistration.getContactInformation());//鐧诲綍鎵嬫満鍙 + insertStudent.setStudentNumber(IdUtils.fastSimpleUUID()); + insertStudent.setCreateTime(DateUtils.getNowDate()); + insertStudent.setExamineStatus(3); + insertStudent.setFrozenStatus(0); + insertStudent.setHeadPortrait("https://image.xnszz.com/IMG_1280_1280@FuvEKIdCm5NN36gZN9gJhk2Ei0-p.jpg"); + insertStudent.setNickName("瀛﹀憳_" + IdUtils.fastSimpleUUID().substring(1, 8)); + + int row = tbStudentMapper.insertTbStudent(insertStudent); + + //濡傛灉鎴愬姛鍐嶆鏍规嵁鎵嬫満鍙锋煡璇㈢敤鎴穒d + if (row > 0){ + userId = tbStudentMapper.selectTbStudentByPhone(tbExamRegistration.getContactInformation()); + }else { + // 鏂板鐢ㄦ埛澶辫触锛岃褰曞け璐ュ師鍥 + throw new ServiceException("鏂板鐢ㄦ埛澶辫触"); + } + }else { + //濡傛灉鏈夌敤鎴凤紝鍒欒ˉ鍏呯敤鎴蜂俊鎭 + TbStudent tbStudent = tbStudentMapper.selectTbStudentByStudentId(userId); + //濮撳悕銆佹у埆銆佸鍘嗐佹瘯涓氶櫌鏍°佸嚭鐢熸棩鏈 + if (StringUtils.isEmpty(tbStudent.getStudentName())){ + tbStudent.setStudentName(tbExamRegistration.getName()); + } + if (tbStudent.getSex() == null|| tbStudent.getSex() == 2){ + tbStudent.setSex(tbExamRegistration.getSex()); + } + if (StringUtils.isEmpty(tbStudent.getEducation())){ + tbStudent.setEducation(tbExamRegistration.getEducation()); + } + if (StringUtils.isEmpty(tbStudent.getGraduationSchool())){ + tbStudent.setGraduationSchool(tbExamRegistration.getGraduationSchool()); + } + if (StringUtils.isEmpty(tbStudent.getBirthday())){ + tbStudent.setBirthday(tbExamRegistration.getBirthday()); + } + //鏇存柊涓汉璧勬枡 + tbStudentMapper.updateTbStudent(tbStudent); + } + if(ObjectUtils.isNotEmpty(userId)){ + tbExamRegistration.setMemberUserId(userId); + } + //鏍¢獙褰撳墠鏁版嵁鏄惁鍦ㄥ簱涓凡瀛樺湪 + TbExamRegistration tbExamRegistrations = tbExamRegistrationMapper.selectTbExamRegistrationByCode(tbExamRegistration); + if(ObjectUtils.isNotEmpty(tbExamRegistrations) && tbExamRegistrations.getIsPay() == 1){ + // 鏁版嵁宸插瓨鍦紝璁板綍澶辫触鍘熷洜 + throw new ServiceException("宸叉姤鍚"); + } + int row = tbExamRegistrationMapper.insertTbExamRegistration(tbExamRegistration); + if (row > 0){ + TbMemberMajor tbMemberMajor = tbMemberMajorMapper.selectTbMemberMajorByMemberAndMajorId(tbExamRegistration.getMemberUserId(), null, tbExamRegistration.getCourseId()); + if (tbMemberMajor != null) { + tbMemberMajor.setUpdateTime(DateUtils.getNowDate()); + tbMemberMajorMapper.updateTbMemberMajor(tbMemberMajor); + } else { + TbMemberMajor memberMajor = new TbMemberMajor(); + memberMajor.setMemberUserId(tbExamRegistration.getMemberUserId()); + memberMajor.setResId(tbExamRegistration.getCourseId()); + memberMajor.setCreateTime(DateUtils.getNowDate()); + memberMajor.setType(1); + tbMemberMajorMapper.insertTbMemberMajor(memberMajor); + } + + //鐢熸垚璁㈠崟 + TbMemberOrder memberOrder = new TbMemberOrder(); + memberOrder.setOrderNo(IdUtil.getSnowflakeNextIdStr()); + memberOrder.setMemberUserId(tbExamRegistration.getMemberUserId()); + memberOrder.setDataId(tbExamRegistration.getExamRegistrationId()); + memberOrder.setPayPrice(tbExam.getPrice()); + memberOrder.setOrderPrice(tbExam.getPrice()); + memberOrder.setDeductionScore(new BigDecimal(0)); + memberOrder.setOrderType(2); + memberOrder.setPayType(0); + memberOrder.setPayStatus(0); + memberOrder.setOrderName(tbExam.getName() + "鑰冭瘯鎶ュ悕璐"); + memberOrder.setRemarks(tbExam.getName() + "鑰冭瘯鎶ュ悕璐"); + memberOrderService.insertTbMemberOrder(memberOrder); + + //澶勭悊鍙備笌閲 + threadPoolTaskExecutor.execute(() -> { + TbCourse tbCourse = tbCourseMapper.selectTbCourseByCourseId(tbExamRegistration.getCourseId()); + if (StringUtils.isNotNull(tbCourse)){ + tbCourse.setParticipateNum(tbCourse.getParticipateNum() + 1); + tbCourseMapper.updateTbCourse(tbCourse); + } + }); + //鐢熸垚鍑嗚冭瘉鍙 + String examNumber = getZkzh(tbExamRegistration); + tbExamRegistration.setZkzh(examNumber); + tbExamRegistrationMapper.updateTbExamRegistration(tbExamRegistration); + }else{ + throw new ServiceException("鏂板澶辫触"); + } + return row; + } + + /** + * 淇敼鑰冭瘯鎶ュ悕 + * + * @param tbExamRegistration 鑰冭瘯鎶ュ悕 + * @return 缁撴灉 + */ + @Override + public int updateTbExamRegistration(TbExamRegistration tbExamRegistration) + { + tbExamRegistration.setUpdateTime(DateUtils.getNowDate()); + return tbExamRegistrationMapper.updateTbExamRegistration(tbExamRegistration); + } + + /** + * 鎵归噺鍒犻櫎鑰冭瘯鎶ュ悕 + * + * @param examRegistrationIds 闇瑕佸垹闄ょ殑鑰冭瘯鎶ュ悕涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbExamRegistrationByExamRegistrationIds(Long[] examRegistrationIds) + { + return tbExamRegistrationMapper.deleteTbExamRegistrationByExamRegistrationIds(examRegistrationIds); + } + + /** + * 鍒犻櫎鑰冭瘯鎶ュ悕淇℃伅 + * + * @param examRegistrationId 鑰冭瘯鎶ュ悕涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbExamRegistrationByExamRegistrationId(Long examRegistrationId) + { + return tbExamRegistrationMapper.deleteTbExamRegistrationByExamRegistrationId(examRegistrationId); + } + + /** + * 璇佷功鍙戣揣 + * @param tbExamRegistration 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public int certificateSend(TbExamRegistration tbExamRegistration){ + String sendManName = tbExamRegistration.getSendManName(); + String sendManMobile = tbExamRegistration.getSendManMobile(); + String sendManPrintAddr = tbExamRegistration.getSendManPrintAddr(); + + TbExamRegistration examRegistration = tbExamRegistrationMapper.selectTbExamRegistrationByExamRegistrationId(tbExamRegistration.getExamRegistrationId()); + if (ObjectUtils.isEmpty(examRegistration)){ + throw new ServiceException("鏈煡璇㈠埌鑰冭瘯鎶ュ悕淇℃伅"); + } + if (examRegistration.getCertificateStatus()!=1){ + throw new ServiceException("涓嶆槸寰呭彂璐х姸鎬侊紝鍙戣揣澶辫触"); + } + try { + JSONObject sendResult = kd100Util.testBorderOfficial( + CompanyConstant.EMS, + sendManName, + sendManMobile, + sendManPrintAddr, + tbExamRegistration.getName(), + tbExamRegistration.getContactPhone(), + tbExamRegistration.getProvinceName() + tbExamRegistration.getCityName() + tbExamRegistration.getAreaName() + tbExamRegistration.getAddress()); + + Boolean result = sendResult.getBoolean("result"); + if (result){ + JSONObject data = sendResult.getJSONObject("data"); + String taskId = data.getString("taskId"); + String orderId = data.getString("orderId"); + String kuaidinum = data.getString("kuaidinum"); + String pollToken = data.getString("pollToken"); + + tbExamRegistration.setShippingMark("ems"); + tbExamRegistration.setShippingName("ems"); + tbExamRegistration.setShippingCode(kuaidinum); + tbExamRegistration.setShippingTaskId(taskId); + tbExamRegistration.setShippingOrderId(orderId); + tbExamRegistration.setShippingPollToken(pollToken); + tbExamRegistration.setSendManName(sendManName); + tbExamRegistration.setSendManMobile(sendManMobile); + tbExamRegistration.setSendManPrintAddr(sendManPrintAddr); + tbExamRegistrationMapper.updateTbExamRegistration(examRegistration); + + return 1; + }else { + String message = sendResult.getString("message"); + throw new ServiceException(message); + } + } catch (Exception e) { + e.printStackTrace(); + throw new ServiceException("鍙戣揣鎻愪氦寮傚父"); + } + } + + /** + * 鑰冭瘯鎶ュ悕 + * + * @param examRegistrationDTO + * @return ok + */ + @Transactional + @Override + public AjaxResult examRegistration(ExamRegistrationDTO examRegistrationDTO) { + Long courseId = examRegistrationDTO.getCourseId(); + if (courseId == null){ + throw new ServiceException("璇烽夋嫨璇剧▼"); + } + // 鏍规嵁璇剧▼ID 鑾峰彇鑰冭瘯ID + TbExamCourse tbExamCourse = tbExamCourseMapper.getExamIdByCourseId(examRegistrationDTO.getCourseId()); + if (ObjectUtils.isEmpty(tbExamCourse)){ + throw new ServiceException("鏈煡璇㈠埌鑰冭瘯淇℃伅"); + } + + TbExam tbExam = examService.selectTbExamByExamId(tbExamCourse.getExamId()); + if (ObjectUtils.isEmpty(tbExam)) { + return AjaxResult.error("鑰冭瘯淇℃伅寮傚父锛岃鑱旂郴绠$悊鍛橈紒锛侊紒"); + } + + // 鏌ヨ鑰冭瘯鎵规 + List tbExamBatchList = tbExamBatchMapper.getEnableByExamId(tbExam.getExamId(), tbExam.getExamBatchEarly()); + if (tbExamBatchList.isEmpty()){ + throw new ServiceException("鏃犲彲鎶ュ悕鎵规"); + } + TbExamBatch tbExamBatch = tbExamBatchList.get(0); + + TbExamRegistration tbExamRegistration = tbExamRegistrationMapper.selectTbExamRegistrationByUserIdExamId(examRegistrationDTO.getMemberUserId(), tbExam.getExamId()); + if (ObjectUtils.isNotEmpty(tbExamRegistration) && tbExamRegistration.getIsPay() == 1) { + return AjaxResult.error("宸叉姤鍚嶏紝璇峰嬁閲嶅鎻愪氦"); + }else { + TbExamRegistration registration = new TbExamRegistration(); + registration.setMemberUserId(examRegistrationDTO.getMemberUserId()); + registration.setExamId(tbExam.getExamId()); + registration.setExamBatchIndex(tbExamBatch.getBatchIndex().intValue()); + registration.setName(examRegistrationDTO.getName()); + registration.setSex(examRegistrationDTO.getSex()); + registration.setFormerName(examRegistrationDTO.getFormerName()); + registration.setNation(examRegistrationDTO.getNation()); + registration.setIdentityCard(examRegistrationDTO.getIdentityCard()); + registration.setBirthday(DateUtil.parse(examRegistrationDTO.getBirthday(), "yyyy-MM-dd").toString("yyyy-MM-dd")); + registration.setSourceType(examRegistrationDTO.getSourceType()); + if (!CollectionUtils.isEmpty(examRegistrationDTO.getNativePlace())) { + //鑾峰彇鍖哄煙淇℃伅 + registration.setNativePlace(String.join(",", examRegistrationDTO.getNativePlace())); + } + registration.setPoliticalStatus(examRegistrationDTO.getPoliticalStatus()); + registration.setEducation(examRegistrationDTO.getEducation()); + registration.setMajor(examRegistrationDTO.getMajor()); + registration.setGraduationSchool(examRegistrationDTO.getGraduationSchool()); + registration.setEntranceYear(examRegistrationDTO.getEntranceYear()); + registration.setContactInformation(examRegistrationDTO.getContactInformation()); + registration.setProvinceId(examRegistrationDTO.getProvinceId()); + registration.setCityId(examRegistrationDTO.getCityId()); + registration.setAreaId(examRegistrationDTO.getAreaId()); + registration.setAddress(examRegistrationDTO.getAddress()); + registration.setZipCode(examRegistrationDTO.getZipCode()); + registration.setContactPhone(examRegistrationDTO.getContactPhone()); + registration.setEmail(examRegistrationDTO.getEmail()); + + registration.setIdPhoto(examRegistrationDTO.getIdPhoto()); + registration.setIdentityCardBadge(examRegistrationDTO.getIdentityCardBadge()); + registration.setIdentityCardPortrait(examRegistrationDTO.getIdentityCardPortrait()); + registration.setGraduationCertificate(examRegistrationDTO.getGraduationCertificate()); + + registration.setAgencyName(examRegistrationDTO.getAgencyName()); + registration.setCareerName(examRegistrationDTO.getCareerName()); + registration.setExamLevel(examRegistrationDTO.getExamLevel()); + registration.setRegistrationBatch(tbExamBatch.getExamBatch()); + registration.setStudyCenter(examRegistrationDTO.getStudyCenter()); + registration.setStudyCenterId(examRegistrationDTO.getStudyCenterId()); + registration.setAgencyCode(examRegistrationDTO.getAgencyCode()); + + registration.setIsInspect(examRegistrationDTO.getIsInspect()); + registration.setSignPhoto(examRegistrationDTO.getSignPhoto()); + + registration.setCreateTime(DateUtils.getNowDate()); + registration.setExamineStatus(0); + + registration.setIsPay(0); + registration.setPayType(0); + registration.setPayPrice(tbExam.getPrice()); + + registration.setAgencyId(examRegistrationDTO.getAgencyId()); + registration.setCourseId(examRegistrationDTO.getCourseId()); + + tbExamRegistrationMapper.insertTbExamRegistration(registration); + + TbMemberOrder memberOrder = new TbMemberOrder(); + memberOrder.setOrderNo(IdUtil.getSnowflakeNextIdStr()); + memberOrder.setMemberUserId(examRegistrationDTO.getMemberUserId()); + memberOrder.setDataId(registration.getExamRegistrationId()); + memberOrder.setPayPrice(tbExam.getPrice()); + memberOrder.setOrderPrice(tbExam.getPrice()); + memberOrder.setDeductionScore(new BigDecimal(0)); + memberOrder.setOrderType(2); + memberOrder.setPayType(0); + memberOrder.setPayStatus(0); + memberOrder.setOrderName(tbExam.getName() + "鑰冭瘯鎶ュ悕璐"); + memberOrder.setRemarks(tbExam.getName() + "鑰冭瘯鎶ュ悕璐"); + memberOrderService.insertTbMemberOrder(memberOrder); + + TbMemberMajor tbMemberMajor = tbMemberMajorMapper.selectTbMemberMajorByMemberAndMajorId(examRegistrationDTO.getMemberUserId(), null, examRegistrationDTO.getCourseId()); + if (tbMemberMajor != null) { + tbMemberMajor.setUpdateTime(DateUtils.getNowDate()); + tbMemberMajorMapper.updateTbMemberMajor(tbMemberMajor); + } else { + TbMemberMajor memberMajor = new TbMemberMajor(); + memberMajor.setMemberUserId(examRegistrationDTO.getMemberUserId()); + memberMajor.setResId(examRegistrationDTO.getCourseId()); + memberMajor.setCreateTime(DateUtils.getNowDate()); + memberMajor.setType(1); + tbMemberMajorMapper.insertTbMemberMajor(memberMajor); + } + + //澶勭悊鍙備笌閲 + threadPoolTaskExecutor.execute(() -> { + TbCourse tbCourse = tbCourseMapper.selectTbCourseByCourseId(courseId); + if (StringUtils.isNotNull(tbCourse)){ + tbCourse.setParticipateNum(tbCourse.getParticipateNum() + 1); + tbCourseMapper.updateTbCourse(tbCourse); + } + }); + return AjaxResult.success(); + } + } + + /** + * 鏌ヨ鐢ㄦ埛鑰冭瘯鎶ュ悕 + * + * @param memberUserId 鐢ㄦ埛ID + * @param examId 鑰冭瘯ID + * @return 鑰冭瘯鎶ュ悕 + */ + @Override + public TbExamRegistration selectTbExamRegistrationByUserIdExamId(Long memberUserId, Long examId) { + return tbExamRegistrationMapper.selectTbExamRegistrationByUserIdExamId(memberUserId, examId); + } + + /** + * 鎴戠殑鑰冭瘯鍒楄〃 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public List> getMemberExamList(Map params) { + return tbExamRegistrationMapper.getMemberExamList(params); + } + + /** + * 鎴戠殑鑰冭瘯璇︽儏 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public Map getMemberExamInfo(Map params) { + Map memberExamInfo = tbExamRegistrationMapper.getMemberExamInfo(params); + if (memberExamInfo != null) { + HashMap map = new HashMap<>(); + map.put("memberUserId", memberExamInfo.get("memberUserId").toString()); + map.put("examId", memberExamInfo.get("examId").toString()); + memberExamInfo.put("subjectFormalPhotographList", examFileService.getSubjectFormalPhotographList(map)); + } + return memberExamInfo; + } + + /** + * 鏌ヨ鑰冭瘯鎶ュ悕璇︽儏 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public Map getExamRegistrationInfo(Map params) { + Map examRegistrationInfo = tbExamRegistrationMapper.getExamRegistrationInfo(params); + if (ObjectUtils.isNotEmpty(examRegistrationInfo)) { + Map memberScore = tbMemberScoreMapper.getMemberScore(params); + + // 鍙敤绉垎 + BigDecimal canScore = new BigDecimal(memberScore.get("canScore").toString()).setScale(2, RoundingMode.HALF_UP); + // 鑰冭瘯鎶ュ悕閲戦 + BigDecimal examPrice = new BigDecimal(examRegistrationInfo.get("examPrice").toString()).setScale(2, RoundingMode.HALF_UP); + TbConfig aboutIntegral = tbConfigMapper.selectTbConfigByIdentifying("aboutIntegral"); + // 涓绉垎鎶垫墸X鍏 + BigDecimal deductionProportion = aboutIntegral.getConfigDecimal2(); + // 绉垎鎶垫墸鐧惧垎姣 + String rateString = aboutIntegral.getConfigString2(); + //榛樿绉垎鎶垫墸姣斾緥涓1 + BigDecimal rate = new BigDecimal(1); + if (StringUtils.isNotEmpty(rateString)) { + try { + rate = new BigDecimal(rateString); + // 妫鏌 rate 鏄惁鍦ㄦ湁鏁堣寖鍥村唴锛屼緥濡 0 鍒 1 涔嬮棿 + if (rate.compareTo(BigDecimal.ZERO) < 0 || rate.compareTo(BigDecimal.ONE) > 0) { + // 濡傛灉涓嶅湪鏈夋晥鑼冨洿鍐咃紝璁剧疆涓洪粯璁ゅ + rate = new BigDecimal(1); + System.err.println("Rate out of range: " + rateString); // 璁板綍閿欒淇℃伅 + } + } catch (NumberFormatException e) { + // 鎹曡幏鏃犳晥鏁板瓧鏍煎紡锛岃褰曟棩蹇椼佽繑鍥為粯璁ゅ + rate = new BigDecimal(1); // 鎴栬呭彲浠ヨ缃叾浠栭粯璁ゅ硷紝鍏蜂綋鏍规嵁涓氬姟闇姹 + System.err.println("Invalid rate format: " + rateString); // 璁板綍閿欒淇℃伅 + } + } + + // 璁$畻鏈澶ф姷鎵i噾棰濓細examPrice * rate + BigDecimal maxDiscountAmount = examPrice.multiply(rate).setScale(2, RoundingMode.HALF_UP); + // 鏈澶ф姷鎵gН鍒 + BigDecimal maxDiscountScore = maxDiscountAmount.divide(deductionProportion, 2, RoundingMode.HALF_UP);; + // 鎶垫墸绉垎 + BigDecimal deductionScore = new BigDecimal(memberScore.get("canScore").toString()).setScale(2, RoundingMode.HALF_UP); + // 瀹炰粯 + BigDecimal payment = new BigDecimal(examRegistrationInfo.get("examPrice").toString()).setScale(2, RoundingMode.HALF_UP); + + + // 鎶垫墸閲戦 = 鍙敤绉垎 * 涓绉垎鎶垫墸X鍏 + BigDecimal discountPrice = canScore.multiply(deductionProportion).setScale(2, RoundingMode.HALF_UP); + + + // 濡傛灉璁$畻鍑烘潵鐨勬姷鎵i噾棰濆ぇ浜庢渶澶ф姷鎵i噾棰濓紝鍒欓檺鍒朵负鏈澶ф姷鎵i噾棰 + if (discountPrice.compareTo(maxDiscountAmount) > 0) { + discountPrice = maxDiscountAmount; + // 鏍规嵁鏈澶ф姷鎵i噾棰濋噸鏂拌绠楁姷鎵g殑绉垎鏁 + deductionScore = discountPrice.divide(deductionProportion, 2, RoundingMode.HALF_UP); + } + + //濡傛灉鎶垫墸閲戦澶т簬鑰冭瘯浠锋牸锛屽垯鑰冭瘯浠锋牸涓0 + if(discountPrice.compareTo(examPrice) >= 0) { + discountPrice = examPrice; + deductionScore = examPrice.divide(deductionProportion); + payment = new BigDecimal(0); + } + + //濡傛灉鑰冭瘯浠锋牸澶т簬鎶垫墸浠锋牸锛屽垯鑰冭瘯浠锋牸鍑忓幓鎶垫墸浠锋牸 + if(examPrice.compareTo(discountPrice) > 0) { + payment = payment.subtract(discountPrice); + } + + + // 鍙敤绉垎 + examRegistrationInfo.put("canScore", canScore); + // 浼樻儬閲戦锛堝厓锛 + examRegistrationInfo.put("discountPrice", discountPrice); + // 鎶垫墸绉垎 + examRegistrationInfo.put("deductionScore", deductionScore); + // 瀹炰粯 + examRegistrationInfo.put("payment", payment); + //鏈澶氬彲鎶垫墸閲戦 + examRegistrationInfo.put("maxDiscountAmount", maxDiscountAmount); + //鏈澶氬彲鎶垫墸绉垎 + examRegistrationInfo.put("maxDiscountScore", maxDiscountScore); + + TbMemberOrder memberOrder = new TbMemberOrder(); + memberOrder.setOrderNo(MapUtils.getString(examRegistrationInfo, "orderNo")); + memberOrder.setPayPrice(payment); + memberOrder.setDiscountPrice(discountPrice); + memberOrder.setDeductionScore(deductionScore); + memberOrder.setUpdateTime(DateUtils.getNowDate()); + memberOrderService.updateTbMemberOrderByOrderNo(memberOrder); + } + return examRegistrationInfo; + } + + + /** + * 瀛︿範璁″垝-鎴戠殑璇句欢鍒楄〃 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public List> getMemberCoursewareList(Map params) { + return tbExamRegistrationMapper.getMemberCoursewareList(params); + } + + /** + * 鎴戠殑鎶ュ悕琛ㄣ佸噯鑰冭瘉銆佽瘉涔 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public Map getMemberCertificateMore(Map params) { + return tbExamRegistrationMapper.getMemberCertificateMore(params); + } + + // /** + // * 鏌ョ湅蹇掍俊鎭 + // * + // * @param params 鍙傛暟 + // * @return 缁撴灉 + // */ + // @Override + // public Map getExpressInfo(Map params) { + // Map certificateMore = tbExamRegistrationMapper.getMemberCertificateMore(params); + // if (certificateMore != null) { + // String shippingLogo = ""; + // List> expressList = new ArrayList<>(); + // int certificateStatus = Integer.parseInt(certificateMore.get("certificateStatus").toString()); + // if (certificateStatus == 2) { + // // 宸插彂璐 + // + // // 鏌ヨ蹇 + // TbExpressKdCode expressKdCode = tbExpressKdCodeService.selectTbExpressKdCodeByCode(certificateMore.get("shippingMark").toString()); + // shippingLogo = expressKdCode.getLogo(); + // + // String shippingMark = certificateMore.get("shippingMark").toString(); + // String shippingCode = certificateMore.get("shippingCode").toString(); + // expressList = tbExpressKdCodeService.checkExpressInfoMessage(shippingMark, shippingCode); + // } + // + // certificateMore.put("shippingLogo", shippingLogo); + // certificateMore.put("expressList", expressList); + // + // } + // + // return certificateMore; + // } + + /** + * 濉啓璇佷功鏀惰揣淇℃伅 + * + * @param postAddressDTO + * @return ok + */ + @Transactional + @Override + public AjaxResult submitCertificateGoodsInfo(PostAddressDTO postAddressDTO) { + TbExamRegistration examRegistration = tbExamRegistrationMapper.selectTbExamRegistrationByExamRegistrationId(postAddressDTO.getExamRegistrationId()); + if (examRegistration == null) { + return AjaxResult.error("鎶ュ悕淇℃伅鏈夎"); + } + TbPostAddress postAddress = tbPostAddressService.selectTbPostAddressByMemberUserIdDataId(postAddressDTO.getMemberUserId(), postAddressDTO.getExamRegistrationId(), 1); + if (postAddress != null) { + return AjaxResult.error("鎮ㄥ凡濉啓锛岃鍕块噸澶嶆彁浜"); + } + //浼爄d浜嗗氨璺宠繃锛屾病浼爄d浼犲悕瀛椾簡鎵嶆煡 + if (ObjectUtils.isEmpty(postAddressDTO.getProvinceId())&&StringUtils.isNotBlank(postAddressDTO.getProvinceName())){ + Long provinceId = tbRegionMapper.selectIdByName1(postAddressDTO.getProvinceName()); + if (provinceId==null){ + return AjaxResult.error("鏃犳硶鎵惧埌鐪佸悕绉"); + }else { + postAddressDTO.setProvinceId(provinceId); + } + } + if (ObjectUtils.isEmpty(postAddressDTO.getCityId())&&StringUtils.isNotBlank(postAddressDTO.getCityName())){ + Long cityId = tbRegionMapper.selectIdByName2(postAddressDTO.getCityName()); + if (cityId==null){ + return AjaxResult.error("鏃犳硶鎵惧埌甯傚悕绉"); + }else { + postAddressDTO.setCityId(cityId); + } + } + if (ObjectUtils.isEmpty(postAddressDTO.getAreaId())&&StringUtils.isNotBlank(postAddressDTO.getAreaName())){ + Long areaId = tbRegionMapper.selectIdByName3(postAddressDTO.getAreaName(),postAddressDTO.getCityId()); + if (areaId==null){ + return AjaxResult.error("鏃犳硶鎵惧埌鍖哄悕绉"); + }else { + postAddressDTO.setAreaId(areaId); + } + } + TbPostAddress address = new TbPostAddress(); + address.setMemberUserId(postAddressDTO.getMemberUserId()); + address.setName(postAddressDTO.getName()); + address.setPhone(postAddressDTO.getPhone()); + address.setProvinceId(postAddressDTO.getProvinceId()); + address.setCityId(postAddressDTO.getCityId()); + address.setAreaId(postAddressDTO.getAreaId()); + address.setProvinceName(postAddressDTO.getProvinceName()); + address.setCityName(postAddressDTO.getCityName()); + address.setAreaName(postAddressDTO.getAreaName()); + address.setAddress(postAddressDTO.getAddress()); + address.setDataId(postAddressDTO.getExamRegistrationId()); + address.setType(1); + tbPostAddressService.insertTbPostAddress(address); + + examRegistration.setWriteAt(DateUtils.getTime()); + examRegistration.setCertificateStatus(1); + tbExamRegistrationMapper.updateTbExamRegistration(examRegistration); + + return AjaxResult.success(); + } + + /** + * 鎶ュ悕鑰冭瘯鍗冲皢寮濮嬪脊绐楀垪琛 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public Map getStartNowPopupList(Map params) { + return tbExamRegistrationMapper.getStartNowPopupList(params); + } + + /** + * 鑾峰彇鑰冭瘯鎶ュ悕琛 + * @param type 1-鍑嗚冭瘉锛4-璇佷功锛10-鎶ュ悕琛紝11-鎴愮哗鍗 + * @param memberUserId 鐢ㄦ埛ID + * @param examRegistrationId 鑰冭瘯鎶ュ悕ID + * @return 缁撴灉 + */ + @Override + public JSONObject getReportFormView(Long type, Long memberUserId, Long examRegistrationId){ + TbExamRegistration tbExamRegistration = tbExamRegistrationMapper.getByExamRegistrationId(memberUserId, examRegistrationId); + if (ObjectUtils.isEmpty(tbExamRegistration)){ + throw new ServiceException("鏈煡璇㈠埌鑰冭瘯鎶ュ悕淇℃伅"); + } + + String fileUrl = ""; + if (1 == type){// 鍑嗚冭瘉 + fileUrl = this.downloadAdmissionTicket(tbExamRegistration); + } + if (4 == type){// 璇佷功 + fileUrl = tbExamRegistration.getGraduationCertificate(); + } + if (10 == type){// 鎶ュ悕琛 + fileUrl = this.downloadReportForm(tbExamRegistration); + } + if (11 == type){// 鎴愮哗鍗 + try { + fileUrl = this.downloadTranscript(tbExamRegistration); + } catch (Exception e) { + e.printStackTrace(); + throw new ServiceException("鎴愮哗鍗曚笅杞藉け璐"); + } + } + + JSONObject result = new JSONObject(); + result.put("fileUrl", fileUrl); + return result; + } + + + + + /** + * 娓叉煋鎴愮哗鍗 + * @param tbExamRegistration 鍙傛暟 + * @return 缁撴灉 + */ + public String downloadTranscript(TbExamRegistration tbExamRegistration){ + TbExamSimulateInfo tbExamSimulateInfo = tbExamSimulateInfoMapper.getByMemberUserId(tbExamRegistration.getMemberUserId(), tbExamRegistration.getExamId()); + if (ObjectUtils.isEmpty(tbExamRegistration)){ + throw new ServiceException("鏈煡璇㈠埌鎴愮哗鍗曚俊鎭紝璇峰厛瀹屾垚鑰冭瘯"); + } + + Map paramMap = new HashMap<>(); + if (StringUtils.isNotBlank(tbExamRegistration.getName())){ + paramMap.put("$濮撳悕$", tbExamRegistration.getName()); + }else { + paramMap.put("$濮撳悕$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getAgencyName())){ + paramMap.put("$涓昏冩満鏋$", tbExamRegistration.getAgencyName()); + }else { + paramMap.put("$涓昏冩満鏋$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getMajor())){ + paramMap.put("$涓撲笟$", tbExamRegistration.getMajor()); + }else { + paramMap.put("$涓撲笟$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getExamLevel())){ + paramMap.put("$绛夌骇$", tbExamRegistration.getExamLevel()); + }else { + paramMap.put("$绛夌骇$", "*"); + } + if (null != tbExamSimulateInfo.getCompleteScore()){ + paramMap.put("$鍒嗘暟$", tbExamSimulateInfo.getCompleteScore().toString()); + }else { + paramMap.put("$鍒嗘暟$", "*"); + } + if (null != tbExamSimulateInfo.getPassStatus()){ + paramMap.put("$鍚堟牸$", tbExamSimulateInfo.getPassStatus() == 1 ? "'鍚堟牸'" : "涓嶅悎鏍"); + }else { + paramMap.put("$鍚堟牸$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getRegistrationBatch())){ + paramMap.put("$鎵规$", tbExamRegistration.getRegistrationBatch()); + }else { + paramMap.put("$鎵规$", "*"); + } + String completeTime = tbExamSimulateInfo.getCompleteTime(); + if (StringUtils.isNotBlank(completeTime)){ + String[] completeTimeSplit = completeTime.split(" "); + String[] dateSplit = completeTimeSplit[0].split("-"); + paramMap.put("$鑰冭瘯骞$", dateSplit[0]); + paramMap.put("$鑰冭瘯鏈$", dateSplit[1]); + paramMap.put("$鑰冭瘯鏃$", dateSplit[2]); + }else { + paramMap.put("$鑰冭瘯骞$", "*"); + paramMap.put("$鑰冭瘯鏈$", "*"); + paramMap.put("$鑰冭瘯鏃$", "*"); + } + + Date nowDate = DateUtils.getNowDate(); + paramMap.put("$骞$", DateUtils.parseDateToStr("yyyy", nowDate)); + paramMap.put("$鏈$", DateUtils.parseDateToStr("MM", nowDate)); + paramMap.put("$鏃$", DateUtils.parseDateToStr("dd", nowDate)); + String transcriptCode = IdUtil.getSnowflakeNextIdStr(); + paramMap.put("$鎴愮哗鍗曠紪鍙$", transcriptCode); + + tbExamSimulateInfo.setTranscriptCode(transcriptCode); + tbExamSimulateInfoMapper.updateTbExamSimulateInfo(tbExamSimulateInfo); + + + String fileName = tbExamRegistration.getName()+"_鎴愮哗鍗昣"+ MD5.create().digestHex(tbExamRegistration.getMemberUserId()+"_"+tbExamRegistration.getExamRegistrationId()) +".pdf"; + String saveUrl = AsposeUtil.SAVE_PATH+fileName; + try { + AsposeUtil.replace4Doc( + ResourceReader.class.getClassLoader().getResourceAsStream(AsposeUtil.TRANSCRIPT_PATH), + saveUrl, + paramMap, + "0", + false); + }catch (Exception e){ + throw new ServiceException("鏂囦欢瑙f瀽寮傚父"); + } + String fileUrl = ""; + try { + FileInputStream fileInputStream = new FileInputStream(saveUrl); + fileUrl = new ImgUpload().uploadStream(fileInputStream, fileName); + } catch (IOException e) { + throw new ServiceException("鏂囦欢淇濆瓨寮傚父"); + } + + return fileUrl; + } + + /** + * 娓叉煋鍑嗚冭瘉 + * @param tbExamRegistration 鍙傛暟 + * @return 缁撴灉 + */ + public String downloadAdmissionTicket(TbExamRegistration tbExamRegistration){ + TbExam tbExam = tbExamMapper.selectTbExamByExamId(tbExamRegistration.getExamId()); + if (ObjectUtils.isEmpty(tbExam)){ + throw new ServiceException("鏈煡璇㈠埌鑰冭瘯淇℃伅"); + } + TbExamBatch byExamIdBatchIndex = tbExamBatchMapper.getByExamIdBatchIndex(tbExam.getExamId(), tbExamRegistration.getExamBatchIndex()); + //TbMemberOrder tbMemberOrder = tbMemberOrderMapper.selectOrderByDataId(tbExamRegistration.getExamRegistrationId()); + + String examStartTime = DateUtil.format(byExamIdBatchIndex.getExamStartTime(), "yyyy-MM-dd HH:mm:ss"); + String examEndTime = DateUtil.format(byExamIdBatchIndex.getExamEndTime(), "yyyy-MM-dd HH:mm:ss"); + + Map paramMap = new HashMap<>(); + if (StringUtils.isNotBlank(tbExamRegistration.getName())){ + paramMap.put("$濮撳悕$", tbExamRegistration.getName()); + }else { + paramMap.put("$濮撳悕$", "*"); + } + paramMap.put("$鎬у埆$", tbExamRegistration.getSex() == null ? "*" : tbExamRegistration.getSex() == 0 ? "鐢" : tbExamRegistration.getSex() == 1 ? "濂" : "鏈煡"); + if (StringUtils.isNotBlank(tbExamRegistration.getZkzh())){ + paramMap.put("$鍑嗚冭瘉鍙$", tbExamRegistration.getZkzh()); + }else { + paramMap.put("$鍑嗚冭瘉鍙$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getIdentityCard())){ + paramMap.put("$灞呮皯韬唤璇$", tbExamRegistration.getIdentityCard()); + }else { + paramMap.put("$灞呮皯韬唤璇$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getAgencyName())){ + paramMap.put("$璇勪环鏈烘瀯$", tbExamRegistration.getAgencyName()); + }else { + paramMap.put("$璇勪环鏈烘瀯$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getCareerName())){ + paramMap.put("$鑱屼笟鍚嶇О$", tbExamRegistration.getCareerName()); + }else { + paramMap.put("$鑱屼笟鍚嶇О$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getMajor())){ + paramMap.put("$宸ョ鍚嶇О$", tbExamRegistration.getMajor()); + }else { + paramMap.put("$宸ョ鍚嶇О$", "*"); + } + if (StringUtils.isNotBlank(tbExam.getName())){ + paramMap.put("$鑰冭瘯绉戠洰$", tbExam.getName()); + }else { + paramMap.put("$鑰冭瘯绉戠洰$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getExamLevel())){ + paramMap.put("$鎶ヨ冪瓑绾$", tbExamRegistration.getExamLevel()); + }else { + paramMap.put("$鎶ヨ冪瓑绾$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getEducation())){ + paramMap.put("$鏂囧寲绋嬪害$", tbExamRegistration.getEducation()); + }else { + paramMap.put("$鏂囧寲绋嬪害$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getIdPhoto())){ + paramMap.put("$钃濆簳璇佷欢鐓$", "$pic:513:231:"+tbExamRegistration.getIdPhoto()); + }else { + paramMap.put("$钃濆簳璇佷欢鐓$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getRegistrationBatch())){ + paramMap.put("$鎵规$", tbExamRegistration.getRegistrationBatch()); + }else { + paramMap.put("$鎵规$", "*"); + } + if (StringUtils.isNotBlank(examStartTime) ){ + paramMap.put("$鐞嗚鑰冭瘯寮濮嬫椂闂$", examStartTime); + }else { + paramMap.put("$鐞嗚鑰冭瘯寮濮嬫椂闂$", "*"); + } + if ( StringUtils.isNotBlank(examEndTime)){ + paramMap.put("$鐞嗚鑰冭瘯缁撴潫鏃堕棿$", examEndTime); + }else { + paramMap.put("$鐞嗚鑰冭瘯缁撴潫鏃堕棿$", "*"); + } + + String fileName = tbExamRegistration.getName()+"_瀛︿俊鍑嗚冭瘉_"+ MD5.create().digestHex(tbExamRegistration.getMemberUserId()+"_"+tbExamRegistration.getExamRegistrationId()) +".pdf"; + String saveUrl = AsposeUtil.SAVE_PATH+fileName; + try { + AsposeUtil.replace4Doc( + ResourceReader.class.getClassLoader().getResourceAsStream(AsposeUtil.ADMISSION_TICKET_PATH), + saveUrl, + paramMap, + "0", + false); + }catch (Exception e){ + throw new ServiceException("鏂囦欢瑙f瀽寮傚父"); + } + String fileUrl = ""; + try { + FileInputStream fileInputStream = new FileInputStream(saveUrl); + fileUrl = new ImgUpload().uploadStream(fileInputStream, fileName); + } catch (IOException e) { + throw new ServiceException("鏂囦欢淇濆瓨寮傚父"); + } + + return fileUrl; + } + + /** + * 娓叉煋鎶ュ悕琛 + * @param tbExamRegistration 鍙傛暟 + * @return 缁撴灉 + */ + public String downloadReportForm(TbExamRegistration tbExamRegistration){ + + StringBuilder studyCenterTeacherName = new StringBuilder(); + Long studyCenterId = tbExamRegistration.getStudyCenterId(); + if (null != studyCenterId){ + List studyCenterTeacherList = tbStudyCenterTeacherMapper.getByStudyCenterId(studyCenterId); + if (!studyCenterTeacherList.isEmpty()){ + if (studyCenterTeacherList.size() > 3){ + studyCenterTeacherList.subList(0, 3).forEach(item ->{ + String teacherPhone = item.getTeacherPhone(); + String teacherName = item.getTeacherName(); + if (StringUtils.isNotBlank(teacherName) && StringUtils.isNotBlank(teacherPhone)){ + + } + String str = teacherName+" "+teacherPhone+" "; + studyCenterTeacherName.append(str); + }); + } + } + } + if (ObjectUtils.isEmpty(tbExamRegistration)){ + throw new ServiceException("鏈煡璇㈠埌鑰冭瘯鎶ュ悕淇℃伅"); + } + + Map paramMap = new HashMap<>(); + if (StringUtils.isNotBlank(tbExamRegistration.getName())){ + paramMap.put("$濮撳悕$", tbExamRegistration.getName()); + }else { + paramMap.put("$濮撳悕$", "*"); + } + paramMap.put("$鎬у埆$", tbExamRegistration.getSex() == null ? "*" : tbExamRegistration.getSex() == 0 ? "鏈煡" : tbExamRegistration.getSex() == 1 ? "鐢" : "濂"); + if (StringUtils.isNotBlank(tbExamRegistration.getFormerName())){ + paramMap.put("$鏇剧敤鍚$", tbExamRegistration.getFormerName()); + }else { + paramMap.put("$鏇剧敤鍚$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getNation())){ + paramMap.put("$姘戞棌$", tbExamRegistration.getNation()); + }else { + paramMap.put("$姘戞棌$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getIdentityCard())){ + paramMap.put("$韬唤璇佸彿$", tbExamRegistration.getIdentityCard()); + }else { + paramMap.put("$韬唤璇佸彿$", "*"); + } + String birthYear= ""; + String birthMonth= ""; + String birthDay= ""; + String birthday = tbExamRegistration.getBirthday(); + if (StringUtils.isNotBlank(birthday)){ + String[] split = birthday.split("-"); + birthYear = split[0]; + birthMonth = split[1]; + birthDay = split[2]; + } + if (StringUtils.isNotBlank(birthYear)){ + paramMap.put("$鍑虹敓骞$", birthYear); + }else { + paramMap.put("$鍑虹敓骞$", "*"); + } + if (StringUtils.isNotBlank(birthMonth)){ + paramMap.put("$鍑虹敓鏈$", birthMonth); + }else { + paramMap.put("$鍑虹敓鏈$", "*"); + } + if (StringUtils.isNotBlank(birthDay)){ + paramMap.put("$鍑虹敓鏃$", birthDay); + }else { + paramMap.put("$鍑虹敓鏃$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getSourceType())){ + paramMap.put("$鐢熸簮绫诲瀷$", tbExamRegistration.getSourceType()); + }else { + paramMap.put("$鐢熸簮绫诲瀷$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getNativePlace())){ + paramMap.put("$绫嶈疮$", tbExamRegistration.getNativePlace()); + }else { + paramMap.put("$绫嶈疮$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getPoliticalStatus())){ + paramMap.put("$鏀挎不闈㈣矊$", tbExamRegistration.getPoliticalStatus()); + }else { + paramMap.put("$鏀挎不闈㈣矊$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getIdPhoto())){ + paramMap.put("$钃濆簳璇佷欢鐓$", "$pic:413:531:"+tbExamRegistration.getIdPhoto()); + }else { + paramMap.put("$钃濆簳璇佷欢鐓$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getSignPhoto())){ + paramMap.put("$绛惧悕$", "$pic:113:52:"+tbExamRegistration.getSignPhoto()); + }else { + paramMap.put("$绛惧悕$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getEducation())){ + paramMap.put("$瀛﹀巻$", tbExamRegistration.getEducation()); + }else { + paramMap.put("$瀛﹀巻$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getMajor())){ + paramMap.put("$涓撲笟$", tbExamRegistration.getMajor()); + }else { + paramMap.put("$涓撲笟$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getGraduationSchool())){ + paramMap.put("$鎵鍦ㄥ鏍$", tbExamRegistration.getGraduationSchool()); + }else { + paramMap.put("$鎵鍦ㄥ鏍$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getEntranceYear())){ + paramMap.put("$鍏ュ骞翠唤$", tbExamRegistration.getEntranceYear()); + }else { + paramMap.put("$鍏ュ骞翠唤$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getContactInformation())){ + paramMap.put("$鑱旂郴鏂瑰紡$", tbExamRegistration.getContactInformation()); + }else { + paramMap.put("$鑱旂郴鏂瑰紡$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getAddress())){ + paramMap.put("$閫氫俊鍦板潃$", tbExamRegistration.getAddress()); + }else { + paramMap.put("$閫氫俊鍦板潃$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getZipCode())){ + paramMap.put("$閭紪$", tbExamRegistration.getZipCode()); + }else { + paramMap.put("$閭紪$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getContactPhone())){ + paramMap.put("$鑱旂郴鐢佃瘽$", tbExamRegistration.getContactPhone()); + }else { + paramMap.put("$鑱旂郴鐢佃瘽$", "*"); + } + if(StringUtils.isNotBlank(tbExamRegistration.getEmail())){ + paramMap.put("$鐢靛瓙閭$", tbExamRegistration.getEmail()); + }else { + paramMap.put("$鐢靛瓙閭$", "*"); + } + if(StringUtils.isNotBlank(tbExamRegistration.getAgencyName())){ + paramMap.put("$鏈烘瀯鍚嶇О$", tbExamRegistration.getAgencyName()); + }else { + paramMap.put("$鏈烘瀯鍚嶇О$", "*"); + } + if(StringUtils.isNotBlank(tbExamRegistration.getCareerName())){ + paramMap.put("$鑱屼笟鍚嶇О$", tbExamRegistration.getCareerName()); + }else { + paramMap.put("$鑱屼笟鍚嶇О$", "*"); + } + if(StringUtils.isNotBlank(tbExamRegistration.getRegistrationBatch())){ + paramMap.put("$鎶ュ悕鎵规$", tbExamRegistration.getRegistrationBatch()); + }else { + paramMap.put("$鎶ュ悕鎵规$", "*"); + } + if(StringUtils.isNotBlank(tbExamRegistration.getStudyCenter())){ + paramMap.put("$瀛︿範涓績$", tbExamRegistration.getStudyCenter()); + }else { + paramMap.put("$瀛︿範涓績$", "*"); + } + if(StringUtils.isNotBlank(tbExamRegistration.getAgencyCode())){ + paramMap.put("$鏈烘瀯浠g爜$", tbExamRegistration.getAgencyCode()); + }else { + paramMap.put("$鏈烘瀯浠g爜$", "*"); + } + + Date createTime = tbExamRegistration.getCreateTime(); + if (null != createTime){ + paramMap.put("$骞$", DateUtils.parseDateToStr("yyyy", createTime)); + paramMap.put("$鏈$", DateUtils.parseDateToStr("MM", createTime)); + paramMap.put("$鏃$", DateUtils.parseDateToStr("dd", createTime)); + }else { + paramMap.put("$骞$", "*"); + paramMap.put("$鏈$", "*"); + paramMap.put("$鏃$", "*"); + } + if (StringUtils.isNotBlank(studyCenterTeacherName)){ + paramMap.put("$鏁欏笀$", studyCenterTeacherName.toString()); + }else { + paramMap.put("$鏁欏笀$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getIdentityCardPortrait())){ + paramMap.put("$韬唤璇佹闈$", "$pic:583.2:365.4:"+tbExamRegistration.getIdentityCardPortrait()); + }else { + paramMap.put("$韬唤璇佹闈$", "*"); + } + if (StringUtils.isNotBlank(tbExamRegistration.getIdentityCardBadge())){ + paramMap.put("$韬唤璇佸弽闈$", "$pic:583.2:365.4:"+tbExamRegistration.getIdentityCardBadge()); + }else { + paramMap.put("$韬唤璇佸弽闈$", "*"); + } + + String fileName = tbExamRegistration.getName()+"_鎶ュ悕琛╛"+ MD5.create().digestHex(tbExamRegistration.getMemberUserId()+"_"+tbExamRegistration.getExamRegistrationId())+ System.currentTimeMillis() +".pdf"; + String saveUrl = AsposeUtil.SAVE_PATH+fileName; + try { + AsposeUtil.replace4Doc( + ResourceReader.class.getClassLoader().getResourceAsStream(AsposeUtil.REPORT_FORM_PATH), + saveUrl, + paramMap, + "0", + false); + }catch (Exception e){ + throw new ServiceException("鏂囦欢瑙f瀽寮傚父"); + } + String fileUrl = ""; + try { + FileInputStream fileInputStream = new FileInputStream(saveUrl); + fileUrl = new ImgUpload().uploadStream(fileInputStream, fileName); + } catch (IOException e) { + throw new ServiceException("鏂囦欢淇濆瓨寮傚父"); + } + + return fileUrl; + } + + /** + * 瀵煎叆鑰冭瘯鎶ュ悕 + * @param list 鏂囦欢 + * @return 缁撴灉 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public String importData(@Valid List list) throws Exception { + if (ObjectUtils.isEmpty(list)){ + throw new ServiceException("瀵煎叆淇℃伅涓嶈兘涓虹┖"); + } + //瀵煎叆鏁版嵁涓嶄负绌烘牎楠岃〃涓槸鍚︽湁閲嶅鏁版嵁(杩涜鍘婚噸) + List collect = list.stream().distinct().collect(Collectors.toList()); + // 浣跨敤 Map 瀛樺偍鎵嬫満鍙峰拰澶辫触鍘熷洜 + Map erreList = new HashMap<>(); + int successRow = 0; + for (TbExamRegistrationVO item : collect) { + TbExamRegistration tbExamRegistration = new TbExamRegistration(); + BeanUtils.copyProperties(item, tbExamRegistration); + tbExamRegistration.setCreateTime(DateUtils.getNowDate()); + tbExamRegistration.setIsPay(0); + tbExamRegistration.setPayType(0); + TbExamBatch byexamBatch = tbExamBatchMapper.getByexamBatch(item.getRegistrationBatch()); + if (ObjectUtils.isNotEmpty(byexamBatch)) { + tbExamRegistration.setExamId(byexamBatch.getExamId());//鑰冭瘯ID + tbExamRegistration.setRegistrationBatch(byexamBatch.getExamBatch());//鑰冭瘯鎵规 + tbExamRegistration.setExamBatchIndex(byexamBatch.getBatchIndex().intValue());//鑰冭瘯鎵规index +// tbExamRegistration.setAgencyId(byexamBatch.getEvaluateAencyId()); + tbExamRegistration.setExamBatchIndex(Integer.valueOf(byexamBatch.getBatchIndex().toString()));//鎵规index + }else { + // 鏌ヨ涓嶅埌鎵规鏃讹紝璁板綍澶辫触鍘熷洜 + erreList.put(item.getContactInformation(), "鏈壘鍒板搴旇冭瘯鎵规"); + continue; + } + TbCourse tbCourse1 = tbCourseMapper.selectTbCourseByName(tbExamRegistration.getCareerName()); + if (tbCourse1 == null){ + erreList.put(item.getContactInformation(), "鏈壘鍒拌鑱屼笟鍚嶇О"); + continue; + } + TbExam tbExam = examService.selectTbExamByExamId(byexamBatch.getExamId()); + if (ObjectUtils.isEmpty(tbExam)) { + erreList.put(item.getContactInformation(), "鑰冭瘯淇℃伅寮傚父"); + continue; + } + tbExamRegistration.setCourseId(tbCourse1.getCourseId()); + + TbEvaluateAgency tbEvaluateAgency = tbEvaluateAgencyMapper.selectTbEvaluateAgencyByName(tbExamRegistration.getAgencyName()); + if (tbEvaluateAgency == null){ + erreList.put(item.getContactInformation(), "鏈壘鍒拌鏈烘瀯鍚嶇О"); + continue; + } + tbExamRegistration.setAgencyId(tbEvaluateAgency.getEvaluateAgencyId()); + tbExamRegistration.setAgencyCode(tbEvaluateAgency.getEvaluateAgencyCode()); + TbStudyCenter tbStudyCenter = tbStudyCenterMapper.selectTbStudyCenterByStudyCenterName(tbExamRegistration.getStudyCenter()); + if (ObjectUtils.isEmpty(tbStudyCenter)){ + erreList.put(item.getContactInformation(), "鏈壘鍒拌瀛︿範涓績鍚嶇О"); + continue; + } + tbExamRegistration.setStudyCenterId(tbStudyCenter.getStudyCenterId()); + //濡傛灉娌℃湁鐢ㄦ埛锛屽垱寤 + Long userId = tbStudentMapper.selectTbStudentByPhone(item.getContactInformation()); + if (ObjectUtils.isEmpty(userId)) { + // 鏂板鐢ㄦ埛 + TbStudent insertStudent = new TbStudent(); + //鎶ュ悕淇℃伅鐩存帴璧嬪肩粰鐢ㄦ埛 + insertStudent.setStudentName(item.getName());//濮撳悕 + insertStudent.setSex(item.getSex());//鎬у埆 + insertStudent.setEducation(item.getEducation());//瀛﹀巻 + insertStudent.setGraduationSchool(item.getGraduationSchool());//姣曚笟闄㈡牎 + insertStudent.setBirthday(item.getBirthday());//鍑虹敓鏃ユ湡 + insertStudent.setPhone(item.getContactInformation()); + insertStudent.setStudentNumber(IdUtils.fastSimpleUUID()); + insertStudent.setCreateTime(DateUtils.getNowDate()); + insertStudent.setExamineStatus(3); + insertStudent.setFrozenStatus(0); + insertStudent.setHeadPortrait("https://image.xnszz.com/IMG_1280_1280@FuvEKIdCm5NN36gZN9gJhk2Ei0-p.jpg"); + insertStudent.setNickName("瀛﹀憳_" + IdUtils.fastSimpleUUID().substring(1, 8)); + + int row = tbStudentMapper.insertTbStudent(insertStudent); + + //濡傛灉鎴愬姛鍐嶆鏍规嵁鎵嬫満鍙锋煡璇㈢敤鎴穒d + if (row > 0){ + userId = tbStudentMapper.selectTbStudentByPhone(item.getContactInformation()); + }else { + // 鏂板鐢ㄦ埛澶辫触锛岃褰曞け璐ュ師鍥 + erreList.put(item.getContactInformation(), "鏂板鐢ㄦ埛澶辫触"); + continue; + } + }else { + //濡傛灉鏈夌敤鎴凤紝鍒欒ˉ鍏呯敤鎴蜂俊鎭 + TbStudent tbStudent = tbStudentMapper.selectTbStudentByStudentId(userId); + //濮撳悕銆佹у埆銆佸鍘嗐佹瘯涓氶櫌鏍°佸嚭鐢熸棩鏈 + if (StringUtils.isEmpty(tbStudent.getStudentName())){ + tbStudent.setStudentName(item.getName()); + } + if (tbStudent.getSex() == null|| tbStudent.getSex() == 2){ + tbStudent.setSex(item.getSex()); + } + if (StringUtils.isEmpty(tbStudent.getEducation())){ + tbStudent.setEducation(item.getEducation()); + } + if (StringUtils.isEmpty(tbStudent.getGraduationSchool())){ + tbStudent.setGraduationSchool(item.getGraduationSchool()); + } + if (StringUtils.isEmpty(tbStudent.getBirthday())){ + tbStudent.setBirthday(item.getBirthday()); + } + //鏇存柊涓汉璧勬枡 + tbStudentMapper.updateTbStudent(tbStudent); + } + if(ObjectUtils.isNotEmpty(userId)){ + tbExamRegistration.setMemberUserId(userId); + } + + //鏍¢獙褰撳墠鏁版嵁鏄惁鍦ㄥ簱涓凡瀛樺湪 + TbExamRegistration tbExamRegistrations = tbExamRegistrationMapper.selectTbExamRegistrationByCode(tbExamRegistration); + if(ObjectUtils.isNotEmpty(tbExamRegistrations) && tbExamRegistrations.getIsPay() == 1){ + // 鏁版嵁宸插瓨鍦紝璁板綍澶辫触鍘熷洜 + erreList.put(item.getContactInformation(), "宸叉姤鍚"); + continue; + } + int row = tbExamRegistrationMapper.insertTbExamRegistration(tbExamRegistration); + if (row > 0){ + TbMemberMajor tbMemberMajor = tbMemberMajorMapper.selectTbMemberMajorByMemberAndMajorId(tbExamRegistration.getMemberUserId(), null, tbExamRegistration.getCourseId()); + if (tbMemberMajor != null) { + tbMemberMajor.setUpdateTime(DateUtils.getNowDate()); + tbMemberMajorMapper.updateTbMemberMajor(tbMemberMajor); + } else { + TbMemberMajor memberMajor = new TbMemberMajor(); + memberMajor.setMemberUserId(tbExamRegistration.getMemberUserId()); + memberMajor.setResId(tbExamRegistration.getCourseId()); + memberMajor.setCreateTime(DateUtils.getNowDate()); + memberMajor.setType(1); + tbMemberMajorMapper.insertTbMemberMajor(memberMajor); + } + //鐢熸垚璁㈠崟 + TbMemberOrder memberOrder = new TbMemberOrder(); + memberOrder.setOrderNo(IdUtil.getSnowflakeNextIdStr()); + memberOrder.setMemberUserId(tbExamRegistration.getMemberUserId()); + memberOrder.setDataId(tbExamRegistration.getExamRegistrationId()); + memberOrder.setPayPrice(tbExam.getPrice()); + memberOrder.setOrderPrice(tbExam.getPrice()); + memberOrder.setDeductionScore(new BigDecimal(0)); + memberOrder.setOrderType(2); + memberOrder.setPayType(0); + memberOrder.setPayStatus(0); + memberOrder.setOrderName(tbExam.getName() + "鑰冭瘯鎶ュ悕璐"); + memberOrder.setRemarks(tbExam.getName() + "鑰冭瘯鎶ュ悕璐"); + memberOrderService.insertTbMemberOrder(memberOrder); + //澶勭悊鍙備笌閲 + threadPoolTaskExecutor.execute(() -> { + TbCourse tbCourse = tbCourseMapper.selectTbCourseByCourseId(tbExamRegistration.getCourseId()); + if (StringUtils.isNotNull(tbCourse)){ + tbCourse.setParticipateNum(tbCourse.getParticipateNum() + 1); + tbCourseMapper.updateTbCourse(tbCourse); + } + }); + //鐢熸垚鍑嗚冭瘉鍙 + String examNumber = getZkzh(tbExamRegistration); + tbExamRegistration.setZkzh(examNumber); + tbExamRegistrationMapper.updateTbExamRegistration(tbExamRegistration); + successRow++; + }else{ + erreList.put(item.getContactInformation(), "鏂板澶辫触"); + } + + } + if (successRow>0) { + String baseMessage = "瀵煎叆鎴愬姛" + successRow + "鏉℃暟鎹, 澶辫触" + erreList.size() + "鏉℃暟鎹"; + if (!erreList.isEmpty()) { + List failedInfoStrings = new ArrayList<>(); + for (Map.Entry entry : erreList.entrySet()) { + failedInfoStrings.add("鑱旂郴鏂瑰紡锛"+entry.getKey() + "锛堝師鍥狅細" + entry.getValue() + "锛
"); + } + baseMessage += ", 澶辫触淇℃伅锛
" + String.join(" ", failedInfoStrings); + } + return baseMessage; + } else { + String message = "鏃犳暟鎹鍏, 澶辫触" + erreList.size() + "鏉℃暟鎹"; + if (!erreList.isEmpty()) { + List failedInfoStrings = new ArrayList<>(); + for (Map.Entry entry : erreList.entrySet()) { + failedInfoStrings.add("鑱旂郴鏂瑰紡锛"+entry.getKey() + "锛堝師鍥狅細" + entry.getValue() + "锛
"); + } + message += ", 澶辫触淇℃伅锛
" + String.join(" ", failedInfoStrings); + } + return message; + } + + + } + + @Override + public AjaxResult havaOrderToPay(Long memberUserId) { + boolean exists = tbMemberOrderMapper.existsUnpaidExamOrder(memberUserId); + return exists ? AjaxResult.success("鎮ㄦ湁鏂扮殑鑰冭瘯鎶ュ悕淇℃伅杩樻病鏈夋敮浠") : AjaxResult.success(""); + } + + /* + * 鐢熸垚鍑嗚冭瘉鍙 + * */ + public String getZkzh(TbExamRegistration tbExamRegistration){ + //鐢熸垚鍑嗚冭瘉鍙 + String redisKey = "zkzh:" + tbExamRegistration.getCourseId()+tbExamRegistration.getStudyCenterId()+tbExamRegistration.getAgencyCode(); + int number = 1; + if (redisCache.hasKey(redisKey)) { + //鏌ュ嚭缂撳瓨涓殑鏁版嵁 + Integer cachedData = redisCache.getCacheObject(redisKey); + if (cachedData!=null) { + number = cachedData; + if (number > 999999) {//澶т簬浜嗛噸缃紝鍚﹀垯灏辩敓鎴愬噯鑰冭瘉鍙峰苟鍔1瀛樺偍 + number = 1; + } + } + } + redisCache.setCacheObject(redisKey, number+1); + // 缁檔umber鍓嶉潰琛0锛屼娇鍏舵婚暱搴︿负6浣 + String formattedNumber = String.format("%06d", number); + return tbExamRegistration.getRegistrationBatch()+tbExamRegistration.getStudyCenterId()+tbExamRegistration.getAgencyCode()+formattedNumber; + } + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..ccb9a501f17c8a5da840f39d14702292479ce78a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamServiceImpl.java @@ -0,0 +1,357 @@ +package com.ruoyi.hezhi.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.hezhi.domain.*; +import com.ruoyi.hezhi.domain.vo.CareerExamListVO; +import com.ruoyi.hezhi.domain.vo.CourseListVO; +import com.ruoyi.hezhi.domain.vo.StudyCenterTeacherVO; +import com.ruoyi.hezhi.domain.vo.StudyCenterVO; +import com.ruoyi.hezhi.mapper.*; +import com.ruoyi.hezhi.service.ITbExamService; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.ibatis.session.ExecutorType; +import org.apache.ibatis.session.SqlSessionFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.*; +import java.util.concurrent.CountDownLatch; + +/** + * 鑰冭瘯Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-11-12 + */ +@Service +public class TbExamServiceImpl implements ITbExamService +{ + @Autowired + private TbExamMapper tbExamMapper; + @Autowired + private TbExamCourseMapper tbExamCourseMapper; + @Resource + private TbCourseMapper tbCourseMapper; + @Resource + private TbStudyCenterMapper tbStudyCenterMapper; + @Resource + private TbStudyCenterTeacherMapper tbStudyCenterTeacherMapper; + @Resource + private TbExamBatchMapper tbExamBatchMapper; + @Resource + private ThreadPoolTaskExecutor threadPoolTaskExecutor; + + /** + * 鏌ヨ鑰冭瘯 + * + * @param examId 鑰冭瘯涓婚敭 + * @return 鑰冭瘯 + */ + @Override + public TbExam selectTbExamByExamId(Long examId) + { + TbExam tbExam = tbExamMapper.selectTbExamByExamId(examId); + if (ObjectUtils.isNotEmpty(tbExam)){ + List examCourseList = tbExamCourseMapper.getExamCourseList(null, tbExam.getExamId(), null, null); + tbExam.setExamCourseList(examCourseList); + + List tbExamBatchList = tbExamBatchMapper.getByExamId(tbExam.getExamId()); + tbExam.setExamBatchList(tbExamBatchList); + } + return tbExam; + } + + /** + * 鏌ヨ鑰冭瘯鍒楄〃 + * + * @param tbExam 鑰冭瘯 + * @return 鑰冭瘯 + */ + @Override + public List selectTbExamList(TbExam tbExam) + { + return tbExamMapper.selectTbExamList(tbExam); + } + + /** + * 鏂板鑰冭瘯 + * + * @param tbExam 鑰冭瘯 + * @return 缁撴灉 + */ + @Transactional + @Override + public int insertTbExam(TbExam tbExam) + { + //鏍¢獙鎶ュ悕璐规槸涓嶆槸绗﹀悎BigDecimal + if (ObjectUtils.isNotEmpty(tbExam.getPrice())){ + String price = tbExam.getPrice().toString(); + if (!price.matches("^[0-9]+(\\.[0-9]+)?$")){ + throw new ServiceException("鎶ュ悕璐规牸寮忛敊璇"); + } + } + // 鏍¢獙蹇呴』 > 0 + if (tbExam.getPrice().compareTo(BigDecimal.ZERO) <= 0) { + throw new ServiceException("鎶ュ悕璐瑰繀椤诲ぇ浜0"); + } + if (StringUtils.isEmpty(tbExam.getName())){ + throw new ServiceException("鑰冭瘯鍚嶇О涓嶈兘涓虹┖"); + } + //鍏堝垽鏂冭瘯鍚嶇О鏄惁閲嶅 + List tbExamList = tbExamMapper.selectTbExamListByName(tbExam); + if(!CollUtil.isEmpty(tbExamList)){ + throw new ServiceException("鑰冭瘯鍚嶇О涓嶈兘閲嶅"); + } + + //鍏堟彃鍏ヨ冭瘯琛ㄨ幏鍙栦富閿 + tbExam.setExamNo(IdUtils.getOrderNum()); + tbExam.setCreateTime(DateUtils.getNowDate()); + int result = tbExamMapper.insertTbExam(tbExam); + + // 鏂板鑰冭瘯璇剧▼ + List examCourseList = tbExam.getExamCourseList(); + if (!examCourseList.isEmpty()){ + for (TbExamCourse tbExamCourse : examCourseList) { + tbExamCourse.setExamId(tbExam.getExamId()); + tbExamCourseMapper.insertTbExamCourse(tbExamCourse); + } + } + + // 鑰冭瘯鎵规 + List tbExamBatchList = tbExam.getExamBatchList(); + if (!tbExamBatchList.isEmpty()){ + Date[] examStartTimeArr = new Date[tbExamBatchList.size()]; + Date[] examEndTimeArr = new Date[tbExamBatchList.size()]; + for (int i = 0; i < tbExamBatchList.size(); i++) { + TbExamBatch tbExamBatch = tbExamBatchList.get(i); + tbExamBatch.setExamId(tbExam.getExamId()); + tbExamBatch.setBatchIndex(i+1L); + + examStartTimeArr[i] = tbExamBatch.getExamStartTime(); + examEndTimeArr[i] = tbExamBatch.getExamEndTime(); + } + + for (int i = 0; i < tbExamBatchList.size(); i++) { + Date examStartTime = examStartTimeArr[i]; + Date examEndTime = examEndTimeArr[i]; + + for (int f = 0; f < tbExamBatchList.size(); f++) { + if (i!=f){ + Date signStartTimeF = examStartTimeArr[f]; + Date examEndTimeTimeF = examEndTimeArr[f]; + // 妫鏌ョ涓涓椂闂存鏄惁瀹屽叏鍦ㄧ浜屼釜鏃堕棿娈典箣鍓 + if (examEndTime.before(signStartTimeF)) { + continue; + } + // 妫鏌ョ浜屼釜鏃堕棿娈垫槸鍚﹀畬鍏ㄥ湪绗竴涓椂闂存涔嬪墠 + if (examEndTimeTimeF.before(examStartTime)) { + continue; + } + // 濡傛灉鏈変笂杩版儏鍐甸兘涓嶆垚绔嬶紝鍒欐椂闂存鏈変氦闆 + throw new ServiceException(tbExamBatchList.get(f).getExamBatch()+"鏃堕棿璁剧疆鍜"+tbExamBatchList.get(f-1).getExamBatch()+"瀛樺湪閲嶅悎"); + } + } + } + tbExamBatchMapper.insertTbExamBatchBatch(tbExamBatchList); + } + return result; + } + + /** + * 淇敼鑰冭瘯 + * + * @param tbExam 鑰冭瘯 + * @return 缁撴灉 + */ + @Override + public int updateTbExam(TbExam tbExam) + { + //鏍¢獙鎶ュ悕璐规槸涓嶆槸绗﹀悎BigDecimal + if (ObjectUtils.isNotEmpty(tbExam.getPrice())){ + String price = tbExam.getPrice().toString(); + if (!price.matches("^[0-9]+(\\.[0-9]+)?$")){ + throw new ServiceException("鎶ュ悕璐规牸寮忛敊璇"); + } + } + // 鏍¢獙蹇呴』 > 0 + if (tbExam.getPrice().compareTo(BigDecimal.ZERO) <= 0) { + throw new ServiceException("鎶ュ悕璐瑰繀椤诲ぇ浜0"); + } + // 鏂板鑰冭瘯璇剧▼ + List examCourseList = tbExam.getExamCourseList(); + if (!examCourseList.isEmpty()){ + tbExamCourseMapper.deleteTbExamCourse(null, tbExam.getExamId(), null, null); + for (TbExamCourse tbExamCourse : examCourseList) { + tbExamCourse.setExamId(tbExam.getExamId()); + tbExamCourseMapper.insertTbExamCourse(tbExamCourse); + } + } + // 鑰冭瘯鎵规 + List tbExamBatchList = tbExam.getExamBatchList(); + if (!tbExamBatchList.isEmpty()){ + tbExamBatchMapper.deleteByExamId(tbExam.getExamId()); + Date[] examStartTimeArr = new Date[tbExamBatchList.size()]; + Date[] examEndTimeArr = new Date[tbExamBatchList.size()]; + for (int i = 0; i < tbExamBatchList.size(); i++) { + TbExamBatch tbExamBatch = tbExamBatchList.get(i); + tbExamBatch.setExamId(tbExam.getExamId()); + tbExamBatch.setBatchIndex(i+1L); + + examStartTimeArr[i] = tbExamBatch.getExamStartTime(); + examEndTimeArr[i] = tbExamBatch.getExamEndTime(); + } + + for (int i = 0; i < tbExamBatchList.size(); i++) { + Date examStartTime = examStartTimeArr[i]; + Date examEndTime = examEndTimeArr[i]; + + for (int f = 0; f < tbExamBatchList.size(); f++) { + if (i!=f){ + Date signStartTimeF = examStartTimeArr[f]; + Date examEndTimeTimeF = examEndTimeArr[f]; + + // 妫鏌ョ涓涓椂闂存鏄惁瀹屽叏鍦ㄧ浜屼釜鏃堕棿娈典箣鍓 + if (examEndTime.before(signStartTimeF)) { + continue; + } + // 妫鏌ョ浜屼釜鏃堕棿娈垫槸鍚﹀畬鍏ㄥ湪绗竴涓椂闂存涔嬪墠 + if (examEndTimeTimeF.before(examStartTime)) { + continue; + } + // 濡傛灉鏈変笂杩版儏鍐甸兘涓嶆垚绔嬶紝鍒欐椂闂存鏈変氦闆 + throw new ServiceException(tbExamBatchList.get(f).getExamBatch()+"鏃堕棿璁剧疆鍜"+tbExamBatchList.get(f-1).getExamBatch()+"瀛樺湪閲嶅悎"); + } + } + } + tbExamBatchMapper.insertTbExamBatchBatch(tbExamBatchList); + } + + tbExam.setUpdateTime(DateUtils.getNowDate()); + return tbExamMapper.updateTbExam(tbExam); + } + + /** + * 鎵归噺鍒犻櫎鑰冭瘯 + * + * @param examIds 闇瑕佸垹闄ょ殑鑰冭瘯涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbExamByExamIds(Long[] examIds) + { + return tbExamMapper.deleteTbExamByExamIds(examIds); + } + + /** + * 鍒犻櫎鑰冭瘯淇℃伅 + * + * @param examId 鑰冭瘯涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbExamByExamId(Long examId) + { + return tbExamMapper.deleteTbExamByExamId(examId); + } + + /** + * 鑱屼笟鑰冭瘯鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鑱屼笟鑰冭瘯鍒楄〃 + */ + @Override + public List getCareerExamList(Map params) { + return tbExamMapper.getCareerExamList(params); + } + + /** + * 鑱屼笟鑰冭瘯璇︽儏 + * + * @param params 鍙傛暟 + * @return 鑱屼笟鑰冭瘯璇︽儏 + */ + @Override + public Map getCareerExamInfo(Map params) { + return tbExamMapper.getCareerExamInfo(params); + } + + @Override + public List getCourseListByEvaluateAgency(Long evaluateAgencyId) { + List courseListByEvaluateAgency = tbCourseMapper.getCourseListByEvaluateAgency(evaluateAgencyId); + if (!courseListByEvaluateAgency.isEmpty()){ + try { + CountDownLatch countDownLatch = new CountDownLatch(courseListByEvaluateAgency.size()); + for (CourseListVO courseListVO : courseListByEvaluateAgency) { + threadPoolTaskExecutor.execute(()->{ + Long courseId = courseListVO.getCourseId(); + TbExamCourse tbExamCourse = tbExamCourseMapper.getExamIdByCourseId(courseId); + if (ObjectUtils.isNotEmpty(tbExamCourse)){ + Long examId = tbExamCourse.getExamId(); + TbExam tbExam = tbExamMapper.selectTbExamByExamId(examId); + List enableByExamId = tbExamBatchMapper.getEnableByExamId(examId, tbExam.getExamBatchEarly()); + if (!enableByExamId.isEmpty()){ + TbExamBatch tbExamBatch = enableByExamId.get(0); + courseListVO.setExamBatch(tbExamBatch.getExamBatch()); + courseListVO.setExamId(tbExam.getExamId()); + courseListVO.setLevel(getLevel(tbExam.getLevel()));//绛夌骇涔熸煡鍑烘潵 + } + } + countDownLatch.countDown(); + }); + } + countDownLatch.await(); + }catch (Exception e){ + e.printStackTrace(); + } + } + return courseListByEvaluateAgency; + } + + //绛夌骇杞崲鏂规硶 + public String getLevel(Integer level) { + if (level == null) { + return null; + } + switch (level) { + case 1: + return "鍒濈骇"; + case 2: + return "涓骇"; + case 3: + return "楂樼骇"; + default: + return null; + } + } + + @Override + public List getStudyListByCourse(Long courseId) { + List studyCenterList = tbStudyCenterMapper.getStudyListByCourse(courseId); + if (!studyCenterList.isEmpty()){ + for (StudyCenterVO studyCenterVO : studyCenterList) { + Long studyCenterId = studyCenterVO.getStudyCenterId(); + List tbStudyCenterTeacherList = tbStudyCenterTeacherMapper.getByStudyCenterId(studyCenterId); + + List subList=new ArrayList<>(); + // 鎴彇鍓嶄笁涓厓绱 + if (tbStudyCenterTeacherList.size()>3){ + subList = tbStudyCenterTeacherList.subList(0, 3); + }else { + subList = tbStudyCenterTeacherList; + } + studyCenterVO.setStudyCenterTeacherList(BeanUtil.copyToList(subList, StudyCenterTeacherVO.class)); + } + } + return studyCenterList; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamSimulateInfoServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamSimulateInfoServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..5f7ebf0e5740ae8a2f95fc65d8fee9708e3a2e06 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamSimulateInfoServiceImpl.java @@ -0,0 +1,494 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.hezhi.domain.*; +import com.ruoyi.hezhi.domain.dto.MemberExamSimulateAllDTO; +import com.ruoyi.hezhi.mapper.*; +import com.ruoyi.hezhi.service.ITbExamService; +import com.ruoyi.hezhi.service.ITbExamSimulateInfoService; +import com.ruoyi.hezhi.service.ITbExamSubjectAnswerService; +import com.ruoyi.hezhi.service.ITbExamSubjectService; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.ibatis.session.ExecutorType; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-11-11 + */ +@Service +public class TbExamSimulateInfoServiceImpl implements ITbExamSimulateInfoService +{ + @Autowired + private TbExamSimulateInfoMapper tbExamSimulateInfoMapper; + @Autowired + private TbSubjectWarehouseClassMapper tbSubjectWarehouseClassMapper; + @Autowired + private TbExamSubjectSimulateMapper tbExamSubjectSimulateMapper; + @Autowired + private TbExamMapper examMapper; + @Autowired + private TbExamBatchMapper tbExamBatchMapper; + @Autowired + private TbExamSubjectMapper tbExamSubjectMapper; + @Autowired + private TbMemberExamSimulateAllMapper tbMemberExamSimulateAllMapper; + @Autowired + private TbMemberSubjectCollectMapper tbMemberSubjectCollectMapper; + @Autowired + private ThreadPoolTaskExecutor threadPoolTaskExecutor; + @Autowired + private ITbExamSubjectService tbExamSubjectService; + @Autowired + private ITbExamService examService; + @Autowired + private ITbExamSubjectAnswerService tbExamSubjectAnswerService; + @Autowired + private SqlSessionFactory sqlSessionFactory; + @Autowired + private TbExamRegistrationMapper tbExamRegistrationMapper; + + /** + * 鏌ヨ鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + * + * @param examSimulateInfoId 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏涓婚敭 + * @return 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + */ + @Override + public TbExamSimulateInfo selectTbExamSimulateInfoByExamSimulateInfoId(Long examSimulateInfoId) + { + return tbExamSimulateInfoMapper.selectTbExamSimulateInfoByExamSimulateInfoId(examSimulateInfoId); + } + + /** + * 鏌ヨ鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏鍒楄〃 + * + * @param tbExamSimulateInfo 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + * @return 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + */ + @Override + public List selectTbExamSimulateInfoList(TbExamSimulateInfo tbExamSimulateInfo) + { + return tbExamSimulateInfoMapper.selectTbExamSimulateInfoList(tbExamSimulateInfo); + } + + /** + * 鏂板鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + * + * @param tbExamSimulateInfo 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + * @return 缁撴灉 + */ + @Override + public int insertTbExamSimulateInfo(TbExamSimulateInfo tbExamSimulateInfo) + { + tbExamSimulateInfo.setCreateTime(DateUtils.getNowDate()); + return tbExamSimulateInfoMapper.insertTbExamSimulateInfo(tbExamSimulateInfo); + } + + /** + * 淇敼鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + * + * @param tbExamSimulateInfo 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + * @return 缁撴灉 + */ + @Override + public int updateTbExamSimulateInfo(TbExamSimulateInfo tbExamSimulateInfo) + { + tbExamSimulateInfo.setUpdateTime(DateUtils.getNowDate()); + return tbExamSimulateInfoMapper.updateTbExamSimulateInfo(tbExamSimulateInfo); + } + + /** + * 鎵归噺鍒犻櫎鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 + * + * @param examSimulateInfoIds 闇瑕佸垹闄ょ殑鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbExamSimulateInfoByExamSimulateInfoIds(Long[] examSimulateInfoIds) + { + return tbExamSimulateInfoMapper.deleteTbExamSimulateInfoByExamSimulateInfoIds(examSimulateInfoIds); + } + + /** + * 鍒犻櫎鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏淇℃伅 + * + * @param examSimulateInfoId 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbExamSimulateInfoByExamSimulateInfoId(Long examSimulateInfoId) + { + return tbExamSimulateInfoMapper.deleteTbExamSimulateInfoByExamSimulateInfoId(examSimulateInfoId); + } + + /** + * 鏌ヨ妯℃嫙鑰冭瘯鑰冪敓鍙婅冭瘯淇℃伅 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public Map getSimulateSubjectAllInfo(Map params) { + long memberUserId = Long.parseLong(params.get("memberUserId").toString()); + long courseId = Long.parseLong(params.get("courseId").toString()); + long subjectWarehouseClassId = Long.parseLong(params.get("subjectWarehouseClassId").toString()); + Map simulateInfo = tbExamSimulateInfoMapper.getSimulateSubjectAllInfo(params); + + // 鏌ヨ妯℃嫙鑰冭瘯棰樼洰 + List examSubjectList = tbExamSubjectMapper.getExamSubjectList(null, subjectWarehouseClassId); + + if (!examSubjectList.isEmpty()) { + TbSubjectWarehouseClass subjectWarehouseClass = tbSubjectWarehouseClassMapper.selectTbSubjectWarehouseClassBySubjectWarehouseClassId(subjectWarehouseClassId); + + TbExamSimulateInfo examSimulateInfo = new TbExamSimulateInfo(); + examSimulateInfo.setExamPlatformNumber(String.valueOf(new Random().nextInt(999) + 1));// 鐢熸垚1鍒999鐨勯殢鏈烘暟 + examSimulateInfo.setMemberUserId(memberUserId); + examSimulateInfo.setSubjectWarehouseClassId(subjectWarehouseClassId); + examSimulateInfo.setExamType(2); + examSimulateInfo.setExamMinute(subjectWarehouseClass.getSimulationExamMinute()); + + String nowTime = DateUtils.getTime(); + examSimulateInfo.setStartTime(nowTime); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + try { + calendar.setTime(sdf.parse(nowTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + calendar.add(Calendar.MINUTE, subjectWarehouseClass.getSimulationExamMinute()); // 娣诲姞鍒嗛挓鏁 + examSimulateInfo.setEndTime(sdf.format(calendar.getTime())); + examSimulateInfo.setExamStatus(1); + examSimulateInfo.setCompleteStatus(1); + + examSimulateInfo.setTotalScore(subjectWarehouseClass.getTotalScore()); + examSimulateInfo.setPassScore(subjectWarehouseClass.getPassScore()); + if (simulateInfo == null) { + examSimulateInfo.setCreateTime(DateUtils.getNowDate()); + tbExamSimulateInfoMapper.insertTbExamSimulateInfo(examSimulateInfo); + } else { + + // 瀹氫箟鏃堕棿鏍煎紡 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + // 鏃堕棿瀛楃涓 + String endTime = simulateInfo.get("endTime").toString(); + // 灏嗗瓧绗︿覆杞崲涓篋ate + Date timeToCompare = null; + try { + timeToCompare = dateFormat.parse(endTime); + } catch (ParseException e) { + e.printStackTrace(); + } + // 鑾峰彇褰撳墠鏃堕棿 + Date currentTime = new Date(); + + // 姣旇緝鏃堕棿 + if (currentTime.after(timeToCompare)) { + TbExamSimulateInfo updateExamSimulateInfo = new TbExamSimulateInfo(); + updateExamSimulateInfo.setExamSimulateInfoId(Long.parseLong(simulateInfo.get("examSimulateInfoId").toString())); + updateExamSimulateInfo.setExamStatus(2); + updateExamSimulateInfo.setCompleteStatus(2); + tbExamSimulateInfoMapper.updateTbExamSimulateInfo(updateExamSimulateInfo); + updateExamSimulateInfo.setCreateTime(DateUtils.getNowDate()); + tbExamSimulateInfoMapper.insertTbExamSimulateInfo(examSimulateInfo); + } + } + + } + + return tbExamSimulateInfoMapper. getSimulateSubjectAllInfo(params); + } + + /** + * 鑰冭瘯浜ゅ嵎 + * + * @param memberExamSimulateAllDTO + * @return ok + */ + @Transactional(rollbackFor = Exception.class) + @Override + public AjaxResult subjectExamSubmit(MemberExamSimulateAllDTO memberExamSimulateAllDTO) { + Date endTime = new Date(); + TbExamSimulateInfo examSimulateInfo = tbExamSimulateInfoMapper.selectTbExamSimulateInfoByExamSimulateInfoId(memberExamSimulateAllDTO.getExamSimulateInfoId()); + if (examSimulateInfo == null) { + return AjaxResult.error("鑰冭瘯璇︽儏寮傚父"); + } + if (examSimulateInfo.getPassStatus() != 0) { + return AjaxResult.error("宸蹭氦鍗凤紝璇峰嬁閲嶅鎻愪氦"); + } + // 鎬诲垎 + BigDecimal countTotalScore = tbExamSimulateInfoMapper.countTotalScore(memberExamSimulateAllDTO.getExamSimulateInfoId()); + // 鍙婃牸鍒 + BigDecimal passScore = examSimulateInfo.getPassScore(); + int submitStatus = 1; + if (examSimulateInfo.getExamType() == 1) { + submitStatus = memberExamSimulateAllDTO.getSubmitStatus(); + } + + + TbExamSimulateInfo simulateInfo = new TbExamSimulateInfo(); + simulateInfo.setExamSimulateInfoId(examSimulateInfo.getExamSimulateInfoId()); + simulateInfo.setCompleteStatus(2); + simulateInfo.setExamStatus(2); + simulateInfo.setSubmitStatus(submitStatus); + simulateInfo.setCompleteScore(countTotalScore); + simulateInfo.setCompleteTime(DateUtils.getTime()); + //鏌ュ嚭鑰冭瘯鎶ュ悕琛ㄥ搴旂殑鏁版嵁 + TbExamRegistration tbExamRegistration = tbExamRegistrationMapper.selectTbExamRegistrationByUserIdExamId(examSimulateInfo.getMemberUserId(), examSimulateInfo.getExamId()); + + + if (countTotalScore.compareTo(passScore) >= 0) { + simulateInfo.setPassStatus(1); + if (ObjectUtils.isNotEmpty(tbExamRegistration)) {//鑳芥煡鍑烘潵璇存槑鏄寮忚冭瘯锛屽啀淇敼鑰冭瘯鎶ュ悕鐨勭姸鎬侊紝鏌ヤ笉鍑鸿鏄庢槸妯℃嫙鑰冭瘯锛屼笉淇敼 + tbExamRegistration.setExamineStatus(1); + } + + } else { + simulateInfo.setPassStatus(2); + if (ObjectUtils.isNotEmpty(tbExamRegistration)) { + tbExamRegistration.setExamineStatus(2); + } + } + if (ObjectUtils.isNotEmpty(tbExamRegistration)) { + tbExamRegistrationMapper.updateTbExamRegistration(tbExamRegistration); + } + tbExamSimulateInfoMapper.updateTbExamSimulateInfo(simulateInfo); + TbExamSimulateInfo tbExamSimulateInfo = tbExamSimulateInfoMapper.selectTbExamSimulateInfoByExamSimulateInfoIdRetain(memberExamSimulateAllDTO.getExamSimulateInfoId()); + //璁$畻鑰楁椂 + if (StringUtils.isNotNull(tbExamSimulateInfo)&&StringUtils.isNotEmpty(tbExamSimulateInfo.getStartTime())) { + String usageTime = DateUtils.timeDistanceSecond(endTime, DateUtils.parseDate(tbExamSimulateInfo.getStartTime())); + tbExamSimulateInfo.setUsageTime(usageTime); + } + return AjaxResult.success().put("data",tbExamSimulateInfo); + } + + /** + * 浜ゅ嵎 杞崲绛旈鍗 + * @param memberUserId 鐢ㄦ埛DI + * @param examSimulateInfoId 鑰冪敓ID + * @param exam 鑰冭瘯 + * @param memberExamSimulateAllList 绛旈鍒楄〃 + * @return 缁撴灉 + */ + public List transferMemberExamSimulateAll(Long memberUserId, Long examSimulateInfoId, TbExam exam, List memberExamSimulateAllList){ + ArrayList resultList = new ArrayList<>(); + if (!memberExamSimulateAllList.isEmpty()){ + for (MemberExamSimulateAllDTO examSimulateAllDTO : memberExamSimulateAllList) { + Long examSubjectId = examSimulateAllDTO.getExamSubjectId(); + String myAnswer = examSimulateAllDTO.getMyAnswer(); + Long location = examSimulateAllDTO.getLocation(); + + // 鏌ヨ褰撳墠棰樼洰 + TbExamSubject tbExamSubject = tbExamSubjectService.selectTbExamSubjectByExamSubjectId(examSubjectId); + + HashMap params = new HashMap<>(); + params.put("memberUserId", memberUserId); + params.put("examSubjectId", examSubjectId); + + // 姝g‘绛旀 + String answer = tbExamSubject.getAnswer(); + if (tbExamSubject.getSubjectType() == 3) { + if ("姝g‘".equals(answer)) { + answer = "A"; + } + if ("閿欒".equals(answer)) { + answer = "B"; + } + } + + BigDecimal score = new BigDecimal(0); + // 棰樼洰鍒嗘暟 + if (tbExamSubject.getSubjectType() == 1) { + score = exam.getSingleSelectScore(); + } else if (tbExamSubject.getSubjectType() == 2) { + score = exam.getManySelectScore(); + } else if (tbExamSubject.getSubjectType() == 3) { + score = exam.getJudgeScore(); + } else if (tbExamSubject.getSubjectType() == 4) { + score = exam.getDiscussScore(); + } + + TbMemberExamSimulateAll memberExamSimulateAll = new TbMemberExamSimulateAll(); + memberExamSimulateAll.setExamSimulateInfoId(examSimulateInfoId); + memberExamSimulateAll.setExamSubjectId(examSubjectId); + memberExamSimulateAll.setMemberUserId(memberUserId); + memberExamSimulateAll.setLocation(location); + memberExamSimulateAll.setMyAnswer(myAnswer); + memberExamSimulateAll.setAnswer(answer); + memberExamSimulateAll.setSubjectType(tbExamSubject.getSubjectType()); + memberExamSimulateAll.setExamType(1); + + if (tbExamSubject.getSubjectType() != 4) { + if (myAnswer.equals(answer)) { + memberExamSimulateAll.setStatus(1); + memberExamSimulateAll.setScore(score); + } else { + memberExamSimulateAll.setStatus(2); + memberExamSimulateAll.setScore(new BigDecimal(0)); + } + } else { + // 璁鸿堪 + BigDecimal discussScore = tbExamSubjectAnswerService.getDiscussScore(tbExamSubject.getExamSubjectNo(), myAnswer); + if (discussScore.compareTo(score) > 0) { + memberExamSimulateAll.setScore(score); + } else { + memberExamSimulateAll.setScore(discussScore); + } + memberExamSimulateAll.setStatus(3); + } + + + memberExamSimulateAll.setCreateTime(DateUtils.getNowDate()); + memberExamSimulateAll.setDelFlag(0); + resultList.add(memberExamSimulateAll); + } + } + return resultList; + } + + /** + * 璁$畻鎬诲垎 + * + * @param examSimulateInfoId 鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏涓婚敭 + * @return 缁撴灉 + */ + @Override + public BigDecimal countTotalScore(Long examSimulateInfoId) { + return tbExamSimulateInfoMapper.countTotalScore(examSimulateInfoId); + } + + /** + * 鏌ヨ姝e紡鑰冭瘯鑰冪敓鍙婅冭瘯淇℃伅 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public Map getFormalSubjectAllInfo(Map params) { + long memberUserId = Long.parseLong(params.get("memberUserId").toString()); + long examId = Long.parseLong(params.get("examId").toString()); + + Map formalSubjectAllInfo = tbExamSimulateInfoMapper.getFormalSubjectAllInfo(params); + + TbExam tbExam = examMapper.selectTbExamByExamId(examId); + if (tbExam != null && formalSubjectAllInfo == null) { + TbExamSimulateInfo examSimulateInfo = new TbExamSimulateInfo(); + Integer platformNumber = tbExamSimulateInfoMapper.selectMaxExamPlatformNumber(examId); + examSimulateInfo.setExamPlatformNumber(String.valueOf(platformNumber + 1)); + examSimulateInfo.setMemberUserId(memberUserId); + examSimulateInfo.setExamId(examId); + examSimulateInfo.setExamType(1); + examSimulateInfo.setExamMinute(tbExam.getExamMinute()); + examSimulateInfo.setTotalScore(tbExam.getTotalScore()); + examSimulateInfo.setPassScore(tbExam.getPassScore()); + examSimulateInfo.setExamStatus(1); + examSimulateInfo.setCompleteStatus(1); + examSimulateInfo.setIsAgain(0); + examSimulateInfo.setCreateTime(DateUtils.getNowDate()); + tbExamSimulateInfoMapper.insertTbExamSimulateInfo(examSimulateInfo); + } + + return tbExamSimulateInfoMapper.getFormalSubjectAllInfo(params); + } + + /** + * 姝e紡鑰冭瘯琛ヨ + * + * @param memberExamSimulateAllDTO + * @return ok + */ + @Override + public AjaxResult subjectFormalAgain(MemberExamSimulateAllDTO memberExamSimulateAllDTO) { + long memberUserId = memberExamSimulateAllDTO.getMemberUserId(); + long examId = memberExamSimulateAllDTO.getExamId(); + + HashMap params = new HashMap<>(); + params.put("memberUserId", memberUserId); + params.put("examId", examId); + Map formalSubjectAllInfo = tbExamSimulateInfoMapper.getFormalSubjectAllInfo(params); + + if (formalSubjectAllInfo == null) { + return AjaxResult.error("鏈繘琛岃冭瘯锛屼笉鍏佽琛ヨ"); + } + if (!"2".equals(formalSubjectAllInfo.get("passStatus").toString())) { + return AjaxResult.error("鎮ㄥ凡閫氳繃锛屾棤闇琛ヨ"); + } + if ("1".equals(formalSubjectAllInfo.get("isAgain").toString())) { + //AjaxResult.error("鎮ㄧ殑琛ヨ冩鏁板凡鐢ㄥ畬锛岃绾夸笅鑱旂郴"+formalSubjectAllInfo.get("teacherName").toString()+formalSubjectAllInfo.get("teacherPhone").toString()); + Map remap = new HashMap<>(); + remap.put("agencyName",formalSubjectAllInfo.get("agencyName").toString());//agencyName + remap.put("teacherName",formalSubjectAllInfo.get("teacherName").toString());//teacherName + remap.put("teacherPhone",formalSubjectAllInfo.get("teacherPhone").toString());//teacherPhone + remap.put("reason","鎮ㄧ殑琛ヨ冩鏁板凡鐢ㄥ畬"); + return AjaxResult.success(remap); + } + + TbExam tbExam = examMapper.selectTbExamByExamId(examId); + if (tbExam != null) { + Integer isAgain = MapUtils.getInteger(formalSubjectAllInfo, "isAgain"); + if (isAgain == 0){ + TbExamRegistration tbExamRegistration = tbExamRegistrationMapper.selectTbExamRegistrationByUserIdExamId(memberUserId, examId); + List enableByExamId = tbExamBatchMapper.getEnableByExamId(examId, tbExam.getExamBatchEarly()); + if (!enableByExamId.isEmpty()){ + List collect = enableByExamId.stream().filter(item -> item.getBatchIndex() > tbExamRegistration.getExamBatchIndex()).collect(Collectors.toList()); + if (!collect.isEmpty()){ + TbExamBatch tbExamBatch = collect.get(0); + tbExamRegistration.setExamBatchIndex(tbExamBatch.getBatchIndex().intValue()); + tbExamRegistration.setRegistrationBatch(tbExamBatch.getExamBatch()); + tbExamRegistrationMapper.updateTbExamRegistration(tbExamRegistration); + + isAgain = 1; + }else{ + Map remap = new HashMap<>(); + remap.put("agencyName",formalSubjectAllInfo.get("agencyName").toString());//agencyName + remap.put("teacherName",formalSubjectAllInfo.get("teacherName").toString());//teacherName + remap.put("teacherPhone",formalSubjectAllInfo.get("teacherPhone").toString());//teacherPhone + remap.put("reason","璇ヨ冭瘯鏆傛棤涓嬩竴鎵规"); + return AjaxResult.success(remap); + } + }else{ + Map remap = new HashMap<>(); + remap.put("agencyName",formalSubjectAllInfo.get("agencyName").toString());//agencyName + remap.put("teacherName",formalSubjectAllInfo.get("teacherName").toString());//teacherName + remap.put("teacherPhone",formalSubjectAllInfo.get("teacherPhone").toString());//teacherPhone + remap.put("reason","璇ヨ冭瘯鏆傛棤涓嬩竴鎵规"); + return AjaxResult.success(remap); + } + } + + TbExamSimulateInfo examSimulateInfo = new TbExamSimulateInfo(); + Integer platformNumber = tbExamSimulateInfoMapper.selectMaxExamPlatformNumber(examId); + examSimulateInfo.setExamPlatformNumber(String.valueOf(platformNumber + 1)); + examSimulateInfo.setMemberUserId(memberUserId); + examSimulateInfo.setExamId(examId); + examSimulateInfo.setExamType(1); + examSimulateInfo.setExamMinute(tbExam.getExamMinute()); + examSimulateInfo.setTotalScore(tbExam.getTotalScore()); + examSimulateInfo.setPassScore(tbExam.getPassScore()); + examSimulateInfo.setExamStatus(1); + examSimulateInfo.setCompleteStatus(1); + examSimulateInfo.setIsAgain(isAgain); + examSimulateInfo.setCreateTime(DateUtils.getNowDate()); + tbExamSimulateInfoMapper.insertTbExamSimulateInfo(examSimulateInfo); + } + return AjaxResult.success(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamSubjectAnswerServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamSubjectAnswerServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..79336867a8cc97c303e2210c4a07caa95b2e430f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamSubjectAnswerServiceImpl.java @@ -0,0 +1,166 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbExamSubjectAnswer; +import com.ruoyi.hezhi.mapper.TbExamSubjectAnswerMapper; +import com.ruoyi.hezhi.service.ITbExamSubjectAnswerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + +/** + * 鑰冭瘯棰樼洰绛旀閫夐」Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-11-04 + */ +@Service +public class TbExamSubjectAnswerServiceImpl implements ITbExamSubjectAnswerService +{ + @Autowired + private TbExamSubjectAnswerMapper tbExamSubjectAnswerMapper; + + /** + * 鏌ヨ鑰冭瘯棰樼洰绛旀閫夐」 + * + * @param examSubjectAnswerId 鑰冭瘯棰樼洰绛旀閫夐」涓婚敭 + * @return 鑰冭瘯棰樼洰绛旀閫夐」 + */ + @Override + public TbExamSubjectAnswer selectTbExamSubjectAnswerByExamSubjectAnswerId(Long examSubjectAnswerId) + { + return tbExamSubjectAnswerMapper.selectTbExamSubjectAnswerByExamSubjectAnswerId(examSubjectAnswerId); + } + + /** + * 鏌ヨ鑰冭瘯棰樼洰绛旀閫夐」鍒楄〃 + * + * @param tbExamSubjectAnswer 鑰冭瘯棰樼洰绛旀閫夐」 + * @return 鑰冭瘯棰樼洰绛旀閫夐」 + */ + @Override + public List selectTbExamSubjectAnswerList(TbExamSubjectAnswer tbExamSubjectAnswer) + { + return tbExamSubjectAnswerMapper.selectTbExamSubjectAnswerList(tbExamSubjectAnswer); + } + + /** + * 鏂板鑰冭瘯棰樼洰绛旀閫夐」 + * + * @param tbExamSubjectAnswer 鑰冭瘯棰樼洰绛旀閫夐」 + * @return 缁撴灉 + */ + @Override + public int insertTbExamSubjectAnswer(TbExamSubjectAnswer tbExamSubjectAnswer) + { + tbExamSubjectAnswer.setCreateTime(DateUtils.getNowDate()); + return tbExamSubjectAnswerMapper.insertTbExamSubjectAnswer(tbExamSubjectAnswer); + } + + /** + * 淇敼鑰冭瘯棰樼洰绛旀閫夐」 + * + * @param tbExamSubjectAnswer 鑰冭瘯棰樼洰绛旀閫夐」 + * @return 缁撴灉 + */ + @Override + public int updateTbExamSubjectAnswer(TbExamSubjectAnswer tbExamSubjectAnswer) + { + tbExamSubjectAnswer.setUpdateTime(DateUtils.getNowDate()); + return tbExamSubjectAnswerMapper.updateTbExamSubjectAnswer(tbExamSubjectAnswer); + } + + /** + * 鎵归噺鍒犻櫎鑰冭瘯棰樼洰绛旀閫夐」 + * + * @param examSubjectAnswerIds 闇瑕佸垹闄ょ殑鑰冭瘯棰樼洰绛旀閫夐」涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbExamSubjectAnswerByExamSubjectAnswerIds(Long[] examSubjectAnswerIds) + { + return tbExamSubjectAnswerMapper.deleteTbExamSubjectAnswerByExamSubjectAnswerIds(examSubjectAnswerIds); + } + + /** + * 鍒犻櫎鑰冭瘯棰樼洰绛旀閫夐」淇℃伅 + * + * @param examSubjectAnswerId 鑰冭瘯棰樼洰绛旀閫夐」涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbExamSubjectAnswerByExamSubjectAnswerId(Long examSubjectAnswerId) + { + return tbExamSubjectAnswerMapper.deleteTbExamSubjectAnswerByExamSubjectAnswerId(examSubjectAnswerId); + } + + /** + * 鎵归噺鏂板鑰冭瘯棰樼洰绛旀閫夐」 + * + * @param list 鑰冭瘯棰樼洰绛旀閫夐」 + * @return 缁撴灉 + */ + @Override + public int batchInsertTbExamSubjectAnswer(List list) { + return tbExamSubjectAnswerMapper.batchInsertTbExamSubjectAnswer(list); + } + + /** + * 鏌ヨ绛旀ID闆嗗悎鍜岀瓟妗堥泦鍚 + * + * @param examSubjectId 鑰冭瘯棰樼洰涓婚敭ID + * @param examSubjectNo 鑰冭瘯棰樼洰缂栧彿 + * @return 缁撴灉 + */ + @Override + public Map selectAnswerIdsAndAnswer(Long examSubjectId, String examSubjectNo) { + return tbExamSubjectAnswerMapper.selectAnswerIdsAndAnswer(examSubjectId, examSubjectNo); + } + + /** + * 鏌ヨ鑰冭瘯棰樼洰绛旀閫夐」鍒楄〃锛堣冭瘯棰樼洰缂栧彿锛 + * + * @param examSubjectNo 鑰冭瘯棰樼洰缂栧彿 + * @return 鑰冭瘯棰樼洰绛旀閫夐」闆嗗悎 + */ + @Override + public List selectTbExamSubjectAnswerListBy(String examSubjectNo) { + return tbExamSubjectAnswerMapper.selectTbExamSubjectAnswerListBy(examSubjectNo); + } + + /** + * 鎵归噺鍒犻櫎鑰冭瘯棰樼洰绛旀閫夐」淇℃伅锛堣冭瘯棰樼洰缂栧彿锛 + * + * @param examSubjectNo 鑰冭瘯棰樼洰缂栧彿 + * @return 缁撴灉 + */ + @Override + public int batchDeleteTbExamSubjectAnswerByExamSubjectNo(String examSubjectNo) { + return tbExamSubjectAnswerMapper.batchDeleteTbExamSubjectAnswerByExamSubjectNo(examSubjectNo); + } + + /** + * 璁鸿堪棰樺垎鏁 + * + * @param examSubjectNo 鑰冭瘯棰樼洰缂栧彿 + * @param myAnswer 绛旀 + * @return 缁撴灉 + */ + @Override + public BigDecimal getDiscussScore(String examSubjectNo, String myAnswer) { + BigDecimal score = new BigDecimal(0); + List examSubjectAnswerList = tbExamSubjectAnswerMapper.selectTbExamSubjectAnswerListBy(examSubjectNo); + if (!"".equals(myAnswer) && !examSubjectAnswerList.isEmpty()) { + for (TbExamSubjectAnswer subjectAnswer : examSubjectAnswerList) { + String subjectName = subjectAnswer.getSubjectName(); + if (myAnswer.toLowerCase().contains(subjectName.toLowerCase())) { + score = score.add(subjectAnswer.getScore()); + } + } + } + return score; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamSubjectFormalServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamSubjectFormalServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..adf5bbbf0c27b930e6d5f7532352f34d69056ce5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamSubjectFormalServiceImpl.java @@ -0,0 +1,258 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbExam; +import com.ruoyi.hezhi.domain.TbExamSubject; +import com.ruoyi.hezhi.domain.TbExamSubjectFormal; +import com.ruoyi.hezhi.mapper.TbExamSubjectAnswerMapper; +import com.ruoyi.hezhi.mapper.TbExamSubjectFormalMapper; +import com.ruoyi.hezhi.mapper.TbExamSubjectMapper; +import com.ruoyi.hezhi.service.ITbExamSubjectFormalService; +import org.apache.commons.collections4.MapUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.*; +import java.util.concurrent.CountDownLatch; + +/** + * 姝e紡鑰冭瘯棰樼洰Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-11-13 + */ +@Service +public class TbExamSubjectFormalServiceImpl implements ITbExamSubjectFormalService +{ + @Autowired + private TbExamSubjectFormalMapper tbExamSubjectFormalMapper; + @Autowired + private TbExamSubjectMapper tbExamSubjectMapper; + @Autowired + private TbExamSubjectAnswerMapper examSubjectAnswerMapper; + @Autowired + private ThreadPoolTaskExecutor threadPoolTaskExecutor; + + /** + * 鏌ヨ姝e紡鑰冭瘯棰樼洰 + * + * @param examSubjectFormalId 姝e紡鑰冭瘯棰樼洰涓婚敭 + * @return 姝e紡鑰冭瘯棰樼洰 + */ + @Override + public TbExamSubjectFormal selectTbExamSubjectFormalByExamSubjectFormalId(Long examSubjectFormalId) + { + return tbExamSubjectFormalMapper.selectTbExamSubjectFormalByExamSubjectFormalId(examSubjectFormalId); + } + + /** + * 鏌ヨ姝e紡鑰冭瘯棰樼洰鍒楄〃 + * + * @param tbExamSubjectFormal 姝e紡鑰冭瘯棰樼洰 + * @return 姝e紡鑰冭瘯棰樼洰 + */ + @Override + public List selectTbExamSubjectFormalList(TbExamSubjectFormal tbExamSubjectFormal) + { + return tbExamSubjectFormalMapper.selectTbExamSubjectFormalList(tbExamSubjectFormal); + } + + /** + * 鏂板姝e紡鑰冭瘯棰樼洰 + * + * @param tbExamSubjectFormal 姝e紡鑰冭瘯棰樼洰 + * @return 缁撴灉 + */ + @Override + public int insertTbExamSubjectFormal(TbExamSubjectFormal tbExamSubjectFormal) + { + tbExamSubjectFormal.setCreateTime(DateUtils.getNowDate()); + return tbExamSubjectFormalMapper.insertTbExamSubjectFormal(tbExamSubjectFormal); + } + + /** + * 淇敼姝e紡鑰冭瘯棰樼洰 + * + * @param tbExamSubjectFormal 姝e紡鑰冭瘯棰樼洰 + * @return 缁撴灉 + */ + @Override + public int updateTbExamSubjectFormal(TbExamSubjectFormal tbExamSubjectFormal) + { + tbExamSubjectFormal.setUpdateTime(DateUtils.getNowDate()); + return tbExamSubjectFormalMapper.updateTbExamSubjectFormal(tbExamSubjectFormal); + } + + /** + * 鎵归噺鍒犻櫎姝e紡鑰冭瘯棰樼洰 + * + * @param examSubjectFormalIds 闇瑕佸垹闄ょ殑姝e紡鑰冭瘯棰樼洰涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbExamSubjectFormalByExamSubjectFormalIds(Long[] examSubjectFormalIds) + { + return tbExamSubjectFormalMapper.deleteTbExamSubjectFormalByExamSubjectFormalIds(examSubjectFormalIds); + } + + /** + * 鍒犻櫎姝e紡鑰冭瘯棰樼洰淇℃伅 + * + * @param examSubjectFormalId 姝e紡鑰冭瘯棰樼洰涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbExamSubjectFormalByExamSubjectFormalId(Long examSubjectFormalId) + { + return tbExamSubjectFormalMapper.deleteTbExamSubjectFormalByExamSubjectFormalId(examSubjectFormalId); + } + + /** + * 鎵归噺鏂板姝e紡鑰冭瘯棰樼洰 + * + * @param tbExam + * @return 缁撴灉 + */ + @Override + public int batchInsertTbExamSubjectFormalBy(TbExam tbExam) { + Integer singleSelectNum = tbExam.getSingleSelectNum(); + Integer manySelectNum = tbExam.getManySelectNum(); + Integer judgeNum = tbExam.getJudgeNum(); + Integer discussNum = tbExam.getDiscussNum(); + Integer level = tbExam.getLevel(); + + BigDecimal singleSelectScore = tbExam.getSingleSelectScore(); + BigDecimal manySelectScore = tbExam.getManySelectScore(); + BigDecimal judgeScore = tbExam.getJudgeScore(); + BigDecimal discussScore = tbExam.getDiscussScore(); + + int sort = 1; + Date nowDate = DateUtils.getNowDate(); + List insertList = new ArrayList<>(); + if (singleSelectNum > 0) { + HashMap map = new HashMap<>(); + map.put("examId", tbExam.getExamId()); + map.put("subjectType", 1); + map.put("examSubjectNum", singleSelectNum); + map.put("level", level); + map.put("examType", '0'); + List singleSelectList = tbExamSubjectMapper.randomGenerateTbExamSubjectList(map); + if (!singleSelectList.isEmpty()) { + for (TbExamSubject singleSelect : singleSelectList) { + singleSelect.setExamId(tbExam.getExamId()); + singleSelect.setSort(sort); + singleSelect.setScore(singleSelectScore); + singleSelect.setCreateTime(nowDate); + sort ++; + } + insertList.addAll(singleSelectList); + } + } + if (manySelectNum > 0) { + HashMap map = new HashMap<>(); + map.put("examId", tbExam.getExamId()); + map.put("subjectType", 2); + map.put("examSubjectNum", manySelectNum); + map.put("level", level); + map.put("examType", '0'); + List manySelectList = tbExamSubjectMapper.randomGenerateTbExamSubjectList(map); + if (!manySelectList.isEmpty()) { + for (TbExamSubject manySelect : manySelectList) { + manySelect.setExamId(tbExam.getExamId()); + manySelect.setSort(sort); + manySelect.setScore(manySelectScore); + manySelect.setCreateTime(nowDate); + sort ++; + } + insertList.addAll(manySelectList); + } + } + if (judgeNum > 0) { + HashMap map = new HashMap<>(); + map.put("examId", tbExam.getExamId()); + map.put("subjectType", 3); + map.put("examSubjectNum", judgeNum); + map.put("level", level); + map.put("examType", '0'); + List judgeList = tbExamSubjectMapper.randomGenerateTbExamSubjectList(map); + if (!judgeList.isEmpty()) { + for (TbExamSubject judge : judgeList) { + judge.setExamId(tbExam.getExamId()); + judge.setSort(sort); + judge.setScore(judgeScore); + judge.setCreateTime(nowDate); + sort ++; + } + insertList.addAll(judgeList); + } + } + if (discussNum > 0) { + HashMap map = new HashMap<>(); + map.put("examId", tbExam.getExamId()); + map.put("subjectType", 4); + map.put("examSubjectNum", discussNum); + map.put("level", level); + map.put("examType", '0'); + List discussList = tbExamSubjectMapper.randomGenerateTbExamSubjectList(map); + if (!discussList.isEmpty()) { + for (TbExamSubject discuss : discussList) { + discuss.setExamId(tbExam.getExamId()); + discuss.setSort(sort); + discuss.setScore(discussScore); + discuss.setCreateTime(nowDate); + sort ++; + } + insertList.addAll(discussList); + } + } + // 鍒犻櫎姝e紡鑰冭瘯棰樼洰 + tbExamSubjectFormalMapper.deleteTbExamSubjectFormalByExamId(tbExam.getExamId()); + if (!insertList.isEmpty()) { + // 鎵归噺鏂板姝e紡鑰冭瘯棰樼洰 + tbExamSubjectFormalMapper.batchInsertTbExamSubjectFormalBy(insertList); + } + return 1; + } + + /** + * 鏌ヨ姝e紡鑰冭瘯鎵鏈夐鐩 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public List> getAllTbExamSubjectFormal(Map params) { + List> list = tbExamSubjectFormalMapper.getAllTbExamSubjectFormal(params); +// if (!list.isEmpty()){ +// try { +// CountDownLatch countDownLatch = new CountDownLatch(list.size()); +// for (Map map : list) { +// threadPoolTaskExecutor.execute(()->{ +// Map examSubjectInfo = tbExamSubjectMapper.getExamSubjectInfo(map); +// // 棰樼洰绫诲瀷锛1-鍗曢夛紝2-澶氶夛紝3-鍒ゆ柇锛4-璁鸿堪锛 +// int subjectType = MapUtils.getInteger(examSubjectInfo, "subjectType"); +// String examSubjectNo = MapUtils.getString(examSubjectInfo, "examSubjectNo"); +// if (subjectType != 4) { +// // 閫夐」鍒楄〃 +// List> subjectSelectList = examSubjectAnswerMapper.selectSelectList(null, examSubjectNo); +// examSubjectInfo.put("subjectSelectList", subjectSelectList); +// } else { +// examSubjectInfo.put("subjectSelectList", null); +// } +// +// // 鏌ヨ绛旀鍒楄〃 +// examSubjectInfo.put("subjectAnswerList", examSubjectAnswerMapper.selectAnswerList(null, examSubjectNo)); +// map.put("examSubjectInfo", examSubjectInfo); +// countDownLatch.countDown(); +// }); +// } +// countDownLatch.await(); +// }catch (Exception e){ +// e.printStackTrace(); +// } +// } + return list; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamSubjectServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamSubjectServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..fc1fbd1c9edfb7d2436c75dac65659a2689fa9a0 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamSubjectServiceImpl.java @@ -0,0 +1,644 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.hezhi.domain.*; +import com.ruoyi.hezhi.domain.vo.TopicImportTemplateVO; +import com.ruoyi.hezhi.mapper.*; +import com.ruoyi.hezhi.service.ITbExamSubjectService; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.ibatis.session.ExecutorType; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.DataValidation; +import org.apache.poi.ss.usermodel.DataValidationConstraint; +import org.apache.poi.ss.util.CellRangeAddressList; +import org.apache.poi.xssf.usermodel.XSSFDataValidation; +import org.apache.poi.xssf.usermodel.XSSFDataValidationHelper; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.repository.init.ResourceReader; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 鑰冭瘯棰樼洰Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-11-04 + */ +@Service +public class TbExamSubjectServiceImpl implements ITbExamSubjectService { + @Autowired + private TbExamSubjectMapper tbExamSubjectMapper; + @Autowired + private TbExamSubjectAnswerMapper examSubjectAnswerMapper; + @Autowired + private TbExamCourseMapper tbExamCourseMapper; + @Resource + private TbSubjectWarehouseClassMapper tbSubjectWarehouseClassMapper; + @Resource + private TbExamMapper tbExamMapper; + @Resource + private SqlSessionFactory sqlSessionFactory; + @Resource + private TbExamSubjectFormalMapper tbExamSubjectFormalMapper; + @Resource + private TbMemberSubjectAllMapper tbMemberSubjectAllMapper; + + /** + * 鏌ヨ鑰冭瘯棰樼洰 + * + * @param examSubjectId 鑰冭瘯棰樼洰涓婚敭 + * @return 鑰冭瘯棰樼洰 + */ + @Override + public TbExamSubject selectTbExamSubjectByExamSubjectId(Long examSubjectId) { + return tbExamSubjectMapper.selectTbExamSubjectByExamSubjectId(examSubjectId); + } + + /** + * 鏌ヨ鑰冭瘯棰樼洰鍒楄〃 + * + * @param tbExamSubject 鑰冭瘯棰樼洰 + * @return 鑰冭瘯棰樼洰 + */ + @Override + public List selectTbExamSubjectList(TbExamSubject tbExamSubject) { + return tbExamSubjectMapper.selectTbExamSubjectList(tbExamSubject); + } + + /** + * 鏂板鑰冭瘯棰樼洰 + * + * @param tbExamSubject 鑰冭瘯棰樼洰 + * @return 缁撴灉 + */ + @Override + public int insertTbExamSubject(TbExamSubject tbExamSubject) { + tbExamSubject.setCreateTime(DateUtils.getNowDate()); + List examSubjectAnswerList = tbExamSubject.getExamSubjectAnswerList(); + if (CollectionUtils.isNotEmpty(examSubjectAnswerList)) { + if (Constants.ONE.equals(tbExamSubject.getSubjectType())) { + String answer = examSubjectAnswerList.stream().filter(item -> Constants.ONE.equals(item.getIsAnswer())).map(TbExamSubjectAnswer::getSubjectOption).collect(Collectors.joining(",")); + tbExamSubject.setAnswer(answer); + } else if (Constants.TWO.equals(tbExamSubject.getSubjectType())) { + String answer = examSubjectAnswerList.stream().filter(item -> Constants.ONE.equals(item.getIsAnswer())).map(TbExamSubjectAnswer::getSubjectOption).collect(Collectors.joining(",")); + tbExamSubject.setAnswer(answer); + } else if (Constants.FOUR.equals(tbExamSubject.getSubjectType())) { + String answer = examSubjectAnswerList.stream().map(TbExamSubjectAnswer::getSubjectName).collect(Collectors.joining(",")); + tbExamSubject.setAnswer(answer); + } + } + return tbExamSubjectMapper.insertTbExamSubject(tbExamSubject); + } + + /** + * 淇敼鑰冭瘯棰樼洰 + * + * @param tbExamSubject 鑰冭瘯棰樼洰 + * @return 缁撴灉 + */ + @Override + public int updateTbExamSubject(TbExamSubject tbExamSubject) { + tbExamSubject.setUpdateTime(DateUtils.getNowDate()); + List examSubjectAnswerList = tbExamSubject.getExamSubjectAnswerList(); + if (CollectionUtils.isNotEmpty(examSubjectAnswerList)) { + if (Constants.ONE.equals(tbExamSubject.getSubjectType())) { + String answer = examSubjectAnswerList.stream().filter(item -> Constants.ONE.equals(item.getIsAnswer())).map(TbExamSubjectAnswer::getSubjectOption).collect(Collectors.joining(",")); + tbExamSubject.setAnswer(answer); + } else if (Constants.TWO.equals(tbExamSubject.getSubjectType())) { + String answer = examSubjectAnswerList.stream().filter(item -> Constants.ONE.equals(item.getIsAnswer())).map(TbExamSubjectAnswer::getSubjectOption).collect(Collectors.joining(",")); + tbExamSubject.setAnswer(answer); + } else if (Constants.FOUR.equals(tbExamSubject.getSubjectType())) { + String answer = examSubjectAnswerList.stream().map(TbExamSubjectAnswer::getSubjectName).collect(Collectors.joining(",")); + tbExamSubject.setAnswer(answer); + } + } + return tbExamSubjectMapper.updateTbExamSubject(tbExamSubject); + } + + /** + * 鎵归噺鍒犻櫎鑰冭瘯棰樼洰 + * + * @param examSubjectIds 闇瑕佸垹闄ょ殑鑰冭瘯棰樼洰涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbExamSubjectByExamSubjectIds(Long[] examSubjectIds) { + //鏌ョ湅璇ラ鐩槸鍚︾粦瀹氳冭瘯锛屽鏋滄湁鍒欎笉鑳藉垹闄 + StringBuilder stringBuilder = new StringBuilder("鑰冭瘯棰樼洰缂栧彿涓猴細");//杩欏叏閮ㄥ彧鏄冭檻浜嗘寮忚冭瘯锛屾ā鎷熻冭瘯娌℃湁鑰冭檻 + boolean flag = true; + for (Long examSubjectId : examSubjectIds) { + TbExamSubjectFormal params = new TbExamSubjectFormal(); + params.setExamSubjectId(examSubjectId);//鏍规嵁鑰冭瘯棰樼洰缂栧彿鏌ヨ 姝e紡鑰冭瘯棰樼洰瀵硅薄 + List tbExamSubjectFormals = tbExamSubjectFormalMapper.selectTbExamSubjectFormalList(params); + if (ObjectUtils.isNotEmpty(tbExamSubjectFormals)) { + stringBuilder.append(examSubjectId).append(","); + flag = false; + } + } + if (!flag){ + throw new ServiceException(stringBuilder +"宸茬粦瀹氳冭瘯锛屼笉鑳藉垹闄"); + } + return tbExamSubjectMapper.deleteTbExamSubjectByExamSubjectIds(examSubjectIds); + } + + /** + * 鍒犻櫎鑰冭瘯棰樼洰淇℃伅 + * + * @param examSubjectId 鑰冭瘯棰樼洰涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbExamSubjectByExamSubjectId(Long examSubjectId) { + return tbExamSubjectMapper.deleteTbExamSubjectByExamSubjectId(examSubjectId); + } + + /** + * 鏌ヨ鎵鏈夐鐩 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public List> queryByParam(Map params) { + Long courseId = MapUtils.getLong(params, "courseId"); + TbExamCourse examCourseDetail = tbExamCourseMapper.getSubjectWarehouseClassIdByCourseId(courseId); + if (ObjectUtils.isEmpty(examCourseDetail)) { + throw new ServiceException("姝よ绋嬫湭娣诲姞棰樺簱"); + } + params.put("subjectWarehouseClassId", examCourseDetail.getSubjectWarehouseClassId()); + return tbExamSubjectMapper.queryByParam(params); + } + + /** + * 棰樼洰璇︽儏 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public Map getExamSubjectInfo(Map params) { + Map examSubjectInfo = tbExamSubjectMapper.getExamSubjectInfo(params); + if (examSubjectInfo != null) { + // 棰樼洰绫诲瀷锛1-鍗曢夛紝2-澶氶夛紝3-鍒ゆ柇锛4-璁鸿堪锛 + int subjectType = MapUtils.getInteger(examSubjectInfo, "subjectType"); + //缁冧範绫诲瀷 + String practiceType = MapUtils.getString(params, "practiceType"); + String examSubjectNo = examSubjectInfo.get("examSubjectNo").toString(); + if (subjectType != 4) { + // 閫夐」鍒楄〃 + List> subjectSelectList = examSubjectAnswerMapper.selectSelectList(null, examSubjectNo); + examSubjectInfo.put("subjectSelectList", subjectSelectList); + } else { + examSubjectInfo.put("subjectSelectList", null); + } + String memberUserId = MapUtils.getString(params, "memberUserId"); + params.clear(); + params.put("examSubjectId", examSubjectInfo.get("examSubjectId").toString()); + params.put("memberUserId", memberUserId); + params.put("practiceType", practiceType); + //鏌ョ湅鎴戠殑绛旀 + examSubjectInfo.put("myAnswer", tbMemberSubjectAllMapper.queryMemberSubjectAllByParam(params)); + // 鏌ヨ绛旀鍒楄〃 + examSubjectInfo.put("subjectAnswerList", examSubjectAnswerMapper.selectAnswerList(null, examSubjectNo)); + } + + return examSubjectInfo; + } + + /** + * 涓撻」缁冧範锛堣冭瘯鏍囬锛 + * + * @return 缁撴灉 + */ + @Override + public List> getSpecialPracticeList(Map params) { + Long courseId = MapUtils.getLong(params, "courseId"); + TbExamCourse examCourseDetail = tbExamCourseMapper.getSubjectWarehouseClassIdByCourseId(courseId); + if (ObjectUtils.isEmpty(examCourseDetail)) { + throw new ServiceException("绠$悊鍛樻湭涓婁紶璇ラ搴撲俊鎭"); + } + params.put("subjectWarehouseClassId", examCourseDetail.getSubjectWarehouseClassId()); + return tbExamSubjectMapper.getSpecialPracticeList(params); + } + + /** + * 鏌ヨ缁冧範棰樻暟閲 + * + * @return 缁撴灉 + */ + @Override + public List> getPracticeListCount(Map params) { + Long courseId = MapUtils.getLong(params, "courseId"); + TbExamCourse examCourseDetail = tbExamCourseMapper.getSubjectWarehouseClassIdByCourseId(courseId); + if (ObjectUtils.isEmpty(examCourseDetail)) { + throw new ServiceException("绠$悊鍛樻湭涓婁紶璇ラ搴撲俊鎭"); + } + params.put("subjectWarehouseClassId", examCourseDetail.getSubjectWarehouseClassId()); + return tbExamSubjectMapper.getPracticeListCount(params); + } + + /** + * 绔犺妭缁冧範锛堣冭瘯鏍囬锛 + * + * @return 缁撴灉 + */ + @Override + public List> getMajorPracticeList() { + return tbExamSubjectMapper.getMajorPracticeList(); + } + + /** + * 绛涢夋潯浠朵笅鍗曢夈佸閫夈佸垽鏂佽杩伴鐩暟 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public Map getExamSubjectNum(Map params) { + return tbExamSubjectMapper.getExamSubjectNum(params); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String importData(List list, String username) { + if (CollectionUtils.isEmpty(list)) { + throw new ServiceException("瀵煎叆鏁版嵁涓嶈兘涓虹┖"); + } + Map> subjectWarehouseClassMap = new HashMap<>(); + Map> examClassMap = new HashMap<>(); + //鑾峰彇鑰冭瘯闆嗗悎 + List allSubjectWarehouseCalssList = tbSubjectWarehouseClassMapper.getAllSubjectWarehouseCalssList(); + if (!CollectionUtils.isEmpty(allSubjectWarehouseCalssList)) { + subjectWarehouseClassMap = allSubjectWarehouseCalssList.stream().collect(Collectors.groupingBy(TbSubjectWarehouseClass::getName)); + } + //鑾峰彇鑰冭瘯鍒楄〃 + TbExam tbExam = new TbExam(); + tbExam.setDelFlag(Constants.ZERO); + List tbExams = tbExamMapper.selectTbExamList(tbExam); + if (!CollectionUtils.isEmpty(tbExams)) { + examClassMap = tbExams.stream().collect(Collectors.groupingBy(TbExam::getName)); + } + for (int i = 0; i < list.size(); i++) { + TopicImportTemplateVO topicImportTemplateVO = list.get(i); + int rowNum = 2 + i; + if (ObjectUtils.isEmpty(topicImportTemplateVO.getExamType())) { + throw new ServiceException("绗" + rowNum + "琛岀殑鑰冭瘯绫诲瀷涓虹┖"); + } + if (ObjectUtils.isEmpty(topicImportTemplateVO.getAnswer())) { + throw new ServiceException("绗" + rowNum + "琛岀殑绛旀涓虹┖"); + } + if (ObjectUtils.isEmpty(topicImportTemplateVO.getLevel())) { + throw new ServiceException("绗" + rowNum + "琛岀殑绛夌骇涓虹┖"); + } + if (ObjectUtils.isEmpty(topicImportTemplateVO.getScore())) { + throw new ServiceException("绗" + rowNum + "琛岀殑鍒嗘暟涓虹┖"); + } + if (ObjectUtils.isEmpty(topicImportTemplateVO.getQuestion())) { + throw new ServiceException("绗" + rowNum + "琛岀殑棰樼洰涓虹┖"); + } + if (ObjectUtils.isEmpty(topicImportTemplateVO.getSubjectType())) { + throw new ServiceException("绗" + rowNum + "琛岀殑棰樼洰绫诲瀷涓虹┖"); + } + TbExamSubject tbExamSubject = new TbExamSubject(); + tbExamSubject.setExamSubjectNo(IdUtils.fastSimpleUUID()); + if ("3".equals(topicImportTemplateVO.getExamType())) { + tbExamSubject.setExamType("0,1"); + if (ObjectUtils.isEmpty(topicImportTemplateVO.getExamName())) { + throw new ServiceException("绗" + rowNum + "琛岀殑鑰冭瘯涓虹┖"); + } + if (ObjectUtils.isEmpty(topicImportTemplateVO.getSubjectWarehouseClassName())) { + throw new ServiceException("绗" + rowNum + "琛岀殑妯℃嫙鑰冭瘯涓虹┖"); + } + if (!CollectionUtils.isEmpty(examClassMap.get(topicImportTemplateVO.getExamName()))) { + tbExamSubject.setExamId(examClassMap.get(topicImportTemplateVO.getExamName()).get(0).getExamId()); + } + if (!CollectionUtils.isEmpty(subjectWarehouseClassMap.get(topicImportTemplateVO.getSubjectWarehouseClassName()))) { + tbExamSubject.setSubjectWarehouseClassId(subjectWarehouseClassMap.get(topicImportTemplateVO.getSubjectWarehouseClassName()).get(0).getSubjectWarehouseClassId()); + } + } else if ("0".equals(topicImportTemplateVO.getExamType())) { + if (ObjectUtils.isEmpty(topicImportTemplateVO.getExamName())) { + throw new ServiceException("绗" + rowNum + "琛岀殑鑰冭瘯涓虹┖"); + } + if (!CollectionUtils.isEmpty(examClassMap.get(topicImportTemplateVO.getExamName()))) { + tbExamSubject.setExamId(examClassMap.get(topicImportTemplateVO.getExamName()).get(0).getExamId()); + } + tbExamSubject.setExamType(topicImportTemplateVO.getExamType()); + } else if ("1".equals(topicImportTemplateVO.getExamType())) { + if (ObjectUtils.isEmpty(topicImportTemplateVO.getSubjectWarehouseClassName())) { + throw new ServiceException("绗" + rowNum + "琛岀殑妯℃嫙鑰冭瘯涓虹┖"); + } + tbExamSubject.setExamType(topicImportTemplateVO.getExamType()); + + if (!CollectionUtils.isEmpty(subjectWarehouseClassMap.get(topicImportTemplateVO.getSubjectWarehouseClassName()))) { + tbExamSubject.setSubjectWarehouseClassId(subjectWarehouseClassMap.get(topicImportTemplateVO.getSubjectWarehouseClassName()).get(0).getSubjectWarehouseClassId()); + } + } + + tbExamSubject.setQuestion(topicImportTemplateVO.getQuestion()); + tbExamSubject.setSubjectType(topicImportTemplateVO.getSubjectType()); + tbExamSubject.setIsSelected(Constants.ZERO); + tbExamSubject.setAnswer(topicImportTemplateVO.getAnswer()); + tbExamSubject.setSubjectExplain(topicImportTemplateVO.getSubjectExplain()); + tbExamSubject.setScore(topicImportTemplateVO.getScore()); + tbExamSubject.setLevel(topicImportTemplateVO.getLevel()); + tbExamSubject.setType(Constants.ZERO); + tbExamSubject.setExamineStatus(Constants.ONE); + tbExamSubject.setStatus(Constants.ZERO); + tbExamSubject.setDelFlag(Constants.ZERO); + tbExamSubject.setCreateBy(username); + tbExamSubject.setCreateTime(new Date()); + tbExamSubjectMapper.insertTbExamSubject(tbExamSubject); + + //澶勭悊閫夐」 + List answerList = handleOption(tbExamSubject.getExamSubjectNo(), tbExamSubject.getExamSubjectId(), topicImportTemplateVO, username); + + if (!CollectionUtils.isEmpty(answerList)) { + try (SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false)) { + TbExamSubjectAnswerMapper mapper = sqlSession.getMapper(TbExamSubjectAnswerMapper.class); + answerList.forEach(mapper::insertTbExamSubjectAnswer); + sqlSession.commit(); + sqlSession.clearCache(); + } catch (Exception e) { + e.printStackTrace(); + throw new ServiceException("鏁版嵁鎵归噺鏇存柊澶辫触"); + } + } + + } + return "瀵煎叆鎴愬姛"; + } + + @Override + public void importTemplate(HttpServletResponse response) throws IOException { + InputStream inputStream = ResourceReader.class.getClassLoader().getResourceAsStream("testPaperImport/鑰冭瘯璇曞嵎瀵煎叆妯℃澘.xlsx"); + XSSFWorkbook workbook = this.write(inputStream); + + // 灏咵xcel鍐欏叆鍒拌緭鍑烘祦 + try (OutputStream out = response.getOutputStream()) { + workbook.write(out); + // 璁剧疆鍝嶅簲澶 + response.setHeader("Content-Disposition", "attachment; filename=" + "鑰冭瘯璇曞嵎瀵煎叆妯℃澘.xlsx"); + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + } + } + + /** + * 璁剧疆涓嬫媺閫夋暟鎹 + * @param inputStream + * @return + * @throws IOException + */ + public XSSFWorkbook write(InputStream inputStream) throws IOException { + // 浣跨敤 XSSFWorkbook 鏉ュ鐞 .xlsx 鏂囦欢 + XSSFWorkbook workbook = new XSSFWorkbook(inputStream); + XSSFSheet sheet = workbook.getSheetAt(0); // 鑾峰彇绗竴涓伐浣滆〃 + //鑾峰彇鑰冭瘯闆嗗悎 + String[] allSubjectWarehouseClass = new String[] { "" }; + String[] exams = new String[] { "" }; + List allSubjectWarehouseCalssList = tbSubjectWarehouseClassMapper.getAllSubjectWarehouseCalssList(); + if (!CollectionUtils.isEmpty(allSubjectWarehouseCalssList)) { + allSubjectWarehouseClass = allSubjectWarehouseCalssList.stream().map(TbSubjectWarehouseClass::getName).toArray(String[]::new); + } + //鑾峰彇鑰冭瘯鍒楄〃 + TbExam tbExam = new TbExam(); + tbExam.setDelFlag(Constants.ZERO); + List tbExams = tbExamMapper.selectTbExamList(tbExam); + if (!CollectionUtils.isEmpty(tbExams)) { + exams=tbExams.stream().map(TbExam::getName).toArray(String[]::new); + } + + // 鍒涘缓鏁版嵁楠岃瘉鐨勫尯鍩燂紙0-9琛岋紝0鍒楋級 + CellRangeAddressList regions = new CellRangeAddressList(1, 1048575, 1, 1); + CellRangeAddressList regions1 = new CellRangeAddressList(1, 1048575, 2, 2); + + // 浣跨敤 XSSFDataValidationHelper 鍒涘缓鏁版嵁楠岃瘉绾︽潫 + XSSFDataValidationHelper dataValidationHelper = new XSSFDataValidationHelper(sheet); + DataValidationConstraint constraint = dataValidationHelper.createExplicitListConstraint(allSubjectWarehouseClass); + DataValidationConstraint constraint1 = dataValidationHelper.createExplicitListConstraint(exams); + + // 浣跨敤 helper 鍒涘缓鏁版嵁楠岃瘉瀵硅薄 + DataValidation dataValidation = dataValidationHelper.createValidation(constraint, regions); + DataValidation dataValidation1 = dataValidationHelper.createValidation(constraint1, regions1); + + // 灏嗘暟鎹獙璇佽鍒欏簲鐢ㄥ埌宸ヤ綔琛 + sheet.addValidationData(dataValidation); + sheet.addValidationData(dataValidation1); + + return workbook; // 杩斿洖淇敼鍚庣殑宸ヤ綔绨 + } + + /** + * 澶勭悊閫夐」 + * + * @param examSubjectId 棰樼洰id + * @param topicImportTemplateVO 閫夐」 + * @param username 鐢ㄦ埛鍚 + * @return 缁撴灉 + */ + private List handleOption(String examSubjectNo, Long examSubjectId, TopicImportTemplateVO topicImportTemplateVO, String username) { + Map optMap = new HashMap<>(); + String subjectNameA = topicImportTemplateVO.getSubjectNameA(); + String subjectNameB = topicImportTemplateVO.getSubjectNameB(); + String subjectNameC = topicImportTemplateVO.getSubjectNameC(); + String subjectNameD = topicImportTemplateVO.getSubjectNameD(); + String subjectNameE = topicImportTemplateVO.getSubjectNameE(); + String subjectNameF = topicImportTemplateVO.getSubjectNameF(); + String subjectNameG = topicImportTemplateVO.getSubjectNameG(); + if (StringUtils.isNotEmpty(subjectNameA)) { + optMap.put("A", subjectNameA); + } + if (StringUtils.isNotEmpty(subjectNameB)) { + optMap.put("B", subjectNameB); + } + if (StringUtils.isNotEmpty(subjectNameC)) { + optMap.put("C", subjectNameC); + } + if (StringUtils.isNotEmpty(subjectNameD)) { + optMap.put("D", subjectNameD); + } + if (StringUtils.isNotEmpty(subjectNameE)) { + optMap.put("E", subjectNameE); + } + if (StringUtils.isNotEmpty(subjectNameF)) { + optMap.put("F", subjectNameF); + } + if (StringUtils.isNotEmpty(subjectNameG)) { + optMap.put("G", subjectNameG); + } + //绛旀 + List tbExamSubjectAnswers = new ArrayList<>(); + //鍗曢 + if (Constants.ONE.equals(topicImportTemplateVO.getSubjectType())) { + //鏍¢獙閫夐」 + if (optMap.size() < 2) { + throw new ServiceException("鍗曢夌殑閫夐」鏁伴噺蹇呴』澶т簬1"); + } + + for (Map.Entry entry : optMap.entrySet()) { + List answerList = Arrays.asList(topicImportTemplateVO.getAnswer().split(",")); + if (answerList.size() > 1) { + throw new ServiceException("鍗曢夌殑绛旀鏁伴噺鍙兘鏄1涓"); + } + + //澶勭悊閫夐」 + TbExamSubjectAnswer tbExamSubjectAnswer = new TbExamSubjectAnswer(); + tbExamSubjectAnswer.setExamSubjectId(examSubjectId); + tbExamSubjectAnswer.setExamSubjectNo(examSubjectNo); + tbExamSubjectAnswer.setSubjectType(topicImportTemplateVO.getSubjectType()); + tbExamSubjectAnswer.setSubjectOption(entry.getKey()); + tbExamSubjectAnswer.setSubjectName(entry.getValue()); + if (answerList.contains(entry.getKey())) { + tbExamSubjectAnswer.setIsAnswer(Constants.ONE); + } else { + tbExamSubjectAnswer.setIsAnswer(Constants.ZERO); + } + tbExamSubjectAnswer.setScore(topicImportTemplateVO.getScore()); + tbExamSubjectAnswer.setLevel(topicImportTemplateVO.getLevel()); + tbExamSubjectAnswer.setType(Constants.ZERO); + tbExamSubjectAnswer.setExamineStatus(Constants.ONE); + tbExamSubjectAnswer.setSort(Constants.ZERO); + tbExamSubjectAnswer.setStatus(Constants.ZERO); + tbExamSubjectAnswer.setDelFlag(Constants.ZERO); + tbExamSubjectAnswer.setCreateBy(username); + tbExamSubjectAnswer.setCreateTime(new Date()); + tbExamSubjectAnswers.add(tbExamSubjectAnswer); + } + //澶氶 + } else if (Constants.TWO.equals(topicImportTemplateVO.getSubjectType())) { + if (optMap.size() < 2) { + throw new ServiceException("澶氶夌殑閫夐」鏁伴噺蹇呴』澶т簬2"); + } + for (Map.Entry entry : optMap.entrySet()) { + List answerList = Arrays.asList(topicImportTemplateVO.getAnswer().split(",")); + if (answerList.size() < 2) { + throw new ServiceException("澶氶夌殑绛旀鏁伴噺蹇呴』澶т簬1"); + } + //澶勭悊閫夐」 + TbExamSubjectAnswer tbExamSubjectAnswer = new TbExamSubjectAnswer(); + tbExamSubjectAnswer.setExamSubjectId(examSubjectId); + tbExamSubjectAnswer.setExamSubjectNo(examSubjectNo); + tbExamSubjectAnswer.setSubjectType(topicImportTemplateVO.getSubjectType()); + tbExamSubjectAnswer.setSubjectOption(entry.getKey()); + tbExamSubjectAnswer.setSubjectName(entry.getValue()); + if (answerList.contains(entry.getKey())) { + tbExamSubjectAnswer.setIsAnswer(Constants.ONE); + } else { + tbExamSubjectAnswer.setIsAnswer(Constants.ZERO); + } + tbExamSubjectAnswer.setScore(topicImportTemplateVO.getScore()); + tbExamSubjectAnswer.setLevel(topicImportTemplateVO.getLevel()); + tbExamSubjectAnswer.setType(Constants.ZERO); + tbExamSubjectAnswer.setExamineStatus(Constants.ONE); + tbExamSubjectAnswer.setSort(Constants.ZERO); + tbExamSubjectAnswer.setStatus(Constants.ZERO); + tbExamSubjectAnswer.setDelFlag(Constants.ZERO); + tbExamSubjectAnswer.setCreateBy(username); + tbExamSubjectAnswer.setCreateTime(new Date()); + tbExamSubjectAnswers.add(tbExamSubjectAnswer); + } + } else if (Constants.THREE.equals(topicImportTemplateVO.getSubjectType())) { + if (!"姝g‘".equals(topicImportTemplateVO.getAnswer()) && !"閿欒".equals(topicImportTemplateVO.getAnswer())) { + throw new ServiceException("鍒ゆ柇棰樿緭鍏ョ殑绛旀鏈夎锛屽彧鍙緭鍏ユ纭垨鑰呴敊璇"); + } + TbExamSubjectAnswer subjectAnswerA = new TbExamSubjectAnswer(); + subjectAnswerA.setExamSubjectId(examSubjectId); + subjectAnswerA.setExamSubjectNo(examSubjectNo); + subjectAnswerA.setSubjectType(topicImportTemplateVO.getSubjectType()); + subjectAnswerA.setSubjectOption("A"); + subjectAnswerA.setSubjectName("姝g‘"); + if ("姝g‘".equals(topicImportTemplateVO.getAnswer())) { + subjectAnswerA.setIsAnswer(Constants.ONE); + } else { + subjectAnswerA.setIsAnswer(Constants.ZERO); + } + tbExamSubjectAnswers.add(subjectAnswerA); + + TbExamSubjectAnswer subjectAnswerB = new TbExamSubjectAnswer(); + subjectAnswerB.setExamSubjectId(examSubjectId); + subjectAnswerB.setExamSubjectNo(examSubjectNo); + subjectAnswerB.setSubjectType(topicImportTemplateVO.getSubjectType()); + subjectAnswerB.setSubjectOption("B"); + subjectAnswerB.setSubjectName("閿欒"); + if ("閿欒".equals(topicImportTemplateVO.getAnswer())) { + subjectAnswerB.setIsAnswer(Constants.ONE); + } else { + subjectAnswerB.setIsAnswer(Constants.ZERO); + } + tbExamSubjectAnswers.add(subjectAnswerB); + } else if (Constants.FOUR.equals(topicImportTemplateVO.getSubjectType())) { + Map fractionMap = new HashMap<>(); + BigDecimal fractionA = topicImportTemplateVO.getFractionA(); + BigDecimal fractionB = topicImportTemplateVO.getFractionB(); + BigDecimal fractionC = topicImportTemplateVO.getFractionC(); + BigDecimal fractionD = topicImportTemplateVO.getFractionD(); + BigDecimal fractionE = topicImportTemplateVO.getFractionE(); + BigDecimal fractionF = topicImportTemplateVO.getFractionF(); + BigDecimal fractionG = topicImportTemplateVO.getFractionD(); + if (ObjectUtils.isNotEmpty(fractionA)) { + fractionMap.put("A", fractionA); + } + if (ObjectUtils.isNotEmpty(fractionB)) { + fractionMap.put("B", fractionB); + } + if (ObjectUtils.isNotEmpty(fractionC)) { + fractionMap.put("C", fractionC); + } + if (ObjectUtils.isNotEmpty(fractionD)) { + fractionMap.put("D", fractionD); + } + if (ObjectUtils.isNotEmpty(fractionE)) { + fractionMap.put("E", fractionE); + } + if (ObjectUtils.isNotEmpty(fractionF)) { + fractionMap.put("F", fractionF); + } + if (ObjectUtils.isNotEmpty(fractionG)) { + fractionMap.put("G", fractionG); + } + for (Map.Entry entry : optMap.entrySet()) { + //澶勭悊閫夐」 + TbExamSubjectAnswer tbExamSubjectAnswer = new TbExamSubjectAnswer(); + tbExamSubjectAnswer.setExamSubjectId(examSubjectId); + tbExamSubjectAnswer.setExamSubjectNo(examSubjectNo); + tbExamSubjectAnswer.setSubjectType(topicImportTemplateVO.getSubjectType()); + tbExamSubjectAnswer.setSubjectName(entry.getValue()); + tbExamSubjectAnswer.setIsAnswer(Constants.ONE); + BigDecimal fraction = fractionMap.get(entry.getKey()); + if (ObjectUtils.isEmpty(fraction)) { + throw new ServiceException("璁鸿堪棰樼殑绛旀鍒嗘暟涓嶈兘涓虹┖"); + } + tbExamSubjectAnswer.setScore(fraction); + tbExamSubjectAnswer.setLevel(topicImportTemplateVO.getLevel()); + tbExamSubjectAnswer.setType(Constants.ZERO); + tbExamSubjectAnswer.setExamineStatus(Constants.ONE); + tbExamSubjectAnswer.setSort(Constants.ZERO); + tbExamSubjectAnswer.setStatus(Constants.ZERO); + tbExamSubjectAnswer.setDelFlag(Constants.ZERO); + tbExamSubjectAnswer.setCreateBy(username); + tbExamSubjectAnswer.setCreateTime(new Date()); + tbExamSubjectAnswers.add(tbExamSubjectAnswer); + } + } + return tbExamSubjectAnswers; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamSubjectSimulateServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamSubjectSimulateServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..dfc227e244ecbc97a2814c0f4177b35c63b2728e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExamSubjectSimulateServiceImpl.java @@ -0,0 +1,227 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbExamCourse; +import com.ruoyi.hezhi.domain.TbExamSubject; +import com.ruoyi.hezhi.domain.TbExamSubjectSimulate; +import com.ruoyi.hezhi.domain.TbSubjectWarehouseClass; +import com.ruoyi.hezhi.mapper.TbExamCourseMapper; +import com.ruoyi.hezhi.mapper.TbExamSubjectMapper; +import com.ruoyi.hezhi.mapper.TbExamSubjectSimulateMapper; +import com.ruoyi.hezhi.service.ITbExamSubjectSimulateService; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.*; + +/** + * 妯℃嫙鑰冭瘯棰樼洰Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-11-08 + */ +@Service +public class TbExamSubjectSimulateServiceImpl implements ITbExamSubjectSimulateService +{ + @Autowired + private TbExamSubjectSimulateMapper tbExamSubjectSimulateMapper; + @Autowired + private TbExamSubjectMapper tbExamSubjectMapper; + @Autowired + private TbExamCourseMapper tbExamCourseMapper; + + /** + * 鏌ヨ妯℃嫙鑰冭瘯棰樼洰 + * + * @param examSubjectSimulateId 妯℃嫙鑰冭瘯棰樼洰涓婚敭 + * @return 妯℃嫙鑰冭瘯棰樼洰 + */ + @Override + public TbExamSubjectSimulate selectTbExamSubjectSimulateByExamSubjectSimulateId(Long examSubjectSimulateId) + { + return tbExamSubjectSimulateMapper.selectTbExamSubjectSimulateByExamSubjectSimulateId(examSubjectSimulateId); + } + + /** + * 鏌ヨ妯℃嫙鑰冭瘯棰樼洰鍒楄〃 + * + * @param tbExamSubjectSimulate 妯℃嫙鑰冭瘯棰樼洰 + * @return 妯℃嫙鑰冭瘯棰樼洰 + */ + @Override + public List selectTbExamSubjectSimulateList(TbExamSubjectSimulate tbExamSubjectSimulate) + { + return tbExamSubjectSimulateMapper.selectTbExamSubjectSimulateList(tbExamSubjectSimulate); + } + + /** + * 鏂板妯℃嫙鑰冭瘯棰樼洰 + * + * @param tbExamSubjectSimulate 妯℃嫙鑰冭瘯棰樼洰 + * @return 缁撴灉 + */ + @Override + public int insertTbExamSubjectSimulate(TbExamSubjectSimulate tbExamSubjectSimulate) + { + tbExamSubjectSimulate.setCreateTime(DateUtils.getNowDate()); + return tbExamSubjectSimulateMapper.insertTbExamSubjectSimulate(tbExamSubjectSimulate); + } + + /** + * 淇敼妯℃嫙鑰冭瘯棰樼洰 + * + * @param tbExamSubjectSimulate 妯℃嫙鑰冭瘯棰樼洰 + * @return 缁撴灉 + */ + @Override + public int updateTbExamSubjectSimulate(TbExamSubjectSimulate tbExamSubjectSimulate) + { + tbExamSubjectSimulate.setUpdateTime(DateUtils.getNowDate()); + return tbExamSubjectSimulateMapper.updateTbExamSubjectSimulate(tbExamSubjectSimulate); + } + + /** + * 鎵归噺鍒犻櫎妯℃嫙鑰冭瘯棰樼洰 + * + * @param examSubjectSimulateIds 闇瑕佸垹闄ょ殑妯℃嫙鑰冭瘯棰樼洰涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbExamSubjectSimulateByExamSubjectSimulateIds(Long[] examSubjectSimulateIds) + { + return tbExamSubjectSimulateMapper.deleteTbExamSubjectSimulateByExamSubjectSimulateIds(examSubjectSimulateIds); + } + + /** + * 鍒犻櫎妯℃嫙鑰冭瘯棰樼洰淇℃伅 + * + * @param examSubjectSimulateId 妯℃嫙鑰冭瘯棰樼洰涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbExamSubjectSimulateByExamSubjectSimulateId(Long examSubjectSimulateId) + { + return tbExamSubjectSimulateMapper.deleteTbExamSubjectSimulateByExamSubjectSimulateId(examSubjectSimulateId); + } + + /** + * 鎵归噺鏂板妯℃嫙鑰冭瘯棰樼洰 + * + * @param tbSubjectWarehouseClass + * @return 缁撴灉 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public int batchInsertTbExamSubjectSimulateBy(TbSubjectWarehouseClass tbSubjectWarehouseClass) { + Integer singleSelectNum = tbSubjectWarehouseClass.getSingleSelectNum(); + Integer manySelectNum = tbSubjectWarehouseClass.getManySelectNum(); + Integer judgeNum = tbSubjectWarehouseClass.getJudgeNum(); + Integer discussNum = tbSubjectWarehouseClass.getDiscussNum(); + + BigDecimal singleSelectScore = tbSubjectWarehouseClass.getSingleSelectScore(); + BigDecimal manySelectScore = tbSubjectWarehouseClass.getManySelectScore(); + BigDecimal judgeScore = tbSubjectWarehouseClass.getJudgeScore(); + BigDecimal discussScore = tbSubjectWarehouseClass.getDiscussScore(); + + int sort = 1; + Date nowDate = DateUtils.getNowDate(); + List insertList = new ArrayList<>(); + if (singleSelectNum > 0) { + HashMap map = new HashMap<>(); + map.put("subjectWarehouseClassId", tbSubjectWarehouseClass.getSubjectWarehouseClassId()); + map.put("subjectType", 1); + map.put("examSubjectNum", singleSelectNum); + map.put("examType", '1'); + List singleSelectList = tbExamSubjectMapper.randomGenerateTbExamSubjectList(map); + if (!singleSelectList.isEmpty()) { + for (TbExamSubject singleSelect : singleSelectList) { + singleSelect.setSort(sort); + singleSelect.setScore(singleSelectScore); + singleSelect.setCreateTime(nowDate); + sort ++; + } + insertList.addAll(singleSelectList); + } + } + if (manySelectNum > 0) { + HashMap map = new HashMap<>(); + map.put("subjectWarehouseClassId", tbSubjectWarehouseClass.getSubjectWarehouseClassId()); + map.put("subjectType", 2); + map.put("examSubjectNum", manySelectNum); + map.put("examType", '1'); + List manySelectList = tbExamSubjectMapper.randomGenerateTbExamSubjectList(map); + if (!manySelectList.isEmpty()) { + for (TbExamSubject manySelect : manySelectList) { + manySelect.setSort(sort); + manySelect.setScore(manySelectScore); + manySelect.setCreateTime(nowDate); + sort ++; + } + insertList.addAll(manySelectList); + } + } + if (judgeNum > 0) { + HashMap map = new HashMap<>(); + map.put("subjectWarehouseClassId", tbSubjectWarehouseClass.getSubjectWarehouseClassId()); + map.put("subjectType", 3); + map.put("examSubjectNum", judgeNum); + map.put("examType", '1'); + List judgeList = tbExamSubjectMapper.randomGenerateTbExamSubjectList(map); + if (!judgeList.isEmpty()) { + for (TbExamSubject judge : judgeList) { + judge.setSort(sort); + judge.setScore(judgeScore); + judge.setCreateTime(nowDate); + sort ++; + } + insertList.addAll(judgeList); + } + } + if (discussNum > 0) { + HashMap map = new HashMap<>(); + map.put("subjectWarehouseClassId", tbSubjectWarehouseClass.getSubjectWarehouseClassId()); + map.put("subjectType", 4); + map.put("examSubjectNum", discussNum); + map.put("examType", '1'); + List discussList = tbExamSubjectMapper.randomGenerateTbExamSubjectList(map); + if (!discussList.isEmpty()) { + for (TbExamSubject discuss : discussList) { + discuss.setSort(sort); + discuss.setScore(discussScore); + discuss.setCreateTime(nowDate); + sort ++; + } + insertList.addAll(discussList); + } + } + // 鍒犻櫎妯℃嫙鑰冭瘯棰樼洰 + tbExamSubjectSimulateMapper.deleteTbExamSubjectSimulateBySubjectWarehouseClassId(tbSubjectWarehouseClass.getSubjectWarehouseClassId()); + if (!insertList.isEmpty()) { + // 鎵归噺鏂板妯℃嫙鑰冭瘯棰樼洰 + tbExamSubjectSimulateMapper.batchInsertTbExamSubjectSimulateBy(insertList); + } + return 1; + } + + /** + * 鏌ヨ鎵鏈夐鐩 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public List> getAllTbExamSubjectSimulate(Map params) { + + TbExamCourse examCourseDetail = tbExamCourseMapper.getSubjectWarehouseClassIdByCourseId(MapUtils.getLong(params, "courseId")); + if (ObjectUtils.isEmpty(examCourseDetail)){ + throw new ServiceException("绠$悊鍛樻湭涓婁紶璇ラ搴撲俊鎭"); + } + params.put("subjectWarehouseClassId", examCourseDetail.getSubjectWarehouseClassId()); + return tbExamSubjectSimulateMapper.getAllTbExamSubjectSimulate(params); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExpressKdCodeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExpressKdCodeServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..6388abfa6cb8d71cfe73a311638ecedfa5005038 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbExpressKdCodeServiceImpl.java @@ -0,0 +1,131 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbExpressKdCode; +import com.ruoyi.hezhi.mapper.TbExpressKdCodeMapper; +import com.ruoyi.hezhi.service.ITbExpressKdCodeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 蹇掔紪鐮丼ervice涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-11-20 + */ +@Service +public class TbExpressKdCodeServiceImpl implements ITbExpressKdCodeService +{ + @Autowired + private TbExpressKdCodeMapper tbExpressKdCodeMapper; + + /** + * 鏌ヨ蹇掔紪鐮 + * + * @param id 蹇掔紪鐮佷富閿 + * @return 蹇掔紪鐮 + */ + @Override + public TbExpressKdCode selectTbExpressKdCodeById(Long id) + { + return tbExpressKdCodeMapper.selectTbExpressKdCodeById(id); + } + + /** + * 鏌ヨ蹇掔紪鐮佸垪琛 + * + * @param tbExpressKdCode 蹇掔紪鐮 + * @return 蹇掔紪鐮 + */ + @Override + public List selectTbExpressKdCodeList(TbExpressKdCode tbExpressKdCode) + { + return tbExpressKdCodeMapper.selectTbExpressKdCodeList(tbExpressKdCode); + } + + /** + * 鏂板蹇掔紪鐮 + * + * @param tbExpressKdCode 蹇掔紪鐮 + * @return 缁撴灉 + */ + @Override + public int insertTbExpressKdCode(TbExpressKdCode tbExpressKdCode) + { + tbExpressKdCode.setCreateTime(DateUtils.getNowDate()); + return tbExpressKdCodeMapper.insertTbExpressKdCode(tbExpressKdCode); + } + + /** + * 淇敼蹇掔紪鐮 + * + * @param tbExpressKdCode 蹇掔紪鐮 + * @return 缁撴灉 + */ + @Override + public int updateTbExpressKdCode(TbExpressKdCode tbExpressKdCode) + { + return tbExpressKdCodeMapper.updateTbExpressKdCode(tbExpressKdCode); + } + + /** + * 鎵归噺鍒犻櫎蹇掔紪鐮 + * + * @param ids 闇瑕佸垹闄ょ殑蹇掔紪鐮佷富閿 + * @return 缁撴灉 + */ + @Override + public int deleteTbExpressKdCodeByIds(Long[] ids) + { + return tbExpressKdCodeMapper.deleteTbExpressKdCodeByIds(ids); + } + + /** + * 鍒犻櫎蹇掔紪鐮佷俊鎭 + * + * @param id 蹇掔紪鐮佷富閿 + * @return 缁撴灉 + */ + @Override + public int deleteTbExpressKdCodeById(Long id) + { + return tbExpressKdCodeMapper.deleteTbExpressKdCodeById(id); + } + + /** + * 鏌ヨ蹇 + * + * @param code 蹇掔紪鐮 + * @return 蹇掔紪鐮 + */ + @Override + public TbExpressKdCode selectTbExpressKdCodeByCode(String code) { + return tbExpressKdCodeMapper.selectTbExpressKdCodeByCode(code); + } + + // /** + // * 鏌ヨ蹇掍俊鎭 + // * + // * @param shippingMark 蹇掑叕鍙镐唬鍙 + // * @param shippingCode 蹇掑崟鍙 + // * @return 缁撴灉 + // */ + // @Override + // public List> checkExpressInfoMessage(String shippingMark, String shippingCode) { + // JSONObject expressJsonData = AppBeanInjector.kd100Util.getExpressJsonData(shippingMark, shippingCode); + // + // JSONArray data = expressJsonData.getJSONArray("data"); + // ArrayList> expressList = new ArrayList<>(); + // for (int i = 0; i < data.size(); i++) { + // JSONObject jsonObject = data.getJSONObject(i); + // + // HashMap map = new HashMap<>(); + // map.put("time", jsonObject.getString("time")) + // map.put("context", jsonObject.getString("context")) + // expressList.add(map); + // } + // return expressList; + // } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbLinkServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbLinkServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..5b2216b419d0f65157c92d33103350393fe2a1e5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbLinkServiceImpl.java @@ -0,0 +1,119 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbLink; +import com.ruoyi.hezhi.mapper.TbLinkMapper; +import com.ruoyi.hezhi.service.ITbLinkService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 璧勬簮鍏宠仈Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-10-22 + */ +@Service +public class TbLinkServiceImpl implements ITbLinkService +{ + @Autowired + private TbLinkMapper tbLinkMapper; + + /** + * 鏌ヨ璧勬簮鍏宠仈 + * + * @param linkId 璧勬簮鍏宠仈涓婚敭 + * @return 璧勬簮鍏宠仈 + */ + @Override + public TbLink selectTbLinkByLinkId(Long linkId) + { + return tbLinkMapper.selectTbLinkByLinkId(linkId); + } + + /** + * 鏌ヨ璧勬簮鍏宠仈鍒楄〃 + * + * @param tbLink 璧勬簮鍏宠仈 + * @return 璧勬簮鍏宠仈 + */ + @Override + public List selectTbLinkList(TbLink tbLink) + { + return tbLinkMapper.selectTbLinkList(tbLink); + } + + /** + * 鏂板璧勬簮鍏宠仈 + * + * @param tbLink 璧勬簮鍏宠仈 + * @return 缁撴灉 + */ + @Override + public int insertTbLink(TbLink tbLink) + { + tbLink.setCreateTime(DateUtils.getNowDate()); + return tbLinkMapper.insertTbLink(tbLink); + } + + /** + * 淇敼璧勬簮鍏宠仈 + * + * @param tbLink 璧勬簮鍏宠仈 + * @return 缁撴灉 + */ + @Override + public int updateTbLink(TbLink tbLink) + { + tbLink.setUpdateTime(DateUtils.getNowDate()); + return tbLinkMapper.updateTbLink(tbLink); + } + + /** + * 鎵归噺鍒犻櫎璧勬簮鍏宠仈 + * + * @param linkIds 闇瑕佸垹闄ょ殑璧勬簮鍏宠仈涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbLinkByLinkIds(Long[] linkIds) + { + return tbLinkMapper.deleteTbLinkByLinkIds(linkIds); + } + + /** + * 鍒犻櫎璧勬簮鍏宠仈淇℃伅 + * + * @param linkId 璧勬簮鍏宠仈涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbLinkByLinkId(Long linkId) + { + return tbLinkMapper.deleteTbLinkByLinkId(linkId); + } + + /** + * 鏌ヨ璇勪环鏈烘瀯涓庤绋嬪叧鑱斿垪琛 + * + * @param tbLink 璧勬簮鍏宠仈 + * @return 璧勬簮鍏宠仈闆嗗悎 + */ + @Override + public List listLinkEvaluateAgencyCourse(TbLink tbLink) { + return tbLinkMapper.listLinkEvaluateAgencyCourse(tbLink); + } + + /** + * 鏌ヨ鐩存挱涓庤佸笀鍏宠仈鍒楄〃 + * + * @param tbLink 璧勬簮鍏宠仈 + * @return 璧勬簮鍏宠仈闆嗗悎 + */ + @Override + public List listLinkLiveBroadcastTeacher(TbLink tbLink) { + return tbLinkMapper.listLinkLiveBroadcastTeacher(tbLink); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbLiveBroadcastServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbLiveBroadcastServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..b412b4484bd1b2aca86377629d33add0e8783bf0 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbLiveBroadcastServiceImpl.java @@ -0,0 +1,208 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbExamCourse; +import com.ruoyi.hezhi.domain.TbLiveBroadcast; +import com.ruoyi.hezhi.mapper.TbExamCourseMapper; +import com.ruoyi.hezhi.mapper.TbLiveBroadcastMapper; +import com.ruoyi.hezhi.service.ITbLiveBroadcastService; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * 鐩存挱Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-10-22 + */ +@Service +public class TbLiveBroadcastServiceImpl implements ITbLiveBroadcastService +{ + @Autowired + private TbLiveBroadcastMapper tbLiveBroadcastMapper; + @Autowired + private TbExamCourseMapper tbExamCourseMapper; + + /** + * 鏌ヨ鐩存挱 + * + * @param liveBroadcastId 鐩存挱涓婚敭 + * @return 鐩存挱 + */ + @Override + public TbLiveBroadcast selectTbLiveBroadcastByLiveBroadcastId(Long liveBroadcastId) + { + TbLiveBroadcast tbLiveBroadcast = tbLiveBroadcastMapper.selectTbLiveBroadcastByLiveBroadcastId(liveBroadcastId); + if (ObjectUtils.isNotEmpty(tbLiveBroadcast)){ + List examCourseList = tbExamCourseMapper.getExamCourseList(null, null, null, tbLiveBroadcast.getLiveBroadcastId()); + tbLiveBroadcast.setExamCourseList(examCourseList); + } + return tbLiveBroadcast; + } + + /** + * 鏌ヨ鐩存挱鍒楄〃 + * + * @param tbLiveBroadcast 鐩存挱 + * @return 鐩存挱 + */ + @Override + public List selectTbLiveBroadcastList(TbLiveBroadcast tbLiveBroadcast) + { + return tbLiveBroadcastMapper.selectTbLiveBroadcastList(tbLiveBroadcast); + } + + /** + * 鏂板鐩存挱 + * + * @param tbLiveBroadcast 鐩存挱 + * @return 缁撴灉 + */ + @Override + public int insertTbLiveBroadcast(TbLiveBroadcast tbLiveBroadcast) + { + // 鏂板鑰冭瘯璇剧▼ + List examCourseList = tbLiveBroadcast.getExamCourseList(); + tbLiveBroadcast.setCreateTime(DateUtils.getNowDate()); + int i = tbLiveBroadcastMapper.insertTbLiveBroadcast(tbLiveBroadcast); + //鍏堟彃鍏ュ緱鍒癐D鍐嶆彃鍏ュ叧鑱旇〃 + if (!examCourseList.isEmpty()){ + for (TbExamCourse tbExamCourse : examCourseList) { + tbExamCourse.setLiveBroadcastId((tbLiveBroadcast.getLiveBroadcastId())); + tbExamCourseMapper.insertTbExamCourse(tbExamCourse); + } + } + return i; + } + + /** + * 淇敼鐩存挱 + * + * @param tbLiveBroadcast 鐩存挱 + * @return 缁撴灉 + */ + @Override + public int updateTbLiveBroadcast(TbLiveBroadcast tbLiveBroadcast) + { + // 鏂板鑰冭瘯璇剧▼ + List examCourseList = tbLiveBroadcast.getExamCourseList(); + if (!examCourseList.isEmpty()){ + tbExamCourseMapper.deleteTbExamCourse(null, null, null, tbLiveBroadcast.getLiveBroadcastId()); + for (TbExamCourse tbExamCourse : examCourseList) { + tbExamCourse.setLiveBroadcastId(tbLiveBroadcast.getLiveBroadcastId()); + tbExamCourseMapper.insertTbExamCourse(tbExamCourse); + } + } + tbLiveBroadcast.setUpdateTime(DateUtils.getNowDate()); + return tbLiveBroadcastMapper.updateTbLiveBroadcast(tbLiveBroadcast); + } + + /** + * 鎵归噺鍒犻櫎鐩存挱 + * + * @param liveBroadcastIds 闇瑕佸垹闄ょ殑鐩存挱涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbLiveBroadcastByLiveBroadcastIds(Long[] liveBroadcastIds) + { + return tbLiveBroadcastMapper.deleteTbLiveBroadcastByLiveBroadcastIds(liveBroadcastIds); + } + + /** + * 鍒犻櫎鐩存挱淇℃伅 + * + * @param liveBroadcastId 鐩存挱涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbLiveBroadcastByLiveBroadcastId(Long liveBroadcastId) + { + return tbLiveBroadcastMapper.deleteTbLiveBroadcastByLiveBroadcastId(liveBroadcastId); + } + + /** + * 鐩存挱棰勫憡鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鐩存挱棰勫憡鍒楄〃 + */ + @Override + public List> getLiveBroadcastList(Map params) { + List> liveBroadcastList = tbLiveBroadcastMapper.getLiveBroadcastList(params); + if (!liveBroadcastList.isEmpty()){ + for (Map stringObjectMap : liveBroadcastList) { + String startTime = MapUtils.getString(stringObjectMap, "startTime"); + String endTime = MapUtils.getString(stringObjectMap, "endTime"); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + + try { + Date startDate = dateFormat.parse(startTime); + Date endDate = dateFormat.parse(endTime); + // 鐩存挱鐘舵侊紙0-鏈紑濮嬶紝1-杩涜涓紝2-宸茬粨鏉燂級 + int liveBroadStatus = 0; + Date nowDate = DateUtils.getNowDate(); + if (nowDate.before(startDate)){ + stringObjectMap.put("liveBroadcastUrl", null); + }else if (nowDate.after(endDate)){ + liveBroadStatus = 2; + stringObjectMap.put("liveBroadcastUrl", null); + }else { + liveBroadStatus = 1; + } + stringObjectMap.put("liveBroadStatus", liveBroadStatus); + } catch (ParseException e) { + throw new RuntimeException(e); + } + } + } + return liveBroadcastList; + } + + @Override + public List> getLiveBroadcastEvaluateAgencyList(){ + return tbLiveBroadcastMapper.getLiveBroadcastEvaluateAgencyList(); + } + + /** + * 鐩存挱棰勫憡璇︽儏 + * + * @param params 鍙傛暟 + * @return 鐩存挱棰勫憡璇︽儏 + */ + @Override + public Map getLiveBroadcastInfo(Map params) { + Map liveBroadcastInfo = tbLiveBroadcastMapper.getLiveBroadcastInfo(params); + if (!liveBroadcastInfo.isEmpty()){ + String startTime = MapUtils.getString(liveBroadcastInfo, "startTime"); + String endTime = MapUtils.getString(liveBroadcastInfo, "endTime"); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + try { + Date startDate = dateFormat.parse(startTime); + Date endDate = dateFormat.parse(endTime); + // 鐩存挱鐘舵侊紙0-鏈紑濮嬶紝1-杩涜涓紝2-宸茬粨鏉燂級 + int liveBroadStatus = 0; + Date nowDate = DateUtils.getNowDate(); + if (nowDate.before(startDate)){ + liveBroadcastInfo.put("liveBroadcastUrl", null); + }else if (nowDate.after(endDate)){ + liveBroadStatus = 2; + }else { + liveBroadStatus = 1; + } + liveBroadcastInfo.put("liveBroadStatus", liveBroadStatus); + } catch (ParseException e) { + throw new RuntimeException(e); + } + } + return liveBroadcastInfo; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMajorClassServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMajorClassServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..151970ceed3adb4e586f6afcf57e4e02c2d42657 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMajorClassServiceImpl.java @@ -0,0 +1,324 @@ +package com.ruoyi.hezhi.service.impl; + +import cn.hutool.core.collection.CollUtil; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.hezhi.domain.TbCourse; +import com.ruoyi.hezhi.domain.TbCourseChapter; +import com.ruoyi.hezhi.domain.TbExamRegistration; +import com.ruoyi.hezhi.domain.TbMajorClass; +import com.ruoyi.hezhi.mapper.*; +import com.ruoyi.hezhi.service.ITbCourseChapterService; +import com.ruoyi.hezhi.service.ITbMajorClassService; +import com.ruoyi.hezhi.service.ITbTeacherCourseService; +import com.ruoyi.hezhi.service.ITbTypeCourseService; +import org.apache.commons.collections4.MapUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 涓撲笟鍒嗙被Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-10-16 + */ +@Service +public class TbMajorClassServiceImpl implements ITbMajorClassService +{ + @Autowired + private TbMajorClassMapper tbMajorClassMapper; + @Autowired + private ITbCourseChapterService courseChapterService; + @Autowired + private ITbTeacherCourseService tbTeacherCourseService; + @Autowired + private TbTypeCourseMapper tbTypeCourseMapper; + @Resource + private TbCourseMapper tbCourseMapper; + + @Resource + private ThreadPoolTaskExecutor threadPoolTaskExecutor; + @Autowired + private TbExamRegistrationMapper tbExamRegistrationMapper; + + /** + * 鏌ヨ涓撲笟鍒嗙被 + * + * @param majorId 涓撲笟鍒嗙被涓婚敭 + * @return 涓撲笟鍒嗙被 + */ + @Override + public TbMajorClass selectTbMajorClassByMajorId(Long majorId) + { + return tbMajorClassMapper.selectTbMajorClassByMajorId(majorId); + } + + /** + * 鏌ヨ涓撲笟鍒嗙被鍒楄〃 + * + * @param tbMajorClass 涓撲笟鍒嗙被 + * @return 涓撲笟鍒嗙被 + */ + @Override + public List selectTbMajorClassList(TbMajorClass tbMajorClass) + { + return tbMajorClassMapper.selectTbMajorClassList(tbMajorClass); + } + + /** + * 鏌ヨ涓撲笟鍒嗙被鍒楄〃 + * + * @return 涓撲笟鍒嗙被 + */ + @Override + public List getAllMajorClassList() + { + return tbMajorClassMapper.getAllMajorClassList(); + } + + /** + * 鏂板涓撲笟鍒嗙被 + * + * @param tbMajorClass 涓撲笟鍒嗙被 + * @return 缁撴灉 + */ + @Override + public int insertTbMajorClass(TbMajorClass tbMajorClass) + { + tbMajorClass.setCreateTime(DateUtils.getNowDate()); + tbMajorClass.setDelFlag(0); + return tbMajorClassMapper.insertTbMajorClass(tbMajorClass); + } + + /** + * 淇敼涓撲笟鍒嗙被 + * + * @param tbMajorClass 涓撲笟鍒嗙被 + * @return 缁撴灉 + */ + @Override + public int updateTbMajorClass(TbMajorClass tbMajorClass) + { + tbMajorClass.setUpdateTime(DateUtils.getNowDate()); + return tbMajorClassMapper.updateTbMajorClass(tbMajorClass); + } + + /** + * 鎵归噺鍒犻櫎涓撲笟鍒嗙被 + * + * @param majorIds 闇瑕佸垹闄ょ殑涓撲笟鍒嗙被涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbMajorClassByMajorIds(Long[] majorIds) + { + return tbMajorClassMapper.deleteTbMajorClassByMajorIds(majorIds); + } + + /** + * 鍒犻櫎涓撲笟鍒嗙被淇℃伅 + * + * @param majorId 涓撲笟鍒嗙被涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbMajorClassByMajorId(Long majorId) + { + return tbMajorClassMapper.deleteTbMajorClassByMajorId(majorId); + } + + /** + * 涓撲笟鍒嗙被鍒楄〃 + * + * @param params 鍙傛暟 + * @return 涓撲笟鍒嗙被鍒楄〃 + */ + @Override + public List> selectTbMajorClassMapList(Map params) { + return tbMajorClassMapper.selectTbMajorClassMapList(params); + } + + /** + * 涓撲笟鍒嗙被鏍戝垪琛 + * + * @return 涓撲笟鍒嗙被鏍戝垪琛 + */ + @Override + public List selectTbMajorClassTreeList() { + TbMajorClass tbMajorClass = new TbMajorClass(); + tbMajorClass.setStatus(0); + tbMajorClass.setDelFlag(0); + List list = tbMajorClassMapper.selectTbMajorClassList(tbMajorClass); + return this.toTree(list, 0L); + } + + /** + * 鏂瑰紡涓锛氫娇鐢ㄤ袱灞傚惊鐜疄鐜 + * @param treeList + * @return + */ + @Override + public List toTree(List treeList, Long pid) { + List retList = new ArrayList(); + for (TbMajorClass parent : treeList) { + if (pid.equals(parent.getPid())) { + retList.add(parent); + } + for (TbMajorClass childOne : treeList) { + if (childOne.getPid().equals(parent.getMajorId())) { + if (parent.getChildrenList() == null) { + parent.setChildrenList(new ArrayList()); + } + parent.getChildrenList().add(childOne); + } + } + } + return retList; + } + + /** + * 涓撲笟璇剧▼鍒楄〃 + * + * @param params 鍙傛暟 + * @return 涓撲笟璇剧▼鍒楄〃 + */ + @Override + public List> getMajorCourseList(Map params) { + List> majorCourseList = tbMajorClassMapper.getMajorCourseList(params); + String memberUserId = MapUtils.getString(params, "memberUserId"); + if (StringUtils.isNotEmpty(memberUserId)&&CollUtil.isNotEmpty(majorCourseList)){ + //stream鑾峰彇courseId鐨凩ist + List courseIdList = majorCourseList.stream().map(item -> MapUtils.getLong(item, "courseId")).collect(Collectors.toList()); + List list = tbExamRegistrationMapper.selectCourseIsPay(memberUserId, courseIdList); + majorCourseList.forEach(course -> { + if (course != null){ + if (CollUtil.isNotEmpty(list)){ + list.forEach(item -> { + if (Objects.equals(MapUtils.getLong(course, "courseId"), item.getCourseId())){ + course.put("isEnroll", item.getIsEnroll()); + } + }); + } + } + }); + } + return majorCourseList; + } + + /** + * 鑾峰彇鏈烘瀯涓撲笟鍒嗙被 + * @param evaluateAgencyId 鏈烘瀯ID + * @return 涓撲笟璇剧▼鍒楄〃 + */ + @Override + public List> getEvaluateAgencyMajorClass(Long evaluateAgencyId){ + return tbTypeCourseMapper.getTypeCourseByEvaluateAgencyId(evaluateAgencyId); + } + + /** + * 涓撲笟璇剧▼璇︽儏 + * + * @param params 鍙傛暟 + * @return 涓撲笟璇剧▼璇︽儏 + */ + @Override + public Map getMajorCourseInfo(Map params) { + Map majorCourseInfo = tbMajorClassMapper.getMajorCourseInfo(params); + if (!majorCourseInfo.isEmpty()) { + long courseId = MapUtils.getLong(majorCourseInfo, "courseId"); + majorCourseInfo.put("courseSyllabus", courseChapterService.getCourseChapterTreeList(courseId)); + + HashMap map = new HashMap<>(); + map.put("courseId", courseId); + majorCourseInfo.put("teacherList", tbTeacherCourseService.getTeacherList(map)); + + majorCourseInfo.put("collegeImage", "https://image.xnszz.com/IMG_1417_1417@FpRfsd1u_dOMfKttUGaU7VeO7r1Z.jpg"); + + //澶勭悊娴忚閲 + threadPoolTaskExecutor.execute(() -> { + TbCourse tbCourse = tbCourseMapper.selectTbCourseByCourseId(courseId); + if (StringUtils.isNotNull(tbCourse)){ + tbCourse.setViewsNum(tbCourse.getViewsNum() + 1); + tbCourseMapper.updateTbCourse(tbCourse); + } + }); + } + + return majorCourseInfo; + } + + /** + * 璇剧▼甯堣祫鍒楄〃 + * + * @param params 鍙傛暟 + * @return 璇剧▼甯堣祫鍒楄〃 + */ + @Override + public List> getCourseTeacherList(Map params) { + return tbMajorClassMapper.getCourseTeacherList(params); + } + + /** + * 鏌ヨ涓撲笟鍒嗙被鍒楄〃-涓嬫媺妗嗘爲鍒楄〃 + * + * @return 涓撲笟鍒嗙被闆嗗悎 + */ + @Override + public List> getTbMajorClassTreeList() { + //杩斿洖鏁版嵁map闆嗗悎 + List> resultMap = new ArrayList<>(); + + //涓绾у垎绫诲垪琛 + TbMajorClass majorClassOne = new TbMajorClass(); + majorClassOne.setStatus(0); + majorClassOne.setDelFlag(0); + majorClassOne.setPid(0L); + List majorClassOneList = tbMajorClassMapper.selectTbMajorClassList(majorClassOne); + + if (majorClassOneList.size() > 0){ + for (TbMajorClass majorOne : majorClassOneList) { + Map majorParentMap = new HashMap<>(); + majorParentMap.put("value",majorOne.getMajorId()); + majorParentMap.put("label",majorOne.getMajorName()); + + //鏌ヨ浜岀骇鍒嗙被鍒楄〃 + TbMajorClass majorClassTwo = new TbMajorClass(); + majorClassTwo.setStatus(0); + majorClassTwo.setDelFlag(0); + majorClassTwo.setPid(majorOne.getMajorId()); + List majorClassTwoList = tbMajorClassMapper.selectTbMajorClassList(majorClassTwo); + + List> childMapList = new ArrayList<>(); + + if (majorClassTwoList.size() > 0){ + for (TbMajorClass majorTwo : majorClassTwoList) { + Map childMap = new HashMap<>(); + childMap.put("value",majorTwo.getMajorId()); + childMap.put("label",majorTwo.getMajorName()); + childMapList.add(childMap); + } + } + majorParentMap.put("children", childMapList); + + resultMap.add(majorParentMap); + } + } + return resultMap; + } + + /** + * 涓撲笟璇剧▼瑙嗛鍒楄〃 + * + * @param params 鍙傛暟 + * @return 涓撲笟璇剧▼瑙嗛鍒楄〃 + */ + @Override + public List> getMajorCourseVideoList(Map params) { + return tbMajorClassMapper.getMajorCourseVideoList(params); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberAddressServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberAddressServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..6e8334e0dd277fba3538754a7659e22694461c51 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberAddressServiceImpl.java @@ -0,0 +1,207 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.hezhi.domain.TbMemberAddress; +import com.ruoyi.hezhi.domain.dto.MemberAddressDTO; +import com.ruoyi.hezhi.mapper.TbMemberAddressMapper; +import com.ruoyi.hezhi.mapper.TbRegionMapper; +import com.ruoyi.hezhi.service.ITbMemberAddressService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +/** + * 鐢ㄦ埛鍦板潃Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-10-30 + */ +@Service +public class TbMemberAddressServiceImpl implements ITbMemberAddressService +{ + @Autowired + private TbMemberAddressMapper tbMemberAddressMapper; + @Resource + private TbRegionMapper tbRegionMapper; + + /** + * 鏌ヨ鐢ㄦ埛鍦板潃 + * + * @param memberAddressId 鐢ㄦ埛鍦板潃涓婚敭 + * @return 鐢ㄦ埛鍦板潃 + */ + @Override + public TbMemberAddress selectTbMemberAddressByMemberAddressId(Long memberAddressId) + { + return tbMemberAddressMapper.selectTbMemberAddressByMemberAddressId(memberAddressId); + } + + /** + * 鏌ヨ鐢ㄦ埛鍦板潃鍒楄〃 + * + * @param tbMemberAddress 鐢ㄦ埛鍦板潃 + * @return 鐢ㄦ埛鍦板潃 + */ + @Override + public List selectTbMemberAddressList(TbMemberAddress tbMemberAddress) + { + return tbMemberAddressMapper.selectTbMemberAddressList(tbMemberAddress); + } + + /** + * 鏂板鐢ㄦ埛鍦板潃 + * + * @param tbMemberAddress 鐢ㄦ埛鍦板潃 + * @return 缁撴灉 + */ + @Override + public int insertTbMemberAddress(TbMemberAddress tbMemberAddress) + { + tbMemberAddress.setCreateTime(DateUtils.getNowDate()); + return tbMemberAddressMapper.insertTbMemberAddress(tbMemberAddress); + } + + /** + * 淇敼鐢ㄦ埛鍦板潃 + * + * @param tbMemberAddress 鐢ㄦ埛鍦板潃 + * @return 缁撴灉 + */ + @Override + public int updateTbMemberAddress(TbMemberAddress tbMemberAddress) + { + tbMemberAddress.setUpdateTime(DateUtils.getNowDate()); + return tbMemberAddressMapper.updateTbMemberAddress(tbMemberAddress); + } + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛鍦板潃 + * + * @param memberAddressIds 闇瑕佸垹闄ょ殑鐢ㄦ埛鍦板潃涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbMemberAddressByMemberAddressIds(Long[] memberAddressIds) + { + return tbMemberAddressMapper.deleteTbMemberAddressByMemberAddressIds(memberAddressIds); + } + + /** + * 鍒犻櫎鐢ㄦ埛鍦板潃淇℃伅 + * + * @param memberAddressId 鐢ㄦ埛鍦板潃涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbMemberAddressByMemberAddressId(Long memberAddressId) + { + return tbMemberAddressMapper.deleteTbMemberAddressByMemberAddressId(memberAddressId); + } + + /** + * 鍦板潃绠$悊鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鍦板潃绠$悊鍒楄〃 + */ + @Override + public List> getMemberAddressList(Map params) { + return tbMemberAddressMapper.getMemberAddressList(params); + } + + /** + * 鍦板潃绠$悊璇︽儏 + * + * @param params 鍙傛暟 + * @return 鍦板潃绠$悊璇︽儏 + */ + @Override + public Map getMemberAddressInfo(Map params) { + return tbMemberAddressMapper.getMemberAddressInfo(params); + } + + /** + * 鏂板鍦板潃 + * + * @param memberAddressDTO + * @return ok + */ + @Override + public AjaxResult userRetrievePassword(MemberAddressDTO memberAddressDTO) { + TbMemberAddress memberAddress = new TbMemberAddress(); + if (StringUtils.isNotBlank(memberAddressDTO.getProvinceName())){ + Long provinceId = tbRegionMapper.selectIdByName1(memberAddressDTO.getProvinceName()); + if (provinceId==null){ + return AjaxResult.error("鏃犳硶鎵惧埌鐪佸悕绉"); + }else { + memberAddressDTO.setProvinceId(provinceId); + } + } + if (StringUtils.isNotBlank(memberAddressDTO.getCityName())){ + Long cityId = tbRegionMapper.selectIdByName2(memberAddressDTO.getCityName()); + if (cityId==null){ + return AjaxResult.error("鏃犳硶鎵惧埌甯傚悕绉"); + }else { + memberAddressDTO.setCityId(cityId); + } + } + if (StringUtils.isNotBlank(memberAddressDTO.getAreaName())){ + Long areaId = tbRegionMapper.selectIdByName3(memberAddressDTO.getAreaName(),memberAddressDTO.getCityId()); + if (areaId==null){ + return AjaxResult.error("鏃犳硶鎵惧埌鍖哄悕绉"); + }else { + memberAddressDTO.setAreaId(areaId); + } + } + memberAddress.setMemberUserId(memberAddressDTO.getMemberUserId()); + memberAddress.setName(memberAddressDTO.getName()); + memberAddress.setPhone(memberAddressDTO.getPhone()); + memberAddress.setProvinceId(memberAddressDTO.getProvinceId()); + memberAddress.setCityId(memberAddressDTO.getCityId()); + memberAddress.setAreaId(memberAddressDTO.getAreaId()); + memberAddress.setAddress(memberAddressDTO.getAddress()); + memberAddress.setLocation(memberAddressDTO.getLocation()); + memberAddress.setCreateTime(DateUtils.getNowDate()); + tbMemberAddressMapper.insertTbMemberAddress(memberAddress); + return AjaxResult.success(); + } + + /** + * 淇敼鍦板潃 + * + * @param memberAddressDTO + * @return ok + */ + @Override + public AjaxResult updateMemberAddress(MemberAddressDTO memberAddressDTO) { + TbMemberAddress memberAddress = new TbMemberAddress(); + memberAddress.setMemberAddressId(memberAddressDTO.getMemberAddressId()); + memberAddress.setName(memberAddressDTO.getName()); + memberAddress.setPhone(memberAddressDTO.getPhone()); + memberAddress.setProvinceId(memberAddressDTO.getProvinceId()); + memberAddress.setCityId(memberAddressDTO.getCityId()); + memberAddress.setAreaId(memberAddressDTO.getAreaId()); + memberAddress.setAddress(memberAddressDTO.getAddress()); + memberAddress.setLocation(memberAddressDTO.getLocation()); + memberAddress.setUpdateTime(DateUtils.getNowDate()); + tbMemberAddressMapper.updateTbMemberAddress(memberAddress); + return AjaxResult.success(); + } + + /** + * 鍒犻櫎鍦板潃 + * + * @param memberAddressDTO + * @return ok + */ + @Override + public AjaxResult deleteMemberAddress(MemberAddressDTO memberAddressDTO) { + tbMemberAddressMapper.deleteTbMemberAddressByMemberAddressId(memberAddressDTO.getMemberAddressId()); + return AjaxResult.success(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberDiscussServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberDiscussServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..213df9415bc96d05643270871a2c81668e938937 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberDiscussServiceImpl.java @@ -0,0 +1,130 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbMemberDiscuss; +import com.ruoyi.hezhi.domain.dto.MemberDiscussDTO; +import com.ruoyi.hezhi.mapper.TbMemberDiscussMapper; +import com.ruoyi.hezhi.service.ITbMemberDiscussService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * 鐢ㄦ埛璁ㄨService涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-11-19 + */ +@Service +public class TbMemberDiscussServiceImpl implements ITbMemberDiscussService +{ + @Autowired + private TbMemberDiscussMapper tbMemberDiscussMapper; + + /** + * 鏌ヨ鐢ㄦ埛璁ㄨ + * + * @param memberDiscussId 鐢ㄦ埛璁ㄨ涓婚敭 + * @return 鐢ㄦ埛璁ㄨ + */ + @Override + public TbMemberDiscuss selectTbMemberDiscussByMemberDiscussId(Long memberDiscussId) + { + return tbMemberDiscussMapper.selectTbMemberDiscussByMemberDiscussId(memberDiscussId); + } + + /** + * 鏌ヨ鐢ㄦ埛璁ㄨ鍒楄〃 + * + * @param tbMemberDiscuss 鐢ㄦ埛璁ㄨ + * @return 鐢ㄦ埛璁ㄨ + */ + @Override + public List selectTbMemberDiscussList(TbMemberDiscuss tbMemberDiscuss) + { + return tbMemberDiscussMapper.selectTbMemberDiscussList(tbMemberDiscuss); + } + + /** + * 鏂板鐢ㄦ埛璁ㄨ + * + * @param tbMemberDiscuss 鐢ㄦ埛璁ㄨ + * @return 缁撴灉 + */ + @Override + public int insertTbMemberDiscuss(TbMemberDiscuss tbMemberDiscuss) + { + tbMemberDiscuss.setCreateTime(DateUtils.getNowDate()); + return tbMemberDiscussMapper.insertTbMemberDiscuss(tbMemberDiscuss); + } + + /** + * 淇敼鐢ㄦ埛璁ㄨ + * + * @param tbMemberDiscuss 鐢ㄦ埛璁ㄨ + * @return 缁撴灉 + */ + @Override + public int updateTbMemberDiscuss(TbMemberDiscuss tbMemberDiscuss) + { + tbMemberDiscuss.setUpdateTime(DateUtils.getNowDate()); + return tbMemberDiscussMapper.updateTbMemberDiscuss(tbMemberDiscuss); + } + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛璁ㄨ + * + * @param memberDiscussIds 闇瑕佸垹闄ょ殑鐢ㄦ埛璁ㄨ涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbMemberDiscussByMemberDiscussIds(Long[] memberDiscussIds) + { + return tbMemberDiscussMapper.deleteTbMemberDiscussByMemberDiscussIds(memberDiscussIds); + } + + /** + * 鍒犻櫎鐢ㄦ埛璁ㄨ淇℃伅 + * + * @param memberDiscussId 鐢ㄦ埛璁ㄨ涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbMemberDiscussByMemberDiscussId(Long memberDiscussId) + { + return tbMemberDiscussMapper.deleteTbMemberDiscussByMemberDiscussId(memberDiscussId); + } + + /** + * 鐢ㄦ埛璁ㄨ鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鐢ㄦ埛璁ㄨ鍒楄〃 + */ + @Override + public List> getMemberDiscussList(Map params) { + return tbMemberDiscussMapper.getMemberDiscussList(params); + } + + /** + * 鍙戝竷璁ㄨ淇℃伅 + * + * @param memberDiscussDTO + * @return ok + */ + @Override + public AjaxResult releaseMemberDiscuss(MemberDiscussDTO memberDiscussDTO) { + TbMemberDiscuss memberDiscuss = new TbMemberDiscuss(); + memberDiscuss.setMemberUserId(memberDiscussDTO.getMemberUserId()); + memberDiscuss.setLiveBroadcastId(memberDiscussDTO.getLiveBroadcastId()); + memberDiscuss.setCourseId(memberDiscussDTO.getCourseId()); + memberDiscuss.setChapterId(memberDiscussDTO.getChapterId()); + memberDiscuss.setContent(memberDiscussDTO.getContent()); + memberDiscuss.setCreateTime(DateUtils.getNowDate()); + tbMemberDiscussMapper.insertTbMemberDiscuss(memberDiscuss); + return AjaxResult.success(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberExamSimulateAllServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberExamSimulateAllServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..15701653a610fdff74daf2f8026dd70233deacb2 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberExamSimulateAllServiceImpl.java @@ -0,0 +1,437 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.hezhi.domain.*; +import com.ruoyi.hezhi.domain.dto.MemberExamSimulateAllDTO; +import com.ruoyi.hezhi.mapper.*; +import com.ruoyi.hezhi.service.*; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.List; + +/** + * 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛塖ervice涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-11-11 + */ +@Service +public class TbMemberExamSimulateAllServiceImpl implements ITbMemberExamSimulateAllService +{ + @Autowired + private TbMemberExamSimulateAllMapper tbMemberExamSimulateAllMapper; + @Autowired + private ITbExamSubjectService tbExamSubjectService; + @Autowired + private ITbMemberSubjectWrongService tbMemberSubjectWrongService; + @Autowired + private ITbSubjectWarehouseClassService tbSubjectWarehouseClassService; + @Autowired + private ITbExamSubjectAnswerService tbExamSubjectAnswerService; + @Autowired + private ITbExamSubjectFormalService examSubjectFormalService; + @Autowired + private ITbExamService examService; + @Autowired + private TbExamSimulateInfoMapper tbExamSimulateInfoMapper; + @Autowired + private TbExamCourseMapper tbExamCourseMapper; + @Autowired + private ThreadPoolTaskExecutor threadPoolTaskExecutor; + @Autowired + private TbExamBatchMapper tbExamBatchMapper; + @Autowired + private TbExamRegistrationMapper tbExamRegistrationMapper; + @Autowired + private TbMemberSubjectCollectMapper tbMemberSubjectCollectMapper; + + /** + * 鏌ヨ鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + * + * @param memberExamSimulateAllId 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛変富閿 + * @return 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + */ + @Override + public TbMemberExamSimulateAll selectTbMemberExamSimulateAllByMemberExamSimulateAllId(Long memberExamSimulateAllId) + { + return tbMemberExamSimulateAllMapper.selectTbMemberExamSimulateAllByMemberExamSimulateAllId(memberExamSimulateAllId); + } + + /** + * 鏌ヨ鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛夊垪琛 + * + * @param tbMemberExamSimulateAll 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + * @return 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + */ + @Override + public List selectTbMemberExamSimulateAllList(TbMemberExamSimulateAll tbMemberExamSimulateAll) + { + return tbMemberExamSimulateAllMapper.selectTbMemberExamSimulateAllList(tbMemberExamSimulateAll); + } + + /** + * 鏂板鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + * + * @param tbMemberExamSimulateAll 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + * @return 缁撴灉 + */ + @Override + public int insertTbMemberExamSimulateAll(TbMemberExamSimulateAll tbMemberExamSimulateAll) + { + tbMemberExamSimulateAll.setCreateTime(DateUtils.getNowDate()); + return tbMemberExamSimulateAllMapper.insertTbMemberExamSimulateAll(tbMemberExamSimulateAll); + } + + /** + * 淇敼鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + * + * @param tbMemberExamSimulateAll 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + * @return 缁撴灉 + */ + @Override + public int updateTbMemberExamSimulateAll(TbMemberExamSimulateAll tbMemberExamSimulateAll) + { + tbMemberExamSimulateAll.setUpdateTime(DateUtils.getNowDate()); + return tbMemberExamSimulateAllMapper.updateTbMemberExamSimulateAll(tbMemberExamSimulateAll); + } + + /** + * 鎵归噺鍒犻櫎鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 + * + * @param memberExamSimulateAllIds 闇瑕佸垹闄ょ殑鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛変富閿 + * @return 缁撴灉 + */ + @Override + public int deleteTbMemberExamSimulateAllByMemberExamSimulateAllIds(Long[] memberExamSimulateAllIds) + { + return tbMemberExamSimulateAllMapper.deleteTbMemberExamSimulateAllByMemberExamSimulateAllIds(memberExamSimulateAllIds); + } + + /** + * 鍒犻櫎鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛変俊鎭 + * + * @param memberExamSimulateAllId 鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛変富閿 + * @return 缁撴灉 + */ + @Override + public int deleteTbMemberExamSimulateAllByMemberExamSimulateAllId(Long memberExamSimulateAllId) + { + return tbMemberExamSimulateAllMapper.deleteTbMemberExamSimulateAllByMemberExamSimulateAllId(memberExamSimulateAllId); + } + + /** + * 姝e紡鑰冭瘯鐐瑰嚮纭畾寮濮嬬瓟棰 + * + * @param memberExamSimulateAllDTO + * @return ok + */ + @Override + public AjaxResult subjectFormalClickOK(MemberExamSimulateAllDTO memberExamSimulateAllDTO) { + TbExamSimulateInfo examSimulateInfo = tbExamSimulateInfoMapper.selectTbExamSimulateInfoByExamSimulateInfoId(memberExamSimulateAllDTO.getExamSimulateInfoId()); + if (examSimulateInfo.getPassStatus() != 0) { + return AjaxResult.error("鎮ㄥ凡浜ゅ嵎"); + } + String endTime = examSimulateInfo.getEndTime(); + if (StringUtils.isBlank(examSimulateInfo.getStartTime()) || StringUtils.isBlank(examSimulateInfo.getEndTime())) { + String nowTime = DateUtils.getTime(); + examSimulateInfo.setStartTime(nowTime); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar calendar = Calendar.getInstance(); + try { + calendar.setTime(sdf.parse(nowTime)); + } catch (ParseException e) { + e.printStackTrace(); + } + calendar.add(Calendar.MINUTE, examSimulateInfo.getExamMinute()); // 娣诲姞鍒嗛挓鏁 + + String endTimeFormat = sdf.format(calendar.getTime()); +// TbExam exam = examService.selectTbExamByExamId(examSimulateInfo.getExamId()); + //鏍规嵁鑰冭瘯ID鍜屽鍛業D鎼滃嚭鏈杩戠殑涓鍦鸿冭瘯鎵规 [鑰冭瘯鎶ュ悕琛ㄥ拰鑰冭瘯鎵规琛ㄨ仈琛ㄦ煡鎵规琛╙ + TbExamBatch tbExamBatch = tbExamBatchMapper.selectTbExamBatchByExamIdAndUserId(examSimulateInfo.getExamId(),examSimulateInfo.getMemberUserId()); + if (tbExamBatch != null) { + Date examEndTimeA = tbExamBatch.getExamEndTime();//鑰冭瘯璁剧疆鐨勭粨鏉 + String endTimeA = sdf.format(calendar.getTime());//鏈鑰冭瘯璁$畻鍑烘潵鐨勭粨鏉熸椂闂 + + Date examEndTimeACompare = examEndTimeA;; + Date endTimeACompare = null; + + try { + endTimeACompare = sdf.parse(endTimeA); + } catch (ParseException e) { + e.printStackTrace(); + } + + // 姣旇緝鏃堕棿 + if (endTimeACompare.after(examEndTimeACompare)) { + // 鐩存帴鏍煎紡鍖朌ate瀵硅薄 + endTimeFormat = sdf.format(examEndTimeA); + } + } + examSimulateInfo.setEndTime(endTimeFormat); + + endTime = endTimeFormat; + tbExamSimulateInfoMapper.updateTbExamSimulateInfo(examSimulateInfo); + } + + HashMap map = new HashMap<>(); + map.put("endTime", endTime); + return AjaxResult.success(map); + } + + /** + * 妯℃嫙鑰冭瘯绛旈 + * + * @param memberExamSimulateAllDTO + * @return ok + */ + @Override + public AjaxResult subjectSimulateAnswer(MemberExamSimulateAllDTO memberExamSimulateAllDTO) { + Long memberUserId = memberExamSimulateAllDTO.getMemberUserId(); + Long examSimulateInfoId = memberExamSimulateAllDTO.getExamSimulateInfoId(); + Long examSubjectId = memberExamSimulateAllDTO.getExamSubjectId(); + String myAnswer = memberExamSimulateAllDTO.getMyAnswer(); + Long location = memberExamSimulateAllDTO.getLocation(); + + Long courseId = memberExamSimulateAllDTO.getCourseId(); + + // 鏌ヨ褰撳墠棰樼洰 + TbExamSubject tbExamSubject = tbExamSubjectService.selectTbExamSubjectByExamSubjectId(memberExamSimulateAllDTO.getExamSubjectId()); + if (tbExamSubject == null) { + return AjaxResult.error("棰樼洰淇℃伅寮傚父"); + } + HashMap params = new HashMap<>(); + params.put("memberUserId", memberUserId); + params.put("examSubjectId", examSubjectId); + + // 姝g‘绛旀 + String answer = tbExamSubject.getAnswer(); + if (tbExamSubject.getSubjectType() == 3) { + if ("姝g‘".equals(answer)) { + answer = "A"; + } + if ("閿欒".equals(answer)) { + answer = "B"; + } + } + + BigDecimal score = new BigDecimal(0); + // 棰樼洰鍒嗘暟 + TbExamCourse examCourseDetail = tbExamCourseMapper.getSubjectWarehouseClassIdByCourseId(courseId); + if (ObjectUtils.isEmpty(examCourseDetail)){ + throw new ServiceException("绠$悊鍛樻湭涓婁紶璇ラ搴撲俊鎭"); + } + TbSubjectWarehouseClass subjectWarehouseClass = tbSubjectWarehouseClassService.selectTbSubjectWarehouseClassBySubjectWarehouseClassId(examCourseDetail.getSubjectWarehouseClassId()); + if (tbExamSubject.getSubjectType() == 1) { + score = subjectWarehouseClass.getSingleSelectScore(); + } else if (tbExamSubject.getSubjectType() == 2) { + score = subjectWarehouseClass.getManySelectScore(); + } else if (tbExamSubject.getSubjectType() == 3) { + score = subjectWarehouseClass.getJudgeScore(); + } else if (tbExamSubject.getSubjectType() == 4) { + score = subjectWarehouseClass.getDiscussScore(); + } + + TbMemberExamSimulateAll memberExamSimulateAll = new TbMemberExamSimulateAll(); + memberExamSimulateAll.setExamSimulateInfoId(examSimulateInfoId); + memberExamSimulateAll.setExamSubjectId(examSubjectId); + memberExamSimulateAll.setMemberUserId(memberUserId); + memberExamSimulateAll.setLocation(location); + memberExamSimulateAll.setMyAnswer(myAnswer); + memberExamSimulateAll.setAnswer(answer); + memberExamSimulateAll.setSubjectType(tbExamSubject.getSubjectType()); + memberExamSimulateAll.setExamType(2); + + if (tbExamSubject.getSubjectType() != 4) { + if (myAnswer.equals(answer)) { + memberExamSimulateAll.setStatus(1); + memberExamSimulateAll.setScore(score); + } else { + memberExamSimulateAll.setStatus(2); + memberExamSimulateAll.setScore(new BigDecimal(0)); +// String finalAnswer = answer; + threadPoolTaskExecutor.execute(()->{ + //娣诲姞閿欓 + TbMemberSubjectCollect memberSubjectCollect = tbMemberSubjectCollectMapper.selectTbMemberSubjectCollectByMemberUserIdSubjectId( + memberUserId, + examSubjectId, + courseId); + if (ObjectUtils.isEmpty(memberSubjectCollect)){ + TbMemberSubjectCollect subjectCollect = new TbMemberSubjectCollect(); + subjectCollect.setMemberUserId(memberUserId); + subjectCollect.setExamSubjectId(examSubjectId); + subjectCollect.setCourseId(courseId); + subjectCollect.setCreateTime(DateUtils.getNowDate()); + tbMemberSubjectCollectMapper.insertTbMemberSubjectCollect(subjectCollect); + } + }); +// threadPoolTaskExecutor.execute(()->{ +// //娣诲姞閿欓 +// int count = tbMemberSubjectWrongService.countByParams(params); +// if (count == 0){ +// TbMemberSubjectWrong wrong = new TbMemberSubjectWrong(); +// wrong.setMemberUserId(memberUserId); +// wrong.setExamSubjectId(examSubjectId); +// wrong.setStatus(2); +// wrong.setMyAnswer(myAnswer); +// wrong.setAnswer(finalAnswer); +// wrong.setLocation(location); +// tbMemberSubjectWrongService.insertTbMemberSubjectWrong(wrong); +// } +// }); + } + } else { + // 璁鸿堪 + BigDecimal discussScore = tbExamSubjectAnswerService.getDiscussScore(tbExamSubject.getExamSubjectNo(), myAnswer); + if (discussScore.compareTo(score) > 0) { + memberExamSimulateAll.setScore(score); + } else { + memberExamSimulateAll.setScore(discussScore); + } + memberExamSimulateAll.setStatus(3); + } + + + params.put("examSimulateInfoId", examSimulateInfoId); + params.put("examType", 2); + params.put("location", location); + TbMemberExamSimulateAll simulateAll = tbMemberExamSimulateAllMapper.queryMemberExamSimulateAllByParam(params); + if (simulateAll == null) { + tbMemberExamSimulateAllMapper.insertTbMemberExamSimulateAll(memberExamSimulateAll); + } else { + memberExamSimulateAll.setMemberExamSimulateAllId(simulateAll.getMemberExamSimulateAllId()); + tbMemberExamSimulateAllMapper.updateTbMemberExamSimulateAll(memberExamSimulateAll); + } + return AjaxResult.success().put("data", memberExamSimulateAll); + } + + /** + * 姝e紡鑰冭瘯绛旈 + * + * @param memberExamSimulateAllDTO + * @return ok + */ + @Override + public AjaxResult subjectFormalAnswer(MemberExamSimulateAllDTO memberExamSimulateAllDTO) { + Long memberUserId = memberExamSimulateAllDTO.getMemberUserId(); + Long examSimulateInfoId = memberExamSimulateAllDTO.getExamSimulateInfoId(); + Long examSubjectId = memberExamSimulateAllDTO.getExamSubjectId(); + String myAnswer = memberExamSimulateAllDTO.getMyAnswer(); + Long location = memberExamSimulateAllDTO.getLocation(); + Long examId = memberExamSimulateAllDTO.getExamId(); + + // 鏌ヨ褰撳墠棰樼洰 + TbExamSubject tbExamSubject = tbExamSubjectService.selectTbExamSubjectByExamSubjectId(memberExamSimulateAllDTO.getExamSubjectId()); + if (tbExamSubject == null) { + return AjaxResult.error("棰樼洰淇℃伅寮傚父"); + } + + TbExamSimulateInfo tbExamSimulateInfo = tbExamSimulateInfoMapper.selectTbExamSimulateInfoByExamSimulateInfoId(examSimulateInfoId); + TbExam exam = examService.selectTbExamByExamId(examId); + TbExamRegistration tbExamRegistration = tbExamRegistrationMapper.selectTbExamRegistrationByUserIdExamId(memberUserId, examId); + + TbExamBatch tbExamBatch = tbExamBatchMapper.getByExamIdBatchIndex(examId, tbExamRegistration.getExamBatchIndex()); + + // 鑾峰彇褰撳墠鏃堕棿 + Date currentTime = new Date(); + // 瀹氫箟鏃堕棿鏍煎紡 + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String endTime = tbExamSimulateInfo.getEndTime();// 鍋氶缁撴潫鏃堕棿瀛楃涓 + // 灏嗗瓧绗︿覆杞崲涓篋ate + Date endTimeCompare = null; + Date examEndTimeCompare = tbExamBatch.getExamEndTime(); + try { + endTimeCompare = dateFormat.parse(endTime); + // 姣旇緝鏃堕棿 + if (currentTime.after(endTimeCompare)) { + return AjaxResult.error("鍋氶鏃堕棿銆" + tbExamSimulateInfo.getStartTime() + "鑷" + tbExamSimulateInfo.getEndTime() + "銆戯紝鑰冭瘯宸茬粨鏉"); + } + if (currentTime.after(examEndTimeCompare)) { + return AjaxResult.error("鑰冭瘯鏃堕棿銆" + DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", tbExamBatch.getExamStartTime()) + "鑷" + DateUtils.parseDateToStr("yyyy-MM-dd HH:mm:ss", tbExamBatch.getExamEndTime()) + "銆戯紝鑰冭瘯宸茬粨鏉"); + } + }catch (Exception e){ + e.printStackTrace(); + } + + HashMap params = new HashMap<>(); + params.put("memberUserId", memberUserId); + params.put("examSubjectId", examSubjectId); + + // 姝g‘绛旀 + String answer = tbExamSubject.getAnswer(); + if (tbExamSubject.getSubjectType() == 3) { + if ("姝g‘".equals(answer)) { + answer = "A"; + } + if ("閿欒".equals(answer)) { + answer = "B"; + } + } + + BigDecimal score = new BigDecimal(0); + // 棰樼洰鍒嗘暟 + if (tbExamSubject.getSubjectType() == 1) { + score = exam.getSingleSelectScore(); + } else if (tbExamSubject.getSubjectType() == 2) { + score = exam.getManySelectScore(); + } else if (tbExamSubject.getSubjectType() == 3) { + score = exam.getJudgeScore(); + } else if (tbExamSubject.getSubjectType() == 4) { + score = exam.getDiscussScore(); + } + + TbMemberExamSimulateAll memberExamSimulateAll = new TbMemberExamSimulateAll(); + memberExamSimulateAll.setExamSimulateInfoId(examSimulateInfoId); + memberExamSimulateAll.setExamSubjectId(examSubjectId); + memberExamSimulateAll.setMemberUserId(memberUserId); + memberExamSimulateAll.setLocation(location); + memberExamSimulateAll.setMyAnswer(myAnswer); + memberExamSimulateAll.setAnswer(answer); + memberExamSimulateAll.setSubjectType(tbExamSubject.getSubjectType()); + memberExamSimulateAll.setExamType(1); + + if (tbExamSubject.getSubjectType() != 4) { + if (myAnswer.equals(answer)) { + memberExamSimulateAll.setStatus(1); + memberExamSimulateAll.setScore(score); + } else { + memberExamSimulateAll.setStatus(2); + memberExamSimulateAll.setScore(new BigDecimal(0)); + } + } else { + // 璁鸿堪 + BigDecimal discussScore = tbExamSubjectAnswerService.getDiscussScore(tbExamSubject.getExamSubjectNo(), myAnswer); + if (discussScore.compareTo(score) > 0) { + memberExamSimulateAll.setScore(score); + } else { + memberExamSimulateAll.setScore(discussScore); + } + memberExamSimulateAll.setStatus(3); + } + + params.put("examSimulateInfoId", examSimulateInfoId); + params.put("examType", 1); + params.put("location", location); + TbMemberExamSimulateAll simulateAll = tbMemberExamSimulateAllMapper.queryMemberExamSimulateAllByParam(params); + if (ObjectUtils.isEmpty(simulateAll)) { + tbMemberExamSimulateAllMapper.insertTbMemberExamSimulateAll(memberExamSimulateAll); + } else { + memberExamSimulateAll.setMemberExamSimulateAllId(simulateAll.getMemberExamSimulateAllId()); + tbMemberExamSimulateAllMapper.updateTbMemberExamSimulateAll(memberExamSimulateAll); + } + return AjaxResult.success(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberJoinServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberJoinServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..e6b2d47da52e90146d734ce7ba9a7315d920f2be --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberJoinServiceImpl.java @@ -0,0 +1,122 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbMemberJoin; +import com.ruoyi.hezhi.domain.dto.MemberJoinDTO; +import com.ruoyi.hezhi.mapper.TbMemberJoinMapper; +import com.ruoyi.hezhi.service.ITbMemberJoinService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 鐢ㄦ埛鍙備笌Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-11-15 + */ +@Service +public class TbMemberJoinServiceImpl implements ITbMemberJoinService +{ + @Autowired + private TbMemberJoinMapper tbMemberJoinMapper; + + /** + * 鏌ヨ鐢ㄦ埛鍙備笌 + * + * @param memberJoinId 鐢ㄦ埛鍙備笌涓婚敭 + * @return 鐢ㄦ埛鍙備笌 + */ + @Override + public TbMemberJoin selectTbMemberJoinByMemberJoinId(Long memberJoinId) + { + return tbMemberJoinMapper.selectTbMemberJoinByMemberJoinId(memberJoinId); + } + + /** + * 鏌ヨ鐢ㄦ埛鍙備笌鍒楄〃 + * + * @param tbMemberJoin 鐢ㄦ埛鍙備笌 + * @return 鐢ㄦ埛鍙備笌 + */ + @Override + public List selectTbMemberJoinList(TbMemberJoin tbMemberJoin) + { + return tbMemberJoinMapper.selectTbMemberJoinList(tbMemberJoin); + } + + /** + * 鏂板鐢ㄦ埛鍙備笌 + * + * @param tbMemberJoin 鐢ㄦ埛鍙備笌 + * @return 缁撴灉 + */ + @Override + public int insertTbMemberJoin(TbMemberJoin tbMemberJoin) + { + tbMemberJoin.setCreateTime(DateUtils.getNowDate()); + return tbMemberJoinMapper.insertTbMemberJoin(tbMemberJoin); + } + + /** + * 淇敼鐢ㄦ埛鍙備笌 + * + * @param tbMemberJoin 鐢ㄦ埛鍙備笌 + * @return 缁撴灉 + */ + @Override + public int updateTbMemberJoin(TbMemberJoin tbMemberJoin) + { + tbMemberJoin.setUpdateTime(DateUtils.getNowDate()); + return tbMemberJoinMapper.updateTbMemberJoin(tbMemberJoin); + } + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛鍙備笌 + * + * @param memberJoinIds 闇瑕佸垹闄ょ殑鐢ㄦ埛鍙備笌涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbMemberJoinByMemberJoinIds(Long[] memberJoinIds) + { + return tbMemberJoinMapper.deleteTbMemberJoinByMemberJoinIds(memberJoinIds); + } + + /** + * 鍒犻櫎鐢ㄦ埛鍙備笌淇℃伅 + * + * @param memberJoinId 鐢ㄦ埛鍙備笌涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbMemberJoinByMemberJoinId(Long memberJoinId) + { + return tbMemberJoinMapper.deleteTbMemberJoinByMemberJoinId(memberJoinId); + } + + /** + * 绔嬪嵆鍙傚姞 + * + * @param memberJoinDTO + * @return ok + */ + @Override + public AjaxResult joinNow(MemberJoinDTO memberJoinDTO) { + TbMemberJoin tbMemberJoin = new TbMemberJoin(); + tbMemberJoin.setMemberUserId(memberJoinDTO.getMemberUserId()); + tbMemberJoin.setResId(memberJoinDTO.getResId()); + tbMemberJoin.setType(memberJoinDTO.getType()); + + List memberJoinList = tbMemberJoinMapper.selectTbMemberJoinList(tbMemberJoin); + if (memberJoinList.size() > 0) { + return AjaxResult.error("鎮ㄥ凡鍙傚姞"); + } + + tbMemberJoin.setCreateTime(DateUtils.getNowDate()); + tbMemberJoinMapper.insertTbMemberJoin(tbMemberJoin); + return AjaxResult.success(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberMajorServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberMajorServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..95ac969b35bd4ec494a487164fffc9a77f094490 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberMajorServiceImpl.java @@ -0,0 +1,155 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbMemberMajor; +import com.ruoyi.hezhi.domain.dto.MemberMajorDTO; +import com.ruoyi.hezhi.mapper.TbMemberMajorMapper; +import com.ruoyi.hezhi.service.ITbMemberMajorService; +import org.apache.commons.collections4.MapUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * 鐢ㄦ埛棰樺簱涓撲笟Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-11-29 + */ +@Service +public class TbMemberMajorServiceImpl implements ITbMemberMajorService +{ + @Autowired + private TbMemberMajorMapper tbMemberMajorMapper; + + /** + * 鏌ヨ鐢ㄦ埛棰樺簱涓撲笟 + * + * @param memberMajorId 鐢ㄦ埛棰樺簱涓撲笟涓婚敭 + * @return 鐢ㄦ埛棰樺簱涓撲笟 + */ + @Override + public TbMemberMajor selectTbMemberMajorByMemberMajorId(Long memberMajorId) + { + return tbMemberMajorMapper.selectTbMemberMajorByMemberMajorId(memberMajorId); + } + + /** + * 鏌ヨ鐢ㄦ埛棰樺簱涓撲笟鍒楄〃 + * + * @param tbMemberMajor 鐢ㄦ埛棰樺簱涓撲笟 + * @return 鐢ㄦ埛棰樺簱涓撲笟 + */ + @Override + public List selectTbMemberMajorList(TbMemberMajor tbMemberMajor) + { + return tbMemberMajorMapper.selectTbMemberMajorList(tbMemberMajor); + } + + /** + * 鏂板鐢ㄦ埛棰樺簱涓撲笟 + * + * @param tbMemberMajor 鐢ㄦ埛棰樺簱涓撲笟 + * @return 缁撴灉 + */ + @Override + public int insertTbMemberMajor(TbMemberMajor tbMemberMajor) + { + tbMemberMajor.setCreateTime(DateUtils.getNowDate()); + return tbMemberMajorMapper.insertTbMemberMajor(tbMemberMajor); + } + + /** + * 淇敼鐢ㄦ埛棰樺簱涓撲笟 + * + * @param tbMemberMajor 鐢ㄦ埛棰樺簱涓撲笟 + * @return 缁撴灉 + */ + @Override + public int updateTbMemberMajor(TbMemberMajor tbMemberMajor) + { + tbMemberMajor.setUpdateTime(DateUtils.getNowDate()); + return tbMemberMajorMapper.updateTbMemberMajor(tbMemberMajor); + } + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛棰樺簱涓撲笟 + * + * @param memberMajorIds 闇瑕佸垹闄ょ殑鐢ㄦ埛棰樺簱涓撲笟涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbMemberMajorByMemberMajorIds(Long[] memberMajorIds) + { + return tbMemberMajorMapper.deleteTbMemberMajorByMemberMajorIds(memberMajorIds); + } + + /** + * 鍒犻櫎鐢ㄦ埛棰樺簱涓撲笟淇℃伅 + * + * @param memberMajorId 鐢ㄦ埛棰樺簱涓撲笟涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbMemberMajorByMemberMajorId(Long memberMajorId) + { + return tbMemberMajorMapper.deleteTbMemberMajorByMemberMajorId(memberMajorId); + } + + /** + * 鐢ㄦ埛鏂板棰樺簱涓撲笟 + * + * @param memberMajorDTO + * @return ok + */ + @Override + public AjaxResult insertMemberMajor(MemberMajorDTO memberMajorDTO) { + TbMemberMajor tbMemberMajor = tbMemberMajorMapper.selectTbMemberMajorByMemberAndMajorId(memberMajorDTO.getMemberUserId(), memberMajorDTO.getMajorId(), memberMajorDTO.getCourseId()); + if (tbMemberMajor != null) { + tbMemberMajor.setUpdateTime(DateUtils.getNowDate()); + tbMemberMajorMapper.updateTbMemberMajor(tbMemberMajor); + } else { + TbMemberMajor memberMajor = new TbMemberMajor(); + memberMajor.setMemberUserId(memberMajorDTO.getMemberUserId()); + memberMajor.setMajorId(memberMajorDTO.getMajorId()); + memberMajor.setResId(memberMajorDTO.getCourseId()); + memberMajor.setCreateTime(DateUtils.getNowDate()); + memberMajor.setType(2); + tbMemberMajorMapper.insertTbMemberMajor(memberMajor); + } + return AjaxResult.success(); + } + + /** + * 鐢ㄦ埛鏂板棰樺簱涓撲笟鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鐢ㄦ埛鏂板棰樺簱涓撲笟鍒楄〃 + */ + @Override + public List> getMemberMajorList(Map params) { + List> memberMajorList = new ArrayList<>(); + List> majorList = tbMemberMajorMapper.getMemberMajorList(params); + if (majorList.isEmpty()) { +// memberMajorList = tbMemberMajorMapper.getMemberMajorRecommendClassList(); + } else { + memberMajorList = majorList; + } + Long courseId = MapUtils.getLong(params, "courseId"); + if (courseId != null){ + List> memberMajorByCourseId = tbMemberMajorMapper.getMemberMajorByCourseId(params); + if (!memberMajorByCourseId.isEmpty()){ + Map element = memberMajorByCourseId.get(0); + long count = memberMajorList.stream().filter(item -> MapUtils.getLong(item, "courseId").equals(courseId)).count(); + if (count <= 0){ + memberMajorList.add(0, element); + } + } + } + return memberMajorList; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberOrderServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberOrderServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..9ba84d120a70f962c2b5ed1f4061e0cf2712152b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberOrderServiceImpl.java @@ -0,0 +1,312 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.hezhi.domain.*; +import com.ruoyi.hezhi.domain.dto.ExamPayInfoDto; +import com.ruoyi.hezhi.mapper.*; +import com.ruoyi.hezhi.service.ITbMemberOrderService; +import org.apache.commons.collections4.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.List; +import java.util.Map; + +/** + * 浼氬憳璁㈠崟淇℃伅Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-11-18 + */ +@Service +public class TbMemberOrderServiceImpl implements ITbMemberOrderService +{ + private final Logger log = LoggerFactory.getLogger(this.getClass()); + @Autowired + private TbMemberOrderMapper tbMemberOrderMapper; + @Autowired + private TbMemberScoreMapper tbMemberScoreMapper; + @Autowired + private TbExamRegistrationMapper tbExamRegistrationMapper; + @Autowired + private RedisCache redisCache; + @Resource + private TbConfigMapper tbConfigMapper; + @Autowired + private TbStudentMapper tbStudentMapper; + @Resource + private TbExamMapper tbExamMapper; + + /** + * 鏌ヨ浼氬憳璁㈠崟淇℃伅 + * + * @param orderId 浼氬憳璁㈠崟淇℃伅涓婚敭 + * @return 浼氬憳璁㈠崟淇℃伅 + */ + @Override + public TbMemberOrder selectTbMemberOrderByOrderId(Long orderId) + { + return tbMemberOrderMapper.selectTbMemberOrderByOrderId(orderId); + } + + /** + * 鏌ヨ浼氬憳璁㈠崟淇℃伅鍒楄〃 + * + * @param tbMemberOrder 浼氬憳璁㈠崟淇℃伅 + * @return 浼氬憳璁㈠崟淇℃伅 + */ + @Override + public List selectTbMemberOrderList(TbMemberOrder tbMemberOrder) + { + return tbMemberOrderMapper.selectTbMemberOrderList(tbMemberOrder); + } + + /** + * 鏂板浼氬憳璁㈠崟淇℃伅 + * + * @param tbMemberOrder 浼氬憳璁㈠崟淇℃伅 + * @return 缁撴灉 + */ + @Override + public int insertTbMemberOrder(TbMemberOrder tbMemberOrder) + { + tbMemberOrder.setCreateTime(DateUtils.getNowDate()); + return tbMemberOrderMapper.insertTbMemberOrder(tbMemberOrder); + } + + /** + * 淇敼浼氬憳璁㈠崟淇℃伅 + * + * @param tbMemberOrder 浼氬憳璁㈠崟淇℃伅 + * @return 缁撴灉 + */ + @Override + public int updateTbMemberOrder(TbMemberOrder tbMemberOrder) + { + tbMemberOrder.setUpdateTime(DateUtils.getNowDate()); + return tbMemberOrderMapper.updateTbMemberOrder(tbMemberOrder); + } + + /** + * 鎵归噺鍒犻櫎浼氬憳璁㈠崟淇℃伅 + * + * @param orderIds 闇瑕佸垹闄ょ殑浼氬憳璁㈠崟淇℃伅涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbMemberOrderByOrderIds(Long[] orderIds) + { + return tbMemberOrderMapper.deleteTbMemberOrderByOrderIds(orderIds); + } + + /** + * 鍒犻櫎浼氬憳璁㈠崟淇℃伅淇℃伅 + * + * @param orderId 浼氬憳璁㈠崟淇℃伅涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbMemberOrderByOrderId(Long orderId) + { + return tbMemberOrderMapper.deleteTbMemberOrderByOrderId(orderId); + } + + /** + * 鏌ヨ浼氬憳璁㈠崟淇℃伅 + * + * @param orderNo 璁㈠崟缂栧彿 + * @return 浼氬憳璁㈠崟淇℃伅 + */ + @Override + public TbMemberOrder selectOrderByOrderNo(String orderNo) { + return tbMemberOrderMapper.selectOrderByOrderNo(orderNo); + } + + /** + * 鏌ヨ鑰冭瘯鏄惁鑳芥敮浠樼殑淇℃伅 + * + * @param orderNo 璁㈠崟缂栧彿 + * @return 鑰冭瘯鏄惁鑳芥敮浠樼殑淇℃伅 + */ + @Override + public ExamPayInfoDto selectExamPayInfoByOrderNo(String orderNo) { + return tbMemberOrderMapper.selectExamPayInfoByOrderNo(orderNo); + } + + @Override + public int deleteExamCantPayOrder(){ + // 1. 鏌ヨ鎵鏈夎繃鏈熸湭鏀粯鐨勮鍗曞彿 + List orderNos = tbMemberOrderMapper.selectExpiredUnpaidOrderNos(); + + if (CollectionUtils.isEmpty(orderNos)) { + log.info("娌℃湁杩囨湡鏈敮浠樼殑鎶ュ悕璁㈠崟闇瑕佹竻鐞嗐"); + return 0; + } + + log.info("寮濮嬫竻鐞嗚繃鏈熸湭鏀粯鎶ュ悕璁㈠崟锛屾暟閲忥細{}锛岃鍗曞彿鍒楄〃锛歿}", orderNos.size(), orderNos); + + // 2. 鍒犻櫎璁㈠崟璁板綍 + int deletedOrders = tbMemberOrderMapper.deleteMemberOrderByOrderNos(orderNos); + log.info("宸插垹闄よ鍗曡褰曟暟閲忥細{}", deletedOrders); + + // 3.灏嗚冭瘯鎶ュ悕淇℃伅鐨勬敮浠樼姸鎬佹敼涓哄凡鍙栨秷 + int updateRegistrations = tbExamRegistrationMapper.updateTbExamRegistrationByOrderNos(orderNos); + log.info("宸插彇娑堣冭瘯鎶ュ悕璁㈠崟鏁伴噺锛歿}", updateRegistrations); + + return deletedOrders; + } + + + + /** + * 鏀粯鍥炶皟涓氬姟澶勭悊 + * @param orderNo 璁㈠崟鍙 + * @param payType 鏀粯鏂瑰紡 锛1-寰俊鏀粯锛2-鏀粯瀹濇敮浠橈級 + */ + @Override + public String orderPayNotify(String orderNo, Integer payType) { + TbMemberOrder order = tbMemberOrderMapper.selectOrderByOrderNo(orderNo); + + if (order.getPayStatus() != 1) { + order.setPayStatus(1); + order.setPayType(payType); + order.setPayTime(DateUtils.getTime()); + tbMemberOrderMapper.updateTbMemberOrder(order); + + TbExamRegistration tbExamRegistration = tbExamRegistrationMapper.selectTbExamRegistrationByExamRegistrationId(order.getDataId()); + // 鏇存柊鎶ュ悕淇℃伅 + if (tbExamRegistration != null) { + tbExamRegistration.setPayType(payType); + tbExamRegistration.setIsPay(1); + tbExamRegistration.setPayPrice(order.getPayPrice()); + //鐢熸垚鍑嗚冭瘉鍙 + String examNumber = getZkzh(tbExamRegistration); + tbExamRegistration.setZkzh(examNumber); + tbExamRegistrationMapper.updateTbExamRegistration(tbExamRegistration); + + //灏嗘姤鍚嶄俊鎭洖濉叆涓汉璧勬枡涓虹┖鐨勫瓧娈 + TbStudent tbStudent = tbStudentMapper.selectTbStudentByStudentId(tbExamRegistration.getMemberUserId()); + //濮撳悕銆佹у埆銆佸鍘嗐佹瘯涓氶櫌鏍°佸嚭鐢熸棩鏈 + if (StringUtils.isEmpty(tbStudent.getStudentName())){ + tbStudent.setStudentName(tbExamRegistration.getName()); + } + if (tbStudent.getSex() == null|| tbStudent.getSex() == 2){ + tbStudent.setSex(tbExamRegistration.getSex()); + } + if (StringUtils.isEmpty(tbStudent.getEducation())){ + tbStudent.setEducation(tbExamRegistration.getEducation()); + } + if (StringUtils.isEmpty(tbStudent.getGraduationSchool())){ + tbStudent.setGraduationSchool(tbExamRegistration.getGraduationSchool()); + } + if (StringUtils.isEmpty(tbStudent.getBirthday())){ + tbStudent.setBirthday(tbExamRegistration.getBirthday()); + } + //鏇存柊涓汉璧勬枡 + tbStudentMapper.updateTbStudent(tbStudent); + } + + if (order.getDeductionScore().compareTo(new BigDecimal(0)) > 0) { + // 鎵i櫎绉垎 + TbMemberScore memberScore = new TbMemberScore(); + memberScore.setMemberUserId(order.getMemberUserId()); + memberScore.setName(order.getRemarks()); + memberScore.setScore(order.getDeductionScore()); + memberScore.setType(4); + memberScore.setIncomeExpenses(2); + memberScore.setCreateTime(DateUtils.getNowDate()); + tbMemberScoreMapper.insertTbMemberScore(memberScore); + } + TbConfig aboutIntegral = tbConfigMapper.selectTbConfigByIdentifying("aboutIntegral"); + + // 姣忔敮浠榅鍏冭禒閫1绉垎 + // 绉垎鎶垫墸鐧惧垎姣 + String deductionProportionString = aboutIntegral.getConfigString3(); + //榛樿鏀粯0鍏冭禒閫1绉垎 + BigDecimal deductionProportion = BigDecimal.ZERO; + if (StringUtils.isNotEmpty(deductionProportionString)) { + try { + deductionProportion = new BigDecimal(deductionProportionString); + // 妫鏌 rate 鏄惁鍦ㄦ湁鏁堣寖鍥村唴锛屽ぇ浜0 + if (deductionProportion.compareTo(BigDecimal.ZERO) < 0) { + // 濡傛灉涓嶅湪鏈夋晥鑼冨洿鍐咃紝璁剧疆涓洪粯璁ゅ + deductionProportion = BigDecimal.ZERO; + System.err.println("deductionProportion out of range: " + deductionProportion); // 璁板綍閿欒淇℃伅 + } + } catch (NumberFormatException e) { + // 鎹曡幏鏃犳晥鏁板瓧鏍煎紡锛岃褰曟棩蹇椼佽繑鍥為粯璁ゅ + deductionProportion = BigDecimal.ZERO; + System.err.println("Invalid deductionProportion format: " + deductionProportion); // 璁板綍閿欒淇℃伅 + } + } + + if (order.getPayPrice().compareTo(new BigDecimal(0)) > 0 && deductionProportion.compareTo(BigDecimal.ZERO)!= 0 ){ + //濡傛灉瀹炰粯閲戦澶т簬0骞朵笖姝g‘璁剧疆浜嗚禒閫佹瘮渚嬶紝璁$畻鏄惁杩旂Н鍒 + //璧犻佺Н鍒 = 瀹炰粯閲戦/1绉垎鎵闇閲戦 + BigDecimal integral = order.getPayPrice().divide(deductionProportion, 0, RoundingMode.HALF_UP); + if (integral.compareTo(new BigDecimal(0)) > 0){ + //濡傛灉璧犻佺Н鍒嗗ぇ浜0锛屽垯杩涜绉垎璧犻 + TbMemberScore memberScore = new TbMemberScore(); + memberScore.setMemberUserId(order.getMemberUserId()); + memberScore.setName("璐拱鍟嗗搧璧犻佺Н鍒"); + memberScore.setScore(integral); + memberScore.setType(3); + memberScore.setIncomeExpenses(1); + memberScore.setCreateTime(DateUtils.getNowDate()); + tbMemberScoreMapper.insertTbMemberScore(memberScore); + } + } + } + return "SUCCESS"; + } + + /** + * 淇敼浼氬憳璁㈠崟淇℃伅 + * + * @param tbMemberOrder 浼氬憳璁㈠崟淇℃伅 + * @return 缁撴灉 + */ + @Override + public int updateTbMemberOrderByOrderNo(TbMemberOrder tbMemberOrder) { + return tbMemberOrderMapper.updateTbMemberOrderByOrderNo(tbMemberOrder); + } + + /** + * 鎴戠殑璁㈠崟鍒楄〃 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public List> getMemberOrderList(Map params) { + return tbMemberOrderMapper.getMemberOrderList(params); + } + + //鐢熸垚鍑嗚冭瘉鍙 + public String getZkzh(TbExamRegistration tbExamRegistration){ + //鐢熸垚鍑嗚冭瘉鍙 + String redisKey = "zkzh:" + tbExamRegistration.getCourseId()+tbExamRegistration.getStudyCenterId()+tbExamRegistration.getAgencyCode(); + int number = 1; + if (redisCache.hasKey(redisKey)) { + //鏌ュ嚭缂撳瓨涓殑鏁版嵁 + Integer cachedData = redisCache.getCacheObject(redisKey); + if (cachedData!=null) { + number = cachedData; + if (number > 999999) {//澶т簬浜嗛噸缃紝鍚﹀垯灏辩敓鎴愬噯鑰冭瘉鍙峰苟鍔1瀛樺偍 + number = 1; + } + } + } + redisCache.setCacheObject(redisKey, number+1); + // 缁檔umber鍓嶉潰琛0锛屼娇鍏舵婚暱搴︿负6浣 + String formattedNumber = String.format("%06d", number); + return tbExamRegistration.getRegistrationBatch()+tbExamRegistration.getStudyCenterId()+tbExamRegistration.getAgencyCode()+formattedNumber; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberScoreServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberScoreServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..9958830c40d5bbee6e41f6d999f32120c1bd75b4 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberScoreServiceImpl.java @@ -0,0 +1,121 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbMemberScore; +import com.ruoyi.hezhi.mapper.TbMemberScoreMapper; +import com.ruoyi.hezhi.service.ITbMemberScoreService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.util.List; +import java.util.Map; + +/** + * 鐢ㄦ埛绉垎璇︽儏Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-10-31 + */ +@Service +public class TbMemberScoreServiceImpl implements ITbMemberScoreService +{ + @Autowired + private TbMemberScoreMapper tbMemberScoreMapper; + + /** + * 鏌ヨ鐢ㄦ埛绉垎璇︽儏 + * + * @param memberScoreId 鐢ㄦ埛绉垎璇︽儏涓婚敭 + * @return 鐢ㄦ埛绉垎璇︽儏 + */ + @Override + public TbMemberScore selectTbMemberScoreByMemberScoreId(Long memberScoreId) + { + return tbMemberScoreMapper.selectTbMemberScoreByMemberScoreId(memberScoreId); + } + + /** + * 鏌ヨ鐢ㄦ埛绉垎璇︽儏鍒楄〃 + * + * @param tbMemberScore 鐢ㄦ埛绉垎璇︽儏 + * @return 鐢ㄦ埛绉垎璇︽儏 + */ + @Override + public List selectTbMemberScoreList(TbMemberScore tbMemberScore) + { + return tbMemberScoreMapper.selectTbMemberScoreList(tbMemberScore); + } + + /** + * 鏂板鐢ㄦ埛绉垎璇︽儏 + * + * @param tbMemberScore 鐢ㄦ埛绉垎璇︽儏 + * @return 缁撴灉 + */ + @Override + public int insertTbMemberScore(TbMemberScore tbMemberScore) + { + tbMemberScore.setCreateTime(DateUtils.getNowDate()); + return tbMemberScoreMapper.insertTbMemberScore(tbMemberScore); + } + + /** + * 淇敼鐢ㄦ埛绉垎璇︽儏 + * + * @param tbMemberScore 鐢ㄦ埛绉垎璇︽儏 + * @return 缁撴灉 + */ + @Override + public int updateTbMemberScore(TbMemberScore tbMemberScore) + { + tbMemberScore.setUpdateTime(DateUtils.getNowDate()); + return tbMemberScoreMapper.updateTbMemberScore(tbMemberScore); + } + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛绉垎璇︽儏 + * + * @param memberScoreIds 闇瑕佸垹闄ょ殑鐢ㄦ埛绉垎璇︽儏涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbMemberScoreByMemberScoreIds(Long[] memberScoreIds) + { + return tbMemberScoreMapper.deleteTbMemberScoreByMemberScoreIds(memberScoreIds); + } + + /** + * 鍒犻櫎鐢ㄦ埛绉垎璇︽儏淇℃伅 + * + * @param memberScoreId 鐢ㄦ埛绉垎璇︽儏涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbMemberScoreByMemberScoreId(Long memberScoreId) + { + return tbMemberScoreMapper.deleteTbMemberScoreByMemberScoreId(memberScoreId); + } + + /** + * 鎴戠殑绉垎鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鎴戠殑绉垎鍒楄〃 + */ + @Override + public List> getMemberScoreList(Map params) { + return tbMemberScoreMapper.getMemberScoreList(params); + } + + /** + * 鎴戠殑绉垎 + * + * @param params 鍙傛暟 + * @return 鎴戠殑绉垎 + */ + @Override + public Map getMemberScore(Map params) { + return tbMemberScoreMapper.getMemberScore(params); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberSignServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberSignServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..a8da8dc1471b0fd558368f067978537ebe957ad0 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberSignServiceImpl.java @@ -0,0 +1,160 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbMemberScore; +import com.ruoyi.hezhi.domain.TbMemberSign; +import com.ruoyi.hezhi.domain.dto.MemberSignDTO; +import com.ruoyi.hezhi.mapper.TbMemberScoreMapper; +import com.ruoyi.hezhi.mapper.TbMemberSignMapper; +import com.ruoyi.hezhi.service.ITbMemberSignService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 鐢ㄦ埛绛惧埌Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-10-31 + */ +@Service +public class TbMemberSignServiceImpl implements ITbMemberSignService +{ + @Autowired + private TbMemberSignMapper tbMemberSignMapper; + @Autowired + private TbMemberScoreMapper tbMemberScoreMapper; + + /** + * 鏌ヨ鐢ㄦ埛绛惧埌 + * + * @param memberSignId 鐢ㄦ埛绛惧埌涓婚敭 + * @return 鐢ㄦ埛绛惧埌 + */ + @Override + public TbMemberSign selectTbMemberSignByMemberSignId(Long memberSignId) + { + return tbMemberSignMapper.selectTbMemberSignByMemberSignId(memberSignId); + } + + /** + * 鏌ヨ鐢ㄦ埛绛惧埌鍒楄〃 + * + * @param tbMemberSign 鐢ㄦ埛绛惧埌 + * @return 鐢ㄦ埛绛惧埌 + */ + @Override + public List selectTbMemberSignList(TbMemberSign tbMemberSign) + { + return tbMemberSignMapper.selectTbMemberSignList(tbMemberSign); + } + + /** + * 鏂板鐢ㄦ埛绛惧埌 + * + * @param tbMemberSign 鐢ㄦ埛绛惧埌 + * @return 缁撴灉 + */ + @Override + public int insertTbMemberSign(TbMemberSign tbMemberSign) + { + tbMemberSign.setCreateTime(DateUtils.getNowDate()); + return tbMemberSignMapper.insertTbMemberSign(tbMemberSign); + } + + /** + * 淇敼鐢ㄦ埛绛惧埌 + * + * @param tbMemberSign 鐢ㄦ埛绛惧埌 + * @return 缁撴灉 + */ + @Override + public int updateTbMemberSign(TbMemberSign tbMemberSign) + { + tbMemberSign.setUpdateTime(DateUtils.getNowDate()); + return tbMemberSignMapper.updateTbMemberSign(tbMemberSign); + } + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛绛惧埌 + * + * @param memberSignIds 闇瑕佸垹闄ょ殑鐢ㄦ埛绛惧埌涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbMemberSignByMemberSignIds(Long[] memberSignIds) + { + return tbMemberSignMapper.deleteTbMemberSignByMemberSignIds(memberSignIds); + } + + /** + * 鍒犻櫎鐢ㄦ埛绛惧埌淇℃伅 + * + * @param memberSignId 鐢ㄦ埛绛惧埌涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbMemberSignByMemberSignId(Long memberSignId) + { + return tbMemberSignMapper.deleteTbMemberSignByMemberSignId(memberSignId); + } + + /** + * 鐢ㄦ埛绛惧埌寮圭獥 + * + * @param params 鍙傛暟 + * @return 鐢ㄦ埛绛惧埌寮圭獥 + */ + @Override + public Map getMemberSignPopup(Map params) { + return tbMemberSignMapper.getMemberSignPopup(params); + } + + /** + * 鐢ㄦ埛绛惧埌 + * + * @param memberSignDTO + * @return ok + */ + @Override + public AjaxResult memberSignDay(MemberSignDTO memberSignDTO) { + HashMap params = new HashMap<>(); + params.put("memberUserId", memberSignDTO.getMemberUserId()); + Map memberSignPopup = tbMemberSignMapper.getMemberSignPopup(params); + if (memberSignPopup.isEmpty() || "1".equals(memberSignPopup.get("isSign").toString())) { + return AjaxResult.error("涓嶅彲绛惧埌"); + } else { + BigDecimal signScore = new BigDecimal(memberSignPopup.get("signScore").toString()); + if (signScore.compareTo(new BigDecimal(0)) > 0) { + // 娣诲姞绛惧埌璁板綍 + TbMemberSign memberSign = new TbMemberSign(); + memberSign.setMemberUserId(memberSignDTO.getMemberUserId()); + memberSign.setSignScore(signScore); + memberSign.setSignYear(LocalDate.now().getYear()+""); + memberSign.setSignMonth(LocalDate.now().getMonthValue()+""); + memberSign.setSignDay(LocalDate.now().getDayOfMonth()+""); + memberSign.setSignDate(LocalDate.now().getYear() + "-" + LocalDate.now().getMonthValue() + "-" + LocalDate.now().getDayOfMonth()); + memberSign.setCreateTime(DateUtils.getNowDate()); + tbMemberSignMapper.insertTbMemberSign(memberSign); + + // 娣诲姞绉垎璁板綍 + TbMemberScore memberScore = new TbMemberScore(); + memberScore.setMemberUserId(memberSignDTO.getMemberUserId()); + memberScore.setName("姣忔棩绛惧埌"); + memberScore.setScore(signScore); + memberScore.setType(1); + memberScore.setIncomeExpenses(1); + memberScore.setCreateTime(DateUtils.getNowDate()); + tbMemberScoreMapper.insertTbMemberScore(memberScore); + } + + } + return AjaxResult.success(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberSubjectAllServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberSubjectAllServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..4181b867ae8455b12a408dbbcc8c6060824d65fa --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberSubjectAllServiceImpl.java @@ -0,0 +1,267 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.*; +import com.ruoyi.hezhi.domain.dto.MemberSubjectAllDTO; +import com.ruoyi.hezhi.mapper.TbExamCourseMapper; +import com.ruoyi.hezhi.mapper.TbMemberSubjectAllMapper; +import com.ruoyi.hezhi.mapper.TbMemberSubjectCollectMapper; +import com.ruoyi.hezhi.service.ITbExamSubjectService; +import com.ruoyi.hezhi.service.ITbMemberSubjectAllService; +import com.ruoyi.hezhi.service.ITbMemberSubjectWrongService; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 鎴戠殑棰樼洰Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-11-06 + */ +@Service +public class TbMemberSubjectAllServiceImpl implements ITbMemberSubjectAllService +{ + @Autowired + private TbMemberSubjectAllMapper tbMemberSubjectAllMapper; + @Autowired + private ITbExamSubjectService tbExamSubjectService; + @Autowired + private ITbMemberSubjectWrongService tbMemberSubjectWrongService; + @Autowired + private ThreadPoolTaskExecutor threadPoolTaskExecutor; + @Autowired + private TbMemberSubjectCollectMapper tbMemberSubjectCollectMapper; + @Autowired + private TbExamCourseMapper tbExamCourseMapper; + + /** + * 鏌ヨ鎴戠殑棰樼洰 + * + * @param memberSubjectAllId 鎴戠殑棰樼洰涓婚敭 + * @return 鎴戠殑棰樼洰 + */ + @Override + public TbMemberSubjectAll selectTbMemberSubjectAllByMemberSubjectAllId(Long memberSubjectAllId) + { + return tbMemberSubjectAllMapper.selectTbMemberSubjectAllByMemberSubjectAllId(memberSubjectAllId); + } + + /** + * 鏌ヨ鎴戠殑棰樼洰鍒楄〃 + * + * @param tbMemberSubjectAll 鎴戠殑棰樼洰 + * @return 鎴戠殑棰樼洰 + */ + @Override + public List selectTbMemberSubjectAllList(TbMemberSubjectAll tbMemberSubjectAll) + { + return tbMemberSubjectAllMapper.selectTbMemberSubjectAllList(tbMemberSubjectAll); + } + + /** + * 鏂板鎴戠殑棰樼洰 + * + * @param tbMemberSubjectAll 鎴戠殑棰樼洰 + * @return 缁撴灉 + */ + @Override + public int insertTbMemberSubjectAll(TbMemberSubjectAll tbMemberSubjectAll) + { + tbMemberSubjectAll.setCreateTime(DateUtils.getNowDate()); + return tbMemberSubjectAllMapper.insertTbMemberSubjectAll(tbMemberSubjectAll); + } + + /** + * 淇敼鎴戠殑棰樼洰 + * + * @param tbMemberSubjectAll 鎴戠殑棰樼洰 + * @return 缁撴灉 + */ + @Override + public int updateTbMemberSubjectAll(TbMemberSubjectAll tbMemberSubjectAll) + { + tbMemberSubjectAll.setUpdateTime(DateUtils.getNowDate()); + return tbMemberSubjectAllMapper.updateTbMemberSubjectAll(tbMemberSubjectAll); + } + + /** + * 鎵归噺鍒犻櫎鎴戠殑棰樼洰 + * + * @param memberSubjectAllIds 闇瑕佸垹闄ょ殑鎴戠殑棰樼洰涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbMemberSubjectAllByMemberSubjectAllIds(Long[] memberSubjectAllIds) + { + return tbMemberSubjectAllMapper.deleteTbMemberSubjectAllByMemberSubjectAllIds(memberSubjectAllIds); + } + + /** + * 鍒犻櫎鎴戠殑棰樼洰淇℃伅 + * + * @param memberSubjectAllId 鎴戠殑棰樼洰涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbMemberSubjectAllByMemberSubjectAllId(Long memberSubjectAllId) + { + return tbMemberSubjectAllMapper.deleteTbMemberSubjectAllByMemberSubjectAllId(memberSubjectAllId); + } + + /** + * 棰樼洰鏁伴噺 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public int memberSubjectAllCount(Map params) { + return tbMemberSubjectAllMapper.memberSubjectAllCount(params); + } + + /** + * 鏌ヨ鎴戠殑棰樼洰 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public TbMemberSubjectAll queryMemberSubjectAllByParam(Map params) { + return tbMemberSubjectAllMapper.queryMemberSubjectAllByParam(params); + } + + /** + * 鏌ヨ鎴戠殑棰樼洰鍒楄〃 + * + * @param memberSubjectAll 鎴戠殑棰樼洰 + * @return 鎴戠殑棰樼洰闆嗗悎 + */ + @Override + public List selectMemberSubjectAllList(TbMemberSubjectAll memberSubjectAll) { + return tbMemberSubjectAllMapper.selectMemberSubjectAllList(memberSubjectAll); + } + + /** + * 缁冧範绛旈 + * + * @param memberSubjectAllDTO + * @return ok + */ + @Override + public AjaxResult subjectPracticeAnswer(MemberSubjectAllDTO memberSubjectAllDTO) { + Long memberUserId = memberSubjectAllDTO.getMemberUserId(); + Long examSubjectId = memberSubjectAllDTO.getExamSubjectId(); + Long courseId = memberSubjectAllDTO.getCourseId(); + Integer practiceType = memberSubjectAllDTO.getPracticeType(); + Integer subjectType = memberSubjectAllDTO.getSubjectType(); + String myAnswer = memberSubjectAllDTO.getMyAnswer(); + Long location = memberSubjectAllDTO.getLocation(); + + // 鏌ヨ褰撳墠棰樼洰 + TbExamSubject tbExamSubject = tbExamSubjectService.selectTbExamSubjectByExamSubjectId(memberSubjectAllDTO.getExamSubjectId()); + if (tbExamSubject == null) { + return AjaxResult.error("棰樼洰淇℃伅寮傚父"); + } + HashMap params = new HashMap<>(); + params.put("memberUserId", memberUserId); + params.put("examSubjectId", examSubjectId); + + // 姝g‘绛旀 + String answer = tbExamSubject.getAnswer(); + if (tbExamSubject.getSubjectType() == 3) { + if ("姝g‘".equals(answer)) { + answer = "A"; + } + if ("閿欒".equals(answer)) { + answer = "B"; + } + } + + TbMemberSubjectAll memberSubjectAll = new TbMemberSubjectAll(); + memberSubjectAll.setExamSubjectId(examSubjectId); + memberSubjectAll.setMemberUserId(memberUserId); + memberSubjectAll.setLocation(location); + memberSubjectAll.setPracticeType(practiceType); + memberSubjectAll.setSubjectType(subjectType);//todo 鎻掑叆鍋氶璁板綍 + memberSubjectAll.setMyAnswer(myAnswer); + memberSubjectAll.setAnswer(answer); + + if (tbExamSubject.getSubjectType() != 4) { + if (myAnswer.equals(answer)) { + memberSubjectAll.setStatus(1); + } else { + memberSubjectAll.setStatus(2); + //娣诲姞閿欓[鏀惰棌棰樼洰] +// String finalAnswer = answer; + threadPoolTaskExecutor.execute(()->{ + //娣诲姞閿欓 + TbMemberSubjectCollect memberSubjectCollect = tbMemberSubjectCollectMapper.selectTbMemberSubjectCollectByMemberUserIdSubjectId( + memberUserId, + examSubjectId, + courseId); + if (ObjectUtils.isEmpty(memberSubjectCollect)){ + TbMemberSubjectCollect subjectCollect = new TbMemberSubjectCollect(); + subjectCollect.setMemberUserId(memberUserId); + subjectCollect.setExamSubjectId(examSubjectId); + subjectCollect.setCourseId(courseId); + subjectCollect.setCreateTime(DateUtils.getNowDate()); + tbMemberSubjectCollectMapper.insertTbMemberSubjectCollect(subjectCollect); + } + }); + } + } else { + memberSubjectAll.setStatus(3); + } + + + params.put("practiceType", practiceType); + TbMemberSubjectAll subjectAllByParam = tbMemberSubjectAllMapper.queryMemberSubjectAllByParam(params); + if (subjectAllByParam == null) { + tbMemberSubjectAllMapper.insertTbMemberSubjectAll(memberSubjectAll); + } else { + memberSubjectAll.setMemberSubjectAllId(subjectAllByParam.getMemberSubjectAllId()); + tbMemberSubjectAllMapper.updateTbMemberSubjectAll(memberSubjectAll); + } + return AjaxResult.success().put("data", memberSubjectAll); + } + + /** + * 缁冧範绛旈娓呯┖ + * + * @param memberSubjectAllDTO + * @return ok + */ + @Override + public AjaxResult subjectPracticeAnswerClear(MemberSubjectAllDTO memberSubjectAllDTO) { + Long memberUserId = memberSubjectAllDTO.getMemberUserId(); + Long courseId = memberSubjectAllDTO.getCourseId(); + Integer practiceType = memberSubjectAllDTO.getPracticeType(); + //鍙傛暟鏍¢獙 + if (ObjectUtils.isEmpty(memberUserId)) { + throw new ServiceException("缂哄皯鍙傛暟memberUserId"); + } + if (ObjectUtils.isEmpty(courseId)) { + throw new ServiceException("缂哄皯鍙傛暟courseId"); + } + if (ObjectUtils.isEmpty(practiceType)) { + throw new ServiceException("缂哄皯鍙傛暟practiceType"); + } + HashMap params = new HashMap<>(); + params.put("memberUserId", memberUserId); +// params.put("practiceType", practiceType); //鍏ㄦ竻锛屼笉鍒ゆ柇鑱旂郴绫诲瀷锛屼笉鐒剁粺璁′細涔 + TbExamCourse examCourseDetail = tbExamCourseMapper.getSubjectWarehouseClassIdByCourseId(courseId); + if (ObjectUtils.isEmpty(examCourseDetail)) { + throw new ServiceException("姝よ绋嬫湭娣诲姞棰樺簱"); + } + params.put("subjectWarehouseClassId", examCourseDetail.getSubjectWarehouseClassId()); + return AjaxResult.success(tbMemberSubjectAllMapper.deleteTbMemberSubjectAllByMsp(params)); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberSubjectCollectServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberSubjectCollectServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..38b1831b3e33d955e8ada3fcddb7aadca592cb89 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberSubjectCollectServiceImpl.java @@ -0,0 +1,170 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbMemberSubjectCollect; +import com.ruoyi.hezhi.domain.dto.MemberSubjectCollectDTO; +import com.ruoyi.hezhi.mapper.TbExamSubjectAnswerMapper; +import com.ruoyi.hezhi.mapper.TbMemberSubjectCollectMapper; +import com.ruoyi.hezhi.service.ITbMemberSubjectCollectService; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * 鎴戠殑鏀惰棌棰樼洰Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-11-07 + */ +@Service +public class TbMemberSubjectCollectServiceImpl implements ITbMemberSubjectCollectService +{ + @Autowired + private TbMemberSubjectCollectMapper tbMemberSubjectCollectMapper; + @Autowired + private TbExamSubjectAnswerMapper examSubjectAnswerMapper; + + /** + * 鏌ヨ鎴戠殑鏀惰棌棰樼洰 + * + * @param memberSubjectCollectId 鎴戠殑鏀惰棌棰樼洰涓婚敭 + * @return 鎴戠殑鏀惰棌棰樼洰 + */ + @Override + public TbMemberSubjectCollect selectTbMemberSubjectCollectByMemberSubjectCollectId(Long memberSubjectCollectId) + { + return tbMemberSubjectCollectMapper.selectTbMemberSubjectCollectByMemberSubjectCollectId(memberSubjectCollectId); + } + + /** + * 鏌ヨ鎴戠殑鏀惰棌棰樼洰鍒楄〃 + * + * @param tbMemberSubjectCollect 鎴戠殑鏀惰棌棰樼洰 + * @return 鎴戠殑鏀惰棌棰樼洰 + */ + @Override + public List selectTbMemberSubjectCollectList(TbMemberSubjectCollect tbMemberSubjectCollect) + { + return tbMemberSubjectCollectMapper.selectTbMemberSubjectCollectList(tbMemberSubjectCollect); + } + + /** + * 鏂板鎴戠殑鏀惰棌棰樼洰 + * + * @param tbMemberSubjectCollect 鎴戠殑鏀惰棌棰樼洰 + * @return 缁撴灉 + */ + @Override + public int insertTbMemberSubjectCollect(TbMemberSubjectCollect tbMemberSubjectCollect) + { + tbMemberSubjectCollect.setCreateTime(DateUtils.getNowDate()); + return tbMemberSubjectCollectMapper.insertTbMemberSubjectCollect(tbMemberSubjectCollect); + } + + /** + * 淇敼鎴戠殑鏀惰棌棰樼洰 + * + * @param tbMemberSubjectCollect 鎴戠殑鏀惰棌棰樼洰 + * @return 缁撴灉 + */ + @Override + public int updateTbMemberSubjectCollect(TbMemberSubjectCollect tbMemberSubjectCollect) + { + tbMemberSubjectCollect.setUpdateTime(DateUtils.getNowDate()); + return tbMemberSubjectCollectMapper.updateTbMemberSubjectCollect(tbMemberSubjectCollect); + } + + /** + * 鎵归噺鍒犻櫎鎴戠殑鏀惰棌棰樼洰 + * + * @param memberSubjectCollectIds 闇瑕佸垹闄ょ殑鎴戠殑鏀惰棌棰樼洰涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbMemberSubjectCollectByMemberSubjectCollectIds(Long[] memberSubjectCollectIds) + { + return tbMemberSubjectCollectMapper.deleteTbMemberSubjectCollectByMemberSubjectCollectIds(memberSubjectCollectIds); + } + + /** + * 鍒犻櫎鎴戠殑鏀惰棌棰樼洰淇℃伅 + * + * @param memberSubjectCollectId 鎴戠殑鏀惰棌棰樼洰涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbMemberSubjectCollectByMemberSubjectCollectId(Long memberSubjectCollectId) + { + return tbMemberSubjectCollectMapper.deleteTbMemberSubjectCollectByMemberSubjectCollectId(memberSubjectCollectId); + } + + /** + * 鏀惰棌鎴栧彇娑堟敹钘忛鐩 + * + * @param memberSubjectCollectDTO + * @return ok + */ + @Override + public AjaxResult subjectCollectOrCancelCollect(MemberSubjectCollectDTO memberSubjectCollectDTO) { + TbMemberSubjectCollect memberSubjectCollect = tbMemberSubjectCollectMapper.selectTbMemberSubjectCollectByMemberUserIdSubjectId( + memberSubjectCollectDTO.getMemberUserId(), + memberSubjectCollectDTO.getExamSubjectId(), + memberSubjectCollectDTO.getCourseId()); + if (ObjectUtils.isNotEmpty(memberSubjectCollect)) { + tbMemberSubjectCollectMapper.deleteTbMemberSubjectCollectByMemberSubjectCollectId(memberSubjectCollect.getMemberSubjectCollectId()); + } else { + TbMemberSubjectCollect subjectCollect = new TbMemberSubjectCollect(); + subjectCollect.setMemberUserId(memberSubjectCollectDTO.getMemberUserId()); + subjectCollect.setExamSubjectId(memberSubjectCollectDTO.getExamSubjectId()); + subjectCollect.setCourseId(memberSubjectCollectDTO.getCourseId()); + subjectCollect.setCreateTime(DateUtils.getNowDate()); + tbMemberSubjectCollectMapper.insertTbMemberSubjectCollect(subjectCollect); + } + return AjaxResult.success("鎿嶄綔鎴愬姛"); + } + + /** + * 棰樼洰鏀惰棌鍒楄〃 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public List> getMemberSubjectCollectList(Map params) { + List> memberSubjectCollectList = tbMemberSubjectCollectMapper.getMemberSubjectCollectList(params); + if (!memberSubjectCollectList.isEmpty()) { + for (Map examSubjectInfo : memberSubjectCollectList) { + // 棰樼洰绫诲瀷锛1-鍗曢夛紝2-澶氶夛紝3-鍒ゆ柇锛4-璁鸿堪锛 + int subjectType = Integer.parseInt(examSubjectInfo.get("subjectType").toString()); + String examSubjectNo = examSubjectInfo.get("examSubjectNo").toString(); + if (subjectType != 4) { + // 閫夐」鍒楄〃 + List> subjectSelectList = examSubjectAnswerMapper.selectSelectList(null, examSubjectNo); + examSubjectInfo.put("subjectSelectList", subjectSelectList); + // 澶勭悊answer瀛楁 + String answer = examSubjectInfo.get("answer").toString(); + String[] answerOptions = answer.split(","); + List> correctOptions = new ArrayList<>(); + for (String option : answerOptions) { + for (Map selectOption : subjectSelectList) { + if (option.equals(selectOption.get("subjectOption"))) { + correctOptions.add(selectOption); + break; + } + } + } + examSubjectInfo.put("correctOptions", correctOptions); + } else { + examSubjectInfo.put("subjectSelectList", null); + examSubjectInfo.put("correctOptions", null); + } + } + } + return memberSubjectCollectList; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberSubjectWrongServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberSubjectWrongServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..21b7f0ec3aad206fa2c0c91c7915073ba0534f06 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbMemberSubjectWrongServiceImpl.java @@ -0,0 +1,109 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbMemberSubjectWrong; +import com.ruoyi.hezhi.mapper.TbMemberSubjectWrongMapper; +import com.ruoyi.hezhi.service.ITbMemberSubjectWrongService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * 鎴戠殑閿欓Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-11-07 + */ +@Service +public class TbMemberSubjectWrongServiceImpl implements ITbMemberSubjectWrongService +{ + @Autowired + private TbMemberSubjectWrongMapper tbMemberSubjectWrongMapper; + + /** + * 鏌ヨ鎴戠殑閿欓 + * + * @param memberSubjectWrongId 鎴戠殑閿欓涓婚敭 + * @return 鎴戠殑閿欓 + */ + @Override + public TbMemberSubjectWrong selectTbMemberSubjectWrongByMemberSubjectWrongId(Long memberSubjectWrongId) + { + return tbMemberSubjectWrongMapper.selectTbMemberSubjectWrongByMemberSubjectWrongId(memberSubjectWrongId); + } + + /** + * 鏌ヨ鎴戠殑閿欓鍒楄〃 + * + * @param tbMemberSubjectWrong 鎴戠殑閿欓 + * @return 鎴戠殑閿欓 + */ + @Override + public List selectTbMemberSubjectWrongList(TbMemberSubjectWrong tbMemberSubjectWrong) + { + return tbMemberSubjectWrongMapper.selectTbMemberSubjectWrongList(tbMemberSubjectWrong); + } + + /** + * 鏂板鎴戠殑閿欓 + * + * @param tbMemberSubjectWrong 鎴戠殑閿欓 + * @return 缁撴灉 + */ + @Override + public int insertTbMemberSubjectWrong(TbMemberSubjectWrong tbMemberSubjectWrong) + { + tbMemberSubjectWrong.setCreateTime(DateUtils.getNowDate()); + return tbMemberSubjectWrongMapper.insertTbMemberSubjectWrong(tbMemberSubjectWrong); + } + + /** + * 淇敼鎴戠殑閿欓 + * + * @param tbMemberSubjectWrong 鎴戠殑閿欓 + * @return 缁撴灉 + */ + @Override + public int updateTbMemberSubjectWrong(TbMemberSubjectWrong tbMemberSubjectWrong) + { + tbMemberSubjectWrong.setUpdateTime(DateUtils.getNowDate()); + return tbMemberSubjectWrongMapper.updateTbMemberSubjectWrong(tbMemberSubjectWrong); + } + + /** + * 鎵归噺鍒犻櫎鎴戠殑閿欓 + * + * @param memberSubjectWrongIds 闇瑕佸垹闄ょ殑鎴戠殑閿欓涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbMemberSubjectWrongByMemberSubjectWrongIds(Long[] memberSubjectWrongIds) + { + return tbMemberSubjectWrongMapper.deleteTbMemberSubjectWrongByMemberSubjectWrongIds(memberSubjectWrongIds); + } + + /** + * 鍒犻櫎鎴戠殑閿欓淇℃伅 + * + * @param memberSubjectWrongId 鎴戠殑閿欓涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbMemberSubjectWrongByMemberSubjectWrongId(Long memberSubjectWrongId) + { + return tbMemberSubjectWrongMapper.deleteTbMemberSubjectWrongByMemberSubjectWrongId(memberSubjectWrongId); + } + + /** + * 閿欓鏁伴噺 + * + * @param params 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public int countByParams(Map params) { + return tbMemberSubjectWrongMapper.countByParams(params); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbNewsServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbNewsServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..eed4879be2d365c4cbc9c5e97f6d8c144a085350 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbNewsServiceImpl.java @@ -0,0 +1,126 @@ +package com.ruoyi.hezhi.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbNews; +import com.ruoyi.hezhi.domain.vo.NewsVO; +import com.ruoyi.hezhi.mapper.TbNewsMapper; +import com.ruoyi.hezhi.service.ITbNewsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; + +import java.util.List; + +/** + * 鏂伴椈鍜ㄨService涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-09-14 + */ +@Service +public class TbNewsServiceImpl implements ITbNewsService +{ + @Autowired + private TbNewsMapper tbNewsMapper; + + /** + * 鏌ヨ鏂伴椈鍜ㄨ + * + * @param newsId 鏂伴椈鍜ㄨ涓婚敭 + * @return 鏂伴椈鍜ㄨ + */ + @Override + public TbNews selectTbNewsByNewsId(Long newsId) + { + return tbNewsMapper.selectTbNewsByNewsId(newsId); + } + + /** + * 鏌ヨ鏂伴椈鍜ㄨ鍒楄〃 + * + * @param tbNews 鏂伴椈鍜ㄨ + * @return 鏂伴椈鍜ㄨ + */ + @Override + public List selectTbNewsList(TbNews tbNews) + { + return tbNewsMapper.selectTbNewsList(tbNews); + } + + /** + * 鏂板鏂伴椈鍜ㄨ + * + * @param tbNews 鏂伴椈鍜ㄨ + * @return 缁撴灉 + */ + @Override + public int insertTbNews(TbNews tbNews) + { + tbNews.setCreateTime(DateUtils.getNowDate()); + return tbNewsMapper.insertTbNews(tbNews); + } + + /** + * 淇敼鏂伴椈鍜ㄨ + * + * @param tbNews 鏂伴椈鍜ㄨ + * @return 缁撴灉 + */ + @Override + public int updateTbNews(TbNews tbNews) + { + tbNews.setUpdateTime(DateUtils.getNowDate()); + return tbNewsMapper.updateTbNews(tbNews); + } + + /** + * 鎵归噺鍒犻櫎鏂伴椈鍜ㄨ + * + * @param newsIds 闇瑕佸垹闄ょ殑鏂伴椈鍜ㄨ涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbNewsByNewsIds(Long[] newsIds) + { + return tbNewsMapper.deleteTbNewsByNewsIds(newsIds); + } + + /** + * 鍒犻櫎鏂伴椈鍜ㄨ淇℃伅 + * + * @param newsId 鏂伴椈鍜ㄨ涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbNewsByNewsId(Long newsId) + { + return tbNewsMapper.deleteTbNewsByNewsId(newsId); + } + + /** + * 鑾峰彇鏂伴椈鍒楄〃 + * @return + */ + @Override + public List getNewsList() { + return tbNewsMapper.selectNewsList(new TbNews()); + } + + /** + * 璇︽儏 + * @param id + * @return + */ + @Override + public NewsVO getDetail(Long id) { + TbNews detail = tbNewsMapper.selectTbNewsByNewsId(id); + NewsVO vo = BeanUtil.toBean(detail,NewsVO.class); + if(ObjectUtils.isEmpty(vo)){ + throw new ServiceException("鏌ヨ鏂伴椈璇︽儏寮傚父",500); + }else{ + return vo; + } + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbNoticeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbNoticeServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..f949b9d503ecdd08aefccbc927d3b807dfbece59 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbNoticeServiceImpl.java @@ -0,0 +1,166 @@ +package com.ruoyi.hezhi.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.hezhi.domain.TbNotice; +import com.ruoyi.hezhi.domain.vo.NoticeVO; +import com.ruoyi.hezhi.mapper.TbNoticeMapper; +import com.ruoyi.hezhi.service.ITbNoticeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; + +import java.util.List; +import java.util.Map; + +/** + * 閫氱煡鍏憡Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-09-14 + */ +@Service +public class TbNoticeServiceImpl implements ITbNoticeService +{ + @Autowired + private TbNoticeMapper tbNoticeMapper; + + /** + * 鏌ヨ閫氱煡鍏憡 + * + * @param noticeId 閫氱煡鍏憡涓婚敭 + * @return 閫氱煡鍏憡 + */ + @Override + public TbNotice selectTbNoticeByNoticeId(Long noticeId) + { + return tbNoticeMapper.selectTbNoticeByNoticeId(noticeId); + } + + /** + * 鏌ヨ閫氱煡鍏憡鍒楄〃 + * + * @param tbNotice 閫氱煡鍏憡 + * @return 閫氱煡鍏憡 + */ + @Override + public List selectTbNoticeList(TbNotice tbNotice) + { + return tbNoticeMapper.selectTbNoticeList(tbNotice); + } + + /** + * 鏂板閫氱煡鍏憡 + * + * @param tbNotice 閫氱煡鍏憡 + * @return 缁撴灉 + */ + @Override + public int insertTbNotice(TbNotice tbNotice) + { + if (SecurityUtils.isAdmin(SecurityUtils.getUserId())){ + tbNotice.setPublisherId(0L); + }else { + tbNotice.setPublisherId(SecurityUtils.getUserId()); + } + tbNotice.setCreateTime(DateUtils.getNowDate()); + return tbNoticeMapper.insertTbNotice(tbNotice); + } + + /** + * 淇敼閫氱煡鍏憡 + * + * @param tbNotice 閫氱煡鍏憡 + * @return 缁撴灉 + */ + @Override + public int updateTbNotice(TbNotice tbNotice) + { + tbNotice.setUpdateTime(DateUtils.getNowDate()); + return tbNoticeMapper.updateTbNotice(tbNotice); + } + + /** + * 鎵归噺鍒犻櫎閫氱煡鍏憡 + * + * @param noticeIds 闇瑕佸垹闄ょ殑閫氱煡鍏憡涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbNoticeByNoticeIds(Long[] noticeIds) + { + return tbNoticeMapper.deleteTbNoticeByNoticeIds(noticeIds); + } + + /** + * 鍒犻櫎閫氱煡鍏憡淇℃伅 + * + * @param noticeId 閫氱煡鍏憡涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbNoticeByNoticeId(Long noticeId) + { + return tbNoticeMapper.deleteTbNoticeByNoticeId(noticeId); + } + + /** + * 鑾峰彇鍏憡鍒楄〃 + * @return + */ + @Override + public List getNoticeList() { + return tbNoticeMapper.selectNoticeList(); + } + + /** + * 鑾峰彇鍏憡鍒楄〃 + * + * @param params 鍙傛暟 + * @return 鍏憡鍒楄〃 + */ + @Override + public List> getPCNoticeList(Map params) { + return tbNoticeMapper.getPCNoticeList(params); + } + + /** + * 鏌ヨ鍏憡璇︽儏 + * + * @param params 鍙傛暟 + * @return 鍏憡鍒楄〃 + */ + @Override + public Map getNoticeInfo(Map params) { + return tbNoticeMapper.getNoticeInfo(params); + } + + /** + * 娴忚閲+1 + * + * @param noticeId 閫氱煡鍏憡涓婚敭 + * @return 缁撴灉 + */ + @Override + public int addViewsNum(Long noticeId) { + return tbNoticeMapper.addViewsNum(noticeId); + } + + /** + * 鑾峰彇璇︽儏 + * @param id + * @return + */ + @Override + public NoticeVO getDetail(Long id) { + TbNotice detail = tbNoticeMapper.selectTbNoticeByNoticeId(id); + NoticeVO vo = BeanUtil.toBean(detail,NoticeVO.class); + if(ObjectUtils.isEmpty(vo)){ + throw new ServiceException("鏌ヨ鍏憡璇︽儏寮傚父",500); + }else{ + return vo; + } + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbPostAddressServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbPostAddressServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..6f6661868d3ded855eadd5a530de1980d82f2aa3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbPostAddressServiceImpl.java @@ -0,0 +1,110 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbPostAddress; +import com.ruoyi.hezhi.mapper.TbPostAddressMapper; +import com.ruoyi.hezhi.service.ITbPostAddressService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 閭瘎鍦板潃Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-11-20 + */ +@Service +public class TbPostAddressServiceImpl implements ITbPostAddressService +{ + @Autowired + private TbPostAddressMapper tbPostAddressMapper; + + /** + * 鏌ヨ閭瘎鍦板潃 + * + * @param postAddressId 閭瘎鍦板潃涓婚敭 + * @return 閭瘎鍦板潃 + */ + @Override + public TbPostAddress selectTbPostAddressByPostAddressId(Long postAddressId) + { + return tbPostAddressMapper.selectTbPostAddressByPostAddressId(postAddressId); + } + + /** + * 鏌ヨ閭瘎鍦板潃鍒楄〃 + * + * @param tbPostAddress 閭瘎鍦板潃 + * @return 閭瘎鍦板潃 + */ + @Override + public List selectTbPostAddressList(TbPostAddress tbPostAddress) + { + return tbPostAddressMapper.selectTbPostAddressList(tbPostAddress); + } + + /** + * 鏂板閭瘎鍦板潃 + * + * @param tbPostAddress 閭瘎鍦板潃 + * @return 缁撴灉 + */ + @Override + public int insertTbPostAddress(TbPostAddress tbPostAddress) + { + tbPostAddress.setCreateTime(DateUtils.getNowDate()); + return tbPostAddressMapper.insertTbPostAddress(tbPostAddress); + } + + /** + * 淇敼閭瘎鍦板潃 + * + * @param tbPostAddress 閭瘎鍦板潃 + * @return 缁撴灉 + */ + @Override + public int updateTbPostAddress(TbPostAddress tbPostAddress) + { + tbPostAddress.setUpdateTime(DateUtils.getNowDate()); + return tbPostAddressMapper.updateTbPostAddress(tbPostAddress); + } + + /** + * 鎵归噺鍒犻櫎閭瘎鍦板潃 + * + * @param postAddressIds 闇瑕佸垹闄ょ殑閭瘎鍦板潃涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbPostAddressByPostAddressIds(Long[] postAddressIds) + { + return tbPostAddressMapper.deleteTbPostAddressByPostAddressIds(postAddressIds); + } + + /** + * 鍒犻櫎閭瘎鍦板潃淇℃伅 + * + * @param postAddressId 閭瘎鍦板潃涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbPostAddressByPostAddressId(Long postAddressId) + { + return tbPostAddressMapper.deleteTbPostAddressByPostAddressId(postAddressId); + } + + /** + * 鏌ヨ閭瘎鍦板潃 + * + * @param memberUserId 鐢ㄦ埛ID + * @param dataId 鐩稿叧璧勬簮ID + * @param type 绫诲瀷锛0-鍏ㄩ儴锛1-璇佷功锛 + * @return 閭瘎鍦板潃 + */ + @Override + public TbPostAddress selectTbPostAddressByMemberUserIdDataId(Long memberUserId, Long dataId, Integer type) { + return tbPostAddressMapper.selectTbPostAddressByMemberUserIdDataId(memberUserId, dataId, type); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbRegionServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbRegionServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..72e0267b8828be75f04f9c8e46c3d4548028f543 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbRegionServiceImpl.java @@ -0,0 +1,167 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbRegion; +import com.ruoyi.hezhi.mapper.TbRegionMapper; +import com.ruoyi.hezhi.service.ITbRegionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * 琛屾斂鍖哄煙Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-10-21 + */ +@Service +public class TbRegionServiceImpl implements ITbRegionService +{ + @Autowired + private TbRegionMapper tbRegionMapper; + + /** + * 鏌ヨ琛屾斂鍖哄煙 + * + * @param id 琛屾斂鍖哄煙涓婚敭 + * @return 琛屾斂鍖哄煙 + */ + @Override + public TbRegion selectTbRegionById(Long id) + { + return tbRegionMapper.selectTbRegionById(id); + } + + /** + * 鏌ヨ琛屾斂鍖哄煙鍒楄〃 + * + * @param tbRegion 琛屾斂鍖哄煙 + * @return 琛屾斂鍖哄煙 + */ + @Override + public List selectTbRegionList(TbRegion tbRegion) + { + return tbRegionMapper.selectTbRegionList(tbRegion); + } + + /** + * 鏂板琛屾斂鍖哄煙 + * + * @param tbRegion 琛屾斂鍖哄煙 + * @return 缁撴灉 + */ + @Override + public int insertTbRegion(TbRegion tbRegion) + { + tbRegion.setCreateTime(DateUtils.getNowDate()); + return tbRegionMapper.insertTbRegion(tbRegion); + } + + /** + * 淇敼琛屾斂鍖哄煙 + * + * @param tbRegion 琛屾斂鍖哄煙 + * @return 缁撴灉 + */ + @Override + public int updateTbRegion(TbRegion tbRegion) + { + tbRegion.setUpdateTime(DateUtils.getNowDate()); + return tbRegionMapper.updateTbRegion(tbRegion); + } + + /** + * 鎵归噺鍒犻櫎琛屾斂鍖哄煙 + * + * @param ids 闇瑕佸垹闄ょ殑琛屾斂鍖哄煙涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbRegionByIds(Long[] ids) + { + return tbRegionMapper.deleteTbRegionByIds(ids); + } + + /** + * 鍒犻櫎琛屾斂鍖哄煙淇℃伅 + * + * @param id 琛屾斂鍖哄煙涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbRegionById(Long id) + { + return tbRegionMapper.deleteTbRegionById(id); + } + + /** + * 鏌ヨ琛屾斂鍖哄煙鍒楄〃 + * + * @param params 鍙傛暟 + * @return 琛屾斂鍖哄煙闆嗗悎 + */ + @Override + public List getRegionList(Map params) { + return tbRegionMapper.getRegionList(params); + } + + /** + * 琛屾斂鍖哄煙鏍戝垪琛 + * + * @return 琛屾斂鍖哄煙鏍戝垪琛 + */ + @Override + public List selectTbRegionTreeList() { + TbRegion tbRegion = new TbRegion(); + tbRegion.setDelFlag(0); + List list = tbRegionMapper.selectTbRegionList(tbRegion); + return this.toTree(list, 0L); + } + + /** + * 鏂瑰紡涓锛氫娇鐢ㄤ袱灞傚惊鐜疄鐜 + * @param treeList + * @return + */ + @Override + public List toTree(List treeList, Long pid) { + List retList = new ArrayList(); + for (TbRegion parent : treeList) { + if (pid.equals(parent.getPid())) { + retList.add(parent); + } + for (TbRegion childOne : treeList) { + if (childOne.getPid().equals(parent.getId())) { + if (parent.getChildrenList() == null) { + parent.setChildrenList(new ArrayList()); + } + parent.getChildrenList().add(childOne); + } + } + } + return retList; + } + + /** + * 鏌ヨ琛屾斂鍖哄煙鍒楄〃鐪 + * + * @return 琛屾斂鍖哄煙闆嗗悎 + */ + @Override + public List selectRegionProvinceList() { + return tbRegionMapper.selectRegionProvinceList(); + } + + /** + * 鏌ヨ琛屾斂鍖哄煙鍒楄〃鐪 + * + * @return 琛屾斂鍖哄煙闆嗗悎 + */ + @Override + public List selectRegionCityOrAreaList(Integer id) { + return tbRegionMapper.selectRegionCityOrAreaList(id); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbSmsCodeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbSmsCodeServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..6377294ba2e020ac286e28a07989a22a7485b12b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbSmsCodeServiceImpl.java @@ -0,0 +1,173 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbSmsCode; +import com.ruoyi.hezhi.mapper.TbSmsCodeMapper; +import com.ruoyi.hezhi.service.ITbSmsCodeService; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Calendar; +import java.util.List; + +/** + * 鐭俊楠岃瘉鐮丼ervice涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-11-06 + */ +@Service +public class TbSmsCodeServiceImpl implements ITbSmsCodeService +{ + @Autowired + private TbSmsCodeMapper tbSmsCodeMapper; + + /** + * 鏌ヨ鐭俊楠岃瘉鐮 + * + * @param smsCodeId 鐭俊楠岃瘉鐮佷富閿 + * @return 鐭俊楠岃瘉鐮 + */ + @Override + public TbSmsCode selectTbSmsCodeBySmsCodeId(Long smsCodeId) + { + return tbSmsCodeMapper.selectTbSmsCodeBySmsCodeId(smsCodeId); + } + + /** + * 鏌ヨ鐭俊楠岃瘉鐮佸垪琛 + * + * @param tbSmsCode 鐭俊楠岃瘉鐮 + * @return 鐭俊楠岃瘉鐮 + */ + @Override + public List selectTbSmsCodeList(TbSmsCode tbSmsCode) + { + return tbSmsCodeMapper.selectTbSmsCodeList(tbSmsCode); + } + + /** + * 鏂板鐭俊楠岃瘉鐮 + * + * @param tbSmsCode 鐭俊楠岃瘉鐮 + * @return 缁撴灉 + */ + @Override + public int insertTbSmsCode(TbSmsCode tbSmsCode) + { + tbSmsCode.setCreateTime(DateUtils.getNowDate()); + return tbSmsCodeMapper.insertTbSmsCode(tbSmsCode); + } + + /** + * 淇敼鐭俊楠岃瘉鐮 + * + * @param tbSmsCode 鐭俊楠岃瘉鐮 + * @return 缁撴灉 + */ + @Override + public int updateTbSmsCode(TbSmsCode tbSmsCode) + { + tbSmsCode.setUpdateTime(DateUtils.getNowDate()); + return tbSmsCodeMapper.updateTbSmsCode(tbSmsCode); + } + + /** + * 鎵归噺鍒犻櫎鐭俊楠岃瘉鐮 + * + * @param smsCodeIds 闇瑕佸垹闄ょ殑鐭俊楠岃瘉鐮佷富閿 + * @return 缁撴灉 + */ + @Override + public int deleteTbSmsCodeBySmsCodeIds(Long[] smsCodeIds) + { + return tbSmsCodeMapper.deleteTbSmsCodeBySmsCodeIds(smsCodeIds); + } + + /** + * 鍒犻櫎鐭俊楠岃瘉鐮佷俊鎭 + * + * @param smsCodeId 鐭俊楠岃瘉鐮佷富閿 + * @return 缁撴灉 + */ + @Override + public int deleteTbSmsCodeBySmsCodeId(Long smsCodeId) + { + return tbSmsCodeMapper.deleteTbSmsCodeBySmsCodeId(smsCodeId); + } + + /** + * 鐢熸垚楠岃瘉鐮佽褰 + * @param phone 鎵嬫満鍙 + * @param smsCode 楠岃瘉鐮 + * @param type 绫诲瀷锛0-榛樿锛1-鎵嬫満鍙风櫥褰曪紝2-淇敼涓汉璧勬枡锛3-鑰冭瘯鎶ュ悕锛 + * @return 缁撴灉 + */ + @Override + public AjaxResult sendSmsCodeInsert(String phone, String smsCode, Integer type) { + TbSmsCode tbSmsCode = new TbSmsCode(); + tbSmsCode.setPhone(phone); + tbSmsCode.setSmsCode(smsCode); + tbSmsCode.setType(type); + tbSmsCode.setStatus(0); + tbSmsCode.setCreateTime(DateUtils.getNowDate()); + tbSmsCode.setDelFlag(0); + tbSmsCodeMapper.insertTbSmsCode(tbSmsCode); + return AjaxResult.success("鍙戦佹垚鍔").put("data", smsCode); + } + + /** + * 鏍¢獙楠岃瘉鐮 + * @param phone 鎵嬫満鍙 + * @param smsCode 楠岃瘉鐮 + * @param type 绫诲瀷锛0-榛樿锛1-鎵嬫満鍙风櫥褰曪紝2-淇敼涓汉璧勬枡锛3-鑰冭瘯鎶ュ悕锛 + * @return 缁撴灉 + */ + @Override + public String checkSmsCode(String phone, String smsCode, Integer type) { + TbSmsCode tbSmsCode = tbSmsCodeMapper.checkSmsCode(phone, smsCode, type); + if (ObjectUtils.isEmpty(tbSmsCode)) { + return "楠岃瘉鐮侀敊璇"; + } + if (tbSmsCode.getStatus() == 1) { + return "楠岃瘉鐮佸凡浣跨敤锛岃閲嶆柊鑾峰彇"; + } + if (DateUtils.compare(tbSmsCode.getCreateTime(), Calendar.MINUTE, 5)) { + return "楠岃瘉鐮佸凡瓒呮椂"; + } + tbSmsCode.setStatus(1); + tbSmsCode.setUpdateTime(DateUtils.getNowDate()); + if (tbSmsCodeMapper.updateTbSmsCode(tbSmsCode) > 0) { + return "SUCCESS"; + } else { + return "FAIL"; + } + } + + /** + * 鐢熸垚楠岃瘉鐮佽褰 + * @param phone 鎵嬫満鍙 + * @param smsCode 楠岃瘉鐮 + * @param type 绫诲瀷锛0-榛樿锛1-鎵嬫満鍙风櫥褰曪紝2-淇敼涓汉璧勬枡锛3-鑰冭瘯鎶ュ悕锛 + * @return 缁撴灉 + */ + @Override + public AjaxResult checkPhoneSmsCode(String phone, String smsCode, Integer type) { + TbSmsCode tbSmsCode = tbSmsCodeMapper.checkSmsCode(phone, smsCode, type); + if (ObjectUtils.isEmpty(tbSmsCode)) { + return AjaxResult.error("楠岃瘉鐮侀敊璇"); + } + if (tbSmsCode.getStatus() == 1) { + return AjaxResult.error("楠岃瘉鐮佸凡浣跨敤锛岃閲嶆柊鑾峰彇"); + } + if (DateUtils.compare(tbSmsCode.getCreateTime(), Calendar.MINUTE, 5)) { + return AjaxResult.error("楠岃瘉鐮佸凡瓒呮椂"); + } + tbSmsCode.setStatus(1); + tbSmsCode.setUpdateTime(DateUtils.getNowDate()); + // tbSmsCodeMapper.updateTbSmsCode(tbSmsCode); + return AjaxResult.success(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbStudentServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbStudentServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..67d4bfde00e614120b980b15ac3e7c30e72f557c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbStudentServiceImpl.java @@ -0,0 +1,767 @@ +package com.ruoyi.hezhi.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import com.alibaba.fastjson2.JSONObject; +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.enums.ServiceResponseEnum; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.RSAUtils; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.common.weixin.config.WeiXinXcxMemberConfig; +import com.ruoyi.common.weixin.utils.WeiXinXcxMemberUtils; +import com.ruoyi.hezhi.domain.TbStudent; +import com.ruoyi.hezhi.domain.dto.ImportStudentDTO; +import com.ruoyi.hezhi.domain.dto.MemberUserLoginDTO; +import com.ruoyi.hezhi.domain.dto.StudentDTO; +import com.ruoyi.hezhi.mapper.TbStudentMapper; +import com.ruoyi.hezhi.service.ITbSmsCodeService; +import com.ruoyi.hezhi.service.ITbStudentService; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.ibatis.session.ExecutorType; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataAccessException; +import org.springframework.dao.DuplicateKeyException; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import javax.validation.Valid; +import java.time.LocalDateTime; +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +/** + * 瀛﹀憳Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-10-21 + */ +@Service +public class TbStudentServiceImpl implements ITbStudentService { + @Autowired + private TbStudentMapper tbStudentMapper; + @Resource + private RedisCache redisCache; + @Resource + private ITbSmsCodeService smsCodeService; + @Resource + private WeiXinXcxMemberUtils weiXinXcxMemberUtils; + @Resource + private WeiXinXcxMemberConfig weiXinXcxMemberConfig; + @Resource + private SqlSessionFactory sqlSessionFactory; + + /** + * 鏌ヨ瀛﹀憳 + * + * @param studentId 瀛﹀憳涓婚敭 + * @return 瀛﹀憳 + */ + @Override + public TbStudent selectTbStudentByStudentId(Long studentId) { + return tbStudentMapper.selectTbStudentByStudentId(studentId); + } + + /** + * 鏌ヨ瀛﹀憳鍒楄〃 + * + * @param tbStudent 瀛﹀憳 + * @return 瀛﹀憳 + */ + @Override + public List selectTbStudentList(TbStudent tbStudent) { + return tbStudentMapper.selectTbStudentList(tbStudent); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public String importUser(List list){ + if (list.isEmpty()) { + throw new ServiceException("Excel鏁版嵁涓虹┖"); + } + // 鍘婚噸 + list = list.stream().distinct().collect(Collectors.toList()); + + // 瀛樻斁澶辫触淇℃伅 + Map errorList = new HashMap<>(); + int successRow = 0; + List insertList = new ArrayList<>(); + // 杞崲涓 TbStudent 瀵硅薄 + List tbStudents = BeanUtil.copyToList(list, TbStudent.class); + + // 鎵归噺鏌ヨ鏁版嵁搴撲腑宸插瓨鍦ㄧ殑鎵嬫満鍙峰拰韬唤璇佸彿 + Set phoneSet = tbStudents.stream().map(TbStudent::getPhone).collect(Collectors.toSet()); + Set idCardSet = tbStudents.stream() + .map(TbStudent::getIdentityCard) + .filter(ObjectUtils::isNotEmpty) + .collect(Collectors.toSet()); + + // 鏌ヨ鏁版嵁搴撳凡瀛樺湪鐨勬墜鏈哄彿鍜岃韩浠借瘉鍙 + List existingPhoneList = tbStudentMapper.selectTbStudentByPhones(phoneSet); + List existingIdCardList = tbStudentMapper.selectTbStudentByIdCards(idCardSet); + + // 灏嗘暟鎹簱鏌ヨ缁撴灉杞崲涓哄彲鏌ヨ鐨勯泦鍚 + Set existingPhones = existingPhoneList.stream().map(TbStudent::getPhone).collect(Collectors.toSet()); + Set existingIdCards = existingIdCardList.stream().map(TbStudent::getIdentityCard).collect(Collectors.toSet()); + + // 鏍¢獙骞跺噯澶囨彃鍏ユ暟鎹 + for (TbStudent tbStudent : tbStudents) { + try{ + checkImportStudent(tbStudent); + }catch (ServiceException e){ + errorList.put(tbStudent.getPhone(), e.getMessage()); + continue; + } + if (existingPhones.contains(tbStudent.getPhone())) { + errorList.put(tbStudent.getPhone(), "鎵嬫満鍙峰凡瀛樺湪"); + continue; + } + + if (ObjectUtils.isNotEmpty(tbStudent.getIdentityCard()) && existingIdCards.contains(tbStudent.getIdentityCard())) { + errorList.put(tbStudent.getPhone(), "韬唤璇佸彿鐮佸凡瀛樺湪"); + continue; + } + // 濉厖鍏朵粬瀛楁 + tbStudent.setStudentNumber(IdUtil.fastSimpleUUID()); + tbStudent.setCreateTime(DateUtils.getNowDate()); + tbStudent.setExamineStatus(1); + tbStudent.setFrozenStatus(0); + tbStudent.setHeadPortrait("https://image.xnszz.com/IMG_1280_1280@FuvEKIdCm5NN36gZN9gJhk2Ei0-p.jpg"); + tbStudent.setNickName("瀛﹀憳_" + IdUtils.fastSimpleUUID().substring(1, 8)); + tbStudent.setPasswordUnencrypted("Aa123456"); + tbStudent.setPassword(SecurityUtils.encryptPassword("Aa123456")); + insertList.add(tbStudent); + } + + if (!insertList.isEmpty()){ + try { + int insertCount = tbStudentMapper.batchInsertStudents(insertList); + successRow = insertCount; + } catch (DuplicateKeyException e) { + // 杩欓噷濡傛灉鏁版嵁搴撳敮涓绾︽潫鎶ラ敊锛岄渶瑕佹媶寮鍗曟潯鎻掑叆澶勭悊 + for (TbStudent student : insertList) { + try { + tbStudentMapper.insertTbStudent(student); + successRow++; + } catch (DuplicateKeyException ex) { + if (ex.getMessage().contains("identity_card")) { + errorList.put(student.getPhone(), "鎵嬫満鍙锋垨韬唤璇佸彿鐮佸凡瀛樺湪锛屽鍏xcel涓彲鑳芥湁閲嶅鏁版嵁"); + } + if (ex.getMessage().contains("phone")) { + errorList.put(student.getPhone(), "鎵嬫満鍙锋垨韬唤璇佸彿鐮佸凡瀛樺湪锛屽鍏xcel涓彲鑳芥湁閲嶅鏁版嵁"); + } + } catch (Exception ex) { + errorList.put(student.getPhone(), "瀵煎叆鏁版嵁搴撳け璐"); + } + } + } + } + if (successRow>0) { + String baseMessage = "瀵煎叆鎴愬姛" + successRow + "鏉℃暟鎹, 澶辫触" + errorList.size() + "鏉℃暟鎹"; + if (!errorList.isEmpty()) { + List failedInfoStrings = new ArrayList<>(); + for (Map.Entry entry : errorList.entrySet()) { + failedInfoStrings.add("鑱旂郴鏂瑰紡锛"+entry.getKey() + "锛堝師鍥狅細" + entry.getValue() + "锛
"); + } + baseMessage += ", 澶辫触淇℃伅锛
" + String.join(" ", failedInfoStrings); + } + return baseMessage; + } else { + String message = "鏃犳暟鎹鍏, 澶辫触" + errorList.size() + "鏉℃暟鎹"; + if (!errorList.isEmpty()) { + List failedInfoStrings = new ArrayList<>(); + for (Map.Entry entry : errorList.entrySet()) { + failedInfoStrings.add("鑱旂郴鏂瑰紡锛"+entry.getKey() + "锛堝師鍥狅細" + entry.getValue() + "锛
"); + } + message += ", 澶辫触淇℃伅锛
" + String.join(" ", failedInfoStrings); + } + return message; + } + } + + /** + * 鏂板瀛﹀憳 + * + * @param tbStudent 瀛﹀憳 + * @return 缁撴灉 + */ + @Override + public int insertTbStudent(TbStudent tbStudent) { + checkStudent(tbStudent); + tbStudent.setCreateTime(DateUtils.getNowDate()); + tbStudent.setDelFlag(0); + tbStudent.setExamineStatus(1); + tbStudent.setStudentNumber(IdUtils.fastSimpleUUID()); + if (StringUtils.isEmpty(tbStudent.getHeadPortrait())){ + tbStudent.setHeadPortrait("https://image.xnszz.com/IMG_1280_1280@FuvEKIdCm5NN36gZN9gJhk2Ei0-p.jpg"); + } + if (StringUtils.isEmpty(tbStudent.getNickName())){ + tbStudent.setNickName("瀛﹀憳_" + IdUtils.fastSimpleUUID().substring(1, 8)); + } + + TbStudent studentPhone = tbStudentMapper.selectTbStudentBy(tbStudent.getPhone(), null); + if (ObjectUtils.isNotEmpty(studentPhone)){ + throw new ServiceException("鏂板澶辫触锛屾墜鏈哄彿鐮佸凡瀛樺湪銆"); + } + //韬唤璇佸彿涓嶆槸蹇呭~锛屾湁浜嗗啀鏍¢獙 + if (ObjectUtils.isNotEmpty(tbStudent.getIdentityCard())){ + TbStudent studentId = tbStudentMapper.selectTbStudentBy(null, tbStudent.getIdentityCard()); + if (ObjectUtils.isNotEmpty(studentId)){ + throw new ServiceException("鏂板澶辫触锛岃韩浠借瘉鍙风爜宸插瓨鍦ㄣ"); + } + } + if (tbStudent.getExamineStatus()==1&&StringUtils.isNotEmpty(tbStudent.getIdentityCard())){ + //瀹℃牳閫氳繃骞朵笖韬唤璇佸彿涓嶄负绌,璁剧疆榛樿瀵嗙爜 + tbStudent.setPasswordUnencrypted("Aa123456"); + tbStudent.setPassword(SecurityUtils.encryptPassword("Aa123456")); + } + return tbStudentMapper.insertTbStudent(tbStudent); + + } + + private void checkStudent(TbStudent tbStudent) { + //鏍¢獙濮撳悕銆佹у埆銆佸嚭鐢熸棩鏈熴佹墜鏈虹數璇濄佽韩浠借瘉鍙枫佽韩浠借瘉鍥藉窘闈€佽韩浠借瘉浜哄儚闈€佹瘯涓氳瘉涔︿笉鑳戒负绌 + if (StringUtils.isEmpty(tbStudent.getStudentName())||tbStudent.getSex()==null||StringUtils.isEmpty(tbStudent.getBirthday())||StringUtils.isEmpty(tbStudent.getPhone())||StringUtils.isEmpty(tbStudent.getIdentityCard())||StringUtils.isEmpty(tbStudent.getIdentityCardBadge())||StringUtils.isEmpty(tbStudent.getIdentityCardPortrait())||StringUtils.isEmpty(tbStudent.getGraduationCertificate())){ + throw new ServiceException("瀛﹀憳淇℃伅涓嶅畬鏁达紝璇峰~鍐欏畬鏁淬"); + } + } + + private void checkImportStudent(TbStudent tbStudent) { + //鏍¢獙濮撳悕銆佹у埆銆佸嚭鐢熸棩鏈熴佹墜鏈虹數璇濄佽韩浠借瘉鍙枫佽韩浠借瘉鍥藉窘闈€佽韩浠借瘉浜哄儚闈€佹瘯涓氳瘉涔︿笉鑳戒负绌 + if (StringUtils.isEmpty(tbStudent.getStudentName())||tbStudent.getSex()==null||StringUtils.isEmpty(tbStudent.getBirthday())||StringUtils.isEmpty(tbStudent.getPhone())||StringUtils.isEmpty(tbStudent.getIdentityCard())){ + throw new ServiceException("瀛﹀憳淇℃伅涓嶅畬鏁达紝璇峰~鍐欏畬鏁淬"); + } + //鏍¢獙鍑虹敓鏃ユ湡銆佹瘯涓氭椂闂存牸寮忔槸鍚︽槸2021-01-01鏍煎紡 + if (!DateUtils.isValidDate(tbStudent.getBirthday())){ + throw new ServiceException("鍑虹敓鏃ユ湡鏍煎紡閿欒锛岃濉啓2025-01-01鏍煎紡銆"); + } + if (StringUtils.isNotEmpty(tbStudent.getGraduationTime())){ + if (!DateUtils.isValidDate(tbStudent.getGraduationTime())){ + throw new ServiceException("姣曚笟鏃堕棿鏍煎紡閿欒锛岃濉啓2025-01-01鏍煎紡銆"); + } + } + } + + /** + * 淇敼瀛﹀憳 + * + * @param tbStudent 瀛﹀憳 + * @return 缁撴灉 + */ + @Override + public int updateTbStudent(TbStudent tbStudent) { + checkStudent(tbStudent); + tbStudent.setUpdateTime(DateUtils.getNowDate()); + TbStudent tbStudent1 = tbStudentMapper.selectTbStudentByStudentId(tbStudent.getStudentId()); + if (ObjectUtils.isNotEmpty(tbStudent1)&&!tbStudent1.getPhone().equals(tbStudent.getPhone())){ + //鎵嬫満鍙锋敼鍙樹簡锛屾牎楠屾墜鏈哄彿鏄惁宸插瓨鍦 + TbStudent studentPhone = tbStudentMapper.selectTbStudentBy(tbStudent.getPhone(), null); + if (ObjectUtils.isNotEmpty(studentPhone)){ + throw new ServiceException("淇敼澶辫触锛屾偍淇敼鐨勬墜鏈哄彿鐮佸凡瀛樺湪銆"); + } + } + //韬唤璇佸彿涓嶆槸蹇呭~锛屾湁浜嗗啀鏍¢獙 + if (ObjectUtils.isNotEmpty(tbStudent.getIdentityCard())){ + if (ObjectUtils.isNotEmpty(tbStudent1)&&!tbStudent.getIdentityCard().equals(tbStudent1.getIdentityCard())){ + TbStudent studentId = tbStudentMapper.selectTbStudentBy(null, tbStudent.getIdentityCard()); + if (ObjectUtils.isNotEmpty(studentId)){ + throw new ServiceException("淇敼澶辫触锛屾偍淇敼鐨勮韩浠借瘉鍙风爜宸插瓨鍦ㄣ"); + } + } + } + if (tbStudent.getExamineStatus()==1&&StringUtils.isEmpty(tbStudent.getPassword())){ + //瀹℃牳閫氳繃骞朵笖娌℃湁瀵嗙爜,璁剧疆榛樿瀵嗙爜 + tbStudent.setPasswordUnencrypted("Aa123456"); + tbStudent.setPassword(SecurityUtils.encryptPassword("Aa123456")); + } + return tbStudentMapper.updateTbStudent(tbStudent); + } + + /** + * 鎵归噺鍒犻櫎瀛﹀憳 + * + * @param studentIds 闇瑕佸垹闄ょ殑瀛﹀憳涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbStudentByStudentIds(Long[] studentIds) { + return tbStudentMapper.deleteTbStudentByStudentIds(studentIds); + } + + /** + * 鍒犻櫎瀛﹀憳淇℃伅 + * + * @param studentId 瀛﹀憳涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbStudentByStudentId(Long studentId) { + return tbStudentMapper.deleteTbStudentByStudentId(studentId); + } + + /** + * 瀛﹀憳璁よ瘉 + * + * @param studentDTO + * @return ok + */ + @Override + public AjaxResult authenticationStudent(StudentDTO studentDTO) { + TbStudent phone = tbStudentMapper.selectTbStudentBy(studentDTO.getPhone(), null); + if (phone == null) { + return AjaxResult.error("鎵嬫満鍙凤細" + studentDTO.getPhone() + "鏈敞鍐岋紝璇疯緭鍏ユ纭殑鎵嬫満鍙"); + } + if (Objects.equals(phone.getExamineStatus(), 1)){ + return AjaxResult.error("鎵嬫満鍙凤細" + studentDTO.getPhone() + "宸茶璇侊紝璇峰嬁閲嶅璁よ瘉"); + } + TbStudent tbStudent = new TbStudent(); + tbStudent.setStudentId(studentDTO.getStudentId()); + tbStudent.setStudentName(studentDTO.getStudentName()); + tbStudent.setSex(studentDTO.getSex()); + tbStudent.setBirthday(DateUtil.parse(studentDTO.getBirthday(), "yyyy-MM-dd").toString("yyyy-MM-dd")); + tbStudent.setPhone(studentDTO.getPhone()); + tbStudent.setIdentityCard(studentDTO.getIdentityCard()); + tbStudent.setIdentityCardBadge(studentDTO.getIdentityCardBadge()); + tbStudent.setIdentityCardPortrait(studentDTO.getIdentityCardPortrait()); + tbStudent.setGraduationCertificate(studentDTO.getGraduationCertificate()); + + tbStudent.setExamineStatus(0); + tbStudentMapper.updateTbStudent(tbStudent); + return AjaxResult.success(); + } + + /** + * 鎵爜鐧婚檰杞 + * + * @param studentDTO 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public AjaxResult userCodeLogin(StudentDTO studentDTO) { + String loginUuid = studentDTO.getScanUuid(); + + String redisKey = CacheConstants.CODE_LOGIN_TOKEN_KEY + loginUuid; + if (!redisCache.hasKey(redisKey)) { + throw new ServiceException("鎵爜鏈巿鏉"); + } + + String gzhOpenId = redisCache.getCacheObject(redisKey).toString(); + + // 鏌ヨ鐢ㄦ埛淇℃伅 + TbStudent tbStudent = tbStudentMapper.selectTbStudentByGzhOpenId(gzhOpenId); + if (ObjectUtils.isEmpty(tbStudent)) { + // 鏂板鐢ㄦ埛 + TbStudent insertStudent = new TbStudent(); + insertStudent.setGzhOpenId(gzhOpenId); + insertStudent.setSex(2); + insertStudent.setStudentNumber(IdUtils.fastSimpleUUID()); + insertStudent.setCreateTime(DateUtils.getNowDate()); + insertStudent.setExamineStatus(3); + insertStudent.setFrozenStatus(0); + insertStudent.setHeadPortrait("https://image.xnszz.com/IMG_1280_1280@FuvEKIdCm5NN36gZN9gJhk2Ei0-p.jpg"); + insertStudent.setNickName("瀛﹀憳_" + IdUtils.fastSimpleUUID().substring(1, 8)); + + tbStudentMapper.insertTbStudent(insertStudent); + } else { + if (tbStudent.getFrozenStatus() == 1) { + return AjaxResult.error("鐢ㄦ埛宸茶鍐荤粨锛岃鑱旂郴绠$悊鍛橈紒锛侊紒"); + } + // 鐧诲綍鎴愬姛 + userLoginSuccess(tbStudent, 4); + } + redisCache.deleteObject(redisKey); + return AjaxResult.success(tbStudentMapper.selectTbStudentByGzhOpenId(gzhOpenId)); + + } + + /** + * 鎵嬫満鍙风櫥褰 + * + * @param studentDTO 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public AjaxResult userPhoneLogin(StudentDTO studentDTO) { + String phone = studentDTO.getPhone(); + String smsCode = studentDTO.getSmsCode(); + String uuid = studentDTO.getUuid(); + String code = studentDTO.getCode(); + + // 鏍¢獙楠岃瘉鐮 + // if (StringUtils.isNotBlank(uuid)) { + // // redis缂撳瓨key + // String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, ""); + // // 楠岃瘉鐮佸 + // String captcha = redisCache.getCacheObject(verifyKey); + // // 绉婚櫎 + // redisCache.deleteObject(verifyKey); + // if (captcha == null) { + // // throw new ServiceException(ServiceResponseEnum.CAPTCHA_EXPIRE); + // return AjaxResult.error("鍥惧舰楠岃瘉鐮佸け鏁"); + // } + // + // if (!code.equalsIgnoreCase(captcha)) { + // // throw new ServiceException(ServiceResponseEnum.CAPTCHA_ERROR); + // return AjaxResult.error("鍥惧舰楠岃瘉鐮侀敊璇"); + // } + // } + + // 鏍¢獙鐭俊楠岃瘉鐮 + // if (StringUtils.isNotBlank(smsCode)) { + // String checkSmsCode = smsCodeService.checkSmsCode(phone, smsCode, 1); + // if (!"SUCCESS".equals(checkSmsCode)) { + // // throw new ServiceException(ServiceResponseEnum.SMSCODE_ERROR); + // return AjaxResult.error(checkSmsCode); + // } + // } + + // 鏌ヨ鐢ㄦ埛淇℃伅 + TbStudent student = tbStudentMapper.selectTbStudentBy(phone, null); + if (ObjectUtils.isEmpty(student)) { + // 鏂板鐢ㄦ埛 + TbStudent insertStudent = new TbStudent(); + insertStudent.setPhone(phone); + insertStudent.setSex(2);// 榛樿涓烘湭鐭ワ紝涔熷氨鏄┖ + insertStudent.setStudentNumber(IdUtils.fastSimpleUUID()); + insertStudent.setCreateTime(DateUtils.getNowDate()); + insertStudent.setExamineStatus(3); + insertStudent.setFrozenStatus(0); + insertStudent.setHeadPortrait("https://image.xnszz.com/IMG_1280_1280@FuvEKIdCm5NN36gZN9gJhk2Ei0-p.jpg"); + insertStudent.setNickName("瀛﹀憳_" + IdUtils.fastSimpleUUID().substring(1, 8)); + + tbStudentMapper.insertTbStudent(insertStudent); + } else { + if (student.getFrozenStatus() == 1) { + return AjaxResult.error("鐢ㄦ埛宸茶鍐荤粨锛岃鑱旂郴绠$悊鍛橈紒锛侊紒"); + } + // 鐧诲綍鎴愬姛 + userLoginSuccess(student, 1); + } + return AjaxResult.success(tbStudentMapper.selectTbStudentBy(phone, null)); + } + + /** + * 韬唤璇佸彿鐮佺櫥褰 + * + * @param studentDTO 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public AjaxResult userIdentityCardLogin(StudentDTO studentDTO) { + String identityCard = studentDTO.getIdentityCard(); + String passwordUnencrypted = studentDTO.getPasswordUnencrypted(); + + // 鏌ヨ鐢ㄦ埛淇℃伅 + TbStudent student = tbStudentMapper.selectTbStudentBy(null, identityCard); + if (ObjectUtils.isEmpty(student)) { + return AjaxResult.error("鐢ㄦ埛涓嶅瓨鍦紝璇风敤鎵嬫満鍙风櫥褰曞悗濉啓韬唤璇佸彿"); + } else { + //鏌ョ湅璐﹀彿鏄惁瀹℃牳锛屾病瀹℃牳閫氳繃鏄病鏈夊瘑鐮佺殑锛屾彁绀烘湭瀹℃牳 + if (student.getExamineStatus() != 1) { + return AjaxResult.error("鐢ㄦ埛鏈鏍搁氳繃锛岃鑱旂郴绠$悊鍛橈紒锛侊紒"); + } + // 璐﹀彿鏄惁璁剧疆瀵嗙爜锛屽瘑鐮佹牎楠 + if (StringUtils.isBlank(student.getPassword()) || !SecurityUtils.matchesPassword(passwordUnencrypted, student.getPassword())) { + return AjaxResult.error("璐﹀彿鎴栧瘑鐮侀敊璇"); + } else { + if (student.getFrozenStatus() == 1) { + return AjaxResult.error("鐢ㄦ埛宸茶鍐荤粨锛岃鑱旂郴绠$悊鍛橈紒锛侊紒"); + } + // 鐧诲綍鎴愬姛 + userLoginSuccess(student, 3); + } + + } + return AjaxResult.success(tbStudentMapper.selectTbStudentBy(null, identityCard)); + } + + /** + * 鐢ㄦ埛鐧诲綍鎴愬姛 + * + * @param userInfo 鐢ㄦ埛 + * @param loginType 锛0-榛樿锛1-鎵嬫満鍙凤紝2-寰俊锛3-韬唤璇佸彿锛4-鍏紬鍙锋壂鐮侊級 + */ + public void userLoginSuccess(TbStudent userInfo, Integer loginType) { + // 鐧诲綍鏍囪瘑 + String loginToken = IdUtils.getUserLoginToken(); + userInfo.setLoginToken(loginToken); + userInfo.setLoginType(loginType); + + + String redisKey = CacheConstants.PC_LOGIN_TOKEN_KEY + loginToken; + String redisValue = RSAUtils.publicEncrypt(userInfo.getStudentNumber()); + + redisCache.setCacheObject(redisKey, redisValue, 3, TimeUnit.DAYS); + + userInfo.setLoginTokenEncrypt(RSAUtils.publicEncrypt(loginToken)); + + tbStudentMapper.updateTbStudent(userInfo); + } + + /** + * 鎵惧洖瀵嗙爜 + * + * @param studentDTO 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public AjaxResult userRetrievePassword(StudentDTO studentDTO) { + String phone = studentDTO.getPhone(); + String uuid = studentDTO.getUuid(); + String code = studentDTO.getCode(); + String identityCard = studentDTO.getIdentityCard(); + String passwordUnencrypted = studentDTO.getPasswordUnencrypted(); + String passwordUnencryptedConfirm = studentDTO.getPasswordUnencryptedConfirm(); + + if (!passwordUnencrypted.equals(passwordUnencryptedConfirm)) { + return AjaxResult.error("涓ゆ瀵嗙爜杈撳叆涓嶆纭"); + } + + // 鏍¢獙楠岃瘉鐮 + // if (StringUtils.isNotBlank(uuid)) { + // // redis缂撳瓨key + // String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, ""); + // // 楠岃瘉鐮佸 + // String captcha = redisCache.getCacheObject(verifyKey); + // // 绉婚櫎 + // redisCache.deleteObject(verifyKey); + // if (captcha == null) { + // return AjaxResult.error("鍥惧舰楠岃瘉鐮佸け鏁"); + // } + // + // if (!code.equalsIgnoreCase(captcha)) { + // return AjaxResult.error("鍥惧舰楠岃瘉鐮侀敊璇"); + // } + // } + + // 鏌ヨ鐢ㄦ埛淇℃伅 + TbStudent student = tbStudentMapper.selectTbStudentBy(phone, identityCard); + if (ObjectUtils.isEmpty(student)) { + return AjaxResult.error("鐢ㄦ埛涓嶅瓨鍦紝璇风敤鎵嬫満鍙风櫥褰曞悗濉啓韬唤璇佸彿"); + } else { + if (student.getFrozenStatus() == 1) { + return AjaxResult.error("鐢ㄦ埛宸茶鍐荤粨锛岃鑱旂郴绠$悊鍛橈紒锛侊紒"); + } + // 淇敼 + TbStudent updateStudent = new TbStudent(); + updateStudent.setStudentId(student.getStudentId()); + updateStudent.setPassword(SecurityUtils.encryptPassword(passwordUnencrypted)); + updateStudent.setPasswordUnencrypted(passwordUnencrypted); + tbStudentMapper.updateTbStudent(updateStudent); + } + return AjaxResult.success(); + } + + /** + * 鏌ヨ瀛﹀憳 + * + * @param openId openId + * @return 瀛﹀憳 + */ + @Override + public TbStudent selectTbStudentByGzhOpenId(String openId) { + return tbStudentMapper.selectTbStudentByGzhOpenId(openId); + } + + /** + * 鐢ㄦ埛淇敼涓汉璧勬枡 + * + * @param studentDTO + * @return ok + */ + @Override + public AjaxResult updateMemberInfo(StudentDTO studentDTO) { + String phone = studentDTO.getPhone(); + String smsCode = studentDTO.getSmsCode(); + + // 鏍¢獙鐭俊楠岃瘉鐮 + // if (StringUtils.isNotBlank(smsCode)) { + // String checkSmsCode = smsCodeService.checkSmsCode(phone, smsCode, 2); + // if (!"SUCCESS".equals(checkSmsCode)) { + // // throw new ServiceException(ServiceResponseEnum.SMSCODE_ERROR); + // return AjaxResult.error(checkSmsCode); + // } + // } + + TbStudent student = new TbStudent(); + student.setStudentId(studentDTO.getMemberUserId()); + student.setStudentName(studentDTO.getStudentName()); + student.setHeadPortrait(studentDTO.getHeadPortrait()); + student.setIdentityCard(studentDTO.getIdentityCard()); + student.setSex(studentDTO.getSex()); + student.setEducation(studentDTO.getEducation()); + student.setGraduationSchool(studentDTO.getGraduationSchool()); + student.setGraduationTime(studentDTO.getGraduationTime()); + student.setNickName(studentDTO.getNickName()); + student.setPhone(studentDTO.getPhone()); + student.setUpdateTime(DateUtils.getNowDate()); + tbStudentMapper.updateTbStudent(student); + return AjaxResult.success(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public JSONObject memberUserLogin(MemberUserLoginDTO memberUserLoginDTO) { + JSONObject result = new JSONObject(); + + String loginCode = memberUserLoginDTO.getLoginCode(); + String phoneCode = memberUserLoginDTO.getPhoneCode(); + + // 寰俊鎺堟潈鑾峰彇openId +// String openId = loginCode; + Map map = weiXinXcxMemberUtils.getWebAuthorizeInfoMap(loginCode); + + if (CollectionUtils.isEmpty(map)) { + throw new ServiceException(ServiceResponseEnum.MINIPROGRAM_AUTHORIZE_ERR); + } + + String openId = map.get("openid"); + String unionId = map.get("unionId"); + if (StringUtils.isBlank(openId)) { + throw new ServiceException(ServiceResponseEnum.MINIPROGRAM_AUTHORIZE_ERR); + } + /* if (StringUtils.isBlank(unionId)) { + throw new ServiceException(ServiceResponseEnum.MINIPROGRAM_AUTHORIZE_ERR); + }*/ + + // 寰俊鎺堟潈鑾峰彇鎵嬫満鍙 + String phoneNumber = weiXinXcxMemberUtils.getUserPhoneNumber(phoneCode); + if (StringUtils.isBlank(phoneNumber)) { + throw new ServiceException(ServiceResponseEnum.MINIPROGRAM_AUTHORIZE_PHONE_ERR); + } + + TbStudent tbStudent = null; + // 鏌ヨ鐢ㄦ埛淇℃伅 + tbStudent = tbStudentMapper.selectTbStudentBy(phoneNumber, null); + if (StringUtils.isNull(tbStudent)) { + //濡傛灉鏍规嵁鎵嬫満鍙锋煡璇笉鍒 鍒欑敤unionId鍘绘煡璇 + tbStudent = tbStudentMapper.getByUnionId(unionId); + } + + if (ObjectUtils.isNotEmpty(tbStudent)) { + + // 鐧诲綍鎴愬姛 + tbStudent.setOpenId(openId); + tbStudent.setPhone(phoneNumber); + tbStudent.setUnionId(unionId); + tbStudent.setLoginType(2); + tbStudentMapper.updateTbStudent(tbStudent); + result.put("AuthToken", tbStudent.getStudentId()); + } else { + // 鏂扮敤鎴锋敞鍐 + TbStudent student = new TbStudent(); + student.setOpenId(openId); + student.setPhone(phoneNumber); + student.setUnionId(unionId); + + student.setSex(0); + student.setUnionId(unionId); + student.setStudentNumber(IdUtils.fastSimpleUUID()); + student.setExamineStatus(3); + student.setFrozenStatus(0); + String headPortrait = StringUtils.isNotEmpty(weiXinXcxMemberConfig.getAvatarUrl()) ? weiXinXcxMemberConfig.getAvatarUrl() : "https://image.xnszz.com/IMG_1280_1280@FuvEKIdCm5NN36gZN9gJhk2Ei0-p.jpg"; + student.setHeadPortrait(headPortrait); + student.setNickName("瀛﹀憳_" + IdUtils.fastSimpleUUID().substring(1, 8)); + + student.setCreateTime(DateUtils.getNowDate()); + student.setCreateBy("灏忕▼搴忔巿鏉"); + student.setDelFlag(0); + + tbStudentMapper.insertTbStudent(student); + // 鐧诲綍鎴愬姛 + result.put("AuthToken", student.getStudentId()); + } + return result; + } + + @Override + public JSONObject memberUserRegister(MemberUserLoginDTO memberUserLoginDTO) { + JSONObject result = new JSONObject(); + + String loginCode = memberUserLoginDTO.getLoginCode(); + String phoneCode = memberUserLoginDTO.getPhoneCode(); + String avatarUrl = memberUserLoginDTO.getAvatarUrl(); + String nickName = memberUserLoginDTO.getNickName(); + + // 寰俊鎺堟潈鑾峰彇openId +// String openId = loginCode; + Map map = weiXinXcxMemberUtils.getWebAuthorizeInfoMap(loginCode); + + if (CollectionUtils.isEmpty(map)) { + throw new ServiceException(ServiceResponseEnum.MINIPROGRAM_AUTHORIZE_ERR); + } + + String openId = map.get("openid"); + String unionId = map.get("unionId"); + if (StringUtils.isBlank(openId)) { + throw new ServiceException(ServiceResponseEnum.MINIPROGRAM_AUTHORIZE_ERR); + } + if (StringUtils.isBlank(unionId)) { + throw new ServiceException(ServiceResponseEnum.MINIPROGRAM_AUTHORIZE_ERR); + } + + // 寰俊鎺堟潈鑾峰彇鎵嬫満鍙 + String phoneNumber = weiXinXcxMemberUtils.getUserPhoneNumber(phoneCode); + if (StringUtils.isBlank(phoneNumber)) { + throw new ServiceException(ServiceResponseEnum.MINIPROGRAM_AUTHORIZE_PHONE_ERR); + } + + // 鏌ヨ鐢ㄦ埛淇℃伅 + TbStudent tbStudent = tbStudentMapper.selectTbStudentBy(phoneNumber, null); + if (ObjectUtils.isNotEmpty(tbStudent)) { + + // 鐧诲綍鎴愬姛 + tbStudent.setOpenId(openId); + tbStudent.setPhone(phoneNumber); + result.put("AuthToken", tbStudent.getStudentId()); + } else { + // 鏂扮敤鎴锋敞鍐 + TbStudent student = new TbStudent(); + student.setOpenId(openId); + student.setPhone(phoneNumber); + + student.setSex(0); + student.setStudentNumber(IdUtils.fastSimpleUUID()); + student.setExamineStatus(3); + student.setFrozenStatus(0); + student.setHeadPortrait("https://image.xnszz.com/IMG_1280_1280@FuvEKIdCm5NN36gZN9gJhk2Ei0-p.jpg"); + student.setNickName("瀛﹀憳_" + IdUtils.fastSimpleUUID().substring(1, 8)); + + student.setCreateTime(DateUtils.getNowDate()); + student.setCreateBy("灏忕▼搴忔巿鏉"); + student.setDelFlag(0); + + tbStudentMapper.insertTbStudent(student); + // 鐧诲綍鎴愬姛 + result.put("AuthToken", student.getStudentId()); + } + return result; + } + + @Override + public int editPassword(TbStudent tbStudent) { + tbStudent.setUpdateTime(DateUtils.getNowDate()); +// //鏍规嵁studentId鏌ヤ俊鎭 +// TbStudent studentInfo = tbStudentMapper.selectTbStudentByStudentId(tbStudent.getStudentId()); +// //鏍¢獙鑰佸瘑鐮佹槸鍚︽纭 +// if (studentInfo.getPasswordUnencrypted().equals(tbStudent.getOldPassword())) { +// tbStudent.setPasswordUnencrypted(tbStudent.getPassword()); +// tbStudent.setPassword(SecurityUtils.encryptPassword(tbStudent.getPassword())); +// } + tbStudent.setPasswordUnencrypted(tbStudent.getPassword()); + tbStudent.setPassword(SecurityUtils.encryptPassword(tbStudent.getPassword())); + return tbStudentMapper.updateTbStudent(tbStudent); + } + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbStudyCenterClassServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbStudyCenterClassServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..76dc61b988a2ba273af77e3e5d99a753f91274f5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbStudyCenterClassServiceImpl.java @@ -0,0 +1,109 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbStudyCenterClass; +import com.ruoyi.hezhi.mapper.TbStudyCenterClassMapper; +import com.ruoyi.hezhi.service.ITbStudyCenterClassService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * 瀛︿範涓績鍒嗙被Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-10-23 + */ +@Service +public class TbStudyCenterClassServiceImpl implements ITbStudyCenterClassService +{ + @Autowired + private TbStudyCenterClassMapper tbStudyCenterClassMapper; + + /** + * 鏌ヨ瀛︿範涓績鍒嗙被 + * + * @param studyCenterClassId 瀛︿範涓績鍒嗙被涓婚敭 + * @return 瀛︿範涓績鍒嗙被 + */ + @Override + public TbStudyCenterClass selectTbStudyCenterClassByStudyCenterClassId(Long studyCenterClassId) + { + return tbStudyCenterClassMapper.selectTbStudyCenterClassByStudyCenterClassId(studyCenterClassId); + } + + /** + * 鏌ヨ瀛︿範涓績鍒嗙被鍒楄〃 + * + * @param tbStudyCenterClass 瀛︿範涓績鍒嗙被 + * @return 瀛︿範涓績鍒嗙被 + */ + @Override + public List selectTbStudyCenterClassList(TbStudyCenterClass tbStudyCenterClass) + { + return tbStudyCenterClassMapper.selectTbStudyCenterClassList(tbStudyCenterClass); + } + + /** + * 鏂板瀛︿範涓績鍒嗙被 + * + * @param tbStudyCenterClass 瀛︿範涓績鍒嗙被 + * @return 缁撴灉 + */ + @Override + public int insertTbStudyCenterClass(TbStudyCenterClass tbStudyCenterClass) + { + tbStudyCenterClass.setCreateTime(DateUtils.getNowDate()); + return tbStudyCenterClassMapper.insertTbStudyCenterClass(tbStudyCenterClass); + } + + /** + * 淇敼瀛︿範涓績鍒嗙被 + * + * @param tbStudyCenterClass 瀛︿範涓績鍒嗙被 + * @return 缁撴灉 + */ + @Override + public int updateTbStudyCenterClass(TbStudyCenterClass tbStudyCenterClass) + { + tbStudyCenterClass.setUpdateTime(DateUtils.getNowDate()); + return tbStudyCenterClassMapper.updateTbStudyCenterClass(tbStudyCenterClass); + } + + /** + * 鎵归噺鍒犻櫎瀛︿範涓績鍒嗙被 + * + * @param studyCenterClassIds 闇瑕佸垹闄ょ殑瀛︿範涓績鍒嗙被涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbStudyCenterClassByStudyCenterClassIds(Long[] studyCenterClassIds) + { + return tbStudyCenterClassMapper.deleteTbStudyCenterClassByStudyCenterClassIds(studyCenterClassIds); + } + + /** + * 鍒犻櫎瀛︿範涓績鍒嗙被淇℃伅 + * + * @param studyCenterClassId 瀛︿範涓績鍒嗙被涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbStudyCenterClassByStudyCenterClassId(Long studyCenterClassId) + { + return tbStudyCenterClassMapper.deleteTbStudyCenterClassByStudyCenterClassId(studyCenterClassId); + } + + /** + * 瀛︿範涓績鍒嗙被鍒楄〃 + * + * @param params 鍙傛暟 + * @return 瀛︿範涓績鍒嗙被鍒楄〃 + */ + @Override + public List> getStudyCenterClassMapList(Map params) { + return tbStudyCenterClassMapper.getStudyCenterClassMapList(params); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbStudyCenterFileServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbStudyCenterFileServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..5e2c5aff71fb569a8cd05195e1c805aa318b4e82 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbStudyCenterFileServiceImpl.java @@ -0,0 +1,97 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbStudyCenterFile; +import com.ruoyi.hezhi.mapper.TbStudyCenterFileMapper; +import com.ruoyi.hezhi.service.ITbStudyCenterFileService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 瀛︿範涓績鏂囦欢Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-11-18 + */ +@Service +public class TbStudyCenterFileServiceImpl implements ITbStudyCenterFileService +{ + @Autowired + private TbStudyCenterFileMapper tbStudyCenterFileMapper; + + /** + * 鏌ヨ瀛︿範涓績鏂囦欢 + * + * @param studyCenterFileId 瀛︿範涓績鏂囦欢涓婚敭 + * @return 瀛︿範涓績鏂囦欢 + */ + @Override + public TbStudyCenterFile selectTbStudyCenterFileByStudyCenterFileId(Long studyCenterFileId) + { + return tbStudyCenterFileMapper.selectTbStudyCenterFileByStudyCenterFileId(studyCenterFileId); + } + + /** + * 鏌ヨ瀛︿範涓績鏂囦欢鍒楄〃 + * + * @param tbStudyCenterFile 瀛︿範涓績鏂囦欢 + * @return 瀛︿範涓績鏂囦欢 + */ + @Override + public List selectTbStudyCenterFileList(TbStudyCenterFile tbStudyCenterFile) + { + return tbStudyCenterFileMapper.selectTbStudyCenterFileList(tbStudyCenterFile); + } + + /** + * 鏂板瀛︿範涓績鏂囦欢 + * + * @param tbStudyCenterFile 瀛︿範涓績鏂囦欢 + * @return 缁撴灉 + */ + @Override + public int insertTbStudyCenterFile(TbStudyCenterFile tbStudyCenterFile) + { + tbStudyCenterFile.setCreateTime(DateUtils.getNowDate()); + return tbStudyCenterFileMapper.insertTbStudyCenterFile(tbStudyCenterFile); + } + + /** + * 淇敼瀛︿範涓績鏂囦欢 + * + * @param tbStudyCenterFile 瀛︿範涓績鏂囦欢 + * @return 缁撴灉 + */ + @Override + public int updateTbStudyCenterFile(TbStudyCenterFile tbStudyCenterFile) + { + tbStudyCenterFile.setUpdateTime(DateUtils.getNowDate()); + return tbStudyCenterFileMapper.updateTbStudyCenterFile(tbStudyCenterFile); + } + + /** + * 鎵归噺鍒犻櫎瀛︿範涓績鏂囦欢 + * + * @param studyCenterFileIds 闇瑕佸垹闄ょ殑瀛︿範涓績鏂囦欢涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbStudyCenterFileByStudyCenterFileIds(Long[] studyCenterFileIds) + { + return tbStudyCenterFileMapper.deleteTbStudyCenterFileByStudyCenterFileIds(studyCenterFileIds); + } + + /** + * 鍒犻櫎瀛︿範涓績鏂囦欢淇℃伅 + * + * @param studyCenterFileId 瀛︿範涓績鏂囦欢涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbStudyCenterFileByStudyCenterFileId(Long studyCenterFileId) + { + return tbStudyCenterFileMapper.deleteTbStudyCenterFileByStudyCenterFileId(studyCenterFileId); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbStudyCenterServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbStudyCenterServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..aaf102b7d3d64fd34b8afb54816120a302142738 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbStudyCenterServiceImpl.java @@ -0,0 +1,335 @@ +package com.ruoyi.hezhi.service.impl; + +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.hezhi.domain.TbExamCourse; +import com.ruoyi.hezhi.domain.TbRegion; +import com.ruoyi.hezhi.domain.TbStudyCenter; +import com.ruoyi.hezhi.domain.TbStudyCenterTeacher; +import com.ruoyi.hezhi.domain.dto.StudyCenterDTO; +import com.ruoyi.hezhi.domain.vo.StudyCenterVO; +import com.ruoyi.hezhi.mapper.*; +import com.ruoyi.hezhi.service.ITbStudyCenterService; +import lombok.Getter; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 瀛︿範涓績Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-10-21 + */ +@Service +public class TbStudyCenterServiceImpl implements ITbStudyCenterService +{ + @Autowired + private TbStudyCenterMapper tbStudyCenterMapper; + @Autowired + private TbStudyCenterFileMapper tbStudyCenterFileMapper; + @Autowired + private TbRegionMapper tbRegionMapper; + @Autowired + private TbExamCourseMapper tbExamCourseMapper; + @Resource + private TbStudyCenterTeacherMapper tbStudyCenterTeacherMapper; + + /** + * 鏌ヨ瀛︿範涓績 + * + * @param studyCenterId 瀛︿範涓績涓婚敭 + * @return 瀛︿範涓績 + */ + @Override + public TbStudyCenter selectTbStudyCenterByStudyCenterId(Long studyCenterId) + { + TbStudyCenter tbStudyCenter = tbStudyCenterMapper.selectTbStudyCenterByStudyCenterId(studyCenterId); + if (ObjectUtils.isNotEmpty(tbStudyCenter)){ + List examCourseList = tbExamCourseMapper.getExamCourseList(tbStudyCenter.getStudyCenterId(), null, null, null); + tbStudyCenter.setExamCourseList(examCourseList); + + List studyCenterTeacherList = tbStudyCenterTeacherMapper.getByStudyCenterId(tbStudyCenter.getStudyCenterId()); + tbStudyCenter.setStudyCenterTeacherList(studyCenterTeacherList); + } + + return tbStudyCenter; + } + + /** + * 鏌ヨ瀛︿範涓績鍒楄〃 + * + * @param tbStudyCenter 瀛︿範涓績 + * @return 瀛︿範涓績 + */ + @Override + public List selectTbStudyCenterList(TbStudyCenter tbStudyCenter) + { + // 鏈烘瀯ID + if (SecurityUtils.hasRole("localLearningCenter")){ + tbStudyCenter.setStudyCenterId(SecurityUtils.getStudyCenterId()); + } + return tbStudyCenterMapper.selectTbStudyCenterList(tbStudyCenter); + } + + /** + * 鏌ヨ瀛︿範涓績鍒楄〃 + * + * @return 瀛︿範涓績 + */ + @Override + public List getAllStudyCenterList() + { + return tbStudyCenterMapper.getAllStudyCenterList(); + } + + /** + * 鏂板瀛︿範涓績 + * + * @param tbStudyCenter 瀛︿範涓績 + * @return 缁撴灉 + */ + @Transactional + @Override + public int insertTbStudyCenter(TbStudyCenter tbStudyCenter) + { + //瀛︿範涓績鍚嶇О蹇呴』闈炵┖鍞竴 + if (tbStudyCenter.getStudyCenterName() == null){ + throw new ServiceException("瀛︿範涓績鍚嶇О涓嶈兘涓虹┖"); + } + TbStudyCenter studyCenter = tbStudyCenterMapper.selectTbStudyCenterByStudyCenterName(tbStudyCenter.getStudyCenterName()); + if (studyCenter != null){ + throw new ServiceException("瀛︿範涓績鍚嶇О宸插瓨鍦"); + } + if (tbStudyCenter.getProvinceId() != null) { + TbRegion province = tbRegionMapper.selectTbRegionById(tbStudyCenter.getProvinceId()); + if (province != null) { + tbStudyCenter.setProvinceName(province.getName()); + } + } + if (tbStudyCenter.getCityId() != null) { + TbRegion city = tbRegionMapper.selectTbRegionById(tbStudyCenter.getCityId()); + if (city != null) { + tbStudyCenter.setCityName(city.getName()); + } + } + if (tbStudyCenter.getAreaId() != null) { + TbRegion area = tbRegionMapper.selectTbRegionById(tbStudyCenter.getAreaId()); + if (area != null) { + tbStudyCenter.setAreaName(area.getName()); + } + } + tbStudyCenter.setCreateTime(DateUtils.getNowDate()); + int result = tbStudyCenterMapper.insertTbStudyCenter(tbStudyCenter); + // 鏂板鑰冭瘯璇剧▼ + List examCourseList = tbStudyCenter.getExamCourseList(); + if (!examCourseList.isEmpty()){ + for (TbExamCourse tbExamCourse : examCourseList) { + tbExamCourse.setStudyCenterId(tbStudyCenter.getStudyCenterId()); + tbExamCourseMapper.insertTbExamCourse(tbExamCourse); + } + } + // 鏂板鏁欏笀 + List studyCenterTeacherList = tbStudyCenter.getStudyCenterTeacherList(); + if (!studyCenterTeacherList.isEmpty()){ + int i = 0; + for (TbStudyCenterTeacher studyCenterTeacher : studyCenterTeacherList) { + if (StringUtils.isBlank(studyCenterTeacher.getTeacherName()) || StringUtils.isBlank(studyCenterTeacher.getTeacherPhone())){ + throw new ServiceException("璇峰畬鍠勮佸笀淇℃伅"); + } + studyCenterTeacher.setStudyCenterId(tbStudyCenter.getStudyCenterId()); + studyCenterTeacher.setSort(i++); + studyCenterTeacher.setDelFlag(0); + tbStudyCenterTeacherMapper.insertTbStudyCenterTeacher(studyCenterTeacher); + } + } + + return result; + } + + /** + * 淇敼瀛︿範涓績 + * + * @param tbStudyCenter 瀛︿範涓績 + * @return 缁撴灉 + */ + @Transactional + @Override + public int updateTbStudyCenter(TbStudyCenter tbStudyCenter) + { + //瀛︿範涓績鍚嶇О蹇呴』闈炵┖鍞竴 + if (tbStudyCenter.getStudyCenterName() == null){ + throw new ServiceException("瀛︿範涓績鍚嶇О涓嶈兘涓虹┖"); + } + TbStudyCenter studyCenter = tbStudyCenterMapper.selectTbStudyCenterByStudyCenterId(tbStudyCenter.getStudyCenterId()); + if (studyCenter != null){ + //鍒ゆ柇瀛︿範涓績鍚嶇О鍙樺姩浜嗘病鏈 + if (!studyCenter.getStudyCenterName().equals(tbStudyCenter.getStudyCenterName())){ + //濡傛灉鍙樺姩浜嗭紝瑕佹煡閲 + TbStudyCenter studyCenter1 = tbStudyCenterMapper.selectTbStudyCenterByStudyCenterName(tbStudyCenter.getStudyCenterName()); + if (studyCenter1 != null){ + throw new ServiceException("瀛︿範涓績鍚嶇О宸插瓨鍦"); + } + } + } + if (tbStudyCenter.getProvinceId() != null) { + TbRegion province = tbRegionMapper.selectTbRegionById(tbStudyCenter.getProvinceId()); + if (province != null) { + tbStudyCenter.setProvinceName(province.getName()); + } + } + if (tbStudyCenter.getCityId() != null) { + TbRegion city = tbRegionMapper.selectTbRegionById(tbStudyCenter.getCityId()); + if (city != null) { + tbStudyCenter.setCityName(city.getName()); + } + } + if (tbStudyCenter.getAreaId() != null) { + TbRegion area = tbRegionMapper.selectTbRegionById(tbStudyCenter.getAreaId()); + if (area != null) { + tbStudyCenter.setAreaName(area.getName()); + } + } + // 鏂板鑰冭瘯璇剧▼ + List examCourseList = tbStudyCenter.getExamCourseList(); + if (!examCourseList.isEmpty()){ + tbExamCourseMapper.deleteTbExamCourse(tbStudyCenter.getStudyCenterId(), null, null, null); + for (TbExamCourse tbExamCourse : examCourseList) { + tbExamCourse.setStudyCenterId(tbStudyCenter.getStudyCenterId()); + tbExamCourseMapper.insertTbExamCourse(tbExamCourse); + } + } + // 鏂板鏁欏笀 + List studyCenterTeacherList = tbStudyCenter.getStudyCenterTeacherList(); + if (!studyCenterTeacherList.isEmpty()){ + tbStudyCenterTeacherMapper.deleteByStudyCenterId(tbStudyCenter.getStudyCenterId()); + int i = 0; + for (TbStudyCenterTeacher studyCenterTeacher : studyCenterTeacherList) { + if (StringUtils.isBlank(studyCenterTeacher.getTeacherName()) || StringUtils.isBlank(studyCenterTeacher.getTeacherPhone())){ + throw new ServiceException("璇峰畬鍠勮佸笀淇℃伅"); + } + studyCenterTeacher.setStudyCenterId(tbStudyCenter.getStudyCenterId()); + studyCenterTeacher.setSort(i++); + studyCenterTeacher.setDelFlag(0); + tbStudyCenterTeacherMapper.insertTbStudyCenterTeacher(studyCenterTeacher); + } + } + + tbStudyCenter.setUpdateTime(DateUtils.getNowDate()); + return tbStudyCenterMapper.updateTbStudyCenter(tbStudyCenter); + } + + /** + * 鎵归噺鍒犻櫎瀛︿範涓績 + * + * @param studyCenterIds 闇瑕佸垹闄ょ殑瀛︿範涓績涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbStudyCenterByStudyCenterIds(Long[] studyCenterIds) + { + return tbStudyCenterMapper.deleteTbStudyCenterByStudyCenterIds(studyCenterIds); + } + + /** + * 鍒犻櫎瀛︿範涓績淇℃伅 + * + * @param studyCenterId 瀛︿範涓績涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbStudyCenterByStudyCenterId(Long studyCenterId) + { + return tbStudyCenterMapper.deleteTbStudyCenterByStudyCenterId(studyCenterId); + } + + /** + * 瀛︿範涓績鍏ラ┗ + * + * @param studyCenterDTO + * @return ok + */ + @Override + public AjaxResult joinInStudyCenter(StudyCenterDTO studyCenterDTO) { + TbStudyCenter enterpriseName = tbStudyCenterMapper.selectTbStudyCenterBy(studyCenterDTO.getEnterpriseName(), null); + if (enterpriseName != null) { + return AjaxResult.error("浼佷笟鍚嶇О锛" + studyCenterDTO.getEnterpriseName() + "宸插叆椹"); + } + TbStudyCenter tbStudyCenter1 = tbStudyCenterMapper.selectTbStudyCenterByStudyCenterName(studyCenterDTO.getStudyCenterName()); + if (tbStudyCenter1 != null) { + return AjaxResult.error("瀛︿範涓績鍚嶇О锛" + studyCenterDTO.getStudyCenterName() + "宸插瓨鍦"); + } + TbStudyCenter businessLicenseCreditCode = tbStudyCenterMapper.selectTbStudyCenterBy(null, studyCenterDTO.getBusinessLicenseCreditCode()); + if (businessLicenseCreditCode != null) { + return AjaxResult.error("钀ヤ笟鎵х収淇$敤浠g爜锛" + studyCenterDTO.getBusinessLicenseCreditCode() + "宸插叆椹"); + } + TbStudyCenter tbStudyCenter = new TbStudyCenter(); + tbStudyCenter.setProvinceId(studyCenterDTO.getProvinceId()); + tbStudyCenter.setCityId(studyCenterDTO.getCityId()); + tbStudyCenter.setAreaId(studyCenterDTO.getAreaId()); + tbStudyCenter.setSuperintendent(studyCenterDTO.getSuperintendent()); + tbStudyCenter.setPhone(studyCenterDTO.getPhone()); + tbStudyCenter.setEnterpriseName(studyCenterDTO.getEnterpriseName()); + tbStudyCenter.setBusinessLicenseCreditCode(studyCenterDTO.getBusinessLicenseCreditCode()); + tbStudyCenter.setBusinessLicenseImg(studyCenterDTO.getBusinessLicenseImg()); + tbStudyCenter.setStudyCenterName(studyCenterDTO.getStudyCenterName()); + tbStudyCenter.setStudyCenterNumber(IdUtils.fastSimpleUUID()); + tbStudyCenter.setCreateTime(DateUtils.getNowDate()); + tbStudyCenter.setExamineStatus(0); + tbStudyCenter.setFrozenStatus(0); + tbStudyCenterMapper.insertTbStudyCenter(tbStudyCenter); + return AjaxResult.success(); + } + + /** + * 瀛︿範涓績鍒楄〃 + * + * @param params 鍙傛暟 + * @return 瀛︿範涓績鍒楄〃 + */ + @Override + public List> getStudyCenterList(Map params) { + return tbStudyCenterMapper.getStudyCenterList(params); + } + + /** + * 瀛︿範涓績璇︽儏 + * + * @param params 鍙傛暟 + * @return 瀛︿範涓績璇︽儏 + */ + @Override + public Map getStudyCenterInfo(Map params) { + Map studyCenterInfo = tbStudyCenterMapper.getStudyCenterInfo(params); + if (studyCenterInfo != null) { + HashMap map = new HashMap<>(); + map.put("studyCenterId", studyCenterInfo.get("studyCenterId").toString()); + studyCenterInfo.put("studyCenterFileList", tbStudyCenterFileMapper.getStudyCenterFileList(map)); + } + return studyCenterInfo; + } + + @Override + public List> getStudyCenterEvaluateAgencyList(Long studyCenterId){ + return tbExamCourseMapper.getEvaluateAgencyList(studyCenterId); + } + + @Override + public PageInfo> getStudyCenterCourseList(Integer pageNum, Integer pageSize, Long studyCenterId, Long evaluateAgencyId){ + PageHelper.startPage(pageNum, pageSize); + List> studyCenterCourseList = tbExamCourseMapper.getStudyCenterCourseList(studyCenterId, evaluateAgencyId); + return new PageInfo<>(studyCenterCourseList); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbSubjectWarehouseClassServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbSubjectWarehouseClassServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..384c3bb4dc4d7586241b95c7e4ed43b0ce53ca90 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbSubjectWarehouseClassServiceImpl.java @@ -0,0 +1,162 @@ +package com.ruoyi.hezhi.service.impl; + +import cn.hutool.core.collection.CollUtil; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbExamCourse; +import com.ruoyi.hezhi.domain.TbSubjectWarehouseClass; +import com.ruoyi.hezhi.mapper.TbExamCourseMapper; +import com.ruoyi.hezhi.mapper.TbSubjectWarehouseClassMapper; +import com.ruoyi.hezhi.service.ITbSubjectWarehouseClassService; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * 棰樺簱鍒嗙被Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-11-06 + */ +@Service +public class TbSubjectWarehouseClassServiceImpl implements ITbSubjectWarehouseClassService +{ + @Autowired + private TbSubjectWarehouseClassMapper tbSubjectWarehouseClassMapper; + @Autowired + private TbExamCourseMapper tbExamCourseMapper; + + /** + * 鏌ヨ棰樺簱鍒嗙被 + * + * @param subjectWarehouseClassId 棰樺簱鍒嗙被涓婚敭 + * @return 棰樺簱鍒嗙被 + */ + @Override + public TbSubjectWarehouseClass selectTbSubjectWarehouseClassBySubjectWarehouseClassId(Long subjectWarehouseClassId) + { + TbSubjectWarehouseClass tbSubjectWarehouseClass = tbSubjectWarehouseClassMapper.selectTbSubjectWarehouseClassBySubjectWarehouseClassId(subjectWarehouseClassId); + if (ObjectUtils.isNotEmpty(tbSubjectWarehouseClass)){ + List examCourseList = tbExamCourseMapper.getExamCourseList(null, null, tbSubjectWarehouseClass.getSubjectWarehouseClassId(), null); + tbSubjectWarehouseClass.setExamCourseList(examCourseList); + } + return tbSubjectWarehouseClass; + } + + /** + * 鏌ヨ棰樺簱鍒嗙被鍒楄〃 + * + * @param tbSubjectWarehouseClass 棰樺簱鍒嗙被 + * @return 棰樺簱鍒嗙被 + */ + @Override + public List selectTbSubjectWarehouseClassList(TbSubjectWarehouseClass tbSubjectWarehouseClass) + { + return tbSubjectWarehouseClassMapper.selectTbSubjectWarehouseClassList(tbSubjectWarehouseClass); + } + + /** + * 鏌ヨ棰樺簱鍒嗙被鍒楄〃 + * + * @return 棰樺簱鍒嗙被 + */ + @Override + public List getAllSubjectWarehouseCalssList() + { + return tbSubjectWarehouseClassMapper.getAllSubjectWarehouseCalssList(); + } + + /** + * 鏂板棰樺簱鍒嗙被 + * + * @param tbSubjectWarehouseClass 棰樺簱鍒嗙被 + * @return 缁撴灉 + */ + @Override + public int insertTbSubjectWarehouseClass(TbSubjectWarehouseClass tbSubjectWarehouseClass) + { + // 鏂板鑰冭瘯璇剧▼ + List examCourseList = tbSubjectWarehouseClass.getExamCourseList(); + tbSubjectWarehouseClass.setCreateTime(DateUtils.getNowDate()); + tbSubjectWarehouseClass.setDelFlag(0); + //鍏堟彃鍏ュ緱鍒癐D鍐嶆彃鍏ュ叧鑱旇〃 + int i = tbSubjectWarehouseClassMapper.insertTbSubjectWarehouseClass(tbSubjectWarehouseClass); + if (!examCourseList.isEmpty()){ + for (TbExamCourse tbExamCourse : examCourseList) { + tbExamCourse.setSubjectWarehouseClassId(tbSubjectWarehouseClass.getSubjectWarehouseClassId()); + tbExamCourseMapper.insertTbExamCourse(tbExamCourse); + } + } + return i; + } + + /** + * 淇敼棰樺簱鍒嗙被 + * + * @param tbSubjectWarehouseClass 棰樺簱鍒嗙被 + * @return 缁撴灉 + */ + @Override + public int updateTbSubjectWarehouseClass(TbSubjectWarehouseClass tbSubjectWarehouseClass) + { + // 鏂板鑰冭瘯璇剧▼ + List examCourseList = tbSubjectWarehouseClass.getExamCourseList(); + tbExamCourseMapper.deleteTbExamCourse(null, null, tbSubjectWarehouseClass.getSubjectWarehouseClassId(), null); + if (!CollUtil.isEmpty(examCourseList)){ + for (TbExamCourse tbExamCourse : examCourseList) { + tbExamCourse.setSubjectWarehouseClassId(tbSubjectWarehouseClass.getSubjectWarehouseClassId()); + tbExamCourseMapper.insertTbExamCourse(tbExamCourse); + } + } + tbSubjectWarehouseClass.setUpdateTime(DateUtils.getNowDate()); + return tbSubjectWarehouseClassMapper.updateTbSubjectWarehouseClass(tbSubjectWarehouseClass); + } + + /** + * 鎵归噺鍒犻櫎棰樺簱鍒嗙被 + * + * @param subjectWarehouseClassIds 闇瑕佸垹闄ょ殑棰樺簱鍒嗙被涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbSubjectWarehouseClassBySubjectWarehouseClassIds(Long[] subjectWarehouseClassIds) + { + return tbSubjectWarehouseClassMapper.deleteTbSubjectWarehouseClassBySubjectWarehouseClassIds(subjectWarehouseClassIds); + } + + /** + * 鍒犻櫎棰樺簱鍒嗙被淇℃伅 + * + * @param subjectWarehouseClassId 棰樺簱鍒嗙被涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbSubjectWarehouseClassBySubjectWarehouseClassId(Long subjectWarehouseClassId) + { + return tbSubjectWarehouseClassMapper.deleteTbSubjectWarehouseClassBySubjectWarehouseClassId(subjectWarehouseClassId); + } + + /** + * 棰樺簱鍒楄〃 + * + * @param params 鍙傛暟 + * @return 棰樺簱鍒楄〃 + */ + @Override + public List> getSubjectWarehouseClassList(Map params) { + return tbSubjectWarehouseClassMapper.getSubjectWarehouseClassList(params); + } + + @Override + public TbSubjectWarehouseClass getSubjectWarehouseClass(Long courseId){ + TbExamCourse examCourseDetail = tbExamCourseMapper.getSubjectWarehouseClassIdByCourseId(courseId); + if (ObjectUtils.isEmpty(examCourseDetail)){ + throw new ServiceException("绠$悊鍛樻湭涓婁紶璇ラ搴撲俊鎭"); + } + + return tbSubjectWarehouseClassMapper.selectTbSubjectWarehouseClassBySubjectWarehouseClassId(examCourseDetail.getSubjectWarehouseClassId()); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbTeacherAuthenticationServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbTeacherAuthenticationServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..1b5c4dea0b11b13a5dc4c8759a343a5507d10b89 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbTeacherAuthenticationServiceImpl.java @@ -0,0 +1,138 @@ +package com.ruoyi.hezhi.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.hezhi.domain.TbTeacherAuthentication; +import com.ruoyi.hezhi.domain.dto.TeacherAuthenticationDTO; +import com.ruoyi.hezhi.mapper.TbTeacherAuthenticationMapper; +import com.ruoyi.hezhi.service.ITbTeacherAuthenticationService; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 鍚嶅笀璁よ瘉Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-12-13 + */ +@Service +public class TbTeacherAuthenticationServiceImpl implements ITbTeacherAuthenticationService +{ + @Autowired + private TbTeacherAuthenticationMapper tbTeacherAuthenticationMapper; + + /** + * 鏌ヨ鍚嶅笀璁よ瘉 + * + * @param teacherAuthenticationId 鍚嶅笀璁よ瘉涓婚敭 + * @return 鍚嶅笀璁よ瘉 + */ + @Override + public TbTeacherAuthentication selectTbTeacherAuthenticationByTeacherAuthenticationId(Long teacherAuthenticationId) + { + return tbTeacherAuthenticationMapper.selectTbTeacherAuthenticationByTeacherAuthenticationId(teacherAuthenticationId); + } + /** + * 鏌ヨ鍚嶅笀璁よ瘉 + * + * @param phone 鍚嶅笀璁よ瘉涓婚敭 + * @return 鍚嶅笀璁よ瘉 + */ + @Override + public TbTeacherAuthentication selectTbTeacherAuthenticationByPhone(String phone) + { + return tbTeacherAuthenticationMapper.selectTbTeacherAuthenticationByPhone(phone); + } + + /** + * 鏌ヨ鍚嶅笀璁よ瘉鍒楄〃 + * + * @param tbTeacherAuthentication 鍚嶅笀璁よ瘉 + * @return 鍚嶅笀璁よ瘉 + */ + @Override + public List selectTbTeacherAuthenticationList(TbTeacherAuthentication tbTeacherAuthentication) + { + return tbTeacherAuthenticationMapper.selectTbTeacherAuthenticationList(tbTeacherAuthentication); + } + + /** + * 鏂板鍚嶅笀璁よ瘉 + * + * @param tbTeacherAuthentication 鍚嶅笀璁よ瘉 + * @return 缁撴灉 + */ + @Override + public int insertTbTeacherAuthentication(TbTeacherAuthentication tbTeacherAuthentication) + { + tbTeacherAuthentication.setCreateTime(DateUtils.getNowDate()); + return tbTeacherAuthenticationMapper.insertTbTeacherAuthentication(tbTeacherAuthentication); + } + + /** + * 淇敼鍚嶅笀璁よ瘉 + * + * @param tbTeacherAuthentication 鍚嶅笀璁よ瘉 + * @return 缁撴灉 + */ + @Override + public int updateTbTeacherAuthentication(TbTeacherAuthentication tbTeacherAuthentication) + { + tbTeacherAuthentication.setUpdateTime(DateUtils.getNowDate()); + tbTeacherAuthentication.setUpdateBy(SecurityUtils.getUsername()); + tbTeacherAuthentication.setDelFlag(0); + return tbTeacherAuthenticationMapper.updateTbTeacherAuthentication(tbTeacherAuthentication); + } + + /** + * 鎵归噺鍒犻櫎鍚嶅笀璁よ瘉 + * + * @param teacherAuthenticationIds 闇瑕佸垹闄ょ殑鍚嶅笀璁よ瘉涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbTeacherAuthenticationByTeacherAuthenticationIds(Long[] teacherAuthenticationIds) + { + return tbTeacherAuthenticationMapper.deleteTbTeacherAuthenticationByTeacherAuthenticationIds(teacherAuthenticationIds); + } + + /** + * 鍒犻櫎鍚嶅笀璁よ瘉淇℃伅 + * + * @param teacherAuthenticationId 鍚嶅笀璁よ瘉涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbTeacherAuthenticationByTeacherAuthenticationId(Long teacherAuthenticationId) + { + return tbTeacherAuthenticationMapper.deleteTbTeacherAuthenticationByTeacherAuthenticationId(teacherAuthenticationId); + } + + /** + * 鎻愪氦鍚嶅笀璁よ瘉 + * @param teacherAuthenticationDTO 鍙傛暟 + * @return 缁撴灉 + */ + @Override + public int submitTeacherAuthentication(TeacherAuthenticationDTO teacherAuthenticationDTO){ + Long memberUserId = teacherAuthenticationDTO.getMemberUserId(); + + // 鏌ヨ鏄惁鎻愪氦杩 + TbTeacherAuthentication tbTeacherAuthentication = tbTeacherAuthenticationMapper.getByMemberUserId(memberUserId); + if (ObjectUtils.isEmpty(tbTeacherAuthentication)){ + tbTeacherAuthentication = BeanUtil.copyProperties(teacherAuthenticationDTO, TbTeacherAuthentication.class); + tbTeacherAuthentication.setStatus(0); + tbTeacherAuthentication.setCreateTime(DateUtils.getNowDate()); + tbTeacherAuthentication.setDelFlag(0); + return tbTeacherAuthenticationMapper.insertTbTeacherAuthentication(tbTeacherAuthentication); + }else { + throw new ServiceException("宸叉彁浜ゅ疄鍚嶈璇侊紝璇峰嬁閲嶅鎻愪氦"); + } + + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbTeacherCourseServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbTeacherCourseServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..246c9a63d95e9508261e7681880268373325bfde --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbTeacherCourseServiceImpl.java @@ -0,0 +1,120 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbTeacherCourse; +import com.ruoyi.hezhi.domain.vo.CourseCardVO; +import com.ruoyi.hezhi.mapper.TbTeacherCourseMapper; +import com.ruoyi.hezhi.service.ITbTeacherCourseService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; + +/** + * 鑰佸笀璇剧▼鍏宠仈Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-09-14 + */ +@Service +public class TbTeacherCourseServiceImpl implements ITbTeacherCourseService +{ + @Autowired + private TbTeacherCourseMapper tbTeacherCourseMapper; + + /** + * 鏌ヨ鑰佸笀璇剧▼鍏宠仈 + * + * @param teacherCourseId 鑰佸笀璇剧▼鍏宠仈涓婚敭 + * @return 鑰佸笀璇剧▼鍏宠仈 + */ + @Override + public TbTeacherCourse selectTbTeacherCourseByTeacherCourseId(Long teacherCourseId) + { + return tbTeacherCourseMapper.selectTbTeacherCourseByTeacherCourseId(teacherCourseId); + } + + /** + * 鏌ヨ鑰佸笀璇剧▼鍏宠仈鍒楄〃 + * + * @param tbTeacherCourse 鑰佸笀璇剧▼鍏宠仈 + * @return 鑰佸笀璇剧▼鍏宠仈 + */ + @Override + public List selectTbTeacherCourseList(TbTeacherCourse tbTeacherCourse) + { + return tbTeacherCourseMapper.selectTbTeacherCourseList(tbTeacherCourse); + } + + /** + * 鏂板鑰佸笀璇剧▼鍏宠仈 + * + * @param tbTeacherCourse 鑰佸笀璇剧▼鍏宠仈 + * @return 缁撴灉 + */ + @Override + public int insertTbTeacherCourse(TbTeacherCourse tbTeacherCourse) + { + tbTeacherCourse.setCreateTime(DateUtils.getNowDate()); + return tbTeacherCourseMapper.insertTbTeacherCourse(tbTeacherCourse); + } + + /** + * 淇敼鑰佸笀璇剧▼鍏宠仈 + * + * @param tbTeacherCourse 鑰佸笀璇剧▼鍏宠仈 + * @return 缁撴灉 + */ + @Override + public int updateTbTeacherCourse(TbTeacherCourse tbTeacherCourse) + { + tbTeacherCourse.setUpdateTime(DateUtils.getNowDate()); + return tbTeacherCourseMapper.updateTbTeacherCourse(tbTeacherCourse); + } + + /** + * 鎵归噺鍒犻櫎鑰佸笀璇剧▼鍏宠仈 + * + * @param teacherCourseIds 闇瑕佸垹闄ょ殑鑰佸笀璇剧▼鍏宠仈涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbTeacherCourseByTeacherCourseIds(Long[] teacherCourseIds) + { + return tbTeacherCourseMapper.deleteTbTeacherCourseByTeacherCourseIds(teacherCourseIds); + } + + /** + * 鍒犻櫎鑰佸笀璇剧▼鍏宠仈淇℃伅 + * + * @param teacherCourseId 鑰佸笀璇剧▼鍏宠仈涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbTeacherCourseByTeacherCourseId(Long teacherCourseId) + { + return tbTeacherCourseMapper.deleteTbTeacherCourseByTeacherCourseId(teacherCourseId); + } + + /** + * 鏌ヨ鏁欏笀璇剧▼鍒楄〃 + * @param teacherId 鏁欏笀id + * @param isSpeak 鏄惁涓昏锛0-鍚︼紝1-鏄級 + * @return + */ + @Override + public List selectTeacherCourseList(Long teacherId, Integer isSpeak) { + return tbTeacherCourseMapper.selectTeacherCourseList(teacherId,isSpeak); + } + /** + * 鏌ヨ璇剧▼涓嬫暀甯堝垪琛 + * + * @param params 鍙傛暟 + * @return ok + */ + @Override + public List> getTeacherList(Map params) { + return tbTeacherCourseMapper.getTeacherList(params); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbTeacherServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbTeacherServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..cb9ff6a49408e0317c3ad17e56184e03debe6ba4 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbTeacherServiceImpl.java @@ -0,0 +1,185 @@ +package com.ruoyi.hezhi.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbCaseType; +import com.ruoyi.hezhi.domain.TbTeacher; +import com.ruoyi.hezhi.domain.vo.CourseCardVO; +import com.ruoyi.hezhi.domain.vo.TeacherDetailVO; +import com.ruoyi.hezhi.domain.vo.TeacherVO; +import com.ruoyi.hezhi.mapper.TbTeacherMapper; +import com.ruoyi.hezhi.service.ITbCaseTypeService; +import com.ruoyi.hezhi.service.ITbTeacherCourseService; +import com.ruoyi.hezhi.service.ITbTeacherService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +/** + * 鏁欏笀Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-09-14 + */ +@Service +public class TbTeacherServiceImpl implements ITbTeacherService +{ + @Autowired + private TbTeacherMapper tbTeacherMapper; + + @Resource + private ITbCaseTypeService caseTypeService; + + @Resource + private ITbTeacherCourseService teacherCourseService; + + + /** + * 鏌ヨ鏁欏笀 + * + * @param teacherId 鏁欏笀涓婚敭 + * @return 鏁欏笀 + */ + @Override + public TbTeacher selectTbTeacherByTeacherId(Long teacherId) + { + return tbTeacherMapper.selectTbTeacherByTeacherId(teacherId); + } + + /** + * 鏌ヨ鏁欏笀鍒楄〃 + * + * @param tbTeacher 鏁欏笀 + * @return 鏁欏笀 + */ + @Override + public List selectTbTeacherList(TbTeacher tbTeacher) + { + return tbTeacherMapper.selectTbTeacherList(tbTeacher); + } + + /** + * 鏂板鏁欏笀 + * + * @param tbTeacher 鏁欏笀 + * @return 缁撴灉 + */ + @Override + public int insertTbTeacher(TbTeacher tbTeacher) + { + tbTeacher.setCreateTime(DateUtils.getNowDate()); + return tbTeacherMapper.insertTbTeacher(tbTeacher); + } + + /** + * 淇敼鏁欏笀 + * + * @param tbTeacher 鏁欏笀 + * @return 缁撴灉 + */ + @Override + public int updateTbTeacher(TbTeacher tbTeacher) + { + tbTeacher.setUpdateTime(DateUtils.getNowDate()); + return tbTeacherMapper.updateTbTeacher(tbTeacher); + } + + /** + * 鎵归噺鍒犻櫎鏁欏笀 + * + * @param teacherIds 闇瑕佸垹闄ょ殑鏁欏笀涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbTeacherByTeacherIds(Long[] teacherIds) + { + return tbTeacherMapper.deleteTbTeacherByTeacherIds(teacherIds); + } + + /** + * 鍒犻櫎鏁欏笀淇℃伅 + * + * @param teacherId 鏁欏笀涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbTeacherByTeacherId(Long teacherId) + { + return tbTeacherMapper.deleteTbTeacherByTeacherId(teacherId); + } + + /** + * 鏁欏笀list + * @param typeId 绫诲瀷id 0鍏ㄩ儴 + * @return + */ + @Override + public List selectTeacherListByType(Long typeId) { + if(null != typeId && 0 != typeId ){ + TbCaseType tbCaseType = caseTypeService.selectTbCaseTypeByCaseTypeId(typeId); + if(ObjectUtils.isEmpty(tbCaseType)){ + throw new ServiceException("鏈煡璇㈠埌鍒嗙被",500); + } + if(tbCaseType.getShowStatus() == 1){ + throw new ServiceException("鏈煡璇㈠埌鍒嗙被",500); + } + } + return tbTeacherMapper.selectTeacherList(typeId); + } + + /** + * 璇︽儏 + * @param id + * @return + */ + @Override + public TeacherDetailVO getDetail(Long id) { + TeacherDetailVO result = new TeacherDetailVO(); + TbTeacher detail = tbTeacherMapper.selectTbTeacherByTeacherId(id); + TeacherVO vo = BeanUtil.toBean(detail,TeacherVO.class); + if(ObjectUtils.isEmpty(vo)){ + throw new ServiceException("鏌ヨ鏁欏笀璇︽儏寮傚父",500); + } + result.setTeacher(vo); + + //涓昏璇剧▼ + List mainCourseList = teacherCourseService.selectTeacherCourseList(id, 1); + if(!CollectionUtils.isEmpty(mainCourseList)){ + result.setMainCourse(mainCourseList); + } + //杈呰璇剧▼ + List subCourseList = teacherCourseService.selectTeacherCourseList(id, 0); + if(!CollectionUtils.isEmpty(subCourseList)){ + result.setSubCourse(subCourseList); + } + return result; + } + + /** + * 甯堣祫鍥㈤槦鍒楄〃 + * + * @param params 鍙傛暟 + * @return 甯堣祫鍥㈤槦鍒楄〃 + */ + @Override + public List> getTeacherList(Map params) { + return tbTeacherMapper.getTeacherList(params); + } + + /** + * 鑰佸笀璇︽儏 + * + * @param params 鍙傛暟 + * @return 鑰佸笀璇︽儏 + */ + @Override + public Map getTeacherInfo(Map params) { + return tbTeacherMapper.getTeacherInfo(params); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbTrendsServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbTrendsServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..72fffe1b4a811bee155e2f24940f29e07d8ca9a8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbTrendsServiceImpl.java @@ -0,0 +1,126 @@ +package com.ruoyi.hezhi.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbTrends; +import com.ruoyi.hezhi.domain.vo.TrendsVO; +import com.ruoyi.hezhi.mapper.TbTrendsMapper; +import com.ruoyi.hezhi.service.ITbTrendsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; + +import java.util.List; + +/** + * 闄㈠唴鍔ㄦ丼ervice涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-09-14 + */ +@Service +public class TbTrendsServiceImpl implements ITbTrendsService +{ + @Autowired + private TbTrendsMapper tbTrendsMapper; + + /** + * 鏌ヨ闄㈠唴鍔ㄦ + * + * @param trendsId 闄㈠唴鍔ㄦ佷富閿 + * @return 闄㈠唴鍔ㄦ + */ + @Override + public TbTrends selectTbTrendsByTrendsId(Long trendsId) + { + return tbTrendsMapper.selectTbTrendsByTrendsId(trendsId); + } + + /** + * 鏌ヨ闄㈠唴鍔ㄦ佸垪琛 + * + * @param tbTrends 闄㈠唴鍔ㄦ + * @return 闄㈠唴鍔ㄦ + */ + @Override + public List selectTbTrendsList(TbTrends tbTrends) + { + return tbTrendsMapper.selectTbTrendsList(tbTrends); + } + + /** + * 鏂板闄㈠唴鍔ㄦ + * + * @param tbTrends 闄㈠唴鍔ㄦ + * @return 缁撴灉 + */ + @Override + public int insertTbTrends(TbTrends tbTrends) + { + tbTrends.setCreateTime(DateUtils.getNowDate()); + return tbTrendsMapper.insertTbTrends(tbTrends); + } + + /** + * 淇敼闄㈠唴鍔ㄦ + * + * @param tbTrends 闄㈠唴鍔ㄦ + * @return 缁撴灉 + */ + @Override + public int updateTbTrends(TbTrends tbTrends) + { + tbTrends.setUpdateTime(DateUtils.getNowDate()); + return tbTrendsMapper.updateTbTrends(tbTrends); + } + + /** + * 鎵归噺鍒犻櫎闄㈠唴鍔ㄦ + * + * @param trendsIds 闇瑕佸垹闄ょ殑闄㈠唴鍔ㄦ佷富閿 + * @return 缁撴灉 + */ + @Override + public int deleteTbTrendsByTrendsIds(Long[] trendsIds) + { + return tbTrendsMapper.deleteTbTrendsByTrendsIds(trendsIds); + } + + /** + * 鍒犻櫎闄㈠唴鍔ㄦ佷俊鎭 + * + * @param trendsId 闄㈠唴鍔ㄦ佷富閿 + * @return 缁撴灉 + */ + @Override + public int deleteTbTrendsByTrendsId(Long trendsId) + { + return tbTrendsMapper.deleteTbTrendsByTrendsId(trendsId); + } + + /** + * 鑾峰彇鍔ㄦ乴ist + * @return + */ + @Override + public List getTrendsVoList() { + return tbTrendsMapper.getTrendsList(new TbTrends()); + } + + /** + * 璇︽儏 + * @param id + * @return + */ + @Override + public TrendsVO getDetail(Long id) { + TbTrends tbTrends = tbTrendsMapper.selectTbTrendsByTrendsId(id); + TrendsVO vo = BeanUtil.toBean(tbTrends,TrendsVO.class); + if(ObjectUtils.isEmpty(vo)){ + throw new ServiceException("鏌ヨ鍔ㄦ佽鎯呭紓甯",500); + }else{ + return vo; + } + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbTypeCourseServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbTypeCourseServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..6e156910e690ed9d68c9ced1ffe6bef9ee582c3a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/TbTypeCourseServiceImpl.java @@ -0,0 +1,128 @@ +package com.ruoyi.hezhi.service.impl; + +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.hezhi.domain.TbTypeCourse; +import com.ruoyi.hezhi.mapper.TbTypeCourseMapper; +import com.ruoyi.hezhi.service.ITbTypeCourseService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * 绫诲瀷璇剧▼鍏宠仈Service涓氬姟灞傚鐞 + * + * @author ruoyi + * @date 2024-09-19 + */ +@Service +public class TbTypeCourseServiceImpl implements ITbTypeCourseService +{ + @Autowired + private TbTypeCourseMapper tbTypeCourseMapper; + + /** + * 鏌ヨ绫诲瀷璇剧▼鍏宠仈 + * + * @param typeCourseId 绫诲瀷璇剧▼鍏宠仈涓婚敭 + * @return 绫诲瀷璇剧▼鍏宠仈 + */ + @Override + public TbTypeCourse selectTbTypeCourseByTypeCourseId(Long typeCourseId) + { + return tbTypeCourseMapper.selectTbTypeCourseByTypeCourseId(typeCourseId); + } + + /** + * 鏌ヨ绫诲瀷璇剧▼鍏宠仈鍒楄〃 + * + * @param tbTypeCourse 绫诲瀷璇剧▼鍏宠仈 + * @return 绫诲瀷璇剧▼鍏宠仈 + */ + @Override + public List selectTbTypeCourseList(TbTypeCourse tbTypeCourse) + { + return tbTypeCourseMapper.selectTbTypeCourseList(tbTypeCourse); + } + + /** + * 鏂板绫诲瀷璇剧▼鍏宠仈 + * + * @param tbTypeCourse 绫诲瀷璇剧▼鍏宠仈 + * @return 缁撴灉 + */ + @Override + public int insertTbTypeCourse(TbTypeCourse tbTypeCourse) + { + tbTypeCourse.setCreateTime(DateUtils.getNowDate()); + return tbTypeCourseMapper.insertTbTypeCourse(tbTypeCourse); + } + + /** + * 淇敼绫诲瀷璇剧▼鍏宠仈 + * + * @param tbTypeCourse 绫诲瀷璇剧▼鍏宠仈 + * @return 缁撴灉 + */ + @Override + public int updateTbTypeCourse(TbTypeCourse tbTypeCourse) + { + tbTypeCourse.setUpdateTime(DateUtils.getNowDate()); + return tbTypeCourseMapper.updateTbTypeCourse(tbTypeCourse); + } + + /** + * 鎵归噺鍒犻櫎绫诲瀷璇剧▼鍏宠仈 + * + * @param typeCourseIds 闇瑕佸垹闄ょ殑绫诲瀷璇剧▼鍏宠仈涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbTypeCourseByTypeCourseIds(Long[] typeCourseIds) + { + return tbTypeCourseMapper.deleteTbTypeCourseByTypeCourseIds(typeCourseIds); + } + + /** + * 鍒犻櫎绫诲瀷璇剧▼鍏宠仈淇℃伅 + * + * @param typeCourseId 绫诲瀷璇剧▼鍏宠仈涓婚敭 + * @return 缁撴灉 + */ + @Override + public int deleteTbTypeCourseByTypeCourseId(Long typeCourseId) + { + return tbTypeCourseMapper.deleteTbTypeCourseByTypeCourseId(typeCourseId); + } + + /** + * 鏍规嵁璇剧▼ID鍒犻櫎绫诲瀷璇剧▼鍏宠仈淇℃伅 + * + * @param courseId 璇剧▼ID + * @return 缁撴灉 + */ + @Override + public int deleteTbTypeCourseByCourseId(Long courseId) { + return tbTypeCourseMapper.deleteTbTypeCourseByCourseId(courseId); + } + + /** + * 鎵归噺鏂板绫诲瀷璇剧▼鍏宠仈 + * + * @param classIds 鍒嗙被缁 + * @param courseId 璇剧▼ID + * @return 缁撴灉 + */ + @Override + public int batchInsertTbTypeCourse(Long[] classIds, Long courseId) { + ArrayList arrayList = new ArrayList<>(); + for (Long classId : classIds) { + TbTypeCourse tbTypeCourse = new TbTypeCourse(); + tbTypeCourse.setCourseId(courseId); + tbTypeCourse.setCaseTypeId(classId); + arrayList.add(tbTypeCourse); + } + return tbTypeCourseMapper.batchInsertTbTypeCourse(arrayList); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/WxPayService.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/WxPayService.java new file mode 100644 index 0000000000000000000000000000000000000000..1fa9bfd5fe5884313588fa36764fb3808f46d7c0 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/WxPayService.java @@ -0,0 +1,128 @@ +package com.ruoyi.hezhi.service.impl; + +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson2.JSONObject; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DateUtils; +import com.ruoyi.common.utils.uuid.IdUtils; +import com.ruoyi.common.weixin.config.WeiXinPayConfig; +import com.ruoyi.common.weixin.utils.WeiXinPayV3Utils; +import com.ruoyi.hezhi.domain.TbMemberOrder; +import com.ruoyi.hezhi.domain.TbStudent; +import com.ruoyi.hezhi.mapper.TbMemberOrderMapper; +import com.ruoyi.hezhi.mapper.TbStudentMapper; +import com.ruoyi.hezhi.service.ITbMemberOrderService; +import com.ruoyi.hezhi.service.IWxPayService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.ObjectUtils; + +import javax.annotation.Resource; +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.Map; + +/** + * @Author haoxuyang + * @Date 2025/2/6 14:08 + */ +@Service +@Slf4j +public class WxPayService implements IWxPayService { + @Resource + private ITbMemberOrderService memberOrderService; + + @Resource + private WeiXinPayV3Utils weiXinPayV3Utils; + + @Resource + private WeiXinPayConfig weiXinPayConfig; + @Resource + private TbStudentMapper tbStudentMapper; + + + @Override + public Object createOrder(String orderNo) { + if (StrUtil.isBlank(orderNo)) { + throw new ServiceException("鍙傛暟閿欒"); + } + + TbMemberOrder order = memberOrderService.selectOrderByOrderNo(orderNo); + if (ObjectUtils.isEmpty(order)) { + throw new ServiceException("璁㈠崟閿欒"); + } + + BigDecimal payPrice = order.getPayPrice(); + + if (payPrice.compareTo(BigDecimal.ZERO) < 1) { + // 鏃犻渶鏀粯 + JSONObject data = new JSONObject(); + data.put("isNeedPay", 0); + memberOrderService.orderPayNotify(orderNo, 1); + return AjaxResult.success(data); + } else { + //鑾峰彇openId + TbStudent tbStudent = tbStudentMapper.selectTbStudentByStudentId(order.getMemberUserId()); + if (ObjectUtils.isEmpty(tbStudent) || ObjectUtils.isEmpty(tbStudent.getOpenId())) { + throw new ServiceException("鍙傛暟閿欒"); + } + JSONObject amount = new JSONObject(); + //鍗曚綅涓轰汉姘戝竵锛堝垎锛 + amount.put("total", order.getPayPrice().multiply(new BigDecimal("100")).intValue()); + amount.put("currency", "CNY"); + + JSONObject payer = new JSONObject(); + //鍙戣捣鑰 + payer.put("openid", tbStudent.getOpenId()); + + JSONObject postData = new JSONObject(); + postData.put("appid", weiXinPayConfig.getAppId()); + postData.put("mchid", weiXinPayConfig.getMchId()); + postData.put("description", order.getRemarks()); + postData.put("out_trade_no", orderNo); + postData.put("notify_url", weiXinPayConfig.getNotifyUrl()); + postData.put("amount", amount); + postData.put("payer", payer); + + log.info("寰俊涓嬪崟-鍙傛暟 => {}", postData.toJSONString()); + + // 璇锋眰JSAPI涓嬪崟 + JSONObject result = weiXinPayV3Utils.sendPost("https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi", postData); + if (result.containsKey("prepay_id")) { + // 鏀粯鍙傛暟 + Map payInfo = new HashMap<>(); + // 灏忕▼搴廔D + payInfo.put("appId", weiXinPayConfig.getAppId()); + // 鏃堕棿鎴 + payInfo.put("timeStamp", String.valueOf((int) (System.currentTimeMillis() / 1000))); + // 闅忔満瀛楃涓 + payInfo.put("nonceStr", IdUtils.fastSimpleUUID()); + // 璁㈠崟璇︽儏鎵╁睍瀛楃涓 + payInfo.put("package", "prepay_id=" + result.getString("prepay_id")); + // 绛惧悕鏂瑰紡 + payInfo.put("signType", "RSA"); + // 鍔犲瘑瀛楃涓诧紝姣忚涓涓弬鏁 + String paySignParam = payInfo.get("appId") + "\n" + payInfo.get("timeStamp") + "\n" + payInfo.get("nonceStr") + "\n" + payInfo.get("package") + "\n"; + // 绛惧悕 + String paySign = weiXinPayV3Utils.signRSA(paySignParam); + payInfo.put("paySign", paySign); + + // 璁㈠崟淇℃伅 + Map orderInfo = new HashMap<>(); + orderInfo.put("totalAmount", amount); + orderInfo.put("orderSn", orderNo); + orderInfo.put("payAt", DateUtils.getTime()); + + Map data = new HashMap<>(); + data.put("payInfo", payInfo); + data.put("orderInfo", orderInfo); + return data; + }else{ + log.error("寰俊涓嬪崟璋冭捣澶辫触 <{}> 鍙傛暟锛歿}锛岀粨鏋滐細{}", DateUtils.getTime(), postData.toJSONString(), result.toJSONString()); + throw new ServiceException("寰俊涓嬪崟璋冭捣澶辫触"); + } + } + } + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/test.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/test.java new file mode 100644 index 0000000000000000000000000000000000000000..99ca79dbd0abda04b2cb9c2722e63b841b15d368 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/service/impl/test.java @@ -0,0 +1,273 @@ +//package com.ruoyi.hezhi.service.impl; +// +//import com.ruoyi.common.exception.base.BaseException; +//import org.apache.poi.hssf.usermodel.HSSFCell; +//import org.apache.poi.hssf.usermodel.HSSFRow; +//import org.apache.poi.hssf.usermodel.HSSFSheet; +//import org.apache.poi.hssf.usermodel.HSSFWorkbook; +//import org.springframework.web.multipart.MultipartFile; +// +//import java.util.*; +// +///** +// * @Author haoxuyang +// * @Date 2025/1/20 15:57 +// */ +//public class test { +// public String importData(MultipartFile file) { +// // datalist鎷艰List deadliest, +// HSSFWorkbook wookbook = new HSSFWorkbook(file.getInputStream()); +// HSSFSheet sheet = wookbook.getSheetAt(0); +// // 鎸囩殑琛屾暟锛屼竴鍏辨湁澶氬皯琛+ +// int rows = sheet.getLastRowNum(); +// Calendar calendar = Calendar.getInstance(); +// +// List subjectR = nxbSubjectService.getSubjectListByType(SubjectType.EXAM.toString()); +// for (int i = 1; i <= rows; i++) { +// // 璇诲彇宸︿笂绔崟鍏冩牸 +// HSSFRow row = sheet.getRow(i); +// // 琛屼笉涓虹┖ +// if (row != null) { +// // 鑾峰彇鍒癊xcel鏂囦欢涓殑鎵鏈夌殑鍒 +// int maxcell = row.getLastCellNum(); +// // **璇诲彇cell** +// String content = getCellValue(row.getCell((short) 0));// 璇曢鍐呭 +// String subjectId = getCellValue(row.getCell((short) 1));// 涓撲笟ID +// String pointId = trimZero(getCellValue(row.getCell((short) 2)));// 鑰冪偣 +// String isAsr = getCellValue(row.getCell((short) 3));// 姝g‘绛旀 +// String type = getCellValue(row.getCell((short) 4));// 棰樺瀷 +// String level = trimZero(getCellValue(row.getCell((short) 5)));// 璇曢闅惧害 +// String analyze = getCellValue(row.getCell((short) 6));// 瑙f瀽 +// +// String optionA = getCellValue(row.getCell((short) 7)); // A +// String optionB = getCellValue(row.getCell((short) 8)); // B +// String optionC = getCellValue(row.getCell((short) 9)); // C +// String optionD = getCellValue(row.getCell((short) 10)); // D +// String optionE = getCellValue(row.getCell((short) 11)); // E +// String optionF = getCellValue(row.getCell((short) 12)); // F +// String optionG = getCellValue(row.getCell((short) 13)); // D +// +// if(StringUtils.isEmpty(content)&& +// StringUtils.isEmpty(subjectId)&& +// StringUtils.isEmpty(isAsr)&& +// StringUtils.isEmpty(type)&& +// StringUtils.isEmpty(level)&& +// StringUtils.isEmpty(analyze)){ +// break; +// } +// +// +// // 璇曢鍐呭锛屼笓涓氾紝姝g‘绛旀锛岃瘯棰樼被鍨嬶紝璇曢闅惧害 +// if (StringUtils.isEmpty(content) || StringUtils.isEmpty(subjectId) || StringUtils.isEmpty(isAsr) || StringUtils.isEmpty(type) || StringUtils.isEmpty(level)) { +// throw new BaseException( +// "绗" + i + "琛岋紝璇曢鍐呭涓<" + content + ">鐨勯偅鏉℃暟鎹暟鎹笉鑳戒负绌猴紙璇曢鍐呭锛屼笓涓氾紝姝g‘绛旀锛岃瘯棰樼被鍨嬶紝璇曢闅惧害锛"); +// } +// logger.info("璇曢绫诲瀷锛" + type); +// switch (type) { +// case "鍗曢": +// type = "1"; +// break; +// case "澶氶": +// type = "2"; +// break; +// case "鍒ゆ柇": +// type = "3"; +// break; +// case "涓嶅畾椤": +// type = "5"; +// break; +// default: +// throw new BaseException("绗" + i + "琛岋紝璇曢鍐呭涓<" + content + ">鐨勯偅鏉℃暟鎹瘯棰樼被鍨嬩笉姝g‘锛堣瘯棰樼被鍨嬪彧鑳借緭鍏ュ崟閫,澶氶,鍒ゆ柇,涓嶅畾椤癸級"); +// } +// // 涓撲笟ID蹇呴』鏄ぇ浜0鐨勬鏁存暟 +// if (!StringUtils.isNumber(subjectId)||Long.parseLong(subjectId)<=0) { +// throw new BaseException("绗" + i + "琛岋紝璇曢鍐呭涓<" + content + ">鐨勯偅鏉℃暟鎹笓涓欼D蹇呴』鏄ぇ浜0鐨勬鏁存暟"); +// } +// //璇 涓撲笟ID蹇呴』鏄鍏徃鎵鏈 +// NxbQuerySubject nxbQuerySubject=new NxbQuerySubject(); +// nxbQuerySubject.setCompanyId(companyId); +// nxbQuerySubject.setSubjectId(Long.parseLong(subjectId)); +// List subjectList = nxbSubjectDao.getSubjectList(nxbQuerySubject); +// if (subjectList==null||subjectList.size()==0) { +// throw new BaseException("绗" + i + "琛岋紝璇曢鍐呭涓<" + content + ">鐨勯偅鏉℃暟鎹笓涓欼D蹇呴』鏄鍒嗗叕鍙告墍鎷ユ湁鐨"); +// } +// +//// // 鑰冪偣蹇呴』鏄ぇ浜0鐨勬鏁存暟 +//// if (!StringUtils.isNumber(pointId)||Long.parseLong(pointId)<=0) { +//// throw new BaseException("绗" + i + "琛岋紝璇曢鍐呭涓<" + content + ">鐨勯偅鏉℃暟鎹冪偣ID蹇呴』鏄ぇ浜0鐨勬鏁存暟"); +//// } +// // 璇曢闅惧害 +// logger.info("璇曢闅惧害:" + level); +// switch (level) { +// case "涓绾": +// level = "1"; +// break; +// case "浜岀骇": +// level = "2"; +// break; +// case "涓夌骇": +// level = "3"; +// break; +// default: +// throw new BaseException("绗" + i + "琛岋紝璇曢鍐呭涓<" + content + ">鐨勯偅鏉℃暟鎹殑璇曢闅惧害蹇呴』鏄竴绾с佷簩绾с佷笁绾у叾涓殑涓涓"); +// } +// int typeInt = ConvertUtils.objectToInt(type); +// // 濡傛灉涓哄垽鏂鏈澶2涓夐」 +// if (typeInt == 3) { +// if (StringUtils.isEmpty(optionA) || StringUtils.isEmpty(optionB)) { +// throw new BaseException("绗" + i + "琛岋紝璇曢鍐呭涓<" + content + ">鐨勯偅鏉℃暟鎹负鍒ゆ柇棰橈紝閫夐」A鎴栭夐」B涓嶈兘涓虹┖"); +// } +// if (StringUtils.isNotEmpty(optionD) || StringUtils.isNotEmpty(optionE) +// || StringUtils.isNotEmpty(optionF) || StringUtils.isNotEmpty(optionG)) { +// throw new BaseException("绗" + i + "琛岋紝璇曢鍐呭涓<" + content + ">鐨勯偅鏉℃暟鎹负鍒ゆ柇棰橈紝閫夐」D锛孍锛孎锛孏蹇呴』涓虹┖"); +// } +// } +// // 濡傛灉涓嶆槸鍒ゆ柇棰橈紝閫夐」蹇呴』澶т簬绛変簬4涓皬浜庣瓑浜7涓夐」 +// if (typeInt != 3) { +// if (StringUtils.isEmpty(optionA) || StringUtils.isEmpty(optionB) ) { +// throw new BaseException("绗" + i + "琛岋紝璇曢鍐呭涓<" + content + ">鐨勯偅鏉℃暟鎹负閫夋嫨棰橈紝閫夐」A锛孊涓嶈兘涓虹┖"); +// } +// } +// // 濡傛灉涓哄閫夐姝g‘绛旀蹇呴』鍦ㄤ袱涓互涓 +// if (typeInt == 2 && isAsr.trim().length() < 2) { +// throw new BaseException("绗" + i + "琛岋紝璇曢鍐呭涓<" + content + ">鐨勯偅鏉℃暟鎹殑涓哄閫夐锛屾纭瓟妗堝繀椤诲湪涓や釜浠ヤ笂锛堜緥锛欰B锛"); +// } +// // 濡傛灉涓哄崟閫夐鎴栬呭垽鏂绛旀鍙兘鏈変竴涓 +// if (typeInt == 1 || typeInt == 3) { +// if (isAsr.trim().length() > 1) { +// throw new BaseException("绗" + i + "琛岋紝璇曢鍐呭涓<" + content + ">鐨勯偅鏉℃暟鎹殑姝g‘绛旀鍙兘鏈変竴涓紙渚嬶細A锛"); +// } +// } +// // 閫夐」涓嶈兘瓒呰繃7涓瓧绗 +// if (isAsr.trim().length() > 7) { +// throw new BaseException("绗" + i + "琛岋紝璇曢鍐呭涓<" + content + ">鐨勯偅鏉℃暟鎹纭瓟妗堜笉鑳借秴杩7涓瓧绗︼紙渚婣B锛"); +// } +// // 楠岃瘉姝g‘绛旀涓嶈兘杈撳叆鍏朵粬瀛楃 +// char[] asr = isAsr.toString().trim().toCharArray(); +// String asrStr = ""; +// for (int y = 0; y < asr.length; y++) { +// asrStr += asr[y] + ","; +// if ("ABCDEFG".indexOf(String.valueOf(asr[y])) == -1) { +// throw new BaseException("绗" + i + "琛岋紝璇曢鍐呭涓<" + content + ">鐨勯偅鏉℃暟鎹纭瓟妗堣緭鍏ュ瓧绗︽牸寮忎笉姝g‘锛堜緥AB锛"); +// } +// } +// isAsr = asrStr.substring(0, asrStr.length() - 1); +// +// +// Question question = new Question(); +// question.setStatus(1); +// // 璇曢绫诲瀷 +// int qstType = typeInt; +// question.setQstType(qstType); +// // 楠岃瘉椤圭洰ID +// Long subjectIdLong = Long.valueOf(subjectId.trim()); +// for (int x = 0; x < subjectR.size(); x++) { +// if (subjectR.get(x).getSubjectId().longValue() == subjectIdLong.longValue()) { +// question.setSubjectId(subjectIdLong); +// break; +// } +// } +// // 濡傛灉杈撳叆鐨勪笓涓氫笉鍖归厤 +// if (question.getSubjectId() == null || question.getSubjectId().intValue() <= 0) { +// throw new BaseException("绗" + i + "琛岋紝璇曢鍐呭涓<" + content + ">鐨勯偅鏉℃暟鎹殑涓撲笟id涓嶅尮閰"); +// } +// // 楠岃瘉鑰冪偣 +// if(StringUtils.isNotEmpty(pointId)){ +// Long pointIdLong = Long.valueOf(pointId.trim()); +// ExamPoint point = new ExamPoint(); +// point.setSubjectId(subjectIdLong); +// point.setId(pointIdLong); +// List pointList = pointDao.getPointList(point); +// if (!pointList.isEmpty()) { +// question.setPointId(pointIdLong); +// } +// } +// +// //璋冩暣绛旀椤哄簭 +// if(typeInt==2){ +// String[] chars = isAsr.split(","); +// Arrays.sort(chars); +// if(ObjectUtils.isNotNull(chars)&&chars.length>1){ +// StringBuilder isAsrs=new StringBuilder(); +// for (String s:chars){ +// isAsrs.append(s); +// isAsrs.append(","); +// } +// isAsr=isAsrs.substring(0,isAsrs.length()-1); +// } +// } +// question.setLevel(ConvertUtils.objectToInt(level)); +// question.setQstContent(content); +// question.setIsAsr(isAsr); +// question.setQstAnalyze(analyze); +// question.setAddTime(new Date()); +// question.setAuthor("admin"); +// question.setCompanyId(companyId); // 鍏徃ID +// questionDao.addOneQuestion(question); +// int AASC = 64; +// List str = new ArrayList(); +// // 鎶婇夐」鐨勫兼斁鍏ist涓 +// str.add(optionA); +// str.add(optionB); +// str.add(optionC); +// str.add(optionD); +// str.add(optionE); +// str.add(optionF); +// str.add(optionG); +// +// List optionList = new ArrayList<>(); +// +// for (int k = 0; k < str.size(); k++) { +// // 濡傛灉閫夐」涓虹┖瀛楃涓插垯涓嶆坊鍔犺閫夐」 +// if (!"".equals(str.get(k).trim())) { +// QuestionOption option = new QuestionOption(); +// option.setAddTime(new Date()); +// option.setOptAnswer(question.getIsAsr()); +// option.setOptContent(str.get(k).trim()); +// option.setQstId(question.getId()); +// char data[] = { backchar(AASC += 1) }; +// option.setOptOrder(String.valueOf(data)); +// optionList.add(option); +// } +// } +// Map> map = new HashMap<>(); +// map.put("optionList", optionList); +// optionDao.addOptionBatch(map); +// } +// } +// return ""; +// } +// +// /** +// * 鑾峰緱Hsscell鍐呭 +// * +// * @param cell +// * @return +// */ +// public String getCellValue(HSSFCell cell) { +// String value = ""; +// if (cell != null) { +// switch (cell.getCellType()) { +// case HSSFCell.CELL_TYPE_FORMULA: +// break; +// case HSSFCell.CELL_TYPE_NUMERIC: +// value = cell.getNumericCellValue() + ""; +// break; +// case HSSFCell.CELL_TYPE_STRING: +// value = cell.getStringCellValue().trim(); +// break; +// default: +// value = ""; +// break; +// } +// } +// return value.trim(); +// } +// +// String trimZero(String str) { +// if (StringUtils.isNotEmpty(str)) { +// return str.replace(".0", ""); +// } +// return str; +// } +//} diff --git a/ruoyi-system/src/main/java/com/ruoyi/hezhi/util/ImportTemplateUtil.java b/ruoyi-system/src/main/java/com/ruoyi/hezhi/util/ImportTemplateUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..c2f947c3a2a2999fbd2cad53753f66cbeffb1832 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/hezhi/util/ImportTemplateUtil.java @@ -0,0 +1,20 @@ +package com.ruoyi.hezhi.util; + +import com.ruoyi.common.utils.poi.ExcelUtil; + +import javax.servlet.http.HttpServletResponse; +import java.util.Collections; + +public class ImportTemplateUtil { + + /** + * 涓嬭浇瀵煎叆妯℃澘 + * @param response 鍝嶅簲瀵硅薄 + * @param clazz 甯Excel娉ㄨВ鐨勫疄浣撶被 + * @param fileName 涓嬭浇鏂囦欢鍚(涓嶉渶瑕佸悗缂) + */ + public static void downloadTemplate(HttpServletResponse response, Class clazz, String fileName) { + new ExcelUtil<>(clazz).exportExcel(Collections.emptyList(), fileName,response); + } + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysCache.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysCache.java new file mode 100644 index 0000000000000000000000000000000000000000..83f0703a0fc23882cf9dc9167ac75d71da471d9e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysCache.java @@ -0,0 +1,81 @@ +package com.ruoyi.system.domain; + +import com.ruoyi.common.utils.StringUtils; + +/** + * 缂撳瓨淇℃伅 + * + * @author ruoyi + */ +public class SysCache +{ + /** 缂撳瓨鍚嶇О */ + private String cacheName = ""; + + /** 缂撳瓨閿悕 */ + private String cacheKey = ""; + + /** 缂撳瓨鍐呭 */ + private String cacheValue = ""; + + /** 澶囨敞 */ + private String remark = ""; + + public SysCache() + { + + } + + public SysCache(String cacheName, String remark) + { + this.cacheName = cacheName; + this.remark = remark; + } + + public SysCache(String cacheName, String cacheKey, String cacheValue) + { + this.cacheName = StringUtils.replace(cacheName, ":", ""); + this.cacheKey = StringUtils.replace(cacheKey, cacheName, ""); + this.cacheValue = cacheValue; + } + + public String getCacheName() + { + return cacheName; + } + + public void setCacheName(String cacheName) + { + this.cacheName = cacheName; + } + + public String getCacheKey() + { + return cacheKey; + } + + public void setCacheKey(String cacheKey) + { + this.cacheKey = cacheKey; + } + + public String getCacheValue() + { + return cacheValue; + } + + public void setCacheValue(String cacheValue) + { + this.cacheValue = cacheValue; + } + + public String getRemark() + { + return remark; + } + + public void setRemark(String remark) + { + this.remark = remark; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..0070d0595830f692b7c6d9f8b383be96b5febdf8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java @@ -0,0 +1,112 @@ +package com.ruoyi.system.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +/** + * 鍙傛暟閰嶇疆琛 sys_config + * + * @author ruoyi + */ +public class SysConfig extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鍙傛暟涓婚敭 */ + @Excel(name = "鍙傛暟涓婚敭", cellType = ColumnType.NUMERIC) + private Long configId; + + /** 鍙傛暟鍚嶇О */ + @Excel(name = "鍙傛暟鍚嶇О") + private String configName; + + /** 鍙傛暟閿悕 */ + @Excel(name = "鍙傛暟閿悕") + private String configKey; + + /** 鍙傛暟閿 */ + @Excel(name = "鍙傛暟閿") + private String configValue; + + /** 绯荤粺鍐呯疆锛圷鏄 N鍚︼級 */ + @Excel(name = "绯荤粺鍐呯疆", readConverterExp = "Y=鏄,N=鍚") + private String configType; + + public Long getConfigId() + { + return configId; + } + + public void setConfigId(Long configId) + { + this.configId = configId; + } + + @NotBlank(message = "鍙傛暟鍚嶇О涓嶈兘涓虹┖") + @Size(min = 0, max = 100, message = "鍙傛暟鍚嶇О涓嶈兘瓒呰繃100涓瓧绗") + public String getConfigName() + { + return configName; + } + + public void setConfigName(String configName) + { + this.configName = configName; + } + + @NotBlank(message = "鍙傛暟閿悕闀垮害涓嶈兘涓虹┖") + @Size(min = 0, max = 100, message = "鍙傛暟閿悕闀垮害涓嶈兘瓒呰繃100涓瓧绗") + public String getConfigKey() + { + return configKey; + } + + public void setConfigKey(String configKey) + { + this.configKey = configKey; + } + + @NotBlank(message = "鍙傛暟閿间笉鑳戒负绌") + @Size(min = 0, max = 500, message = "鍙傛暟閿奸暱搴︿笉鑳借秴杩500涓瓧绗") + public String getConfigValue() + { + return configValue; + } + + public void setConfigValue(String configValue) + { + this.configValue = configValue; + } + + public String getConfigType() + { + return configType; + } + + public void setConfigType(String configType) + { + this.configType = configType; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("configId", getConfigId()) + .append("configName", getConfigName()) + .append("configKey", getConfigKey()) + .append("configValue", getConfigValue()) + .append("configType", getConfigType()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java new file mode 100644 index 0000000000000000000000000000000000000000..f5751a181700b2ee69f36ba85970f97c74dc90ed --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java @@ -0,0 +1,145 @@ +package com.ruoyi.system.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.util.Date; + +/** + * 绯荤粺璁块棶璁板綍琛 sys_logininfor + * + * @author ruoyi + */ +public class SysLogininfor extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** ID */ + @Excel(name = "搴忓彿", cellType = ColumnType.NUMERIC) + private Long infoId; + + /** 鐢ㄦ埛璐﹀彿 */ + @Excel(name = "鐢ㄦ埛璐﹀彿") + private String userName; + + /** 鐧诲綍鐘舵 0鎴愬姛 1澶辫触 */ + @Excel(name = "鐧诲綍鐘舵", readConverterExp = "0=鎴愬姛,1=澶辫触") + private String status; + + /** 鐧诲綍IP鍦板潃 */ + @Excel(name = "鐧诲綍鍦板潃") + private String ipaddr; + + /** 鐧诲綍鍦扮偣 */ + @Excel(name = "鐧诲綍鍦扮偣") + private String loginLocation; + + /** 娴忚鍣ㄧ被鍨 */ + @Excel(name = "娴忚鍣") + private String browser; + + /** 鎿嶄綔绯荤粺 */ + @Excel(name = "鎿嶄綔绯荤粺") + private String os; + + /** 鎻愮ず娑堟伅 */ + @Excel(name = "鎻愮ず娑堟伅") + private String msg; + + /** 璁块棶鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "璁块棶鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date loginTime; + + public Long getInfoId() + { + return infoId; + } + + public void setInfoId(Long infoId) + { + this.infoId = infoId; + } + + public String getUserName() + { + return userName; + } + + public void setUserName(String userName) + { + this.userName = userName; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getIpaddr() + { + return ipaddr; + } + + public void setIpaddr(String ipaddr) + { + this.ipaddr = ipaddr; + } + + public String getLoginLocation() + { + return loginLocation; + } + + public void setLoginLocation(String loginLocation) + { + this.loginLocation = loginLocation; + } + + public String getBrowser() + { + return browser; + } + + public void setBrowser(String browser) + { + this.browser = browser; + } + + public String getOs() + { + return os; + } + + public void setOs(String os) + { + this.os = os; + } + + public String getMsg() + { + return msg; + } + + public void setMsg(String msg) + { + this.msg = msg; + } + + public Date getLoginTime() + { + return loginTime; + } + + public void setLoginTime(Date loginTime) + { + this.loginTime = loginTime; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java new file mode 100644 index 0000000000000000000000000000000000000000..91c0d5ddecff4593a682d430e76e51ce077363e3 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java @@ -0,0 +1,103 @@ +package com.ruoyi.system.domain; + +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.xss.Xss; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; + +/** + * 閫氱煡鍏憡琛 sys_notice + * + * @author ruoyi + */ +public class SysNotice extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鍏憡ID */ + private Long noticeId; + + /** 鍏憡鏍囬 */ + private String noticeTitle; + + /** 鍏憡绫诲瀷锛1閫氱煡 2鍏憡锛 */ + private String noticeType; + + /** 鍏憡鍐呭 */ + private String noticeContent; + + /** 鍏憡鐘舵侊紙0姝e父 1鍏抽棴锛 */ + private String status; + + public Long getNoticeId() + { + return noticeId; + } + + public void setNoticeId(Long noticeId) + { + this.noticeId = noticeId; + } + + public void setNoticeTitle(String noticeTitle) + { + this.noticeTitle = noticeTitle; + } + + @Xss(message = "鍏憡鏍囬涓嶈兘鍖呭惈鑴氭湰瀛楃") + @NotBlank(message = "鍏憡鏍囬涓嶈兘涓虹┖") + @Size(min = 0, max = 50, message = "鍏憡鏍囬涓嶈兘瓒呰繃50涓瓧绗") + public String getNoticeTitle() + { + return noticeTitle; + } + + public void setNoticeType(String noticeType) + { + this.noticeType = noticeType; + } + + public String getNoticeType() + { + return noticeType; + } + + public void setNoticeContent(String noticeContent) + { + this.noticeContent = noticeContent; + } + + public String getNoticeContent() + { + return noticeContent; + } + + public void setStatus(String status) + { + this.status = status; + } + + public String getStatus() + { + return status; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("noticeId", getNoticeId()) + .append("noticeTitle", getNoticeTitle()) + .append("noticeType", getNoticeType()) + .append("noticeContent", getNoticeContent()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java new file mode 100644 index 0000000000000000000000000000000000000000..6191f1daf831a695befefc9c5b04db911743098b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java @@ -0,0 +1,270 @@ +package com.ruoyi.system.domain; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; +import com.ruoyi.common.core.domain.BaseEntity; + +import java.util.Date; + +/** + * 鎿嶄綔鏃ュ織璁板綍琛 oper_log + * + * @author ruoyi + */ +public class SysOperLog extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 鏃ュ織涓婚敭 */ + @Excel(name = "鎿嶄綔搴忓彿", cellType = ColumnType.NUMERIC) + private Long operId; + + /** 鎿嶄綔妯″潡 */ + @Excel(name = "鎿嶄綔妯″潡") + private String title; + + /** 涓氬姟绫诲瀷锛0鍏跺畠 1鏂板 2淇敼 3鍒犻櫎锛 */ + @Excel(name = "涓氬姟绫诲瀷", readConverterExp = "0=鍏跺畠,1=鏂板,2=淇敼,3=鍒犻櫎,4=鎺堟潈,5=瀵煎嚭,6=瀵煎叆,7=寮洪,8=鐢熸垚浠g爜,9=娓呯┖鏁版嵁") + private Integer businessType; + + /** 涓氬姟绫诲瀷鏁扮粍 */ + private Integer[] businessTypes; + + /** 璇锋眰鏂规硶 */ + @Excel(name = "璇锋眰鏂规硶") + private String method; + + /** 璇锋眰鏂瑰紡 */ + @Excel(name = "璇锋眰鏂瑰紡") + private String requestMethod; + + /** 鎿嶄綔绫诲埆锛0鍏跺畠 1鍚庡彴鐢ㄦ埛 2鎵嬫満绔敤鎴凤級 */ + @Excel(name = "鎿嶄綔绫诲埆", readConverterExp = "0=鍏跺畠,1=鍚庡彴鐢ㄦ埛,2=鎵嬫満绔敤鎴") + private Integer operatorType; + + /** 鎿嶄綔浜哄憳 */ + @Excel(name = "鎿嶄綔浜哄憳") + private String operName; + + /** 閮ㄩ棬鍚嶇О */ + @Excel(name = "閮ㄩ棬鍚嶇О") + private String deptName; + + /** 璇锋眰url */ + @Excel(name = "璇锋眰鍦板潃") + private String operUrl; + + /** 鎿嶄綔鍦板潃 */ + @Excel(name = "鎿嶄綔鍦板潃") + private String operIp; + + /** 鎿嶄綔鍦扮偣 */ + @Excel(name = "鎿嶄綔鍦扮偣") + private String operLocation; + + /** 璇锋眰鍙傛暟 */ + @Excel(name = "璇锋眰鍙傛暟") + private String operParam; + + /** 杩斿洖鍙傛暟 */ + @Excel(name = "杩斿洖鍙傛暟") + private String jsonResult; + + /** 鎿嶄綔鐘舵侊紙0姝e父 1寮傚父锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=姝e父,1=寮傚父") + private Integer status; + + /** 閿欒娑堟伅 */ + @Excel(name = "閿欒娑堟伅") + private String errorMsg; + + /** 鎿嶄綔鏃堕棿 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "鎿嶄綔鏃堕棿", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private Date operTime; + + /** 娑堣楁椂闂 */ + @Excel(name = "娑堣楁椂闂", suffix = "姣") + private Long costTime; + + public Long getOperId() + { + return operId; + } + + public void setOperId(Long operId) + { + this.operId = operId; + } + + public String getTitle() + { + return title; + } + + public void setTitle(String title) + { + this.title = title; + } + + public Integer getBusinessType() + { + return businessType; + } + + public void setBusinessType(Integer businessType) + { + this.businessType = businessType; + } + + public Integer[] getBusinessTypes() + { + return businessTypes; + } + + public void setBusinessTypes(Integer[] businessTypes) + { + this.businessTypes = businessTypes; + } + + public String getMethod() + { + return method; + } + + public void setMethod(String method) + { + this.method = method; + } + + public String getRequestMethod() + { + return requestMethod; + } + + public void setRequestMethod(String requestMethod) + { + this.requestMethod = requestMethod; + } + + public Integer getOperatorType() + { + return operatorType; + } + + public void setOperatorType(Integer operatorType) + { + this.operatorType = operatorType; + } + + public String getOperName() + { + return operName; + } + + public void setOperName(String operName) + { + this.operName = operName; + } + + public String getDeptName() + { + return deptName; + } + + public void setDeptName(String deptName) + { + this.deptName = deptName; + } + + public String getOperUrl() + { + return operUrl; + } + + public void setOperUrl(String operUrl) + { + this.operUrl = operUrl; + } + + public String getOperIp() + { + return operIp; + } + + public void setOperIp(String operIp) + { + this.operIp = operIp; + } + + public String getOperLocation() + { + return operLocation; + } + + public void setOperLocation(String operLocation) + { + this.operLocation = operLocation; + } + + public String getOperParam() + { + return operParam; + } + + public void setOperParam(String operParam) + { + this.operParam = operParam; + } + + public String getJsonResult() + { + return jsonResult; + } + + public void setJsonResult(String jsonResult) + { + this.jsonResult = jsonResult; + } + + public Integer getStatus() + { + return status; + } + + public void setStatus(Integer status) + { + this.status = status; + } + + public String getErrorMsg() + { + return errorMsg; + } + + public void setErrorMsg(String errorMsg) + { + this.errorMsg = errorMsg; + } + + public Date getOperTime() + { + return operTime; + } + + public void setOperTime(Date operTime) + { + this.operTime = operTime; + } + + public Long getCostTime() + { + return costTime; + } + + public void setCostTime(Long costTime) + { + this.costTime = costTime; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java new file mode 100644 index 0000000000000000000000000000000000000000..dfcf0ea9cbc7a22267932f2e06f0c898d0c466ca --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java @@ -0,0 +1,125 @@ +package com.ruoyi.system.domain; + +import com.ruoyi.common.annotation.Excel; +import com.ruoyi.common.annotation.Excel.ColumnType; +import com.ruoyi.common.core.domain.BaseEntity; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Size; + +/** + * 宀椾綅琛 sys_post + * + * @author ruoyi + */ +public class SysPost extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** 宀椾綅搴忓彿 */ + @Excel(name = "宀椾綅搴忓彿", cellType = ColumnType.NUMERIC) + private Long postId; + + /** 宀椾綅缂栫爜 */ + @Excel(name = "宀椾綅缂栫爜") + private String postCode; + + /** 宀椾綅鍚嶇О */ + @Excel(name = "宀椾綅鍚嶇О") + private String postName; + + /** 宀椾綅鎺掑簭 */ + @Excel(name = "宀椾綅鎺掑簭") + private Integer postSort; + + /** 鐘舵侊紙0姝e父 1鍋滅敤锛 */ + @Excel(name = "鐘舵", readConverterExp = "0=姝e父,1=鍋滅敤") + private String status; + + /** 鐢ㄦ埛鏄惁瀛樺湪姝ゅ矖浣嶆爣璇 榛樿涓嶅瓨鍦 */ + private boolean flag = false; + + public Long getPostId() + { + return postId; + } + + public void setPostId(Long postId) + { + this.postId = postId; + } + + @NotBlank(message = "宀椾綅缂栫爜涓嶈兘涓虹┖") + @Size(min = 0, max = 64, message = "宀椾綅缂栫爜闀垮害涓嶈兘瓒呰繃64涓瓧绗") + public String getPostCode() + { + return postCode; + } + + public void setPostCode(String postCode) + { + this.postCode = postCode; + } + + @NotBlank(message = "宀椾綅鍚嶇О涓嶈兘涓虹┖") + @Size(min = 0, max = 50, message = "宀椾綅鍚嶇О闀垮害涓嶈兘瓒呰繃50涓瓧绗") + public String getPostName() + { + return postName; + } + + public void setPostName(String postName) + { + this.postName = postName; + } + + @NotNull(message = "鏄剧ず椤哄簭涓嶈兘涓虹┖") + public Integer getPostSort() + { + return postSort; + } + + public void setPostSort(Integer postSort) + { + this.postSort = postSort; + } + + public String getStatus() + { + return status; + } + + public void setStatus(String status) + { + this.status = status; + } + + public boolean isFlag() + { + return flag; + } + + public void setFlag(boolean flag) + { + this.flag = flag; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("postId", getPostId()) + .append("postCode", getPostCode()) + .append("postName", getPostName()) + .append("postSort", getPostSort()) + .append("status", getStatus()) + .append("createBy", getCreateBy()) + .append("createTime", getCreateTime()) + .append("updateBy", getUpdateBy()) + .append("updateTime", getUpdateTime()) + .append("remark", getRemark()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleDept.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleDept.java new file mode 100644 index 0000000000000000000000000000000000000000..47b21bf79394579e946ff2eb1a7b1a4d6fbc8791 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleDept.java @@ -0,0 +1,46 @@ +package com.ruoyi.system.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 瑙掕壊鍜岄儴闂ㄥ叧鑱 sys_role_dept + * + * @author ruoyi + */ +public class SysRoleDept +{ + /** 瑙掕壊ID */ + private Long roleId; + + /** 閮ㄩ棬ID */ + private Long deptId; + + public Long getRoleId() + { + return roleId; + } + + public void setRoleId(Long roleId) + { + this.roleId = roleId; + } + + public Long getDeptId() + { + return deptId; + } + + public void setDeptId(Long deptId) + { + this.deptId = deptId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("roleId", getRoleId()) + .append("deptId", getDeptId()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleMenu.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleMenu.java new file mode 100644 index 0000000000000000000000000000000000000000..de10a74709401d3947e2a95e7844ae889b513f6d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleMenu.java @@ -0,0 +1,46 @@ +package com.ruoyi.system.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 瑙掕壊鍜岃彍鍗曞叧鑱 sys_role_menu + * + * @author ruoyi + */ +public class SysRoleMenu +{ + /** 瑙掕壊ID */ + private Long roleId; + + /** 鑿滃崟ID */ + private Long menuId; + + public Long getRoleId() + { + return roleId; + } + + public void setRoleId(Long roleId) + { + this.roleId = roleId; + } + + public Long getMenuId() + { + return menuId; + } + + public void setMenuId(Long menuId) + { + this.menuId = menuId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("roleId", getRoleId()) + .append("menuId", getMenuId()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java new file mode 100644 index 0000000000000000000000000000000000000000..2bbd31888651923499e57d09c6da93f28e9ded9d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java @@ -0,0 +1,113 @@ +package com.ruoyi.system.domain; + +/** + * 褰撳墠鍦ㄧ嚎浼氳瘽 + * + * @author ruoyi + */ +public class SysUserOnline +{ + /** 浼氳瘽缂栧彿 */ + private String tokenId; + + /** 閮ㄩ棬鍚嶇О */ + private String deptName; + + /** 鐢ㄦ埛鍚嶇О */ + private String userName; + + /** 鐧诲綍IP鍦板潃 */ + private String ipaddr; + + /** 鐧诲綍鍦板潃 */ + private String loginLocation; + + /** 娴忚鍣ㄧ被鍨 */ + private String browser; + + /** 鎿嶄綔绯荤粺 */ + private String os; + + /** 鐧诲綍鏃堕棿 */ + private Long loginTime; + + public String getTokenId() + { + return tokenId; + } + + public void setTokenId(String tokenId) + { + this.tokenId = tokenId; + } + + public String getDeptName() + { + return deptName; + } + + public void setDeptName(String deptName) + { + this.deptName = deptName; + } + + public String getUserName() + { + return userName; + } + + public void setUserName(String userName) + { + this.userName = userName; + } + + public String getIpaddr() + { + return ipaddr; + } + + public void setIpaddr(String ipaddr) + { + this.ipaddr = ipaddr; + } + + public String getLoginLocation() + { + return loginLocation; + } + + public void setLoginLocation(String loginLocation) + { + this.loginLocation = loginLocation; + } + + public String getBrowser() + { + return browser; + } + + public void setBrowser(String browser) + { + this.browser = browser; + } + + public String getOs() + { + return os; + } + + public void setOs(String os) + { + this.os = os; + } + + public Long getLoginTime() + { + return loginTime; + } + + public void setLoginTime(Long loginTime) + { + this.loginTime = loginTime; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserPost.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserPost.java new file mode 100644 index 0000000000000000000000000000000000000000..6e8c416f21e3c345c88bf565885f604da11b8cb2 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserPost.java @@ -0,0 +1,46 @@ +package com.ruoyi.system.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 鐢ㄦ埛鍜屽矖浣嶅叧鑱 sys_user_post + * + * @author ruoyi + */ +public class SysUserPost +{ + /** 鐢ㄦ埛ID */ + private Long userId; + + /** 宀椾綅ID */ + private Long postId; + + public Long getUserId() + { + return userId; + } + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getPostId() + { + return postId; + } + + public void setPostId(Long postId) + { + this.postId = postId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("postId", getPostId()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserRole.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserRole.java new file mode 100644 index 0000000000000000000000000000000000000000..4d15810144a80005af96ce5a69862ee1c7ea26bf --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserRole.java @@ -0,0 +1,46 @@ +package com.ruoyi.system.domain; + +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 鐢ㄦ埛鍜岃鑹插叧鑱 sys_user_role + * + * @author ruoyi + */ +public class SysUserRole +{ + /** 鐢ㄦ埛ID */ + private Long userId; + + /** 瑙掕壊ID */ + private Long roleId; + + public Long getUserId() + { + return userId; + } + + public void setUserId(Long userId) + { + this.userId = userId; + } + + public Long getRoleId() + { + return roleId; + } + + public void setRoleId(Long roleId) + { + this.roleId = roleId; + } + + @Override + public String toString() { + return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) + .append("userId", getUserId()) + .append("roleId", getRoleId()) + .toString(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MetaVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MetaVo.java new file mode 100644 index 0000000000000000000000000000000000000000..a5d5fdccb82c6686ffed52f4318f9ef5f6a1a427 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MetaVo.java @@ -0,0 +1,106 @@ +package com.ruoyi.system.domain.vo; + +import com.ruoyi.common.utils.StringUtils; + +/** + * 璺敱鏄剧ず淇℃伅 + * + * @author ruoyi + */ +public class MetaVo +{ + /** + * 璁剧疆璇ヨ矾鐢卞湪渚ц竟鏍忓拰闈㈠寘灞戜腑灞曠ず鐨勫悕瀛 + */ + private String title; + + /** + * 璁剧疆璇ヨ矾鐢辩殑鍥炬爣锛屽搴旇矾寰剆rc/assets/icons/svg + */ + private String icon; + + /** + * 璁剧疆涓簍rue锛屽垯涓嶄細琚 缂撳瓨 + */ + private boolean noCache; + + /** + * 鍐呴摼鍦板潃锛坔ttp(s)://寮澶达級 + */ + private String link; + + public MetaVo() + { + } + + public MetaVo(String title, String icon) + { + this.title = title; + this.icon = icon; + } + + public MetaVo(String title, String icon, boolean noCache) + { + this.title = title; + this.icon = icon; + this.noCache = noCache; + } + + public MetaVo(String title, String icon, String link) + { + this.title = title; + this.icon = icon; + this.link = link; + } + + public MetaVo(String title, String icon, boolean noCache, String link) + { + this.title = title; + this.icon = icon; + this.noCache = noCache; + if (StringUtils.ishttp(link)) + { + this.link = link; + } + } + + public boolean isNoCache() + { + return noCache; + } + + public void setNoCache(boolean noCache) + { + this.noCache = noCache; + } + + public String getTitle() + { + return title; + } + + public void setTitle(String title) + { + this.title = title; + } + + public String getIcon() + { + return icon; + } + + public void setIcon(String icon) + { + this.icon = icon; + } + + public String getLink() + { + return link; + } + + public void setLink(String link) + { + this.link = link; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RouterVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RouterVo.java new file mode 100644 index 0000000000000000000000000000000000000000..3d05279a43533202d9e10d5c1945fe015a611137 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RouterVo.java @@ -0,0 +1,149 @@ +package com.ruoyi.system.domain.vo; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import java.util.List; + +/** + * 璺敱閰嶇疆淇℃伅 + * + * @author ruoyi + */ +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public class RouterVo +{ + /** + * 璺敱鍚嶅瓧 + */ + private String name; + + /** + * 璺敱鍦板潃 + */ + private String path; + + /** + * 鏄惁闅愯棌璺敱锛屽綋璁剧疆 true 鐨勬椂鍊欒璺敱涓嶄細鍐嶄晶杈规爮鍑虹幇 + */ + private boolean hidden; + + /** + * 閲嶅畾鍚戝湴鍧锛屽綋璁剧疆 noRedirect 鐨勬椂鍊欒璺敱鍦ㄩ潰鍖呭睉瀵艰埅涓笉鍙鐐瑰嚮 + */ + private String redirect; + + /** + * 缁勪欢鍦板潃 + */ + private String component; + + /** + * 璺敱鍙傛暟锛氬 {"id": 1, "name": "ry"} + */ + private String query; + + /** + * 褰撲綘涓涓矾鐢变笅闈㈢殑 children 澹版槑鐨勮矾鐢卞ぇ浜1涓椂锛岃嚜鍔ㄤ細鍙樻垚宓屽鐨勬ā寮--濡傜粍浠堕〉闈 + */ + private Boolean alwaysShow; + + /** + * 鍏朵粬鍏冪礌 + */ + private MetaVo meta; + + /** + * 瀛愯矾鐢 + */ + private List children; + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + public String getPath() + { + return path; + } + + public void setPath(String path) + { + this.path = path; + } + + public boolean getHidden() + { + return hidden; + } + + public void setHidden(boolean hidden) + { + this.hidden = hidden; + } + + public String getRedirect() + { + return redirect; + } + + public void setRedirect(String redirect) + { + this.redirect = redirect; + } + + public String getComponent() + { + return component; + } + + public void setComponent(String component) + { + this.component = component; + } + + public String getQuery() + { + return query; + } + + public void setQuery(String query) + { + this.query = query; + } + + public Boolean getAlwaysShow() + { + return alwaysShow; + } + + public void setAlwaysShow(Boolean alwaysShow) + { + this.alwaysShow = alwaysShow; + } + + public MetaVo getMeta() + { + return meta; + } + + public void setMeta(MetaVo meta) + { + this.meta = meta; + } + + public List getChildren() + { + return children; + } + + public void setChildren(List children) + { + this.children = children; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..5342a06c73ec84869fd50d7a756565d50d1a1eb6 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java @@ -0,0 +1,77 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.system.domain.SysConfig; + +import java.util.List; + +/** + * 鍙傛暟閰嶇疆 鏁版嵁灞 + * + * @author ruoyi + */ +public interface SysConfigMapper +{ + /** + * 鏌ヨ鍙傛暟閰嶇疆淇℃伅 + * + * @param config 鍙傛暟閰嶇疆淇℃伅 + * @return 鍙傛暟閰嶇疆淇℃伅 + */ + public SysConfig selectConfig(SysConfig config); + + /** + * 閫氳繃ID鏌ヨ閰嶇疆 + * + * @param configId 鍙傛暟ID + * @return 鍙傛暟閰嶇疆淇℃伅 + */ + public SysConfig selectConfigById(Long configId); + + /** + * 鏌ヨ鍙傛暟閰嶇疆鍒楄〃 + * + * @param config 鍙傛暟閰嶇疆淇℃伅 + * @return 鍙傛暟閰嶇疆闆嗗悎 + */ + public List selectConfigList(SysConfig config); + + /** + * 鏍规嵁閿悕鏌ヨ鍙傛暟閰嶇疆淇℃伅 + * + * @param configKey 鍙傛暟閿悕 + * @return 鍙傛暟閰嶇疆淇℃伅 + */ + public SysConfig checkConfigKeyUnique(String configKey); + + /** + * 鏂板鍙傛暟閰嶇疆 + * + * @param config 鍙傛暟閰嶇疆淇℃伅 + * @return 缁撴灉 + */ + public int insertConfig(SysConfig config); + + /** + * 淇敼鍙傛暟閰嶇疆 + * + * @param config 鍙傛暟閰嶇疆淇℃伅 + * @return 缁撴灉 + */ + public int updateConfig(SysConfig config); + + /** + * 鍒犻櫎鍙傛暟閰嶇疆 + * + * @param configId 鍙傛暟ID + * @return 缁撴灉 + */ + public int deleteConfigById(Long configId); + + /** + * 鎵归噺鍒犻櫎鍙傛暟淇℃伅 + * + * @param configIds 闇瑕佸垹闄ょ殑鍙傛暟ID + * @return 缁撴灉 + */ + public int deleteConfigByIds(Long[] configIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..d09911d014b2f8b41fe5067f21c8590061fd5522 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java @@ -0,0 +1,119 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.common.core.domain.entity.SysDept; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 閮ㄩ棬绠$悊 鏁版嵁灞 + * + * @author ruoyi + */ +public interface SysDeptMapper +{ + /** + * 鏌ヨ閮ㄩ棬绠$悊鏁版嵁 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 閮ㄩ棬淇℃伅闆嗗悎 + */ + public List selectDeptList(SysDept dept); + + /** + * 鏍规嵁瑙掕壊ID鏌ヨ閮ㄩ棬鏍戜俊鎭 + * + * @param roleId 瑙掕壊ID + * @param deptCheckStrictly 閮ㄩ棬鏍戦夋嫨椤规槸鍚﹀叧鑱旀樉绀 + * @return 閫変腑閮ㄩ棬鍒楄〃 + */ + public List selectDeptListByRoleId(@Param("roleId") Long roleId, @Param("deptCheckStrictly") boolean deptCheckStrictly); + + /** + * 鏍规嵁閮ㄩ棬ID鏌ヨ淇℃伅 + * + * @param deptId 閮ㄩ棬ID + * @return 閮ㄩ棬淇℃伅 + */ + public SysDept selectDeptById(Long deptId); + + /** + * 鏍规嵁ID鏌ヨ鎵鏈夊瓙閮ㄩ棬 + * + * @param deptId 閮ㄩ棬ID + * @return 閮ㄩ棬鍒楄〃 + */ + public List selectChildrenDeptById(Long deptId); + + /** + * 鏍规嵁ID鏌ヨ鎵鏈夊瓙閮ㄩ棬锛堟甯哥姸鎬侊級 + * + * @param deptId 閮ㄩ棬ID + * @return 瀛愰儴闂ㄦ暟 + */ + public int selectNormalChildrenDeptById(Long deptId); + + /** + * 鏄惁瀛樺湪瀛愯妭鐐 + * + * @param deptId 閮ㄩ棬ID + * @return 缁撴灉 + */ + public int hasChildByDeptId(Long deptId); + + /** + * 鏌ヨ閮ㄩ棬鏄惁瀛樺湪鐢ㄦ埛 + * + * @param deptId 閮ㄩ棬ID + * @return 缁撴灉 + */ + public int checkDeptExistUser(Long deptId); + + /** + * 鏍¢獙閮ㄩ棬鍚嶇О鏄惁鍞竴 + * + * @param deptName 閮ㄩ棬鍚嶇О + * @param parentId 鐖堕儴闂↖D + * @return 缁撴灉 + */ + public SysDept checkDeptNameUnique(@Param("deptName") String deptName, @Param("parentId") Long parentId); + + /** + * 鏂板閮ㄩ棬淇℃伅 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 缁撴灉 + */ + public int insertDept(SysDept dept); + + /** + * 淇敼閮ㄩ棬淇℃伅 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 缁撴灉 + */ + public int updateDept(SysDept dept); + + /** + * 淇敼鎵鍦ㄩ儴闂ㄦ甯哥姸鎬 + * + * @param deptIds 閮ㄩ棬ID缁 + */ + public void updateDeptStatusNormal(Long[] deptIds); + + /** + * 淇敼瀛愬厓绱犲叧绯 + * + * @param depts 瀛愬厓绱 + * @return 缁撴灉 + */ + public int updateDeptChildren(@Param("depts") List depts); + + /** + * 鍒犻櫎閮ㄩ棬绠$悊淇℃伅 + * + * @param deptId 閮ㄩ棬ID + * @return 缁撴灉 + */ + public int deleteDeptById(Long deptId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..37ec349e5ec94de502d73683096090c3612cfc4e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java @@ -0,0 +1,96 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.common.core.domain.entity.SysDictData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 瀛楀吀琛 鏁版嵁灞 + * + * @author ruoyi + */ +public interface SysDictDataMapper +{ + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀鏁版嵁 + * + * @param dictData 瀛楀吀鏁版嵁淇℃伅 + * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅 + */ + public List selectDictDataList(SysDictData dictData); + + /** + * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁 + * + * @param dictType 瀛楀吀绫诲瀷 + * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅 + */ + public List selectDictDataByType(String dictType); + + /** + * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏搁敭鍊兼煡璇㈠瓧鍏告暟鎹俊鎭 + * + * @param dictType 瀛楀吀绫诲瀷 + * @param dictValue 瀛楀吀閿 + * @return 瀛楀吀鏍囩 + */ + public String selectDictLabel(@Param("dictType") String dictType, @Param("dictValue") String dictValue); + + /** + * 鏍规嵁瀛楀吀鏁版嵁ID鏌ヨ淇℃伅 + * + * @param dictCode 瀛楀吀鏁版嵁ID + * @return 瀛楀吀鏁版嵁 + */ + public SysDictData selectDictDataById(Long dictCode); + + /** + * 鏌ヨ瀛楀吀鏁版嵁 + * + * @param dictType 瀛楀吀绫诲瀷 + * @return 瀛楀吀鏁版嵁 + */ + public int countDictDataByType(String dictType); + + /** + * 閫氳繃瀛楀吀ID鍒犻櫎瀛楀吀鏁版嵁淇℃伅 + * + * @param dictCode 瀛楀吀鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteDictDataById(Long dictCode); + + /** + * 鎵归噺鍒犻櫎瀛楀吀鏁版嵁淇℃伅 + * + * @param dictCodes 闇瑕佸垹闄ょ殑瀛楀吀鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteDictDataByIds(Long[] dictCodes); + + /** + * 鏂板瀛楀吀鏁版嵁淇℃伅 + * + * @param dictData 瀛楀吀鏁版嵁淇℃伅 + * @return 缁撴灉 + */ + public int insertDictData(SysDictData dictData); + + /** + * 淇敼瀛楀吀鏁版嵁淇℃伅 + * + * @param dictData 瀛楀吀鏁版嵁淇℃伅 + * @return 缁撴灉 + */ + public int updateDictData(SysDictData dictData); + + /** + * 鍚屾淇敼瀛楀吀绫诲瀷 + * + * @param oldDictType 鏃у瓧鍏哥被鍨 + * @param newDictType 鏂版棫瀛楀吀绫诲瀷 + * @return 缁撴灉 + */ + public int updateDictDataType(@Param("oldDictType") String oldDictType, @Param("newDictType") String newDictType); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..cb654f11ec4053276c39302a3b493a6ac3e2bb5e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java @@ -0,0 +1,84 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.common.core.domain.entity.SysDictType; + +import java.util.List; + +/** + * 瀛楀吀琛 鏁版嵁灞 + * + * @author ruoyi + */ +public interface SysDictTypeMapper +{ + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀绫诲瀷 + * + * @param dictType 瀛楀吀绫诲瀷淇℃伅 + * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅 + */ + public List selectDictTypeList(SysDictType dictType); + + /** + * 鏍规嵁鎵鏈夊瓧鍏哥被鍨 + * + * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅 + */ + public List selectDictTypeAll(); + + /** + * 鏍规嵁瀛楀吀绫诲瀷ID鏌ヨ淇℃伅 + * + * @param dictId 瀛楀吀绫诲瀷ID + * @return 瀛楀吀绫诲瀷 + */ + public SysDictType selectDictTypeById(Long dictId); + + /** + * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ淇℃伅 + * + * @param dictType 瀛楀吀绫诲瀷 + * @return 瀛楀吀绫诲瀷 + */ + public SysDictType selectDictTypeByType(String dictType); + + /** + * 閫氳繃瀛楀吀ID鍒犻櫎瀛楀吀淇℃伅 + * + * @param dictId 瀛楀吀ID + * @return 缁撴灉 + */ + public int deleteDictTypeById(Long dictId); + + /** + * 鎵归噺鍒犻櫎瀛楀吀绫诲瀷淇℃伅 + * + * @param dictIds 闇瑕佸垹闄ょ殑瀛楀吀ID + * @return 缁撴灉 + */ + public int deleteDictTypeByIds(Long[] dictIds); + + /** + * 鏂板瀛楀吀绫诲瀷淇℃伅 + * + * @param dictType 瀛楀吀绫诲瀷淇℃伅 + * @return 缁撴灉 + */ + public int insertDictType(SysDictType dictType); + + /** + * 淇敼瀛楀吀绫诲瀷淇℃伅 + * + * @param dictType 瀛楀吀绫诲瀷淇℃伅 + * @return 缁撴灉 + */ + public int updateDictType(SysDictType dictType); + + /** + * 鏍¢獙瀛楀吀绫诲瀷绉版槸鍚﹀敮涓 + * + * @param dictType 瀛楀吀绫诲瀷 + * @return 缁撴灉 + */ + public SysDictType checkDictTypeUnique(String dictType); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..a90aa60c63c9e73ad6e804b6929d110df794ca28 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java @@ -0,0 +1,43 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.system.domain.SysLogininfor; + +import java.util.List; + +/** + * 绯荤粺璁块棶鏃ュ織鎯呭喌淇℃伅 鏁版嵁灞 + * + * @author ruoyi + */ +public interface SysLogininforMapper +{ + /** + * 鏂板绯荤粺鐧诲綍鏃ュ織 + * + * @param logininfor 璁块棶鏃ュ織瀵硅薄 + */ + public void insertLogininfor(SysLogininfor logininfor); + + /** + * 鏌ヨ绯荤粺鐧诲綍鏃ュ織闆嗗悎 + * + * @param logininfor 璁块棶鏃ュ織瀵硅薄 + * @return 鐧诲綍璁板綍闆嗗悎 + */ + public List selectLogininforList(SysLogininfor logininfor); + + /** + * 鎵归噺鍒犻櫎绯荤粺鐧诲綍鏃ュ織 + * + * @param infoIds 闇瑕佸垹闄ょ殑鐧诲綍鏃ュ織ID + * @return 缁撴灉 + */ + public int deleteLogininforByIds(Long[] infoIds); + + /** + * 娓呯┖绯荤粺鐧诲綍鏃ュ織 + * + * @return 缁撴灉 + */ + public int cleanLogininfor(); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..82305def0368619aee6b83677733eefc0b2337ad --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java @@ -0,0 +1,126 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.common.core.domain.entity.SysMenu; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 鑿滃崟琛 鏁版嵁灞 + * + * @author ruoyi + */ +public interface SysMenuMapper +{ + /** + * 鏌ヨ绯荤粺鑿滃崟鍒楄〃 + * + * @param menu 鑿滃崟淇℃伅 + * @return 鑿滃崟鍒楄〃 + */ + public List selectMenuList(SysMenu menu); + + /** + * 鏍规嵁鐢ㄦ埛鎵鏈夋潈闄 + * + * @return 鏉冮檺鍒楄〃 + */ + public List selectMenuPerms(); + + /** + * 鏍规嵁鐢ㄦ埛鏌ヨ绯荤粺鑿滃崟鍒楄〃 + * + * @param menu 鑿滃崟淇℃伅 + * @return 鑿滃崟鍒楄〃 + */ + public List selectMenuListByUserId(SysMenu menu); + + /** + * 鏍规嵁瑙掕壊ID鏌ヨ鏉冮檺 + * + * @param roleId 瑙掕壊ID + * @return 鏉冮檺鍒楄〃 + */ + public List selectMenuPermsByRoleId(Long roleId); + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ鏉冮檺 + * + * @param userId 鐢ㄦ埛ID + * @return 鏉冮檺鍒楄〃 + */ + public List selectMenuPermsByUserId(Long userId); + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ鑿滃崟 + * + * @return 鑿滃崟鍒楄〃 + */ + public List selectMenuTreeAll(); + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ鑿滃崟 + * + * @param userId 鐢ㄦ埛ID + * @return 鑿滃崟鍒楄〃 + */ + public List selectMenuTreeByUserId(Long userId); + + /** + * 鏍规嵁瑙掕壊ID鏌ヨ鑿滃崟鏍戜俊鎭 + * + * @param roleId 瑙掕壊ID + * @param menuCheckStrictly 鑿滃崟鏍戦夋嫨椤规槸鍚﹀叧鑱旀樉绀 + * @return 閫変腑鑿滃崟鍒楄〃 + */ + public List selectMenuListByRoleId(@Param("roleId") Long roleId, @Param("menuCheckStrictly") boolean menuCheckStrictly); + + /** + * 鏍规嵁鑿滃崟ID鏌ヨ淇℃伅 + * + * @param menuId 鑿滃崟ID + * @return 鑿滃崟淇℃伅 + */ + public SysMenu selectMenuById(Long menuId); + + /** + * 鏄惁瀛樺湪鑿滃崟瀛愯妭鐐 + * + * @param menuId 鑿滃崟ID + * @return 缁撴灉 + */ + public int hasChildByMenuId(Long menuId); + + /** + * 鏂板鑿滃崟淇℃伅 + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁撴灉 + */ + public int insertMenu(SysMenu menu); + + /** + * 淇敼鑿滃崟淇℃伅 + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁撴灉 + */ + public int updateMenu(SysMenu menu); + + /** + * 鍒犻櫎鑿滃崟绠$悊淇℃伅 + * + * @param menuId 鑿滃崟ID + * @return 缁撴灉 + */ + public int deleteMenuById(Long menuId); + + /** + * 鏍¢獙鑿滃崟鍚嶇О鏄惁鍞竴 + * + * @param menuName 鑿滃崟鍚嶇О + * @param parentId 鐖惰彍鍗旾D + * @return 缁撴灉 + */ + public SysMenu checkMenuNameUnique(@Param("menuName") String menuName, @Param("parentId") Long parentId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..ba0ea460fb5f7e17e8fa3c66711ade0bbbab76a8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java @@ -0,0 +1,61 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.system.domain.SysNotice; + +import java.util.List; + +/** + * 閫氱煡鍏憡琛 鏁版嵁灞 + * + * @author ruoyi + */ +public interface SysNoticeMapper +{ + /** + * 鏌ヨ鍏憡淇℃伅 + * + * @param noticeId 鍏憡ID + * @return 鍏憡淇℃伅 + */ + public SysNotice selectNoticeById(Long noticeId); + + /** + * 鏌ヨ鍏憡鍒楄〃 + * + * @param notice 鍏憡淇℃伅 + * @return 鍏憡闆嗗悎 + */ + public List selectNoticeList(SysNotice notice); + + /** + * 鏂板鍏憡 + * + * @param notice 鍏憡淇℃伅 + * @return 缁撴灉 + */ + public int insertNotice(SysNotice notice); + + /** + * 淇敼鍏憡 + * + * @param notice 鍏憡淇℃伅 + * @return 缁撴灉 + */ + public int updateNotice(SysNotice notice); + + /** + * 鎵归噺鍒犻櫎鍏憡 + * + * @param noticeId 鍏憡ID + * @return 缁撴灉 + */ + public int deleteNoticeById(Long noticeId); + + /** + * 鎵归噺鍒犻櫎鍏憡淇℃伅 + * + * @param noticeIds 闇瑕佸垹闄ょ殑鍏憡ID + * @return 缁撴灉 + */ + public int deleteNoticeByIds(Long[] noticeIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..08768e096386b576f6ba8aee9b6fa852b5f74ce9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java @@ -0,0 +1,49 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.system.domain.SysOperLog; + +import java.util.List; + +/** + * 鎿嶄綔鏃ュ織 鏁版嵁灞 + * + * @author ruoyi + */ +public interface SysOperLogMapper +{ + /** + * 鏂板鎿嶄綔鏃ュ織 + * + * @param operLog 鎿嶄綔鏃ュ織瀵硅薄 + */ + public void insertOperlog(SysOperLog operLog); + + /** + * 鏌ヨ绯荤粺鎿嶄綔鏃ュ織闆嗗悎 + * + * @param operLog 鎿嶄綔鏃ュ織瀵硅薄 + * @return 鎿嶄綔鏃ュ織闆嗗悎 + */ + public List selectOperLogList(SysOperLog operLog); + + /** + * 鎵归噺鍒犻櫎绯荤粺鎿嶄綔鏃ュ織 + * + * @param operIds 闇瑕佸垹闄ょ殑鎿嶄綔鏃ュ織ID + * @return 缁撴灉 + */ + public int deleteOperLogByIds(Long[] operIds); + + /** + * 鏌ヨ鎿嶄綔鏃ュ織璇︾粏 + * + * @param operId 鎿嶄綔ID + * @return 鎿嶄綔鏃ュ織瀵硅薄 + */ + public SysOperLog selectOperLogById(Long operId); + + /** + * 娓呯┖鎿嶄綔鏃ュ織 + */ + public void cleanOperLog(); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..568781d62dadb9195bced7b4b69d191df530296a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java @@ -0,0 +1,100 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.system.domain.SysPost; + +import java.util.List; + +/** + * 宀椾綅淇℃伅 鏁版嵁灞 + * + * @author ruoyi + */ +public interface SysPostMapper +{ + /** + * 鏌ヨ宀椾綅鏁版嵁闆嗗悎 + * + * @param post 宀椾綅淇℃伅 + * @return 宀椾綅鏁版嵁闆嗗悎 + */ + public List selectPostList(SysPost post); + + /** + * 鏌ヨ鎵鏈夊矖浣 + * + * @return 宀椾綅鍒楄〃 + */ + public List selectPostAll(); + + /** + * 閫氳繃宀椾綅ID鏌ヨ宀椾綅淇℃伅 + * + * @param postId 宀椾綅ID + * @return 瑙掕壊瀵硅薄淇℃伅 + */ + public SysPost selectPostById(Long postId); + + /** + * 鏍规嵁鐢ㄦ埛ID鑾峰彇宀椾綅閫夋嫨妗嗗垪琛 + * + * @param userId 鐢ㄦ埛ID + * @return 閫変腑宀椾綅ID鍒楄〃 + */ + public List selectPostListByUserId(Long userId); + + /** + * 鏌ヨ鐢ㄦ埛鎵灞炲矖浣嶇粍 + * + * @param userName 鐢ㄦ埛鍚 + * @return 缁撴灉 + */ + public List selectPostsByUserName(String userName); + + /** + * 鍒犻櫎宀椾綅淇℃伅 + * + * @param postId 宀椾綅ID + * @return 缁撴灉 + */ + public int deletePostById(Long postId); + + /** + * 鎵归噺鍒犻櫎宀椾綅淇℃伅 + * + * @param postIds 闇瑕佸垹闄ょ殑宀椾綅ID + * @return 缁撴灉 + */ + public int deletePostByIds(Long[] postIds); + + /** + * 淇敼宀椾綅淇℃伅 + * + * @param post 宀椾綅淇℃伅 + * @return 缁撴灉 + */ + public int updatePost(SysPost post); + + /** + * 鏂板宀椾綅淇℃伅 + * + * @param post 宀椾綅淇℃伅 + * @return 缁撴灉 + */ + public int insertPost(SysPost post); + + /** + * 鏍¢獙宀椾綅鍚嶇О + * + * @param postName 宀椾綅鍚嶇О + * @return 缁撴灉 + */ + public SysPost checkPostNameUnique(String postName); + + /** + * 鏍¢獙宀椾綅缂栫爜 + * + * @param postCode 宀椾綅缂栫爜 + * @return 缁撴灉 + */ + public SysPost checkPostCodeUnique(String postCode); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..97625c92cbaba10fb6906659ff9c7ee2b6c68d5a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java @@ -0,0 +1,45 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.system.domain.SysRoleDept; + +import java.util.List; + +/** + * 瑙掕壊涓庨儴闂ㄥ叧鑱旇〃 鏁版嵁灞 + * + * @author ruoyi + */ +public interface SysRoleDeptMapper +{ + /** + * 閫氳繃瑙掕壊ID鍒犻櫎瑙掕壊鍜岄儴闂ㄥ叧鑱 + * + * @param roleId 瑙掕壊ID + * @return 缁撴灉 + */ + public int deleteRoleDeptByRoleId(Long roleId); + + /** + * 鎵归噺鍒犻櫎瑙掕壊閮ㄩ棬鍏宠仈淇℃伅 + * + * @param ids 闇瑕佸垹闄ょ殑鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteRoleDept(Long[] ids); + + /** + * 鏌ヨ閮ㄩ棬浣跨敤鏁伴噺 + * + * @param deptId 閮ㄩ棬ID + * @return 缁撴灉 + */ + public int selectCountRoleDeptByDeptId(Long deptId); + + /** + * 鎵归噺鏂板瑙掕壊閮ㄩ棬淇℃伅 + * + * @param roleDeptList 瑙掕壊閮ㄩ棬鍒楄〃 + * @return 缁撴灉 + */ + public int batchRoleDept(List roleDeptList); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..4eefd8f32b1fae7ee4b8e588281f0dba47915c9a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java @@ -0,0 +1,116 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.common.core.domain.entity.SysRole; + +import java.util.List; + +/** + * 瑙掕壊琛 鏁版嵁灞 + * + * @author ruoyi + */ +public interface SysRoleMapper +{ + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瑙掕壊鏁版嵁 + * + * @param role 瑙掕壊淇℃伅 + * @return 瑙掕壊鏁版嵁闆嗗悎淇℃伅 + */ + public List selectRoleList(SysRole role); + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ瑙掕壊 + * + * @param userId 鐢ㄦ埛ID + * @return 瑙掕壊鍒楄〃 + */ + public List selectRolePermissionByUserId(Long userId); + + /** + * 鏌ヨ鎵鏈夎鑹 + * + * @return 瑙掕壊鍒楄〃 + */ + public List selectRoleAll(); + + /** + * 鏍规嵁鐢ㄦ埛ID鑾峰彇瑙掕壊閫夋嫨妗嗗垪琛 + * + * @param userId 鐢ㄦ埛ID + * @return 閫変腑瑙掕壊ID鍒楄〃 + */ + public List selectRoleListByUserId(Long userId); + + /** + * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊 + * + * @param roleId 瑙掕壊ID + * @return 瑙掕壊瀵硅薄淇℃伅 + */ + public SysRole selectRoleById(Long roleId); + + /** + * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊 + * + * @param roleIds 瑙掕壊ID + * @return 瑙掕壊瀵硅薄淇℃伅 + */ + public List selectRoleByIds(Long[] roleIds); + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ瑙掕壊 + * + * @param userName 鐢ㄦ埛鍚 + * @return 瑙掕壊鍒楄〃 + */ + public List selectRolesByUserName(String userName); + + /** + * 鏍¢獙瑙掕壊鍚嶇О鏄惁鍞竴 + * + * @param roleName 瑙掕壊鍚嶇О + * @return 瑙掕壊淇℃伅 + */ + public SysRole checkRoleNameUnique(String roleName); + + /** + * 鏍¢獙瑙掕壊鏉冮檺鏄惁鍞竴 + * + * @param roleKey 瑙掕壊鏉冮檺 + * @return 瑙掕壊淇℃伅 + */ + public SysRole checkRoleKeyUnique(String roleKey); + + /** + * 淇敼瑙掕壊淇℃伅 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + public int updateRole(SysRole role); + + /** + * 鏂板瑙掕壊淇℃伅 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + public int insertRole(SysRole role); + + /** + * 閫氳繃瑙掕壊ID鍒犻櫎瑙掕壊 + * + * @param roleId 瑙掕壊ID + * @return 缁撴灉 + */ + public int deleteRoleById(Long roleId); + + /** + * 鎵归噺鍒犻櫎瑙掕壊淇℃伅 + * + * @param roleIds 闇瑕佸垹闄ょ殑瑙掕壊ID + * @return 缁撴灉 + */ + public int deleteRoleByIds(Long[] roleIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..9c666705b624e1985b6cd1095f1195581f030b4f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java @@ -0,0 +1,45 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.system.domain.SysRoleMenu; + +import java.util.List; + +/** + * 瑙掕壊涓庤彍鍗曞叧鑱旇〃 鏁版嵁灞 + * + * @author ruoyi + */ +public interface SysRoleMenuMapper +{ + /** + * 鏌ヨ鑿滃崟浣跨敤鏁伴噺 + * + * @param menuId 鑿滃崟ID + * @return 缁撴灉 + */ + public int checkMenuExistRole(Long menuId); + + /** + * 閫氳繃瑙掕壊ID鍒犻櫎瑙掕壊鍜岃彍鍗曞叧鑱 + * + * @param roleId 瑙掕壊ID + * @return 缁撴灉 + */ + public int deleteRoleMenuByRoleId(Long roleId); + + /** + * 鎵归噺鍒犻櫎瑙掕壊鑿滃崟鍏宠仈淇℃伅 + * + * @param ids 闇瑕佸垹闄ょ殑鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteRoleMenu(Long[] ids); + + /** + * 鎵归噺鏂板瑙掕壊鑿滃崟淇℃伅 + * + * @param roleMenuList 瑙掕壊鑿滃崟鍒楄〃 + * @return 缁撴灉 + */ + public int batchRoleMenu(List roleMenuList); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..d9e49b360c2b582864b238eb367a945ffaa2c87d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java @@ -0,0 +1,128 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 鐢ㄦ埛琛 鏁版嵁灞 + * + * @author ruoyi + */ +public interface SysUserMapper +{ + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鐢ㄦ埛鍒楄〃 + * + * @param sysUser 鐢ㄦ埛淇℃伅 + * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅 + */ + public List selectUserList(SysUser sysUser); + + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ宸查厤鐢ㄦ埛瑙掕壊鍒楄〃 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅 + */ + public List selectAllocatedList(SysUser user); + + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鏈垎閰嶇敤鎴疯鑹插垪琛 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅 + */ + public List selectUnallocatedList(SysUser user); + + /** + * 閫氳繃鐢ㄦ埛鍚嶆煡璇㈢敤鎴 + * + * @param userName 鐢ㄦ埛鍚 + * @return 鐢ㄦ埛瀵硅薄淇℃伅 + */ + public SysUser selectUserByUserName(String userName); + + /** + * 閫氳繃鐢ㄦ埛ID鏌ヨ鐢ㄦ埛 + * + * @param userId 鐢ㄦ埛ID + * @return 鐢ㄦ埛瀵硅薄淇℃伅 + */ + public SysUser selectUserById(Long userId); + + /** + * 鏂板鐢ㄦ埛淇℃伅 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + public int insertUser(SysUser user); + + /** + * 淇敼鐢ㄦ埛淇℃伅 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + public int updateUser(SysUser user); + + /** + * 淇敼鐢ㄦ埛澶村儚 + * + * @param userName 鐢ㄦ埛鍚 + * @param avatar 澶村儚鍦板潃 + * @return 缁撴灉 + */ + public int updateUserAvatar(@Param("userName") String userName, @Param("avatar") String avatar); + + /** + * 閲嶇疆鐢ㄦ埛瀵嗙爜 + * + * @param userName 鐢ㄦ埛鍚 + * @param password 瀵嗙爜 + * @return 缁撴灉 + */ + public int resetUserPwd(@Param("userName") String userName, @Param("password") String password); + + /** + * 閫氳繃鐢ㄦ埛ID鍒犻櫎鐢ㄦ埛 + * + * @param userId 鐢ㄦ埛ID + * @return 缁撴灉 + */ + public int deleteUserById(Long userId); + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛淇℃伅 + * + * @param userIds 闇瑕佸垹闄ょ殑鐢ㄦ埛ID + * @return 缁撴灉 + */ + public int deleteUserByIds(Long[] userIds); + + /** + * 鏍¢獙鐢ㄦ埛鍚嶇О鏄惁鍞竴 + * + * @param userName 鐢ㄦ埛鍚嶇О + * @return 缁撴灉 + */ + public SysUser checkUserNameUnique(String userName); + + /** + * 鏍¢獙鎵嬫満鍙风爜鏄惁鍞竴 + * + * @param phonenumber 鎵嬫満鍙风爜 + * @return 缁撴灉 + */ + public SysUser checkPhoneUnique(String phonenumber); + + /** + * 鏍¢獙email鏄惁鍞竴 + * + * @param email 鐢ㄦ埛閭 + * @return 缁撴灉 + */ + public SysUser checkEmailUnique(String email); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..3a55f15a066224a048ba5ab2699de06a194f7837 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java @@ -0,0 +1,45 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.system.domain.SysUserPost; + +import java.util.List; + +/** + * 鐢ㄦ埛涓庡矖浣嶅叧鑱旇〃 鏁版嵁灞 + * + * @author ruoyi + */ +public interface SysUserPostMapper +{ + /** + * 閫氳繃鐢ㄦ埛ID鍒犻櫎鐢ㄦ埛鍜屽矖浣嶅叧鑱 + * + * @param userId 鐢ㄦ埛ID + * @return 缁撴灉 + */ + public int deleteUserPostByUserId(Long userId); + + /** + * 閫氳繃宀椾綅ID鏌ヨ宀椾綅浣跨敤鏁伴噺 + * + * @param postId 宀椾綅ID + * @return 缁撴灉 + */ + public int countUserPostById(Long postId); + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛鍜屽矖浣嶅叧鑱 + * + * @param ids 闇瑕佸垹闄ょ殑鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteUserPost(Long[] ids); + + /** + * 鎵归噺鏂板鐢ㄦ埛宀椾綅淇℃伅 + * + * @param userPostList 鐢ㄦ埛宀椾綅鍒楄〃 + * @return 缁撴灉 + */ + public int batchUserPost(List userPostList); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..cb795728b426c683725fa563a05804bf3293c965 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java @@ -0,0 +1,63 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.system.domain.SysUserRole; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 鐢ㄦ埛涓庤鑹插叧鑱旇〃 鏁版嵁灞 + * + * @author ruoyi + */ +public interface SysUserRoleMapper +{ + /** + * 閫氳繃鐢ㄦ埛ID鍒犻櫎鐢ㄦ埛鍜岃鑹插叧鑱 + * + * @param userId 鐢ㄦ埛ID + * @return 缁撴灉 + */ + public int deleteUserRoleByUserId(Long userId); + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛鍜岃鑹插叧鑱 + * + * @param ids 闇瑕佸垹闄ょ殑鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteUserRole(Long[] ids); + + /** + * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊浣跨敤鏁伴噺 + * + * @param roleId 瑙掕壊ID + * @return 缁撴灉 + */ + public int countUserRoleByRoleId(Long roleId); + + /** + * 鎵归噺鏂板鐢ㄦ埛瑙掕壊淇℃伅 + * + * @param userRoleList 鐢ㄦ埛瑙掕壊鍒楄〃 + * @return 缁撴灉 + */ + public int batchUserRole(List userRoleList); + + /** + * 鍒犻櫎鐢ㄦ埛鍜岃鑹插叧鑱斾俊鎭 + * + * @param userRole 鐢ㄦ埛鍜岃鑹插叧鑱斾俊鎭 + * @return 缁撴灉 + */ + public int deleteUserRoleInfo(SysUserRole userRole); + + /** + * 鎵归噺鍙栨秷鎺堟潈鐢ㄦ埛瑙掕壊 + * + * @param roleId 瑙掕壊ID + * @param userIds 闇瑕佸垹闄ょ殑鐢ㄦ埛鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteUserRoleInfos(@Param("roleId") Long roleId, @Param("userIds") Long[] userIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java new file mode 100644 index 0000000000000000000000000000000000000000..a31de82bca33e9fa38aa2ef4b77cfab0ce5b941b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java @@ -0,0 +1,90 @@ +package com.ruoyi.system.service; + +import com.ruoyi.system.domain.SysConfig; + +import java.util.List; + +/** + * 鍙傛暟閰嶇疆 鏈嶅姟灞 + * + * @author ruoyi + */ +public interface ISysConfigService +{ + /** + * 鏌ヨ鍙傛暟閰嶇疆淇℃伅 + * + * @param configId 鍙傛暟閰嶇疆ID + * @return 鍙傛暟閰嶇疆淇℃伅 + */ + public SysConfig selectConfigById(Long configId); + + /** + * 鏍规嵁閿悕鏌ヨ鍙傛暟閰嶇疆淇℃伅 + * + * @param configKey 鍙傛暟閿悕 + * @return 鍙傛暟閿 + */ + public String selectConfigByKey(String configKey); + + /** + * 鑾峰彇楠岃瘉鐮佸紑鍏 + * + * @return true寮鍚紝false鍏抽棴 + */ + public boolean selectCaptchaEnabled(); + + /** + * 鏌ヨ鍙傛暟閰嶇疆鍒楄〃 + * + * @param config 鍙傛暟閰嶇疆淇℃伅 + * @return 鍙傛暟閰嶇疆闆嗗悎 + */ + public List selectConfigList(SysConfig config); + + /** + * 鏂板鍙傛暟閰嶇疆 + * + * @param config 鍙傛暟閰嶇疆淇℃伅 + * @return 缁撴灉 + */ + public int insertConfig(SysConfig config); + + /** + * 淇敼鍙傛暟閰嶇疆 + * + * @param config 鍙傛暟閰嶇疆淇℃伅 + * @return 缁撴灉 + */ + public int updateConfig(SysConfig config); + + /** + * 鎵归噺鍒犻櫎鍙傛暟淇℃伅 + * + * @param configIds 闇瑕佸垹闄ょ殑鍙傛暟ID + */ + public void deleteConfigByIds(Long[] configIds); + + /** + * 鍔犺浇鍙傛暟缂撳瓨鏁版嵁 + */ + public void loadingConfigCache(); + + /** + * 娓呯┖鍙傛暟缂撳瓨鏁版嵁 + */ + public void clearConfigCache(); + + /** + * 閲嶇疆鍙傛暟缂撳瓨鏁版嵁 + */ + public void resetConfigCache(); + + /** + * 鏍¢獙鍙傛暟閿悕鏄惁鍞竴 + * + * @param config 鍙傛暟淇℃伅 + * @return 缁撴灉 + */ + public boolean checkConfigKeyUnique(SysConfig config); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java new file mode 100644 index 0000000000000000000000000000000000000000..a106af879fd95da5e11aeacda476fe9241e1bfef --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java @@ -0,0 +1,125 @@ +package com.ruoyi.system.service; + +import com.ruoyi.common.core.domain.TreeSelect; +import com.ruoyi.common.core.domain.entity.SysDept; + +import java.util.List; + +/** + * 閮ㄩ棬绠$悊 鏈嶅姟灞 + * + * @author ruoyi + */ +public interface ISysDeptService +{ + /** + * 鏌ヨ閮ㄩ棬绠$悊鏁版嵁 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 閮ㄩ棬淇℃伅闆嗗悎 + */ + public List selectDeptList(SysDept dept); + + /** + * 鏌ヨ閮ㄩ棬鏍戠粨鏋勪俊鎭 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 閮ㄩ棬鏍戜俊鎭泦鍚 + */ + public List selectDeptTreeList(SysDept dept); + + /** + * 鏋勫缓鍓嶇鎵闇瑕佹爲缁撴瀯 + * + * @param depts 閮ㄩ棬鍒楄〃 + * @return 鏍戠粨鏋勫垪琛 + */ + public List buildDeptTree(List depts); + + /** + * 鏋勫缓鍓嶇鎵闇瑕佷笅鎷夋爲缁撴瀯 + * + * @param depts 閮ㄩ棬鍒楄〃 + * @return 涓嬫媺鏍戠粨鏋勫垪琛 + */ + public List buildDeptTreeSelect(List depts); + + /** + * 鏍规嵁瑙掕壊ID鏌ヨ閮ㄩ棬鏍戜俊鎭 + * + * @param roleId 瑙掕壊ID + * @return 閫変腑閮ㄩ棬鍒楄〃 + */ + public List selectDeptListByRoleId(Long roleId); + + /** + * 鏍规嵁閮ㄩ棬ID鏌ヨ淇℃伅 + * + * @param deptId 閮ㄩ棬ID + * @return 閮ㄩ棬淇℃伅 + */ + public SysDept selectDeptById(Long deptId); + + /** + * 鏍规嵁ID鏌ヨ鎵鏈夊瓙閮ㄩ棬锛堟甯哥姸鎬侊級 + * + * @param deptId 閮ㄩ棬ID + * @return 瀛愰儴闂ㄦ暟 + */ + public int selectNormalChildrenDeptById(Long deptId); + + /** + * 鏄惁瀛樺湪閮ㄩ棬瀛愯妭鐐 + * + * @param deptId 閮ㄩ棬ID + * @return 缁撴灉 + */ + public boolean hasChildByDeptId(Long deptId); + + /** + * 鏌ヨ閮ㄩ棬鏄惁瀛樺湪鐢ㄦ埛 + * + * @param deptId 閮ㄩ棬ID + * @return 缁撴灉 true 瀛樺湪 false 涓嶅瓨鍦 + */ + public boolean checkDeptExistUser(Long deptId); + + /** + * 鏍¢獙閮ㄩ棬鍚嶇О鏄惁鍞竴 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 缁撴灉 + */ + public boolean checkDeptNameUnique(SysDept dept); + + /** + * 鏍¢獙閮ㄩ棬鏄惁鏈夋暟鎹潈闄 + * + * @param deptId 閮ㄩ棬id + */ + public void checkDeptDataScope(Long deptId); + + /** + * 鏂板淇濆瓨閮ㄩ棬淇℃伅 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 缁撴灉 + */ + public int insertDept(SysDept dept); + + /** + * 淇敼淇濆瓨閮ㄩ棬淇℃伅 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 缁撴灉 + */ + public int updateDept(SysDept dept); + + /** + * 鍒犻櫎閮ㄩ棬绠$悊淇℃伅 + * + * @param deptId 閮ㄩ棬ID + * @return 缁撴灉 + */ + public int deleteDeptById(Long deptId); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java new file mode 100644 index 0000000000000000000000000000000000000000..84466361993e09684b418e79e09181d1f3c19de8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java @@ -0,0 +1,71 @@ +package com.ruoyi.system.service; + +import com.ruoyi.common.core.domain.entity.SysDictData; +import com.ruoyi.hezhi.domain.vo.DictParamVO; + +import java.util.List; + +/** + * 瀛楀吀 涓氬姟灞 + * + * @author ruoyi + */ +public interface ISysDictDataService +{ + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀鏁版嵁 + * + * @param dictData 瀛楀吀鏁版嵁淇℃伅 + * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅 + */ + public List selectDictDataList(SysDictData dictData); + + /** + * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏搁敭鍊兼煡璇㈠瓧鍏告暟鎹俊鎭 + * + * @param dictType 瀛楀吀绫诲瀷 + * @param dictValue 瀛楀吀閿 + * @return 瀛楀吀鏍囩 + */ + public String selectDictLabel(String dictType, String dictValue); + + /** + * 鏍规嵁瀛楀吀鏁版嵁ID鏌ヨ淇℃伅 + * + * @param dictCode 瀛楀吀鏁版嵁ID + * @return 瀛楀吀鏁版嵁 + */ + public SysDictData selectDictDataById(Long dictCode); + + /** + * 鎵归噺鍒犻櫎瀛楀吀鏁版嵁淇℃伅 + * + * @param dictCodes 闇瑕佸垹闄ょ殑瀛楀吀鏁版嵁ID + */ + public void deleteDictDataByIds(Long[] dictCodes); + + /** + * 鏂板淇濆瓨瀛楀吀鏁版嵁淇℃伅 + * + * @param dictData 瀛楀吀鏁版嵁淇℃伅 + * @return 缁撴灉 + */ + public int insertDictData(SysDictData dictData); + + /** + * 淇敼淇濆瓨瀛楀吀鏁版嵁淇℃伅 + * + * @param dictData 瀛楀吀鏁版嵁淇℃伅 + * @return 缁撴灉 + */ + public int updateDictData(SysDictData dictData); + + /** + * 鑾峰彇瀛楀吀鍙傛暟鍒楄〃 + * + * @param paramType 鍙傛暟绫诲瀷 + * @return 缁撴灉 + */ + public List getDictParamList(String paramType); + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java new file mode 100644 index 0000000000000000000000000000000000000000..a1b9af324ddbe7561e89024e905e03aab8bfc99d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java @@ -0,0 +1,99 @@ +package com.ruoyi.system.service; + +import com.ruoyi.common.core.domain.entity.SysDictData; +import com.ruoyi.common.core.domain.entity.SysDictType; + +import java.util.List; + +/** + * 瀛楀吀 涓氬姟灞 + * + * @author ruoyi + */ +public interface ISysDictTypeService +{ + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀绫诲瀷 + * + * @param dictType 瀛楀吀绫诲瀷淇℃伅 + * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅 + */ + public List selectDictTypeList(SysDictType dictType); + + /** + * 鏍规嵁鎵鏈夊瓧鍏哥被鍨 + * + * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅 + */ + public List selectDictTypeAll(); + + /** + * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁 + * + * @param dictType 瀛楀吀绫诲瀷 + * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅 + */ + public List selectDictDataByType(String dictType); + + /** + * 鏍规嵁瀛楀吀绫诲瀷ID鏌ヨ淇℃伅 + * + * @param dictId 瀛楀吀绫诲瀷ID + * @return 瀛楀吀绫诲瀷 + */ + public SysDictType selectDictTypeById(Long dictId); + + /** + * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ淇℃伅 + * + * @param dictType 瀛楀吀绫诲瀷 + * @return 瀛楀吀绫诲瀷 + */ + public SysDictType selectDictTypeByType(String dictType); + + /** + * 鎵归噺鍒犻櫎瀛楀吀淇℃伅 + * + * @param dictIds 闇瑕佸垹闄ょ殑瀛楀吀ID + */ + public void deleteDictTypeByIds(Long[] dictIds); + + /** + * 鍔犺浇瀛楀吀缂撳瓨鏁版嵁 + */ + public void loadingDictCache(); + + /** + * 娓呯┖瀛楀吀缂撳瓨鏁版嵁 + */ + public void clearDictCache(); + + /** + * 閲嶇疆瀛楀吀缂撳瓨鏁版嵁 + */ + public void resetDictCache(); + + /** + * 鏂板淇濆瓨瀛楀吀绫诲瀷淇℃伅 + * + * @param dictType 瀛楀吀绫诲瀷淇℃伅 + * @return 缁撴灉 + */ + public int insertDictType(SysDictType dictType); + + /** + * 淇敼淇濆瓨瀛楀吀绫诲瀷淇℃伅 + * + * @param dictType 瀛楀吀绫诲瀷淇℃伅 + * @return 缁撴灉 + */ + public int updateDictType(SysDictType dictType); + + /** + * 鏍¢獙瀛楀吀绫诲瀷绉版槸鍚﹀敮涓 + * + * @param dictType 瀛楀吀绫诲瀷 + * @return 缁撴灉 + */ + public boolean checkDictTypeUnique(SysDictType dictType); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java new file mode 100644 index 0000000000000000000000000000000000000000..6fa3f0680c162565a1bd07252afcc46830323d16 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java @@ -0,0 +1,41 @@ +package com.ruoyi.system.service; + +import com.ruoyi.system.domain.SysLogininfor; + +import java.util.List; + +/** + * 绯荤粺璁块棶鏃ュ織鎯呭喌淇℃伅 鏈嶅姟灞 + * + * @author ruoyi + */ +public interface ISysLogininforService +{ + /** + * 鏂板绯荤粺鐧诲綍鏃ュ織 + * + * @param logininfor 璁块棶鏃ュ織瀵硅薄 + */ + public void insertLogininfor(SysLogininfor logininfor); + + /** + * 鏌ヨ绯荤粺鐧诲綍鏃ュ織闆嗗悎 + * + * @param logininfor 璁块棶鏃ュ織瀵硅薄 + * @return 鐧诲綍璁板綍闆嗗悎 + */ + public List selectLogininforList(SysLogininfor logininfor); + + /** + * 鎵归噺鍒犻櫎绯荤粺鐧诲綍鏃ュ織 + * + * @param infoIds 闇瑕佸垹闄ょ殑鐧诲綍鏃ュ織ID + * @return 缁撴灉 + */ + public int deleteLogininforByIds(Long[] infoIds); + + /** + * 娓呯┖绯荤粺鐧诲綍鏃ュ織 + */ + public void cleanLogininfor(); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java new file mode 100644 index 0000000000000000000000000000000000000000..b7e38be093358aabc26235a191baf605ac33768d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java @@ -0,0 +1,145 @@ +package com.ruoyi.system.service; + +import com.ruoyi.common.core.domain.TreeSelect; +import com.ruoyi.common.core.domain.entity.SysMenu; +import com.ruoyi.system.domain.vo.RouterVo; + +import java.util.List; +import java.util.Set; + +/** + * 鑿滃崟 涓氬姟灞 + * + * @author ruoyi + */ +public interface ISysMenuService +{ + /** + * 鏍规嵁鐢ㄦ埛鏌ヨ绯荤粺鑿滃崟鍒楄〃 + * + * @param userId 鐢ㄦ埛ID + * @return 鑿滃崟鍒楄〃 + */ + public List selectMenuList(Long userId); + + /** + * 鏍规嵁鐢ㄦ埛鏌ヨ绯荤粺鑿滃崟鍒楄〃 + * + * @param menu 鑿滃崟淇℃伅 + * @param userId 鐢ㄦ埛ID + * @return 鑿滃崟鍒楄〃 + */ + public List selectMenuList(SysMenu menu, Long userId); + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ鏉冮檺 + * + * @param userId 鐢ㄦ埛ID + * @return 鏉冮檺鍒楄〃 + */ + public Set selectMenuPermsByUserId(Long userId); + + /** + * 鏍规嵁瑙掕壊ID鏌ヨ鏉冮檺 + * + * @param roleId 瑙掕壊ID + * @return 鏉冮檺鍒楄〃 + */ + public Set selectMenuPermsByRoleId(Long roleId); + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ鑿滃崟鏍戜俊鎭 + * + * @param userId 鐢ㄦ埛ID + * @return 鑿滃崟鍒楄〃 + */ + public List selectMenuTreeByUserId(Long userId); + + /** + * 鏍规嵁瑙掕壊ID鏌ヨ鑿滃崟鏍戜俊鎭 + * + * @param roleId 瑙掕壊ID + * @return 閫変腑鑿滃崟鍒楄〃 + */ + public List selectMenuListByRoleId(Long roleId); + + /** + * 鏋勫缓鍓嶇璺敱鎵闇瑕佺殑鑿滃崟 + * + * @param menus 鑿滃崟鍒楄〃 + * @return 璺敱鍒楄〃 + */ + public List buildMenus(List menus); + + /** + * 鏋勫缓鍓嶇鎵闇瑕佹爲缁撴瀯 + * + * @param menus 鑿滃崟鍒楄〃 + * @return 鏍戠粨鏋勫垪琛 + */ + public List buildMenuTree(List menus); + + /** + * 鏋勫缓鍓嶇鎵闇瑕佷笅鎷夋爲缁撴瀯 + * + * @param menus 鑿滃崟鍒楄〃 + * @return 涓嬫媺鏍戠粨鏋勫垪琛 + */ + public List buildMenuTreeSelect(List menus); + + /** + * 鏍规嵁鑿滃崟ID鏌ヨ淇℃伅 + * + * @param menuId 鑿滃崟ID + * @return 鑿滃崟淇℃伅 + */ + public SysMenu selectMenuById(Long menuId); + + /** + * 鏄惁瀛樺湪鑿滃崟瀛愯妭鐐 + * + * @param menuId 鑿滃崟ID + * @return 缁撴灉 true 瀛樺湪 false 涓嶅瓨鍦 + */ + public boolean hasChildByMenuId(Long menuId); + + /** + * 鏌ヨ鑿滃崟鏄惁瀛樺湪瑙掕壊 + * + * @param menuId 鑿滃崟ID + * @return 缁撴灉 true 瀛樺湪 false 涓嶅瓨鍦 + */ + public boolean checkMenuExistRole(Long menuId); + + /** + * 鏂板淇濆瓨鑿滃崟淇℃伅 + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁撴灉 + */ + public int insertMenu(SysMenu menu); + + /** + * 淇敼淇濆瓨鑿滃崟淇℃伅 + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁撴灉 + */ + public int updateMenu(SysMenu menu); + + /** + * 鍒犻櫎鑿滃崟绠$悊淇℃伅 + * + * @param menuId 鑿滃崟ID + * @return 缁撴灉 + */ + public int deleteMenuById(Long menuId); + + /** + * 鏍¢獙鑿滃崟鍚嶇О鏄惁鍞竴 + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁撴灉 + */ + public boolean checkMenuNameUnique(SysMenu menu); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java new file mode 100644 index 0000000000000000000000000000000000000000..27bac2391192af4f495e9c9bb0fdedcc73fc52d6 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java @@ -0,0 +1,61 @@ +package com.ruoyi.system.service; + +import com.ruoyi.system.domain.SysNotice; + +import java.util.List; + +/** + * 鍏憡 鏈嶅姟灞 + * + * @author ruoyi + */ +public interface ISysNoticeService +{ + /** + * 鏌ヨ鍏憡淇℃伅 + * + * @param noticeId 鍏憡ID + * @return 鍏憡淇℃伅 + */ + public SysNotice selectNoticeById(Long noticeId); + + /** + * 鏌ヨ鍏憡鍒楄〃 + * + * @param notice 鍏憡淇℃伅 + * @return 鍏憡闆嗗悎 + */ + public List selectNoticeList(SysNotice notice); + + /** + * 鏂板鍏憡 + * + * @param notice 鍏憡淇℃伅 + * @return 缁撴灉 + */ + public int insertNotice(SysNotice notice); + + /** + * 淇敼鍏憡 + * + * @param notice 鍏憡淇℃伅 + * @return 缁撴灉 + */ + public int updateNotice(SysNotice notice); + + /** + * 鍒犻櫎鍏憡淇℃伅 + * + * @param noticeId 鍏憡ID + * @return 缁撴灉 + */ + public int deleteNoticeById(Long noticeId); + + /** + * 鎵归噺鍒犻櫎鍏憡淇℃伅 + * + * @param noticeIds 闇瑕佸垹闄ょ殑鍏憡ID + * @return 缁撴灉 + */ + public int deleteNoticeByIds(Long[] noticeIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java new file mode 100644 index 0000000000000000000000000000000000000000..6f7b11351381071718d281a19abc04cac1ee5eb9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java @@ -0,0 +1,49 @@ +package com.ruoyi.system.service; + +import com.ruoyi.system.domain.SysOperLog; + +import java.util.List; + +/** + * 鎿嶄綔鏃ュ織 鏈嶅姟灞 + * + * @author ruoyi + */ +public interface ISysOperLogService +{ + /** + * 鏂板鎿嶄綔鏃ュ織 + * + * @param operLog 鎿嶄綔鏃ュ織瀵硅薄 + */ + public void insertOperlog(SysOperLog operLog); + + /** + * 鏌ヨ绯荤粺鎿嶄綔鏃ュ織闆嗗悎 + * + * @param operLog 鎿嶄綔鏃ュ織瀵硅薄 + * @return 鎿嶄綔鏃ュ織闆嗗悎 + */ + public List selectOperLogList(SysOperLog operLog); + + /** + * 鎵归噺鍒犻櫎绯荤粺鎿嶄綔鏃ュ織 + * + * @param operIds 闇瑕佸垹闄ょ殑鎿嶄綔鏃ュ織ID + * @return 缁撴灉 + */ + public int deleteOperLogByIds(Long[] operIds); + + /** + * 鏌ヨ鎿嶄綔鏃ュ織璇︾粏 + * + * @param operId 鎿嶄綔ID + * @return 鎿嶄綔鏃ュ織瀵硅薄 + */ + public SysOperLog selectOperLogById(Long operId); + + /** + * 娓呯┖鎿嶄綔鏃ュ織 + */ + public void cleanOperLog(); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java new file mode 100644 index 0000000000000000000000000000000000000000..4f7c092a7ad77f01cf2783f9a281b79324291884 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java @@ -0,0 +1,100 @@ +package com.ruoyi.system.service; + +import com.ruoyi.system.domain.SysPost; + +import java.util.List; + +/** + * 宀椾綅淇℃伅 鏈嶅姟灞 + * + * @author ruoyi + */ +public interface ISysPostService +{ + /** + * 鏌ヨ宀椾綅淇℃伅闆嗗悎 + * + * @param post 宀椾綅淇℃伅 + * @return 宀椾綅鍒楄〃 + */ + public List selectPostList(SysPost post); + + /** + * 鏌ヨ鎵鏈夊矖浣 + * + * @return 宀椾綅鍒楄〃 + */ + public List selectPostAll(); + + /** + * 閫氳繃宀椾綅ID鏌ヨ宀椾綅淇℃伅 + * + * @param postId 宀椾綅ID + * @return 瑙掕壊瀵硅薄淇℃伅 + */ + public SysPost selectPostById(Long postId); + + /** + * 鏍规嵁鐢ㄦ埛ID鑾峰彇宀椾綅閫夋嫨妗嗗垪琛 + * + * @param userId 鐢ㄦ埛ID + * @return 閫変腑宀椾綅ID鍒楄〃 + */ + public List selectPostListByUserId(Long userId); + + /** + * 鏍¢獙宀椾綅鍚嶇О + * + * @param post 宀椾綅淇℃伅 + * @return 缁撴灉 + */ + public boolean checkPostNameUnique(SysPost post); + + /** + * 鏍¢獙宀椾綅缂栫爜 + * + * @param post 宀椾綅淇℃伅 + * @return 缁撴灉 + */ + public boolean checkPostCodeUnique(SysPost post); + + /** + * 閫氳繃宀椾綅ID鏌ヨ宀椾綅浣跨敤鏁伴噺 + * + * @param postId 宀椾綅ID + * @return 缁撴灉 + */ + public int countUserPostById(Long postId); + + /** + * 鍒犻櫎宀椾綅淇℃伅 + * + * @param postId 宀椾綅ID + * @return 缁撴灉 + */ + public int deletePostById(Long postId); + + /** + * 鎵归噺鍒犻櫎宀椾綅淇℃伅 + * + * @param postIds 闇瑕佸垹闄ょ殑宀椾綅ID + * @return 缁撴灉 + */ + public int deletePostByIds(Long[] postIds); + + /** + * 鏂板淇濆瓨宀椾綅淇℃伅 + * + * @param post 宀椾綅淇℃伅 + * @return 缁撴灉 + */ + public int insertPost(SysPost post); + + /** + * 淇敼淇濆瓨宀椾綅淇℃伅 + * + * @param post 宀椾綅淇℃伅 + * @return 缁撴灉 + */ + public int updatePost(SysPost post); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java new file mode 100644 index 0000000000000000000000000000000000000000..4dae5873439bb2b75313f6d26f9b06cbe691226f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java @@ -0,0 +1,174 @@ +package com.ruoyi.system.service; + +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.system.domain.SysUserRole; + +import java.util.List; +import java.util.Set; + +/** + * 瑙掕壊涓氬姟灞 + * + * @author ruoyi + */ +public interface ISysRoleService +{ + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瑙掕壊鏁版嵁 + * + * @param role 瑙掕壊淇℃伅 + * @return 瑙掕壊鏁版嵁闆嗗悎淇℃伅 + */ + public List selectRoleList(SysRole role); + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ瑙掕壊鍒楄〃 + * + * @param userId 鐢ㄦ埛ID + * @return 瑙掕壊鍒楄〃 + */ + public List selectRolesByUserId(Long userId); + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ瑙掕壊鏉冮檺 + * + * @param userId 鐢ㄦ埛ID + * @return 鏉冮檺鍒楄〃 + */ + public Set selectRolePermissionByUserId(Long userId); + + /** + * 鏌ヨ鎵鏈夎鑹 + * + * @return 瑙掕壊鍒楄〃 + */ + public List selectRoleAll(); + + /** + * 鏍规嵁鐢ㄦ埛ID鑾峰彇瑙掕壊閫夋嫨妗嗗垪琛 + * + * @param userId 鐢ㄦ埛ID + * @return 閫変腑瑙掕壊ID鍒楄〃 + */ + public List selectRoleListByUserId(Long userId); + + /** + * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊 + * + * @param roleId 瑙掕壊ID + * @return 瑙掕壊瀵硅薄淇℃伅 + */ + public SysRole selectRoleById(Long roleId); + + /** + * 鏍¢獙瑙掕壊鍚嶇О鏄惁鍞竴 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + public boolean checkRoleNameUnique(SysRole role); + + /** + * 鏍¢獙瑙掕壊鏉冮檺鏄惁鍞竴 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + public boolean checkRoleKeyUnique(SysRole role); + + /** + * 鏍¢獙瑙掕壊鏄惁鍏佽鎿嶄綔 + * + * @param role 瑙掕壊淇℃伅 + */ + public void checkRoleAllowed(SysRole role); + + /** + * 鏍¢獙瑙掕壊鏄惁鏈夋暟鎹潈闄 + * + * @param roleIds 瑙掕壊id + */ + public void checkRoleDataScope(Long... roleIds); + + /** + * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊浣跨敤鏁伴噺 + * + * @param roleId 瑙掕壊ID + * @return 缁撴灉 + */ + public int countUserRoleByRoleId(Long roleId); + + /** + * 鏂板淇濆瓨瑙掕壊淇℃伅 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + public int insertRole(SysRole role); + + /** + * 淇敼淇濆瓨瑙掕壊淇℃伅 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + public int updateRole(SysRole role); + + /** + * 淇敼瑙掕壊鐘舵 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + public int updateRoleStatus(SysRole role); + + /** + * 淇敼鏁版嵁鏉冮檺淇℃伅 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + public int authDataScope(SysRole role); + + /** + * 閫氳繃瑙掕壊ID鍒犻櫎瑙掕壊 + * + * @param roleId 瑙掕壊ID + * @return 缁撴灉 + */ + public int deleteRoleById(Long roleId); + + /** + * 鎵归噺鍒犻櫎瑙掕壊淇℃伅 + * + * @param roleIds 闇瑕佸垹闄ょ殑瑙掕壊ID + * @return 缁撴灉 + */ + public int deleteRoleByIds(Long[] roleIds); + + /** + * 鍙栨秷鎺堟潈鐢ㄦ埛瑙掕壊 + * + * @param userRole 鐢ㄦ埛鍜岃鑹插叧鑱斾俊鎭 + * @return 缁撴灉 + */ + public int deleteAuthUser(SysUserRole userRole); + + /** + * 鎵归噺鍙栨秷鎺堟潈鐢ㄦ埛瑙掕壊 + * + * @param roleId 瑙掕壊ID + * @param userIds 闇瑕佸彇娑堟巿鏉冪殑鐢ㄦ埛鏁版嵁ID + * @return 缁撴灉 + */ + public int deleteAuthUsers(Long roleId, Long[] userIds); + + /** + * 鎵归噺閫夋嫨鎺堟潈鐢ㄦ埛瑙掕壊 + * + * @param roleId 瑙掕壊ID + * @param userIds 闇瑕佸垹闄ょ殑鐢ㄦ埛鏁版嵁ID + * @return 缁撴灉 + */ + public int insertAuthUsers(Long roleId, Long[] userIds); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserOnlineService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserOnlineService.java new file mode 100644 index 0000000000000000000000000000000000000000..8eb5448cdeacc288d9d2efec79a7395739ed285b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserOnlineService.java @@ -0,0 +1,48 @@ +package com.ruoyi.system.service; + +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.system.domain.SysUserOnline; + +/** + * 鍦ㄧ嚎鐢ㄦ埛 鏈嶅姟灞 + * + * @author ruoyi + */ +public interface ISysUserOnlineService +{ + /** + * 閫氳繃鐧诲綍鍦板潃鏌ヨ淇℃伅 + * + * @param ipaddr 鐧诲綍鍦板潃 + * @param user 鐢ㄦ埛淇℃伅 + * @return 鍦ㄧ嚎鐢ㄦ埛淇℃伅 + */ + public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user); + + /** + * 閫氳繃鐢ㄦ埛鍚嶇О鏌ヨ淇℃伅 + * + * @param userName 鐢ㄦ埛鍚嶇О + * @param user 鐢ㄦ埛淇℃伅 + * @return 鍦ㄧ嚎鐢ㄦ埛淇℃伅 + */ + public SysUserOnline selectOnlineByUserName(String userName, LoginUser user); + + /** + * 閫氳繃鐧诲綍鍦板潃/鐢ㄦ埛鍚嶇О鏌ヨ淇℃伅 + * + * @param ipaddr 鐧诲綍鍦板潃 + * @param userName 鐢ㄦ埛鍚嶇О + * @param user 鐢ㄦ埛淇℃伅 + * @return 鍦ㄧ嚎鐢ㄦ埛淇℃伅 + */ + public SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user); + + /** + * 璁剧疆鍦ㄧ嚎鐢ㄦ埛淇℃伅 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 鍦ㄧ嚎鐢ㄦ埛 + */ + public SysUserOnline loginUserToUserOnline(LoginUser user); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java new file mode 100644 index 0000000000000000000000000000000000000000..2a28f803427f18593bdd17c6da9b67c07f81eb2f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java @@ -0,0 +1,207 @@ +package com.ruoyi.system.service; + +import com.ruoyi.common.core.domain.entity.SysUser; + +import java.util.List; + +/** + * 鐢ㄦ埛 涓氬姟灞 + * + * @author ruoyi + */ +public interface ISysUserService +{ + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鐢ㄦ埛鍒楄〃 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅 + */ + public List selectUserList(SysUser user); + + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ宸插垎閰嶇敤鎴疯鑹插垪琛 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅 + */ + public List selectAllocatedList(SysUser user); + + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鏈垎閰嶇敤鎴疯鑹插垪琛 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅 + */ + public List selectUnallocatedList(SysUser user); + + /** + * 閫氳繃鐢ㄦ埛鍚嶆煡璇㈢敤鎴 + * + * @param userName 鐢ㄦ埛鍚 + * @return 鐢ㄦ埛瀵硅薄淇℃伅 + */ + public SysUser selectUserByUserName(String userName); + + /** + * 閫氳繃鐢ㄦ埛ID鏌ヨ鐢ㄦ埛 + * + * @param userId 鐢ㄦ埛ID + * @return 鐢ㄦ埛瀵硅薄淇℃伅 + */ + public SysUser selectUserById(Long userId); + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ鐢ㄦ埛鎵灞炶鑹茬粍 + * + * @param userName 鐢ㄦ埛鍚 + * @return 缁撴灉 + */ + public String selectUserRoleGroup(String userName); + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ鐢ㄦ埛鎵灞炲矖浣嶇粍 + * + * @param userName 鐢ㄦ埛鍚 + * @return 缁撴灉 + */ + public String selectUserPostGroup(String userName); + + /** + * 鏍¢獙鐢ㄦ埛鍚嶇О鏄惁鍞竴 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + public boolean checkUserNameUnique(SysUser user); + + /** + * 鏍¢獙鎵嬫満鍙风爜鏄惁鍞竴 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + public boolean checkPhoneUnique(SysUser user); + + /** + * 鏍¢獙email鏄惁鍞竴 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + public boolean checkEmailUnique(SysUser user); + + /** + * 鏍¢獙鐢ㄦ埛鏄惁鍏佽鎿嶄綔 + * + * @param user 鐢ㄦ埛淇℃伅 + */ + public void checkUserAllowed(SysUser user); + + /** + * 鏍¢獙鐢ㄦ埛鏄惁鏈夋暟鎹潈闄 + * + * @param userId 鐢ㄦ埛id + */ + public void checkUserDataScope(Long userId); + + /** + * 鏂板鐢ㄦ埛淇℃伅 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + public int insertUser(SysUser user); + + /** + * 娉ㄥ唽鐢ㄦ埛淇℃伅 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + public boolean registerUser(SysUser user); + + /** + * 淇敼鐢ㄦ埛淇℃伅 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + public int updateUser(SysUser user); + + /** + * 鐢ㄦ埛鎺堟潈瑙掕壊 + * + * @param userId 鐢ㄦ埛ID + * @param roleIds 瑙掕壊缁 + */ + public void insertUserAuth(Long userId, Long[] roleIds); + + /** + * 淇敼鐢ㄦ埛鐘舵 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + public int updateUserStatus(SysUser user); + + /** + * 淇敼鐢ㄦ埛鍩烘湰淇℃伅 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + public int updateUserProfile(SysUser user); + + /** + * 淇敼鐢ㄦ埛澶村儚 + * + * @param userName 鐢ㄦ埛鍚 + * @param avatar 澶村儚鍦板潃 + * @return 缁撴灉 + */ + public boolean updateUserAvatar(String userName, String avatar); + + /** + * 閲嶇疆鐢ㄦ埛瀵嗙爜 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + public int resetPwd(SysUser user); + + /** + * 閲嶇疆鐢ㄦ埛瀵嗙爜 + * + * @param userName 鐢ㄦ埛鍚 + * @param password 瀵嗙爜 + * @return 缁撴灉 + */ + public int resetUserPwd(String userName, String password); + + /** + * 閫氳繃鐢ㄦ埛ID鍒犻櫎鐢ㄦ埛 + * + * @param userId 鐢ㄦ埛ID + * @return 缁撴灉 + */ + public int deleteUserById(Long userId); + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛淇℃伅 + * + * @param userIds 闇瑕佸垹闄ょ殑鐢ㄦ埛ID + * @return 缁撴灉 + */ + public int deleteUserByIds(Long[] userIds); + + /** + * 瀵煎叆鐢ㄦ埛鏁版嵁 + * + * @param userList 鐢ㄦ埛鏁版嵁鍒楄〃 + * @param isUpdateSupport 鏄惁鏇存柊鏀寔锛屽鏋滃凡瀛樺湪锛屽垯杩涜鏇存柊鏁版嵁 + * @param operName 鎿嶄綔鐢ㄦ埛 + * @return 缁撴灉 + */ + public String importUser(List userList, Boolean isUpdateSupport, String operName); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..95bc8c59014b3891bead5c912bd76ce29bb15f20 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java @@ -0,0 +1,233 @@ +package com.ruoyi.system.service.impl; + +import com.ruoyi.common.annotation.DataSource; +import com.ruoyi.common.constant.CacheConstants; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.enums.DataSourceType; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.SysConfig; +import com.ruoyi.system.mapper.SysConfigMapper; +import com.ruoyi.system.service.ISysConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import java.util.Collection; +import java.util.List; + +/** + * 鍙傛暟閰嶇疆 鏈嶅姟灞傚疄鐜 + * + * @author ruoyi + */ +@Service +public class SysConfigServiceImpl implements ISysConfigService +{ + @Autowired + private SysConfigMapper configMapper; + + @Autowired + private RedisCache redisCache; + + /** + * 椤圭洰鍚姩鏃讹紝鍒濆鍖栧弬鏁板埌缂撳瓨 + */ + @PostConstruct + public void init() + { + loadingConfigCache(); + } + + /** + * 鏌ヨ鍙傛暟閰嶇疆淇℃伅 + * + * @param configId 鍙傛暟閰嶇疆ID + * @return 鍙傛暟閰嶇疆淇℃伅 + */ + @Override + @DataSource(DataSourceType.MASTER) + public SysConfig selectConfigById(Long configId) + { + SysConfig config = new SysConfig(); + config.setConfigId(configId); + return configMapper.selectConfig(config); + } + + /** + * 鏍规嵁閿悕鏌ヨ鍙傛暟閰嶇疆淇℃伅 + * + * @param configKey 鍙傛暟key + * @return 鍙傛暟閿 + */ + @Override + public String selectConfigByKey(String configKey) + { + String configValue = Convert.toStr(redisCache.getCacheObject(getCacheKey(configKey))); + if (StringUtils.isNotEmpty(configValue)) + { + return configValue; + } + SysConfig config = new SysConfig(); + config.setConfigKey(configKey); + SysConfig retConfig = configMapper.selectConfig(config); + if (StringUtils.isNotNull(retConfig)) + { + redisCache.setCacheObject(getCacheKey(configKey), retConfig.getConfigValue()); + return retConfig.getConfigValue(); + } + return StringUtils.EMPTY; + } + + /** + * 鑾峰彇楠岃瘉鐮佸紑鍏 + * + * @return true寮鍚紝false鍏抽棴 + */ + @Override + public boolean selectCaptchaEnabled() + { + String captchaEnabled = selectConfigByKey("sys.account.captchaEnabled"); + if (StringUtils.isEmpty(captchaEnabled)) + { + return true; + } + return Convert.toBool(captchaEnabled); + } + + /** + * 鏌ヨ鍙傛暟閰嶇疆鍒楄〃 + * + * @param config 鍙傛暟閰嶇疆淇℃伅 + * @return 鍙傛暟閰嶇疆闆嗗悎 + */ + @Override + public List selectConfigList(SysConfig config) + { + return configMapper.selectConfigList(config); + } + + /** + * 鏂板鍙傛暟閰嶇疆 + * + * @param config 鍙傛暟閰嶇疆淇℃伅 + * @return 缁撴灉 + */ + @Override + public int insertConfig(SysConfig config) + { + int row = configMapper.insertConfig(config); + if (row > 0) + { + redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); + } + return row; + } + + /** + * 淇敼鍙傛暟閰嶇疆 + * + * @param config 鍙傛暟閰嶇疆淇℃伅 + * @return 缁撴灉 + */ + @Override + public int updateConfig(SysConfig config) + { + SysConfig temp = configMapper.selectConfigById(config.getConfigId()); + if (!StringUtils.equals(temp.getConfigKey(), config.getConfigKey())) + { + redisCache.deleteObject(getCacheKey(temp.getConfigKey())); + } + + int row = configMapper.updateConfig(config); + if (row > 0) + { + redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); + } + return row; + } + + /** + * 鎵归噺鍒犻櫎鍙傛暟淇℃伅 + * + * @param configIds 闇瑕佸垹闄ょ殑鍙傛暟ID + */ + @Override + public void deleteConfigByIds(Long[] configIds) + { + for (Long configId : configIds) + { + SysConfig config = selectConfigById(configId); + if (StringUtils.equals(UserConstants.YES, config.getConfigType())) + { + throw new ServiceException(String.format("鍐呯疆鍙傛暟銆%1$s銆戜笉鑳藉垹闄 ", config.getConfigKey())); + } + configMapper.deleteConfigById(configId); + redisCache.deleteObject(getCacheKey(config.getConfigKey())); + } + } + + /** + * 鍔犺浇鍙傛暟缂撳瓨鏁版嵁 + */ + @Override + public void loadingConfigCache() + { + List configsList = configMapper.selectConfigList(new SysConfig()); + for (SysConfig config : configsList) + { + redisCache.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); + } + } + + /** + * 娓呯┖鍙傛暟缂撳瓨鏁版嵁 + */ + @Override + public void clearConfigCache() + { + Collection keys = redisCache.keys(CacheConstants.SYS_CONFIG_KEY + "*"); + redisCache.deleteObject(keys); + } + + /** + * 閲嶇疆鍙傛暟缂撳瓨鏁版嵁 + */ + @Override + public void resetConfigCache() + { + clearConfigCache(); + loadingConfigCache(); + } + + /** + * 鏍¢獙鍙傛暟閿悕鏄惁鍞竴 + * + * @param config 鍙傛暟閰嶇疆淇℃伅 + * @return 缁撴灉 + */ + @Override + public boolean checkConfigKeyUnique(SysConfig config) + { + Long configId = StringUtils.isNull(config.getConfigId()) ? -1L : config.getConfigId(); + SysConfig info = configMapper.checkConfigKeyUnique(config.getConfigKey()); + if (StringUtils.isNotNull(info) && info.getConfigId().longValue() != configId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 璁剧疆cache key + * + * @param configKey 鍙傛暟閿 + * @return 缂撳瓨閿甼ey + */ + private String getCacheKey(String configKey) + { + return CacheConstants.SYS_CONFIG_KEY + configKey; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..5dacd8f05f76e0c6e0b321ced1a023ca0f02cd92 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java @@ -0,0 +1,339 @@ +package com.ruoyi.system.service.impl; + +import com.ruoyi.common.annotation.DataScope; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.domain.TreeSelect; +import com.ruoyi.common.core.domain.entity.SysDept; +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.core.text.Convert; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.system.mapper.SysDeptMapper; +import com.ruoyi.system.mapper.SysRoleMapper; +import com.ruoyi.system.service.ISysDeptService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 閮ㄩ棬绠$悊 鏈嶅姟瀹炵幇 + * + * @author ruoyi + */ +@Service +public class SysDeptServiceImpl implements ISysDeptService +{ + @Autowired + private SysDeptMapper deptMapper; + + @Autowired + private SysRoleMapper roleMapper; + + /** + * 鏌ヨ閮ㄩ棬绠$悊鏁版嵁 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 閮ㄩ棬淇℃伅闆嗗悎 + */ + @Override + @DataScope(deptAlias = "d") + public List selectDeptList(SysDept dept) + { + return deptMapper.selectDeptList(dept); + } + + /** + * 鏌ヨ閮ㄩ棬鏍戠粨鏋勪俊鎭 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 閮ㄩ棬鏍戜俊鎭泦鍚 + */ + @Override + public List selectDeptTreeList(SysDept dept) + { + List depts = SpringUtils.getAopProxy(this).selectDeptList(dept); + return buildDeptTreeSelect(depts); + } + + /** + * 鏋勫缓鍓嶇鎵闇瑕佹爲缁撴瀯 + * + * @param depts 閮ㄩ棬鍒楄〃 + * @return 鏍戠粨鏋勫垪琛 + */ + @Override + public List buildDeptTree(List depts) + { + List returnList = new ArrayList(); + List tempList = depts.stream().map(SysDept::getDeptId).collect(Collectors.toList()); + for (SysDept dept : depts) + { + // 濡傛灉鏄《绾ц妭鐐, 閬嶅巻璇ョ埗鑺傜偣鐨勬墍鏈夊瓙鑺傜偣 + if (!tempList.contains(dept.getParentId())) + { + recursionFn(depts, dept); + returnList.add(dept); + } + } + if (returnList.isEmpty()) + { + returnList = depts; + } + return returnList; + } + + /** + * 鏋勫缓鍓嶇鎵闇瑕佷笅鎷夋爲缁撴瀯 + * + * @param depts 閮ㄩ棬鍒楄〃 + * @return 涓嬫媺鏍戠粨鏋勫垪琛 + */ + @Override + public List buildDeptTreeSelect(List depts) + { + List deptTrees = buildDeptTree(depts); + return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + /** + * 鏍规嵁瑙掕壊ID鏌ヨ閮ㄩ棬鏍戜俊鎭 + * + * @param roleId 瑙掕壊ID + * @return 閫変腑閮ㄩ棬鍒楄〃 + */ + @Override + public List selectDeptListByRoleId(Long roleId) + { + SysRole role = roleMapper.selectRoleById(roleId); + return deptMapper.selectDeptListByRoleId(roleId, role.isDeptCheckStrictly()); + } + + /** + * 鏍规嵁閮ㄩ棬ID鏌ヨ淇℃伅 + * + * @param deptId 閮ㄩ棬ID + * @return 閮ㄩ棬淇℃伅 + */ + @Override + public SysDept selectDeptById(Long deptId) + { + return deptMapper.selectDeptById(deptId); + } + + /** + * 鏍规嵁ID鏌ヨ鎵鏈夊瓙閮ㄩ棬锛堟甯哥姸鎬侊級 + * + * @param deptId 閮ㄩ棬ID + * @return 瀛愰儴闂ㄦ暟 + */ + @Override + public int selectNormalChildrenDeptById(Long deptId) + { + return deptMapper.selectNormalChildrenDeptById(deptId); + } + + /** + * 鏄惁瀛樺湪瀛愯妭鐐 + * + * @param deptId 閮ㄩ棬ID + * @return 缁撴灉 + */ + @Override + public boolean hasChildByDeptId(Long deptId) + { + int result = deptMapper.hasChildByDeptId(deptId); + return result > 0; + } + + /** + * 鏌ヨ閮ㄩ棬鏄惁瀛樺湪鐢ㄦ埛 + * + * @param deptId 閮ㄩ棬ID + * @return 缁撴灉 true 瀛樺湪 false 涓嶅瓨鍦 + */ + @Override + public boolean checkDeptExistUser(Long deptId) + { + int result = deptMapper.checkDeptExistUser(deptId); + return result > 0; + } + + /** + * 鏍¢獙閮ㄩ棬鍚嶇О鏄惁鍞竴 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 缁撴灉 + */ + @Override + public boolean checkDeptNameUnique(SysDept dept) + { + Long deptId = StringUtils.isNull(dept.getDeptId()) ? -1L : dept.getDeptId(); + SysDept info = deptMapper.checkDeptNameUnique(dept.getDeptName(), dept.getParentId()); + if (StringUtils.isNotNull(info) && info.getDeptId().longValue() != deptId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 鏍¢獙閮ㄩ棬鏄惁鏈夋暟鎹潈闄 + * + * @param deptId 閮ㄩ棬id + */ + @Override + public void checkDeptDataScope(Long deptId) + { + if (!SysUser.isAdmin(SecurityUtils.getUserId()) && StringUtils.isNotNull(deptId)) + { + SysDept dept = new SysDept(); + dept.setDeptId(deptId); + List depts = SpringUtils.getAopProxy(this).selectDeptList(dept); + if (StringUtils.isEmpty(depts)) + { + throw new ServiceException("娌℃湁鏉冮檺璁块棶閮ㄩ棬鏁版嵁锛"); + } + } + } + + /** + * 鏂板淇濆瓨閮ㄩ棬淇℃伅 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 缁撴灉 + */ + @Override + public int insertDept(SysDept dept) + { + SysDept info = deptMapper.selectDeptById(dept.getParentId()); + // 濡傛灉鐖惰妭鐐逛笉涓烘甯哥姸鎬,鍒欎笉鍏佽鏂板瀛愯妭鐐 + if (!UserConstants.DEPT_NORMAL.equals(info.getStatus())) + { + throw new ServiceException("閮ㄩ棬鍋滅敤锛屼笉鍏佽鏂板"); + } + dept.setAncestors(info.getAncestors() + "," + dept.getParentId()); + return deptMapper.insertDept(dept); + } + + /** + * 淇敼淇濆瓨閮ㄩ棬淇℃伅 + * + * @param dept 閮ㄩ棬淇℃伅 + * @return 缁撴灉 + */ + @Override + public int updateDept(SysDept dept) + { + SysDept newParentDept = deptMapper.selectDeptById(dept.getParentId()); + SysDept oldDept = deptMapper.selectDeptById(dept.getDeptId()); + if (StringUtils.isNotNull(newParentDept) && StringUtils.isNotNull(oldDept)) + { + String newAncestors = newParentDept.getAncestors() + "," + newParentDept.getDeptId(); + String oldAncestors = oldDept.getAncestors(); + dept.setAncestors(newAncestors); + updateDeptChildren(dept.getDeptId(), newAncestors, oldAncestors); + } + int result = deptMapper.updateDept(dept); + if (UserConstants.DEPT_NORMAL.equals(dept.getStatus()) && StringUtils.isNotEmpty(dept.getAncestors()) + && !StringUtils.equals("0", dept.getAncestors())) + { + // 濡傛灉璇ラ儴闂ㄦ槸鍚敤鐘舵侊紝鍒欏惎鐢ㄨ閮ㄩ棬鐨勬墍鏈変笂绾ч儴闂 + updateParentDeptStatusNormal(dept); + } + return result; + } + + /** + * 淇敼璇ラ儴闂ㄧ殑鐖剁骇閮ㄩ棬鐘舵 + * + * @param dept 褰撳墠閮ㄩ棬 + */ + private void updateParentDeptStatusNormal(SysDept dept) + { + String ancestors = dept.getAncestors(); + Long[] deptIds = Convert.toLongArray(ancestors); + deptMapper.updateDeptStatusNormal(deptIds); + } + + /** + * 淇敼瀛愬厓绱犲叧绯 + * + * @param deptId 琚慨鏀圭殑閮ㄩ棬ID + * @param newAncestors 鏂扮殑鐖禝D闆嗗悎 + * @param oldAncestors 鏃х殑鐖禝D闆嗗悎 + */ + public void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors) + { + List children = deptMapper.selectChildrenDeptById(deptId); + for (SysDept child : children) + { + child.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors)); + } + if (children.size() > 0) + { + deptMapper.updateDeptChildren(children); + } + } + + /** + * 鍒犻櫎閮ㄩ棬绠$悊淇℃伅 + * + * @param deptId 閮ㄩ棬ID + * @return 缁撴灉 + */ + @Override + public int deleteDeptById(Long deptId) + { + return deptMapper.deleteDeptById(deptId); + } + + /** + * 閫掑綊鍒楄〃 + */ + private void recursionFn(List list, SysDept t) + { + // 寰楀埌瀛愯妭鐐瑰垪琛 + List childList = getChildList(list, t); + t.setChildren(childList); + for (SysDept tChild : childList) + { + if (hasChild(list, tChild)) + { + recursionFn(list, tChild); + } + } + } + + /** + * 寰楀埌瀛愯妭鐐瑰垪琛 + */ + private List getChildList(List list, SysDept t) + { + List tlist = new ArrayList(); + Iterator it = list.iterator(); + while (it.hasNext()) + { + SysDept n = (SysDept) it.next(); + if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue()) + { + tlist.add(n); + } + } + return tlist; + } + + /** + * 鍒ゆ柇鏄惁鏈夊瓙鑺傜偣 + */ + private boolean hasChild(List list, SysDept t) + { + return getChildList(list, t).size() > 0; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..956f770ab66a65a0f1c04d26322f3f42e5176da9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java @@ -0,0 +1,146 @@ +package com.ruoyi.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.core.domain.entity.SysDictData; +import com.ruoyi.common.core.domain.entity.SysDictType; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DictUtils; +import com.ruoyi.hezhi.domain.vo.DictParamVO; +import com.ruoyi.system.mapper.SysDictDataMapper; +import com.ruoyi.system.service.ISysDictDataService; +import com.ruoyi.system.service.ISysDictTypeService; +import org.apache.commons.lang3.ObjectUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 瀛楀吀 涓氬姟灞傚鐞 + * + * @author ruoyi + */ +@Service +public class SysDictDataServiceImpl implements ISysDictDataService +{ + @Autowired + private SysDictDataMapper dictDataMapper; + + @Resource + private ISysDictTypeService dictTypeService; + + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀鏁版嵁 + * + * @param dictData 瀛楀吀鏁版嵁淇℃伅 + * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅 + */ + @Override + public List selectDictDataList(SysDictData dictData) + { + return dictDataMapper.selectDictDataList(dictData); + } + + /** + * 鏍规嵁瀛楀吀绫诲瀷鍜屽瓧鍏搁敭鍊兼煡璇㈠瓧鍏告暟鎹俊鎭 + * + * @param dictType 瀛楀吀绫诲瀷 + * @param dictValue 瀛楀吀閿 + * @return 瀛楀吀鏍囩 + */ + @Override + public String selectDictLabel(String dictType, String dictValue) + { + return dictDataMapper.selectDictLabel(dictType, dictValue); + } + + /** + * 鏍规嵁瀛楀吀鏁版嵁ID鏌ヨ淇℃伅 + * + * @param dictCode 瀛楀吀鏁版嵁ID + * @return 瀛楀吀鏁版嵁 + */ + @Override + public SysDictData selectDictDataById(Long dictCode) + { + return dictDataMapper.selectDictDataById(dictCode); + } + + /** + * 鎵归噺鍒犻櫎瀛楀吀鏁版嵁淇℃伅 + * + * @param dictCodes 闇瑕佸垹闄ょ殑瀛楀吀鏁版嵁ID + */ + @Override + public void deleteDictDataByIds(Long[] dictCodes) + { + for (Long dictCode : dictCodes) + { + SysDictData data = selectDictDataById(dictCode); + dictDataMapper.deleteDictDataById(dictCode); + List dictDatas = dictDataMapper.selectDictDataByType(data.getDictType()); + DictUtils.setDictCache(data.getDictType(), dictDatas); + } + } + + /** + * 鏂板淇濆瓨瀛楀吀鏁版嵁淇℃伅 + * + * @param data 瀛楀吀鏁版嵁淇℃伅 + * @return 缁撴灉 + */ + @Override + public int insertDictData(SysDictData data) + { + int row = dictDataMapper.insertDictData(data); + if (row > 0) + { + List dictDatas = dictDataMapper.selectDictDataByType(data.getDictType()); + DictUtils.setDictCache(data.getDictType(), dictDatas); + } + return row; + } + + /** + * 淇敼淇濆瓨瀛楀吀鏁版嵁淇℃伅 + * + * @param data 瀛楀吀鏁版嵁淇℃伅 + * @return 缁撴灉 + */ + @Override + public int updateDictData(SysDictData data) + { + int row = dictDataMapper.updateDictData(data); + if (row > 0) + { + List dictDatas = dictDataMapper.selectDictDataByType(data.getDictType()); + DictUtils.setDictCache(data.getDictType(), dictDatas); + } + return row; + } + + + /** + * 鑾峰彇瀛楀吀鍙傛暟鍒楄〃 + * @param paramType 鍙傛暟绫诲瀷 + * @return + */ + @Override + public List getDictParamList(String paramType) { + SysDictType dictType = dictTypeService.selectDictTypeByType(paramType); + if (ObjectUtils.isEmpty(dictType)) { + throw new ServiceException("鏈煡璇㈠埌瀛楀吀淇℃伅"); + }else { + if (dictType.getStatus().equals("1")){ + throw new ServiceException("瀛楀吀宸插仠鐢"); + } + } + List dictDatas = dictDataMapper.selectDictDataByType(paramType); + List result = dictDatas.stream().map(item -> { + return BeanUtil.toBean(item, DictParamVO.class); + }).collect(Collectors.toList()); + return result; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..6c47c7f120186d142f201128abd09bf09e264abe --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java @@ -0,0 +1,224 @@ +package com.ruoyi.system.service.impl; + +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.domain.entity.SysDictData; +import com.ruoyi.common.core.domain.entity.SysDictType; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.DictUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.mapper.SysDictDataMapper; +import com.ruoyi.system.mapper.SysDictTypeMapper; +import com.ruoyi.system.service.ISysDictTypeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.PostConstruct; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 瀛楀吀 涓氬姟灞傚鐞 + * + * @author ruoyi + */ +@Service +public class SysDictTypeServiceImpl implements ISysDictTypeService +{ + @Autowired + private SysDictTypeMapper dictTypeMapper; + + @Autowired + private SysDictDataMapper dictDataMapper; + + /** + * 椤圭洰鍚姩鏃讹紝鍒濆鍖栧瓧鍏稿埌缂撳瓨 + */ + @PostConstruct + public void init() + { + loadingDictCache(); + } + + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瀛楀吀绫诲瀷 + * + * @param dictType 瀛楀吀绫诲瀷淇℃伅 + * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅 + */ + @Override + public List selectDictTypeList(SysDictType dictType) + { + return dictTypeMapper.selectDictTypeList(dictType); + } + + /** + * 鏍规嵁鎵鏈夊瓧鍏哥被鍨 + * + * @return 瀛楀吀绫诲瀷闆嗗悎淇℃伅 + */ + @Override + public List selectDictTypeAll() + { + return dictTypeMapper.selectDictTypeAll(); + } + + /** + * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁 + * + * @param dictType 瀛楀吀绫诲瀷 + * @return 瀛楀吀鏁版嵁闆嗗悎淇℃伅 + */ + @Override + public List selectDictDataByType(String dictType) + { + List dictDatas = DictUtils.getDictCache(dictType); + if (StringUtils.isNotEmpty(dictDatas)) + { + return dictDatas; + } + dictDatas = dictDataMapper.selectDictDataByType(dictType); + if (StringUtils.isNotEmpty(dictDatas)) + { + DictUtils.setDictCache(dictType, dictDatas); + return dictDatas; + } + return null; + } + + /** + * 鏍规嵁瀛楀吀绫诲瀷ID鏌ヨ淇℃伅 + * + * @param dictId 瀛楀吀绫诲瀷ID + * @return 瀛楀吀绫诲瀷 + */ + @Override + public SysDictType selectDictTypeById(Long dictId) + { + return dictTypeMapper.selectDictTypeById(dictId); + } + + /** + * 鏍规嵁瀛楀吀绫诲瀷鏌ヨ淇℃伅 + * + * @param dictType 瀛楀吀绫诲瀷 + * @return 瀛楀吀绫诲瀷 + */ + @Override + public SysDictType selectDictTypeByType(String dictType) + { + return dictTypeMapper.selectDictTypeByType(dictType); + } + + /** + * 鎵归噺鍒犻櫎瀛楀吀绫诲瀷淇℃伅 + * + * @param dictIds 闇瑕佸垹闄ょ殑瀛楀吀ID + */ + @Override + public void deleteDictTypeByIds(Long[] dictIds) + { + for (Long dictId : dictIds) + { + SysDictType dictType = selectDictTypeById(dictId); + if (dictDataMapper.countDictDataByType(dictType.getDictType()) > 0) + { + throw new ServiceException(String.format("%1$s宸插垎閰,涓嶈兘鍒犻櫎", dictType.getDictName())); + } + dictTypeMapper.deleteDictTypeById(dictId); + DictUtils.removeDictCache(dictType.getDictType()); + } + } + + /** + * 鍔犺浇瀛楀吀缂撳瓨鏁版嵁 + */ + @Override + public void loadingDictCache() + { + SysDictData dictData = new SysDictData(); + dictData.setStatus("0"); + Map> dictDataMap = dictDataMapper.selectDictDataList(dictData).stream().collect(Collectors.groupingBy(SysDictData::getDictType)); + for (Map.Entry> entry : dictDataMap.entrySet()) + { + DictUtils.setDictCache(entry.getKey(), entry.getValue().stream().sorted(Comparator.comparing(SysDictData::getDictSort)).collect(Collectors.toList())); + } + } + + /** + * 娓呯┖瀛楀吀缂撳瓨鏁版嵁 + */ + @Override + public void clearDictCache() + { + DictUtils.clearDictCache(); + } + + /** + * 閲嶇疆瀛楀吀缂撳瓨鏁版嵁 + */ + @Override + public void resetDictCache() + { + clearDictCache(); + loadingDictCache(); + } + + /** + * 鏂板淇濆瓨瀛楀吀绫诲瀷淇℃伅 + * + * @param dict 瀛楀吀绫诲瀷淇℃伅 + * @return 缁撴灉 + */ + @Override + public int insertDictType(SysDictType dict) + { + int row = dictTypeMapper.insertDictType(dict); + if (row > 0) + { + DictUtils.setDictCache(dict.getDictType(), null); + } + return row; + } + + /** + * 淇敼淇濆瓨瀛楀吀绫诲瀷淇℃伅 + * + * @param dict 瀛楀吀绫诲瀷淇℃伅 + * @return 缁撴灉 + */ + @Override + @Transactional + public int updateDictType(SysDictType dict) + { + SysDictType oldDict = dictTypeMapper.selectDictTypeById(dict.getDictId()); + dictDataMapper.updateDictDataType(oldDict.getDictType(), dict.getDictType()); + int row = dictTypeMapper.updateDictType(dict); + if (row > 0) + { + List dictDatas = dictDataMapper.selectDictDataByType(dict.getDictType()); + DictUtils.setDictCache(dict.getDictType(), dictDatas); + } + return row; + } + + /** + * 鏍¢獙瀛楀吀绫诲瀷绉版槸鍚﹀敮涓 + * + * @param dict 瀛楀吀绫诲瀷 + * @return 缁撴灉 + */ + @Override + public boolean checkDictTypeUnique(SysDictType dict) + { + Long dictId = StringUtils.isNull(dict.getDictId()) ? -1L : dict.getDictId(); + SysDictType dictType = dictTypeMapper.checkDictTypeUnique(dict.getDictType()); + if (StringUtils.isNotNull(dictType) && dictType.getDictId().longValue() != dictId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..ebd9dea3177dd719c11dbfd18372050daf39f3e6 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java @@ -0,0 +1,66 @@ +package com.ruoyi.system.service.impl; + +import com.ruoyi.system.domain.SysLogininfor; +import com.ruoyi.system.mapper.SysLogininforMapper; +import com.ruoyi.system.service.ISysLogininforService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 绯荤粺璁块棶鏃ュ織鎯呭喌淇℃伅 鏈嶅姟灞傚鐞 + * + * @author ruoyi + */ +@Service +public class SysLogininforServiceImpl implements ISysLogininforService +{ + + @Autowired + private SysLogininforMapper logininforMapper; + + /** + * 鏂板绯荤粺鐧诲綍鏃ュ織 + * + * @param logininfor 璁块棶鏃ュ織瀵硅薄 + */ + @Override + public void insertLogininfor(SysLogininfor logininfor) + { + logininforMapper.insertLogininfor(logininfor); + } + + /** + * 鏌ヨ绯荤粺鐧诲綍鏃ュ織闆嗗悎 + * + * @param logininfor 璁块棶鏃ュ織瀵硅薄 + * @return 鐧诲綍璁板綍闆嗗悎 + */ + @Override + public List selectLogininforList(SysLogininfor logininfor) + { + return logininforMapper.selectLogininforList(logininfor); + } + + /** + * 鎵归噺鍒犻櫎绯荤粺鐧诲綍鏃ュ織 + * + * @param infoIds 闇瑕佸垹闄ょ殑鐧诲綍鏃ュ織ID + * @return 缁撴灉 + */ + @Override + public int deleteLogininforByIds(Long[] infoIds) + { + return logininforMapper.deleteLogininforByIds(infoIds); + } + + /** + * 娓呯┖绯荤粺鐧诲綍鏃ュ織 + */ + @Override + public void cleanLogininfor() + { + logininforMapper.cleanLogininfor(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..77e19ebe557f1b342fd5877289e68b9277b75137 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java @@ -0,0 +1,538 @@ +package com.ruoyi.system.service.impl; + +import com.ruoyi.common.constant.Constants; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.domain.TreeSelect; +import com.ruoyi.common.core.domain.entity.SysMenu; +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.vo.MetaVo; +import com.ruoyi.system.domain.vo.RouterVo; +import com.ruoyi.system.mapper.SysMenuMapper; +import com.ruoyi.system.mapper.SysRoleMapper; +import com.ruoyi.system.mapper.SysRoleMenuMapper; +import com.ruoyi.system.service.ISysMenuService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 鑿滃崟 涓氬姟灞傚鐞 + * + * @author ruoyi + */ +@Service +public class SysMenuServiceImpl implements ISysMenuService +{ + public static final String PREMISSION_STRING = "perms[\"{0}\"]"; + + @Autowired + private SysMenuMapper menuMapper; + + @Autowired + private SysRoleMapper roleMapper; + + @Autowired + private SysRoleMenuMapper roleMenuMapper; + + /** + * 鏍规嵁鐢ㄦ埛鏌ヨ绯荤粺鑿滃崟鍒楄〃 + * + * @param userId 鐢ㄦ埛ID + * @return 鑿滃崟鍒楄〃 + */ + @Override + public List selectMenuList(Long userId) + { + return selectMenuList(new SysMenu(), userId); + } + + /** + * 鏌ヨ绯荤粺鑿滃崟鍒楄〃 + * + * @param menu 鑿滃崟淇℃伅 + * @return 鑿滃崟鍒楄〃 + */ + @Override + public List selectMenuList(SysMenu menu, Long userId) + { + List menuList = null; + // 绠$悊鍛樻樉绀烘墍鏈夎彍鍗曚俊鎭 + if (SysUser.isAdmin(userId)) + { + menuList = menuMapper.selectMenuList(menu); + } + else + { + menu.getParams().put("userId", userId); + menuList = menuMapper.selectMenuListByUserId(menu); + } + return menuList; + } + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ鏉冮檺 + * + * @param userId 鐢ㄦ埛ID + * @return 鏉冮檺鍒楄〃 + */ + @Override + public Set selectMenuPermsByUserId(Long userId) + { + List perms = menuMapper.selectMenuPermsByUserId(userId); + Set permsSet = new HashSet<>(); + for (String perm : perms) + { + if (StringUtils.isNotEmpty(perm)) + { + permsSet.addAll(Arrays.asList(perm.trim().split(","))); + } + } + return permsSet; + } + + /** + * 鏍规嵁瑙掕壊ID鏌ヨ鏉冮檺 + * + * @param roleId 瑙掕壊ID + * @return 鏉冮檺鍒楄〃 + */ + @Override + public Set selectMenuPermsByRoleId(Long roleId) + { + List perms = menuMapper.selectMenuPermsByRoleId(roleId); + Set permsSet = new HashSet<>(); + for (String perm : perms) + { + if (StringUtils.isNotEmpty(perm)) + { + permsSet.addAll(Arrays.asList(perm.trim().split(","))); + } + } + return permsSet; + } + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ鑿滃崟 + * + * @param userId 鐢ㄦ埛鍚嶇О + * @return 鑿滃崟鍒楄〃 + */ + @Override + public List selectMenuTreeByUserId(Long userId) + { + List menus = null; + if (SecurityUtils.isAdmin(userId)) + { + menus = menuMapper.selectMenuTreeAll(); + } + else + { + menus = menuMapper.selectMenuTreeByUserId(userId); + } + return getChildPerms(menus, 0); + } + + /** + * 鏍规嵁瑙掕壊ID鏌ヨ鑿滃崟鏍戜俊鎭 + * + * @param roleId 瑙掕壊ID + * @return 閫変腑鑿滃崟鍒楄〃 + */ + @Override + public List selectMenuListByRoleId(Long roleId) + { + SysRole role = roleMapper.selectRoleById(roleId); + return menuMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly()); + } + + /** + * 鏋勫缓鍓嶇璺敱鎵闇瑕佺殑鑿滃崟 + * + * @param menus 鑿滃崟鍒楄〃 + * @return 璺敱鍒楄〃 + */ + @Override + public List buildMenus(List menus) + { + List routers = new LinkedList(); + for (SysMenu menu : menus) + { + RouterVo router = new RouterVo(); + router.setHidden("1".equals(menu.getVisible())); + router.setName(getRouteName(menu)); + router.setPath(getRouterPath(menu)); + router.setComponent(getComponent(menu)); + router.setQuery(menu.getQuery()); + router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); + List cMenus = menu.getChildren(); + if (StringUtils.isNotEmpty(cMenus) && UserConstants.TYPE_DIR.equals(menu.getMenuType())) + { + router.setAlwaysShow(true); + router.setRedirect("noRedirect"); + router.setChildren(buildMenus(cMenus)); + } + else if (isMenuFrame(menu)) + { + router.setMeta(null); + List childrenList = new ArrayList(); + RouterVo children = new RouterVo(); + children.setPath(menu.getPath()); + children.setComponent(menu.getComponent()); + children.setName(getRouteName(menu.getRouteName(), menu.getPath())); + children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath())); + children.setQuery(menu.getQuery()); + childrenList.add(children); + router.setChildren(childrenList); + } + else if (menu.getParentId().intValue() == 0 && isInnerLink(menu)) + { + router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon())); + router.setPath("/"); + List childrenList = new ArrayList(); + RouterVo children = new RouterVo(); + String routerPath = innerLinkReplaceEach(menu.getPath()); + children.setPath(routerPath); + children.setComponent(UserConstants.INNER_LINK); + children.setName(getRouteName(menu.getRouteName(), routerPath)); + children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), menu.getPath())); + childrenList.add(children); + router.setChildren(childrenList); + } + routers.add(router); + } + return routers; + } + + /** + * 鏋勫缓鍓嶇鎵闇瑕佹爲缁撴瀯 + * + * @param menus 鑿滃崟鍒楄〃 + * @return 鏍戠粨鏋勫垪琛 + */ + @Override + public List buildMenuTree(List menus) + { + List returnList = new ArrayList(); + List tempList = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList()); + for (Iterator iterator = menus.iterator(); iterator.hasNext();) + { + SysMenu menu = (SysMenu) iterator.next(); + // 濡傛灉鏄《绾ц妭鐐, 閬嶅巻璇ョ埗鑺傜偣鐨勬墍鏈夊瓙鑺傜偣 + if (!tempList.contains(menu.getParentId())) + { + recursionFn(menus, menu); + returnList.add(menu); + } + } + if (returnList.isEmpty()) + { + returnList = menus; + } + return returnList; + } + + /** + * 鏋勫缓鍓嶇鎵闇瑕佷笅鎷夋爲缁撴瀯 + * + * @param menus 鑿滃崟鍒楄〃 + * @return 涓嬫媺鏍戠粨鏋勫垪琛 + */ + @Override + public List buildMenuTreeSelect(List menus) + { + List menuTrees = buildMenuTree(menus); + return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + /** + * 鏍规嵁鑿滃崟ID鏌ヨ淇℃伅 + * + * @param menuId 鑿滃崟ID + * @return 鑿滃崟淇℃伅 + */ + @Override + public SysMenu selectMenuById(Long menuId) + { + return menuMapper.selectMenuById(menuId); + } + + /** + * 鏄惁瀛樺湪鑿滃崟瀛愯妭鐐 + * + * @param menuId 鑿滃崟ID + * @return 缁撴灉 + */ + @Override + public boolean hasChildByMenuId(Long menuId) + { + int result = menuMapper.hasChildByMenuId(menuId); + return result > 0; + } + + /** + * 鏌ヨ鑿滃崟浣跨敤鏁伴噺 + * + * @param menuId 鑿滃崟ID + * @return 缁撴灉 + */ + @Override + public boolean checkMenuExistRole(Long menuId) + { + int result = roleMenuMapper.checkMenuExistRole(menuId); + return result > 0; + } + + /** + * 鏂板淇濆瓨鑿滃崟淇℃伅 + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁撴灉 + */ + @Override + public int insertMenu(SysMenu menu) + { + return menuMapper.insertMenu(menu); + } + + /** + * 淇敼淇濆瓨鑿滃崟淇℃伅 + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁撴灉 + */ + @Override + public int updateMenu(SysMenu menu) + { + return menuMapper.updateMenu(menu); + } + + /** + * 鍒犻櫎鑿滃崟绠$悊淇℃伅 + * + * @param menuId 鑿滃崟ID + * @return 缁撴灉 + */ + @Override + public int deleteMenuById(Long menuId) + { + return menuMapper.deleteMenuById(menuId); + } + + /** + * 鏍¢獙鑿滃崟鍚嶇О鏄惁鍞竴 + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁撴灉 + */ + @Override + public boolean checkMenuNameUnique(SysMenu menu) + { + Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId(); + SysMenu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId()); + if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 鑾峰彇璺敱鍚嶇О + * + * @param menu 鑿滃崟淇℃伅 + * @return 璺敱鍚嶇О + */ + public String getRouteName(SysMenu menu) + { + // 闈炲閾惧苟涓旀槸涓绾х洰褰曪紙绫诲瀷涓虹洰褰曪級 + if (isMenuFrame(menu)) + { + return StringUtils.EMPTY; + } + return getRouteName(menu.getRouteName(), menu.getPath()); + } + + /** + * 鑾峰彇璺敱鍚嶇О锛屽娌℃湁閰嶇疆璺敱鍚嶇О鍒欏彇璺敱鍦板潃 + * + * @param routerName 璺敱鍚嶇О + * @param path 璺敱鍦板潃 + * @return 璺敱鍚嶇О锛堥┘宄版牸寮忥級 + */ + public String getRouteName(String name, String path) + { + String routerName = StringUtils.isNotEmpty(name) ? name : path; + return StringUtils.capitalize(routerName); + } + + /** + * 鑾峰彇璺敱鍦板潃 + * + * @param menu 鑿滃崟淇℃伅 + * @return 璺敱鍦板潃 + */ + public String getRouterPath(SysMenu menu) + { + String routerPath = menu.getPath(); + // 鍐呴摼鎵撳紑澶栫綉鏂瑰紡 + if (menu.getParentId().intValue() != 0 && isInnerLink(menu)) + { + routerPath = innerLinkReplaceEach(routerPath); + } + // 闈炲閾惧苟涓旀槸涓绾х洰褰曪紙绫诲瀷涓虹洰褰曪級 + if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType()) + && UserConstants.NO_FRAME.equals(menu.getIsFrame())) + { + routerPath = "/" + menu.getPath(); + } + // 闈炲閾惧苟涓旀槸涓绾х洰褰曪紙绫诲瀷涓鸿彍鍗曪級 + else if (isMenuFrame(menu)) + { + routerPath = "/"; + } + return routerPath; + } + + /** + * 鑾峰彇缁勪欢淇℃伅 + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁勪欢淇℃伅 + */ + public String getComponent(SysMenu menu) + { + String component = UserConstants.LAYOUT; + if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu)) + { + component = menu.getComponent(); + } + else if (StringUtils.isEmpty(menu.getComponent()) && menu.getParentId().intValue() != 0 && isInnerLink(menu)) + { + component = UserConstants.INNER_LINK; + } + else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu)) + { + component = UserConstants.PARENT_VIEW; + } + return component; + } + + /** + * 鏄惁涓鸿彍鍗曞唴閮ㄨ烦杞 + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁撴灉 + */ + public boolean isMenuFrame(SysMenu menu) + { + return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType()) + && menu.getIsFrame().equals(UserConstants.NO_FRAME); + } + + /** + * 鏄惁涓哄唴閾剧粍浠 + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁撴灉 + */ + public boolean isInnerLink(SysMenu menu) + { + return menu.getIsFrame().equals(UserConstants.NO_FRAME) && StringUtils.ishttp(menu.getPath()); + } + + /** + * 鏄惁涓簆arent_view缁勪欢 + * + * @param menu 鑿滃崟淇℃伅 + * @return 缁撴灉 + */ + public boolean isParentView(SysMenu menu) + { + return menu.getParentId().intValue() != 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType()); + } + + /** + * 鏍规嵁鐖惰妭鐐圭殑ID鑾峰彇鎵鏈夊瓙鑺傜偣 + * + * @param list 鍒嗙被琛 + * @param parentId 浼犲叆鐨勭埗鑺傜偣ID + * @return String + */ + public List getChildPerms(List list, int parentId) + { + List returnList = new ArrayList(); + for (Iterator iterator = list.iterator(); iterator.hasNext();) + { + SysMenu t = (SysMenu) iterator.next(); + // 涓銆佹牴鎹紶鍏ョ殑鏌愪釜鐖惰妭鐐笽D,閬嶅巻璇ョ埗鑺傜偣鐨勬墍鏈夊瓙鑺傜偣 + if (t.getParentId() == parentId) + { + recursionFn(list, t); + returnList.add(t); + } + } + return returnList; + } + + /** + * 閫掑綊鍒楄〃 + * + * @param list 鍒嗙被琛 + * @param t 瀛愯妭鐐 + */ + private void recursionFn(List list, SysMenu t) + { + // 寰楀埌瀛愯妭鐐瑰垪琛 + List childList = getChildList(list, t); + t.setChildren(childList); + for (SysMenu tChild : childList) + { + if (hasChild(list, tChild)) + { + recursionFn(list, tChild); + } + } + } + + /** + * 寰楀埌瀛愯妭鐐瑰垪琛 + */ + private List getChildList(List list, SysMenu t) + { + List tlist = new ArrayList(); + Iterator it = list.iterator(); + while (it.hasNext()) + { + SysMenu n = (SysMenu) it.next(); + if (n.getParentId().longValue() == t.getMenuId().longValue()) + { + tlist.add(n); + } + } + return tlist; + } + + /** + * 鍒ゆ柇鏄惁鏈夊瓙鑺傜偣 + */ + private boolean hasChild(List list, SysMenu t) + { + return getChildList(list, t).size() > 0; + } + + /** + * 鍐呴摼鍩熷悕鐗规畩瀛楃鏇挎崲 + * + * @return 鏇挎崲鍚庣殑鍐呴摼鍩熷悕 + */ + public String innerLinkReplaceEach(String path) + { + return StringUtils.replaceEach(path, new String[] { Constants.HTTP, Constants.HTTPS, Constants.WWW, ".", ":" }, + new String[] { "", "", "", "/", "/" }); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..73584062f68c78eb594afd1bdb1a7465059bd9db --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java @@ -0,0 +1,93 @@ +package com.ruoyi.system.service.impl; + +import com.ruoyi.system.domain.SysNotice; +import com.ruoyi.system.mapper.SysNoticeMapper; +import com.ruoyi.system.service.ISysNoticeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 鍏憡 鏈嶅姟灞傚疄鐜 + * + * @author ruoyi + */ +@Service +public class SysNoticeServiceImpl implements ISysNoticeService +{ + @Autowired + private SysNoticeMapper noticeMapper; + + /** + * 鏌ヨ鍏憡淇℃伅 + * + * @param noticeId 鍏憡ID + * @return 鍏憡淇℃伅 + */ + @Override + public SysNotice selectNoticeById(Long noticeId) + { + return noticeMapper.selectNoticeById(noticeId); + } + + /** + * 鏌ヨ鍏憡鍒楄〃 + * + * @param notice 鍏憡淇℃伅 + * @return 鍏憡闆嗗悎 + */ + @Override + public List selectNoticeList(SysNotice notice) + { + return noticeMapper.selectNoticeList(notice); + } + + /** + * 鏂板鍏憡 + * + * @param notice 鍏憡淇℃伅 + * @return 缁撴灉 + */ + @Override + public int insertNotice(SysNotice notice) + { + return noticeMapper.insertNotice(notice); + } + + /** + * 淇敼鍏憡 + * + * @param notice 鍏憡淇℃伅 + * @return 缁撴灉 + */ + @Override + public int updateNotice(SysNotice notice) + { + return noticeMapper.updateNotice(notice); + } + + /** + * 鍒犻櫎鍏憡瀵硅薄 + * + * @param noticeId 鍏憡ID + * @return 缁撴灉 + */ + @Override + public int deleteNoticeById(Long noticeId) + { + return noticeMapper.deleteNoticeById(noticeId); + } + + /** + * 鎵归噺鍒犻櫎鍏憡淇℃伅 + * + * @param noticeIds 闇瑕佸垹闄ょ殑鍏憡ID + * @return 缁撴灉 + */ + @Override + public int deleteNoticeByIds(Long[] noticeIds) + { + return noticeMapper.deleteNoticeByIds(noticeIds); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..90a22224bd5f6181211505f128122701f0fcbb0a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java @@ -0,0 +1,77 @@ +package com.ruoyi.system.service.impl; + +import com.ruoyi.system.domain.SysOperLog; +import com.ruoyi.system.mapper.SysOperLogMapper; +import com.ruoyi.system.service.ISysOperLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 鎿嶄綔鏃ュ織 鏈嶅姟灞傚鐞 + * + * @author ruoyi + */ +@Service +public class SysOperLogServiceImpl implements ISysOperLogService +{ + @Autowired + private SysOperLogMapper operLogMapper; + + /** + * 鏂板鎿嶄綔鏃ュ織 + * + * @param operLog 鎿嶄綔鏃ュ織瀵硅薄 + */ + @Override + public void insertOperlog(SysOperLog operLog) + { + operLogMapper.insertOperlog(operLog); + } + + /** + * 鏌ヨ绯荤粺鎿嶄綔鏃ュ織闆嗗悎 + * + * @param operLog 鎿嶄綔鏃ュ織瀵硅薄 + * @return 鎿嶄綔鏃ュ織闆嗗悎 + */ + @Override + public List selectOperLogList(SysOperLog operLog) + { + return operLogMapper.selectOperLogList(operLog); + } + + /** + * 鎵归噺鍒犻櫎绯荤粺鎿嶄綔鏃ュ織 + * + * @param operIds 闇瑕佸垹闄ょ殑鎿嶄綔鏃ュ織ID + * @return 缁撴灉 + */ + @Override + public int deleteOperLogByIds(Long[] operIds) + { + return operLogMapper.deleteOperLogByIds(operIds); + } + + /** + * 鏌ヨ鎿嶄綔鏃ュ織璇︾粏 + * + * @param operId 鎿嶄綔ID + * @return 鎿嶄綔鏃ュ織瀵硅薄 + */ + @Override + public SysOperLog selectOperLogById(Long operId) + { + return operLogMapper.selectOperLogById(operId); + } + + /** + * 娓呯┖鎿嶄綔鏃ュ織 + */ + @Override + public void cleanOperLog() + { + operLogMapper.cleanOperLog(); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..20e86251b55d038cfd82c7884ce721b2c27f006f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java @@ -0,0 +1,179 @@ +package com.ruoyi.system.service.impl; + +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.SysPost; +import com.ruoyi.system.mapper.SysPostMapper; +import com.ruoyi.system.mapper.SysUserPostMapper; +import com.ruoyi.system.service.ISysPostService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 宀椾綅淇℃伅 鏈嶅姟灞傚鐞 + * + * @author ruoyi + */ +@Service +public class SysPostServiceImpl implements ISysPostService +{ + @Autowired + private SysPostMapper postMapper; + + @Autowired + private SysUserPostMapper userPostMapper; + + /** + * 鏌ヨ宀椾綅淇℃伅闆嗗悎 + * + * @param post 宀椾綅淇℃伅 + * @return 宀椾綅淇℃伅闆嗗悎 + */ + @Override + public List selectPostList(SysPost post) + { + return postMapper.selectPostList(post); + } + + /** + * 鏌ヨ鎵鏈夊矖浣 + * + * @return 宀椾綅鍒楄〃 + */ + @Override + public List selectPostAll() + { + return postMapper.selectPostAll(); + } + + /** + * 閫氳繃宀椾綅ID鏌ヨ宀椾綅淇℃伅 + * + * @param postId 宀椾綅ID + * @return 瑙掕壊瀵硅薄淇℃伅 + */ + @Override + public SysPost selectPostById(Long postId) + { + return postMapper.selectPostById(postId); + } + + /** + * 鏍规嵁鐢ㄦ埛ID鑾峰彇宀椾綅閫夋嫨妗嗗垪琛 + * + * @param userId 鐢ㄦ埛ID + * @return 閫変腑宀椾綅ID鍒楄〃 + */ + @Override + public List selectPostListByUserId(Long userId) + { + return postMapper.selectPostListByUserId(userId); + } + + /** + * 鏍¢獙宀椾綅鍚嶇О鏄惁鍞竴 + * + * @param post 宀椾綅淇℃伅 + * @return 缁撴灉 + */ + @Override + public boolean checkPostNameUnique(SysPost post) + { + Long postId = StringUtils.isNull(post.getPostId()) ? -1L : post.getPostId(); + SysPost info = postMapper.checkPostNameUnique(post.getPostName()); + if (StringUtils.isNotNull(info) && info.getPostId().longValue() != postId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 鏍¢獙宀椾綅缂栫爜鏄惁鍞竴 + * + * @param post 宀椾綅淇℃伅 + * @return 缁撴灉 + */ + @Override + public boolean checkPostCodeUnique(SysPost post) + { + Long postId = StringUtils.isNull(post.getPostId()) ? -1L : post.getPostId(); + SysPost info = postMapper.checkPostCodeUnique(post.getPostCode()); + if (StringUtils.isNotNull(info) && info.getPostId().longValue() != postId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 閫氳繃宀椾綅ID鏌ヨ宀椾綅浣跨敤鏁伴噺 + * + * @param postId 宀椾綅ID + * @return 缁撴灉 + */ + @Override + public int countUserPostById(Long postId) + { + return userPostMapper.countUserPostById(postId); + } + + /** + * 鍒犻櫎宀椾綅淇℃伅 + * + * @param postId 宀椾綅ID + * @return 缁撴灉 + */ + @Override + public int deletePostById(Long postId) + { + return postMapper.deletePostById(postId); + } + + /** + * 鎵归噺鍒犻櫎宀椾綅淇℃伅 + * + * @param postIds 闇瑕佸垹闄ょ殑宀椾綅ID + * @return 缁撴灉 + */ + @Override + public int deletePostByIds(Long[] postIds) + { + for (Long postId : postIds) + { + SysPost post = selectPostById(postId); + if (countUserPostById(postId) > 0) + { + throw new ServiceException(String.format("%1$s宸插垎閰,涓嶈兘鍒犻櫎", post.getPostName())); + } + } + return postMapper.deletePostByIds(postIds); + } + + /** + * 鏂板淇濆瓨宀椾綅淇℃伅 + * + * @param post 宀椾綅淇℃伅 + * @return 缁撴灉 + */ + @Override + public int insertPost(SysPost post) + { + return postMapper.insertPost(post); + } + + /** + * 淇敼淇濆瓨宀椾綅淇℃伅 + * + * @param post 宀椾綅淇℃伅 + * @return 缁撴灉 + */ + @Override + public int updatePost(SysPost post) + { + return postMapper.updatePost(post); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..31e92becab6bbf6ef8b2c5915e0ba3a6c378e476 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java @@ -0,0 +1,424 @@ +package com.ruoyi.system.service.impl; + +import com.ruoyi.common.annotation.DataScope; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.system.domain.SysRoleDept; +import com.ruoyi.system.domain.SysRoleMenu; +import com.ruoyi.system.domain.SysUserRole; +import com.ruoyi.system.mapper.SysRoleDeptMapper; +import com.ruoyi.system.mapper.SysRoleMapper; +import com.ruoyi.system.mapper.SysRoleMenuMapper; +import com.ruoyi.system.mapper.SysUserRoleMapper; +import com.ruoyi.system.service.ISysRoleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; + +/** + * 瑙掕壊 涓氬姟灞傚鐞 + * + * @author ruoyi + */ +@Service +public class SysRoleServiceImpl implements ISysRoleService +{ + @Autowired + private SysRoleMapper roleMapper; + + @Autowired + private SysRoleMenuMapper roleMenuMapper; + + @Autowired + private SysUserRoleMapper userRoleMapper; + + @Autowired + private SysRoleDeptMapper roleDeptMapper; + + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ瑙掕壊鏁版嵁 + * + * @param role 瑙掕壊淇℃伅 + * @return 瑙掕壊鏁版嵁闆嗗悎淇℃伅 + */ + @Override + @DataScope(deptAlias = "d") + public List selectRoleList(SysRole role) + { + return roleMapper.selectRoleList(role); + } + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ瑙掕壊 + * + * @param userId 鐢ㄦ埛ID + * @return 瑙掕壊鍒楄〃 + */ + @Override + public List selectRolesByUserId(Long userId) + { + List userRoles = roleMapper.selectRolePermissionByUserId(userId); + List roles = selectRoleAll(); + for (SysRole role : roles) + { + for (SysRole userRole : userRoles) + { + if (role.getRoleId().longValue() == userRole.getRoleId().longValue()) + { + role.setFlag(true); + break; + } + } + } + return roles; + } + + /** + * 鏍规嵁鐢ㄦ埛ID鏌ヨ鏉冮檺 + * + * @param userId 鐢ㄦ埛ID + * @return 鏉冮檺鍒楄〃 + */ + @Override + public Set selectRolePermissionByUserId(Long userId) + { + List perms = roleMapper.selectRolePermissionByUserId(userId); + Set permsSet = new HashSet<>(); + for (SysRole perm : perms) + { + if (StringUtils.isNotNull(perm)) + { + permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(","))); + } + } + return permsSet; + } + + /** + * 鏌ヨ鎵鏈夎鑹 + * + * @return 瑙掕壊鍒楄〃 + */ + @Override + public List selectRoleAll() + { + return SpringUtils.getAopProxy(this).selectRoleList(new SysRole()); + } + + /** + * 鏍规嵁鐢ㄦ埛ID鑾峰彇瑙掕壊閫夋嫨妗嗗垪琛 + * + * @param userId 鐢ㄦ埛ID + * @return 閫変腑瑙掕壊ID鍒楄〃 + */ + @Override + public List selectRoleListByUserId(Long userId) + { + return roleMapper.selectRoleListByUserId(userId); + } + + /** + * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊 + * + * @param roleId 瑙掕壊ID + * @return 瑙掕壊瀵硅薄淇℃伅 + */ + @Override + public SysRole selectRoleById(Long roleId) + { + return roleMapper.selectRoleById(roleId); + } + + /** + * 鏍¢獙瑙掕壊鍚嶇О鏄惁鍞竴 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + @Override + public boolean checkRoleNameUnique(SysRole role) + { + Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId(); + SysRole info = roleMapper.checkRoleNameUnique(role.getRoleName()); + if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 鏍¢獙瑙掕壊鏉冮檺鏄惁鍞竴 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + @Override + public boolean checkRoleKeyUnique(SysRole role) + { + Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId(); + SysRole info = roleMapper.checkRoleKeyUnique(role.getRoleKey()); + if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 鏍¢獙瑙掕壊鏄惁鍏佽鎿嶄綔 + * + * @param role 瑙掕壊淇℃伅 + */ + @Override + public void checkRoleAllowed(SysRole role) + { + if (StringUtils.isNotNull(role.getRoleId()) && role.isAdmin()) + { + throw new ServiceException("涓嶅厑璁告搷浣滆秴绾х鐞嗗憳瑙掕壊"); + } + } + + /** + * 鏍¢獙瑙掕壊鏄惁鏈夋暟鎹潈闄 + * + * @param roleIds 瑙掕壊id + */ + @Override + public void checkRoleDataScope(Long... roleIds) + { + if (!SysUser.isAdmin(SecurityUtils.getUserId())) + { + for (Long roleId : roleIds) + { + SysRole role = new SysRole(); + role.setRoleId(roleId); + List roles = SpringUtils.getAopProxy(this).selectRoleList(role); + if (StringUtils.isEmpty(roles)) + { + throw new ServiceException("娌℃湁鏉冮檺璁块棶瑙掕壊鏁版嵁锛"); + } + } + } + } + + /** + * 閫氳繃瑙掕壊ID鏌ヨ瑙掕壊浣跨敤鏁伴噺 + * + * @param roleId 瑙掕壊ID + * @return 缁撴灉 + */ + @Override + public int countUserRoleByRoleId(Long roleId) + { + return userRoleMapper.countUserRoleByRoleId(roleId); + } + + /** + * 鏂板淇濆瓨瑙掕壊淇℃伅 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + @Override + @Transactional + public int insertRole(SysRole role) + { + // 鏂板瑙掕壊淇℃伅 + roleMapper.insertRole(role); + return insertRoleMenu(role); + } + + /** + * 淇敼淇濆瓨瑙掕壊淇℃伅 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + @Override + @Transactional + public int updateRole(SysRole role) + { + // 淇敼瑙掕壊淇℃伅 + roleMapper.updateRole(role); + // 鍒犻櫎瑙掕壊涓庤彍鍗曞叧鑱 + roleMenuMapper.deleteRoleMenuByRoleId(role.getRoleId()); + return insertRoleMenu(role); + } + + /** + * 淇敼瑙掕壊鐘舵 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + @Override + public int updateRoleStatus(SysRole role) + { + return roleMapper.updateRole(role); + } + + /** + * 淇敼鏁版嵁鏉冮檺淇℃伅 + * + * @param role 瑙掕壊淇℃伅 + * @return 缁撴灉 + */ + @Override + @Transactional + public int authDataScope(SysRole role) + { + // 淇敼瑙掕壊淇℃伅 + roleMapper.updateRole(role); + // 鍒犻櫎瑙掕壊涓庨儴闂ㄥ叧鑱 + roleDeptMapper.deleteRoleDeptByRoleId(role.getRoleId()); + // 鏂板瑙掕壊鍜岄儴闂ㄤ俊鎭紙鏁版嵁鏉冮檺锛 + return insertRoleDept(role); + } + + /** + * 鏂板瑙掕壊鑿滃崟淇℃伅 + * + * @param role 瑙掕壊瀵硅薄 + */ + public int insertRoleMenu(SysRole role) + { + int rows = 1; + // 鏂板鐢ㄦ埛涓庤鑹茬鐞 + List list = new ArrayList(); + for (Long menuId : role.getMenuIds()) + { + SysRoleMenu rm = new SysRoleMenu(); + rm.setRoleId(role.getRoleId()); + rm.setMenuId(menuId); + list.add(rm); + } + if (list.size() > 0) + { + rows = roleMenuMapper.batchRoleMenu(list); + } + return rows; + } + + /** + * 鏂板瑙掕壊閮ㄩ棬淇℃伅(鏁版嵁鏉冮檺) + * + * @param role 瑙掕壊瀵硅薄 + */ + public int insertRoleDept(SysRole role) + { + int rows = 1; + // 鏂板瑙掕壊涓庨儴闂紙鏁版嵁鏉冮檺锛夌鐞 + List list = new ArrayList(); + for (Long deptId : role.getDeptIds()) + { + SysRoleDept rd = new SysRoleDept(); + rd.setRoleId(role.getRoleId()); + rd.setDeptId(deptId); + list.add(rd); + } + if (list.size() > 0) + { + rows = roleDeptMapper.batchRoleDept(list); + } + return rows; + } + + /** + * 閫氳繃瑙掕壊ID鍒犻櫎瑙掕壊 + * + * @param roleId 瑙掕壊ID + * @return 缁撴灉 + */ + @Override + @Transactional + public int deleteRoleById(Long roleId) + { + // 鍒犻櫎瑙掕壊涓庤彍鍗曞叧鑱 + roleMenuMapper.deleteRoleMenuByRoleId(roleId); + // 鍒犻櫎瑙掕壊涓庨儴闂ㄥ叧鑱 + roleDeptMapper.deleteRoleDeptByRoleId(roleId); + return roleMapper.deleteRoleById(roleId); + } + + /** + * 鎵归噺鍒犻櫎瑙掕壊淇℃伅 + * + * @param roleIds 闇瑕佸垹闄ょ殑瑙掕壊ID + * @return 缁撴灉 + */ + @Override + @Transactional + public int deleteRoleByIds(Long[] roleIds) + { + for (Long roleId : roleIds) + { + checkRoleAllowed(new SysRole(roleId)); + checkRoleDataScope(roleId); + SysRole role = selectRoleById(roleId); + if (countUserRoleByRoleId(roleId) > 0) + { + throw new ServiceException(String.format("%1$s宸插垎閰,涓嶈兘鍒犻櫎", role.getRoleName())); + } + } + // 鍒犻櫎瑙掕壊涓庤彍鍗曞叧鑱 + roleMenuMapper.deleteRoleMenu(roleIds); + // 鍒犻櫎瑙掕壊涓庨儴闂ㄥ叧鑱 + roleDeptMapper.deleteRoleDept(roleIds); + return roleMapper.deleteRoleByIds(roleIds); + } + + /** + * 鍙栨秷鎺堟潈鐢ㄦ埛瑙掕壊 + * + * @param userRole 鐢ㄦ埛鍜岃鑹插叧鑱斾俊鎭 + * @return 缁撴灉 + */ + @Override + public int deleteAuthUser(SysUserRole userRole) + { + return userRoleMapper.deleteUserRoleInfo(userRole); + } + + /** + * 鎵归噺鍙栨秷鎺堟潈鐢ㄦ埛瑙掕壊 + * + * @param roleId 瑙掕壊ID + * @param userIds 闇瑕佸彇娑堟巿鏉冪殑鐢ㄦ埛鏁版嵁ID + * @return 缁撴灉 + */ + @Override + public int deleteAuthUsers(Long roleId, Long[] userIds) + { + return userRoleMapper.deleteUserRoleInfos(roleId, userIds); + } + + /** + * 鎵归噺閫夋嫨鎺堟潈鐢ㄦ埛瑙掕壊 + * + * @param roleId 瑙掕壊ID + * @param userIds 闇瑕佹巿鏉冪殑鐢ㄦ埛鏁版嵁ID + * @return 缁撴灉 + */ + @Override + public int insertAuthUsers(Long roleId, Long[] userIds) + { + // 鏂板鐢ㄦ埛涓庤鑹茬鐞 + List list = new ArrayList(); + for (Long userId : userIds) + { + SysUserRole ur = new SysUserRole(); + ur.setUserId(userId); + ur.setRoleId(roleId); + list.add(ur); + } + return userRoleMapper.batchUserRole(list); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..6d1fd75028fc34ca683b048ecbff06587706c1cd --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java @@ -0,0 +1,96 @@ +package com.ruoyi.system.service.impl; + +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.SysUserOnline; +import com.ruoyi.system.service.ISysUserOnlineService; +import org.springframework.stereotype.Service; + +/** + * 鍦ㄧ嚎鐢ㄦ埛 鏈嶅姟灞傚鐞 + * + * @author ruoyi + */ +@Service +public class SysUserOnlineServiceImpl implements ISysUserOnlineService +{ + /** + * 閫氳繃鐧诲綍鍦板潃鏌ヨ淇℃伅 + * + * @param ipaddr 鐧诲綍鍦板潃 + * @param user 鐢ㄦ埛淇℃伅 + * @return 鍦ㄧ嚎鐢ㄦ埛淇℃伅 + */ + @Override + public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user) + { + if (StringUtils.equals(ipaddr, user.getIpaddr())) + { + return loginUserToUserOnline(user); + } + return null; + } + + /** + * 閫氳繃鐢ㄦ埛鍚嶇О鏌ヨ淇℃伅 + * + * @param userName 鐢ㄦ埛鍚嶇О + * @param user 鐢ㄦ埛淇℃伅 + * @return 鍦ㄧ嚎鐢ㄦ埛淇℃伅 + */ + @Override + public SysUserOnline selectOnlineByUserName(String userName, LoginUser user) + { + if (StringUtils.equals(userName, user.getUsername())) + { + return loginUserToUserOnline(user); + } + return null; + } + + /** + * 閫氳繃鐧诲綍鍦板潃/鐢ㄦ埛鍚嶇О鏌ヨ淇℃伅 + * + * @param ipaddr 鐧诲綍鍦板潃 + * @param userName 鐢ㄦ埛鍚嶇О + * @param user 鐢ㄦ埛淇℃伅 + * @return 鍦ㄧ嚎鐢ㄦ埛淇℃伅 + */ + @Override + public SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user) + { + if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername())) + { + return loginUserToUserOnline(user); + } + return null; + } + + /** + * 璁剧疆鍦ㄧ嚎鐢ㄦ埛淇℃伅 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 鍦ㄧ嚎鐢ㄦ埛 + */ + @Override + public SysUserOnline loginUserToUserOnline(LoginUser user) + { + if (StringUtils.isNull(user) || StringUtils.isNull(user.getUser())) + { + return null; + } + SysUserOnline sysUserOnline = new SysUserOnline(); + sysUserOnline.setTokenId(user.getToken()); + sysUserOnline.setUserName(user.getUsername()); + sysUserOnline.setIpaddr(user.getIpaddr()); + sysUserOnline.setLoginLocation(user.getLoginLocation()); + sysUserOnline.setBrowser(user.getBrowser()); + sysUserOnline.setOs(user.getOs()); + sysUserOnline.setLoginTime(user.getLoginTime()); + if (StringUtils.isNotNull(user.getUser().getDept())) + { + sysUserOnline.setDeptName(user.getUser().getDept().getDeptName()); + } + return sysUserOnline; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..e9c8c77daf7833bc3ca85d4145e102ee8f7cc4b4 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java @@ -0,0 +1,558 @@ +package com.ruoyi.system.service.impl; + +import com.ruoyi.common.annotation.DataScope; +import com.ruoyi.common.constant.UserConstants; +import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.core.domain.entity.SysUser; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.common.utils.SecurityUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.bean.BeanValidators; +import com.ruoyi.common.utils.spring.SpringUtils; +import com.ruoyi.system.domain.SysPost; +import com.ruoyi.system.domain.SysUserPost; +import com.ruoyi.system.domain.SysUserRole; +import com.ruoyi.system.mapper.*; +import com.ruoyi.system.service.ISysConfigService; +import com.ruoyi.system.service.ISysDeptService; +import com.ruoyi.system.service.ISysUserService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import javax.validation.Validator; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 鐢ㄦ埛 涓氬姟灞傚鐞 + * + * @author ruoyi + */ +@Service +public class SysUserServiceImpl implements ISysUserService +{ + private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class); + + @Autowired + private SysUserMapper userMapper; + + @Autowired + private SysRoleMapper roleMapper; + + @Autowired + private SysPostMapper postMapper; + + @Autowired + private SysUserRoleMapper userRoleMapper; + + @Autowired + private SysUserPostMapper userPostMapper; + + @Autowired + private ISysConfigService configService; + + @Autowired + private ISysDeptService deptService; + + @Autowired + protected Validator validator; + + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鐢ㄦ埛鍒楄〃 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅 + */ + @Override + @DataScope(deptAlias = "d", userAlias = "u") + public List selectUserList(SysUser user) + { + return userMapper.selectUserList(user); + } + + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ宸插垎閰嶇敤鎴疯鑹插垪琛 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅 + */ + @Override + @DataScope(deptAlias = "d", userAlias = "u") + public List selectAllocatedList(SysUser user) + { + return userMapper.selectAllocatedList(user); + } + + /** + * 鏍规嵁鏉′欢鍒嗛〉鏌ヨ鏈垎閰嶇敤鎴疯鑹插垪琛 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 鐢ㄦ埛淇℃伅闆嗗悎淇℃伅 + */ + @Override + @DataScope(deptAlias = "d", userAlias = "u") + public List selectUnallocatedList(SysUser user) + { + return userMapper.selectUnallocatedList(user); + } + + /** + * 閫氳繃鐢ㄦ埛鍚嶆煡璇㈢敤鎴 + * + * @param userName 鐢ㄦ埛鍚 + * @return 鐢ㄦ埛瀵硅薄淇℃伅 + */ + @Override + public SysUser selectUserByUserName(String userName) + { + return userMapper.selectUserByUserName(userName); + } + + /** + * 閫氳繃鐢ㄦ埛ID鏌ヨ鐢ㄦ埛 + * + * @param userId 鐢ㄦ埛ID + * @return 鐢ㄦ埛瀵硅薄淇℃伅 + */ + @Override + public SysUser selectUserById(Long userId) + { + return userMapper.selectUserById(userId); + } + + /** + * 鏌ヨ鐢ㄦ埛鎵灞炶鑹茬粍 + * + * @param userName 鐢ㄦ埛鍚 + * @return 缁撴灉 + */ + @Override + public String selectUserRoleGroup(String userName) + { + List list = roleMapper.selectRolesByUserName(userName); + if (CollectionUtils.isEmpty(list)) + { + return StringUtils.EMPTY; + } + return list.stream().map(SysRole::getRoleName).collect(Collectors.joining(",")); + } + + /** + * 鏌ヨ鐢ㄦ埛鎵灞炲矖浣嶇粍 + * + * @param userName 鐢ㄦ埛鍚 + * @return 缁撴灉 + */ + @Override + public String selectUserPostGroup(String userName) + { + List list = postMapper.selectPostsByUserName(userName); + if (CollectionUtils.isEmpty(list)) + { + return StringUtils.EMPTY; + } + return list.stream().map(SysPost::getPostName).collect(Collectors.joining(",")); + } + + /** + * 鏍¢獙鐢ㄦ埛鍚嶇О鏄惁鍞竴 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + @Override + public boolean checkUserNameUnique(SysUser user) + { + Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); + SysUser info = userMapper.checkUserNameUnique(user.getUserName()); + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 鏍¢獙鎵嬫満鍙风爜鏄惁鍞竴 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return + */ + @Override + public boolean checkPhoneUnique(SysUser user) + { + Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); + SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber()); + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 鏍¢獙email鏄惁鍞竴 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return + */ + @Override + public boolean checkEmailUnique(SysUser user) + { + Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); + SysUser info = userMapper.checkEmailUnique(user.getEmail()); + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) + { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 鏍¢獙鐢ㄦ埛鏄惁鍏佽鎿嶄綔 + * + * @param user 鐢ㄦ埛淇℃伅 + */ + @Override + public void checkUserAllowed(SysUser user) + { + if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) + { + throw new ServiceException("涓嶅厑璁告搷浣滆秴绾х鐞嗗憳鐢ㄦ埛"); + } + } + + /** + * 鏍¢獙鐢ㄦ埛鏄惁鏈夋暟鎹潈闄 + * + * @param userId 鐢ㄦ埛id + */ + @Override + public void checkUserDataScope(Long userId) + { + if (!SysUser.isAdmin(SecurityUtils.getUserId())) + { + SysUser user = new SysUser(); + user.setUserId(userId); + List users = SpringUtils.getAopProxy(this).selectUserList(user); + if (StringUtils.isEmpty(users)) + { + throw new ServiceException("娌℃湁鏉冮檺璁块棶鐢ㄦ埛鏁版嵁锛"); + } + } + } + + /** + * 鏂板淇濆瓨鐢ㄦ埛淇℃伅 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + @Override + @Transactional + public int insertUser(SysUser user) + { + // 鏂板鐢ㄦ埛淇℃伅 + int rows = userMapper.insertUser(user); + // 鏂板鐢ㄦ埛宀椾綅鍏宠仈 + insertUserPost(user); + // 鏂板鐢ㄦ埛涓庤鑹茬鐞 + insertUserRole(user); + return rows; + } + + /** + * 娉ㄥ唽鐢ㄦ埛淇℃伅 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + @Override + public boolean registerUser(SysUser user) + { + return userMapper.insertUser(user) > 0; + } + + /** + * 淇敼淇濆瓨鐢ㄦ埛淇℃伅 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + @Override + @Transactional + public int updateUser(SysUser user) + { + Long userId = user.getUserId(); + // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧鑱 + userRoleMapper.deleteUserRoleByUserId(userId); + // 鏂板鐢ㄦ埛涓庤鑹茬鐞 + insertUserRole(user); + // 鍒犻櫎鐢ㄦ埛涓庡矖浣嶅叧鑱 + userPostMapper.deleteUserPostByUserId(userId); + // 鏂板鐢ㄦ埛涓庡矖浣嶇鐞 + insertUserPost(user); + return userMapper.updateUser(user); + } + + /** + * 鐢ㄦ埛鎺堟潈瑙掕壊 + * + * @param userId 鐢ㄦ埛ID + * @param roleIds 瑙掕壊缁 + */ + @Override + @Transactional + public void insertUserAuth(Long userId, Long[] roleIds) + { + userRoleMapper.deleteUserRoleByUserId(userId); + insertUserRole(userId, roleIds); + } + + /** + * 淇敼鐢ㄦ埛鐘舵 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + @Override + public int updateUserStatus(SysUser user) + { + return userMapper.updateUser(user); + } + + /** + * 淇敼鐢ㄦ埛鍩烘湰淇℃伅 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + @Override + public int updateUserProfile(SysUser user) + { + return userMapper.updateUser(user); + } + + /** + * 淇敼鐢ㄦ埛澶村儚 + * + * @param userName 鐢ㄦ埛鍚 + * @param avatar 澶村儚鍦板潃 + * @return 缁撴灉 + */ + @Override + public boolean updateUserAvatar(String userName, String avatar) + { + return userMapper.updateUserAvatar(userName, avatar) > 0; + } + + /** + * 閲嶇疆鐢ㄦ埛瀵嗙爜 + * + * @param user 鐢ㄦ埛淇℃伅 + * @return 缁撴灉 + */ + @Override + public int resetPwd(SysUser user) + { + return userMapper.updateUser(user); + } + + /** + * 閲嶇疆鐢ㄦ埛瀵嗙爜 + * + * @param userName 鐢ㄦ埛鍚 + * @param password 瀵嗙爜 + * @return 缁撴灉 + */ + @Override + public int resetUserPwd(String userName, String password) + { + return userMapper.resetUserPwd(userName, password); + } + + /** + * 鏂板鐢ㄦ埛瑙掕壊淇℃伅 + * + * @param user 鐢ㄦ埛瀵硅薄 + */ + public void insertUserRole(SysUser user) + { + List roles = this.insertUserRole(user.getUserId(), user.getRoleIds()); + long count1 = roles.stream().filter(item -> item.getRoleKey().equals("evaluateAgency")).count(); + if (count1 > 0 && user.getEvaluateAgencyId() == null){ + throw new ServiceException("璇烽夋嫨褰掑睘鏈烘瀯"); + } + long count2 = roles.stream().filter(item -> item.getRoleKey().equals("localLearningCenter")).count(); + if (count2 > 0 && user.getStudyCenterId() == null){ + throw new ServiceException("璇烽夋嫨瀛︿範涓績"); + } + } + + /** + * 鏂板鐢ㄦ埛宀椾綅淇℃伅 + * + * @param user 鐢ㄦ埛瀵硅薄 + */ + public void insertUserPost(SysUser user) + { + Long[] posts = user.getPostIds(); + if (StringUtils.isNotEmpty(posts)) + { + // 鏂板鐢ㄦ埛涓庡矖浣嶇鐞 + List list = new ArrayList(posts.length); + for (Long postId : posts) + { + SysUserPost up = new SysUserPost(); + up.setUserId(user.getUserId()); + up.setPostId(postId); + list.add(up); + } + userPostMapper.batchUserPost(list); + } + } + + /** + * 鏂板鐢ㄦ埛瑙掕壊淇℃伅 + * + * @param userId 鐢ㄦ埛ID + * @param roleIds 瑙掕壊缁 + */ + public List insertUserRole(Long userId, Long[] roleIds) + { + List roleList = new ArrayList<>(); + if (StringUtils.isNotEmpty(roleIds)) + { + // 鏂板鐢ㄦ埛涓庤鑹茬鐞 + List list = new ArrayList(roleIds.length); + roleList = roleMapper.selectRoleByIds(roleIds); + for (Long roleId : roleIds) + { + SysUserRole ur = new SysUserRole(); + ur.setUserId(userId); + ur.setRoleId(roleId); + list.add(ur); + } + userRoleMapper.batchUserRole(list); + } + return roleList; + } + + /** + * 閫氳繃鐢ㄦ埛ID鍒犻櫎鐢ㄦ埛 + * + * @param userId 鐢ㄦ埛ID + * @return 缁撴灉 + */ + @Override + @Transactional + public int deleteUserById(Long userId) + { + // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧鑱 + userRoleMapper.deleteUserRoleByUserId(userId); + // 鍒犻櫎鐢ㄦ埛涓庡矖浣嶈〃 + userPostMapper.deleteUserPostByUserId(userId); + return userMapper.deleteUserById(userId); + } + + /** + * 鎵归噺鍒犻櫎鐢ㄦ埛淇℃伅 + * + * @param userIds 闇瑕佸垹闄ょ殑鐢ㄦ埛ID + * @return 缁撴灉 + */ + @Override + @Transactional + public int deleteUserByIds(Long[] userIds) + { + for (Long userId : userIds) + { + checkUserAllowed(new SysUser(userId)); + checkUserDataScope(userId); + } + // 鍒犻櫎鐢ㄦ埛涓庤鑹插叧鑱 + userRoleMapper.deleteUserRole(userIds); + // 鍒犻櫎鐢ㄦ埛涓庡矖浣嶅叧鑱 + userPostMapper.deleteUserPost(userIds); + return userMapper.deleteUserByIds(userIds); + } + + /** + * 瀵煎叆鐢ㄦ埛鏁版嵁 + * + * @param userList 鐢ㄦ埛鏁版嵁鍒楄〃 + * @param isUpdateSupport 鏄惁鏇存柊鏀寔锛屽鏋滃凡瀛樺湪锛屽垯杩涜鏇存柊鏁版嵁 + * @param operName 鎿嶄綔鐢ㄦ埛 + * @return 缁撴灉 + */ + @Override + public String importUser(List userList, Boolean isUpdateSupport, String operName) + { + if (StringUtils.isNull(userList) || userList.size() == 0) + { + throw new ServiceException("瀵煎叆鐢ㄦ埛鏁版嵁涓嶈兘涓虹┖锛"); + } + int successNum = 0; + int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + for (SysUser user : userList) + { + try + { + // 楠岃瘉鏄惁瀛樺湪杩欎釜鐢ㄦ埛 + SysUser u = userMapper.selectUserByUserName(user.getUserName()); + if (StringUtils.isNull(u)) + { + BeanValidators.validateWithException(validator, user); + deptService.checkDeptDataScope(user.getDeptId()); + String password = configService.selectConfigByKey("sys.user.initPassword"); + user.setPassword(SecurityUtils.encryptPassword(password)); + user.setCreateBy(operName); + userMapper.insertUser(user); + successNum++; + successMsg.append("
" + successNum + "銆佽处鍙 " + user.getUserName() + " 瀵煎叆鎴愬姛"); + } + else if (isUpdateSupport) + { + BeanValidators.validateWithException(validator, user); + checkUserAllowed(u); + checkUserDataScope(u.getUserId()); + deptService.checkDeptDataScope(user.getDeptId()); + user.setUserId(u.getUserId()); + user.setUpdateBy(operName); + userMapper.updateUser(user); + successNum++; + successMsg.append("
" + successNum + "銆佽处鍙 " + user.getUserName() + " 鏇存柊鎴愬姛"); + } + else + { + failureNum++; + failureMsg.append("
" + failureNum + "銆佽处鍙 " + user.getUserName() + " 宸插瓨鍦"); + } + } + catch (Exception e) + { + failureNum++; + String msg = "
" + failureNum + "銆佽处鍙 " + user.getUserName() + " 瀵煎叆澶辫触锛"; + failureMsg.append(msg + e.getMessage()); + log.error(msg, e); + } + } + if (failureNum > 0) + { + failureMsg.insert(0, "寰堟姳姝夛紝瀵煎叆澶辫触锛佸叡 " + failureNum + " 鏉℃暟鎹牸寮忎笉姝g‘锛岄敊璇涓嬶細"); + throw new ServiceException(failureMsg.toString()); + } + else + { + successMsg.insert(0, "鎭枩鎮紝鏁版嵁宸插叏閮ㄥ鍏ユ垚鍔燂紒鍏 " + successNum + " 鏉★紝鏁版嵁濡備笅锛"); + } + return successMsg.toString(); + } +} diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbAuthorizeHonorMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbAuthorizeHonorMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..f6d0b9803b4b71251001e851c16eee09d2a57db6 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbAuthorizeHonorMapper.xml @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select authorize_honor_id, authorize_honor_img, authorize_honor_name, authorize_honor_title, authorize_honor_introduce, authorize_honor_details, is_hot, type, examine_status, examine_feedback, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_authorize_honor + + + + + + + + insert into tb_authorize_honor + + authorize_honor_img, + authorize_honor_name, + authorize_honor_title, + authorize_honor_introduce, + authorize_honor_details, + is_hot, + type, + examine_status, + examine_feedback, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{authorizeHonorImg}, + #{authorizeHonorName}, + #{authorizeHonorTitle}, + #{authorizeHonorIntroduce}, + #{authorizeHonorDetails}, + #{isHot}, + #{type}, + #{examineStatus}, + #{examineFeedback}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_authorize_honor + + authorize_honor_img = #{authorizeHonorImg}, + authorize_honor_name = #{authorizeHonorName}, + authorize_honor_title = #{authorizeHonorTitle}, + authorize_honor_introduce = #{authorizeHonorIntroduce}, + authorize_honor_details = #{authorizeHonorDetails}, + is_hot = #{isHot}, + type = #{type}, + examine_status = #{examineStatus}, + examine_feedback = #{examineFeedback}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where authorize_honor_id = #{authorizeHonorId} + + + + delete from tb_authorize_honor where authorize_honor_id = #{authorizeHonorId} + + + + delete from tb_authorize_honor where authorize_honor_id in + + #{authorizeHonorId} + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbBannerMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbBannerMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..da7d63020b0638331bed267af3dd850945c6d8cc --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbBannerMapper.xml @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + select banner_id, banner_title, type, banner_img, jump_type, banner_url, banner_sort, banner_status, create_time, update_time, delete_time, create_by, update_by, delete_by, del_flag from tb_banner + + + + + + + + insert into tb_banner + + banner_id, + banner_title, + type, + banner_img, + jump_type, + banner_url, + banner_sort, + banner_status, + create_time, + update_time, + delete_time, + create_by, + update_by, + delete_by, + del_flag, + + + #{bannerId}, + #{bannerTitle}, + #{type}, + #{bannerImg}, + #{jumpType}, + #{bannerUrl}, + #{bannerSort}, + #{bannerStatus}, + #{createTime}, + #{updateTime}, + #{deleteTime}, + #{createBy}, + #{updateBy}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_banner + + banner_title = #{bannerTitle}, + type = #{type}, + banner_img = #{bannerImg}, + jump_type = #{jumpType}, + banner_url = #{bannerUrl}, + banner_sort = #{bannerSort}, + banner_status = #{bannerStatus}, + create_time = #{createTime}, + update_time = #{updateTime}, + delete_time = #{deleteTime}, + create_by = #{createBy}, + update_by = #{updateBy}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where banner_id = #{bannerId} + + + + update tb_banner + set del_flag = '1', delete_time = SYSDATE(), delete_by = #{deleteBy} + where banner_id = #{bannerId} + + + + update tb_banner + set del_flag = '1', delete_time = SYSDATE(), delete_by = #{deleteBy} + where banner_id in + + #{bannerId} + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbCareerClassMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbCareerClassMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..7d91b610b3a8729adb1eac3179c1c992436ddaec --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbCareerClassMapper.xml @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + select career_id, pid, level, type, career_logo_one, career_logo_two, career_name, remarks, sort, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_career_class + + + + + + + + insert into tb_career_class + + pid, + level, + type, + career_logo_one, + career_logo_two, + career_name, + remarks, + sort, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{pid}, + #{level}, + #{type}, + #{careerLogoOne}, + #{careerLogoTwo}, + #{careerName}, + #{remarks}, + #{sort}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_career_class + + pid = #{pid}, + level = #{level}, + type = #{type}, + career_logo_one = #{careerLogoOne}, + career_logo_two = #{careerLogoTwo}, + career_name = #{careerName}, + remarks = #{remarks}, + sort = #{sort}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where career_id = #{careerId} + + + + delete from tb_career_class where career_id = #{careerId} + + + + delete from tb_career_class where career_id in + + #{careerId} + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbCaseMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbCaseMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..5017005f770c436e964c42e55a6a5f55d6cb2800 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbCaseMapper.xml @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + + + + + + select case_id, case_type_id, title, show_img, prospectus, publisher, publication_time, content, create_time, create_by, update_time, update_by, del_flag, delete_time, delete_by from tb_case + + + + + + + + insert into tb_case + + case_type_id, + title, + show_img, + prospectus, + publisher, + publication_time, + content, + create_time, + create_by, + update_time, + update_by, + del_flag, + delete_time, + delete_by, + + + #{caseTypeId}, + #{title}, + #{showImg}, + #{prospectus}, + #{publisher}, + #{publicationTime}, + #{content}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{delFlag}, + #{deleteTime}, + #{deleteBy}, + + + + + update tb_case + + case_type_id = #{caseTypeId}, + title = #{title}, + show_img = #{showImg}, + prospectus = #{prospectus}, + publisher = #{publisher}, + publication_time = #{publicationTime}, + content = #{content}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + del_flag = #{delFlag}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + + where case_id = #{caseId} + + + + update tb_case + set deL_flag = 1, delete_time = now() + where case_id = #{caseId} + + + + update tb_case + set deL_flag = 1, delete_time = now() + where case_id in + + #{caseId} + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbCaseTypeMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbCaseTypeMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..4e96b4d7a8c4315f7f709369c9cc3575c8e72a4d --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbCaseTypeMapper.xml @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + select case_type_id, type_logo, type_name, show_status, sort, create_time, create_by, update_time, update_by, del_flag, delete_time, delete_by from tb_case_type + + + + + + + + insert into tb_case_type + + type_logo, + type_name, + show_status, + sort, + create_time, + create_by, + update_time, + update_by, + del_flag, + delete_time, + delete_by, + + + #{typeLogo}, + #{typeName}, + #{showStatus}, + #{sort}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{delFlag}, + #{deleteTime}, + #{deleteBy}, + + + + + update tb_case_type + + type_logo = #{typeLogo}, + type_name = #{typeName}, + show_status = #{showStatus}, + sort = #{sort}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + del_flag = #{delFlag}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + + where case_type_id = #{caseTypeId} + + + + update tb_case_type + set deL_flag = 1, delete_time = now() + where case_type_id = #{caseTypeId} + + + + update tb_case_type + set deL_flag = 1, delete_time = now() + where case_type_id in + + #{caseTypeId} + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbConferenceNoticeMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbConferenceNoticeMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..65c8cc1393013a28cf9fd1cacb8172d847e1f522 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbConferenceNoticeMapper.xml @@ -0,0 +1,223 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select conference_notice_id, conference_notice_logo, notice_name, notice_introduce, notice_details, type, conference_start_time, conference_end_time, enroll_start_time, enroll_end_time, demand, conference_status, examine_status, examine_feedback, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_conference_notice + + + + + + + + insert into tb_conference_notice + + conference_notice_logo, + notice_name, + notice_introduce, + notice_details, + type, + conference_start_time, + conference_end_time, + enroll_start_time, + enroll_end_time, + demand, + conference_status, + examine_status, + examine_feedback, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{conferenceNoticeLogo}, + #{noticeName}, + #{noticeIntroduce}, + #{noticeDetails}, + #{type}, + #{conferenceStartTime}, + #{conferenceEndTime}, + #{enrollStartTime}, + #{enrollEndTime}, + #{demand}, + #{conferenceStatus}, + #{examineStatus}, + #{examineFeedback}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_conference_notice + + conference_notice_logo = #{conferenceNoticeLogo}, + notice_name = #{noticeName}, + notice_introduce = #{noticeIntroduce}, + notice_details = #{noticeDetails}, + type = #{type}, + conference_start_time = #{conferenceStartTime}, + conference_end_time = #{conferenceEndTime}, + enroll_start_time = #{enrollStartTime}, + enroll_end_time = #{enrollEndTime}, + demand = #{demand}, + conference_status = #{conferenceStatus}, + examine_status = #{examineStatus}, + examine_feedback = #{examineFeedback}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where conference_notice_id = #{conferenceNoticeId} + + + + delete from tb_conference_notice where conference_notice_id = #{conferenceNoticeId} + + + + delete from tb_conference_notice where conference_notice_id in + + #{conferenceNoticeId} + + + + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbConferencePeopleMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbConferencePeopleMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..edd0002dcdd942adec141bb5161080bef019d82e --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbConferencePeopleMapper.xml @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select conference_people_id, conference_notice_id, conference_people_logo, people_name, people_title, people_introduce, people_details, type, examine_status, examine_feedback, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_conference_people + + + + + + + + insert into tb_conference_people + + conference_notice_id, + conference_people_logo, + people_name, + people_title, + people_introduce, + people_details, + type, + examine_status, + examine_feedback, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{conferenceNoticeId}, + #{conferencePeopleLogo}, + #{peopleName}, + #{peopleTitle}, + #{peopleIntroduce}, + #{peopleDetails}, + #{type}, + #{examineStatus}, + #{examineFeedback}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_conference_people + + conference_notice_id = #{conferenceNoticeId}, + conference_people_logo = #{conferencePeopleLogo}, + people_name = #{peopleName}, + people_title = #{peopleTitle}, + people_introduce = #{peopleIntroduce}, + people_details = #{peopleDetails}, + type = #{type}, + examine_status = #{examineStatus}, + examine_feedback = #{examineFeedback}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where conference_people_id = #{conferencePeopleId} + + + + delete from tb_conference_people where conference_people_id = #{conferencePeopleId} + + + + delete from tb_conference_people where conference_people_id in + + #{conferencePeopleId} + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbConferenceRegistrationMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbConferenceRegistrationMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..a2d879f2d9e3843097b95064b679d87d030acce3 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbConferenceRegistrationMapper.xml @@ -0,0 +1,265 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select conference_registration_id, member_user_id, conference_notice_id, name, phone, document_type, document_number, email, company_name, company_type, position, position_type, province_id, city_id, area_id, province_name, city_name, area_name, address, id_photo, business, objective, is_participate, is_participate_next, type, examine_status, examine_feedback, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_conference_registration + + + + + + + + insert into tb_conference_registration + + member_user_id, + conference_notice_id, + name, + phone, + document_type, + document_number, + email, + company_name, + company_type, + position, + position_type, + province_id, + city_id, + area_id, + province_name, + city_name, + area_name, + address, + id_photo, + business, + objective, + is_participate, + is_participate_next, + type, + examine_status, + examine_feedback, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{memberUserId}, + #{conferenceNoticeId}, + #{name}, + #{phone}, + #{documentType}, + #{documentNumber}, + #{email}, + #{companyName}, + #{companyType}, + #{position}, + #{positionType}, + #{provinceId}, + #{cityId}, + #{areaId}, + #{provinceName}, + #{cityName}, + #{areaName}, + #{address}, + #{idPhoto}, + #{business}, + #{objective}, + #{isParticipate}, + #{isParticipateNext}, + #{type}, + #{examineStatus}, + #{examineFeedback}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_conference_registration + + member_user_id = #{memberUserId}, + conference_notice_id = #{conferenceNoticeId}, + name = #{name}, + phone = #{phone}, + document_type = #{documentType}, + document_number = #{documentNumber}, + email = #{email}, + company_name = #{companyName}, + company_type = #{companyType}, + position = #{position}, + position_type = #{positionType}, + province_id = #{provinceId}, + city_id = #{cityId}, + area_id = #{areaId}, + province_name = #{provinceName}, + city_name = #{cityName}, + area_name = #{areaName}, + address = #{address}, + id_photo = #{idPhoto}, + business = #{business}, + objective = #{objective}, + is_participate = #{isParticipate}, + is_participate_next = #{isParticipateNext}, + type = #{type}, + examine_status = #{examineStatus}, + examine_feedback = #{examineFeedback}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where conference_registration_id = #{conferenceRegistrationId} + + + + delete from tb_conference_registration where conference_registration_id = #{conferenceRegistrationId} + + + + delete from tb_conference_registration where conference_registration_id in + + #{conferenceRegistrationId} + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbConfigMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbConfigMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..7b4b5ebc0288b32c667e40911ce3267e28ea14e7 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbConfigMapper.xml @@ -0,0 +1,192 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select config_id, identifying, name, config_explain, config_int, config_string, config_string2, config_string3, config_string4, config_string5, config_string6, config_decimal, config_decimal2, type, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_config + + + + + + + + insert into tb_config + + identifying, + name, + config_explain, + config_int, + config_string, + config_string2, + config_string3, + config_string4, + config_string5, + config_string6, + config_decimal, + config_decimal2, + type, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{identifying}, + #{name}, + #{configExplain}, + #{configInt}, + #{configString}, + #{configString2}, + #{configString3}, + #{configString4}, + #{configString5}, + #{configString6}, + #{configDecimal}, + #{configDecimal2}, + #{type}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_config + + identifying = #{identifying}, + name = #{name}, + config_explain = #{configExplain}, + config_int = #{configInt}, + config_string = #{configString}, + config_string2 = #{configString2}, + config_string3 = #{configString3}, + config_string4 = #{configString4}, + config_string5 = #{configString5}, + config_string6 = #{configString6}, + config_decimal = #{configDecimal}, + config_decimal2 = #{configDecimal2}, + type = #{type}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where config_id = #{configId} + + + + delete from tb_config where config_id = #{configId} + + + + delete from tb_config where config_id in + + #{configId} + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbContinuingEducationClassMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbContinuingEducationClassMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..4db5ede5a5a2bc5defb97ab8c248d20a00ad6aaa --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbContinuingEducationClassMapper.xml @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select continuing_education_class_id, pid, level, type, name, logo_one, logo_two, is_recommend, remarks, sort, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_continuing_education_class + + + + + + + + + + insert into tb_continuing_education_class + + pid, + level, + type, + name, + logo_one, + logo_two, + is_recommend, + remarks, + sort, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{pid}, + #{level}, + #{type}, + #{name}, + #{logoOne}, + #{logoTwo}, + #{isRecommend}, + #{remarks}, + #{sort}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_continuing_education_class + + pid = #{pid}, + level = #{level}, + type = #{type}, + name = #{name}, + logo_one = #{logoOne}, + logo_two = #{logoTwo}, + is_recommend = #{isRecommend}, + remarks = #{remarks}, + sort = #{sort}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where continuing_education_class_id = #{continuingEducationClassId} + + + + delete from tb_continuing_education_class where continuing_education_class_id = #{continuingEducationClassId} + + + + delete from tb_continuing_education_class where continuing_education_class_id in + + #{continuingEducationClassId} + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbCooperatePartnerMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbCooperatePartnerMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..cebfb5604ffca6d51250d67ff32b9e63f6cf8593 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbCooperatePartnerMapper.xml @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select cooperate_partner_id, cooperate_partner_img, cooperate_partner_name, cooperate_partner_title, cooperate_partner_introduce, cooperate_partner_details, is_hot, type, jump_type, jump_url, examine_status, examine_feedback, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_cooperate_partner + + + + + + + + insert into tb_cooperate_partner + + cooperate_partner_img, + cooperate_partner_name, + cooperate_partner_title, + cooperate_partner_introduce, + cooperate_partner_details, + is_hot, + type, + jump_type, + jump_url, + examine_status, + examine_feedback, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{cooperatePartnerImg}, + #{cooperatePartnerName}, + #{cooperatePartnerTitle}, + #{cooperatePartnerIntroduce}, + #{cooperatePartnerDetails}, + #{isHot}, + #{type}, + #{jumpType}, + #{jumpUrl}, + #{examineStatus}, + #{examineFeedback}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_cooperate_partner + + cooperate_partner_img = #{cooperatePartnerImg}, + cooperate_partner_name = #{cooperatePartnerName}, + cooperate_partner_title = #{cooperatePartnerTitle}, + cooperate_partner_introduce = #{cooperatePartnerIntroduce}, + cooperate_partner_details = #{cooperatePartnerDetails}, + is_hot = #{isHot}, + type = #{type}, + jump_type = #{jumpType}, + jump_url = #{jumpUrl}, + examine_status = #{examineStatus}, + examine_feedback = #{examineFeedback}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where cooperate_partner_id = #{cooperatePartnerId} + + + + delete from tb_cooperate_partner where cooperate_partner_id = #{cooperatePartnerId} + + + + delete from tb_cooperate_partner where cooperate_partner_id in + + #{cooperatePartnerId} + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbCourseChapterMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbCourseChapterMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..c2c303c2ee439ec8c75ff51c27858a698889d67e --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbCourseChapterMapper.xml @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select chapter_id, course_id, pid, level, type, chapter_name, url_type, chapter_url, video_duration, is_video, remarks, sort, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag, views_num from tb_course_chapter + + + + + + + + insert into tb_course_chapter + + course_id, + pid, + level, + type, + chapter_name, + url_type, + chapter_url, + video_duration, + is_video, + remarks, + sort, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + views_num, + + + #{courseId}, + #{pid}, + #{level}, + #{type}, + #{chapterName}, + #{urlType}, + #{chapterUrl}, + #{videoDuration}, + #{isVideo}, + #{remarks}, + #{sort}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + #{viewsNum}, + + + + + update tb_course_chapter + + course_id = #{courseId}, + pid = #{pid}, + level = #{level}, + type = #{type}, + chapter_name = #{chapterName}, + url_type = #{urlType}, + chapter_url = #{chapterUrl}, + video_duration = #{videoDuration}, + is_video = #{isVideo}, + remarks = #{remarks}, + sort = #{sort}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + views_num = #{viewsNum}, + + where chapter_id = #{chapterId} + + + + delete from tb_course_chapter where chapter_id = #{chapterId} + + + + delete from tb_course_chapter where chapter_id in + + #{chapterId} + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbCourseEvaluateMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbCourseEvaluateMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..26f4974676f6f13dd3d282e3921761db251bb2e9 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbCourseEvaluateMapper.xml @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + select course_evaluate_id, course_id, student_id, student_name, student_picture, evaluate_star, evaluate_content, remarks, sort, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_course_evaluate + + + + + + + + insert into tb_course_evaluate + + course_id, + student_id, + student_name, + student_picture, + evaluate_star, + evaluate_content, + remarks, + sort, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{courseId}, + #{studentId}, + #{studentName}, + #{studentPicture}, + #{evaluateStar}, + #{evaluateContent}, + #{remarks}, + #{sort}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_course_evaluate + + course_id = #{courseId}, + student_id = #{studentId}, + student_name = #{studentName}, + student_picture = #{studentPicture}, + evaluate_star = #{evaluateStar}, + evaluate_content = #{evaluateContent}, + remarks = #{remarks}, + sort = #{sort}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where course_evaluate_id = #{courseEvaluateId} + + + + delete from tb_course_evaluate where course_evaluate_id = #{courseEvaluateId} + + + + delete from tb_course_evaluate where course_evaluate_id in + + #{courseEvaluateId} + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbCourseMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbCourseMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..1c7334e4474f326671de5b1eb76b8993212c0667 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbCourseMapper.xml @@ -0,0 +1,383 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select course_id, evaluate_agency_id, major_id, class_id, career_id, exam_id, subject_warehouse_class_id, class_type, cover_image, course_name, course_title, course_num, course_start, course_end, course_arrange, participate_num, course_details, course_overview, course_syllabus, course_knowledge, course_team, tag_name, teacher_ids, remarks, sort, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag, views_num, is_recommend, course_certificate, course_information from tb_course + + + + + + + + + + insert into tb_course + + evaluate_agency_id, + major_id, + class_id, + career_id, + exam_id, + subject_warehouse_class_id, + class_type, + cover_image, + course_name, + course_title, + course_num, + course_start, + course_end, + course_arrange, + participate_num, + course_details, + course_overview, + course_syllabus, + course_knowledge, + course_team, + tag_name, + teacher_ids, + remarks, + sort, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + views_num, + is_recommend, + course_certificate, + course_information, + + + #{evaluateAgencyId}, + #{majorId}, + #{classId}, + #{careerId}, + #{examId}, + #{subjectWarehouseClassId}, + #{classType}, + #{coverImage}, + #{courseName}, + #{courseTitle}, + #{courseNum}, + #{courseStart}, + #{courseEnd}, + #{courseArrange}, + #{participateNum}, + #{courseDetails}, + #{courseOverview}, + #{courseSyllabus}, + #{courseKnowledge}, + #{courseTeam}, + #{tagName}, + #{teacherIds}, + #{remarks}, + #{sort}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + #{viewsNum}, + #{isRecommend}, + #{courseCertificate}, + #{courseInformation}, + + + + + update tb_course + + evaluate_agency_id = #{evaluateAgencyId}, + major_id = #{majorId}, + class_id = #{classId}, + career_id = #{careerId}, + exam_id = #{examId}, + subject_warehouse_class_id = #{subjectWarehouseClassId}, + class_type = #{classType}, + cover_image = #{coverImage}, + course_name = #{courseName}, + course_title = #{courseTitle}, + course_num = #{courseNum}, + course_start = #{courseStart}, + course_end = #{courseEnd}, + course_arrange = #{courseArrange}, + participate_num = #{participateNum}, + course_details = #{courseDetails}, + course_overview = #{courseOverview}, + course_syllabus = #{courseSyllabus}, + course_knowledge = #{courseKnowledge}, + course_team = #{courseTeam}, + tag_name = #{tagName}, + teacher_ids = #{teacherIds}, + remarks = #{remarks}, + sort = #{sort}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + views_num = #{viewsNum}, + is_recommend = #{isRecommend}, + course_certificate = #{courseCertificate}, + course_information = #{courseInformation}, + + where course_id = #{courseId} + + + + delete from tb_course where course_id = #{courseId} + + + + delete from tb_course where course_id in + + #{courseId} + + + + + + + + + update tb_course set views_num = views_num + 1 + where course_id = #{courseId} + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbDownloadMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbDownloadMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..6a3a35a5946cd5da80182808de1084ea2c10ec0c --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbDownloadMapper.xml @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + select download_id, download_type, download_name, download_format, download_size, download_url, content, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_download + + + + + + + + insert into tb_download + + download_type, + download_name, + download_format, + download_size, + download_url, + content, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{downloadType}, + #{downloadName}, + #{downloadFormat}, + #{downloadSize}, + #{downloadUrl}, + #{content}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_download + + download_type = #{downloadType}, + download_name = #{downloadName}, + download_format = #{downloadFormat}, + download_size = #{downloadSize}, + download_url = #{downloadUrl}, + content = #{content}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where download_id = #{downloadId} + + + + delete from tb_download where download_id = #{downloadId} + + + + delete from tb_download where download_id in + + #{downloadId} + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbEnterpriseProgressMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbEnterpriseProgressMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..697d02e9c0f2aa3f866af12a1d71f605e27384cb --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbEnterpriseProgressMapper.xml @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + select enterprise_progress_id, img, name, progress_time_year, progress_time_month, type, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_enterprise_progress + + + + + + + + insert into tb_enterprise_progress + + img, + name, + progress_time_year, + progress_time_month, + type, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{img}, + #{name}, + #{progressTimeYear}, + #{progressTimeMonth}, + #{type}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_enterprise_progress + + img = #{img}, + name = #{name}, + progress_time_year = #{progressTimeYear}, + progress_time_month = #{progressTimeMonth}, + type = #{type}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where enterprise_progress_id = #{enterpriseProgressId} + + + + delete from tb_enterprise_progress where enterprise_progress_id = #{enterpriseProgressId} + + + + delete from tb_enterprise_progress where enterprise_progress_id in + + #{enterpriseProgressId} + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbEvaluateAgencyClassMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbEvaluateAgencyClassMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..067ef0ae6d602922da82f9ec6bb2db1b2a1e2ce0 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbEvaluateAgencyClassMapper.xml @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select evaluate_agency_class_id, pid, level, type, name, logo_one, logo_two, is_recommend, remarks, sort, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_evaluate_agency_class + + + + + + + + insert into tb_evaluate_agency_class + + pid, + level, + type, + name, + logo_one, + logo_two, + is_recommend, + remarks, + sort, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{pid}, + #{level}, + #{type}, + #{name}, + #{logoOne}, + #{logoTwo}, + #{isRecommend}, + #{remarks}, + #{sort}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_evaluate_agency_class + + pid = #{pid}, + level = #{level}, + type = #{type}, + name = #{name}, + logo_one = #{logoOne}, + logo_two = #{logoTwo}, + is_recommend = #{isRecommend}, + remarks = #{remarks}, + sort = #{sort}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where evaluate_agency_class_id = #{evaluateAgencyClassId} + + + + delete from tb_evaluate_agency_class where evaluate_agency_class_id = #{evaluateAgencyClassId} + + + + delete from tb_evaluate_agency_class where evaluate_agency_class_id in + + #{evaluateAgencyClassId} + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbEvaluateAgencyMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbEvaluateAgencyMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..7af75aa4014396873942963c56abc65c8919adf4 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbEvaluateAgencyMapper.xml @@ -0,0 +1,364 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select evaluate_agency_id, sys_user_id, evaluate_agency_class_id, evaluate_agency_number, evaluate_agency_code, evaluate_agency_icon, evaluate_agency_logo, + evaluate_agency_logo_rectangle, evaluate_agency_background, uncheck_background, check_background, evaluate_agency_name, + evaluate_agency_english, evaluate_agency_title, evaluate_agency_tag, evaluate_agency_introduce, evaluate_agency_describe, + certificate_url, province_id, city_id, area_id, province_name, city_name, area_name, address, type, examine_status, examine_feedback, + frozen_status, frozen_feedback, is_recommend, sort, remarks, status, publication_time, publisher, create_time, create_by, + update_time, update_by, delete_time, delete_by, del_flag + from tb_evaluate_agency + + + + + + + + insert into tb_evaluate_agency + + sys_user_id, + evaluate_agency_class_id, + evaluate_agency_number, + evaluate_agency_code, + evaluate_agency_icon, + evaluate_agency_logo, + evaluate_agency_logo_rectangle, + evaluate_agency_background, + uncheck_background, + check_background, + evaluate_agency_name, + evaluate_agency_english, + evaluate_agency_title, + evaluate_agency_tag, + evaluate_agency_introduce, + evaluate_agency_describe, + certificate_url, + province_id, + city_id, + area_id, + province_name, + city_name, + area_name, + address, + type, + examine_status, + examine_feedback, + frozen_status, + frozen_feedback, + is_recommend, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{sysUserId}, + #{evaluateAgencyClassId}, + #{evaluateAgencyNumber}, + #{evaluateAgencyCode}, + #{evaluateAgencyIcon}, + #{evaluateAgencyLogo}, + #{evaluateAgencyLogoRectangle}, + #{evaluateAgencyBackground}, + #{uncheckBackground}, + #{checkBackground}, + #{evaluateAgencyName}, + #{evaluateAgencyEnglish}, + #{evaluateAgencyTitle}, + #{evaluateAgencyTag}, + #{evaluateAgencyIntroduce}, + #{evaluateAgencyDescribe}, + #{certificateUrl}, + #{provinceId}, + #{cityId}, + #{areaId}, + #{provinceName}, + #{cityName}, + #{areaName}, + #{address}, + #{type}, + #{examineStatus}, + #{examineFeedback}, + #{frozenStatus}, + #{frozenFeedback}, + #{isRecommend}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_evaluate_agency + + sys_user_id = #{sysUserId}, + evaluate_agency_class_id = #{evaluateAgencyClassId}, + evaluate_agency_number = #{evaluateAgencyNumber}, + evaluate_agency_code = #{evaluateAgencyCode}, + evaluate_agency_icon = #{evaluateAgencyIcon}, + evaluate_agency_logo = #{evaluateAgencyLogo}, + evaluate_agency_logo_rectangle = #{evaluateAgencyLogoRectangle}, + evaluate_agency_background = #{evaluateAgencyBackground}, + uncheck_background = #{uncheckBackground}, + check_background = #{checkBackground}, + evaluate_agency_name = #{evaluateAgencyName}, + evaluate_agency_english = #{evaluateAgencyEnglish}, + evaluate_agency_title = #{evaluateAgencyTitle}, + evaluate_agency_tag = #{evaluateAgencyTag}, + evaluate_agency_introduce = #{evaluateAgencyIntroduce}, + evaluate_agency_describe = #{evaluateAgencyDescribe}, + certificate_url = #{certificateUrl}, + province_id = #{provinceId}, + city_id = #{cityId}, + area_id = #{areaId}, + province_name = #{provinceName}, + city_name = #{cityName}, + area_name = #{areaName}, + address = #{address}, + type = #{type}, + examine_status = #{examineStatus}, + examine_feedback = #{examineFeedback}, + frozen_status = #{frozenStatus}, + frozen_feedback = #{frozenFeedback}, + is_recommend = #{isRecommend}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where evaluate_agency_id = #{evaluateAgencyId} + + + + delete from tb_evaluate_agency where evaluate_agency_id = #{evaluateAgencyId} + + + + delete from tb_evaluate_agency where evaluate_agency_id in + + #{evaluateAgencyId} + + + + + + + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbExamBatchMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbExamBatchMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..118fb05672d3ed4abb71eec02924978b5e2c38f6 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbExamBatchMapper.xml @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + select exam_batch_id, exam_id, batch_index, exam_batch, exam_start_time, exam_end_time, sign_start_time, sign_end_time from tb_exam_batch + + + + + + + + insert into tb_exam_batch + + exam_batch_id, + exam_id, + batch_index, + exam_batch, + exam_start_time, + exam_end_time, + sign_start_time, + sign_end_time, + + + #{examBatchId}, + #{examId}, + #{batchIndex}, + #{examBatch}, + #{examStartTime}, + #{examEndTime}, + #{signStartTime}, + #{signEndTime}, + + + + + update tb_exam_batch + + exam_id = #{examId}, + batch_index = #{batchIndex}, + exam_batch = #{examBatch}, + exam_start_time = #{examStartTime}, + exam_end_time = #{examEndTime}, + sign_start_time = #{signStartTime}, + sign_end_time = #{signEndTime}, + + where exam_batch_id = #{examBatchId} + + + + delete from tb_exam_batch where exam_batch_id = #{examBatchId} + + + + delete from tb_exam_batch where exam_batch_id in + + #{examBatchId} + + + + + delete from tb_exam_batch where exam_id = #{examId} + + + + + + + + + + insert into tb_exam_batch + ( + exam_id, + batch_index, + exam_batch, + exam_start_time, + exam_end_time, + sign_start_time, + sign_end_time) + values + + ( + #{item.examId}, + #{item.batchIndex}, + #{item.examBatch}, + #{item.examStartTime}, + #{item.examEndTime}, + #{item.signStartTime}, + #{item.signEndTime} + ) + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbExamCourseMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbExamCourseMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..dd5d62f2f1dd083aee01e794557b67b0f27e3999 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbExamCourseMapper.xml @@ -0,0 +1,185 @@ + + + + + + + + + + + + + + + + + + + + + + + SELECT + tec.exam_course_id examCourseId, + tec.study_center_id studyCenterId, + tec.exam_id examId, + tec.subject_warehouse_class_id subjectWarehouseClassId, + tec.live_broadcast_id liveBroadcastId, + tec.evaluate_agency_id evaluateAgencyId, + tea.evaluate_agency_name evaluateAgencyName, + tec.course_id courseId, + tc.course_name courseName + FROM + tb_exam_course tec + LEFT JOIN tb_evaluate_agency tea ON tea.evaluate_agency_id = tec.evaluate_agency_id + LEFT JOIN tb_course tc ON tc.evaluate_agency_id = tec.evaluate_agency_id + + + + + + insert into tb_exam_course + + study_center_id, + exam_id, + subject_warehouse_class_id, + live_broadcast_id, + evaluate_agency_id, + course_id, + + + #{studyCenterId}, + #{examId}, + #{subjectWarehouseClassId}, + #{liveBroadcastId}, + #{evaluateAgencyId}, + #{courseId}, + + + + + update tb_exam_course + + study_center_id = #{studyCenterId}, + exam_id = #{examId}, + subject_warehouse_class_id = #{subjectWarehouseClassId}, + live_broadcast_id = #{liveBroadcastId}, + evaluate_agency_id = #{evaluateAgencyId}, + course_id = #{courseId}, + + where exam_course_id = #{examCourseId} + + + + delete from tb_exam_course + + and exam_id = #{examId} + and study_center_id = #{studyCenterId} + and subject_warehouse_class_id = #{subjectWarehouseClassId} + and live_broadcast_id = #{liveBroadcastId} + + + + + + + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbExamFileMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbExamFileMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..dd868a8299a12d83a589cd47ab2de81569a94088 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbExamFileMapper.xml @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select exam_file_id, exam_simulate_info_id, member_user_id, exam_id, file_type, file_url, exam_type, type, examine_status, examine_feedback, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_exam_file + + + + + + + + insert into tb_exam_file + + exam_simulate_info_id, + member_user_id, + exam_id, + file_type, + file_url, + exam_type, + type, + examine_status, + examine_feedback, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{examSimulateInfoId}, + #{memberUserId}, + #{examId}, + #{fileType}, + #{fileUrl}, + #{examType}, + #{type}, + #{examineStatus}, + #{examineFeedback}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_exam_file + + exam_simulate_info_id = #{examSimulateInfoId}, + member_user_id = #{memberUserId}, + exam_id = #{examId}, + file_type = #{fileType}, + file_url = #{fileUrl}, + exam_type = #{examType}, + type = #{type}, + examine_status = #{examineStatus}, + examine_feedback = #{examineFeedback}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where exam_file_id = #{examFileId} + + + + delete from tb_exam_file where exam_file_id = #{examFileId} + + + + delete from tb_exam_file where exam_file_id in + + #{examFileId} + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbExamMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbExamMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..e0d32c411283ce4ec3376a48abe2b46367bf1332 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbExamMapper.xml @@ -0,0 +1,532 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select exam_id, exam_no, class_id, class_name, major_id, major_name, career_id, career_name, logo, file_url, name, title, content, introduce, single_select_num, single_select_score, many_select_num, many_select_score, judge_num, judge_score, discuss_num, discuss_score, total_score, pass_score, exam_minute, exam_batch_early, exam_batch, tips, exam_start_time, exam_end_time, sign_start_time, sign_end_time, price, exam_status, is_change, change_day, type, examine_status, examine_feedback, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag, level from tb_exam + + + + + + + + insert into tb_exam + + exam_no, + class_id, + class_name, + major_id, + major_name, + career_id, + career_name, + logo, + file_url, + name, + title, + content, + introduce, + single_select_num, + single_select_score, + many_select_num, + many_select_score, + judge_num, + judge_score, + discuss_num, + discuss_score, + total_score, + pass_score, + exam_minute, + exam_batch_early, + exam_batch, + tips, + exam_start_time, + exam_end_time, + sign_start_time, + sign_end_time, + price, + exam_status, + is_change, + change_day, + type, + examine_status, + examine_feedback, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + level, + + + #{examNo}, + #{classId}, + #{className}, + #{majorId}, + #{majorName}, + #{careerId}, + #{careerName}, + #{logo}, + #{fileUrl}, + #{name}, + #{title}, + #{content}, + #{introduce}, + #{singleSelectNum}, + #{singleSelectScore}, + #{manySelectNum}, + #{manySelectScore}, + #{judgeNum}, + #{judgeScore}, + #{discussNum}, + #{discussScore}, + #{totalScore}, + #{passScore}, + #{examMinute}, + #{examBatchEarly}, + #{examBatch}, + #{tips}, + #{examStartTime}, + #{examEndTime}, + #{signStartTime}, + #{signEndTime}, + #{price}, + #{examStatus}, + #{isChange}, + #{changeDay}, + #{type}, + #{examineStatus}, + #{examineFeedback}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + #{level}, + + + + + update tb_exam + + exam_no = #{examNo}, + class_id = #{classId}, + class_name = #{className}, + major_id = #{majorId}, + major_name = #{majorName}, + career_id = #{careerId}, + career_name = #{careerName}, + logo = #{logo}, + file_url = #{fileUrl}, + name = #{name}, + title = #{title}, + content = #{content}, + introduce = #{introduce}, + single_select_num = #{singleSelectNum}, + single_select_score = #{singleSelectScore}, + many_select_num = #{manySelectNum}, + many_select_score = #{manySelectScore}, + judge_num = #{judgeNum}, + judge_score = #{judgeScore}, + discuss_num = #{discussNum}, + discuss_score = #{discussScore}, + total_score = #{totalScore}, + pass_score = #{passScore}, + exam_minute = #{examMinute}, + exam_batch_early = #{examBatchEarly}, + exam_batch = #{examBatch}, + tips = #{tips}, + exam_start_time = #{examStartTime}, + exam_end_time = #{examEndTime}, + sign_start_time = #{signStartTime}, + sign_end_time = #{signEndTime}, + price = #{price}, + exam_status = #{examStatus}, + is_change = #{isChange}, + change_day = #{changeDay}, + type = #{type}, + examine_status = #{examineStatus}, + examine_feedback = #{examineFeedback}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + level = #{level}, + + where exam_id = #{examId} + + + + delete from tb_exam where exam_id = #{examId} + + + + delete from tb_exam where exam_id in + + #{examId} + + + + + + + insert into tb_exam_course + + exam_id, + evaluate_agency_id, + course_id, + + + #{examId}, + #{evaluateAgencyId}, + #{courseId}, + + + + + update tb_exam_course + + exam_id = #{examId}, + evaluate_agency_id = #{evaluateAgencyId}, + course_id = #{courseId}, + + where exam_course_id = #{examCourseId} + + + + delete from tb_exam_course where exam_id = #{examId} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbExamNoticeMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbExamNoticeMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..0ad4e3014d4f5cf763a1e819950165e0d723dba5 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbExamNoticeMapper.xml @@ -0,0 +1,339 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select exam_notice_id, exam_id, exam_notice_logo, exam_notice_name, exam_notice_introduce, exam_notice_details, exam_start_time, exam_end_time, exam_status, type, examine_status, examine_feedback, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag,batch_index from tb_exam_notice + + + + + + + + insert into tb_exam_notice + + exam_id, + exam_notice_logo, + exam_notice_name, + exam_notice_introduce, + exam_notice_details, + exam_start_time, + exam_end_time, + exam_status, + batch_index, + type, + examine_status, + examine_feedback, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{examId}, + #{examNoticeLogo}, + #{examNoticeName}, + #{examNoticeIntroduce}, + #{examNoticeDetails}, + #{examStartTime}, + #{examEndTime}, + #{examStatus}, + #{batchIndex}, + #{type}, + #{examineStatus}, + #{examineFeedback}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_exam_notice + + exam_id = #{examId}, + exam_notice_logo = #{examNoticeLogo}, + exam_notice_name = #{examNoticeName}, + exam_notice_introduce = #{examNoticeIntroduce}, + exam_notice_details = #{examNoticeDetails}, + exam_start_time = #{examStartTime}, + exam_end_time = #{examEndTime}, + exam_status = #{examStatus}, + batch_index = #{batchIndex}, + type = #{type}, + examine_status = #{examineStatus}, + examine_feedback = #{examineFeedback}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where exam_notice_id = #{examNoticeId} + + + + delete from tb_exam_notice where exam_notice_id = #{examNoticeId} + + + + delete from tb_exam_notice where exam_notice_id in + + #{examNoticeId} + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbExamRegistrationMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbExamRegistrationMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..cb7fcc5ebc75fa139b5a84d059c0a13bb9dfb534 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbExamRegistrationMapper.xml @@ -0,0 +1,1278 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select exam_registration_id, member_user_id, exam_id, exam_batch_index, name, sex, former_name, nation, identity_card, birthday, source_type, native_place, + political_status, education, major, graduation_school, entrance_year, contact_information, province_id, city_id, area_id, + province_name, city_name, area_name, address, zip_code, contact_phone, email, id_photo, identity_card_badge, identity_card_portrait, + graduation_certificate, agency_id, agency_name, career_id, career_name, exam_level, registration_batch, study_center_id, + study_center, agency_code, is_inspect, sign_photo, type, examine_status, examine_feedback, sort, remarks, status, publication_time, + publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag, is_pay, pay_type, pay_price, + registration_form, admission_ticket, transcript, certificate, certificate_status, write_at, consign_at, enter_at, shipping_mark, + shipping_name, shipping_code, shipping_task_id, shipping_order_id, shipping_poll_token, send_man_name, send_man_mobile, + sendMan_print_addr, shipping_status, course_id + from tb_exam_registration + + + + + + + + + + insert into tb_exam_registration + + member_user_id, + exam_id, + exam_batch_index, + name, + sex, + former_name, + nation, + identity_card, + birthday, + source_type, + native_place, + political_status, + education, + major, + graduation_school, + entrance_year, + contact_information, + province_id, + city_id, + area_id, + province_name, + city_name, + area_name, + address, + zip_code, + contact_phone, + email, + id_photo, + identity_card_badge, + identity_card_portrait, + graduation_certificate, + agency_id, + agency_name, + career_id, + career_name, + exam_level, + registration_batch, + study_center_id, + study_center, + agency_code, + is_inspect, + sign_photo, + type, + examine_status, + examine_feedback, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + is_pay, + pay_type, + pay_price, + registration_form, + admission_ticket, + transcript, + certificate, + certificate_status, + write_at, + consign_at, + enter_at, + shipping_mark, + shipping_name, + shipping_code, + shipping_task_id, + shipping_order_id, + shipping_poll_token, + send_man_name, + send_man_mobile, + sendMan_print_addr, + shipping_status, + course_id, + + + #{memberUserId}, + #{examId}, + #{examBatchIndex}, + #{name}, + #{sex}, + #{formerName}, + #{nation}, + #{identityCard}, + #{birthday}, + #{sourceType}, + #{nativePlace}, + #{politicalStatus}, + #{education}, + #{major}, + #{graduationSchool}, + #{entranceYear}, + #{contactInformation}, + #{provinceId}, + #{cityId}, + #{areaId}, + #{provinceName}, + #{cityName}, + #{areaName}, + #{address}, + #{zipCode}, + #{contactPhone}, + #{email}, + #{idPhoto}, + #{identityCardBadge}, + #{identityCardPortrait}, + #{graduationCertificate}, + #{agencyId}, + #{agencyName}, + #{careerId}, + #{careerName}, + #{examLevel}, + #{registrationBatch}, + #{studyCenterId}, + #{studyCenter}, + #{agencyCode}, + #{isInspect}, + #{signPhoto}, + #{type}, + #{examineStatus}, + #{examineFeedback}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + #{isPay}, + #{payType}, + #{payPrice}, + #{registrationForm}, + #{admissionTicket}, + #{transcript}, + #{certificate}, + #{certificateStatus}, + #{writeAt}, + #{consignAt}, + #{enterAt}, + #{shippingMark}, + #{shippingName}, + #{shippingCode}, + #{shippingTaskId}, + #{shippingOrderId}, + #{shippingPollToken}, + #{sendManName}, + #{sendManMobile}, + #{sendManPrintAddr}, + #{shippingStatus}, + #{courseId}, + + + + + INSERT INTO tb_exam_registration + + exam_registration_id, + member_user_id, + exam_id, + exam_batch_index, + name, + sex, + former_name, + nation, + identity_card, + birthday, + source_type, + native_place, + political_status, + education, + major, + graduation_school, + entrance_year, + contact_information, + province_id, + city_id, + area_id, + province_name, + city_name, + area_name, + address, + zip_code, + contact_phone, + email, + id_photo, + identity_card_badge, + identity_card_portrait, + graduation_certificate, + agency_id, + agency_name, + career_id, + career_name, + exam_level, + registration_batch, + study_center_id, + study_center, + agency_code, + is_inspect, + sign_photo, + is_pay, + pay_type, + pay_price, + type, + examine_status, + examine_feedback, + sort, + remarks, + status, + publication_time, + publisher, + delete_time, + delete_by, + del_flag, + registration_form, + admission_ticket, + transcript, + certificate, + certificate_status, + write_at, + consign_at, + enter_at, + shipping_mark, + shipping_name, + shipping_code, + shipping_task_id, + shipping_order_id, + shipping_poll_token, + send_man_name, + send_man_mobile, + send_man_print_addr, + shipping_status, + course_id, + order_price, + order_no, + create_time, + + VALUES + + + #{item.examRegistrationId}, + #{item.memberUserId}, + #{item.examId}, + #{item.examBatchIndex}, + #{item.name}, + #{item.sex}, + #{item.formerName}, + #{item.nation}, + #{item.identityCard}, + #{item.birthday}, + #{item.sourceType}, + #{item.nativePlace}, + #{item.politicalStatus}, + #{item.education}, + #{item.major}, + #{item.graduationSchool}, + #{item.entranceYear}, + #{item.contactInformation}, + #{item.provinceId}, + #{item.cityId}, + #{item.areaId}, + #{item.provinceName}, + #{item.cityName}, + #{item.areaName}, + #{item.address}, + #{item.zipCode}, + #{item.contactPhone}, + #{item.email}, + #{item.idPhoto}, + #{item.identityCardBadge}, + #{item.identityCardPortrait}, + #{item.graduationCertificate}, + #{item.agencyId}, + #{item.agencyName}, + #{item.careerId}, + #{item.careerName}, + #{item.examLevel}, + #{item.registrationBatch}, + #{item.studyCenterId}, + #{item.studyCenter}, + #{item.agencyCode}, + #{item.isInspect}, + #{item.signPhoto}, + #{item.isPay}, + #{item.payType}, + #{item.payPrice}, + #{item.type}, + #{item.examineStatus}, + #{item.examineFeedback}, + #{item.sort}, + #{item.remarks}, + #{item.status}, + #{item.publicationTime}, + #{item.publisher}, + #{item.deleteTime}, + #{item.deleteBy}, + #{item.delFlag}, + #{item.registrationForm}, + #{item.admissionTicket}, + #{item.transcript}, + #{item.certificate}, + #{item.certificateStatus}, + #{item.writeAt}, + #{item.consignAt}, + #{item.enterAt}, + #{item.shippingMark}, + #{item.shippingName}, + #{item.shippingCode}, + #{item.shippingTaskId}, + #{item.shippingOrderId}, + #{item.shippingPollToken}, + #{item.sendManName}, + #{item.sendManMobile}, + #{item.sendManPrintAddr}, + #{item.shippingStatus}, + #{item.courseId}, + #{item.orderPrice}, + #{item.orderNo} + #{item.createTime} + + + + + + + update tb_exam_registration + + member_user_id = #{memberUserId}, + exam_id = #{examId}, + exam_batch_index = #{examBatchIndex}, + name = #{name}, + sex = #{sex}, + former_name = #{formerName}, + nation = #{nation}, + identity_card = #{identityCard}, + birthday = #{birthday}, + source_type = #{sourceType}, + native_place = #{nativePlace}, + political_status = #{politicalStatus}, + education = #{education}, + major = #{major}, + graduation_school = #{graduationSchool}, + entrance_year = #{entranceYear}, + contact_information = #{contactInformation}, + province_id = #{provinceId}, + city_id = #{cityId}, + area_id = #{areaId}, + province_name = #{provinceName}, + city_name = #{cityName}, + area_name = #{areaName}, + address = #{address}, + zip_code = #{zipCode}, + contact_phone = #{contactPhone}, + email = #{email}, + id_photo = #{idPhoto}, + identity_card_badge = #{identityCardBadge}, + identity_card_portrait = #{identityCardPortrait}, + graduation_certificate = #{graduationCertificate}, + agency_id = #{agencyId}, + agency_name = #{agencyName}, + career_id = #{careerId}, + career_name = #{careerName}, + exam_level = #{examLevel}, + registration_batch = #{registrationBatch}, + study_center_id = #{studyCenterId}, + study_center = #{studyCenter}, + agency_code = #{agencyCode}, + is_inspect = #{isInspect}, + sign_photo = #{signPhoto}, + type = #{type}, + examine_status = #{examineStatus}, + examine_feedback = #{examineFeedback}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + is_pay = #{isPay}, + pay_type = #{payType}, + pay_price = #{payPrice}, + registration_form = #{registrationForm}, + admission_ticket = #{admissionTicket}, + transcript = #{transcript}, + certificate = #{certificate}, + certificate_status = #{certificateStatus}, + write_at = #{writeAt}, + consign_at = #{consignAt}, + enter_at = #{enterAt}, + shipping_mark = #{shippingMark}, + shipping_name = #{shippingName}, + shipping_code = #{shippingCode}, + shipping_task_id = #{shippingTaskId}, + shipping_order_id = #{shippingOrderId}, + shipping_poll_token = #{shippingPollToken}, + send_man_name = #{sendManName}, + send_man_mobile = #{sendManMobile}, + sendMan_print_addr = #{sendManPrintAddr}, + shipping_status = #{shippingStatus}, + course_id = #{courseId}, + zkzh = #{zkzh}, + + where exam_registration_id = #{examRegistrationId} + + + UPDATE tb_exam_registration + SET is_pay = -1, + update_time = NOW() + WHERE exam_registration_id IN ( + SELECT data_id + FROM tb_member_order + WHERE order_no IN + + #{no} + + ) + + + + delete from tb_exam_registration where exam_registration_id = #{examRegistrationId} + + + + delete from tb_exam_registration where exam_registration_id in + + #{examRegistrationId} + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbExamSimulateInfoMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbExamSimulateInfoMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..cd06d483d38320a2d970e79c9caec6a467cb843b --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbExamSimulateInfoMapper.xml @@ -0,0 +1,376 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select exam_simulate_info_id, exam_platform_number, member_user_id, exam_id, subject_warehouse_class_id, exam_type, exam_minute, + exam_start_time, exam_end_time, exam_status, complete_status, complete_time, start_time, end_time, submit_status, type, + examine_status, examine_feedback, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, + update_by, delete_time, delete_by, del_flag, total_score, pass_score, complete_score, pass_status, complete_status, + is_again, transcript_code + from tb_exam_simulate_info + + + + + + + + insert into tb_exam_simulate_info + + exam_platform_number, + member_user_id, + exam_id, + subject_warehouse_class_id, + exam_type, + exam_minute, + exam_start_time, + exam_end_time, + exam_status, + complete_status, + complete_time, + start_time, + end_time, + submit_status, + type, + examine_status, + examine_feedback, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + total_score, + pass_score, + complete_score, + pass_status, + is_again, + transcript_code, + + + #{examPlatformNumber}, + #{memberUserId}, + #{examId}, + #{subjectWarehouseClassId}, + #{examType}, + #{examMinute}, + #{examStartTime}, + #{examEndTime}, + #{examStatus}, + #{completeStatus}, + #{completeTime}, + #{startTime}, + #{endTime}, + #{submitStatus}, + #{type}, + #{examineStatus}, + #{examineFeedback}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + #{totalScore}, + #{passScore}, + #{completeScore}, + #{passStatus}, + #{isAgain}, + #{transcriptCode}, + + + + + update tb_exam_simulate_info + + exam_platform_number = #{examPlatformNumber}, + member_user_id = #{memberUserId}, + exam_id = #{examId}, + subject_warehouse_class_id = #{subjectWarehouseClassId}, + exam_type = #{examType}, + exam_minute = #{examMinute}, + exam_start_time = #{examStartTime}, + exam_end_time = #{examEndTime}, + exam_status = #{examStatus}, + complete_status = #{completeStatus}, + complete_time = #{completeTime}, + start_time = #{startTime}, + end_time = #{endTime}, + submit_status = #{submitStatus}, + type = #{type}, + examine_status = #{examineStatus}, + examine_feedback = #{examineFeedback}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + total_score = #{totalScore}, + pass_score = #{passScore}, + complete_score = #{completeScore}, + pass_status = #{passStatus}, + is_again = #{isAgain}, + transcript_code = #{transcriptCode}, + + where exam_simulate_info_id = #{examSimulateInfoId} + + + + delete from tb_exam_simulate_info where exam_simulate_info_id = #{examSimulateInfoId} + + + + delete from tb_exam_simulate_info where exam_simulate_info_id in + + #{examSimulateInfoId} + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbExamSubjectAnswerMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbExamSubjectAnswerMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..9c12be8fe8aa2c0ac197853825dac5dcfe846355 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbExamSubjectAnswerMapper.xml @@ -0,0 +1,238 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select exam_subject_answer_id, exam_subject_id, exam_subject_no, subject_type, subject_option, subject_name, is_answer, score, level, type, examine_status, examine_feedback, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_exam_subject_answer + + + + + + + + insert into tb_exam_subject_answer + + exam_subject_id, + exam_subject_no, + subject_type, + subject_option, + subject_name, + is_answer, + score, + level, + type, + examine_status, + examine_feedback, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{examSubjectId}, + #{examSubjectNo}, + #{subjectType}, + #{subjectOption}, + #{subjectName}, + #{isAnswer}, + #{score}, + #{level}, + #{type}, + #{examineStatus}, + #{examineFeedback}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_exam_subject_answer + + exam_subject_id = #{examSubjectId}, + exam_subject_no = #{examSubjectNo}, + subject_type = #{subjectType}, + subject_option = #{subjectOption}, + subject_name = #{subjectName}, + is_answer = #{isAnswer}, + score = #{score}, + level = #{level}, + type = #{type}, + examine_status = #{examineStatus}, + examine_feedback = #{examineFeedback}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where exam_subject_answer_id = #{examSubjectAnswerId} + + + + delete from tb_exam_subject_answer where exam_subject_answer_id = #{examSubjectAnswerId} + + + + delete from tb_exam_subject_answer where exam_subject_answer_id in + + #{examSubjectAnswerId} + + + + + + insert into tb_exam_subject_answer + + exam_subject_id, + exam_subject_no, + subject_type, + subject_option, + subject_name, + is_answer, + score, + sort, + create_time, + + + #{item.examSubjectId}, + #{item.examSubjectNo}, + #{item.subjectType}, + #{item.subjectOption}, + #{item.subjectName}, + #{item.isAnswer}, + #{item.score}, + #{item.sort}, + #{item.createTime}, + + + + + + + + + + delete from tb_exam_subject_answer where exam_subject_no = #{examSubjectNo} + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbExamSubjectFormalMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbExamSubjectFormalMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..dccd69a915b140fd99428258f5abf167eb7a43bb --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbExamSubjectFormalMapper.xml @@ -0,0 +1,228 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select exam_subject_formal_id, class_id, class_name, major_id, major_name, career_id, career_name, subject_warehouse_class_id, exam_id, exam_subject_id, exam_subject_no, score, level, type, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_exam_subject_formal + + + + + + + + insert into tb_exam_subject_formal + + class_id, + class_name, + major_id, + major_name, + career_id, + career_name, + subject_warehouse_class_id, + exam_id, + exam_subject_id, + exam_subject_no, + score, + level, + type, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{classId}, + #{className}, + #{majorId}, + #{majorName}, + #{careerId}, + #{careerName}, + #{subjectWarehouseClassId}, + #{examId}, + #{examSubjectId}, + #{examSubjectNo}, + #{score}, + #{level}, + #{type}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_exam_subject_formal + + class_id = #{classId}, + class_name = #{className}, + major_id = #{majorId}, + major_name = #{majorName}, + career_id = #{careerId}, + career_name = #{careerName}, + subject_warehouse_class_id = #{subjectWarehouseClassId}, + exam_id = #{examId}, + exam_subject_id = #{examSubjectId}, + exam_subject_no = #{examSubjectNo}, + score = #{score}, + level = #{level}, + type = #{type}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where exam_subject_formal_id = #{examSubjectFormalId} + + + + delete from tb_exam_subject_formal where exam_subject_formal_id = #{examSubjectFormalId} + + + + delete from tb_exam_subject_formal where exam_subject_formal_id in + + #{examSubjectFormalId} + + + + + update tb_exam_subject_formal + set deL_flag = 1, delete_time = now() + where exam_id = #{examId} + + + + + insert into tb_exam_subject_formal + + subject_warehouse_class_id, + exam_id, + exam_subject_id, + exam_subject_no, + score, + sort, + create_time, + + + #{item.subjectWarehouseClassId}, + #{item.examId}, + #{item.examSubjectId}, + #{item.examSubjectNo}, + #{item.score}, + #{item.sort}, + #{item.createTime}, + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbExamSubjectMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbExamSubjectMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..def85f1fac09e5c6c7e61397f25f1a3027a62cbe --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbExamSubjectMapper.xml @@ -0,0 +1,388 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select exam_subject_id, exam_subject_no, exam_type, exam_id, subject_warehouse_class_id, class_id, class_name, major_id, major_name, question, file_url, file_type, subject_type, is_selected, answer_ids, answer, subject_explain, score, level, type, examine_status, examine_feedback, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_exam_subject + + + + + + + + insert into tb_exam_subject + + exam_subject_no, + exam_type, + exam_id, + subject_warehouse_class_id, + class_id, + class_name, + major_id, + major_name, + question, + file_url, + file_type, + subject_type, + is_selected, + answer_ids, + answer, + subject_explain, + score, + level, + type, + examine_status, + examine_feedback, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{examSubjectNo}, + #{examType}, + #{examId}, + #{subjectWarehouseClassId}, + #{classId}, + #{className}, + #{majorId}, + #{majorName}, + #{question}, + #{fileUrl}, + #{fileType}, + #{subjectType}, + #{isSelected}, + #{answerIds}, + #{answer}, + #{subjectExplain}, + #{score}, + #{level}, + #{type}, + #{examineStatus}, + #{examineFeedback}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_exam_subject + + exam_subject_no = #{examSubjectNo}, + exam_type = #{examType}, + exam_id = #{examId}, + subject_warehouse_class_id = #{subjectWarehouseClassId}, + class_id = #{classId}, + class_name = #{className}, + major_id = #{majorId}, + major_name = #{majorName}, + question = #{question}, + file_url = #{fileUrl}, + file_type = #{fileType}, + subject_type = #{subjectType}, + is_selected = #{isSelected}, + answer_ids = #{answerIds}, + answer = #{answer}, + subject_explain = #{subjectExplain}, + score = #{score}, + level = #{level}, + type = #{type}, + examine_status = #{examineStatus}, + examine_feedback = #{examineFeedback}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where exam_subject_id = #{examSubjectId} + + + + delete from tb_exam_subject where exam_subject_id = #{examSubjectId} + + + + delete from tb_exam_subject where exam_subject_id in + + #{examSubjectId} + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbExamSubjectSimulateMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbExamSubjectSimulateMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..e4b5c5af061ea2c669995d169738a72e64d9409f --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbExamSubjectSimulateMapper.xml @@ -0,0 +1,179 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + select exam_subject_simulate_id, subject_warehouse_class_id, exam_subject_id, exam_subject_no, score, level, type, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_exam_subject_simulate + + + + + + + + insert into tb_exam_subject_simulate + + subject_warehouse_class_id, + exam_subject_id, + exam_subject_no, + score, + level, + type, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{subjectWarehouseClassId}, + #{examSubjectId}, + #{examSubjectNo}, + #{score}, + #{level}, + #{type}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_exam_subject_simulate + + subject_warehouse_class_id = #{subjectWarehouseClassId}, + exam_subject_id = #{examSubjectId}, + exam_subject_no = #{examSubjectNo}, + score = #{score}, + level = #{level}, + type = #{type}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where exam_subject_simulate_id = #{examSubjectSimulateId} + + + + delete from tb_exam_subject_simulate where exam_subject_simulate_id = #{examSubjectSimulateId} + + + + delete from tb_exam_subject_simulate where exam_subject_simulate_id in + + #{examSubjectSimulateId} + + + + + + insert into tb_exam_subject_simulate + + subject_warehouse_class_id, + exam_subject_id, + exam_subject_no, + score, + sort, + create_time, + + + #{item.subjectWarehouseClassId}, + #{item.examSubjectId}, + #{item.examSubjectNo}, + #{item.score}, + #{item.sort}, + #{item.createTime}, + + + + + + delete from tb_exam_subject_simulate where subject_warehouse_class_id = #{subjectWarehouseClassId} + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbExpressKdCodeMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbExpressKdCodeMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..1087676622038839c4cf8ceee52539f0d435d5fc --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbExpressKdCodeMapper.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + select id, code, name, delivery_id, is_default, disabled, logo, remark, create_time, del_flag from tb_express_kd_code + + + + + + + + insert into tb_express_kd_code + + code, + name, + delivery_id, + is_default, + disabled, + logo, + remark, + create_time, + del_flag, + + + #{code}, + #{name}, + #{deliveryId}, + #{isDefault}, + #{disabled}, + #{logo}, + #{remark}, + #{createTime}, + #{delFlag}, + + + + + update tb_express_kd_code + + code = #{code}, + name = #{name}, + delivery_id = #{deliveryId}, + is_default = #{isDefault}, + disabled = #{disabled}, + logo = #{logo}, + remark = #{remark}, + create_time = #{createTime}, + del_flag = #{delFlag}, + + where id = #{id} + + + + delete from tb_express_kd_code where id = #{id} + + + + delete from tb_express_kd_code where id in + + #{id} + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbLinkMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbLinkMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5f4a5d52cc6e6343954b7922ed9a48d1c234242 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbLinkMapper.xml @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select link_id, resources_one_id, resources_one_name, resources_two_id, resources_two_name, type, link_one, remarks, sort, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_link + + + + + + + + insert into tb_link + + resources_one_id, + resources_one_name, + resources_two_id, + resources_two_name, + type, + link_one, + remarks, + sort, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{resourcesOneId}, + #{resourcesOneName}, + #{resourcesTwoId}, + #{resourcesTwoName}, + #{type}, + #{linkOne}, + #{remarks}, + #{sort}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_link + + resources_one_id = #{resourcesOneId}, + resources_one_name = #{resourcesOneName}, + resources_two_id = #{resourcesTwoId}, + resources_two_name = #{resourcesTwoName}, + type = #{type}, + link_one = #{linkOne}, + remarks = #{remarks}, + sort = #{sort}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where link_id = #{linkId} + + + + delete from tb_link where link_id = #{linkId} + + + + delete from tb_link where link_id in + + #{linkId} + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbLiveBroadcastMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbLiveBroadcastMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..052f55e66c175d919fc799ac12037f2d23c96a63 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbLiveBroadcastMapper.xml @@ -0,0 +1,281 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select live_broadcast_id, live_broadcast_img, live_broadcast_name, live_broadcast_title, live_broadcast_info, live_broadcast_introduce, live_broadcast_details, live_broadcast_tag, live_broadcast_url, start_time, end_time, type, is_recommend, examine_status, examine_feedback, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_live_broadcast + + + + + + + + insert into tb_live_broadcast + + live_broadcast_img, + live_broadcast_name, + live_broadcast_title, + live_broadcast_info, + live_broadcast_introduce, + live_broadcast_details, + live_broadcast_tag, + live_broadcast_url, + start_time, + end_time, + type, + is_recommend, + examine_status, + examine_feedback, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{liveBroadcastImg}, + #{liveBroadcastName}, + #{liveBroadcastTitle}, + #{liveBroadcastInfo}, + #{liveBroadcastIntroduce}, + #{liveBroadcastDetails}, + #{liveBroadcastTag}, + #{liveBroadcastUrl}, + #{startTime}, + #{endTime}, + #{type}, + #{isRecommend}, + #{examineStatus}, + #{examineFeedback}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_live_broadcast + + live_broadcast_img = #{liveBroadcastImg}, + live_broadcast_name = #{liveBroadcastName}, + live_broadcast_title = #{liveBroadcastTitle}, + live_broadcast_info = #{liveBroadcastInfo}, + live_broadcast_introduce = #{liveBroadcastIntroduce}, + live_broadcast_details = #{liveBroadcastDetails}, + live_broadcast_tag = #{liveBroadcastTag}, + live_broadcast_url = #{liveBroadcastUrl}, + start_time = #{startTime}, + end_time = #{endTime}, + type = #{type}, + is_recommend = #{isRecommend}, + examine_status = #{examineStatus}, + examine_feedback = #{examineFeedback}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where live_broadcast_id = #{liveBroadcastId} + + + + delete from tb_live_broadcast where live_broadcast_id = #{liveBroadcastId} + + + + delete from tb_live_broadcast where live_broadcast_id in + + #{liveBroadcastId} + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbMajorClassMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbMajorClassMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..b17185c9f37bed807d3bcfc3003a439e8cb07991 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbMajorClassMapper.xml @@ -0,0 +1,389 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select major_id, pid, level, type, major_name, major_logo_one, major_logo_two, is_recommend, remarks, sort, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag, major_details, major_overview, major_syllabus, major_knowledge, major_certificate, major_information from tb_major_class + + + + + + + + + + insert into tb_major_class + + pid, + level, + type, + major_name, + major_logo_one, + major_logo_two, + is_recommend, + remarks, + sort, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + major_details, + major_overview, + major_syllabus, + major_knowledge, + major_certificate, + major_information, + + + #{pid}, + #{level}, + #{type}, + #{majorName}, + #{majorLogoOne}, + #{majorLogoTwo}, + #{isRecommend}, + #{remarks}, + #{sort}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + #{majorDetails}, + #{majorOverview}, + #{majorSyllabus}, + #{majorKnowledge}, + #{majorCertificate}, + #{majorInformation}, + + + + + update tb_major_class + + pid = #{pid}, + level = #{level}, + type = #{type}, + major_name = #{majorName}, + major_logo_one = #{majorLogoOne}, + major_logo_two = #{majorLogoTwo}, + is_recommend = #{isRecommend}, + remarks = #{remarks}, + sort = #{sort}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + major_details = #{majorDetails}, + major_overview = #{majorOverview}, + major_syllabus = #{majorSyllabus}, + major_knowledge = #{majorKnowledge}, + major_certificate = #{majorCertificate}, + major_information = #{majorInformation}, + + where major_id = #{majorId} + + + + delete from tb_major_class where major_id = #{majorId} + + + + delete from tb_major_class where major_id in + + #{majorId} + + + + + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberAddressMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberAddressMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..b2f715d8c8fddeb49ab15c3b3f15a4807d206b8d --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberAddressMapper.xml @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select member_address_id, member_user_id, name, phone, province_id, city_id, area_id, province_name, city_name, area_name, address,location, type, examine_status, examine_feedback, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_member_address + + + + + + + + insert into tb_member_address + + member_user_id, + name, + phone, + province_id, + city_id, + area_id, + province_name, + city_name, + area_name, + address, + location, + type, + examine_status, + examine_feedback, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{memberUserId}, + #{name}, + #{phone}, + #{provinceId}, + #{cityId}, + #{areaId}, + #{provinceName}, + #{cityName}, + #{areaName}, + #{address}, + #{location}, + #{type}, + #{examineStatus}, + #{examineFeedback}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_member_address + + member_user_id = #{memberUserId}, + name = #{name}, + phone = #{phone}, + province_id = #{provinceId}, + city_id = #{cityId}, + area_id = #{areaId}, + province_name = #{provinceName}, + city_name = #{cityName}, + area_name = #{areaName}, + address = #{address}, + location = #{location}, + type = #{type}, + examine_status = #{examineStatus}, + examine_feedback = #{examineFeedback}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where member_address_id = #{memberAddressId} + + + + + update tb_member_address set del_flag = 1, delete_time = now() where member_address_id = #{memberAddressId} + + + + + update tb_member_address set del_flag = 1, delete_time = now() where member_address_id in + + #{memberAddressId} + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberDiscussMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberDiscussMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..0f75d78e4694ce442820d9a651813b57c14e9d2a --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberDiscussMapper.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + select member_discuss_id, member_user_id, live_broadcast_id, course_id, chapter_id, content, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_member_discuss + + + + + + + + insert into tb_member_discuss + + member_user_id, + live_broadcast_id, + course_id, + chapter_id, + content, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{memberUserId}, + #{liveBroadcastId}, + #{courseId}, + #{chapterId}, + #{content}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_member_discuss + + member_user_id = #{memberUserId}, + live_broadcast_id = #{liveBroadcastId}, + course_id = #{courseId}, + chapter_id = #{chapterId}, + content = #{content}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where member_discuss_id = #{memberDiscussId} + + + + delete from tb_member_discuss where member_discuss_id = #{memberDiscussId} + + + + delete from tb_member_discuss where member_discuss_id in + + #{memberDiscussId} + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberExamSimulateAllMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberExamSimulateAllMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..209069130924aa68c2b1c51782cabf3ef3563c12 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberExamSimulateAllMapper.xml @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select member_exam_simulate_all_id, exam_simulate_info_id, member_user_id, exam_subject_id, subject_type, exam_type, location, my_answer, answer, score, status, level, type, sort, remarks, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_member_exam_simulate_all + + + + + + + + insert into tb_member_exam_simulate_all + + exam_simulate_info_id, + member_user_id, + exam_subject_id, + subject_type, + exam_type, + location, + my_answer, + answer, + score, + status, + level, + type, + sort, + remarks, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{examSimulateInfoId}, + #{memberUserId}, + #{examSubjectId}, + #{subjectType}, + #{examType}, + #{location}, + #{myAnswer}, + #{answer}, + #{score}, + #{status}, + #{level}, + #{type}, + #{sort}, + #{remarks}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_member_exam_simulate_all + + exam_simulate_info_id = #{examSimulateInfoId}, + member_user_id = #{memberUserId}, + exam_subject_id = #{examSubjectId}, + subject_type = #{subjectType}, + exam_type = #{examType}, + location = #{location}, + my_answer = #{myAnswer}, + answer = #{answer}, + score = #{score}, + status = #{status}, + level = #{level}, + type = #{type}, + sort = #{sort}, + remarks = #{remarks}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where member_exam_simulate_all_id = #{memberExamSimulateAllId} + + + + delete from tb_member_exam_simulate_all where member_exam_simulate_all_id = #{memberExamSimulateAllId} + + + + delete from tb_member_exam_simulate_all where member_exam_simulate_all_id in + + #{memberExamSimulateAllId} + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberJoinMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberJoinMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..6f6211a55ce922c93d9a6eda45354f8827358bb3 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberJoinMapper.xml @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + select member_join_id, member_user_id, res_id, type, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_member_join + + + + + + + + insert into tb_member_join + + member_user_id, + res_id, + type, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{memberUserId}, + #{resId}, + #{type}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_member_join + + member_user_id = #{memberUserId}, + res_id = #{resId}, + type = #{type}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where member_join_id = #{memberJoinId} + + + + delete from tb_member_join where member_join_id = #{memberJoinId} + + + + delete from tb_member_join where member_join_id in + + #{memberJoinId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberMajorMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberMajorMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..5e39d556aec7abee1fae281be46face867dac221 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberMajorMapper.xml @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + select member_major_id, member_user_id, major_id, res_id, type, sort, remarks, status, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_member_major + + + + + + + + insert into tb_member_major + + member_user_id, + major_id, + res_id, + type, + sort, + remarks, + status, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{memberUserId}, + #{majorId}, + #{resId}, + #{type}, + #{sort}, + #{remarks}, + #{status}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_member_major + + member_user_id = #{memberUserId}, + major_id = #{majorId}, + res_id = #{resId}, + type = #{type}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where member_major_id = #{memberMajorId} + + + + delete from tb_member_major where member_major_id = #{memberMajorId} + + + + delete from tb_member_major where member_major_id in + + #{memberMajorId} + + + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberOrderMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberOrderMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..8188515b11c9c3a460af84c1873007fd73e5b3d2 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberOrderMapper.xml @@ -0,0 +1,302 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select order_id, order_no, order_name, member_user_id, data_id, order_type, remarks, img, pay_type, pay_price, order_price, discount_price, deduction_score, pay_status, pay_time, name, phone, province_name, city_name, area_name, address, status, create_time, create_by, update_time, update_by, del_flag from tb_member_order + + + + + + + + insert into tb_member_order + + order_no, + order_name, + member_user_id, + data_id, + order_type, + remarks, + img, + pay_type, + pay_price, + order_price, + discount_price, + deduction_score, + pay_status, + pay_time, + name, + phone, + province_name, + city_name, + area_name, + address, + status, + create_time, + create_by, + update_time, + update_by, + del_flag, + + + #{orderNo}, + #{orderName}, + #{memberUserId}, + #{dataId}, + #{orderType}, + #{remarks}, + #{img}, + #{payType}, + #{payPrice}, + #{orderPrice}, + #{discountPrice}, + #{deductionScore}, + #{payStatus}, + #{payTime}, + #{name}, + #{phone}, + #{provinceName}, + #{cityName}, + #{areaName}, + #{address}, + #{status}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{delFlag}, + + + + + update tb_member_order + + order_no = #{orderNo}, + order_name = #{orderName}, + member_user_id = #{memberUserId}, + data_id = #{dataId}, + order_type = #{orderType}, + remarks = #{remarks}, + img = #{img}, + pay_type = #{payType}, + pay_price = #{payPrice}, + order_price = #{orderPrice}, + discount_price = #{discountPrice}, + deduction_score = #{deductionScore}, + pay_status = #{payStatus}, + pay_time = #{payTime}, + name = #{name}, + phone = #{phone}, + province_name = #{provinceName}, + city_name = #{cityName}, + area_name = #{areaName}, + address = #{address}, + status = #{status}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + del_flag = #{delFlag}, + + where order_id = #{orderId} + + + + delete from tb_member_order where order_id = #{orderId} + + + + delete from tb_member_order where order_id in + + #{orderId} + + + + + + + DELETE FROM tb_exam_registration + WHERE exam_registration_id IN ( + SELECT data_id FROM tb_member_order WHERE order_no IN + + #{no} + + ) + + + + DELETE FROM tb_member_order + WHERE order_no IN + + #{no} + + + + + + + + + + update tb_member_order + + member_user_id = #{memberUserId}, + data_id = #{dataId}, + order_type = #{orderType}, + remarks = #{remarks}, + order_name = #{orderName}, + img = #{img}, + pay_type = #{payType}, + pay_price = #{payPrice}, + order_price = #{orderPrice}, + discount_price = #{discountPrice}, + deduction_score = #{deductionScore}, + pay_status = #{payStatus}, + pay_time = #{payTime}, + name = #{name}, + phone = #{phone}, + province_name = #{provinceName}, + city_name = #{cityName}, + area_name = #{areaName}, + address = #{address}, + status = #{status}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + del_flag = #{delFlag}, + + where order_no = #{orderNo} + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberScoreMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberScoreMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..e0e0abfa3abb88375135c400bdf716f077bc8c2a --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberScoreMapper.xml @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select member_score_id, member_user_id, name, score, type, income_expenses, order_id, price, explains, lower, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_member_score + + + + + + + + insert into tb_member_score + + member_user_id, + name, + score, + type, + income_expenses, + order_id, + price, + explains, + lower, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{memberUserId}, + #{name}, + #{score}, + #{type}, + #{incomeExpenses}, + #{orderId}, + #{price}, + #{explains}, + #{lower}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_member_score + + member_user_id = #{memberUserId}, + name = #{name}, + score = #{score}, + type = #{type}, + income_expenses = #{incomeExpenses}, + order_id = #{orderId}, + price = #{price}, + explains = #{explains}, + lower = #{lower}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where member_score_id = #{memberScoreId} + + + + delete from tb_member_score where member_score_id = #{memberScoreId} + + + + delete from tb_member_score where member_score_id in + + #{memberScoreId} + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberSignMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberSignMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..b1f04e017281fb7c4c024b00b8407c6a5798a125 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberSignMapper.xml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + select member_sign_id, member_user_id, sign_year, sign_month, sign_day, sign_date, sign_score, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_member_sign + + + + + + + + insert into tb_member_sign + + member_user_id, + sign_year, + sign_month, + sign_day, + sign_date, + sign_score, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{memberUserId}, + #{signYear}, + #{signMonth}, + #{signDay}, + #{signDate}, + #{signScore}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_member_sign + + member_user_id = #{memberUserId}, + sign_year = #{signYear}, + sign_month = #{signMonth}, + sign_day = #{signDay}, + sign_date = #{signDate}, + sign_score = #{signScore}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where member_sign_id = #{memberSignId} + + + + delete from tb_member_sign where member_sign_id = #{memberSignId} + + + + delete from tb_member_sign where member_sign_id in + + #{memberSignId} + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberSubjectAllMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberSubjectAllMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..d71c869cf3ecb1878257fcb36cf714f24827abd1 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberSubjectAllMapper.xml @@ -0,0 +1,212 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select member_subject_all_id, member_user_id, exam_subject_id, subject_type, practice_type, location, my_answer, answer, score, status, level, type, sort, remarks, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_member_subject_all + + + + + + + + insert into tb_member_subject_all + + member_user_id, + exam_subject_id, + subject_type, + practice_type, + location, + my_answer, + answer, + score, + status, + level, + type, + sort, + remarks, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{memberUserId}, + #{examSubjectId}, + #{subjectType}, + #{practiceType}, + #{location}, + #{myAnswer}, + #{answer}, + #{score}, + #{status}, + #{level}, + #{type}, + #{sort}, + #{remarks}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_member_subject_all + + member_user_id = #{memberUserId}, + exam_subject_id = #{examSubjectId}, + subject_type = #{subjectType}, + practice_type = #{practiceType}, + location = #{location}, + my_answer = #{myAnswer}, + answer = #{answer}, + score = #{score}, + status = #{status}, + level = #{level}, + type = #{type}, + sort = #{sort}, + remarks = #{remarks}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where member_subject_all_id = #{memberSubjectAllId} + + + + delete from tb_member_subject_all where member_subject_all_id = #{memberSubjectAllId} + + + + delete from tb_member_subject_all where member_subject_all_id in + + #{memberSubjectAllId} + + + + DELETE tmsa + FROM tb_member_subject_all tmsa + LEFT JOIN tb_exam_subject tes + ON tmsa.exam_subject_id = tes.exam_subject_id + WHERE tmsa.member_user_id = #{memberUserId} + + AND tes.subject_warehouse_class_id = #{subjectWarehouseClassId} + + + AND tmsa.practice_type = #{practiceType} + + AND tes.status = 0 + AND tes.del_flag = 0; + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberSubjectCollectMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberSubjectCollectMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..b8a1a33d0bfbbe46bde005617a4afe7c2476e16d --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberSubjectCollectMapper.xml @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + + select member_subject_collect_id, member_user_id, exam_subject_id, course_id, practice_type, location, type, sort, remarks, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_member_subject_collect + + + + + + + + insert into tb_member_subject_collect + + member_user_id, + exam_subject_id, + course_id, + practice_type, + location, + type, + sort, + remarks, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{memberUserId}, + #{examSubjectId}, + #{courseId}, + #{practiceType}, + #{location}, + #{type}, + #{sort}, + #{remarks}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_member_subject_collect + + member_user_id = #{memberUserId}, + exam_subject_id = #{examSubjectId}, + course_id = #{courseId}, + practice_type = #{practiceType}, + location = #{location}, + type = #{type}, + sort = #{sort}, + remarks = #{remarks}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where member_subject_collect_id = #{memberSubjectCollectId} + + + + delete from tb_member_subject_collect where member_subject_collect_id = #{memberSubjectCollectId} + + + + delete from tb_member_subject_collect where member_subject_collect_id in + + #{memberSubjectCollectId} + + + + + + + + + INSERT INTO tb_member_subject_collect (member_user_id, exam_subject_id, create_time) + VALUES + + (#{item.memberUserId}, #{item.examSubjectId}, #{item.createTime}) + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberSubjectWrongMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberSubjectWrongMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..35ff14409da86237f9191cbdbf7d9538075ca9c1 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbMemberSubjectWrongMapper.xml @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + select member_subject_wrong_id, member_user_id, exam_subject_id, practice_type, location, my_answer, answer, score, status, type, sort, remarks, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_member_subject_wrong + + + + + + + + insert into tb_member_subject_wrong + + member_user_id, + exam_subject_id, + practice_type, + location, + my_answer, + answer, + score, + status, + type, + sort, + remarks, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{memberUserId}, + #{examSubjectId}, + #{practiceType}, + #{location}, + #{myAnswer}, + #{answer}, + #{score}, + #{status}, + #{type}, + #{sort}, + #{remarks}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_member_subject_wrong + + member_user_id = #{memberUserId}, + exam_subject_id = #{examSubjectId}, + practice_type = #{practiceType}, + location = #{location}, + my_answer = #{myAnswer}, + answer = #{answer}, + score = #{score}, + status = #{status}, + type = #{type}, + sort = #{sort}, + remarks = #{remarks}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where member_subject_wrong_id = #{memberSubjectWrongId} + + + + delete from tb_member_subject_wrong where member_subject_wrong_id = #{memberSubjectWrongId} + + + + delete from tb_member_subject_wrong where member_subject_wrong_id in + + #{memberSubjectWrongId} + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbNewsMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbNewsMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..71f23ed438e87e8d3d5037cc1dcc18a2ae609ad0 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbNewsMapper.xml @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + select + news_id, title, show_img, prospectus, publisher, publication_time, content, + create_time, create_by, update_time, update_by, del_flag, delete_time, delete_by + from tb_news + + + + + + + + insert into tb_news + + title, + show_img, + prospectus, + publisher, + publication_time, + content, + create_time, + create_by, + update_time, + update_by, + del_flag, + delete_time, + delete_by, + + + #{title}, + #{showImg}, + #{prospectus}, + #{publisher}, + #{publicationTime}, + #{content}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{delFlag}, + #{deleteTime}, + #{deleteBy}, + + + + + update tb_news + + title = #{title}, + show_img = #{showImg}, + prospectus = #{prospectus}, + publisher = #{publisher}, + publication_time = #{publicationTime}, + content = #{content}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + del_flag = #{delFlag}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + + where news_id = #{newsId} + + + + update tb_news + set del_flag = '1', delete_time = now() + where news_id = #{newsId} + + + + update tb_news + set del_flag = '1', delete_time = now() + where news_id in + + #{newsId} + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbNoticeMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbNoticeMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..4e29b4dd2a645f2a26a4f39b7f630abb07782ada --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbNoticeMapper.xml @@ -0,0 +1,231 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select + notice_id, + title, + show_img, + publisher, + publication_time, + content, + create_time, create_by, update_time, update_by, del_flag, delete_time, delete_by + ,publisher_id + ,type + ,type_two + ,views_num + ,prospectus + ,status + ,is_main + from tb_notice + + + + + + + + insert into tb_notice + + title, + show_img, + publisher, + publication_time, + content, + create_time, + create_by, + update_time, + update_by, + del_flag, + delete_time, + delete_by, + publisher_id, + type, + type_two, + views_num, + prospectus, + status, + is_main, + + + #{title}, + #{showImg}, + #{publisher}, + #{publicationTime}, + #{content}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{delFlag}, + #{deleteTime}, + #{deleteBy}, + #{publisherId}, + #{type}, + #{typeTwo}, + #{viewsNum}, + #{prospectus}, + #{status}, + #{isMain}, + + + + + update tb_notice + + title = #{title}, + show_img = #{showImg}, + publisher = #{publisher}, + publication_time = #{publicationTime}, + content = #{content}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + del_flag = #{delFlag}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + publisher_id = #{publisherId}, + type = #{type}, + type_two = #{typeTwo}, + views_num = #{viewsNum}, + prospectus = #{prospectus}, + status = #{status}, + is_main = #{isMain}, + + where notice_id = #{noticeId} + + + + update tb_notice + set del_flag = 1,delete_time = now() + where notice_id = #{noticeId} + + + + update tb_notice + set del_flag = 1,delete_time = now() + where notice_id in + + #{noticeId} + + + + + + + + + + + update tb_notice set views_num = views_num + 1 + where notice_id = #{noticeId} + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbPostAddressMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbPostAddressMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..0085fa7f40b668a1d4779660f11d6449521587b5 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbPostAddressMapper.xml @@ -0,0 +1,184 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select post_address_id, member_user_id, name, phone, province_id, city_id, area_id, province_name, city_name, area_name, address, data_id, type, examine_status, examine_feedback, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_post_address + + + + + + + + insert into tb_post_address + + member_user_id, + name, + phone, + province_id, + city_id, + area_id, + province_name, + city_name, + area_name, + address, + data_id, + type, + examine_status, + examine_feedback, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{memberUserId}, + #{name}, + #{phone}, + #{provinceId}, + #{cityId}, + #{areaId}, + #{provinceName}, + #{cityName}, + #{areaName}, + #{address}, + #{dataId}, + #{type}, + #{examineStatus}, + #{examineFeedback}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_post_address + + member_user_id = #{memberUserId}, + name = #{name}, + phone = #{phone}, + province_id = #{provinceId}, + city_id = #{cityId}, + area_id = #{areaId}, + province_name = #{provinceName}, + city_name = #{cityName}, + area_name = #{areaName}, + address = #{address}, + data_id = #{dataId}, + type = #{type}, + examine_status = #{examineStatus}, + examine_feedback = #{examineFeedback}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where post_address_id = #{postAddressId} + + + + delete from tb_post_address where post_address_id = #{postAddressId} + + + + delete from tb_post_address where post_address_id in + + #{postAddressId} + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbRegionMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbRegionMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..6fdc7d56437f010aed0174e737cc50031be8213f --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbRegionMapper.xml @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + select id, pid, shortname, name, merger_name, type, pinyin, phone_code, code, first, lng, lat, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_region + + + + + + + + insert into tb_region + + pid, + shortname, + name, + merger_name, + type, + pinyin, + phone_code, + code, + first, + lng, + lat, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{pid}, + #{shortname}, + #{name}, + #{mergerName}, + #{type}, + #{pinyin}, + #{phoneCode}, + #{code}, + #{first}, + #{lng}, + #{lat}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_region + + pid = #{pid}, + shortname = #{shortname}, + name = #{name}, + merger_name = #{mergerName}, + type = #{type}, + pinyin = #{pinyin}, + phone_code = #{phoneCode}, + code = #{code}, + first = #{first}, + lng = #{lng}, + lat = #{lat}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where id = #{id} + + + + delete from tb_region where id = #{id} + + + + delete from tb_region where id in + + #{id} + + + + + + + + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbSmsCodeMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbSmsCodeMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..6e2a0e4da025fe21d24b0773a0a17ee1a1e31074 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbSmsCodeMapper.xml @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + select sms_code_id, phone, sms_code, type, status, create_time, update_time, del_flag from tb_sms_code + + + + + + + + insert into tb_sms_code + + sms_code_id, + phone, + sms_code, + type, + status, + create_time, + update_time, + del_flag, + + + #{smsCodeId}, + #{phone}, + #{smsCode}, + #{type}, + #{status}, + #{createTime}, + #{updateTime}, + #{delFlag}, + + + + + update tb_sms_code + + phone = #{phone}, + sms_code = #{smsCode}, + type = #{type}, + status = #{status}, + create_time = #{createTime}, + update_time = #{updateTime}, + del_flag = #{delFlag}, + + where sms_code_id = #{smsCodeId} + + + + delete from tb_sms_code where sms_code_id = #{smsCodeId} + + + + delete from tb_sms_code where sms_code_id in + + #{smsCodeId} + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbStudentMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbStudentMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..ba2932c69d88ec6bbf018ce335350a81e1bb01bb --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbStudentMapper.xml @@ -0,0 +1,488 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select student_id, open_id, gzh_open_id, union_id, student_number, login_token, login_token_encrypt, teacher_id, parent_id, parent_number, head_portrait, nick_name, student_name, sex, birthday, phone, identity_card, identity_card_badge, identity_card_portrait, graduation_certificate, education, graduation_school_id, graduation_school, graduation_time, login_type, openid, password, password_unencrypted, Invitation_code_img, type, city_id, province_id, area_id, province_name, city_name, area_name, address, examine_status, examine_feedback, frozen_status, frozen_feedback, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_student + + + + + + + + insert into tb_student + + open_id, + gzh_open_id, + union_id, + student_number, + login_token, + login_token_encrypt, + teacher_id, + parent_id, + parent_number, + head_portrait, + nick_name, + student_name, + sex, + birthday, + phone, + identity_card, + identity_card_badge, + identity_card_portrait, + graduation_certificate, + education, + graduation_school_id, + graduation_school, + graduation_time, + login_type, + openid, + password, + password_unencrypted, + Invitation_code_img, + type, + city_id, + province_id, + area_id, + province_name, + city_name, + area_name, + address, + examine_status, + examine_feedback, + frozen_status, + frozen_feedback, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{openId}, + #{gzhOpenId}, + #{unionId}, + #{studentNumber}, + #{loginToken}, + #{loginTokenEncrypt}, + #{teacherId}, + #{parentId}, + #{parentNumber}, + #{headPortrait}, + #{nickName}, + #{studentName}, + #{sex}, + #{birthday}, + #{phone}, + #{identityCard}, + #{identityCardBadge}, + #{identityCardPortrait}, + #{graduationCertificate}, + #{education}, + #{graduationSchoolId}, + #{graduationSchool}, + #{graduationTime}, + #{loginType}, + #{openid}, + #{password}, + #{passwordUnencrypted}, + #{invitationCodeImg}, + #{type}, + #{cityId}, + #{provinceId}, + #{areaId}, + #{provinceName}, + #{cityName}, + #{areaName}, + #{address}, + #{examineStatus}, + #{examineFeedback}, + #{frozenStatus}, + #{frozenFeedback}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + INSERT INTO tb_student + + + + open_id, + gzh_open_id, + union_id, + student_number, + login_token, + login_token_encrypt, + teacher_id, + parent_id, + parent_number, + head_portrait, + nick_name, + student_name, + sex, + birthday, + phone, + identity_card, + identity_card_badge, + identity_card_portrait, + graduation_certificate, + education, + graduation_school_id, + graduation_school, + graduation_time, + login_type, + openid, + password, + password_unencrypted, + Invitation_code_img, + type, + city_id, + province_id, + area_id, + province_name, + city_name, + area_name, + address, + examine_status, + examine_feedback, + frozen_status, + frozen_feedback, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + VALUES + + + #{item.openId}, + #{item.gzhOpenId}, + #{item.unionId}, + #{item.studentNumber}, + #{item.loginToken}, + #{item.loginTokenEncrypt}, + #{item.teacherId}, + #{item.parentId}, + #{item.parentNumber}, + #{item.headPortrait}, + #{item.nickName}, + #{item.studentName}, + #{item.sex}, + #{item.birthday}, + #{item.phone}, + #{item.identityCard}, + #{item.identityCardBadge}, + #{item.identityCardPortrait}, + #{item.graduationCertificate}, + #{item.education}, + #{item.graduationSchoolId}, + #{item.graduationSchool}, + #{item.graduationTime}, + #{item.loginType}, + #{item.openid}, + #{item.password}, + #{item.passwordUnencrypted}, + #{item.invitationCodeImg}, + #{item.type}, + #{item.cityId}, + #{item.provinceId}, + #{item.areaId}, + #{item.provinceName}, + #{item.cityName}, + #{item.areaName}, + #{item.address}, + #{item.examineStatus}, + #{item.examineFeedback}, + #{item.frozenStatus}, + #{item.frozenFeedback}, + #{item.sort}, + #{item.remarks}, + #{item.status}, + #{item.publicationTime}, + #{item.publisher}, + #{item.createTime}, + #{item.createBy}, + #{item.updateTime}, + #{item.updateBy}, + #{item.deleteTime}, + #{item.deleteBy}, + #{item.delFlag}, + + + + + + update tb_student + + open_id = #{openId}, + gzh_open_id = #{gzhOpenId}, + union_id = #{unionId}, + student_number = #{studentNumber}, + login_token = #{loginToken}, + login_token_encrypt = #{loginTokenEncrypt}, + teacher_id = #{teacherId}, + parent_id = #{parentId}, + parent_number = #{parentNumber}, + head_portrait = #{headPortrait}, + nick_name = #{nickName}, + student_name = #{studentName}, + sex = #{sex}, + birthday = #{birthday}, + phone = #{phone}, + identity_card = #{identityCard}, + identity_card_badge = #{identityCardBadge}, + identity_card_portrait = #{identityCardPortrait}, + graduation_certificate = #{graduationCertificate}, + education = #{education}, + graduation_school_id = #{graduationSchoolId}, + graduation_school = #{graduationSchool}, + graduation_time = #{graduationTime}, + login_type = #{loginType}, + openid = #{openid}, + password = #{password}, + password_unencrypted = #{passwordUnencrypted}, + Invitation_code_img = #{invitationCodeImg}, + type = #{type}, + city_id = #{cityId}, + province_id = #{provinceId}, + area_id = #{areaId}, + province_name = #{provinceName}, + city_name = #{cityName}, + area_name = #{areaName}, + address = #{address}, + examine_status = #{examineStatus}, + examine_feedback = #{examineFeedback}, + frozen_status = #{frozenStatus}, + frozen_feedback = #{frozenFeedback}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where student_id = #{studentId} + + + + delete from tb_student where student_id = #{studentId} + + + + delete from tb_student where student_id in + + #{studentId} + + + + + + + + + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbStudyCenterClassMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbStudyCenterClassMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..c8240f855e56475d24b68e2e0fc2185ac4503a84 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbStudyCenterClassMapper.xml @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select study_center_class_id, pid, level, type, name, logo_one, logo_two, is_recommend, remarks, sort, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_study_center_class + + + + + + + + insert into tb_study_center_class + + pid, + level, + type, + name, + logo_one, + logo_two, + is_recommend, + remarks, + sort, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{pid}, + #{level}, + #{type}, + #{name}, + #{logoOne}, + #{logoTwo}, + #{isRecommend}, + #{remarks}, + #{sort}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_study_center_class + + pid = #{pid}, + level = #{level}, + type = #{type}, + name = #{name}, + logo_one = #{logoOne}, + logo_two = #{logoTwo}, + is_recommend = #{isRecommend}, + remarks = #{remarks}, + sort = #{sort}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where study_center_class_id = #{studyCenterClassId} + + + + delete from tb_study_center_class where study_center_class_id = #{studyCenterClassId} + + + + delete from tb_study_center_class where study_center_class_id in + + #{studyCenterClassId} + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbStudyCenterFileMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbStudyCenterFileMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..eda732fdc0691e1c19f090aebfef9fc06faf71c0 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbStudyCenterFileMapper.xml @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select study_center_file_id, study_center_id, file_url, file_type, type, examine_status, examine_feedback, frozen_status, frozen_feedback, is_recommend, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_study_center_file + + + + + + + + insert into tb_study_center_file + + study_center_id, + file_url, + file_type, + type, + examine_status, + examine_feedback, + frozen_status, + frozen_feedback, + is_recommend, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{studyCenterId}, + #{fileUrl}, + #{fileType}, + #{type}, + #{examineStatus}, + #{examineFeedback}, + #{frozenStatus}, + #{frozenFeedback}, + #{isRecommend}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_study_center_file + + study_center_id = #{studyCenterId}, + file_url = #{fileUrl}, + file_type = #{fileType}, + type = #{type}, + examine_status = #{examineStatus}, + examine_feedback = #{examineFeedback}, + frozen_status = #{frozenStatus}, + frozen_feedback = #{frozenFeedback}, + is_recommend = #{isRecommend}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where study_center_file_id = #{studyCenterFileId} + + + + delete from tb_study_center_file where study_center_file_id = #{studyCenterFileId} + + + + delete from tb_study_center_file where study_center_file_id in + + #{studyCenterFileId} + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbStudyCenterMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbStudyCenterMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..a64b47bdbf4bd84e465779a8b582bb6366590ad0 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbStudyCenterMapper.xml @@ -0,0 +1,373 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select study_center_id, sys_user_id, study_center_class_id, continuing_education_class_id, study_center_number, study_center_logo, study_center_background, school_name, study_center_name, study_center_title, study_center_describe, study_center_tag, study_center_introduce, recommend_course, superintendent, phone, enterprise_name, business_license_credit_code, business_license_img, province_id, city_id, area_id, province_name, city_name, area_name, address, type, examine_status, examine_feedback, frozen_status, frozen_feedback, is_recommend,teacher_name,teacher_phone, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_study_center + + + + + + + + + + + + insert into tb_study_center + + sys_user_id, + study_center_class_id, + continuing_education_class_id, + study_center_number, + study_center_logo, + study_center_background, + school_name, + study_center_name, + study_center_title, + study_center_describe, + study_center_tag, + study_center_introduce, + recommend_course, + superintendent, + phone, + enterprise_name, + business_license_credit_code, + business_license_img, + province_id, + city_id, + area_id, + province_name, + city_name, + area_name, + address, + type, + examine_status, + examine_feedback, + frozen_status, + frozen_feedback, + is_recommend, + teacher_name, + teacher_phone, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{sysUserId}, + #{studyCenterClassId}, + #{continuingEducationClassId}, + #{studyCenterNumber}, + #{studyCenterLogo}, + #{studyCenterBackground}, + #{schoolName}, + #{studyCenterName}, + #{studyCenterTitle}, + #{studyCenterDescribe}, + #{studyCenterTag}, + #{studyCenterIntroduce}, + #{recommendCourse}, + #{superintendent}, + #{phone}, + #{enterpriseName}, + #{businessLicenseCreditCode}, + #{businessLicenseImg}, + #{provinceId}, + #{cityId}, + #{areaId}, + #{provinceName}, + #{cityName}, + #{areaName}, + #{address}, + #{type}, + #{examineStatus}, + #{examineFeedback}, + #{frozenStatus}, + #{frozenFeedback}, + #{isRecommend}, + #{teacherName}, + #{teacherPhone}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_study_center + + sys_user_id = #{sysUserId}, + study_center_class_id = #{studyCenterClassId}, + continuing_education_class_id = #{continuingEducationClassId}, + study_center_number = #{studyCenterNumber}, + study_center_logo = #{studyCenterLogo}, + study_center_background = #{studyCenterBackground}, + school_name = #{schoolName}, + study_center_name = #{studyCenterName}, + study_center_title = #{studyCenterTitle}, + study_center_describe = #{studyCenterDescribe}, + study_center_tag = #{studyCenterTag}, + study_center_introduce = #{studyCenterIntroduce}, + recommend_course = #{recommendCourse}, + superintendent = #{superintendent}, + phone = #{phone}, + enterprise_name = #{enterpriseName}, + business_license_credit_code = #{businessLicenseCreditCode}, + business_license_img = #{businessLicenseImg}, + province_id = #{provinceId}, + city_id = #{cityId}, + area_id = #{areaId}, + province_name = #{provinceName}, + city_name = #{cityName}, + area_name = #{areaName}, + address = #{address}, + type = #{type}, + examine_status = #{examineStatus}, + examine_feedback = #{examineFeedback}, + frozen_status = #{frozenStatus}, + frozen_feedback = #{frozenFeedback}, + is_recommend = #{isRecommend}, + teacher_name = #{teacherName}, + teacher_phone = #{teacherPhone}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where study_center_id = #{studyCenterId} + + + + delete from tb_study_center where study_center_id = #{studyCenterId} + + + + delete from tb_study_center where study_center_id in + + #{studyCenterId} + + + + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbStudyCenterTeacherMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbStudyCenterTeacherMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..bc50edacf6c50e8fcbc8dbd066451a6209e616b6 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbStudyCenterTeacherMapper.xml @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + select study_center_teacher_id, study_center_id, teacher_name, teacher_phone, sort, create_time, update_time, delete_time, create_by, update_by, delete_by, del_flag from tb_study_center_teacher + + + + + + + + + + insert into tb_study_center_teacher + + study_center_id, + teacher_name, + teacher_phone, + sort, + create_time, + update_time, + delete_time, + create_by, + update_by, + delete_by, + del_flag, + + + #{studyCenterId}, + #{teacherName}, + #{teacherPhone}, + #{sort}, + #{createTime}, + #{updateTime}, + #{deleteTime}, + #{createBy}, + #{updateBy}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_study_center_teacher + + study_center_id = #{studyCenterId}, + teacher_name = #{teacherName}, + teacher_phone = #{teacherPhone}, + sort = #{sort}, + create_time = #{createTime}, + update_time = #{updateTime}, + delete_time = #{deleteTime}, + create_by = #{createBy}, + update_by = #{updateBy}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where study_center_teacher_id = #{studyCenterTeacherId} + + + + delete from tb_study_center_teacher where study_center_teacher_id = #{studyCenterTeacherId} + + + + delete from tb_study_center_teacher where study_center_id = #{studyCenterId} + + + + delete from tb_study_center_teacher where study_center_teacher_id in + + #{studyCenterTeacherId} + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbSubjectWarehouseClassMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbSubjectWarehouseClassMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..d646cc9cbb77a7f29c02b0d7c9c09701838f1eba --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbSubjectWarehouseClassMapper.xml @@ -0,0 +1,246 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select subject_warehouse_class_id, subject_warehouse_class_no, class_id, class_name, major_id, major_name, name, logo, file_url, introduce, tips, type, examine_status, examine_feedback, sort, remarks, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag, single_select_num, single_select_score, many_select_num, many_select_score, judge_num, judge_score, discuss_num, discuss_score, total_score, pass_score, simulation_exam_minute, simulation_status from tb_subject_warehouse_class + + + + + + + + + + insert into tb_subject_warehouse_class + + subject_warehouse_class_no, + class_id, + class_name, + major_id, + major_name, + name, + logo, + file_url, + introduce, + tips, + type, + examine_status, + examine_feedback, + sort, + remarks, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + single_select_num, + single_select_score, + many_select_num, + many_select_score, + judge_num, + judge_score, + discuss_num, + discuss_score, + total_score, + pass_score, + simulation_exam_minute, + simulation_status, + + + #{subjectWarehouseClassNo}, + #{classId}, + #{className}, + #{majorId}, + #{majorName}, + #{name}, + #{logo}, + #{fileUrl}, + #{introduce}, + #{tips}, + #{type}, + #{examineStatus}, + #{examineFeedback}, + #{sort}, + #{remarks}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + #{singleSelectNum}, + #{singleSelectScore}, + #{manySelectNum}, + #{manySelectScore}, + #{judgeNum}, + #{judgeScore}, + #{discussNum}, + #{discussScore}, + #{totalScore}, + #{passScore}, + #{simulationExamMinute}, + #{simulationStatus}, + + + + + update tb_subject_warehouse_class + + subject_warehouse_class_no = #{subjectWarehouseClassNo}, + class_id = #{classId}, + class_name = #{className}, + major_id = #{majorId}, + major_name = #{majorName}, + name = #{name}, + logo = #{logo}, + file_url = #{fileUrl}, + introduce = #{introduce}, + tips = #{tips}, + type = #{type}, + examine_status = #{examineStatus}, + examine_feedback = #{examineFeedback}, + sort = #{sort}, + remarks = #{remarks}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + single_select_num = #{singleSelectNum}, + single_select_score = #{singleSelectScore}, + many_select_num = #{manySelectNum}, + many_select_score = #{manySelectScore}, + judge_num = #{judgeNum}, + judge_score = #{judgeScore}, + discuss_num = #{discussNum}, + discuss_score = #{discussScore}, + total_score = #{totalScore}, + pass_score = #{passScore}, + simulation_exam_minute = #{simulationExamMinute}, + simulation_status = #{simulationStatus}, + + where subject_warehouse_class_id = #{subjectWarehouseClassId} + + + + delete from tb_subject_warehouse_class where subject_warehouse_class_id = #{subjectWarehouseClassId} + + + + delete from tb_subject_warehouse_class where subject_warehouse_class_id in + + #{subjectWarehouseClassId} + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbTeacherAuthenticationMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbTeacherAuthenticationMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..f66c06bbe7b2607150572c789c54413c02b6ef30 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbTeacherAuthenticationMapper.xml @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select teacher_authentication_id, member_user_id, name, sex, birth, phone, identity_card ,id_card_front, id_card_back, graduation_certificate, research_findings, certificate_url, status, refuse_remark, create_time, update_time, delete_time, create_by, update_by, delete_by, del_flag from tb_teacher_authentication + + + + + + + + insert into tb_teacher_authentication + + member_user_id, + name, + sex, + birth, + phone, + id_card_front, + identity_card, + id_card_back, + graduation_certificate, + research_findings, + certificate_url, + status, + refuse_remark, + create_time, + update_time, + delete_time, + create_by, + update_by, + delete_by, + del_flag, + + + #{memberUserId}, + #{name}, + #{sex}, + #{birth}, + #{phone}, + #{idCardFront}, + #{identityCard}, + #{idCardBack}, + #{graduationCertificate}, + #{researchFindings}, + #{certificateUrl}, + #{status}, + #{refuseRemark}, + #{createTime}, + #{updateTime}, + #{deleteTime}, + #{createBy}, + #{updateBy}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_teacher_authentication + + member_user_id = #{memberUserId}, + name = #{name}, + sex = #{sex}, + birth = #{birth}, + phone = #{phone}, + identity_card = #{identityCard}, + id_card_front = #{idCardFront}, + id_card_back = #{idCardBack}, + graduation_certificate = #{graduationCertificate}, + research_findings = #{researchFindings}, + certificate_url = #{certificateUrl}, + status = #{status}, + refuse_remark = #{refuseRemark}, + create_time = #{createTime}, + update_time = #{updateTime}, + delete_time = #{deleteTime}, + create_by = #{createBy}, + update_by = #{updateBy}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where teacher_authentication_id = #{teacherAuthenticationId} + + + + update tb_teacher_authentication set del_flag = '1' where teacher_authentication_id = #{teacherAuthenticationId} + + + + update tb_teacher_authentication set del_flag = '1' where teacher_authentication_id in + + #{teacherAuthenticationId} + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbTeacherCourseMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbTeacherCourseMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..47cfeac1433ac317f3f0d98efc3683020f669ce7 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbTeacherCourseMapper.xml @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + select teacher_course_id, teacher_id, course_id, is_speak, remarks, sort, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_teacher_course + + + + + + + + insert into tb_teacher_course + + teacher_id, + course_id, + is_speak, + remarks, + sort, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{teacherId}, + #{courseId}, + #{isSpeak}, + #{remarks}, + #{sort}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_teacher_course + + teacher_id = #{teacherId}, + course_id = #{courseId}, + is_speak = #{isSpeak}, + remarks = #{remarks}, + sort = #{sort}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where teacher_course_id = #{teacherCourseId} + + + + delete from tb_teacher_course where teacher_course_id = #{teacherCourseId} + + + + delete from tb_teacher_course where teacher_course_id in + + #{teacherCourseId} + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbTeacherMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbTeacherMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..7f248f292243d98fe83ef9b8f27f7d40d35aa885 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbTeacherMapper.xml @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + select teacher_id, teacher_name, teacher_phone, id_img, whole_img, college_name, teacher_title, teacher_type_id, prospectus, content, create_time, create_by, update_time, update_by, del_flag, delete_time, delete_by from tb_teacher + + + + + + + + insert into tb_teacher + + teacher_name, + teacher_phone, + id_img, + whole_img, + college_name, + teacher_title, + teacher_type_id, + prospectus, + content, + create_time, + create_by, + update_time, + update_by, + del_flag, + delete_time, + delete_by, + + + #{teacherName}, + #{teacherPhone}, + #{idImg}, + #{wholeImg}, + #{collegeName}, + #{teacherTitle}, + #{teacherTypeId}, + #{prospectus}, + #{content}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{delFlag}, + #{deleteTime}, + #{deleteBy}, + + + + + update tb_teacher + + teacher_name = #{teacherName}, + teacher_phone = #{teacherPhone}, + identity_card = #{identityCard}, + id_img = #{idImg}, + whole_img = #{wholeImg}, + college_name = #{collegeName}, + teacher_title = #{teacherTitle}, + teacher_type_id = #{teacherTypeId}, + prospectus = #{prospectus}, + content = #{content}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + del_flag = #{delFlag}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + + where teacher_id = #{teacherId} + + + + update tb_teacher + set del_flag = 1, delete_time = now() + where teacher_id = #{teacherId} + + + + update tb_teacher + set del_flag = 1, delete_time = now() + where teacher_id in + + #{teacherId} + + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbTrendsMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbTrendsMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..d95307bc55c8f0413d7a406146a96ddecbbcaaf0 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbTrendsMapper.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + select trends_id, title, publisher, publication_time, content, create_time, create_by, update_time, update_by, del_flag, delete_time, delete_by from tb_trends + + + + + + + + insert into tb_trends + + title, + publisher, + publication_time, + content, + create_time, + create_by, + update_time, + update_by, + del_flag, + delete_time, + delete_by, + + + #{title}, + #{publisher}, + #{publicationTime}, + #{content}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{delFlag}, + #{deleteTime}, + #{deleteBy}, + + + + + update tb_trends + + title = #{title}, + publisher = #{publisher}, + publication_time = #{publicationTime}, + content = #{content}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + del_flag = #{delFlag}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + + where trends_id = #{trendsId} + + + + update tb_trends + set del_flag = '1', delete_time = now() + where trends_id = #{trendsId} + + + + update tb_trends + set del_flag = '1', delete_time = now() + where trends_id in + + #{trendsId} + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/hezhi/TbTypeCourseMapper.xml b/ruoyi-system/src/main/resources/mapper/hezhi/TbTypeCourseMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..e9c1104608f4504d3e02fdeff16d0479a9af437b --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/hezhi/TbTypeCourseMapper.xml @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + + + + + + + + + select type_course_id, case_type_id, course_id, remarks, sort, status, publication_time, publisher, create_time, create_by, update_time, update_by, delete_time, delete_by, del_flag from tb_type_course + + + + + + + + insert into tb_type_course + + case_type_id, + course_id, + remarks, + sort, + status, + publication_time, + publisher, + create_time, + create_by, + update_time, + update_by, + delete_time, + delete_by, + del_flag, + + + #{caseTypeId}, + #{courseId}, + #{remarks}, + #{sort}, + #{status}, + #{publicationTime}, + #{publisher}, + #{createTime}, + #{createBy}, + #{updateTime}, + #{updateBy}, + #{deleteTime}, + #{deleteBy}, + #{delFlag}, + + + + + update tb_type_course + + case_type_id = #{caseTypeId}, + course_id = #{courseId}, + remarks = #{remarks}, + sort = #{sort}, + status = #{status}, + publication_time = #{publicationTime}, + publisher = #{publisher}, + create_time = #{createTime}, + create_by = #{createBy}, + update_time = #{updateTime}, + update_by = #{updateBy}, + delete_time = #{deleteTime}, + delete_by = #{deleteBy}, + del_flag = #{delFlag}, + + where type_course_id = #{typeCourseId} + + + + delete from tb_type_course where type_course_id = #{typeCourseId} + + + + delete from tb_type_course where type_course_id in + + #{typeCourseId} + + + + + delete from tb_type_course where course_id = #{courseId} + + + + + + insert into tb_type_course(case_type_id, course_id, update_time, del_flag) values + + (#{item.caseTypeId}, #{item.courseId}, sysdate(), 0) + + + + + delete from tb_type_course where case_type_id in + + #{caseTypeId} + + + diff --git a/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..a5ff114ae9d7f4500c2c111e92e7b49b3c0bc83e --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark + from sys_config + + + + + + + and config_id = #{configId} + + + and config_key = #{configKey} + + + + + + + + + + + + + + insert into sys_config ( + config_name, + config_key, + config_value, + config_type, + create_by, + remark, + create_time + )values( + #{configName}, + #{configKey}, + #{configValue}, + #{configType}, + #{createBy}, + #{remark}, + sysdate() + ) + + + + update sys_config + + config_name = #{configName}, + config_key = #{configKey}, + config_value = #{configValue}, + config_type = #{configType}, + update_by = #{updateBy}, + remark = #{remark}, + update_time = sysdate() + + where config_id = #{configId} + + + + delete from sys_config where config_id = #{configId} + + + + delete from sys_config where config_id in + + #{configId} + + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..cf439f68cd59726f12b0eb19ebba863816e26512 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time + from sys_dept d + + + + + + + + + + + + + + + + + + + + insert into sys_dept( + dept_id, + parent_id, + dept_name, + ancestors, + order_num, + leader, + phone, + email, + status, + create_by, + create_time + )values( + #{deptId}, + #{parentId}, + #{deptName}, + #{ancestors}, + #{orderNum}, + #{leader}, + #{phone}, + #{email}, + #{status}, + #{createBy}, + sysdate() + ) + + + + update sys_dept + + parent_id = #{parentId}, + dept_name = #{deptName}, + ancestors = #{ancestors}, + order_num = #{orderNum}, + leader = #{leader}, + phone = #{phone}, + email = #{email}, + status = #{status}, + update_by = #{updateBy}, + update_time = sysdate() + + where dept_id = #{deptId} + + + + update sys_dept set ancestors = + + when #{item.deptId} then #{item.ancestors} + + where dept_id in + + #{item.deptId} + + + + + update sys_dept set status = '0' where dept_id in + + #{deptId} + + + + + update sys_dept set del_flag = '2' where dept_id = #{deptId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..3b94b7fb0c96f34a81eb3190864b4b839d1eb688 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + select dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark + from sys_dict_data + + + + + + + + + + + + + + delete from sys_dict_data where dict_code = #{dictCode} + + + + delete from sys_dict_data where dict_code in + + #{dictCode} + + + + + update sys_dict_data + + dict_sort = #{dictSort}, + dict_label = #{dictLabel}, + dict_value = #{dictValue}, + dict_type = #{dictType}, + css_class = #{cssClass}, + list_class = #{listClass}, + is_default = #{isDefault}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where dict_code = #{dictCode} + + + + update sys_dict_data set dict_type = #{newDictType} where dict_type = #{oldDictType} + + + + insert into sys_dict_data( + dict_sort, + dict_label, + dict_value, + dict_type, + css_class, + list_class, + is_default, + status, + remark, + create_by, + create_time + )values( + #{dictSort}, + #{dictLabel}, + #{dictValue}, + #{dictType}, + #{cssClass}, + #{listClass}, + #{isDefault}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..d939cea8a9121d0cf3b60538ecf689c3eb408548 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + select dict_id, dict_name, dict_type, status, create_by, create_time, remark + from sys_dict_type + + + + + + + + + + + + + + delete from sys_dict_type where dict_id = #{dictId} + + + + delete from sys_dict_type where dict_id in + + #{dictId} + + + + + update sys_dict_type + + dict_name = #{dictName}, + dict_type = #{dictType}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where dict_id = #{dictId} + + + + insert into sys_dict_type( + dict_name, + dict_type, + status, + remark, + create_by, + create_time + )values( + #{dictName}, + #{dictType}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + diff --git a/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..822d66580264432f32fc29752b0a654808214a26 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + insert into sys_logininfor (user_name, status, ipaddr, login_location, browser, os, msg, login_time) + values (#{userName}, #{status}, #{ipaddr}, #{loginLocation}, #{browser}, #{os}, #{msg}, sysdate()) + + + + + + delete from sys_logininfor where info_id in + + #{infoId} + + + + + truncate table sys_logininfor + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..84e87c9173b400c3dc2ad1de3744ec501c4eb402 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml @@ -0,0 +1,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select menu_id, menu_name, parent_id, order_num, path, component, `query`, route_name, is_frame, is_cache, menu_type, visible, status, ifnull(perms,'') as perms, icon, create_time + from sys_menu + + + + + + + + + + + + + + + + + + + + + + + + + + update sys_menu + + menu_name = #{menuName}, + parent_id = #{parentId}, + order_num = #{orderNum}, + path = #{path}, + component = #{component}, + `query` = #{query}, + route_name = #{routeName}, + is_frame = #{isFrame}, + is_cache = #{isCache}, + menu_type = #{menuType}, + visible = #{visible}, + status = #{status}, + perms = #{perms}, + icon = #{icon}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where menu_id = #{menuId} + + + + insert into sys_menu( + menu_id, + parent_id, + menu_name, + order_num, + path, + component, + `query`, + route_name, + is_frame, + is_cache, + menu_type, + visible, + status, + perms, + icon, + remark, + create_by, + create_time + )values( + #{menuId}, + #{parentId}, + #{menuName}, + #{orderNum}, + #{path}, + #{component}, + #{query}, + #{routeName}, + #{isFrame}, + #{isCache}, + #{menuType}, + #{visible}, + #{status}, + #{perms}, + #{icon}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + delete from sys_menu where menu_id = #{menuId} + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..65d30794dc20f68cb2d9c9dc81c4c258b20840ed --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + select notice_id, notice_title, notice_type, cast(notice_content as char) as notice_content, status, create_by, create_time, update_by, update_time, remark + from sys_notice + + + + + + + + insert into sys_notice ( + notice_title, + notice_type, + notice_content, + status, + remark, + create_by, + create_time + )values( + #{noticeTitle}, + #{noticeType}, + #{noticeContent}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + update sys_notice + + notice_title = #{noticeTitle}, + notice_type = #{noticeType}, + notice_content = #{noticeContent}, + status = #{status}, + update_by = #{updateBy}, + update_time = sysdate() + + where notice_id = #{noticeId} + + + + delete from sys_notice where notice_id = #{noticeId} + + + + delete from sys_notice where notice_id in + + #{noticeId} + + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..201db079bd73087e5ea52fed63aec17005366900 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + select oper_id, title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, oper_time, cost_time + from sys_oper_log + + + + insert into sys_oper_log(title, business_type, method, request_method, operator_type, oper_name, dept_name, oper_url, oper_ip, oper_location, oper_param, json_result, status, error_msg, cost_time, oper_time) + values (#{title}, #{businessType}, #{method}, #{requestMethod}, #{operatorType}, #{operName}, #{deptName}, #{operUrl}, #{operIp}, #{operLocation}, #{operParam}, #{jsonResult}, #{status}, #{errorMsg}, #{costTime}, sysdate()) + + + + + + delete from sys_oper_log where oper_id in + + #{operId} + + + + + + + truncate table sys_oper_log + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..227c45953ff249942d81e0ef73fd68a5eb9dc848 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + select post_id, post_code, post_name, post_sort, status, create_by, create_time, remark + from sys_post + + + + + + + + + + + + + + + + + + update sys_post + + post_code = #{postCode}, + post_name = #{postName}, + post_sort = #{postSort}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where post_id = #{postId} + + + + insert into sys_post( + post_id, + post_code, + post_name, + post_sort, + status, + remark, + create_by, + create_time + )values( + #{postId}, + #{postCode}, + #{postName}, + #{postSort}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + delete from sys_post where post_id = #{postId} + + + + delete from sys_post where post_id in + + #{postId} + + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..7c4139bce277c8792d6fbd92bb9b4c67504cd4dd --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + delete from sys_role_dept where role_id=#{roleId} + + + + + + delete from sys_role_dept where role_id in + + #{roleId} + + + + + insert into sys_role_dept(role_id, dept_id) values + + (#{item.roleId},#{item.deptId}) + + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..bc5d33c903247a2146bbf7ef4bcfcb8e54f0a2bb --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + select distinct r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.menu_check_strictly, r.dept_check_strictly, + r.status, r.del_flag, r.create_time, r.remark + from sys_role r + left join sys_user_role ur on ur.role_id = r.role_id + left join sys_user u on u.user_id = ur.user_id + left join sys_dept d on u.dept_id = d.dept_id + + + + + + + + + + + + + + + + + + + + + + insert into sys_role( + role_id, + role_name, + role_key, + role_sort, + data_scope, + menu_check_strictly, + dept_check_strictly, + status, + remark, + create_by, + create_time + )values( + #{roleId}, + #{roleName}, + #{roleKey}, + #{roleSort}, + #{dataScope}, + #{menuCheckStrictly}, + #{deptCheckStrictly}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + update sys_role + + role_name = #{roleName}, + role_key = #{roleKey}, + role_sort = #{roleSort}, + data_scope = #{dataScope}, + menu_check_strictly = #{menuCheckStrictly}, + dept_check_strictly = #{deptCheckStrictly}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where role_id = #{roleId} + + + + update sys_role set del_flag = '2' where role_id = #{roleId} + + + + update sys_role set del_flag = '2' where role_id in + + #{roleId} + + + + diff --git a/ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..cb60a852941ef1a28bee93383bc65ee678d2bde4 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + delete from sys_role_menu where role_id=#{roleId} + + + + delete from sys_role_menu where role_id in + + #{roleId} + + + + + insert into sys_role_menu(role_id, menu_id) values + + (#{item.roleId},#{item.menuId}) + + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..a624608b7a9ccd435c9375b5757e3738089944e0 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select u.user_id, u.dept_id, u.evaluate_agency_id, u.study_center_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, + d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status, + r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status + from sys_user u + left join sys_dept d on u.dept_id = d.dept_id + left join sys_user_role ur on u.user_id = ur.user_id + left join sys_role r on r.role_id = ur.role_id + + + + + + + + + + + + + + + + + + + + insert into sys_user( + user_id, + dept_id, + evaluate_agency_id, + study_center_id, + user_name, + nick_name, + email, + avatar, + phonenumber, + sex, + password, + status, + create_by, + remark, + create_time + )values( + #{userId}, + #{deptId}, + #{evaluateAgencyId}, + #{studyCenterId}, + #{userName}, + #{nickName}, + #{email}, + #{avatar}, + #{phonenumber}, + #{sex}, + #{password}, + #{status}, + #{createBy}, + #{remark}, + sysdate() + ) + + + + update sys_user + + dept_id = #{deptId}, + evaluate_agency_id = #{evaluateAgencyId}, + study_center_id = #{studyCenterId}, + user_name = #{userName}, + nick_name = #{nickName}, + email = #{email}, + phonenumber = #{phonenumber}, + sex = #{sex}, + avatar = #{avatar}, + password = #{password}, + status = #{status}, + login_ip = #{loginIp}, + login_date = #{loginDate}, + update_by = #{updateBy}, + remark = #{remark}, + update_time = sysdate() + + where user_id = #{userId} + + + + update sys_user set status = #{status} where user_id = #{userId} + + + + update sys_user set avatar = #{avatar} where user_name = #{userName} + + + + update sys_user set password = #{password} where user_name = #{userName} + + + + update sys_user set del_flag = '2' where user_id = #{userId} + + + + update sys_user set del_flag = '2' where user_id in + + #{userId} + + + + diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..2b90bc40b67418a0e2493683f7af2f27f3ddabbe --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + delete from sys_user_post where user_id=#{userId} + + + + + + delete from sys_user_post where user_id in + + #{userId} + + + + + insert into sys_user_post(user_id, post_id) values + + (#{item.userId},#{item.postId}) + + + + \ No newline at end of file diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..dd726891a8ed42c98892b2e99479bf3aabb68630 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + delete from sys_user_role where user_id=#{userId} + + + + + + delete from sys_user_role where user_id in + + #{userId} + + + + + insert into sys_user_role(user_id, role_id) values + + (#{item.userId},#{item.roleId}) + + + + + delete from sys_user_role where user_id=#{userId} and role_id=#{roleId} + + + + delete from sys_user_role where role_id=#{roleId} and user_id in + + #{userId} + + + \ No newline at end of file diff --git "a/ruoyi-system/src/main/resources/testPaperImport/\350\200\203\350\257\225\350\257\225\345\215\267\345\257\274\345\205\245\346\250\241\346\235\277.xlsx" "b/ruoyi-system/src/main/resources/testPaperImport/\350\200\203\350\257\225\350\257\225\345\215\267\345\257\274\345\205\245\346\250\241\346\235\277.xlsx" new file mode 100644 index 0000000000000000000000000000000000000000..c17d8c7ab24741568226a4d082a4b0a16ecb2894 Binary files /dev/null and "b/ruoyi-system/src/main/resources/testPaperImport/\350\200\203\350\257\225\350\257\225\345\215\267\345\257\274\345\205\245\346\250\241\346\235\277.xlsx" differ diff --git a/ruoyi-ui/.editorconfig b/ruoyi-ui/.editorconfig new file mode 100644 index 0000000000000000000000000000000000000000..7034f9bf32aa33d5009acc956bde9663e93ae848 --- /dev/null +++ b/ruoyi-ui/.editorconfig @@ -0,0 +1,22 @@ +# 鍛婅瘔EditorConfig鎻掍欢锛岃繖鏄牴鏂囦欢锛屼笉鐢ㄧ户缁線涓婃煡鎵 +root = true + +# 鍖归厤鍏ㄩ儴鏂囦欢 +[*] +# 璁剧疆瀛楃闆 +charset = utf-8 +# 缂╄繘椋庢牸锛屽彲閫塻pace銆乼ab +indent_style = space +# 缂╄繘鐨勭┖鏍兼暟 +indent_size = 2 +# 缁撳熬鎹㈣绗︼紝鍙塴f銆乧r銆乧rlf +end_of_line = lf +# 鍦ㄦ枃浠剁粨灏炬彃鍏ユ柊琛 +insert_final_newline = true +# 鍒犻櫎涓琛屼腑鐨勫墠鍚庣┖鏍 +trim_trailing_whitespace = true + +# 鍖归厤md缁撳熬鐨勬枃浠 +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/ruoyi-ui/.env.development b/ruoyi-ui/.env.development new file mode 100644 index 0000000000000000000000000000000000000000..9ffb9defc73caace5ee04727ba5c83d843d35c18 --- /dev/null +++ b/ruoyi-ui/.env.development @@ -0,0 +1,11 @@ +# 椤甸潰鏍囬 +VUE_APP_TITLE = 瀛︿俊鑰冭瘯绠$悊绯荤粺 + +# 寮鍙戠幆澧冮厤缃 +ENV = 'development' + +# 瀛︿俊鑰冭瘯绠$悊绯荤粺/寮鍙戠幆澧 +VUE_APP_BASE_API = '/dev-api' + +# 璺敱鎳掑姞杞 +VUE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/ruoyi-ui/.env.production b/ruoyi-ui/.env.production new file mode 100644 index 0000000000000000000000000000000000000000..06edd987ca05b9fe1a98a6f6785c84b650f6f33d --- /dev/null +++ b/ruoyi-ui/.env.production @@ -0,0 +1,8 @@ +# 椤甸潰鏍囬 +VUE_APP_TITLE = 瀛︿俊鑰冭瘯绠$悊绯荤粺 + +# 鐢熶骇鐜閰嶇疆 +ENV = 'production' + +# 瀛︿俊鑰冭瘯绠$悊绯荤粺/鐢熶骇鐜 +VUE_APP_BASE_API = '/prod-api' diff --git a/ruoyi-ui/.env.staging b/ruoyi-ui/.env.staging new file mode 100644 index 0000000000000000000000000000000000000000..c3aca5ce9c82c6c6acea70d9122e73e437064237 --- /dev/null +++ b/ruoyi-ui/.env.staging @@ -0,0 +1,10 @@ +# 椤甸潰鏍囬 +VUE_APP_TITLE = 瀛︿俊鑰冭瘯绠$悊绯荤粺 + +NODE_ENV = production + +# 娴嬭瘯鐜閰嶇疆 +ENV = 'staging' + +# 瀛︿俊鑰冭瘯绠$悊绯荤粺/娴嬭瘯鐜 +VUE_APP_BASE_API = '/stage-api' diff --git a/ruoyi-ui/.eslintignore b/ruoyi-ui/.eslintignore new file mode 100644 index 0000000000000000000000000000000000000000..89be6f6596352653bf50bfdf3e8794dc6d90e366 --- /dev/null +++ b/ruoyi-ui/.eslintignore @@ -0,0 +1,10 @@ +# 蹇界暐build鐩綍涓嬬被鍨嬩负js鐨勬枃浠剁殑璇硶妫鏌 +build/*.js +# 蹇界暐src/assets鐩綍涓嬫枃浠剁殑璇硶妫鏌 +src/assets +# 蹇界暐public鐩綍涓嬫枃浠剁殑璇硶妫鏌 +public +# 蹇界暐褰撳墠鐩綍涓嬩负js鐨勬枃浠剁殑璇硶妫鏌 +*.js +# 蹇界暐褰撳墠鐩綍涓嬩负vue鐨勬枃浠剁殑璇硶妫鏌 +*.vue \ No newline at end of file diff --git a/ruoyi-ui/.eslintrc.js b/ruoyi-ui/.eslintrc.js new file mode 100644 index 0000000000000000000000000000000000000000..82bbdeea60fec5062fad77c9cc110c6f831afc71 --- /dev/null +++ b/ruoyi-ui/.eslintrc.js @@ -0,0 +1,199 @@ +// ESlint 妫鏌ラ厤缃 +module.exports = { + root: true, + parserOptions: { + parser: 'babel-eslint', + sourceType: 'module' + }, + env: { + browser: true, + node: true, + es6: true, + }, + extends: ['plugin:vue/recommended', 'eslint:recommended'], + + // add your custom rules here + //it is base on https://github.com/vuejs/eslint-config-vue + rules: { + "vue/max-attributes-per-line": [2, { + "singleline": 10, + "multiline": { + "max": 1, + "allowFirstLine": false + } + }], + "vue/singleline-html-element-content-newline": "off", + "vue/multiline-html-element-content-newline":"off", + "vue/name-property-casing": ["error", "PascalCase"], + "vue/no-v-html": "off", + 'accessor-pairs': 2, + 'arrow-spacing': [2, { + 'before': true, + 'after': true + }], + 'block-spacing': [2, 'always'], + 'brace-style': [2, '1tbs', { + 'allowSingleLine': true + }], + 'camelcase': [0, { + 'properties': 'always' + }], + 'comma-dangle': [2, 'never'], + 'comma-spacing': [2, { + 'before': false, + 'after': true + }], + 'comma-style': [2, 'last'], + 'constructor-super': 2, + 'curly': [2, 'multi-line'], + 'dot-location': [2, 'property'], + 'eol-last': 2, + 'eqeqeq': ["error", "always", {"null": "ignore"}], + 'generator-star-spacing': [2, { + 'before': true, + 'after': true + }], + 'handle-callback-err': [2, '^(err|error)$'], + 'indent': [2, 2, { + 'SwitchCase': 1 + }], + 'jsx-quotes': [2, 'prefer-single'], + 'key-spacing': [2, { + 'beforeColon': false, + 'afterColon': true + }], + 'keyword-spacing': [2, { + 'before': true, + 'after': true + }], + 'new-cap': [2, { + 'newIsCap': true, + 'capIsNew': false + }], + 'new-parens': 2, + 'no-array-constructor': 2, + 'no-caller': 2, + 'no-console': 'off', + 'no-class-assign': 2, + 'no-cond-assign': 2, + 'no-const-assign': 2, + 'no-control-regex': 0, + 'no-delete-var': 2, + 'no-dupe-args': 2, + 'no-dupe-class-members': 2, + 'no-dupe-keys': 2, + 'no-duplicate-case': 2, + 'no-empty-character-class': 2, + 'no-empty-pattern': 2, + 'no-eval': 2, + 'no-ex-assign': 2, + 'no-extend-native': 2, + 'no-extra-bind': 2, + 'no-extra-boolean-cast': 2, + 'no-extra-parens': [2, 'functions'], + 'no-fallthrough': 2, + 'no-floating-decimal': 2, + 'no-func-assign': 2, + 'no-implied-eval': 2, + 'no-inner-declarations': [2, 'functions'], + 'no-invalid-regexp': 2, + 'no-irregular-whitespace': 2, + 'no-iterator': 2, + 'no-label-var': 2, + 'no-labels': [2, { + 'allowLoop': false, + 'allowSwitch': false + }], + 'no-lone-blocks': 2, + 'no-mixed-spaces-and-tabs': 2, + 'no-multi-spaces': 2, + 'no-multi-str': 2, + 'no-multiple-empty-lines': [2, { + 'max': 1 + }], + 'no-native-reassign': 2, + 'no-negated-in-lhs': 2, + 'no-new-object': 2, + 'no-new-require': 2, + 'no-new-symbol': 2, + 'no-new-wrappers': 2, + 'no-obj-calls': 2, + 'no-octal': 2, + 'no-octal-escape': 2, + 'no-path-concat': 2, + 'no-proto': 2, + 'no-redeclare': 2, + 'no-regex-spaces': 2, + 'no-return-assign': [2, 'except-parens'], + 'no-self-assign': 2, + 'no-self-compare': 2, + 'no-sequences': 2, + 'no-shadow-restricted-names': 2, + 'no-spaced-func': 2, + 'no-sparse-arrays': 2, + 'no-this-before-super': 2, + 'no-throw-literal': 2, + 'no-trailing-spaces': 2, + 'no-undef': 2, + 'no-undef-init': 2, + 'no-unexpected-multiline': 2, + 'no-unmodified-loop-condition': 2, + 'no-unneeded-ternary': [2, { + 'defaultAssignment': false + }], + 'no-unreachable': 2, + 'no-unsafe-finally': 2, + 'no-unused-vars': [2, { + 'vars': 'all', + 'args': 'none' + }], + 'no-useless-call': 2, + 'no-useless-computed-key': 2, + 'no-useless-constructor': 2, + 'no-useless-escape': 0, + 'no-whitespace-before-property': 2, + 'no-with': 2, + 'one-var': [2, { + 'initialized': 'never' + }], + 'operator-linebreak': [2, 'after', { + 'overrides': { + '?': 'before', + ':': 'before' + } + }], + 'padded-blocks': [2, 'never'], + 'quotes': [2, 'single', { + 'avoidEscape': true, + 'allowTemplateLiterals': true + }], + 'semi': [2, 'never'], + 'semi-spacing': [2, { + 'before': false, + 'after': true + }], + 'space-before-blocks': [2, 'always'], + 'space-before-function-paren': [2, 'never'], + 'space-in-parens': [2, 'never'], + 'space-infix-ops': 2, + 'space-unary-ops': [2, { + 'words': true, + 'nonwords': false + }], + 'spaced-comment': [2, 'always', { + 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] + }], + 'template-curly-spacing': [2, 'never'], + 'use-isnan': 2, + 'valid-typeof': 2, + 'wrap-iife': [2, 'any'], + 'yield-star-spacing': [2, 'both'], + 'yoda': [2, 'never'], + 'prefer-const': 2, + 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, + 'object-curly-spacing': [2, 'always', { + objectsInObjects: false + }], + 'array-bracket-spacing': [2, 'never'] + } +} diff --git a/ruoyi-ui/.gitignore b/ruoyi-ui/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..78a752d87e8427f84570300f62bdfb5b183a9931 --- /dev/null +++ b/ruoyi-ui/.gitignore @@ -0,0 +1,23 @@ +.DS_Store +node_modules/ +dist/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +**/*.log + +tests/**/coverage/ +tests/e2e/reports +selenium-debug.log + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.local + +package-lock.json +yarn.lock diff --git a/ruoyi-ui/README.md b/ruoyi-ui/README.md new file mode 100644 index 0000000000000000000000000000000000000000..00c0ab84ffbb6cbdb4f51a490c22ca94c2690292 --- /dev/null +++ b/ruoyi-ui/README.md @@ -0,0 +1,30 @@ +## 寮鍙 + +```bash +# 鍏嬮殕椤圭洰 +git clone https://gitee.com/y_project/RuoYi-Vue + +# 杩涘叆椤圭洰鐩綍 +cd ruoyi-ui + +# 瀹夎渚濊禆 +npm install + +# 寤鸿涓嶈鐩存帴浣跨敤 cnpm 瀹夎渚濊禆锛屼細鏈夊悇绉嶈寮傜殑 bug銆傚彲浠ラ氳繃濡備笅鎿嶄綔瑙e喅 npm 涓嬭浇閫熷害鎱㈢殑闂 +npm install --registry=https://registry.npmmirror.com + +# 鍚姩鏈嶅姟 +npm run dev +``` + +娴忚鍣ㄨ闂 http://localhost:80 + +## 鍙戝竷 + +```bash +# 鏋勫缓娴嬭瘯鐜 +npm run build:stage + +# 鏋勫缓鐢熶骇鐜 +npm run build:prod +``` \ No newline at end of file diff --git a/ruoyi-ui/babel.config.js b/ruoyi-ui/babel.config.js new file mode 100644 index 0000000000000000000000000000000000000000..c8267b2ddf4d74b926d2fe7f19d5c69ff5868590 --- /dev/null +++ b/ruoyi-ui/babel.config.js @@ -0,0 +1,13 @@ +module.exports = { + presets: [ + // https://github.com/vuejs/vue-cli/tree/master/packages/@vue/babel-preset-app + '@vue/cli-plugin-babel/preset' + ], + 'env': { + 'development': { + // babel-plugin-dynamic-import-node plugin only does one thing by converting all import() to require(). + // This plugin can significantly increase the speed of hot updates, when you have a large number of pages. + 'plugins': ['dynamic-import-node'] + } + } +} \ No newline at end of file diff --git a/ruoyi-ui/bin/build.bat b/ruoyi-ui/bin/build.bat new file mode 100644 index 0000000000000000000000000000000000000000..dda590d22434f988c9292b25aa7a3504d32880c0 --- /dev/null +++ b/ruoyi-ui/bin/build.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [信息] 打包Web工程,生成dist文件。 +echo. + +%~d0 +cd %~dp0 + +cd .. +npm run build:prod + +pause \ No newline at end of file diff --git a/ruoyi-ui/bin/package.bat b/ruoyi-ui/bin/package.bat new file mode 100644 index 0000000000000000000000000000000000000000..0e5bc0fb50a96a7df7a02c92029a392168e0dd98 --- /dev/null +++ b/ruoyi-ui/bin/package.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [信息] 安装Web工程,生成node_modules文件。 +echo. + +%~d0 +cd %~dp0 + +cd .. +npm install --registry=https://registry.npmmirror.com + +pause \ No newline at end of file diff --git a/ruoyi-ui/bin/run-web.bat b/ruoyi-ui/bin/run-web.bat new file mode 100644 index 0000000000000000000000000000000000000000..d30deae795675dd10f239f63648719c0a63980b3 --- /dev/null +++ b/ruoyi-ui/bin/run-web.bat @@ -0,0 +1,12 @@ +@echo off +echo. +echo [信息] 使用 Vue CLI 命令运行 Web 工程。 +echo. + +%~d0 +cd %~dp0 + +cd .. +npm run dev + +pause \ No newline at end of file diff --git a/ruoyi-ui/build/index.js b/ruoyi-ui/build/index.js new file mode 100644 index 0000000000000000000000000000000000000000..0c57de2aad9ee533046b71c08b56943be304d867 --- /dev/null +++ b/ruoyi-ui/build/index.js @@ -0,0 +1,35 @@ +const { run } = require('runjs') +const chalk = require('chalk') +const config = require('../vue.config.js') +const rawArgv = process.argv.slice(2) +const args = rawArgv.join(' ') + +if (process.env.npm_config_preview || rawArgv.includes('--preview')) { + const report = rawArgv.includes('--report') + + run(`vue-cli-service build ${args}`) + + const port = 9526 + const publicPath = config.publicPath + + var connect = require('connect') + var serveStatic = require('serve-static') + const app = connect() + + app.use( + publicPath, + serveStatic('./dist', { + index: ['index.html', '/'] + }) + ) + + app.listen(port, function () { + console.log(chalk.green(`> Preview at http://localhost:${port}${publicPath}`)) + if (report) { + console.log(chalk.green(`> Report at http://localhost:${port}${publicPath}report.html`)) + } + + }) +} else { + run(`vue-cli-service build ${args}`) +} diff --git a/ruoyi-ui/dist.zip b/ruoyi-ui/dist.zip new file mode 100644 index 0000000000000000000000000000000000000000..a0ecc354244895ca54f1d3c7cd5e1c2ba3491f01 Binary files /dev/null and b/ruoyi-ui/dist.zip differ diff --git a/ruoyi-ui/package.json b/ruoyi-ui/package.json new file mode 100644 index 0000000000000000000000000000000000000000..0bd3e2a1a52e088ec3cc535c2f5a90b99ff23870 --- /dev/null +++ b/ruoyi-ui/package.json @@ -0,0 +1,93 @@ +{ + "name": "ruoyi", + "version": "3.8.9", + "description": "瀛︿俊鑰冭瘯绠$悊绯荤粺", + "author": "瀛︿俊鑰冭瘯", + "license": "MIT", + "scripts": { + "dev": "vue-cli-service serve", + "build:prod": "vue-cli-service build", + "build:stage": "vue-cli-service build --mode staging", + "preview": "node build/index.js --preview", + "lint": "eslint --ext .js,.vue src" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "src/**/*.{js,vue}": [ + "eslint --fix", + "git add" + ] + }, + "keywords": [ + "vue", + "admin", + "dashboard", + "element-ui", + "boilerplate", + "admin-template", + "management-system" + ], + "repository": { + "type": "git", + "url": "https://gitee.com/y_project/RuoYi-Vue.git" + }, + "dependencies": { + "@riophae/vue-treeselect": "0.4.0", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "^1.0.2", + "axios": "0.28.1", + "clipboard": "2.0.8", + "core-js": "3.37.1", + "echarts": "5.4.0", + "element-ui": "2.15.14", + "file-saver": "2.0.5", + "fuse.js": "6.4.3", + "highlight.js": "9.18.5", + "js-beautify": "1.13.0", + "js-cookie": "3.0.1", + "jsencrypt": "3.0.0-rc.1", + "nprogress": "0.2.0", + "quill": "1.3.7", + "screenfull": "5.0.2", + "sortablejs": "1.10.2", + "vue": "^2.7.16", + "vue-count-to": "1.0.13", + "vue-cropper": "0.5.5", + "vue-meta": "2.4.0", + "vue-router": "3.4.9", + "vuedraggable": "2.24.3", + "vuex": "3.6.0", + "wangeditor": "^4.7.15" + }, + "devDependencies": { + "@vue/cli-plugin-babel": "4.4.6", + "@vue/cli-plugin-eslint": "4.4.6", + "@vue/cli-service": "4.4.6", + "babel-eslint": "10.1.0", + "babel-plugin-dynamic-import-node": "2.3.3", + "chalk": "4.1.0", + "compression-webpack-plugin": "6.1.2", + "connect": "3.6.6", + "eslint": "7.15.0", + "eslint-plugin-vue": "7.2.0", + "lint-staged": "10.5.3", + "runjs": "4.4.2", + "sass": "1.32.13", + "sass-loader": "10.1.1", + "script-ext-html-webpack-plugin": "2.1.5", + "svg-sprite-loader": "5.1.1", + "vue-template-compiler": "^2.7.16" + }, + "engines": { + "node": ">=8.9", + "npm": ">= 3.0.0" + }, + "browserslist": [ + "> 1%", + "last 2 versions" + ] +} diff --git a/ruoyi-ui/public/2favicon.ico b/ruoyi-ui/public/2favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..e26376026420542212ed58d90d0ed34f554fa4ae Binary files /dev/null and b/ruoyi-ui/public/2favicon.ico differ diff --git a/ruoyi-ui/public/favicon.ico b/ruoyi-ui/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..05092a2577e11f32c9620d245eeed5c856353f3d Binary files /dev/null and b/ruoyi-ui/public/favicon.ico differ diff --git a/ruoyi-ui/public/html/ie.html b/ruoyi-ui/public/html/ie.html new file mode 100644 index 0000000000000000000000000000000000000000..052ffcd6411b536576f9086af2757612bf68f682 --- /dev/null +++ b/ruoyi-ui/public/html/ie.html @@ -0,0 +1,46 @@ + + + + + + 璇峰崌绾ф偍鐨勬祻瑙堝櫒 + + + + + + +

璇峰崌绾ф偍鐨勬祻瑙堝櫒锛屼互渚挎垜浠洿濂界殑涓烘偍鎻愪緵鏈嶅姟锛

+

鎮ㄦ鍦ㄤ娇鐢 Internet Explorer 鐨勬棭鏈熺増鏈紙IE11浠ヤ笅鐗堟湰鎴栦娇鐢ㄨ鍐呮牳鐨勬祻瑙堝櫒锛夈傝繖鎰忓懗鐫鍦ㄥ崌绾ф祻瑙堝櫒鍓嶏紝鎮ㄥ皢鏃犳硶璁块棶姝ょ綉绔欍

+
+

璇锋敞鎰忥細寰蒋鍏徃瀵筗indows XP 鍙 Internet Explorer 鏃╂湡鐗堟湰鐨勬敮鎸佸凡缁忕粨鏉

+

鑷 2016 骞 1 鏈 12 鏃ヨ捣锛孧icrosoft 涓嶅啀涓 IE 11 浠ヤ笅鐗堟湰鎻愪緵鐩稿簲鏀寔鍜屾洿鏂般傛病鏈夊叧閿殑娴忚鍣ㄥ畨鍏ㄦ洿鏂帮紝鎮ㄧ殑鐢佃剳鍙兘鏄撳彈鏈夊鐥呮瘨銆侀棿璋嶈蒋浠跺拰鍏朵粬鎭舵剰杞欢鐨勬敾鍑伙紝瀹冧滑鍙互绐冨彇鎴栨崯瀹虫偍鐨勪笟鍔℃暟鎹拰淇℃伅銆傝鍙傞槄 寰蒋瀵 Internet Explorer 鏃╂湡鐗堟湰鐨勬敮鎸佸皢浜 2016 骞 1 鏈 12 鏃ョ粨鏉熺殑璇存槑

+
+

鎮ㄥ彲浠ラ夋嫨鏇村厛杩涚殑娴忚鍣

+

鎺ㄨ崘浣跨敤浠ヤ笅娴忚鍣ㄧ殑鏈鏂扮増鏈傚鏋滄偍鐨勭數鑴戝凡鏈変互涓嬫祻瑙堝櫒鐨勬渶鏂扮増鏈垯鐩存帴浣跨敤璇ユ祻瑙堝櫒璁块棶鍗冲彲銆

+ +
+ + \ No newline at end of file diff --git a/ruoyi-ui/public/index.html b/ruoyi-ui/public/index.html new file mode 100644 index 0000000000000000000000000000000000000000..925455cafd927242a4904510e4ae79b0693062bf --- /dev/null +++ b/ruoyi-ui/public/index.html @@ -0,0 +1,208 @@ + + + + + + + + + <%= webpackConfig.name %> + + + + +
+
+
+
+
+
姝e湪鍔犺浇绯荤粺璧勬簮锛岃鑰愬績绛夊緟
+
+
+ + diff --git a/ruoyi-ui/public/robots.txt b/ruoyi-ui/public/robots.txt new file mode 100644 index 0000000000000000000000000000000000000000..77470cb39f05f70a5b709b68304d0756bab75a0d --- /dev/null +++ b/ruoyi-ui/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: / \ No newline at end of file diff --git a/ruoyi-ui/src/App.vue b/ruoyi-ui/src/App.vue new file mode 100644 index 0000000000000000000000000000000000000000..b92ea37928e578d8c81a11bdbaed98508b01e597 --- /dev/null +++ b/ruoyi-ui/src/App.vue @@ -0,0 +1,28 @@ + + + + diff --git a/ruoyi-ui/src/api/hezhi/authorizeHonor.js b/ruoyi-ui/src/api/hezhi/authorizeHonor.js new file mode 100644 index 0000000000000000000000000000000000000000..b551edb786770499d1fc2128b45bf296474e283a --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/authorizeHonor.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鎺堟潈鑽h獕鍒楄〃 +export function listAuthorizeHonor(query) { + return request({ + url: '/hezhi/authorizeHonor/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鎺堟潈鑽h獕璇︾粏 +export function getAuthorizeHonor(authorizeHonorId) { + return request({ + url: '/hezhi/authorizeHonor/' + authorizeHonorId, + method: 'get' + }) +} + +// 鏂板鎺堟潈鑽h獕 +export function addAuthorizeHonor(data) { + return request({ + url: '/hezhi/authorizeHonor', + method: 'post', + data: data + }) +} + +// 淇敼鎺堟潈鑽h獕 +export function updateAuthorizeHonor(data) { + return request({ + url: '/hezhi/authorizeHonor', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鎺堟潈鑽h獕 +export function delAuthorizeHonor(authorizeHonorId) { + return request({ + url: '/hezhi/authorizeHonor/' + authorizeHonorId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/banner.js b/ruoyi-ui/src/api/hezhi/banner.js new file mode 100644 index 0000000000000000000000000000000000000000..f2dfa720e2dc34a7f71c1ac5ddf1a77efd2ce138 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/banner.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ杞挱鍥惧垪琛 +export function listBanner(query) { + return request({ + url: '/hezhi/banner/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ杞挱鍥捐缁 +export function getBanner(bannerId) { + return request({ + url: '/hezhi/banner/' + bannerId, + method: 'get' + }) +} + +// 鏂板杞挱鍥 +export function addBanner(data) { + return request({ + url: '/hezhi/banner', + method: 'post', + data: data + }) +} + +// 淇敼杞挱鍥 +export function updateBanner(data) { + return request({ + url: '/hezhi/banner', + method: 'put', + data: data + }) +} + +// 鍒犻櫎杞挱鍥 +export function delBanner(bannerId) { + return request({ + url: '/hezhi/banner/' + bannerId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/careerClass.js b/ruoyi-ui/src/api/hezhi/careerClass.js new file mode 100644 index 0000000000000000000000000000000000000000..0593a3f39d42f7970402f2525d9a61c25ea4404c --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/careerClass.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鑱屼笟鍒嗙被鍒楄〃 +export function listCareerClass(query) { + return request({ + url: '/hezhi/careerClass/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鑱屼笟鍒嗙被璇︾粏 +export function getCareerClass(careerId) { + return request({ + url: '/hezhi/careerClass/' + careerId, + method: 'get' + }) +} + +// 鏂板鑱屼笟鍒嗙被 +export function addCareerClass(data) { + return request({ + url: '/hezhi/careerClass', + method: 'post', + data: data + }) +} + +// 淇敼鑱屼笟鍒嗙被 +export function updateCareerClass(data) { + return request({ + url: '/hezhi/careerClass', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鑱屼笟鍒嗙被 +export function delCareerClass(careerId) { + return request({ + url: '/hezhi/careerClass/' + careerId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/case.js b/ruoyi-ui/src/api/hezhi/case.js new file mode 100644 index 0000000000000000000000000000000000000000..da2c1ed479ee06f6144dcbc4c4dce5da8f078341 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/case.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ妗堜緥鍒楄〃 +export function listCase(query) { + return request({ + url: '/hezhi/case/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ妗堜緥璇︾粏 +export function getCase(caseId) { + return request({ + url: '/hezhi/case/' + caseId, + method: 'get' + }) +} + +// 鏂板妗堜緥 +export function addCase(data) { + return request({ + url: '/hezhi/case', + method: 'post', + data: data + }) +} + +// 淇敼妗堜緥 +export function updateCase(data) { + return request({ + url: '/hezhi/case', + method: 'put', + data: data + }) +} + +// 鍒犻櫎妗堜緥 +export function delCase(caseId) { + return request({ + url: '/hezhi/case/' + caseId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/caseType.js b/ruoyi-ui/src/api/hezhi/caseType.js new file mode 100644 index 0000000000000000000000000000000000000000..378d705d313f1d5949da87b2ca6ca274749d3aaf --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/caseType.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ妗堜緥绫诲瀷鍒楄〃 +export function listCaseType(query) { + return request({ + url: '/hezhi/caseType/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ妗堜緥绫诲瀷璇︾粏 +export function getCaseType(caseTypeId) { + return request({ + url: '/hezhi/caseType/' + caseTypeId, + method: 'get' + }) +} + +// 鏂板妗堜緥绫诲瀷 +export function addCaseType(data) { + return request({ + url: '/hezhi/caseType', + method: 'post', + data: data + }) +} + +// 淇敼妗堜緥绫诲瀷 +export function updateCaseType(data) { + return request({ + url: '/hezhi/caseType', + method: 'put', + data: data + }) +} + +// 鍒犻櫎妗堜緥绫诲瀷 +export function delCaseType(caseTypeId) { + return request({ + url: '/hezhi/caseType/' + caseTypeId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/conferenceNotice.js b/ruoyi-ui/src/api/hezhi/conferenceNotice.js new file mode 100644 index 0000000000000000000000000000000000000000..954a4670c1b70a29c8fef1acbf2b22175c5c59ce --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/conferenceNotice.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鏁板瓧鏁欒偛澶т細閫氱煡鍒楄〃 +export function listConferenceNotice(query) { + return request({ + url: '/hezhi/conferenceNotice/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鏁板瓧鏁欒偛澶т細閫氱煡璇︾粏 +export function getConferenceNotice(conferenceNoticeId) { + return request({ + url: '/hezhi/conferenceNotice/' + conferenceNoticeId, + method: 'get' + }) +} + +// 鏂板鏁板瓧鏁欒偛澶т細閫氱煡 +export function addConferenceNotice(data) { + return request({ + url: '/hezhi/conferenceNotice', + method: 'post', + data: data + }) +} + +// 淇敼鏁板瓧鏁欒偛澶т細閫氱煡 +export function updateConferenceNotice(data) { + return request({ + url: '/hezhi/conferenceNotice', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鏁板瓧鏁欒偛澶т細閫氱煡 +export function delConferenceNotice(conferenceNoticeId) { + return request({ + url: '/hezhi/conferenceNotice/' + conferenceNoticeId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/conferencePeople.js b/ruoyi-ui/src/api/hezhi/conferencePeople.js new file mode 100644 index 0000000000000000000000000000000000000000..3988e8f4dc91bca4acb47bd50a107a83006e8d88 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/conferencePeople.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鏁板瓧鏁欒偛澶т細鍙備細鍢夊鍒楄〃 +export function listConferencePeople(query) { + return request({ + url: '/hezhi/conferencePeople/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鏁板瓧鏁欒偛澶т細鍙備細鍢夊璇︾粏 +export function getConferencePeople(conferencePeopleId) { + return request({ + url: '/hezhi/conferencePeople/' + conferencePeopleId, + method: 'get' + }) +} + +// 鏂板鏁板瓧鏁欒偛澶т細鍙備細鍢夊 +export function addConferencePeople(data) { + return request({ + url: '/hezhi/conferencePeople', + method: 'post', + data: data + }) +} + +// 淇敼鏁板瓧鏁欒偛澶т細鍙備細鍢夊 +export function updateConferencePeople(data) { + return request({ + url: '/hezhi/conferencePeople', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鏁板瓧鏁欒偛澶т細鍙備細鍢夊 +export function delConferencePeople(conferencePeopleId) { + return request({ + url: '/hezhi/conferencePeople/' + conferencePeopleId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/conferenceRegistration.js b/ruoyi-ui/src/api/hezhi/conferenceRegistration.js new file mode 100644 index 0000000000000000000000000000000000000000..8a7e4dc48d09cc2c64aeab79dd0a1a0eb87da267 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/conferenceRegistration.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鍙備細鎶ュ悕鍒楄〃 +export function listConferenceRegistration(query) { + return request({ + url: '/hezhi/conferenceRegistration/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鍙備細鎶ュ悕璇︾粏 +export function getConferenceRegistration(conferenceRegistrationId) { + return request({ + url: '/hezhi/conferenceRegistration/' + conferenceRegistrationId, + method: 'get' + }) +} + +// 鏂板鍙備細鎶ュ悕 +export function addConferenceRegistration(data) { + return request({ + url: '/hezhi/conferenceRegistration', + method: 'post', + data: data + }) +} + +// 淇敼鍙備細鎶ュ悕 +export function updateConferenceRegistration(data) { + return request({ + url: '/hezhi/conferenceRegistration', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鍙備細鎶ュ悕 +export function delConferenceRegistration(conferenceRegistrationId) { + return request({ + url: '/hezhi/conferenceRegistration/' + conferenceRegistrationId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/config.js b/ruoyi-ui/src/api/hezhi/config.js new file mode 100644 index 0000000000000000000000000000000000000000..79b6e09c3d61158959c585b22b6ace2d7d91d743 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/config.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鐩稿叧璁剧疆鍒楄〃 +export function listConfig(query) { + return request({ + url: '/hezhi/config/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鐩稿叧璁剧疆璇︾粏 +export function getConfig(configId) { + return request({ + url: '/hezhi/config/' + configId, + method: 'get' + }) +} + +// 鏂板鐩稿叧璁剧疆 +export function addConfig(data) { + return request({ + url: '/hezhi/config', + method: 'post', + data: data + }) +} + +// 淇敼鐩稿叧璁剧疆 +export function updateConfig(data) { + return request({ + url: '/hezhi/config', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鐩稿叧璁剧疆 +export function delConfig(configId) { + return request({ + url: '/hezhi/config/' + configId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/continuingEducationClass.js b/ruoyi-ui/src/api/hezhi/continuingEducationClass.js new file mode 100644 index 0000000000000000000000000000000000000000..ee0bc931233114da93be405bfffe84d043c6b2a8 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/continuingEducationClass.js @@ -0,0 +1,52 @@ +import request from '@/utils/request' + +// 鏌ヨ缁х画鏁欒偛鍒嗙被鍒楄〃 +export function listContinuingEducationClass(query) { + return request({ + url: '/hezhi/continuingEducationClass/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ缁х画鏁欒偛鍒嗙被璇︾粏 +export function getContinuingEducationClass(continuingEducationClassId) { + return request({ + url: '/hezhi/continuingEducationClass/' + continuingEducationClassId, + method: 'get' + }) +} + +// 鏂板缁х画鏁欒偛鍒嗙被 +export function addContinuingEducationClass(data) { + return request({ + url: '/hezhi/continuingEducationClass', + method: 'post', + data: data + }) +} + +// 淇敼缁х画鏁欒偛鍒嗙被 +export function updateContinuingEducationClass(data) { + return request({ + url: '/hezhi/continuingEducationClass', + method: 'put', + data: data + }) +} + +// 鍒犻櫎缁х画鏁欒偛鍒嗙被 +export function delContinuingEducationClass(continuingEducationClassId) { + return request({ + url: '/hezhi/continuingEducationClass/' + continuingEducationClassId, + method: 'delete' + }) +} + +// 鏌ヨ缁х画鏁欒偛鍒嗙被鍒楄〃 +export function getAllContinuingEducationClassList() { + return request({ + url: '/hezhi/continuingEducationClass/getAllContinuingEducationClassList', + method: 'get' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/cooperatePartner.js b/ruoyi-ui/src/api/hezhi/cooperatePartner.js new file mode 100644 index 0000000000000000000000000000000000000000..3def3bd1f1a98dab141320c6ea4dd5ecb03a0ba3 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/cooperatePartner.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鍚堜綔浼欎即鍒楄〃 +export function listCooperatePartner(query) { + return request({ + url: '/hezhi/cooperatePartner/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鍚堜綔浼欎即璇︾粏 +export function getCooperatePartner(cooperatePartnerId) { + return request({ + url: '/hezhi/cooperatePartner/' + cooperatePartnerId, + method: 'get' + }) +} + +// 鏂板鍚堜綔浼欎即 +export function addCooperatePartner(data) { + return request({ + url: '/hezhi/cooperatePartner', + method: 'post', + data: data + }) +} + +// 淇敼鍚堜綔浼欎即 +export function updateCooperatePartner(data) { + return request({ + url: '/hezhi/cooperatePartner', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鍚堜綔浼欎即 +export function delCooperatePartner(cooperatePartnerId) { + return request({ + url: '/hezhi/cooperatePartner/' + cooperatePartnerId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/course.js b/ruoyi-ui/src/api/hezhi/course.js new file mode 100644 index 0000000000000000000000000000000000000000..a2514e9fd1a71173ad4f401de8e54204a0df3955 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/course.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ璇剧▼鍒楄〃 +export function listCourse(query) { + return request({ + url: '/hezhi/course/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ璇剧▼璇︾粏 +export function getCourse(courseId) { + return request({ + url: '/hezhi/course/' + courseId, + method: 'get' + }) +} + +// 鏂板璇剧▼ +export function addCourse(data) { + return request({ + url: '/hezhi/course', + method: 'post', + data: data + }) +} + +// 淇敼璇剧▼ +export function updateCourse(data) { + return request({ + url: '/hezhi/course', + method: 'put', + data: data + }) +} + +// 鍒犻櫎璇剧▼ +export function delCourse(courseId) { + return request({ + url: '/hezhi/course/' + courseId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/courseChapter.js b/ruoyi-ui/src/api/hezhi/courseChapter.js new file mode 100644 index 0000000000000000000000000000000000000000..7796462e7d2931d946ea5be907a3777d10038670 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/courseChapter.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ璇剧▼绔犺妭鍒楄〃 +export function listCourseChapter(query) { + return request({ + url: '/hezhi/courseChapter/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ璇剧▼绔犺妭璇︾粏 +export function getCourseChapter(chapterId) { + return request({ + url: '/hezhi/courseChapter/' + chapterId, + method: 'get' + }) +} + +// 鏂板璇剧▼绔犺妭 +export function addCourseChapter(data) { + return request({ + url: '/hezhi/courseChapter', + method: 'post', + data: data + }) +} + +// 淇敼璇剧▼绔犺妭 +export function updateCourseChapter(data) { + return request({ + url: '/hezhi/courseChapter', + method: 'put', + data: data + }) +} + +// 鍒犻櫎璇剧▼绔犺妭 +export function delCourseChapter(chapterId) { + return request({ + url: '/hezhi/courseChapter/' + chapterId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/courseEvaluate.js b/ruoyi-ui/src/api/hezhi/courseEvaluate.js new file mode 100644 index 0000000000000000000000000000000000000000..0a8a323d793018d0447a303747547c7d67e480f7 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/courseEvaluate.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ璇剧▼璇勪环鍒楄〃 +export function listCourseEvaluate(query) { + return request({ + url: '/hezhi/courseEvaluate/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ璇剧▼璇勪环璇︾粏 +export function getCourseEvaluate(courseEvaluateId) { + return request({ + url: '/hezhi/courseEvaluate/' + courseEvaluateId, + method: 'get' + }) +} + +// 鏂板璇剧▼璇勪环 +export function addCourseEvaluate(data) { + return request({ + url: '/hezhi/courseEvaluate', + method: 'post', + data: data + }) +} + +// 淇敼璇剧▼璇勪环 +export function updateCourseEvaluate(data) { + return request({ + url: '/hezhi/courseEvaluate', + method: 'put', + data: data + }) +} + +// 鍒犻櫎璇剧▼璇勪环 +export function delCourseEvaluate(courseEvaluateId) { + return request({ + url: '/hezhi/courseEvaluate/' + courseEvaluateId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/download.js b/ruoyi-ui/src/api/hezhi/download.js new file mode 100644 index 0000000000000000000000000000000000000000..54ddfc822c5e7562c6c53d66f58cbcd099fc18ed --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/download.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鍦ㄧ嚎涓嬭浇鍒楄〃 +export function listDownload(query) { + return request({ + url: '/hezhi/download/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鍦ㄧ嚎涓嬭浇璇︾粏 +export function getDownload(downloadId) { + return request({ + url: '/hezhi/download/' + downloadId, + method: 'get' + }) +} + +// 鏂板鍦ㄧ嚎涓嬭浇 +export function addDownload(data) { + return request({ + url: '/hezhi/download', + method: 'post', + data: data + }) +} + +// 淇敼鍦ㄧ嚎涓嬭浇 +export function updateDownload(data) { + return request({ + url: '/hezhi/download', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鍦ㄧ嚎涓嬭浇 +export function delDownload(downloadId) { + return request({ + url: '/hezhi/download/' + downloadId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/enterpriseProgress.js b/ruoyi-ui/src/api/hezhi/enterpriseProgress.js new file mode 100644 index 0000000000000000000000000000000000000000..dfcd560517c97aa8d95b9dc65569095870b1820a --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/enterpriseProgress.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ浼佷笟鍘嗙▼鍒楄〃 +export function listEnterpriseProgress(query) { + return request({ + url: '/hezhi/enterpriseProgress/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ浼佷笟鍘嗙▼璇︾粏 +export function getEnterpriseProgress(enterpriseProgressId) { + return request({ + url: '/hezhi/enterpriseProgress/' + enterpriseProgressId, + method: 'get' + }) +} + +// 鏂板浼佷笟鍘嗙▼ +export function addEnterpriseProgress(data) { + return request({ + url: '/hezhi/enterpriseProgress', + method: 'post', + data: data + }) +} + +// 淇敼浼佷笟鍘嗙▼ +export function updateEnterpriseProgress(data) { + return request({ + url: '/hezhi/enterpriseProgress', + method: 'put', + data: data + }) +} + +// 鍒犻櫎浼佷笟鍘嗙▼ +export function delEnterpriseProgress(enterpriseProgressId) { + return request({ + url: '/hezhi/enterpriseProgress/' + enterpriseProgressId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/evaluateAgency.js b/ruoyi-ui/src/api/hezhi/evaluateAgency.js new file mode 100644 index 0000000000000000000000000000000000000000..508f6665b5ec1c1e3446377170f272f88ed6c9a4 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/evaluateAgency.js @@ -0,0 +1,52 @@ +import request from '@/utils/request' + +// 鏌ヨ璇勪环鏈烘瀯鍒楄〃 +export function listEvaluateAgency(query) { + return request({ + url: '/hezhi/evaluateAgency/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ璇勪环鏈烘瀯璇︾粏 +export function getEvaluateAgency(evaluateAgencyId) { + return request({ + url: '/hezhi/evaluateAgency/' + evaluateAgencyId, + method: 'get' + }) +} + +// 鏂板璇勪环鏈烘瀯 +export function addEvaluateAgency(data) { + return request({ + url: '/hezhi/evaluateAgency', + method: 'post', + data: data + }) +} + +// 淇敼璇勪环鏈烘瀯 +export function updateEvaluateAgency(data) { + return request({ + url: '/hezhi/evaluateAgency', + method: 'put', + data: data + }) +} + +// 鍒犻櫎璇勪环鏈烘瀯 +export function delEvaluateAgency(evaluateAgencyId) { + return request({ + url: '/hezhi/evaluateAgency/' + evaluateAgencyId, + method: 'delete' + }) +} + +// 鑾峰彇璇勪环鏈烘瀯鍒楄〃 +export function getSelectList() { + return request({ + url: '/hezhi/evaluateAgency/getSelectList', + method: 'get' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/evaluateAgencyClass.js b/ruoyi-ui/src/api/hezhi/evaluateAgencyClass.js new file mode 100644 index 0000000000000000000000000000000000000000..22f86ff3d4d6ac3fd05066938b9c0d6bf5141c0f --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/evaluateAgencyClass.js @@ -0,0 +1,52 @@ +import request from '@/utils/request' + +// 鏌ヨ璇勪环鏈烘瀯鍒嗙被鍒楄〃 +export function listEvaluateAgencyClass(query) { + return request({ + url: '/hezhi/evaluateAgencyClass/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ璇勪环鏈烘瀯鍒嗙被璇︾粏 +export function getEvaluateAgencyClass(evaluateAgencyClassId) { + return request({ + url: '/hezhi/evaluateAgencyClass/' + evaluateAgencyClassId, + method: 'get' + }) +} + +// 鏂板璇勪环鏈烘瀯鍒嗙被 +export function addEvaluateAgencyClass(data) { + return request({ + url: '/hezhi/evaluateAgencyClass', + method: 'post', + data: data + }) +} + +// 淇敼璇勪环鏈烘瀯鍒嗙被 +export function updateEvaluateAgencyClass(data) { + return request({ + url: '/hezhi/evaluateAgencyClass', + method: 'put', + data: data + }) +} + +// 鍒犻櫎璇勪环鏈烘瀯鍒嗙被 +export function delEvaluateAgencyClass(evaluateAgencyClassId) { + return request({ + url: '/hezhi/evaluateAgencyClass/' + evaluateAgencyClassId, + method: 'delete' + }) +} + +// 璇勪环鏈烘瀯鍒嗙被鍒楄〃 +export function getAllEvaluateAgencyClassList() { + return request({ + url: '/hezhi/evaluateAgencyClass/getAllEvaluateAgencyClassList', + method: 'get', + }) +} diff --git a/ruoyi-ui/src/api/hezhi/exam.js b/ruoyi-ui/src/api/hezhi/exam.js new file mode 100644 index 0000000000000000000000000000000000000000..b1bc1c50f7aa3f860b883e4fd0328fa1d8109a98 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/exam.js @@ -0,0 +1,71 @@ +import request from '@/utils/request' + +// 鏌ヨ鑰冭瘯鍒楄〃 +export function listExam(query) { + return request({ + url: '/hezhi/exam/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鑰冭瘯璇︾粏 +export function getExam(examId) { + return request({ + url: '/hezhi/exam/' + examId, + method: 'get' + }) +} + +// 鏂板鑰冭瘯 +export function addExam(data) { + return request({ + url: '/hezhi/exam', + method: 'post', + data: data + }) +} + +// 淇敼鑰冭瘯 +export function updateExam(data) { + return request({ + url: '/hezhi/exam', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鑰冭瘯 +export function delExam(examId) { + return request({ + url: '/hezhi/exam/' + examId, + method: 'delete' + }) +} + +// 淇敼鑰冭瘯璁剧疆 +export function updateExamConfig(data) { + return request({ + url: '/hezhi/exam/updateExamConfig', + method: 'post', + data: data + }) +} + +// 鎵鏈夎冭瘯鍒楄〃 +export function getAllExamList() { + return request({ + url: '/hezhi/exam/getAllExamList', + method: 'get', + }) +} + + +// 鎵鏈夎冭瘯鍒楄〃 +export function getExamBatchByExamId(query) { + return request({ + url: '/hezhi/hezhi/list', + method: 'get', + params: query + }) +} diff --git a/ruoyi-ui/src/api/hezhi/examFile.js b/ruoyi-ui/src/api/hezhi/examFile.js new file mode 100644 index 0000000000000000000000000000000000000000..d0257b84dac5b93c8a71f772597cd17f310dea67 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/examFile.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鑰冭瘯鎷嶆憚鏂囦欢鍒楄〃 +export function listExamFile(query) { + return request({ + url: '/hezhi/examFile/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鑰冭瘯鎷嶆憚鏂囦欢璇︾粏 +export function getExamFile(examFileId) { + return request({ + url: '/hezhi/examFile/' + examFileId, + method: 'get' + }) +} + +// 鏂板鑰冭瘯鎷嶆憚鏂囦欢 +export function addExamFile(data) { + return request({ + url: '/hezhi/examFile', + method: 'post', + data: data + }) +} + +// 淇敼鑰冭瘯鎷嶆憚鏂囦欢 +export function updateExamFile(data) { + return request({ + url: '/hezhi/examFile', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鑰冭瘯鎷嶆憚鏂囦欢 +export function delExamFile(examFileId) { + return request({ + url: '/hezhi/examFile/' + examFileId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/examNotice.js b/ruoyi-ui/src/api/hezhi/examNotice.js new file mode 100644 index 0000000000000000000000000000000000000000..a7b8b5e7361e13cd1f4a66cb8a46eb1c46f0c80a --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/examNotice.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鑰冭瘯閫氱煡鍒楄〃 +export function listExamNotice(query) { + return request({ + url: '/hezhi/examNotice/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鑰冭瘯閫氱煡璇︾粏 +export function getExamNotice(examNoticeId) { + return request({ + url: '/hezhi/examNotice/' + examNoticeId, + method: 'get' + }) +} + +// 鏂板鑰冭瘯閫氱煡 +export function addExamNotice(data) { + return request({ + url: '/hezhi/examNotice', + method: 'post', + data: data + }) +} + +// 淇敼鑰冭瘯閫氱煡 +export function updateExamNotice(data) { + return request({ + url: '/hezhi/examNotice', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鑰冭瘯閫氱煡 +export function delExamNotice(examNoticeId) { + return request({ + url: '/hezhi/examNotice/' + examNoticeId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/examRegistration.js b/ruoyi-ui/src/api/hezhi/examRegistration.js new file mode 100644 index 0000000000000000000000000000000000000000..6877ccd6580aa6f8c59063300e1d72138b1cb038 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/examRegistration.js @@ -0,0 +1,68 @@ +import request from "@/utils/request"; + +// 鏌ヨ鑰冭瘯鎶ュ悕鍒楄〃 +export function listExamRegistration(query) { + return request({ + url: "/hezhi/examRegistration/list", + method: "get", + params: query, + }); +} + +// 鏌ヨ鑰冭瘯鎶ュ悕璇︾粏 +export function getExamRegistration(examRegistrationId) { + return request({ + url: "/hezhi/examRegistration/" + examRegistrationId, + method: "get", + }); +} + +// 鏌ヨ鑰冭瘯鎶ュ悕鍙戣揣璇︾粏 +export function getExamRegistrationFahuo(examRegistrationId) { + return request({ + url: "/hezhi/examRegistration/fahuo/" + examRegistrationId, + method: "get", + }); +} + +// 鏂板鑰冭瘯鎶ュ悕 +export function addExamRegistration(data) { + return request({ + url: "/hezhi/examRegistration", + method: "post", + data: data, + }); +} + +// 淇敼鑰冭瘯鎶ュ悕 +export function updateExamRegistration(data) { + return request({ + url: "/hezhi/examRegistration", + method: "put", + data: data, + }); +} + +// 淇敼鑰冭瘯鎶ュ悕 +export function certificateSend(data) { + return request({ + url: "/hezhi/examRegistration/certificateSend", + method: "post", + data: data, + }); +} + +// 鍒犻櫎鑰冭瘯鎶ュ悕 +export function delExamRegistration(examRegistrationId) { + return request({ + url: "/hezhi/examRegistration/" + examRegistrationId, + method: "delete", + }); +} +// 鑾峰彇鐪佸競鍖 +export function getRegionTreeList() { + return request({ + url: "/api/class/getRegionTreeList", + method: "get", + }); +} diff --git a/ruoyi-ui/src/api/hezhi/examSimulateInfo.js b/ruoyi-ui/src/api/hezhi/examSimulateInfo.js new file mode 100644 index 0000000000000000000000000000000000000000..e0b8fa49d0dfced6256c4fd7c8df73979d709001 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/examSimulateInfo.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏鍒楄〃 +export function listExamSimulateInfo(query) { + return request({ + url: '/hezhi/examSimulateInfo/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏璇︾粏 +export function getExamSimulateInfo(examSimulateInfoId) { + return request({ + url: '/hezhi/examSimulateInfo/' + examSimulateInfoId, + method: 'get' + }) +} + +// 鏂板鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 +export function addExamSimulateInfo(data) { + return request({ + url: '/hezhi/examSimulateInfo', + method: 'post', + data: data + }) +} + +// 淇敼鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 +export function updateExamSimulateInfo(data) { + return request({ + url: '/hezhi/examSimulateInfo', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鑰冭瘯銆佹ā鎷熻冭瘯鑰冪敓璇︽儏 +export function delExamSimulateInfo(examSimulateInfoId) { + return request({ + url: '/hezhi/examSimulateInfo/' + examSimulateInfoId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/examSubject.js b/ruoyi-ui/src/api/hezhi/examSubject.js new file mode 100644 index 0000000000000000000000000000000000000000..dcda484c627318ae692342798897fd4c893c7483 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/examSubject.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鑰冭瘯棰樼洰鍒楄〃 +export function listExamSubject(query) { + return request({ + url: '/hezhi/examSubject/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鑰冭瘯棰樼洰璇︾粏 +export function getExamSubject(examSubjectId) { + return request({ + url: '/hezhi/examSubject/' + examSubjectId, + method: 'get' + }) +} + +// 鏂板鑰冭瘯棰樼洰 +export function addExamSubject(data) { + return request({ + url: '/hezhi/examSubject', + method: 'post', + data: data + }) +} + +// 淇敼鑰冭瘯棰樼洰 +export function updateExamSubject(data) { + return request({ + url: '/hezhi/examSubject', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鑰冭瘯棰樼洰 +export function delExamSubject(examSubjectId) { + return request({ + url: '/hezhi/examSubject/' + examSubjectId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/examSubjectAnswer.js b/ruoyi-ui/src/api/hezhi/examSubjectAnswer.js new file mode 100644 index 0000000000000000000000000000000000000000..9a4c8fdb02dadf9ea7fd9eb8ac4e703d01eb889c --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/examSubjectAnswer.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鑰冭瘯棰樼洰绛旀閫夐」鍒楄〃 +export function listExamSubjectAnswer(query) { + return request({ + url: '/hezhi/examSubjectAnswer/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鑰冭瘯棰樼洰绛旀閫夐」璇︾粏 +export function getExamSubjectAnswer(examSubjectAnswerId) { + return request({ + url: '/hezhi/examSubjectAnswer/' + examSubjectAnswerId, + method: 'get' + }) +} + +// 鏂板鑰冭瘯棰樼洰绛旀閫夐」 +export function addExamSubjectAnswer(data) { + return request({ + url: '/hezhi/examSubjectAnswer', + method: 'post', + data: data + }) +} + +// 淇敼鑰冭瘯棰樼洰绛旀閫夐」 +export function updateExamSubjectAnswer(data) { + return request({ + url: '/hezhi/examSubjectAnswer', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鑰冭瘯棰樼洰绛旀閫夐」 +export function delExamSubjectAnswer(examSubjectAnswerId) { + return request({ + url: '/hezhi/examSubjectAnswer/' + examSubjectAnswerId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/examSubjectFormal.js b/ruoyi-ui/src/api/hezhi/examSubjectFormal.js new file mode 100644 index 0000000000000000000000000000000000000000..9c964944fc0375e21d2b41e6dea2468c03cee2be --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/examSubjectFormal.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ姝e紡鑰冭瘯棰樼洰鍒楄〃 +export function listExamSubjectFormal(query) { + return request({ + url: '/hezhi/examSubjectFormal/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ姝e紡鑰冭瘯棰樼洰璇︾粏 +export function getExamSubjectFormal(examSubjectFormalId) { + return request({ + url: '/hezhi/examSubjectFormal/' + examSubjectFormalId, + method: 'get' + }) +} + +// 鏂板姝e紡鑰冭瘯棰樼洰 +export function addExamSubjectFormal(data) { + return request({ + url: '/hezhi/examSubjectFormal', + method: 'post', + data: data + }) +} + +// 淇敼姝e紡鑰冭瘯棰樼洰 +export function updateExamSubjectFormal(data) { + return request({ + url: '/hezhi/examSubjectFormal', + method: 'put', + data: data + }) +} + +// 鍒犻櫎姝e紡鑰冭瘯棰樼洰 +export function delExamSubjectFormal(examSubjectFormalId) { + return request({ + url: '/hezhi/examSubjectFormal/' + examSubjectFormalId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/examSubjectSimulate.js b/ruoyi-ui/src/api/hezhi/examSubjectSimulate.js new file mode 100644 index 0000000000000000000000000000000000000000..cba7333b5e9ba2efe521e4add97e0775d553bff9 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/examSubjectSimulate.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ妯℃嫙鑰冭瘯棰樼洰鍒楄〃 +export function listExamSubjectSimulate(query) { + return request({ + url: '/hezhi/examSubjectSimulate/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ妯℃嫙鑰冭瘯棰樼洰璇︾粏 +export function getExamSubjectSimulate(examSubjectSimulateId) { + return request({ + url: '/hezhi/examSubjectSimulate/' + examSubjectSimulateId, + method: 'get' + }) +} + +// 鏂板妯℃嫙鑰冭瘯棰樼洰 +export function addExamSubjectSimulate(data) { + return request({ + url: '/hezhi/examSubjectSimulate', + method: 'post', + data: data + }) +} + +// 淇敼妯℃嫙鑰冭瘯棰樼洰 +export function updateExamSubjectSimulate(data) { + return request({ + url: '/hezhi/examSubjectSimulate', + method: 'put', + data: data + }) +} + +// 鍒犻櫎妯℃嫙鑰冭瘯棰樼洰 +export function delExamSubjectSimulate(examSubjectSimulateId) { + return request({ + url: '/hezhi/examSubjectSimulate/' + examSubjectSimulateId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/expressKdCode.js b/ruoyi-ui/src/api/hezhi/expressKdCode.js new file mode 100644 index 0000000000000000000000000000000000000000..b7295950d623a4e280529001ba2932c03aace0c2 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/expressKdCode.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ蹇掔紪鐮佸垪琛 +export function listExpressKdCode(query) { + return request({ + url: '/hezhi/expressKdCode/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ蹇掔紪鐮佽缁 +export function getExpressKdCode(id) { + return request({ + url: '/hezhi/expressKdCode/' + id, + method: 'get' + }) +} + +// 鏂板蹇掔紪鐮 +export function addExpressKdCode(data) { + return request({ + url: '/hezhi/expressKdCode', + method: 'post', + data: data + }) +} + +// 淇敼蹇掔紪鐮 +export function updateExpressKdCode(data) { + return request({ + url: '/hezhi/expressKdCode', + method: 'put', + data: data + }) +} + +// 鍒犻櫎蹇掔紪鐮 +export function delExpressKdCode(id) { + return request({ + url: '/hezhi/expressKdCode/' + id, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/link.js b/ruoyi-ui/src/api/hezhi/link.js new file mode 100644 index 0000000000000000000000000000000000000000..b3f0c230dde2e880ffc31257d42fba07815f14a2 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/link.js @@ -0,0 +1,70 @@ +import request from '@/utils/request' + +// 鏌ヨ璧勬簮鍏宠仈鍒楄〃 +export function listLink(query) { + return request({ + url: '/hezhi/link/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ璧勬簮鍏宠仈璇︾粏 +export function getLink(linkId) { + return request({ + url: '/hezhi/link/' + linkId, + method: 'get' + }) +} + +// 鏂板璧勬簮鍏宠仈 +export function addLink(data) { + return request({ + url: '/hezhi/link', + method: 'post', + data: data + }) +} + +// 淇敼璧勬簮鍏宠仈 +export function updateLink(data) { + return request({ + url: '/hezhi/link', + method: 'put', + data: data + }) +} + +// 鍒犻櫎璧勬簮鍏宠仈 +export function delLink(linkId) { + return request({ + url: '/hezhi/link/' + linkId, + method: 'delete' + }) +} + +// 鏌ヨ璇勪环鏈烘瀯涓庤绋嬪叧鑱斿垪琛 +export function listLinkEvaluateAgencyCourse(query) { + return request({ + url: '/hezhi/link/listLinkEvaluateAgencyCourse', + method: 'get', + params: query + }) +} + +// 鏌ヨ鐩存挱涓庤佸笀鍏宠仈鍒楄〃 +export function listLinkLiveBroadcastTeacher(query) { + return request({ + url: '/hezhi/link/listLinkLiveBroadcastTeacher', + method: 'get', + params: query + }) +} + +// 鎵鏈夎绋嬪垪琛 +export function getAllCourseList() { + return request({ + url: '/hezhi/course/getAllCourseList', + method: 'get', + }) +} diff --git a/ruoyi-ui/src/api/hezhi/liveBroadcast.js b/ruoyi-ui/src/api/hezhi/liveBroadcast.js new file mode 100644 index 0000000000000000000000000000000000000000..ddf6566bbfa13ae2510aa319eae9703ba10b20b3 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/liveBroadcast.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鐩存挱鍒楄〃 +export function listLiveBroadcast(query) { + return request({ + url: '/hezhi/liveBroadcast/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鐩存挱璇︾粏 +export function getLiveBroadcast(liveBroadcastId) { + return request({ + url: '/hezhi/liveBroadcast/' + liveBroadcastId, + method: 'get' + }) +} + +// 鏂板鐩存挱 +export function addLiveBroadcast(data) { + return request({ + url: '/hezhi/liveBroadcast', + method: 'post', + data: data + }) +} + +// 淇敼鐩存挱 +export function updateLiveBroadcast(data) { + return request({ + url: '/hezhi/liveBroadcast', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鐩存挱 +export function delLiveBroadcast(liveBroadcastId) { + return request({ + url: '/hezhi/liveBroadcast/' + liveBroadcastId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/majorClass.js b/ruoyi-ui/src/api/hezhi/majorClass.js new file mode 100644 index 0000000000000000000000000000000000000000..88627433749419fb58c6e57136e264c2ec450e47 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/majorClass.js @@ -0,0 +1,52 @@ +import request from '@/utils/request' + +// 鏌ヨ涓撲笟鍒嗙被鍒楄〃 +export function listMajorClass(query) { + return request({ + url: '/hezhi/majorClass/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ涓撲笟鍒嗙被璇︾粏 +export function getMajorClass(majorId) { + return request({ + url: '/hezhi/majorClass/' + majorId, + method: 'get' + }) +} + +// 鏂板涓撲笟鍒嗙被 +export function addMajorClass(data) { + return request({ + url: '/hezhi/majorClass', + method: 'post', + data: data + }) +} + +// 淇敼涓撲笟鍒嗙被 +export function updateMajorClass(data) { + return request({ + url: '/hezhi/majorClass', + method: 'put', + data: data + }) +} + +// 鍒犻櫎涓撲笟鍒嗙被 +export function delMajorClass(majorId) { + return request({ + url: '/hezhi/majorClass/' + majorId, + method: 'delete' + }) +} + +// 涓撲笟鍒嗙被涓嬫媺妗嗘爲鍒楄〃 +export function getAllMajorClassList(){ + return request({ + url: '/hezhi/majorClass/getAllMajorClassList', + method: 'get' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/memberAddress.js b/ruoyi-ui/src/api/hezhi/memberAddress.js new file mode 100644 index 0000000000000000000000000000000000000000..82c3bb96347d0a5d0452b3eda027a487f8ea7e2e --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/memberAddress.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鐢ㄦ埛鍦板潃鍒楄〃 +export function listMemberAddress(query) { + return request({ + url: '/hezhi/memberAddress/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鐢ㄦ埛鍦板潃璇︾粏 +export function getMemberAddress(memberAddressId) { + return request({ + url: '/hezhi/memberAddress/' + memberAddressId, + method: 'get' + }) +} + +// 鏂板鐢ㄦ埛鍦板潃 +export function addMemberAddress(data) { + return request({ + url: '/hezhi/memberAddress', + method: 'post', + data: data + }) +} + +// 淇敼鐢ㄦ埛鍦板潃 +export function updateMemberAddress(data) { + return request({ + url: '/hezhi/memberAddress', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鐢ㄦ埛鍦板潃 +export function delMemberAddress(memberAddressId) { + return request({ + url: '/hezhi/memberAddress/' + memberAddressId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/memberDiscuss.js b/ruoyi-ui/src/api/hezhi/memberDiscuss.js new file mode 100644 index 0000000000000000000000000000000000000000..4de8bfc107cd8d5d7d92680d7b9290f9db306d8a --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/memberDiscuss.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鐢ㄦ埛璁ㄨ鍒楄〃 +export function listMemberDiscuss(query) { + return request({ + url: '/hezhi/memberDiscuss/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鐢ㄦ埛璁ㄨ璇︾粏 +export function getMemberDiscuss(memberDiscussId) { + return request({ + url: '/hezhi/memberDiscuss/' + memberDiscussId, + method: 'get' + }) +} + +// 鏂板鐢ㄦ埛璁ㄨ +export function addMemberDiscuss(data) { + return request({ + url: '/hezhi/memberDiscuss', + method: 'post', + data: data + }) +} + +// 淇敼鐢ㄦ埛璁ㄨ +export function updateMemberDiscuss(data) { + return request({ + url: '/hezhi/memberDiscuss', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鐢ㄦ埛璁ㄨ +export function delMemberDiscuss(memberDiscussId) { + return request({ + url: '/hezhi/memberDiscuss/' + memberDiscussId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/memberExamSimulateAll.js b/ruoyi-ui/src/api/hezhi/memberExamSimulateAll.js new file mode 100644 index 0000000000000000000000000000000000000000..ba5bd31487ff05b83cf4dd71a8a8142f738b69a1 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/memberExamSimulateAll.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛夊垪琛 +export function listMemberExamSimulateAll(query) { + return request({ + url: '/hezhi/memberExamSimulateAll/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛夎缁 +export function getMemberExamSimulateAll(memberExamSimulateAllId) { + return request({ + url: '/hezhi/memberExamSimulateAll/' + memberExamSimulateAllId, + method: 'get' + }) +} + +// 鏂板鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 +export function addMemberExamSimulateAll(data) { + return request({ + url: '/hezhi/memberExamSimulateAll', + method: 'post', + data: data + }) +} + +// 淇敼鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 +export function updateMemberExamSimulateAll(data) { + return request({ + url: '/hezhi/memberExamSimulateAll', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鎴戠殑鑰冭瘯銆佹ā鎷熼鐩紙鍋氳繃锛 +export function delMemberExamSimulateAll(memberExamSimulateAllId) { + return request({ + url: '/hezhi/memberExamSimulateAll/' + memberExamSimulateAllId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/memberJoin.js b/ruoyi-ui/src/api/hezhi/memberJoin.js new file mode 100644 index 0000000000000000000000000000000000000000..6c9257b2a9739fb7b894f375e540b3e079775acc --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/memberJoin.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鐢ㄦ埛鍙備笌鍒楄〃 +export function listMemberJoin(query) { + return request({ + url: '/hezhi/memberJoin/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鐢ㄦ埛鍙備笌璇︾粏 +export function getMemberJoin(memberJoinId) { + return request({ + url: '/hezhi/memberJoin/' + memberJoinId, + method: 'get' + }) +} + +// 鏂板鐢ㄦ埛鍙備笌 +export function addMemberJoin(data) { + return request({ + url: '/hezhi/memberJoin', + method: 'post', + data: data + }) +} + +// 淇敼鐢ㄦ埛鍙備笌 +export function updateMemberJoin(data) { + return request({ + url: '/hezhi/memberJoin', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鐢ㄦ埛鍙備笌 +export function delMemberJoin(memberJoinId) { + return request({ + url: '/hezhi/memberJoin/' + memberJoinId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/memberMajor.js b/ruoyi-ui/src/api/hezhi/memberMajor.js new file mode 100644 index 0000000000000000000000000000000000000000..ba208cfc1733b68fb54f1b1b1cae7165ef7be517 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/memberMajor.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鐢ㄦ埛棰樺簱涓撲笟鍒楄〃 +export function listMemberMajor(query) { + return request({ + url: '/hezhi/memberMajor/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鐢ㄦ埛棰樺簱涓撲笟璇︾粏 +export function getMemberMajor(memberMajorId) { + return request({ + url: '/hezhi/memberMajor/' + memberMajorId, + method: 'get' + }) +} + +// 鏂板鐢ㄦ埛棰樺簱涓撲笟 +export function addMemberMajor(data) { + return request({ + url: '/hezhi/memberMajor', + method: 'post', + data: data + }) +} + +// 淇敼鐢ㄦ埛棰樺簱涓撲笟 +export function updateMemberMajor(data) { + return request({ + url: '/hezhi/memberMajor', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鐢ㄦ埛棰樺簱涓撲笟 +export function delMemberMajor(memberMajorId) { + return request({ + url: '/hezhi/memberMajor/' + memberMajorId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/memberOrder.js b/ruoyi-ui/src/api/hezhi/memberOrder.js new file mode 100644 index 0000000000000000000000000000000000000000..176c242ec7b6eb8ce06f9783fbe800c30feb3646 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/memberOrder.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ浼氬憳璁㈠崟淇℃伅鍒楄〃 +export function listMemberOrder(query) { + return request({ + url: '/hezhi/memberOrder/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ浼氬憳璁㈠崟淇℃伅璇︾粏 +export function getMemberOrder(orderId) { + return request({ + url: '/hezhi/memberOrder/' + orderId, + method: 'get' + }) +} + +// 鏂板浼氬憳璁㈠崟淇℃伅 +export function addMemberOrder(data) { + return request({ + url: '/hezhi/memberOrder', + method: 'post', + data: data + }) +} + +// 淇敼浼氬憳璁㈠崟淇℃伅 +export function updateMemberOrder(data) { + return request({ + url: '/hezhi/memberOrder', + method: 'put', + data: data + }) +} + +// 鍒犻櫎浼氬憳璁㈠崟淇℃伅 +export function delMemberOrder(orderId) { + return request({ + url: '/hezhi/memberOrder/' + orderId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/memberScore.js b/ruoyi-ui/src/api/hezhi/memberScore.js new file mode 100644 index 0000000000000000000000000000000000000000..8dedb4dfda4b4a94f10b1884f15c92c5523891d9 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/memberScore.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鐢ㄦ埛绉垎璇︽儏鍒楄〃 +export function listMemberScore(query) { + return request({ + url: '/hezhi/memberScore/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鐢ㄦ埛绉垎璇︽儏璇︾粏 +export function getMemberScore(memberScoreId) { + return request({ + url: '/hezhi/memberScore/' + memberScoreId, + method: 'get' + }) +} + +// 鏂板鐢ㄦ埛绉垎璇︽儏 +export function addMemberScore(data) { + return request({ + url: '/hezhi/memberScore', + method: 'post', + data: data + }) +} + +// 淇敼鐢ㄦ埛绉垎璇︽儏 +export function updateMemberScore(data) { + return request({ + url: '/hezhi/memberScore', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鐢ㄦ埛绉垎璇︽儏 +export function delMemberScore(memberScoreId) { + return request({ + url: '/hezhi/memberScore/' + memberScoreId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/memberSign.js b/ruoyi-ui/src/api/hezhi/memberSign.js new file mode 100644 index 0000000000000000000000000000000000000000..fd7ba9c10c2bd8faf7545ff83123ec34bd7b8762 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/memberSign.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鐢ㄦ埛绛惧埌鍒楄〃 +export function listMemberSign(query) { + return request({ + url: '/hezhi/memberSign/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鐢ㄦ埛绛惧埌璇︾粏 +export function getMemberSign(memberSignId) { + return request({ + url: '/hezhi/memberSign/' + memberSignId, + method: 'get' + }) +} + +// 鏂板鐢ㄦ埛绛惧埌 +export function addMemberSign(data) { + return request({ + url: '/hezhi/memberSign', + method: 'post', + data: data + }) +} + +// 淇敼鐢ㄦ埛绛惧埌 +export function updateMemberSign(data) { + return request({ + url: '/hezhi/memberSign', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鐢ㄦ埛绛惧埌 +export function delMemberSign(memberSignId) { + return request({ + url: '/hezhi/memberSign/' + memberSignId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/memberSubjectAll.js b/ruoyi-ui/src/api/hezhi/memberSubjectAll.js new file mode 100644 index 0000000000000000000000000000000000000000..18a09d3b90b7a98a0051f3a55e2870efce15c4cf --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/memberSubjectAll.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鎴戠殑棰樼洰鍒楄〃 +export function listMemberSubjectAll(query) { + return request({ + url: '/hezhi/memberSubjectAll/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鎴戠殑棰樼洰璇︾粏 +export function getMemberSubjectAll(memberSubjectAllId) { + return request({ + url: '/hezhi/memberSubjectAll/' + memberSubjectAllId, + method: 'get' + }) +} + +// 鏂板鎴戠殑棰樼洰 +export function addMemberSubjectAll(data) { + return request({ + url: '/hezhi/memberSubjectAll', + method: 'post', + data: data + }) +} + +// 淇敼鎴戠殑棰樼洰 +export function updateMemberSubjectAll(data) { + return request({ + url: '/hezhi/memberSubjectAll', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鎴戠殑棰樼洰 +export function delMemberSubjectAll(memberSubjectAllId) { + return request({ + url: '/hezhi/memberSubjectAll/' + memberSubjectAllId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/memberSubjectCollect.js b/ruoyi-ui/src/api/hezhi/memberSubjectCollect.js new file mode 100644 index 0000000000000000000000000000000000000000..18cbc5aba77fc55fec9e2a37f97a68e9a4a719ed --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/memberSubjectCollect.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鎴戠殑鏀惰棌棰樼洰鍒楄〃 +export function listMemberSubjectCollect(query) { + return request({ + url: '/hezhi/memberSubjectCollect/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鎴戠殑鏀惰棌棰樼洰璇︾粏 +export function getMemberSubjectCollect(memberSubjectCollectId) { + return request({ + url: '/hezhi/memberSubjectCollect/' + memberSubjectCollectId, + method: 'get' + }) +} + +// 鏂板鎴戠殑鏀惰棌棰樼洰 +export function addMemberSubjectCollect(data) { + return request({ + url: '/hezhi/memberSubjectCollect', + method: 'post', + data: data + }) +} + +// 淇敼鎴戠殑鏀惰棌棰樼洰 +export function updateMemberSubjectCollect(data) { + return request({ + url: '/hezhi/memberSubjectCollect', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鎴戠殑鏀惰棌棰樼洰 +export function delMemberSubjectCollect(memberSubjectCollectId) { + return request({ + url: '/hezhi/memberSubjectCollect/' + memberSubjectCollectId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/memberSubjectWrong.js b/ruoyi-ui/src/api/hezhi/memberSubjectWrong.js new file mode 100644 index 0000000000000000000000000000000000000000..6a7a7a1199fa7f80ffca9b5b1e7b488199b0facb --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/memberSubjectWrong.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鎴戠殑閿欓鍒楄〃 +export function listMemberSubjectWrong(query) { + return request({ + url: '/hezhi/memberSubjectWrong/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鎴戠殑閿欓璇︾粏 +export function getMemberSubjectWrong(memberSubjectWrongId) { + return request({ + url: '/hezhi/memberSubjectWrong/' + memberSubjectWrongId, + method: 'get' + }) +} + +// 鏂板鎴戠殑閿欓 +export function addMemberSubjectWrong(data) { + return request({ + url: '/hezhi/memberSubjectWrong', + method: 'post', + data: data + }) +} + +// 淇敼鎴戠殑閿欓 +export function updateMemberSubjectWrong(data) { + return request({ + url: '/hezhi/memberSubjectWrong', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鎴戠殑閿欓 +export function delMemberSubjectWrong(memberSubjectWrongId) { + return request({ + url: '/hezhi/memberSubjectWrong/' + memberSubjectWrongId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/news.js b/ruoyi-ui/src/api/hezhi/news.js new file mode 100644 index 0000000000000000000000000000000000000000..ab8f9f910c75d6f30325d6883dc7c7bdb4e31bb7 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/news.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鏂伴椈鍜ㄨ鍒楄〃 +export function listNews(query) { + return request({ + url: '/hezhi/news/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鏂伴椈鍜ㄨ璇︾粏 +export function getNews(newsId) { + return request({ + url: '/hezhi/news/' + newsId, + method: 'get' + }) +} + +// 鏂板鏂伴椈鍜ㄨ +export function addNews(data) { + return request({ + url: '/hezhi/news', + method: 'post', + data: data + }) +} + +// 淇敼鏂伴椈鍜ㄨ +export function updateNews(data) { + return request({ + url: '/hezhi/news', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鏂伴椈鍜ㄨ +export function delNews(newsId) { + return request({ + url: '/hezhi/news/' + newsId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/notice.js b/ruoyi-ui/src/api/hezhi/notice.js new file mode 100644 index 0000000000000000000000000000000000000000..7e99e27cacccd08480d8823f57e9c8d4c2eb6ce4 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/notice.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ閫氱煡鍏憡鍒楄〃 +export function listNotice(query) { + return request({ + url: '/hezhi/notice/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ閫氱煡鍏憡璇︾粏 +export function getNotice(noticeId) { + return request({ + url: '/hezhi/notice/' + noticeId, + method: 'get' + }) +} + +// 鏂板閫氱煡鍏憡 +export function addNotice(data) { + return request({ + url: '/hezhi/notice', + method: 'post', + data: data + }) +} + +// 淇敼閫氱煡鍏憡 +export function updateNotice(data) { + return request({ + url: '/hezhi/notice', + method: 'put', + data: data + }) +} + +// 鍒犻櫎閫氱煡鍏憡 +export function delNotice(noticeId) { + return request({ + url: '/hezhi/notice/' + noticeId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/postAddress.js b/ruoyi-ui/src/api/hezhi/postAddress.js new file mode 100644 index 0000000000000000000000000000000000000000..907b0dbc1b7596c9c49d8e66c346fb75f62a3c6b --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/postAddress.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ閭瘎鍦板潃鍒楄〃 +export function listPostAddress(query) { + return request({ + url: '/hezhi/postAddress/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ閭瘎鍦板潃璇︾粏 +export function getPostAddress(postAddressId) { + return request({ + url: '/hezhi/postAddress/' + postAddressId, + method: 'get' + }) +} + +// 鏂板閭瘎鍦板潃 +export function addPostAddress(data) { + return request({ + url: '/hezhi/postAddress', + method: 'post', + data: data + }) +} + +// 淇敼閭瘎鍦板潃 +export function updatePostAddress(data) { + return request({ + url: '/hezhi/postAddress', + method: 'put', + data: data + }) +} + +// 鍒犻櫎閭瘎鍦板潃 +export function delPostAddress(postAddressId) { + return request({ + url: '/hezhi/postAddress/' + postAddressId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/region.js b/ruoyi-ui/src/api/hezhi/region.js new file mode 100644 index 0000000000000000000000000000000000000000..3742a10b12ccd06fcae2d7d0b44f1c4909193ba5 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/region.js @@ -0,0 +1,64 @@ +import request from '@/utils/request' + +// 鏌ヨ琛屾斂鍖哄煙鍒楄〃 +export function listRegion(query) { + return request({ + url: '/hezhi/region/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ琛屾斂鍖哄煙璇︾粏 +export function getRegion(id) { + return request({ + url: '/hezhi/region/' + id, + method: 'get' + }) +} + +// 鏂板琛屾斂鍖哄煙 +export function addRegion(data) { + return request({ + url: '/hezhi/region', + method: 'post', + data: data + }) +} + +// 淇敼琛屾斂鍖哄煙 +export function updateRegion(data) { + return request({ + url: '/hezhi/region', + method: 'put', + data: data + }) +} + +// 鍒犻櫎琛屾斂鍖哄煙 +export function delRegion(id) { + return request({ + url: '/hezhi/region/' + id, + method: 'delete' + }) +} + +// 鏌ヨ鐪佸垪琛 +export function getProvince() { + return request({ + url: '/hezhi/region/getProvince', + method: 'get', + + }) +} + +// 鏌ヨ甯傘佸尯鍒楄〃 +export function getCityOrArea(ida) { + return request({ + url: '/hezhi/region/getCityOrArea' , + method: 'get', + params: { + id:ida, + } + }) +} diff --git a/ruoyi-ui/src/api/hezhi/smsCode.js b/ruoyi-ui/src/api/hezhi/smsCode.js new file mode 100644 index 0000000000000000000000000000000000000000..6db55d6548643a9aec362df1830324f85f0938a0 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/smsCode.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鐭俊楠岃瘉鐮佸垪琛 +export function listSmsCode(query) { + return request({ + url: '/hezhi/smsCode/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鐭俊楠岃瘉鐮佽缁 +export function getSmsCode(smsCodeId) { + return request({ + url: '/hezhi/smsCode/' + smsCodeId, + method: 'get' + }) +} + +// 鏂板鐭俊楠岃瘉鐮 +export function addSmsCode(data) { + return request({ + url: '/hezhi/smsCode', + method: 'post', + data: data + }) +} + +// 淇敼鐭俊楠岃瘉鐮 +export function updateSmsCode(data) { + return request({ + url: '/hezhi/smsCode', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鐭俊楠岃瘉鐮 +export function delSmsCode(smsCodeId) { + return request({ + url: '/hezhi/smsCode/' + smsCodeId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/student.js b/ruoyi-ui/src/api/hezhi/student.js new file mode 100644 index 0000000000000000000000000000000000000000..d70b3030eefcef6349ad196c3e91f83c472c86fa --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/student.js @@ -0,0 +1,52 @@ +import request from '@/utils/request' + +// 鏌ヨ瀛﹀憳鍒楄〃 +export function listStudent(query) { + return request({ + url: '/hezhi/student/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ瀛﹀憳璇︾粏 +export function getStudent(studentId) { + return request({ + url: '/hezhi/student/' + studentId, + method: 'get' + }) +} + +// 鏌ヨ瀛﹀憳璇︾粏 +export function importTemplate() { + return request({ + url: '/hezhi/student/importTemplate', + method: 'post' + }) +} + +// 鏂板瀛﹀憳 +export function addStudent(data) { + return request({ + url: '/hezhi/student', + method: 'post', + data: data + }) +} + +// 淇敼瀛﹀憳 +export function updateStudent(data) { + return request({ + url: '/hezhi/student', + method: 'put', + data: data + }) +} + +// 鍒犻櫎瀛﹀憳 +export function delStudent(studentId) { + return request({ + url: '/hezhi/student/' + studentId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/studyCenter.js b/ruoyi-ui/src/api/hezhi/studyCenter.js new file mode 100644 index 0000000000000000000000000000000000000000..81f26b56fe569dc7072f42da4ebb6f3ff71ffcc8 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/studyCenter.js @@ -0,0 +1,52 @@ +import request from '@/utils/request' + +// 鏌ヨ瀛︿範涓績鍒楄〃 +export function listStudyCenter(query) { + return request({ + url: '/hezhi/studyCenter/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ瀛︿範涓績璇︾粏 +export function getStudyCenter(studyCenterId) { + return request({ + url: '/hezhi/studyCenter/' + studyCenterId, + method: 'get' + }) +} + +// 鏂板瀛︿範涓績 +export function addStudyCenter(data) { + return request({ + url: '/hezhi/studyCenter', + method: 'post', + data: data + }) +} + +// 淇敼瀛︿範涓績 +export function updateStudyCenter(data) { + return request({ + url: '/hezhi/studyCenter', + method: 'put', + data: data + }) +} + +// 鍒犻櫎瀛︿範涓績 +export function delStudyCenter(studyCenterId) { + return request({ + url: '/hezhi/studyCenter/' + studyCenterId, + method: 'delete' + }) +} + +// 鏌ヨ瀛︿範涓績鍒楄〃 +export function getAllStudyCenterList() { + return request({ + url: '/hezhi/studyCenter/getAllStudyCenterList', + method: 'get', + }) +} diff --git a/ruoyi-ui/src/api/hezhi/studyCenterClass.js b/ruoyi-ui/src/api/hezhi/studyCenterClass.js new file mode 100644 index 0000000000000000000000000000000000000000..534dbfdeab07b44a85ee27b8551877b91c4f9e50 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/studyCenterClass.js @@ -0,0 +1,52 @@ +import request from '@/utils/request' + +// 鏌ヨ瀛︿範涓績鍒嗙被鍒楄〃 +export function listStudyCenterClass(query) { + return request({ + url: '/hezhi/studyCenterClass/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ瀛︿範涓績鍒嗙被璇︾粏 +export function getStudyCenterClass(studyCenterClassId) { + return request({ + url: '/hezhi/studyCenterClass/' + studyCenterClassId, + method: 'get' + }) +} + +// 鏂板瀛︿範涓績鍒嗙被 +export function addStudyCenterClass(data) { + return request({ + url: '/hezhi/studyCenterClass', + method: 'post', + data: data + }) +} + +// 淇敼瀛︿範涓績鍒嗙被 +export function updateStudyCenterClass(data) { + return request({ + url: '/hezhi/studyCenterClass', + method: 'put', + data: data + }) +} + +// 鍒犻櫎瀛︿範涓績鍒嗙被 +export function delStudyCenterClass(studyCenterClassId) { + return request({ + url: '/hezhi/studyCenterClass/' + studyCenterClassId, + method: 'delete' + }) +} + +// 瀛︿範涓績鍒嗙被鍒楄〃 +export function getAllStudyCenterClassList() { + return request({ + url: '/hezhi/studyCenterClass/getAllStudyCenterClassList', + method: 'get', + }) +} diff --git a/ruoyi-ui/src/api/hezhi/studyCenterFile.js b/ruoyi-ui/src/api/hezhi/studyCenterFile.js new file mode 100644 index 0000000000000000000000000000000000000000..74d367f77506a00d3098c6385d5123aa44693e7e --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/studyCenterFile.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ瀛︿範涓績鏂囦欢鍒楄〃 +export function listStudyCenterFile(query) { + return request({ + url: '/hezhi/studyCenterFile/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ瀛︿範涓績鏂囦欢璇︾粏 +export function getStudyCenterFile(studyCenterFileId) { + return request({ + url: '/hezhi/studyCenterFile/' + studyCenterFileId, + method: 'get' + }) +} + +// 鏂板瀛︿範涓績鏂囦欢 +export function addStudyCenterFile(data) { + return request({ + url: '/hezhi/studyCenterFile', + method: 'post', + data: data + }) +} + +// 淇敼瀛︿範涓績鏂囦欢 +export function updateStudyCenterFile(data) { + return request({ + url: '/hezhi/studyCenterFile', + method: 'put', + data: data + }) +} + +// 鍒犻櫎瀛︿範涓績鏂囦欢 +export function delStudyCenterFile(studyCenterFileId) { + return request({ + url: '/hezhi/studyCenterFile/' + studyCenterFileId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/subjectWarehouseClass.js b/ruoyi-ui/src/api/hezhi/subjectWarehouseClass.js new file mode 100644 index 0000000000000000000000000000000000000000..d218d3eb78ac5df1d742a63055d82a35c54205bc --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/subjectWarehouseClass.js @@ -0,0 +1,83 @@ +import request from '@/utils/request' + +// 鏌ヨ棰樺簱鍒嗙被鍒楄〃 +export function listSubjectWarehouseClass(query) { + return request({ + url: '/hezhi/subjectWarehouseClass/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ棰樺簱鍒嗙被璇︾粏 +export function getSubjectWarehouseClass(subjectWarehouseClassId) { + return request({ + url: '/hezhi/subjectWarehouseClass/' + subjectWarehouseClassId, + method: 'get' + }) +} + +// 鏂板棰樺簱鍒嗙被 +export function addSubjectWarehouseClass(data) { + return request({ + url: '/hezhi/subjectWarehouseClass', + method: 'post', + data: data + }) +} + +// 淇敼棰樺簱鍒嗙被 +export function updateSubjectWarehouseClass(data) { + return request({ + url: '/hezhi/subjectWarehouseClass', + method: 'put', + data: data + }) +} + +// 鍒犻櫎棰樺簱鍒嗙被 +export function delSubjectWarehouseClass(subjectWarehouseClassId) { + return request({ + url: '/hezhi/subjectWarehouseClass/' + subjectWarehouseClassId, + method: 'delete' + }) +} + +// 鏌ヨ棰樺簱鍒嗙被鍒楄〃 +export function getSubjectWarehouseClassList(query) { + return request({ + url: '/hezhi/subjectWarehouseClass/getSubjectWarehouseClassList', + method: 'get', + params: query + }) +} + +// 淇敼妯℃嫙鑰冭瘯璁剧疆 +export function updateSimulateExam(data) { + return request({ + url: '/hezhi/subjectWarehouseClass/updateSimulateExam', + method: 'post', + data: data + }) +} + +// 淇敼妯℃嫙鑰冭瘯鐘舵 +export function setSimulationStatus(subjectWarehouseClassId, simulationStatus) { + const data = { + subjectWarehouseClassId, + simulationStatus + } + return request({ + url: '/hezhi/subjectWarehouseClass/setSimulationStatus', + method: 'put', + data: data + }) +} + +// 鑾峰彇妯℃嫙鑰冭瘯鍒楄〃 +export function getAllSubjectWarehouseCalssList() { + return request({ + url: '/hezhi/subjectWarehouseClass/getAllSubjectWarehouseCalssList', + method: 'get' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/tbTeacherAuthentication.js b/ruoyi-ui/src/api/hezhi/tbTeacherAuthentication.js new file mode 100644 index 0000000000000000000000000000000000000000..cdd2fdcb24849a0447e8d4c408c29a340e1a8205 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/tbTeacherAuthentication.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鍚嶅笀璁よ瘉鍒楄〃 +export function listTbTeacherAuthentication(query) { + return request({ + url: '/hezhi/tbTeacherAuthentication/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鍚嶅笀璁よ瘉璇︾粏 +export function getTbTeacherAuthentication(teacherAuthenticationId) { + return request({ + url: '/hezhi/tbTeacherAuthentication/' + teacherAuthenticationId, + method: 'get' + }) +} + +// 鏂板鍚嶅笀璁よ瘉 +export function addTbTeacherAuthentication(data) { + return request({ + url: '/hezhi/tbTeacherAuthentication', + method: 'post', + data: data + }) +} + +// 淇敼鍚嶅笀璁よ瘉 +export function updateTbTeacherAuthentication(data) { + return request({ + url: '/hezhi/tbTeacherAuthentication', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鍚嶅笀璁よ瘉 +export function delTbTeacherAuthentication(teacherAuthenticationId) { + return request({ + url: '/hezhi/tbTeacherAuthentication/' + teacherAuthenticationId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/teacher.js b/ruoyi-ui/src/api/hezhi/teacher.js new file mode 100644 index 0000000000000000000000000000000000000000..56bd6521f7fa1c7633f9b8ce983c2e315ef34bf1 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/teacher.js @@ -0,0 +1,52 @@ +import request from '@/utils/request' + +// 鏌ヨ鏁欏笀鍒楄〃 +export function listTeacher(query) { + return request({ + url: '/hezhi/teacher/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鏁欏笀璇︾粏 +export function getTeacher(teacherId) { + return request({ + url: '/hezhi/teacher/' + teacherId, + method: 'get' + }) +} + +// 鏂板鏁欏笀 +export function addTeacher(data) { + return request({ + url: '/hezhi/teacher', + method: 'post', + data: data + }) +} + +// 淇敼鏁欏笀 +export function updateTeacher(data) { + return request({ + url: '/hezhi/teacher', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鏁欏笀 +export function delTeacher(teacherId) { + return request({ + url: '/hezhi/teacher/' + teacherId, + method: 'delete' + }) +} + +// 鎵鏈夋暀甯堝垪琛 +export function getAllTeacherList() { + return request({ + url: '/hezhi/teacher/getAllTeacherList', + method: 'get', + }) +} diff --git a/ruoyi-ui/src/api/hezhi/teacherCourse.js b/ruoyi-ui/src/api/hezhi/teacherCourse.js new file mode 100644 index 0000000000000000000000000000000000000000..12123daaf1f78df23cd1f20dcbcae424d9e02391 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/teacherCourse.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鑰佸笀璇剧▼鍏宠仈鍒楄〃 +export function listTeacherCourse(query) { + return request({ + url: '/hezhi/teacherCourse/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鑰佸笀璇剧▼鍏宠仈璇︾粏 +export function getTeacherCourse(teacherCourseId) { + return request({ + url: '/hezhi/teacherCourse/' + teacherCourseId, + method: 'get' + }) +} + +// 鏂板鑰佸笀璇剧▼鍏宠仈 +export function addTeacherCourse(data) { + return request({ + url: '/hezhi/teacherCourse', + method: 'post', + data: data + }) +} + +// 淇敼鑰佸笀璇剧▼鍏宠仈 +export function updateTeacherCourse(data) { + return request({ + url: '/hezhi/teacherCourse', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鑰佸笀璇剧▼鍏宠仈 +export function delTeacherCourse(teacherCourseId) { + return request({ + url: '/hezhi/teacherCourse/' + teacherCourseId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/trends.js b/ruoyi-ui/src/api/hezhi/trends.js new file mode 100644 index 0000000000000000000000000000000000000000..da0671fca7f26b4898091c60a2a5578e863c4af0 --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/trends.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ闄㈠唴鍔ㄦ佸垪琛 +export function listTrends(query) { + return request({ + url: '/hezhi/trends/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ闄㈠唴鍔ㄦ佽缁 +export function getTrends(trendsId) { + return request({ + url: '/hezhi/trends/' + trendsId, + method: 'get' + }) +} + +// 鏂板闄㈠唴鍔ㄦ +export function addTrends(data) { + return request({ + url: '/hezhi/trends', + method: 'post', + data: data + }) +} + +// 淇敼闄㈠唴鍔ㄦ +export function updateTrends(data) { + return request({ + url: '/hezhi/trends', + method: 'put', + data: data + }) +} + +// 鍒犻櫎闄㈠唴鍔ㄦ +export function delTrends(trendsId) { + return request({ + url: '/hezhi/trends/' + trendsId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/hezhi/typeCourse.js b/ruoyi-ui/src/api/hezhi/typeCourse.js new file mode 100644 index 0000000000000000000000000000000000000000..8292701cdb97fd14437536aae1680ce8285c119a --- /dev/null +++ b/ruoyi-ui/src/api/hezhi/typeCourse.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ绫诲瀷璇剧▼鍏宠仈鍒楄〃 +export function listTypeCourse(query) { + return request({ + url: '/hezhi/typeCourse/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ绫诲瀷璇剧▼鍏宠仈璇︾粏 +export function getTypeCourse(typeCourseId) { + return request({ + url: '/hezhi/typeCourse/' + typeCourseId, + method: 'get' + }) +} + +// 鏂板绫诲瀷璇剧▼鍏宠仈 +export function addTypeCourse(data) { + return request({ + url: '/hezhi/typeCourse', + method: 'post', + data: data + }) +} + +// 淇敼绫诲瀷璇剧▼鍏宠仈 +export function updateTypeCourse(data) { + return request({ + url: '/hezhi/typeCourse', + method: 'put', + data: data + }) +} + +// 鍒犻櫎绫诲瀷璇剧▼鍏宠仈 +export function delTypeCourse(typeCourseId) { + return request({ + url: '/hezhi/typeCourse/' + typeCourseId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/login.js b/ruoyi-ui/src/api/login.js new file mode 100644 index 0000000000000000000000000000000000000000..7b7388fde8187fa83141912aba692b3875854e2b --- /dev/null +++ b/ruoyi-ui/src/api/login.js @@ -0,0 +1,60 @@ +import request from '@/utils/request' + +// 鐧诲綍鏂规硶 +export function login(username, password, code, uuid) { + const data = { + username, + password, + code, + uuid + } + return request({ + url: '/login', + headers: { + isToken: false, + repeatSubmit: false + }, + method: 'post', + data: data + }) +} + +// 娉ㄥ唽鏂规硶 +export function register(data) { + return request({ + url: '/register', + headers: { + isToken: false + }, + method: 'post', + data: data + }) +} + +// 鑾峰彇鐢ㄦ埛璇︾粏淇℃伅 +export function getInfo() { + return request({ + url: '/getInfo', + method: 'get' + }) +} + +// 閫鍑烘柟娉 +export function logout() { + return request({ + url: '/logout', + method: 'post' + }) +} + +// 鑾峰彇楠岃瘉鐮 +export function getCodeImg() { + return request({ + url: '/captchaImage', + headers: { + isToken: false + }, + method: 'get', + timeout: 20000 + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/menu.js b/ruoyi-ui/src/api/menu.js new file mode 100644 index 0000000000000000000000000000000000000000..faef101c4e8c3cf76a048f3981a7456edc432b19 --- /dev/null +++ b/ruoyi-ui/src/api/menu.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +// 鑾峰彇璺敱 +export const getRouters = () => { + return request({ + url: '/getRouters', + method: 'get' + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/monitor/cache.js b/ruoyi-ui/src/api/monitor/cache.js new file mode 100644 index 0000000000000000000000000000000000000000..72c5f6a3ec9f4058fb18fedf046d1395d32164ca --- /dev/null +++ b/ruoyi-ui/src/api/monitor/cache.js @@ -0,0 +1,57 @@ +import request from '@/utils/request' + +// 鏌ヨ缂撳瓨璇︾粏 +export function getCache() { + return request({ + url: '/monitor/cache', + method: 'get' + }) +} + +// 鏌ヨ缂撳瓨鍚嶇О鍒楄〃 +export function listCacheName() { + return request({ + url: '/monitor/cache/getNames', + method: 'get' + }) +} + +// 鏌ヨ缂撳瓨閿悕鍒楄〃 +export function listCacheKey(cacheName) { + return request({ + url: '/monitor/cache/getKeys/' + cacheName, + method: 'get' + }) +} + +// 鏌ヨ缂撳瓨鍐呭 +export function getCacheValue(cacheName, cacheKey) { + return request({ + url: '/monitor/cache/getValue/' + cacheName + '/' + cacheKey, + method: 'get' + }) +} + +// 娓呯悊鎸囧畾鍚嶇О缂撳瓨 +export function clearCacheName(cacheName) { + return request({ + url: '/monitor/cache/clearCacheName/' + cacheName, + method: 'delete' + }) +} + +// 娓呯悊鎸囧畾閿悕缂撳瓨 +export function clearCacheKey(cacheKey) { + return request({ + url: '/monitor/cache/clearCacheKey/' + cacheKey, + method: 'delete' + }) +} + +// 娓呯悊鍏ㄩ儴缂撳瓨 +export function clearCacheAll() { + return request({ + url: '/monitor/cache/clearCacheAll', + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/monitor/job.js b/ruoyi-ui/src/api/monitor/job.js new file mode 100644 index 0000000000000000000000000000000000000000..38155693a08ba6eb0a54a027e1f951928d7c3217 --- /dev/null +++ b/ruoyi-ui/src/api/monitor/job.js @@ -0,0 +1,71 @@ +import request from '@/utils/request' + +// 鏌ヨ瀹氭椂浠诲姟璋冨害鍒楄〃 +export function listJob(query) { + return request({ + url: '/monitor/job/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ瀹氭椂浠诲姟璋冨害璇︾粏 +export function getJob(jobId) { + return request({ + url: '/monitor/job/' + jobId, + method: 'get' + }) +} + +// 鏂板瀹氭椂浠诲姟璋冨害 +export function addJob(data) { + return request({ + url: '/monitor/job', + method: 'post', + data: data + }) +} + +// 淇敼瀹氭椂浠诲姟璋冨害 +export function updateJob(data) { + return request({ + url: '/monitor/job', + method: 'put', + data: data + }) +} + +// 鍒犻櫎瀹氭椂浠诲姟璋冨害 +export function delJob(jobId) { + return request({ + url: '/monitor/job/' + jobId, + method: 'delete' + }) +} + +// 浠诲姟鐘舵佷慨鏀 +export function changeJobStatus(jobId, status) { + const data = { + jobId, + status + } + return request({ + url: '/monitor/job/changeStatus', + method: 'put', + data: data + }) +} + + +// 瀹氭椂浠诲姟绔嬪嵆鎵ц涓娆 +export function runJob(jobId, jobGroup) { + const data = { + jobId, + jobGroup + } + return request({ + url: '/monitor/job/run', + method: 'put', + data: data + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/monitor/jobLog.js b/ruoyi-ui/src/api/monitor/jobLog.js new file mode 100644 index 0000000000000000000000000000000000000000..6e0be616660ca604184a539ba3eb9683e80b84b7 --- /dev/null +++ b/ruoyi-ui/src/api/monitor/jobLog.js @@ -0,0 +1,26 @@ +import request from '@/utils/request' + +// 鏌ヨ璋冨害鏃ュ織鍒楄〃 +export function listJobLog(query) { + return request({ + url: '/monitor/jobLog/list', + method: 'get', + params: query + }) +} + +// 鍒犻櫎璋冨害鏃ュ織 +export function delJobLog(jobLogId) { + return request({ + url: '/monitor/jobLog/' + jobLogId, + method: 'delete' + }) +} + +// 娓呯┖璋冨害鏃ュ織 +export function cleanJobLog() { + return request({ + url: '/monitor/jobLog/clean', + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/monitor/logininfor.js b/ruoyi-ui/src/api/monitor/logininfor.js new file mode 100644 index 0000000000000000000000000000000000000000..4d112b78a1cc1eb561ffe5b1028d207b76343f64 --- /dev/null +++ b/ruoyi-ui/src/api/monitor/logininfor.js @@ -0,0 +1,34 @@ +import request from '@/utils/request' + +// 鏌ヨ鐧诲綍鏃ュ織鍒楄〃 +export function list(query) { + return request({ + url: '/monitor/logininfor/list', + method: 'get', + params: query + }) +} + +// 鍒犻櫎鐧诲綍鏃ュ織 +export function delLogininfor(infoId) { + return request({ + url: '/monitor/logininfor/' + infoId, + method: 'delete' + }) +} + +// 瑙i攣鐢ㄦ埛鐧诲綍鐘舵 +export function unlockLogininfor(userName) { + return request({ + url: '/monitor/logininfor/unlock/' + userName, + method: 'get' + }) +} + +// 娓呯┖鐧诲綍鏃ュ織 +export function cleanLogininfor() { + return request({ + url: '/monitor/logininfor/clean', + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/monitor/online.js b/ruoyi-ui/src/api/monitor/online.js new file mode 100644 index 0000000000000000000000000000000000000000..bd22137809c26f7202b4794822c7829ff3577139 --- /dev/null +++ b/ruoyi-ui/src/api/monitor/online.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + +// 鏌ヨ鍦ㄧ嚎鐢ㄦ埛鍒楄〃 +export function list(query) { + return request({ + url: '/monitor/online/list', + method: 'get', + params: query + }) +} + +// 寮洪鐢ㄦ埛 +export function forceLogout(tokenId) { + return request({ + url: '/monitor/online/' + tokenId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/monitor/operlog.js b/ruoyi-ui/src/api/monitor/operlog.js new file mode 100644 index 0000000000000000000000000000000000000000..a04bca84002706b7dffdaca9e1427cb08a6dcc6f --- /dev/null +++ b/ruoyi-ui/src/api/monitor/operlog.js @@ -0,0 +1,26 @@ +import request from '@/utils/request' + +// 鏌ヨ鎿嶄綔鏃ュ織鍒楄〃 +export function list(query) { + return request({ + url: '/monitor/operlog/list', + method: 'get', + params: query + }) +} + +// 鍒犻櫎鎿嶄綔鏃ュ織 +export function delOperlog(operId) { + return request({ + url: '/monitor/operlog/' + operId, + method: 'delete' + }) +} + +// 娓呯┖鎿嶄綔鏃ュ織 +export function cleanOperlog() { + return request({ + url: '/monitor/operlog/clean', + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/monitor/server.js b/ruoyi-ui/src/api/monitor/server.js new file mode 100644 index 0000000000000000000000000000000000000000..e1f9ca214fa0f2b43202167ba74e1e52188010c8 --- /dev/null +++ b/ruoyi-ui/src/api/monitor/server.js @@ -0,0 +1,9 @@ +import request from '@/utils/request' + +// 鑾峰彇鏈嶅姟淇℃伅 +export function getServer() { + return request({ + url: '/monitor/server', + method: 'get' + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/nation.js b/ruoyi-ui/src/api/nation.js new file mode 100644 index 0000000000000000000000000000000000000000..1f8677a05f96eea92bb8e9949c3743535aac67ac --- /dev/null +++ b/ruoyi-ui/src/api/nation.js @@ -0,0 +1,113 @@ +export const nationDataList = [ + { value: "姹夋棌", label: "姹夋棌" }, + + { value: "钂欏彜鏃", label: "钂欏彜鏃" }, + + { value: "鍥炴棌", label: "鍥炴棌" }, + + { value: "钘忔棌", label: "钘忔棌" }, + + { value: "缁村惥灏旀棌", label: "缁村惥灏旀棌" }, + + { value: "鑻楁棌", label: "鑻楁棌" }, + + { value: "褰濇棌", label: "褰濇棌" }, + + { value: "澹棌", label: "澹棌" }, + + { value: "甯冧緷鏃", label: "甯冧緷鏃" }, + + { value: "鏈濋矞鏃", label: "鏈濋矞鏃" }, + + { value: "婊℃棌", label: "婊℃棌" }, + + { value: "渚楁棌", label: "渚楁棌" }, + + { value: "鐟舵棌", label: "鐟舵棌" }, + + { value: "鐧芥棌", label: "鐧芥棌" }, + + { value: "鍦熷鏃", label: "鍦熷鏃" }, + + { value: "鍝堝凹鏃", label: "鍝堝凹鏃" }, + + { value: "鍝堣惃鍏嬫棌", label: "鍝堣惃鍏嬫棌" }, + + { value: "鍌f棌", label: "鍌f棌" }, + + { value: "榛庢棌", label: "榛庢棌" }, + + { value: "鍌堝兂鏃", label: "鍌堝兂鏃" }, + + { value: "浣ゆ棌", label: "浣ゆ棌" }, + + { value: "鐣叉棌", label: "鐣叉棌" }, + + { value: "楂樺北鏃", label: "楂樺北鏃" }, + + { value: "鎷夌鏃", label: "鎷夌鏃" }, + + { value: "姘存棌", label: "姘存棌" }, + + { value: "涓滀埂鏃", label: "涓滀埂鏃" }, + + { value: "绾宠タ鏃", label: "绾宠タ鏃" }, + + { value: "鏅鏃", label: "鏅鏃" }, + + { value: "鏌皵鍏嬪瓬鏃", label: "鏌皵鍏嬪瓬鏃" }, + + { value: "鍦熸棌", label: "鍦熸棌" }, + + { value: "杈剧堪灏旀棌", label: "杈剧堪灏旀棌" }, + + { value: "涔堜浆鏃", label: "涔堜浆鏃" }, + + { value: "缇屾棌", label: "缇屾棌" }, + + { value: "缇屾棌", label: "缇屾棌" }, + + { value: "鎾掓媺鏃", label: "鎾掓媺鏃" }, + + { value: "姣涘崡鏃", label: "姣涘崡鏃" }, + + { value: "浠′浆鏃", label: "浠′浆鏃" }, + + { value: "閿′集鏃", label: "閿′集鏃" }, + + { value: "闃挎槍鏃", label: "闃挎槍鏃" }, + + { value: "鏅背鏃", label: "鏅背鏃" }, + + { value: "濉斿悏鍏嬫棌", label: "濉斿悏鍏嬫棌" }, + + { value: "鎬掓棌", label: "鎬掓棌" }, + + { value: "涔屽瓬鍒厠鏃", label: "涔屽瓬鍒厠鏃" }, + + { value: "淇勭綏鏂棌", label: "淇勭綏鏂棌" }, + + { value: "閯傛俯鍏嬫棌", label: "閯傛俯鍏嬫棌" }, + + { value: "寰锋槀鏃", label: "寰锋槀鏃" }, + + { value: "淇濆畨鏃", label: "淇濆畨鏃" }, + + { value: "瑁曞浐鏃", label: "瑁曞浐鏃" }, + + { value: "浜棌", label: "浜棌" }, + + { value: "濉斿灏旀棌", label: "濉斿灏旀棌" }, + + { value: "鐙緳鏃", label: "鐙緳鏃" }, + + { value: "閯備鸡鏄ユ棌", label: "閯備鸡鏄ユ棌" }, + + { value: "璧摬鏃", label: "璧摬鏃" }, + + { value: "闂ㄥ反鏃", label: "闂ㄥ反鏃" }, + + { value: "鐝炲反鏃", label: "鐝炲反鏃" }, + + { value: "鍩鸿鏃", label: "鍩鸿鏃" }, +]; diff --git a/ruoyi-ui/src/api/system/config.js b/ruoyi-ui/src/api/system/config.js new file mode 100644 index 0000000000000000000000000000000000000000..a404d8254eaf08feb6b791b66c365b07662bf777 --- /dev/null +++ b/ruoyi-ui/src/api/system/config.js @@ -0,0 +1,60 @@ +import request from '@/utils/request' + +// 鏌ヨ鍙傛暟鍒楄〃 +export function listConfig(query) { + return request({ + url: '/system/config/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鍙傛暟璇︾粏 +export function getConfig(configId) { + return request({ + url: '/system/config/' + configId, + method: 'get' + }) +} + +// 鏍规嵁鍙傛暟閿悕鏌ヨ鍙傛暟鍊 +export function getConfigKey(configKey) { + return request({ + url: '/system/config/configKey/' + configKey, + method: 'get' + }) +} + +// 鏂板鍙傛暟閰嶇疆 +export function addConfig(data) { + return request({ + url: '/system/config', + method: 'post', + data: data + }) +} + +// 淇敼鍙傛暟閰嶇疆 +export function updateConfig(data) { + return request({ + url: '/system/config', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鍙傛暟閰嶇疆 +export function delConfig(configId) { + return request({ + url: '/system/config/' + configId, + method: 'delete' + }) +} + +// 鍒锋柊鍙傛暟缂撳瓨 +export function refreshCache() { + return request({ + url: '/system/config/refreshCache', + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/system/dept.js b/ruoyi-ui/src/api/system/dept.js new file mode 100644 index 0000000000000000000000000000000000000000..fc943cd41fe7ae4e1274f9d9f28bcb9219c39eb8 --- /dev/null +++ b/ruoyi-ui/src/api/system/dept.js @@ -0,0 +1,52 @@ +import request from '@/utils/request' + +// 鏌ヨ閮ㄩ棬鍒楄〃 +export function listDept(query) { + return request({ + url: '/system/dept/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ閮ㄩ棬鍒楄〃锛堟帓闄よ妭鐐癸級 +export function listDeptExcludeChild(deptId) { + return request({ + url: '/system/dept/list/exclude/' + deptId, + method: 'get' + }) +} + +// 鏌ヨ閮ㄩ棬璇︾粏 +export function getDept(deptId) { + return request({ + url: '/system/dept/' + deptId, + method: 'get' + }) +} + +// 鏂板閮ㄩ棬 +export function addDept(data) { + return request({ + url: '/system/dept', + method: 'post', + data: data + }) +} + +// 淇敼閮ㄩ棬 +export function updateDept(data) { + return request({ + url: '/system/dept', + method: 'put', + data: data + }) +} + +// 鍒犻櫎閮ㄩ棬 +export function delDept(deptId) { + return request({ + url: '/system/dept/' + deptId, + method: 'delete' + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/system/dict/data.js b/ruoyi-ui/src/api/system/dict/data.js new file mode 100644 index 0000000000000000000000000000000000000000..6c9eb79b4d98af0a82361826dd078abfa8e02c98 --- /dev/null +++ b/ruoyi-ui/src/api/system/dict/data.js @@ -0,0 +1,52 @@ +import request from '@/utils/request' + +// 鏌ヨ瀛楀吀鏁版嵁鍒楄〃 +export function listData(query) { + return request({ + url: '/system/dict/data/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ瀛楀吀鏁版嵁璇︾粏 +export function getData(dictCode) { + return request({ + url: '/system/dict/data/' + dictCode, + method: 'get' + }) +} + +// 鏍规嵁瀛楀吀绫诲瀷鏌ヨ瀛楀吀鏁版嵁淇℃伅 +export function getDicts(dictType) { + return request({ + url: '/system/dict/data/type/' + dictType, + method: 'get' + }) +} + +// 鏂板瀛楀吀鏁版嵁 +export function addData(data) { + return request({ + url: '/system/dict/data', + method: 'post', + data: data + }) +} + +// 淇敼瀛楀吀鏁版嵁 +export function updateData(data) { + return request({ + url: '/system/dict/data', + method: 'put', + data: data + }) +} + +// 鍒犻櫎瀛楀吀鏁版嵁 +export function delData(dictCode) { + return request({ + url: '/system/dict/data/' + dictCode, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/system/dict/type.js b/ruoyi-ui/src/api/system/dict/type.js new file mode 100644 index 0000000000000000000000000000000000000000..a7a6e01fcb3e1085b6e96a76bee14a90e110e48e --- /dev/null +++ b/ruoyi-ui/src/api/system/dict/type.js @@ -0,0 +1,60 @@ +import request from '@/utils/request' + +// 鏌ヨ瀛楀吀绫诲瀷鍒楄〃 +export function listType(query) { + return request({ + url: '/system/dict/type/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ瀛楀吀绫诲瀷璇︾粏 +export function getType(dictId) { + return request({ + url: '/system/dict/type/' + dictId, + method: 'get' + }) +} + +// 鏂板瀛楀吀绫诲瀷 +export function addType(data) { + return request({ + url: '/system/dict/type', + method: 'post', + data: data + }) +} + +// 淇敼瀛楀吀绫诲瀷 +export function updateType(data) { + return request({ + url: '/system/dict/type', + method: 'put', + data: data + }) +} + +// 鍒犻櫎瀛楀吀绫诲瀷 +export function delType(dictId) { + return request({ + url: '/system/dict/type/' + dictId, + method: 'delete' + }) +} + +// 鍒锋柊瀛楀吀缂撳瓨 +export function refreshCache() { + return request({ + url: '/system/dict/type/refreshCache', + method: 'delete' + }) +} + +// 鑾峰彇瀛楀吀閫夋嫨妗嗗垪琛 +export function optionselect() { + return request({ + url: '/system/dict/type/optionselect', + method: 'get' + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/system/menu.js b/ruoyi-ui/src/api/system/menu.js new file mode 100644 index 0000000000000000000000000000000000000000..f6415c65604a27f6487f89133267c7dcf6895d30 --- /dev/null +++ b/ruoyi-ui/src/api/system/menu.js @@ -0,0 +1,60 @@ +import request from '@/utils/request' + +// 鏌ヨ鑿滃崟鍒楄〃 +export function listMenu(query) { + return request({ + url: '/system/menu/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鑿滃崟璇︾粏 +export function getMenu(menuId) { + return request({ + url: '/system/menu/' + menuId, + method: 'get' + }) +} + +// 鏌ヨ鑿滃崟涓嬫媺鏍戠粨鏋 +export function treeselect() { + return request({ + url: '/system/menu/treeselect', + method: 'get' + }) +} + +// 鏍规嵁瑙掕壊ID鏌ヨ鑿滃崟涓嬫媺鏍戠粨鏋 +export function roleMenuTreeselect(roleId) { + return request({ + url: '/system/menu/roleMenuTreeselect/' + roleId, + method: 'get' + }) +} + +// 鏂板鑿滃崟 +export function addMenu(data) { + return request({ + url: '/system/menu', + method: 'post', + data: data + }) +} + +// 淇敼鑿滃崟 +export function updateMenu(data) { + return request({ + url: '/system/menu', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鑿滃崟 +export function delMenu(menuId) { + return request({ + url: '/system/menu/' + menuId, + method: 'delete' + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/system/notice.js b/ruoyi-ui/src/api/system/notice.js new file mode 100644 index 0000000000000000000000000000000000000000..c274ea5bae6f8de003befa266d9f7e0bf0f901b1 --- /dev/null +++ b/ruoyi-ui/src/api/system/notice.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ鍏憡鍒楄〃 +export function listNotice(query) { + return request({ + url: '/system/notice/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鍏憡璇︾粏 +export function getNotice(noticeId) { + return request({ + url: '/system/notice/' + noticeId, + method: 'get' + }) +} + +// 鏂板鍏憡 +export function addNotice(data) { + return request({ + url: '/system/notice', + method: 'post', + data: data + }) +} + +// 淇敼鍏憡 +export function updateNotice(data) { + return request({ + url: '/system/notice', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鍏憡 +export function delNotice(noticeId) { + return request({ + url: '/system/notice/' + noticeId, + method: 'delete' + }) +} \ No newline at end of file diff --git a/ruoyi-ui/src/api/system/post.js b/ruoyi-ui/src/api/system/post.js new file mode 100644 index 0000000000000000000000000000000000000000..1a8e9ca048f5c666506eb37479d180501316d6c8 --- /dev/null +++ b/ruoyi-ui/src/api/system/post.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 鏌ヨ宀椾綅鍒楄〃 +export function listPost(query) { + return request({ + url: '/system/post/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ宀椾綅璇︾粏 +export function getPost(postId) { + return request({ + url: '/system/post/' + postId, + method: 'get' + }) +} + +// 鏂板宀椾綅 +export function addPost(data) { + return request({ + url: '/system/post', + method: 'post', + data: data + }) +} + +// 淇敼宀椾綅 +export function updatePost(data) { + return request({ + url: '/system/post', + method: 'put', + data: data + }) +} + +// 鍒犻櫎宀椾綅 +export function delPost(postId) { + return request({ + url: '/system/post/' + postId, + method: 'delete' + }) +} diff --git a/ruoyi-ui/src/api/system/role.js b/ruoyi-ui/src/api/system/role.js new file mode 100644 index 0000000000000000000000000000000000000000..f13e6f4044c9285063a14dbf8190452beeac237a --- /dev/null +++ b/ruoyi-ui/src/api/system/role.js @@ -0,0 +1,119 @@ +import request from '@/utils/request' + +// 鏌ヨ瑙掕壊鍒楄〃 +export function listRole(query) { + return request({ + url: '/system/role/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ瑙掕壊璇︾粏 +export function getRole(roleId) { + return request({ + url: '/system/role/' + roleId, + method: 'get' + }) +} + +// 鏂板瑙掕壊 +export function addRole(data) { + return request({ + url: '/system/role', + method: 'post', + data: data + }) +} + +// 淇敼瑙掕壊 +export function updateRole(data) { + return request({ + url: '/system/role', + method: 'put', + data: data + }) +} + +// 瑙掕壊鏁版嵁鏉冮檺 +export function dataScope(data) { + return request({ + url: '/system/role/dataScope', + method: 'put', + data: data + }) +} + +// 瑙掕壊鐘舵佷慨鏀 +export function changeRoleStatus(roleId, status) { + const data = { + roleId, + status + } + return request({ + url: '/system/role/changeStatus', + method: 'put', + data: data + }) +} + +// 鍒犻櫎瑙掕壊 +export function delRole(roleId) { + return request({ + url: '/system/role/' + roleId, + method: 'delete' + }) +} + +// 鏌ヨ瑙掕壊宸叉巿鏉冪敤鎴峰垪琛 +export function allocatedUserList(query) { + return request({ + url: '/system/role/authUser/allocatedList', + method: 'get', + params: query + }) +} + +// 鏌ヨ瑙掕壊鏈巿鏉冪敤鎴峰垪琛 +export function unallocatedUserList(query) { + return request({ + url: '/system/role/authUser/unallocatedList', + method: 'get', + params: query + }) +} + +// 鍙栨秷鐢ㄦ埛鎺堟潈瑙掕壊 +export function authUserCancel(data) { + return request({ + url: '/system/role/authUser/cancel', + method: 'put', + data: data + }) +} + +// 鎵归噺鍙栨秷鐢ㄦ埛鎺堟潈瑙掕壊 +export function authUserCancelAll(data) { + return request({ + url: '/system/role/authUser/cancelAll', + method: 'put', + params: data + }) +} + +// 鎺堟潈鐢ㄦ埛閫夋嫨 +export function authUserSelectAll(data) { + return request({ + url: '/system/role/authUser/selectAll', + method: 'put', + params: data + }) +} + +// 鏍规嵁瑙掕壊ID鏌ヨ閮ㄩ棬鏍戠粨鏋 +export function deptTreeSelect(roleId) { + return request({ + url: '/system/role/deptTree/' + roleId, + method: 'get' + }) +} diff --git a/ruoyi-ui/src/api/system/user.js b/ruoyi-ui/src/api/system/user.js new file mode 100644 index 0000000000000000000000000000000000000000..9b0211a5fe3db21e68c659a9e9c0dfd539b677a7 --- /dev/null +++ b/ruoyi-ui/src/api/system/user.js @@ -0,0 +1,136 @@ +import request from '@/utils/request' +import { parseStrEmpty } from "@/utils/ruoyi"; + +// 鏌ヨ鐢ㄦ埛鍒楄〃 +export function listUser(query) { + return request({ + url: '/system/user/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ鐢ㄦ埛璇︾粏 +export function getUser(userId) { + return request({ + url: '/system/user/' + parseStrEmpty(userId), + method: 'get' + }) +} + +// 鏂板鐢ㄦ埛 +export function addUser(data) { + return request({ + url: '/system/user', + method: 'post', + data: data + }) +} + +// 淇敼鐢ㄦ埛 +export function updateUser(data) { + return request({ + url: '/system/user', + method: 'put', + data: data + }) +} + +// 鍒犻櫎鐢ㄦ埛 +export function delUser(userId) { + return request({ + url: '/system/user/' + userId, + method: 'delete' + }) +} + +// 鐢ㄦ埛瀵嗙爜閲嶇疆 +export function resetUserPwd(userId, password) { + const data = { + userId, + password + } + return request({ + url: '/system/user/resetPwd', + method: 'put', + data: data + }) +} + +// 鐢ㄦ埛鐘舵佷慨鏀 +export function changeUserStatus(userId, status) { + const data = { + userId, + status + } + return request({ + url: '/system/user/changeStatus', + method: 'put', + data: data + }) +} + +// 鏌ヨ鐢ㄦ埛涓汉淇℃伅 +export function getUserProfile() { + return request({ + url: '/system/user/profile', + method: 'get' + }) +} + +// 淇敼鐢ㄦ埛涓汉淇℃伅 +export function updateUserProfile(data) { + return request({ + url: '/system/user/profile', + method: 'put', + data: data + }) +} + +// 鐢ㄦ埛瀵嗙爜閲嶇疆 +export function updateUserPwd(oldPassword, newPassword) { + const data = { + oldPassword, + newPassword + } + return request({ + url: '/system/user/profile/updatePwd', + method: 'put', + params: data + }) +} + +// 鐢ㄦ埛澶村儚涓婁紶 +export function uploadAvatar(data) { + return request({ + url: '/system/user/profile/avatar', + method: 'post', + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + data: data + }) +} + +// 鏌ヨ鎺堟潈瑙掕壊 +export function getAuthRole(userId) { + return request({ + url: '/system/user/authRole/' + userId, + method: 'get' + }) +} + +// 淇濆瓨鎺堟潈瑙掕壊 +export function updateAuthRole(data) { + return request({ + url: '/system/user/authRole', + method: 'put', + params: data + }) +} + +// 鏌ヨ閮ㄩ棬涓嬫媺鏍戠粨鏋 +export function deptTreeSelect() { + return request({ + url: '/system/user/deptTree', + method: 'get' + }) +} diff --git a/ruoyi-ui/src/api/tool/gen.js b/ruoyi-ui/src/api/tool/gen.js new file mode 100644 index 0000000000000000000000000000000000000000..207567727c84718863a22137b1b82e3587664300 --- /dev/null +++ b/ruoyi-ui/src/api/tool/gen.js @@ -0,0 +1,85 @@ +import request from '@/utils/request' + +// 鏌ヨ鐢熸垚琛ㄦ暟鎹 +export function listTable(query) { + return request({ + url: '/tool/gen/list', + method: 'get', + params: query + }) +} +// 鏌ヨdb鏁版嵁搴撳垪琛 +export function listDbTable(query) { + return request({ + url: '/tool/gen/db/list', + method: 'get', + params: query + }) +} + +// 鏌ヨ琛ㄨ缁嗕俊鎭 +export function getGenTable(tableId) { + return request({ + url: '/tool/gen/' + tableId, + method: 'get' + }) +} + +// 淇敼浠g爜鐢熸垚淇℃伅 +export function updateGenTable(data) { + return request({ + url: '/tool/gen', + method: 'put', + data: data + }) +} + +// 瀵煎叆琛 +export function importTable(data) { + return request({ + url: '/tool/gen/importTable', + method: 'post', + params: data + }) +} + +// 鍒涘缓琛 +export function createTable(data) { + return request({ + url: '/tool/gen/createTable', + method: 'post', + params: data + }) +} + +// 棰勮鐢熸垚浠g爜 +export function previewTable(tableId) { + return request({ + url: '/tool/gen/preview/' + tableId, + method: 'get' + }) +} + +// 鍒犻櫎琛ㄦ暟鎹 +export function delTable(tableId) { + return request({ + url: '/tool/gen/' + tableId, + method: 'delete' + }) +} + +// 鐢熸垚浠g爜锛堣嚜瀹氫箟璺緞锛 +export function genCode(tableName) { + return request({ + url: '/tool/gen/genCode/' + tableName, + method: 'get' + }) +} + +// 鍚屾鏁版嵁搴 +export function synchDb(tableName) { + return request({ + url: '/tool/gen/synchDb/' + tableName, + method: 'get' + }) +} diff --git a/ruoyi-ui/src/assets/401_images/401.gif b/ruoyi-ui/src/assets/401_images/401.gif new file mode 100644 index 0000000000000000000000000000000000000000..cd6e0d9433421b3f29d0ec0c40f755e354728000 Binary files /dev/null and b/ruoyi-ui/src/assets/401_images/401.gif differ diff --git a/ruoyi-ui/src/assets/404_images/404.png b/ruoyi-ui/src/assets/404_images/404.png new file mode 100644 index 0000000000000000000000000000000000000000..3d8e2305cc973ad2121403aee4bf08728f76c461 Binary files /dev/null and b/ruoyi-ui/src/assets/404_images/404.png differ diff --git a/ruoyi-ui/src/assets/404_images/404_cloud.png b/ruoyi-ui/src/assets/404_images/404_cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..c6281d09013e0a2c5f8e699a0a6038d9480291e5 Binary files /dev/null and b/ruoyi-ui/src/assets/404_images/404_cloud.png differ diff --git a/ruoyi-ui/src/assets/icons/index.js b/ruoyi-ui/src/assets/icons/index.js new file mode 100644 index 0000000000000000000000000000000000000000..2c6b309c96cc2e43761a691860858f232f6d5d1a --- /dev/null +++ b/ruoyi-ui/src/assets/icons/index.js @@ -0,0 +1,9 @@ +import Vue from 'vue' +import SvgIcon from '@/components/SvgIcon'// svg component + +// register globally +Vue.component('svg-icon', SvgIcon) + +const req = require.context('./svg', false, /\.svg$/) +const requireAll = requireContext => requireContext.keys().map(requireContext) +requireAll(req) diff --git a/ruoyi-ui/src/assets/icons/svg/404.svg b/ruoyi-ui/src/assets/icons/svg/404.svg new file mode 100644 index 0000000000000000000000000000000000000000..6df50190aab43bd3a727b580fe2699ba36a4712c --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/404.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/bug.svg b/ruoyi-ui/src/assets/icons/svg/bug.svg new file mode 100644 index 0000000000000000000000000000000000000000..05a150dc3905ef7516e1b57b32bc49510c0f8763 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/bug.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/build.svg b/ruoyi-ui/src/assets/icons/svg/build.svg new file mode 100644 index 0000000000000000000000000000000000000000..97c468863287f37a472112dd18e717cd94471ee6 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/build.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/button.svg b/ruoyi-ui/src/assets/icons/svg/button.svg new file mode 100644 index 0000000000000000000000000000000000000000..904fddc854ad072e887306b5d6e6539dca960f2b --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/button.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/cascader.svg b/ruoyi-ui/src/assets/icons/svg/cascader.svg new file mode 100644 index 0000000000000000000000000000000000000000..e256024f9dd4142bef13a999df669d88ee9200f4 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/cascader.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/chart.svg b/ruoyi-ui/src/assets/icons/svg/chart.svg new file mode 100644 index 0000000000000000000000000000000000000000..27728fb0baae52c4430ef9d0332d1f0bbedaa564 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/chart.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/checkbox.svg b/ruoyi-ui/src/assets/icons/svg/checkbox.svg new file mode 100644 index 0000000000000000000000000000000000000000..013fd3a273eec2b45ea72843d7b3334c5d750530 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/checkbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/clipboard.svg b/ruoyi-ui/src/assets/icons/svg/clipboard.svg new file mode 100644 index 0000000000000000000000000000000000000000..90923ff6282ec6aa403936bbe44b68e134cb9bcf --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/clipboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/code.svg b/ruoyi-ui/src/assets/icons/svg/code.svg new file mode 100644 index 0000000000000000000000000000000000000000..5f9c5abd596f90c0795cf879df38c82964ddc5ad --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/code.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/color.svg b/ruoyi-ui/src/assets/icons/svg/color.svg new file mode 100644 index 0000000000000000000000000000000000000000..44a81aab1bb9de3907ec9fadaf2d9e616979390f --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/component.svg b/ruoyi-ui/src/assets/icons/svg/component.svg new file mode 100644 index 0000000000000000000000000000000000000000..29c345809974665d96ed42e261734bc56c37b826 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/component.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/dashboard.svg b/ruoyi-ui/src/assets/icons/svg/dashboard.svg new file mode 100644 index 0000000000000000000000000000000000000000..5317d37029218281b4da78eccf40ce9e94941301 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/dashboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/date-range.svg b/ruoyi-ui/src/assets/icons/svg/date-range.svg new file mode 100644 index 0000000000000000000000000000000000000000..fda571e700372418697293910f77957c07290cfe --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/date-range.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/date.svg b/ruoyi-ui/src/assets/icons/svg/date.svg new file mode 100644 index 0000000000000000000000000000000000000000..52dc73eecfaca2c315b54d99ba7030a79e549f36 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/date.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/dict.svg b/ruoyi-ui/src/assets/icons/svg/dict.svg new file mode 100644 index 0000000000000000000000000000000000000000..484937730750b9adb201df69abef2503760f7229 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/dict.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/documentation.svg b/ruoyi-ui/src/assets/icons/svg/documentation.svg new file mode 100644 index 0000000000000000000000000000000000000000..704312289e6ad2f65a3ace229e73fb5c7f3e94e9 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/documentation.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/download.svg b/ruoyi-ui/src/assets/icons/svg/download.svg new file mode 100644 index 0000000000000000000000000000000000000000..c8969513493e7ac96725dcf2f01400e7c2c63df6 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/download.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/drag.svg b/ruoyi-ui/src/assets/icons/svg/drag.svg new file mode 100644 index 0000000000000000000000000000000000000000..4185d3cee36930abb40838829058537388cc6dc6 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/drag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/druid.svg b/ruoyi-ui/src/assets/icons/svg/druid.svg new file mode 100644 index 0000000000000000000000000000000000000000..a2b4b4ed2481975a127506a9516e5c12417ac93e --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/druid.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/edit.svg b/ruoyi-ui/src/assets/icons/svg/edit.svg new file mode 100644 index 0000000000000000000000000000000000000000..d26101f29893ee07c575d62caf1d0d684e76b3bc --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/edit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/education.svg b/ruoyi-ui/src/assets/icons/svg/education.svg new file mode 100644 index 0000000000000000000000000000000000000000..7bfb01d180f9ac9cf45429412129a7b7be4d8daf --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/education.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/email.svg b/ruoyi-ui/src/assets/icons/svg/email.svg new file mode 100644 index 0000000000000000000000000000000000000000..74d25e21a6f98b90b34b2b8d2ce2dd90b38eb000 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/email.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/example.svg b/ruoyi-ui/src/assets/icons/svg/example.svg new file mode 100644 index 0000000000000000000000000000000000000000..46f42b5323d11686c44b573729db0df115343d5c --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/example.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/excel.svg b/ruoyi-ui/src/assets/icons/svg/excel.svg new file mode 100644 index 0000000000000000000000000000000000000000..74d97b802f8bf84caf4c623e77f890f74516d50f --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/excel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/exit-fullscreen.svg b/ruoyi-ui/src/assets/icons/svg/exit-fullscreen.svg new file mode 100644 index 0000000000000000000000000000000000000000..485c128b6133188ae755c275a1c667634e4129b6 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/exit-fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/eye-open.svg b/ruoyi-ui/src/assets/icons/svg/eye-open.svg new file mode 100644 index 0000000000000000000000000000000000000000..88dcc98e6c80d145e3807f00a6e5ed91ce5371e4 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/eye-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/eye.svg b/ruoyi-ui/src/assets/icons/svg/eye.svg new file mode 100644 index 0000000000000000000000000000000000000000..16ed2d872d1cadeb36fc9101cbf77397fbf4fd70 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/eye.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/form.svg b/ruoyi-ui/src/assets/icons/svg/form.svg new file mode 100644 index 0000000000000000000000000000000000000000..dcbaa185a845cdf01a7fdfb849c224ce9c4af011 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/form.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/fullscreen.svg b/ruoyi-ui/src/assets/icons/svg/fullscreen.svg new file mode 100644 index 0000000000000000000000000000000000000000..0e86b6fa803dbe964cae74f4432622d435b007bf --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/fullscreen.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/github.svg b/ruoyi-ui/src/assets/icons/svg/github.svg new file mode 100644 index 0000000000000000000000000000000000000000..db0a0d4304731d60794b853cd8c06f4556fc95e9 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/guide.svg b/ruoyi-ui/src/assets/icons/svg/guide.svg new file mode 100644 index 0000000000000000000000000000000000000000..b2710017933e9088e002873cde651bac54cea449 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/guide.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/icon.svg b/ruoyi-ui/src/assets/icons/svg/icon.svg new file mode 100644 index 0000000000000000000000000000000000000000..82be8eeedb3d3cc9161f4a4094ac20d2f91e3970 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/input.svg b/ruoyi-ui/src/assets/icons/svg/input.svg new file mode 100644 index 0000000000000000000000000000000000000000..ab91381e6df0ec6307d677f0dce75b9c9d95e5d5 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/input.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/international.svg b/ruoyi-ui/src/assets/icons/svg/international.svg new file mode 100644 index 0000000000000000000000000000000000000000..e9b56eee2c59774f0431186b9af2ba7593bffcc0 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/international.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/job.svg b/ruoyi-ui/src/assets/icons/svg/job.svg new file mode 100644 index 0000000000000000000000000000000000000000..2a93a25195e29eba9c76d7ce5bdd6f1a71f9aee4 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/job.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/language.svg b/ruoyi-ui/src/assets/icons/svg/language.svg new file mode 100644 index 0000000000000000000000000000000000000000..0082b577ab28523f353fa71c00cb338446b2bb9c --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/language.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/link.svg b/ruoyi-ui/src/assets/icons/svg/link.svg new file mode 100644 index 0000000000000000000000000000000000000000..48197ba4da7b4314a16a19a698fe96c1b2a7ad0b --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/list.svg b/ruoyi-ui/src/assets/icons/svg/list.svg new file mode 100644 index 0000000000000000000000000000000000000000..20259eddb7c0cf77efe9cb1c561d2df8961094f5 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/list.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/lock.svg b/ruoyi-ui/src/assets/icons/svg/lock.svg new file mode 100644 index 0000000000000000000000000000000000000000..74fee543dd1d9bc0ceb3310cc87bf65e268bf364 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/lock.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/log.svg b/ruoyi-ui/src/assets/icons/svg/log.svg new file mode 100644 index 0000000000000000000000000000000000000000..d879d33b6cd96ae370e104d58589915441e1bcb3 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/log.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/logininfor.svg b/ruoyi-ui/src/assets/icons/svg/logininfor.svg new file mode 100644 index 0000000000000000000000000000000000000000..267f84474266c8ebe6ae61925a7c1cb4e3814079 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/logininfor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/message.svg b/ruoyi-ui/src/assets/icons/svg/message.svg new file mode 100644 index 0000000000000000000000000000000000000000..14ca81728a3de16e103a858b4ce31f8e0f550bce --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/message.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/money.svg b/ruoyi-ui/src/assets/icons/svg/money.svg new file mode 100644 index 0000000000000000000000000000000000000000..c1580de10e1f1c504f7bfcaba4f41b24d816d8f2 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/money.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/monitor.svg b/ruoyi-ui/src/assets/icons/svg/monitor.svg new file mode 100644 index 0000000000000000000000000000000000000000..bc308cb0f5f7afff5ba4b17fca06c721de14764e --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/monitor.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/nested.svg b/ruoyi-ui/src/assets/icons/svg/nested.svg new file mode 100644 index 0000000000000000000000000000000000000000..06713a86c6a3db0cd5eeb26cf81ffb27b538e9a1 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/nested.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/number.svg b/ruoyi-ui/src/assets/icons/svg/number.svg new file mode 100644 index 0000000000000000000000000000000000000000..ad5ce9af2aaf54c43444a81535a599c7cd004be1 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/number.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/online.svg b/ruoyi-ui/src/assets/icons/svg/online.svg new file mode 100644 index 0000000000000000000000000000000000000000..330a202935b887236b34200b163f6a421bad592f --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/online.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/password.svg b/ruoyi-ui/src/assets/icons/svg/password.svg new file mode 100644 index 0000000000000000000000000000000000000000..6c64defe396d998bc5c995d79b661b11411cced1 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/password.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/pdf.svg b/ruoyi-ui/src/assets/icons/svg/pdf.svg new file mode 100644 index 0000000000000000000000000000000000000000..957aa0cc3597c1277ded6367716067c9874552e0 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/pdf.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/people.svg b/ruoyi-ui/src/assets/icons/svg/people.svg new file mode 100644 index 0000000000000000000000000000000000000000..2bd54aeb728197066e987e8d8d98364f50ed5be6 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/people.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/peoples.svg b/ruoyi-ui/src/assets/icons/svg/peoples.svg new file mode 100644 index 0000000000000000000000000000000000000000..aab852e52a33a5823fcdd5302111b45f4a4e13a7 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/peoples.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/phone.svg b/ruoyi-ui/src/assets/icons/svg/phone.svg new file mode 100644 index 0000000000000000000000000000000000000000..ab8e8c4e5b3765c92e98fd2ecfeeda892661ac17 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/phone.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/post.svg b/ruoyi-ui/src/assets/icons/svg/post.svg new file mode 100644 index 0000000000000000000000000000000000000000..2922c613bddb847c6f411e27b5ad874f577a633f --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/post.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/qq.svg b/ruoyi-ui/src/assets/icons/svg/qq.svg new file mode 100644 index 0000000000000000000000000000000000000000..ee13d4ec2e54dbbe64009db689c502b05629721a --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/qq.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/question.svg b/ruoyi-ui/src/assets/icons/svg/question.svg new file mode 100644 index 0000000000000000000000000000000000000000..cf75bd4bea55c98003ca97828fcb3e37d5c4450e --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/question.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/radio.svg b/ruoyi-ui/src/assets/icons/svg/radio.svg new file mode 100644 index 0000000000000000000000000000000000000000..0cde34521ae7b5bddaaa2372a4472fc05f9135a4 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/radio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/rate.svg b/ruoyi-ui/src/assets/icons/svg/rate.svg new file mode 100644 index 0000000000000000000000000000000000000000..aa3b14d7de73af3e7d4a6c9dc41836a11003208e --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/rate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/redis-list.svg b/ruoyi-ui/src/assets/icons/svg/redis-list.svg new file mode 100644 index 0000000000000000000000000000000000000000..98a15b2a6fbfafd2e689f97a7048b6a9bf7bddc4 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/redis-list.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/redis.svg b/ruoyi-ui/src/assets/icons/svg/redis.svg new file mode 100644 index 0000000000000000000000000000000000000000..2f1d62dfc373a4921815fa1058c73916ca15aca2 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/redis.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/row.svg b/ruoyi-ui/src/assets/icons/svg/row.svg new file mode 100644 index 0000000000000000000000000000000000000000..07809922264539672115e4866d65c3e1e6032df9 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/row.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/search.svg b/ruoyi-ui/src/assets/icons/svg/search.svg new file mode 100644 index 0000000000000000000000000000000000000000..84233ddaa98a45d407cacdc869d9b7634f72d390 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/search.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/select.svg b/ruoyi-ui/src/assets/icons/svg/select.svg new file mode 100644 index 0000000000000000000000000000000000000000..d6283828bac413d2a10d4f6e267d7ba2f5f10aea --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/select.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/server.svg b/ruoyi-ui/src/assets/icons/svg/server.svg new file mode 100644 index 0000000000000000000000000000000000000000..eb287e36c30d75f3899cab00d9ca3cce9ff0d2d4 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/server.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/shopping.svg b/ruoyi-ui/src/assets/icons/svg/shopping.svg new file mode 100644 index 0000000000000000000000000000000000000000..87513e7c5fdd4260e48f7ead3501e0b9f9798c2a --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/shopping.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/size.svg b/ruoyi-ui/src/assets/icons/svg/size.svg new file mode 100644 index 0000000000000000000000000000000000000000..ddb25b8d58c52f1f0323483b1cbfd7a113512e0d --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/size.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/skill.svg b/ruoyi-ui/src/assets/icons/svg/skill.svg new file mode 100644 index 0000000000000000000000000000000000000000..a3b7312186fbd305a0c0ab902e2cc01e2f804f32 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/skill.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/slider.svg b/ruoyi-ui/src/assets/icons/svg/slider.svg new file mode 100644 index 0000000000000000000000000000000000000000..fbe4f39f004ef8415e039234eaf4bf11b4d9985a --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/slider.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/star.svg b/ruoyi-ui/src/assets/icons/svg/star.svg new file mode 100644 index 0000000000000000000000000000000000000000..6cf86e66add37b5562fc4793dd9a218163f485b4 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/star.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/swagger.svg b/ruoyi-ui/src/assets/icons/svg/swagger.svg new file mode 100644 index 0000000000000000000000000000000000000000..05d4e7bcee9829539a977c51c36560c4aad98c80 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/swagger.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/switch.svg b/ruoyi-ui/src/assets/icons/svg/switch.svg new file mode 100644 index 0000000000000000000000000000000000000000..0ba61e38d72b9af4c6e5a400baa0561f06d8d0c0 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/switch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/system.svg b/ruoyi-ui/src/assets/icons/svg/system.svg new file mode 100644 index 0000000000000000000000000000000000000000..5992593e091dd578a966a096d5036ae7b8da7993 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/system.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/tab.svg b/ruoyi-ui/src/assets/icons/svg/tab.svg new file mode 100644 index 0000000000000000000000000000000000000000..b4b48e48085bb21b18da5386a6d4692a70301977 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/tab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/table.svg b/ruoyi-ui/src/assets/icons/svg/table.svg new file mode 100644 index 0000000000000000000000000000000000000000..0e3dc9dea5a0ff92d617cdfee4f10ef600a02433 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/textarea.svg b/ruoyi-ui/src/assets/icons/svg/textarea.svg new file mode 100644 index 0000000000000000000000000000000000000000..2709f292ea23aa87ba87d5ee2622c94994c1fbfb --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/textarea.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/theme.svg b/ruoyi-ui/src/assets/icons/svg/theme.svg new file mode 100644 index 0000000000000000000000000000000000000000..5982a2f784052994f07138239eae96d8024531e9 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/theme.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/time-range.svg b/ruoyi-ui/src/assets/icons/svg/time-range.svg new file mode 100644 index 0000000000000000000000000000000000000000..13c1202bdafa11c73c89ee472f3c810e834dfeca --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/time-range.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/time.svg b/ruoyi-ui/src/assets/icons/svg/time.svg new file mode 100644 index 0000000000000000000000000000000000000000..b376e32a608f33f906cda57da3df809c0413a44e --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/time.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/tool.svg b/ruoyi-ui/src/assets/icons/svg/tool.svg new file mode 100644 index 0000000000000000000000000000000000000000..48e0e35738cb59eb0f19fc2878544b698ae9ad64 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/tool.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/tree-table.svg b/ruoyi-ui/src/assets/icons/svg/tree-table.svg new file mode 100644 index 0000000000000000000000000000000000000000..8aafdb829ebbe289f352a533d9764c4f9395e533 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/tree-table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/tree.svg b/ruoyi-ui/src/assets/icons/svg/tree.svg new file mode 100644 index 0000000000000000000000000000000000000000..dd4b7dd22fe06076831935066592caec48e323b0 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/tree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/upload.svg b/ruoyi-ui/src/assets/icons/svg/upload.svg new file mode 100644 index 0000000000000000000000000000000000000000..bae49c0a50e7bc0683d82e3af2e0064adc4108ad --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/upload.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/user.svg b/ruoyi-ui/src/assets/icons/svg/user.svg new file mode 100644 index 0000000000000000000000000000000000000000..0ba0716a62a92f7cb2f2e6f3c745ace2be6b3b31 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/validCode.svg b/ruoyi-ui/src/assets/icons/svg/validCode.svg new file mode 100644 index 0000000000000000000000000000000000000000..cfb10214c53ee9e021a97733c9b5b5c39e388787 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/validCode.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/wechat.svg b/ruoyi-ui/src/assets/icons/svg/wechat.svg new file mode 100644 index 0000000000000000000000000000000000000000..c586e5511722843f9c741d7530db146dfab864a4 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/wechat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svg/zip.svg b/ruoyi-ui/src/assets/icons/svg/zip.svg new file mode 100644 index 0000000000000000000000000000000000000000..f806fc4825739224caf820e6edf54e808961b1a6 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svg/zip.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/icons/svgo.yml b/ruoyi-ui/src/assets/icons/svgo.yml new file mode 100644 index 0000000000000000000000000000000000000000..d11906aec26dd14372dd1b298f72270c38cce1b7 --- /dev/null +++ b/ruoyi-ui/src/assets/icons/svgo.yml @@ -0,0 +1,22 @@ +# replace default config + +# multipass: true +# full: true + +plugins: + + # - name + # + # or: + # - name: false + # - name: true + # + # or: + # - name: + # param1: 1 + # param2: 2 + +- removeAttrs: + attrs: + - 'fill' + - 'fill-rule' diff --git a/ruoyi-ui/src/assets/images/dark.svg b/ruoyi-ui/src/assets/images/dark.svg new file mode 100644 index 0000000000000000000000000000000000000000..f646bd7ea2c452c81afa15ae2e2693cda6ffbc28 --- /dev/null +++ b/ruoyi-ui/src/assets/images/dark.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/images/light.svg b/ruoyi-ui/src/assets/images/light.svg new file mode 100644 index 0000000000000000000000000000000000000000..ab7cc088fac34b349141bba5eeeed5cf68922667 --- /dev/null +++ b/ruoyi-ui/src/assets/images/light.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ruoyi-ui/src/assets/images/login-background.jpg b/ruoyi-ui/src/assets/images/login-background.jpg new file mode 100644 index 0000000000000000000000000000000000000000..538d417caff9589813440cb8c3b74c7227f816bd Binary files /dev/null and b/ruoyi-ui/src/assets/images/login-background.jpg differ diff --git a/ruoyi-ui/src/assets/images/login_bc.jpg b/ruoyi-ui/src/assets/images/login_bc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..295b1702b27dc19c910c090ad34b0a1b349a2e07 Binary files /dev/null and b/ruoyi-ui/src/assets/images/login_bc.jpg differ diff --git a/ruoyi-ui/src/assets/images/pay.png b/ruoyi-ui/src/assets/images/pay.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8b9672381a3e4119fcd33e6ddc21973672e273 Binary files /dev/null and b/ruoyi-ui/src/assets/images/pay.png differ diff --git a/ruoyi-ui/src/assets/images/profile.jpg b/ruoyi-ui/src/assets/images/profile.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b3a940b21cc9dcea01e62d94e243eebcf76d96bc Binary files /dev/null and b/ruoyi-ui/src/assets/images/profile.jpg differ diff --git a/ruoyi-ui/src/assets/images/welcome.png b/ruoyi-ui/src/assets/images/welcome.png new file mode 100644 index 0000000000000000000000000000000000000000..7a305072799b27c0be8fcc998fe35d9665614abe Binary files /dev/null and b/ruoyi-ui/src/assets/images/welcome.png differ diff --git a/ruoyi-ui/src/assets/logo/left_logo.png b/ruoyi-ui/src/assets/logo/left_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a0875d962a07dc04dd7b0f8789d0d8ee0faf4ff5 Binary files /dev/null and b/ruoyi-ui/src/assets/logo/left_logo.png differ diff --git a/ruoyi-ui/src/assets/logo/logo.png b/ruoyi-ui/src/assets/logo/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..05092a2577e11f32c9620d245eeed5c856353f3d Binary files /dev/null and b/ruoyi-ui/src/assets/logo/logo.png differ diff --git a/ruoyi-ui/src/assets/styles/btn.scss b/ruoyi-ui/src/assets/styles/btn.scss new file mode 100644 index 0000000000000000000000000000000000000000..e6ba1a8e197532a3435f0d028717b21fc2c30c9f --- /dev/null +++ b/ruoyi-ui/src/assets/styles/btn.scss @@ -0,0 +1,99 @@ +@import './variables.scss'; + +@mixin colorBtn($color) { + background: $color; + + &:hover { + color: $color; + + &:before, + &:after { + background: $color; + } + } +} + +.blue-btn { + @include colorBtn($blue) +} + +.light-blue-btn { + @include colorBtn($light-blue) +} + +.red-btn { + @include colorBtn($red) +} + +.pink-btn { + @include colorBtn($pink) +} + +.green-btn { + @include colorBtn($green) +} + +.tiffany-btn { + @include colorBtn($tiffany) +} + +.yellow-btn { + @include colorBtn($yellow) +} + +.pan-btn { + font-size: 14px; + color: #fff; + padding: 14px 36px; + border-radius: 8px; + border: none; + outline: none; + transition: 600ms ease all; + position: relative; + display: inline-block; + + &:hover { + background: #fff; + + &:before, + &:after { + width: 100%; + transition: 600ms ease all; + } + } + + &:before, + &:after { + content: ''; + position: absolute; + top: 0; + right: 0; + height: 2px; + width: 0; + transition: 400ms ease all; + } + + &::after { + right: inherit; + top: inherit; + left: 0; + bottom: 0; + } +} + +.custom-button { + display: inline-block; + line-height: 1; + white-space: nowrap; + cursor: pointer; + background: #fff; + color: #fff; + -webkit-appearance: none; + text-align: center; + box-sizing: border-box; + outline: 0; + margin: 0; + padding: 10px 15px; + font-size: 14px; + border-radius: 4px; +} diff --git a/ruoyi-ui/src/assets/styles/element-ui.scss b/ruoyi-ui/src/assets/styles/element-ui.scss new file mode 100644 index 0000000000000000000000000000000000000000..363092a63eecc5111160e681b2ced42af8ba30aa --- /dev/null +++ b/ruoyi-ui/src/assets/styles/element-ui.scss @@ -0,0 +1,92 @@ +// cover some element-ui styles + +.el-breadcrumb__inner, +.el-breadcrumb__inner a { + font-weight: 400 !important; +} + +.el-upload { + input[type="file"] { + display: none !important; + } +} + +.el-upload__input { + display: none; +} + +.cell { + .el-tag { + margin-right: 0px; + } +} + +.small-padding { + .cell { + padding-left: 5px; + padding-right: 5px; + } +} + +.fixed-width { + .el-button--mini { + padding: 7px 10px; + width: 60px; + } +} + +.status-col { + .cell { + padding: 0 10px; + text-align: center; + + .el-tag { + margin-right: 0px; + } + } +} + +// to fixed https://github.com/ElemeFE/element/issues/2461 +.el-dialog { + transform: none; + left: 0; + position: relative; + margin: 0 auto; +} + +// refine element ui upload +.upload-container { + .el-upload { + width: 100%; + + .el-upload-dragger { + width: 100%; + height: 200px; + } + } +} + +// dropdown +.el-dropdown-menu { + a { + display: block + } +} + +// fix date-picker ui bug in filter-item +.el-range-editor.el-input__inner { + display: inline-flex !important; +} + +// to fix el-date-picker css style +.el-range-separator { + box-sizing: content-box; +} + +.el-menu--collapse + > div + > .el-submenu + > .el-submenu__title + .el-submenu__icon-arrow { + display: none; +} \ No newline at end of file diff --git a/ruoyi-ui/src/assets/styles/element-variables.scss b/ruoyi-ui/src/assets/styles/element-variables.scss new file mode 100644 index 0000000000000000000000000000000000000000..1615ff28926da47f0ec78487e51dc891a549ae23 --- /dev/null +++ b/ruoyi-ui/src/assets/styles/element-variables.scss @@ -0,0 +1,31 @@ +/** +* I think element-ui's default theme color is too light for long-term use. +* So I modified the default color and you can modify it to your liking. +**/ + +/* theme color */ +$--color-primary: #1890ff; +$--color-success: #13ce66; +$--color-warning: #ffba00; +$--color-danger: #ff4949; +// $--color-info: #1E1E1E; + +$--button-font-weight: 400; + +// $--color-text-regular: #1f2d3d; + +$--border-color-light: #dfe4ed; +$--border-color-lighter: #e6ebf5; + +$--table-border: 1px solid #dfe6ec; + +/* icon font path, required */ +$--font-path: '~element-ui/lib/theme-chalk/fonts'; + +@import "~element-ui/packages/theme-chalk/src/index"; + +// the :export directive is the magic sauce for webpack +// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass +:export { + theme: $--color-primary; +} diff --git a/ruoyi-ui/src/assets/styles/index.scss b/ruoyi-ui/src/assets/styles/index.scss new file mode 100644 index 0000000000000000000000000000000000000000..2f3b9ef9c3d69628cdefc69f63b9ff30a70dddd3 --- /dev/null +++ b/ruoyi-ui/src/assets/styles/index.scss @@ -0,0 +1,182 @@ +@import './variables.scss'; +@import './mixin.scss'; +@import './transition.scss'; +@import './element-ui.scss'; +@import './sidebar.scss'; +@import './btn.scss'; + +body { + height: 100%; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; +} + +label { + font-weight: 700; +} + +html { + height: 100%; + box-sizing: border-box; +} + +#app { + height: 100%; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +.no-padding { + padding: 0px !important; +} + +.padding-content { + padding: 4px 0; +} + +a:focus, +a:active { + outline: none; +} + +a, +a:focus, +a:hover { + cursor: pointer; + color: inherit; + text-decoration: none; +} + +div:focus { + outline: none; +} + +.fr { + float: right; +} + +.fl { + float: left; +} + +.pr-5 { + padding-right: 5px; +} + +.pl-5 { + padding-left: 5px; +} + +.block { + display: block; +} + +.pointer { + cursor: pointer; +} + +.inlineBlock { + display: block; +} + +.clearfix { + &:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; + } +} + +aside { + background: #eef1f6; + padding: 8px 24px; + margin-bottom: 20px; + border-radius: 2px; + display: block; + line-height: 32px; + font-size: 16px; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; + color: #2c3e50; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + a { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } + } +} + +//main-container鍏ㄥ眬鏍峰紡 +.app-container { + padding: 20px; +} + +.components-container { + margin: 30px 50px; + position: relative; +} + +.pagination-container { + margin-top: 30px; +} + +.text-center { + text-align: center +} + +.sub-navbar { + height: 50px; + line-height: 50px; + position: relative; + width: 100%; + text-align: right; + padding-right: 20px; + transition: 600ms ease position; + background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%); + + .subtitle { + font-size: 20px; + color: #fff; + } + + &.draft { + background: #d0d0d0; + } + + &.deleted { + background: #d0d0d0; + } +} + +.link-type, +.link-type:focus { + color: #337ab7; + cursor: pointer; + + &:hover { + color: rgb(32, 160, 255); + } +} + +.filter-container { + padding-bottom: 10px; + + .filter-item { + display: inline-block; + vertical-align: middle; + margin-bottom: 10px; + } +} diff --git a/ruoyi-ui/src/assets/styles/mixin.scss b/ruoyi-ui/src/assets/styles/mixin.scss new file mode 100644 index 0000000000000000000000000000000000000000..06fa06125834695b9ca9b679faaf46c574168c46 --- /dev/null +++ b/ruoyi-ui/src/assets/styles/mixin.scss @@ -0,0 +1,66 @@ +@mixin clearfix { + &:after { + content: ""; + display: table; + clear: both; + } +} + +@mixin scrollBar { + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } +} + +@mixin relative { + position: relative; + width: 100%; + height: 100%; +} + +@mixin pct($pct) { + width: #{$pct}; + position: relative; + margin: 0 auto; +} + +@mixin triangle($width, $height, $color, $direction) { + $width: $width/2; + $color-border-style: $height solid $color; + $transparent-border-style: $width solid transparent; + height: 0; + width: 0; + + @if $direction==up { + border-bottom: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } + + @else if $direction==right { + border-left: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } + + @else if $direction==down { + border-top: $color-border-style; + border-left: $transparent-border-style; + border-right: $transparent-border-style; + } + + @else if $direction==left { + border-right: $color-border-style; + border-top: $transparent-border-style; + border-bottom: $transparent-border-style; + } +} diff --git a/ruoyi-ui/src/assets/styles/ruoyi.scss b/ruoyi-ui/src/assets/styles/ruoyi.scss new file mode 100644 index 0000000000000000000000000000000000000000..4e298744c689179b3f5d173ce5fb00cdd665ff2d --- /dev/null +++ b/ruoyi-ui/src/assets/styles/ruoyi.scss @@ -0,0 +1,291 @@ +/** +* 閫氱敤css鏍峰紡甯冨眬澶勭悊 +* Copyright (c) 2019 ruoyi +*/ + +/** 鍩虹閫氱敤 **/ +.pt5 { + padding-top: 5px; +} + +.pr5 { + padding-right: 5px; +} + +.pb5 { + padding-bottom: 5px; +} + +.mt5 { + margin-top: 5px; +} + +.mr5 { + margin-right: 5px; +} + +.mb5 { + margin-bottom: 5px; +} + +.mb8 { + margin-bottom: 8px; +} + +.ml5 { + margin-left: 5px; +} + +.mt10 { + margin-top: 10px; +} + +.mr10 { + margin-right: 10px; +} + +.mb10 { + margin-bottom: 10px; +} +.ml10 { + margin-left: 10px; +} + +.mt20 { + margin-top: 20px; +} + +.mr20 { + margin-right: 20px; +} + +.mb20 { + margin-bottom: 20px; +} +.ml20 { + margin-left: 20px; +} + +.h1, .h2, .h3, .h4, .h5, .h6, h1, h2, h3, h4, h5, h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} + +.el-message-box__status + .el-message-box__message{ + word-break: break-word; +} + +.el-dialog:not(.is-fullscreen) { + margin-top: 6vh !important; +} + +.el-dialog__wrapper.scrollbar .el-dialog .el-dialog__body { + overflow: auto; + overflow-x: hidden; + max-height: 70vh; + padding: 10px 20px 0; +} + +.el-table { + .el-table__header-wrapper, .el-table__fixed-header-wrapper { + th { + word-break: break-word; + background-color: #f8f8f9; + color: #515a6e; + height: 40px; + font-size: 13px; + } + } + + .el-table__body-wrapper { + .el-button [class*="el-icon-"] + span { + margin-left: 1px; + } + } +} + +/** 琛ㄥ崟甯冨眬 **/ +.form-header { + font-size: 15px; + color: #6379bb; + border-bottom: 1px solid #ddd; + margin: 8px 10px 25px 10px; + padding-bottom: 5px +} + +/** 琛ㄦ牸甯冨眬 **/ +.pagination-container { + position: relative; + height: 25px; + margin-bottom: 10px; + margin-top: 15px; + padding: 10px 20px !important; +} + +/* tree border */ +.tree-border { + margin-top: 5px; + border: 1px solid #e5e6e7; + background: #FFFFFF none; + border-radius: 4px; +} + +.pagination-container .el-pagination { + right: 0; + position: absolute; +} + +@media (max-width: 768px) { + .pagination-container .el-pagination > .el-pagination__jump { + display: none !important; + } + .pagination-container .el-pagination > .el-pagination__sizes { + display: none !important; + } +} + +.el-table .fixed-width .el-button--mini { + padding-left: 0; + padding-right: 0; + width: inherit; +} + +/** 琛ㄦ牸鏇村鎿嶄綔涓嬫媺鏍峰紡 */ +.el-table .el-dropdown-link,.el-table .el-dropdown-selfdefine { + cursor: pointer; + margin-left: 5px; +} + +.el-table .el-dropdown, .el-icon-arrow-down { + font-size: 12px; +} + +.el-tree-node__content > .el-checkbox { + margin-right: 8px; +} + +.list-group-striped > .list-group-item { + border-left: 0; + border-right: 0; + border-radius: 0; + padding-left: 0; + padding-right: 0; +} + +.list-group { + padding-left: 0px; + list-style: none; +} + +.list-group-item { + border-bottom: 1px solid #e7eaec; + border-top: 1px solid #e7eaec; + margin-bottom: -1px; + padding: 11px 0px; + font-size: 13px; +} + +.pull-right { + float: right !important; +} + +.el-card__header { + padding: 14px 15px 7px; + min-height: 40px; +} + +.el-card__body { + padding: 15px 20px 20px 20px; +} + +.card-box { + padding-right: 15px; + padding-left: 15px; + margin-bottom: 10px; +} + +/* button color */ +.el-button--cyan.is-active, +.el-button--cyan:active { + background: #20B2AA; + border-color: #20B2AA; + color: #FFFFFF; +} + +.el-button--cyan:focus, +.el-button--cyan:hover { + background: #48D1CC; + border-color: #48D1CC; + color: #FFFFFF; +} + +.el-button--cyan { + background-color: #20B2AA; + border-color: #20B2AA; + color: #FFFFFF; +} + +/* text color */ +.text-navy { + color: #1ab394; +} + +.text-primary { + color: inherit; +} + +.text-success { + color: #1c84c6; +} + +.text-info { + color: #23c6c8; +} + +.text-warning { + color: #f8ac59; +} + +.text-danger { + color: #ed5565; +} + +.text-muted { + color: #888888; +} + +/* image */ +.img-circle { + border-radius: 50%; +} + +.img-lg { + width: 120px; + height: 120px; +} + +.avatar-upload-preview { + position: relative; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 200px; + height: 200px; + border-radius: 50%; + box-shadow: 0 0 4px #ccc; + overflow: hidden; +} + +/* 鎷栨嫿鍒楁牱寮 */ +.sortable-ghost { + opacity: .8; + color: #fff !important; + background: #42b983 !important; +} + +.top-right-btn { + position: relative; + float: right; +} diff --git a/ruoyi-ui/src/assets/styles/sidebar.scss b/ruoyi-ui/src/assets/styles/sidebar.scss new file mode 100644 index 0000000000000000000000000000000000000000..abe5b6317741f27c5541591db83487798721bc72 --- /dev/null +++ b/ruoyi-ui/src/assets/styles/sidebar.scss @@ -0,0 +1,227 @@ +#app { + + .main-container { + height: 100%; + transition: margin-left .28s; + margin-left: $base-sidebar-width; + position: relative; + } + + .sidebarHide { + margin-left: 0!important; + } + + .sidebar-container { + -webkit-transition: width .28s; + transition: width 0.28s; + width: $base-sidebar-width !important; + background-color: $base-menu-background; + height: 100%; + position: fixed; + font-size: 0px; + top: 0; + bottom: 0; + left: 0; + z-index: 1001; + overflow: hidden; + -webkit-box-shadow: 2px 0 6px rgba(0,21,41,.35); + box-shadow: 2px 0 6px rgba(0,21,41,.35); + + // reset element-ui css + .horizontal-collapse-transition { + transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out; + } + + .scrollbar-wrapper { + overflow-x: hidden !important; + } + + .el-scrollbar__bar.is-vertical { + right: 0px; + } + + .el-scrollbar { + height: 100%; + } + + &.has-logo { + .el-scrollbar { + height: calc(100% - 50px); + } + } + + .is-horizontal { + display: none; + } + + a { + display: inline-block; + width: 100%; + overflow: hidden; + } + + .svg-icon { + margin-right: 16px; + } + + .el-menu { + border: none; + height: 100%; + width: 100% !important; + } + + .el-menu-item, .el-submenu__title { + overflow: hidden !important; + text-overflow: ellipsis !important; + white-space: nowrap !important; + } + + // menu hover + .submenu-title-noDropdown, + .el-submenu__title { + &:hover { + background-color: rgba(0, 0, 0, 0.06) !important; + } + } + + & .theme-dark .is-active > .el-submenu__title { + color: $base-menu-color-active !important; + } + + & .nest-menu .el-submenu>.el-submenu__title, + & .el-submenu .el-menu-item { + min-width: $base-sidebar-width !important; + + &:hover { + background-color: rgba(0, 0, 0, 0.06) !important; + } + } + + & .theme-dark .nest-menu .el-submenu>.el-submenu__title, + & .theme-dark .el-submenu .el-menu-item { + background-color: $base-sub-menu-background !important; + + &:hover { + background-color: $base-sub-menu-hover !important; + } + } + } + + .hideSidebar { + .sidebar-container { + width: 54px !important; + } + + .main-container { + margin-left: 54px; + } + + .submenu-title-noDropdown { + padding: 0 !important; + position: relative; + + .el-tooltip { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + } + } + + .el-submenu { + overflow: hidden; + + &>.el-submenu__title { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + + } + } + + .el-menu--collapse { + .el-submenu { + &>.el-submenu__title { + &>span { + height: 0; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; + } + } + } + } + } + + .el-menu--collapse .el-menu .el-submenu { + min-width: $base-sidebar-width !important; + } + + // mobile responsive + .mobile { + .main-container { + margin-left: 0px; + } + + .sidebar-container { + transition: transform .28s; + width: $base-sidebar-width !important; + } + + &.hideSidebar { + .sidebar-container { + pointer-events: none; + transition-duration: 0.3s; + transform: translate3d(-$base-sidebar-width, 0, 0); + } + } + } + + .withoutAnimation { + + .main-container, + .sidebar-container { + transition: none; + } + } +} + +// when menu collapsed +.el-menu--vertical { + &>.el-menu { + .svg-icon { + margin-right: 16px; + } + } + + .nest-menu .el-submenu>.el-submenu__title, + .el-menu-item { + &:hover { + // you can use $subMenuHover + background-color: rgba(0, 0, 0, 0.06) !important; + } + } + + // the scroll bar appears when the subMenu is too long + >.el-menu--popup { + max-height: 100vh; + overflow-y: auto; + + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } + } +} diff --git a/ruoyi-ui/src/assets/styles/transition.scss b/ruoyi-ui/src/assets/styles/transition.scss new file mode 100644 index 0000000000000000000000000000000000000000..073f8c6ce27c63240f6cf1e832ead8b8bc91d8c6 --- /dev/null +++ b/ruoyi-ui/src/assets/styles/transition.scss @@ -0,0 +1,49 @@ +// global transition css + +/* fade */ +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.28s; +} + +.fade-enter, +.fade-leave-active { + opacity: 0; +} + +/* fade-transform */ +.fade-transform--move, +.fade-transform-leave-active, +.fade-transform-enter-active { + transition: all .5s; +} + +.fade-transform-enter { + opacity: 0; + transform: translateX(-30px); +} + +.fade-transform-leave-to { + opacity: 0; + transform: translateX(30px); +} + +/* breadcrumb transition */ +.breadcrumb-enter-active, +.breadcrumb-leave-active { + transition: all .5s; +} + +.breadcrumb-enter, +.breadcrumb-leave-active { + opacity: 0; + transform: translateX(20px); +} + +.breadcrumb-move { + transition: all .5s; +} + +.breadcrumb-leave-active { + position: absolute; +} diff --git a/ruoyi-ui/src/assets/styles/variables.scss b/ruoyi-ui/src/assets/styles/variables.scss new file mode 100644 index 0000000000000000000000000000000000000000..34484d47efc492182bd2c29331b90d1d1810524b --- /dev/null +++ b/ruoyi-ui/src/assets/styles/variables.scss @@ -0,0 +1,54 @@ +// base color +$blue:#324157; +$light-blue:#3A71A8; +$red:#C03639; +$pink: #E65D6E; +$green: #30B08F; +$tiffany: #4AB7BD; +$yellow:#FEC171; +$panGreen: #30B08F; + +// 榛樿鑿滃崟涓婚椋庢牸 +$base-menu-color:#bfcbd9; +$base-menu-color-active:#f4f4f5; +$base-menu-background:#304156; +$base-logo-title-color: #ffffff; + +$base-menu-light-color:rgba(0,0,0,.70); +$base-menu-light-background:#ffffff; +$base-logo-light-title-color: #001529; + +$base-sub-menu-background:#1f2d3d; +$base-sub-menu-hover:#001528; + +// 鑷畾涔夋殫鑹茶彍鍗曢鏍 +/** +$base-menu-color:hsla(0,0%,100%,.65); +$base-menu-color-active:#fff; +$base-menu-background:#001529; +$base-logo-title-color: #ffffff; + +$base-menu-light-color:rgba(0,0,0,.70); +$base-menu-light-background:#ffffff; +$base-logo-light-title-color: #001529; + +$base-sub-menu-background:#000c17; +$base-sub-menu-hover:#001528; +*/ + +$base-sidebar-width: 200px; + +// the :export directive is the magic sauce for webpack +// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass +:export { + menuColor: $base-menu-color; + menuLightColor: $base-menu-light-color; + menuColorActive: $base-menu-color-active; + menuBackground: $base-menu-background; + menuLightBackground: $base-menu-light-background; + subMenuBackground: $base-sub-menu-background; + subMenuHover: $base-sub-menu-hover; + sideBarWidth: $base-sidebar-width; + logoTitleColor: $base-logo-title-color; + logoLightTitleColor: $base-logo-light-title-color +} diff --git a/ruoyi-ui/src/components/Breadcrumb/index.vue b/ruoyi-ui/src/components/Breadcrumb/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..1696f54719db39bc2ace0cfde2cbb0183ec91745 --- /dev/null +++ b/ruoyi-ui/src/components/Breadcrumb/index.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/ruoyi-ui/src/components/Crontab/day.vue b/ruoyi-ui/src/components/Crontab/day.vue new file mode 100644 index 0000000000000000000000000000000000000000..fe3eaf0c4c70baa744767649e3e51f1f06fc9f6e --- /dev/null +++ b/ruoyi-ui/src/components/Crontab/day.vue @@ -0,0 +1,161 @@ + + + diff --git a/ruoyi-ui/src/components/Crontab/hour.vue b/ruoyi-ui/src/components/Crontab/hour.vue new file mode 100644 index 0000000000000000000000000000000000000000..3216c33f8749495544d538ff2b2eed8918d4a507 --- /dev/null +++ b/ruoyi-ui/src/components/Crontab/hour.vue @@ -0,0 +1,120 @@ + + + diff --git a/ruoyi-ui/src/components/Crontab/index.vue b/ruoyi-ui/src/components/Crontab/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..3963df28e6dd733e02b73a7d72ddbc146db67f5f --- /dev/null +++ b/ruoyi-ui/src/components/Crontab/index.vue @@ -0,0 +1,430 @@ + + + + diff --git a/ruoyi-ui/src/components/Crontab/min.vue b/ruoyi-ui/src/components/Crontab/min.vue new file mode 100644 index 0000000000000000000000000000000000000000..43cab900d338e2f3c400ef8168d5140e309f65cb --- /dev/null +++ b/ruoyi-ui/src/components/Crontab/min.vue @@ -0,0 +1,116 @@ + + + \ No newline at end of file diff --git a/ruoyi-ui/src/components/Crontab/month.vue b/ruoyi-ui/src/components/Crontab/month.vue new file mode 100644 index 0000000000000000000000000000000000000000..fd0ac384fbe2667e20c5975dd536189ece0ecbbb --- /dev/null +++ b/ruoyi-ui/src/components/Crontab/month.vue @@ -0,0 +1,114 @@ + + + diff --git a/ruoyi-ui/src/components/Crontab/result.vue b/ruoyi-ui/src/components/Crontab/result.vue new file mode 100644 index 0000000000000000000000000000000000000000..aea6e0e46130d1ee694e44596c4b11dbd44cc292 --- /dev/null +++ b/ruoyi-ui/src/components/Crontab/result.vue @@ -0,0 +1,559 @@ + + + diff --git a/ruoyi-ui/src/components/Crontab/second.vue b/ruoyi-ui/src/components/Crontab/second.vue new file mode 100644 index 0000000000000000000000000000000000000000..e7b776171d4509d1d5118d418de4e51a134b9350 --- /dev/null +++ b/ruoyi-ui/src/components/Crontab/second.vue @@ -0,0 +1,117 @@ + + + diff --git a/ruoyi-ui/src/components/Crontab/week.vue b/ruoyi-ui/src/components/Crontab/week.vue new file mode 100644 index 0000000000000000000000000000000000000000..1cec700e8ba89f396b909f78e04d34b0a5fa4ab2 --- /dev/null +++ b/ruoyi-ui/src/components/Crontab/week.vue @@ -0,0 +1,202 @@ + + + diff --git a/ruoyi-ui/src/components/Crontab/year.vue b/ruoyi-ui/src/components/Crontab/year.vue new file mode 100644 index 0000000000000000000000000000000000000000..5487a6c7fde04ebde11b8c45d0b3bd151501d311 --- /dev/null +++ b/ruoyi-ui/src/components/Crontab/year.vue @@ -0,0 +1,131 @@ + + + diff --git a/ruoyi-ui/src/components/DictData/index.js b/ruoyi-ui/src/components/DictData/index.js new file mode 100644 index 0000000000000000000000000000000000000000..7b85d4aaa3fec01f1210c0757629b428957524d9 --- /dev/null +++ b/ruoyi-ui/src/components/DictData/index.js @@ -0,0 +1,49 @@ +import Vue from 'vue' +import store from '@/store' +import DataDict from '@/utils/dict' +import { getDicts as getDicts } from '@/api/system/dict/data' + +function searchDictByKey(dict, key) { + if (key == null && key == "") { + return null + } + try { + for (let i = 0; i < dict.length; i++) { + if (dict[i].key == key) { + return dict[i].value + } + } + } catch (e) { + return null + } +} + +function install() { + Vue.use(DataDict, { + metas: { + '*': { + labelField: 'dictLabel', + valueField: 'dictValue', + request(dictMeta) { + const storeDict = searchDictByKey(store.getters.dict, dictMeta.type) + if (storeDict) { + return new Promise(resolve => { resolve(storeDict) }) + } else { + return new Promise((resolve, reject) => { + getDicts(dictMeta.type).then(res => { + store.dispatch('dict/setDict', { key: dictMeta.type, value: res.data }) + resolve(res.data) + }).catch(error => { + reject(error) + }) + }) + } + }, + }, + }, + }) +} + +export default { + install, +} \ No newline at end of file diff --git a/ruoyi-ui/src/components/DictTag/index.vue b/ruoyi-ui/src/components/DictTag/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..6b5b230f5c52393267f9d2b27fea218c87248eb4 --- /dev/null +++ b/ruoyi-ui/src/components/DictTag/index.vue @@ -0,0 +1,89 @@ + + + + diff --git a/ruoyi-ui/src/components/Editor/index.vue b/ruoyi-ui/src/components/Editor/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..e478194cef57e73dea9d8905f1feb8a3479f25d2 --- /dev/null +++ b/ruoyi-ui/src/components/Editor/index.vue @@ -0,0 +1,159 @@ + + + + + diff --git a/ruoyi-ui/src/components/ExamCourse/index.vue b/ruoyi-ui/src/components/ExamCourse/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..d1ebc4f588ef213c881a2424fc154c703362f534 --- /dev/null +++ b/ruoyi-ui/src/components/ExamCourse/index.vue @@ -0,0 +1,99 @@ + + + diff --git a/ruoyi-ui/src/components/FileUpload/index.vue b/ruoyi-ui/src/components/FileUpload/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..a7330b3188193d1bc0dc20ee2e5adfd7af1f4c4d --- /dev/null +++ b/ruoyi-ui/src/components/FileUpload/index.vue @@ -0,0 +1,216 @@ + + + + + diff --git a/ruoyi-ui/src/components/Hamburger/index.vue b/ruoyi-ui/src/components/Hamburger/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..368b002154ef7dfb2625e15a43d2ad264bfa040c --- /dev/null +++ b/ruoyi-ui/src/components/Hamburger/index.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/ruoyi-ui/src/components/HeaderSearch/index.vue b/ruoyi-ui/src/components/HeaderSearch/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..7d6780be96aa090dc507cbe49db03e21907a4e18 --- /dev/null +++ b/ruoyi-ui/src/components/HeaderSearch/index.vue @@ -0,0 +1,198 @@ + + + + + diff --git a/ruoyi-ui/src/components/IconSelect/index.vue b/ruoyi-ui/src/components/IconSelect/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..8dadc028ab3e33f114fd9dbda60f016f74eb487d --- /dev/null +++ b/ruoyi-ui/src/components/IconSelect/index.vue @@ -0,0 +1,104 @@ + + + + + + diff --git a/ruoyi-ui/src/components/IconSelect/requireIcons.js b/ruoyi-ui/src/components/IconSelect/requireIcons.js new file mode 100644 index 0000000000000000000000000000000000000000..99e5c54cc7fd824e01a5e6acf3d311d2fb97fe5f --- /dev/null +++ b/ruoyi-ui/src/components/IconSelect/requireIcons.js @@ -0,0 +1,11 @@ + +const req = require.context('../../assets/icons/svg', false, /\.svg$/) +const requireAll = requireContext => requireContext.keys() + +const re = /\.\/(.*)\.svg/ + +const icons = requireAll(req).map(i => { + return i.match(re)[1] +}) + +export default icons diff --git a/ruoyi-ui/src/components/ImagePreview/index.vue b/ruoyi-ui/src/components/ImagePreview/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..3c770c70370cf97d272ddb1c2814c8075fc881e6 --- /dev/null +++ b/ruoyi-ui/src/components/ImagePreview/index.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/ruoyi-ui/src/components/ImageUpload/index.vue b/ruoyi-ui/src/components/ImageUpload/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..1cadcdb57d2793314ef5715bb16e0e67146cbe17 --- /dev/null +++ b/ruoyi-ui/src/components/ImageUpload/index.vue @@ -0,0 +1,248 @@ + + + + + diff --git a/ruoyi-ui/src/components/Pagination/index.vue b/ruoyi-ui/src/components/Pagination/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..56f5a6b9da18e6b5f9361a08ccf99caf87f6fd5c --- /dev/null +++ b/ruoyi-ui/src/components/Pagination/index.vue @@ -0,0 +1,114 @@ + + + + + diff --git a/ruoyi-ui/src/components/PanThumb/index.vue b/ruoyi-ui/src/components/PanThumb/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..1bcf41709c2dbe47a053530b78dc945411765670 --- /dev/null +++ b/ruoyi-ui/src/components/PanThumb/index.vue @@ -0,0 +1,142 @@ + + + + + diff --git a/ruoyi-ui/src/components/ParentView/index.vue b/ruoyi-ui/src/components/ParentView/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..7bf614897817801459ca0a2ec2abf5b2b7403d02 --- /dev/null +++ b/ruoyi-ui/src/components/ParentView/index.vue @@ -0,0 +1,3 @@ + diff --git a/ruoyi-ui/src/components/RightPanel/index.vue b/ruoyi-ui/src/components/RightPanel/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..5abeecb006bde634ab7c2097f613c1acfc9bf7e5 --- /dev/null +++ b/ruoyi-ui/src/components/RightPanel/index.vue @@ -0,0 +1,106 @@ + + + + + diff --git a/ruoyi-ui/src/components/RightToolbar/index.vue b/ruoyi-ui/src/components/RightToolbar/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..67da293008e3a22f644ee40fad97e4fe7ff53c22 --- /dev/null +++ b/ruoyi-ui/src/components/RightToolbar/index.vue @@ -0,0 +1,129 @@ + + + diff --git a/ruoyi-ui/src/components/RuoYi/Doc/index.vue b/ruoyi-ui/src/components/RuoYi/Doc/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..75fa864102b3224017f1e0f1e674ec08662c7c99 --- /dev/null +++ b/ruoyi-ui/src/components/RuoYi/Doc/index.vue @@ -0,0 +1,21 @@ + + + \ No newline at end of file diff --git a/ruoyi-ui/src/components/RuoYi/Git/index.vue b/ruoyi-ui/src/components/RuoYi/Git/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..bdafbaefabe9fcc0ba0fbe0bac21fca6cc66bb56 --- /dev/null +++ b/ruoyi-ui/src/components/RuoYi/Git/index.vue @@ -0,0 +1,21 @@ + + + \ No newline at end of file diff --git a/ruoyi-ui/src/components/Screenfull/index.vue b/ruoyi-ui/src/components/Screenfull/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..d4e539c26a2843d26b60b56c5ecf1c8680073eb0 --- /dev/null +++ b/ruoyi-ui/src/components/Screenfull/index.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/ruoyi-ui/src/components/SizeSelect/index.vue b/ruoyi-ui/src/components/SizeSelect/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..069b5de9b8c6c0b5a7df931a315de576fa030193 --- /dev/null +++ b/ruoyi-ui/src/components/SizeSelect/index.vue @@ -0,0 +1,56 @@ + + + diff --git a/ruoyi-ui/src/components/SvgIcon/index.vue b/ruoyi-ui/src/components/SvgIcon/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..e4bf5ade1d877f716cbdc1026eade627963635ed --- /dev/null +++ b/ruoyi-ui/src/components/SvgIcon/index.vue @@ -0,0 +1,61 @@ + + + + + diff --git a/ruoyi-ui/src/components/ThemePicker/index.vue b/ruoyi-ui/src/components/ThemePicker/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..1714e1f391e72233b0c87fbb5a02956280dabf2f --- /dev/null +++ b/ruoyi-ui/src/components/ThemePicker/index.vue @@ -0,0 +1,173 @@ + + + + + diff --git a/ruoyi-ui/src/components/TopNav/index.vue b/ruoyi-ui/src/components/TopNav/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..86a91c4cf7a033e614ee7a8f9be1869d9c962e8f --- /dev/null +++ b/ruoyi-ui/src/components/TopNav/index.vue @@ -0,0 +1,195 @@ + + + + + diff --git a/ruoyi-ui/src/components/VideoUpload/index.vue b/ruoyi-ui/src/components/VideoUpload/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..45c587255d0b28368647159854c9932bd6e75273 --- /dev/null +++ b/ruoyi-ui/src/components/VideoUpload/index.vue @@ -0,0 +1,208 @@ + + + + + diff --git a/ruoyi-ui/src/components/iFrame/index.vue b/ruoyi-ui/src/components/iFrame/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..426857fb1aa51824f3a711019bbdbf7b0fe74fe9 --- /dev/null +++ b/ruoyi-ui/src/components/iFrame/index.vue @@ -0,0 +1,36 @@ + + + diff --git a/ruoyi-ui/src/layout/components/Navbar.vue b/ruoyi-ui/src/layout/components/Navbar.vue new file mode 100644 index 0000000000000000000000000000000000000000..466cd981e3a199fc37cb28dffe9e6b9a6ed7d9a8 --- /dev/null +++ b/ruoyi-ui/src/layout/components/Navbar.vue @@ -0,0 +1,200 @@ + + + + + diff --git a/ruoyi-ui/src/layout/components/Settings/index.vue b/ruoyi-ui/src/layout/components/Settings/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..bb3c9ce90c62d0aa24b6ff4401952e0822b1af9a --- /dev/null +++ b/ruoyi-ui/src/layout/components/Settings/index.vue @@ -0,0 +1,260 @@ + + + + + diff --git a/ruoyi-ui/src/layout/components/Sidebar/FixiOSBug.js b/ruoyi-ui/src/layout/components/Sidebar/FixiOSBug.js new file mode 100644 index 0000000000000000000000000000000000000000..682372699a2bcc182747093492f9e946f77acec4 --- /dev/null +++ b/ruoyi-ui/src/layout/components/Sidebar/FixiOSBug.js @@ -0,0 +1,25 @@ +export default { + computed: { + device() { + return this.$store.state.app.device + } + }, + mounted() { + // In order to fix the click on menu on the ios device will trigger the mouseleave bug + this.fixBugIniOS() + }, + methods: { + fixBugIniOS() { + const $subMenu = this.$refs.subMenu + if ($subMenu) { + const handleMouseleave = $subMenu.handleMouseleave + $subMenu.handleMouseleave = (e) => { + if (this.device === 'mobile') { + return + } + handleMouseleave(e) + } + } + } + } +} diff --git a/ruoyi-ui/src/layout/components/Sidebar/Item.vue b/ruoyi-ui/src/layout/components/Sidebar/Item.vue new file mode 100644 index 0000000000000000000000000000000000000000..be3285dfb3bccca1b535360edd22d007c0e6b6d7 --- /dev/null +++ b/ruoyi-ui/src/layout/components/Sidebar/Item.vue @@ -0,0 +1,33 @@ + diff --git a/ruoyi-ui/src/layout/components/Sidebar/Link.vue b/ruoyi-ui/src/layout/components/Sidebar/Link.vue new file mode 100644 index 0000000000000000000000000000000000000000..8b0bc93bd4260c74588118679c9ebc8f2018d075 --- /dev/null +++ b/ruoyi-ui/src/layout/components/Sidebar/Link.vue @@ -0,0 +1,43 @@ + + + diff --git a/ruoyi-ui/src/layout/components/Sidebar/Logo.vue b/ruoyi-ui/src/layout/components/Sidebar/Logo.vue new file mode 100644 index 0000000000000000000000000000000000000000..fbfb20540a67cc5d0ba0183ef651af2497b8dee3 --- /dev/null +++ b/ruoyi-ui/src/layout/components/Sidebar/Logo.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/ruoyi-ui/src/layout/components/Sidebar/SidebarItem.vue b/ruoyi-ui/src/layout/components/Sidebar/SidebarItem.vue new file mode 100644 index 0000000000000000000000000000000000000000..82ba40786ae2ec60ba78a72cec94c4b364001d7c --- /dev/null +++ b/ruoyi-ui/src/layout/components/Sidebar/SidebarItem.vue @@ -0,0 +1,100 @@ + + + diff --git a/ruoyi-ui/src/layout/components/Sidebar/index.vue b/ruoyi-ui/src/layout/components/Sidebar/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..51d0839f31aeaeafc2d00297a582ea2e7ed8a9f6 --- /dev/null +++ b/ruoyi-ui/src/layout/components/Sidebar/index.vue @@ -0,0 +1,57 @@ + + + diff --git a/ruoyi-ui/src/layout/components/TagsView/ScrollPane.vue b/ruoyi-ui/src/layout/components/TagsView/ScrollPane.vue new file mode 100644 index 0000000000000000000000000000000000000000..bb753a12421f90bb05d559a33c34c92e07ef0124 --- /dev/null +++ b/ruoyi-ui/src/layout/components/TagsView/ScrollPane.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/ruoyi-ui/src/layout/components/TagsView/index.vue b/ruoyi-ui/src/layout/components/TagsView/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..96585a5b1ff36e9946773500b6ecd0fbad0d0521 --- /dev/null +++ b/ruoyi-ui/src/layout/components/TagsView/index.vue @@ -0,0 +1,332 @@ + + + + + + + diff --git a/ruoyi-ui/src/layout/components/index.js b/ruoyi-ui/src/layout/components/index.js new file mode 100644 index 0000000000000000000000000000000000000000..104bd3ac63fdad6e0d1c1fc60a21239b174006db --- /dev/null +++ b/ruoyi-ui/src/layout/components/index.js @@ -0,0 +1,5 @@ +export { default as AppMain } from './AppMain' +export { default as Navbar } from './Navbar' +export { default as Settings } from './Settings' +export { default as Sidebar } from './Sidebar/index.vue' +export { default as TagsView } from './TagsView/index.vue' diff --git a/ruoyi-ui/src/layout/index.vue b/ruoyi-ui/src/layout/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..dba4393dab1be281594dfe070bfd2c1e355813cd --- /dev/null +++ b/ruoyi-ui/src/layout/index.vue @@ -0,0 +1,111 @@ + + + + + diff --git a/ruoyi-ui/src/layout/mixin/ResizeHandler.js b/ruoyi-ui/src/layout/mixin/ResizeHandler.js new file mode 100644 index 0000000000000000000000000000000000000000..e8d0df8c237c20405aacc19a1e317ce5b09cd5d1 --- /dev/null +++ b/ruoyi-ui/src/layout/mixin/ResizeHandler.js @@ -0,0 +1,45 @@ +import store from '@/store' + +const { body } = document +const WIDTH = 992 // refer to Bootstrap's responsive design + +export default { + watch: { + $route(route) { + if (this.device === 'mobile' && this.sidebar.opened) { + store.dispatch('app/closeSideBar', { withoutAnimation: false }) + } + } + }, + beforeMount() { + window.addEventListener('resize', this.$_resizeHandler) + }, + beforeDestroy() { + window.removeEventListener('resize', this.$_resizeHandler) + }, + mounted() { + const isMobile = this.$_isMobile() + if (isMobile) { + store.dispatch('app/toggleDevice', 'mobile') + store.dispatch('app/closeSideBar', { withoutAnimation: true }) + } + }, + methods: { + // use $_ for mixins properties + // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential + $_isMobile() { + const rect = body.getBoundingClientRect() + return rect.width - 1 < WIDTH + }, + $_resizeHandler() { + if (!document.hidden) { + const isMobile = this.$_isMobile() + store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop') + + if (isMobile) { + store.dispatch('app/closeSideBar', { withoutAnimation: true }) + } + } + } + } +} diff --git a/ruoyi-ui/src/main.js b/ruoyi-ui/src/main.js new file mode 100644 index 0000000000000000000000000000000000000000..7afca41618b71bb46207810896c33223c71eb643 --- /dev/null +++ b/ruoyi-ui/src/main.js @@ -0,0 +1,91 @@ +import Vue from 'vue' + +import Cookies from 'js-cookie' + +import Element from 'element-ui' +import './assets/styles/element-variables.scss' + +import '@/assets/styles/index.scss' // global css +import '@/assets/styles/ruoyi.scss' // ruoyi css +import App from './App' +import store from './store' +import router from './router' +import directive from './directive' // directive +import plugins from './plugins' // plugins +import { download } from '@/utils/request' + +import tooltip from "@/components/tableTooltip/tooltip.vue"; +import './assets/icons' // icon +import './permission' // permission control +import { getDicts } from "@/api/system/dict/data"; +import { getConfigKey } from "@/api/system/config"; +import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, handleTree } from "@/utils/ruoyi"; +// 鍒嗛〉缁勪欢 +import Pagination from "@/components/Pagination"; +// 鑷畾涔夎〃鏍煎伐鍏风粍浠 +import RightToolbar from "@/components/RightToolbar" +// 瀵屾枃鏈粍浠 +import Editor from "@/components/Editor" +// 鏂囦欢涓婁紶缁勪欢 +import FileUpload from "@/components/FileUpload" +// 鍥剧墖涓婁紶缁勪欢 +import ImageUpload from "@/components/ImageUpload" +// 鍥剧墖棰勮缁勪欢 +import ImagePreview from "@/components/ImagePreview" +// 瀛楀吀鏍囩缁勪欢 +import DictTag from '@/components/DictTag' +// 澶撮儴鏍囩缁勪欢 +import VueMeta from 'vue-meta' +// 瀛楀吀鏁版嵁缁勪欢 +import DictData from '@/components/DictData' +// 瑙嗛涓婁紶缁勪欢 +import VideoUpload from "@/components/VideoUpload" + +// 鍏ㄥ眬鏂规硶鎸傝浇 +Vue.prototype.getDicts = getDicts +Vue.prototype.getConfigKey = getConfigKey +Vue.prototype.parseTime = parseTime +Vue.prototype.resetForm = resetForm +Vue.prototype.addDateRange = addDateRange +Vue.prototype.selectDictLabel = selectDictLabel +Vue.prototype.selectDictLabels = selectDictLabels +Vue.prototype.download = download +Vue.prototype.handleTree = handleTree + +// 鍏ㄥ眬缁勪欢鎸傝浇 +Vue.component('DictTag', DictTag) +Vue.component('Pagination', Pagination) +Vue.component('RightToolbar', RightToolbar) +Vue.component('Editor', Editor) +Vue.component('FileUpload', FileUpload) +Vue.component('ImageUpload', ImageUpload) +Vue.component('ImagePreview', ImagePreview) +Vue.component('VideoUpload', VideoUpload) +Vue.component('tooltip', tooltip) + +Vue.use(directive) +Vue.use(plugins) +Vue.use(VueMeta) +DictData.install() + +/** + * If you don't want to use mock-server + * you want to use MockJs for mock api + * you can execute: mockXHR() + * + * Currently MockJs will be used in the production environment, + * please remove it before going online! ! ! + */ + +Vue.use(Element, { + size: Cookies.get('size') || 'medium' // set element-ui default size +}) + +Vue.config.productionTip = false + +new Vue({ + el: '#app', + router, + store, + render: h => h(App) +}) diff --git a/ruoyi-ui/src/permission.js b/ruoyi-ui/src/permission.js new file mode 100644 index 0000000000000000000000000000000000000000..c56897902f829417c0c936d056066afe894e9215 --- /dev/null +++ b/ruoyi-ui/src/permission.js @@ -0,0 +1,58 @@ +import router from './router' +import store from './store' +import { Message } from 'element-ui' +import NProgress from 'nprogress' +import 'nprogress/nprogress.css' +import { getToken } from '@/utils/auth' +import { isRelogin } from '@/utils/request' + +NProgress.configure({ showSpinner: false }) + +const whiteList = ['/login', '/register'] + +router.beforeEach((to, from, next) => { + NProgress.start() + if (getToken()) { + to.meta.title && store.dispatch('settings/setTitle', to.meta.title) + /* has token*/ + if (to.path === '/login') { + next({ path: '/' }) + NProgress.done() + } else if (whiteList.indexOf(to.path) !== -1) { + next() + } else { + if (store.getters.roles.length === 0) { + isRelogin.show = true + // 鍒ゆ柇褰撳墠鐢ㄦ埛鏄惁宸叉媺鍙栧畬user_info淇℃伅 + store.dispatch('GetInfo').then(() => { + isRelogin.show = false + store.dispatch('GenerateRoutes').then(accessRoutes => { + // 鏍规嵁roles鏉冮檺鐢熸垚鍙闂殑璺敱琛 + router.addRoutes(accessRoutes) // 鍔ㄦ佹坊鍔犲彲璁块棶璺敱琛 + next({ ...to, replace: true }) // hack鏂规硶 纭繚addRoutes宸插畬鎴 + }) + }).catch(err => { + store.dispatch('LogOut').then(() => { + Message.error(err) + next({ path: '/' }) + }) + }) + } else { + next() + } + } + } else { + // 娌℃湁token + if (whiteList.indexOf(to.path) !== -1) { + // 鍦ㄥ厤鐧诲綍鐧藉悕鍗曪紝鐩存帴杩涘叆 + next() + } else { + next(`/login?redirect=${encodeURIComponent(to.fullPath)}`) // 鍚﹀垯鍏ㄩ儴閲嶅畾鍚戝埌鐧诲綍椤 + NProgress.done() + } + } +}) + +router.afterEach(() => { + NProgress.done() +}) diff --git a/ruoyi-ui/src/plugins/auth.js b/ruoyi-ui/src/plugins/auth.js new file mode 100644 index 0000000000000000000000000000000000000000..6c6bc24281aefabe0cd6df507678a2edfd542a73 --- /dev/null +++ b/ruoyi-ui/src/plugins/auth.js @@ -0,0 +1,60 @@ +import store from '@/store' + +function authPermission(permission) { + const all_permission = "*:*:*"; + const permissions = store.getters && store.getters.permissions + if (permission && permission.length > 0) { + return permissions.some(v => { + return all_permission === v || v === permission + }) + } else { + return false + } +} + +function authRole(role) { + const super_admin = "admin"; + const roles = store.getters && store.getters.roles + if (role && role.length > 0) { + return roles.some(v => { + return super_admin === v || v === role + }) + } else { + return false + } +} + +export default { + // 楠岃瘉鐢ㄦ埛鏄惁鍏峰鏌愭潈闄 + hasPermi(permission) { + return authPermission(permission); + }, + // 楠岃瘉鐢ㄦ埛鏄惁鍚湁鎸囧畾鏉冮檺锛屽彧闇鍖呭惈鍏朵腑涓涓 + hasPermiOr(permissions) { + return permissions.some(item => { + return authPermission(item) + }) + }, + // 楠岃瘉鐢ㄦ埛鏄惁鍚湁鎸囧畾鏉冮檺锛屽繀椤诲叏閮ㄦ嫢鏈 + hasPermiAnd(permissions) { + return permissions.every(item => { + return authPermission(item) + }) + }, + // 楠岃瘉鐢ㄦ埛鏄惁鍏峰鏌愯鑹 + hasRole(role) { + return authRole(role); + }, + // 楠岃瘉鐢ㄦ埛鏄惁鍚湁鎸囧畾瑙掕壊锛屽彧闇鍖呭惈鍏朵腑涓涓 + hasRoleOr(roles) { + return roles.some(item => { + return authRole(item) + }) + }, + // 楠岃瘉鐢ㄦ埛鏄惁鍚湁鎸囧畾瑙掕壊锛屽繀椤诲叏閮ㄦ嫢鏈 + hasRoleAnd(roles) { + return roles.every(item => { + return authRole(item) + }) + } +} diff --git a/ruoyi-ui/src/plugins/cache.js b/ruoyi-ui/src/plugins/cache.js new file mode 100644 index 0000000000000000000000000000000000000000..6b5c00b9ebb89ff928369086ec9e8cd4165e2d3c --- /dev/null +++ b/ruoyi-ui/src/plugins/cache.js @@ -0,0 +1,77 @@ +const sessionCache = { + set (key, value) { + if (!sessionStorage) { + return + } + if (key != null && value != null) { + sessionStorage.setItem(key, value) + } + }, + get (key) { + if (!sessionStorage) { + return null + } + if (key == null) { + return null + } + return sessionStorage.getItem(key) + }, + setJSON (key, jsonValue) { + if (jsonValue != null) { + this.set(key, JSON.stringify(jsonValue)) + } + }, + getJSON (key) { + const value = this.get(key) + if (value != null) { + return JSON.parse(value) + } + }, + remove (key) { + sessionStorage.removeItem(key); + } +} +const localCache = { + set (key, value) { + if (!localStorage) { + return + } + if (key != null && value != null) { + localStorage.setItem(key, value) + } + }, + get (key) { + if (!localStorage) { + return null + } + if (key == null) { + return null + } + return localStorage.getItem(key) + }, + setJSON (key, jsonValue) { + if (jsonValue != null) { + this.set(key, JSON.stringify(jsonValue)) + } + }, + getJSON (key) { + const value = this.get(key) + if (value != null) { + return JSON.parse(value) + } + }, + remove (key) { + localStorage.removeItem(key); + } +} + +export default { + /** + * 浼氳瘽绾х紦瀛 + */ + session: sessionCache, + /** + * 鏈湴缂撳瓨 + */ + local: localCache +} diff --git a/ruoyi-ui/src/plugins/download.js b/ruoyi-ui/src/plugins/download.js new file mode 100644 index 0000000000000000000000000000000000000000..42acd006f671ea04648b2f41f0c7c4c023b1c868 --- /dev/null +++ b/ruoyi-ui/src/plugins/download.js @@ -0,0 +1,79 @@ +import axios from 'axios' +import {Loading, Message} from 'element-ui' +import { saveAs } from 'file-saver' +import { getToken } from '@/utils/auth' +import errorCode from '@/utils/errorCode' +import { blobValidate } from "@/utils/ruoyi"; + +const baseURL = process.env.VUE_APP_BASE_API +let downloadLoadingInstance; + +export default { + name(name, isDelete = true) { + var url = baseURL + "/common/download?fileName=" + encodeURIComponent(name) + "&delete=" + isDelete + axios({ + method: 'get', + url: url, + responseType: 'blob', + headers: { 'Authorization': 'Bearer ' + getToken() } + }).then((res) => { + const isBlob = blobValidate(res.data); + if (isBlob) { + const blob = new Blob([res.data]) + this.saveAs(blob, decodeURIComponent(res.headers['download-filename'])) + } else { + this.printErrMsg(res.data); + } + }) + }, + resource(resource) { + var url = baseURL + "/common/download/resource?resource=" + encodeURIComponent(resource); + axios({ + method: 'get', + url: url, + responseType: 'blob', + headers: { 'Authorization': 'Bearer ' + getToken() } + }).then((res) => { + const isBlob = blobValidate(res.data); + if (isBlob) { + const blob = new Blob([res.data]) + this.saveAs(blob, decodeURIComponent(res.headers['download-filename'])) + } else { + this.printErrMsg(res.data); + } + }) + }, + zip(url, name) { + var url = baseURL + url + downloadLoadingInstance = Loading.service({ text: "姝e湪涓嬭浇鏁版嵁锛岃绋嶅", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", }) + axios({ + method: 'get', + url: url, + responseType: 'blob', + headers: { 'Authorization': 'Bearer ' + getToken() } + }).then((res) => { + const isBlob = blobValidate(res.data); + if (isBlob) { + const blob = new Blob([res.data], { type: 'application/zip' }) + this.saveAs(blob, name) + } else { + this.printErrMsg(res.data); + } + downloadLoadingInstance.close(); + }).catch((r) => { + console.error(r) + Message.error('涓嬭浇鏂囦欢鍑虹幇閿欒锛岃鑱旂郴绠$悊鍛橈紒') + downloadLoadingInstance.close(); + }) + }, + saveAs(text, name, opts) { + saveAs(text, name, opts); + }, + async printErrMsg(data) { + const resText = await data.text(); + const rspObj = JSON.parse(resText); + const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] + Message.error(errMsg); + } +} + diff --git a/ruoyi-ui/src/plugins/index.js b/ruoyi-ui/src/plugins/index.js new file mode 100644 index 0000000000000000000000000000000000000000..d000f2dfafd849ced83e3d0c569e68d9382ee21d --- /dev/null +++ b/ruoyi-ui/src/plugins/index.js @@ -0,0 +1,20 @@ +import tab from './tab' +import auth from './auth' +import cache from './cache' +import modal from './modal' +import download from './download' + +export default { + install(Vue) { + // 椤电鎿嶄綔 + Vue.prototype.$tab = tab + // 璁よ瘉瀵硅薄 + Vue.prototype.$auth = auth + // 缂撳瓨瀵硅薄 + Vue.prototype.$cache = cache + // 妯℃佹瀵硅薄 + Vue.prototype.$modal = modal + // 涓嬭浇鏂囦欢 + Vue.prototype.$download = download + } +} diff --git a/ruoyi-ui/src/plugins/modal.js b/ruoyi-ui/src/plugins/modal.js new file mode 100644 index 0000000000000000000000000000000000000000..b37ca145789745412c9ff5b7d74b13f6e98cc0b9 --- /dev/null +++ b/ruoyi-ui/src/plugins/modal.js @@ -0,0 +1,83 @@ +import { Message, MessageBox, Notification, Loading } from 'element-ui' + +let loadingInstance; + +export default { + // 娑堟伅鎻愮ず + msg(content) { + Message.info(content) + }, + // 閿欒娑堟伅 + msgError(content) { + Message.error(content) + }, + // 鎴愬姛娑堟伅 + msgSuccess(content) { + Message.success(content) + }, + // 璀﹀憡娑堟伅 + msgWarning(content) { + Message.warning(content) + }, + // 寮瑰嚭鎻愮ず + alert(content) { + MessageBox.alert(content, "绯荤粺鎻愮ず") + }, + // 閿欒鎻愮ず + alertError(content) { + MessageBox.alert(content, "绯荤粺鎻愮ず", { type: 'error' }) + }, + // 鎴愬姛鎻愮ず + alertSuccess(content) { + MessageBox.alert(content, "绯荤粺鎻愮ず", { type: 'success' }) + }, + // 璀﹀憡鎻愮ず + alertWarning(content) { + MessageBox.alert(content, "绯荤粺鎻愮ず", { type: 'warning' }) + }, + // 閫氱煡鎻愮ず + notify(content) { + Notification.info(content) + }, + // 閿欒閫氱煡 + notifyError(content) { + Notification.error(content); + }, + // 鎴愬姛閫氱煡 + notifySuccess(content) { + Notification.success(content) + }, + // 璀﹀憡閫氱煡 + notifyWarning(content) { + Notification.warning(content) + }, + // 纭绐椾綋 + confirm(content) { + return MessageBox.confirm(content, "绯荤粺鎻愮ず", { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: "warning", + }) + }, + // 鎻愪氦鍐呭 + prompt(content) { + return MessageBox.prompt(content, "绯荤粺鎻愮ず", { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: "warning", + }) + }, + // 鎵撳紑閬僵灞 + loading(content) { + loadingInstance = Loading.service({ + lock: true, + text: content, + spinner: "el-icon-loading", + background: "rgba(0, 0, 0, 0.7)", + }) + }, + // 鍏抽棴閬僵灞 + closeLoading() { + loadingInstance.close(); + } +} diff --git a/ruoyi-ui/src/plugins/tab.js b/ruoyi-ui/src/plugins/tab.js new file mode 100644 index 0000000000000000000000000000000000000000..fcde4197f8bc46b460dd7ff64bb3a70e8e100f34 --- /dev/null +++ b/ruoyi-ui/src/plugins/tab.js @@ -0,0 +1,71 @@ +import store from '@/store' +import router from '@/router'; + +export default { + // 鍒锋柊褰撳墠tab椤电 + refreshPage(obj) { + const { path, query, matched } = router.currentRoute; + if (obj === undefined) { + matched.forEach((m) => { + if (m.components && m.components.default && m.components.default.name) { + if (!['Layout', 'ParentView'].includes(m.components.default.name)) { + obj = { name: m.components.default.name, path: path, query: query }; + } + } + }); + } + return store.dispatch('tagsView/delCachedView', obj).then(() => { + const { path, query } = obj + router.replace({ + path: '/redirect' + path, + query: query + }) + }) + }, + // 鍏抽棴褰撳墠tab椤电锛屾墦寮鏂伴〉绛 + closeOpenPage(obj) { + store.dispatch("tagsView/delView", router.currentRoute); + if (obj !== undefined) { + return router.push(obj); + } + }, + // 鍏抽棴鎸囧畾tab椤电 + closePage(obj) { + if (obj === undefined) { + return store.dispatch('tagsView/delView', router.currentRoute).then(({ visitedViews }) => { + const latestView = visitedViews.slice(-1)[0] + if (latestView) { + return router.push(latestView.fullPath) + } + return router.push('/'); + }); + } + return store.dispatch('tagsView/delView', obj); + }, + // 鍏抽棴鎵鏈塼ab椤电 + closeAllPage() { + return store.dispatch('tagsView/delAllViews'); + }, + // 鍏抽棴宸︿晶tab椤电 + closeLeftPage(obj) { + return store.dispatch('tagsView/delLeftTags', obj || router.currentRoute); + }, + // 鍏抽棴鍙充晶tab椤电 + closeRightPage(obj) { + return store.dispatch('tagsView/delRightTags', obj || router.currentRoute); + }, + // 鍏抽棴鍏朵粬tab椤电 + closeOtherPage(obj) { + return store.dispatch('tagsView/delOthersViews', obj || router.currentRoute); + }, + // 娣诲姞tab椤电 + openPage(title, url, params) { + const obj = { path: url, meta: { title: title } } + store.dispatch('tagsView/addView', obj); + return router.push({ path: url, query: params }); + }, + // 淇敼tab椤电 + updatePage(obj) { + return store.dispatch('tagsView/updateVisitedView', obj); + } +} diff --git a/ruoyi-ui/src/router/index.js b/ruoyi-ui/src/router/index.js new file mode 100644 index 0000000000000000000000000000000000000000..71907b6968beac9eb8523baad51c0e5de3bc2328 --- /dev/null +++ b/ruoyi-ui/src/router/index.js @@ -0,0 +1,183 @@ +import Vue from 'vue' +import Router from 'vue-router' + +Vue.use(Router) + +/* Layout */ +import Layout from '@/layout' + +/** + * Note: 璺敱閰嶇疆椤 + * + * hidden: true // 褰撹缃 true 鐨勬椂鍊欒璺敱涓嶄細鍐嶄晶杈规爮鍑虹幇 濡401锛宭ogin绛夐〉闈紝鎴栬呭涓浜涚紪杈戦〉闈/edit/1 + * alwaysShow: true // 褰撲綘涓涓矾鐢变笅闈㈢殑 children 澹版槑鐨勮矾鐢卞ぇ浜1涓椂锛岃嚜鍔ㄤ細鍙樻垚宓屽鐨勬ā寮--濡傜粍浠堕〉闈 + * // 鍙湁涓涓椂锛屼細灏嗛偅涓瓙璺敱褰撳仛鏍硅矾鐢辨樉绀哄湪渚ц竟鏍--濡傚紩瀵奸〉闈 + * // 鑻ヤ綘鎯充笉绠¤矾鐢变笅闈㈢殑 children 澹版槑鐨勪釜鏁伴兘鏄剧ず浣犵殑鏍硅矾鐢 + * // 浣犲彲浠ヨ缃 alwaysShow: true锛岃繖鏍峰畠灏变細蹇界暐涔嬪墠瀹氫箟鐨勮鍒欙紝涓鐩存樉绀烘牴璺敱 + * redirect: noRedirect // 褰撹缃 noRedirect 鐨勬椂鍊欒璺敱鍦ㄩ潰鍖呭睉瀵艰埅涓笉鍙鐐瑰嚮 + * name:'router-name' // 璁惧畾璺敱鐨勫悕瀛楋紝涓瀹氳濉啓涓嶇劧浣跨敤鏃朵細鍑虹幇鍚勭闂 + * query: '{"id": 1, "name": "ry"}' // 璁块棶璺敱鐨勯粯璁や紶閫掑弬鏁 + * roles: ['admin', 'common'] // 璁块棶璺敱鐨勮鑹叉潈闄 + * permissions: ['a:a:a', 'b:b:b'] // 璁块棶璺敱鐨勮彍鍗曟潈闄 + * meta : { + noCache: true // 濡傛灉璁剧疆涓簍rue锛屽垯涓嶄細琚 缂撳瓨(榛樿 false) + title: 'title' // 璁剧疆璇ヨ矾鐢卞湪渚ц竟鏍忓拰闈㈠寘灞戜腑灞曠ず鐨勫悕瀛 + icon: 'svg-name' // 璁剧疆璇ヨ矾鐢辩殑鍥炬爣锛屽搴旇矾寰剆rc/assets/icons/svg + breadcrumb: false // 濡傛灉璁剧疆涓篺alse锛屽垯涓嶄細鍦╞readcrumb闈㈠寘灞戜腑鏄剧ず + activeMenu: '/system/user' // 褰撹矾鐢辫缃簡璇ュ睘鎬э紝鍒欎細楂樹寒鐩稿搴旂殑渚ц竟鏍忋 + } + */ + +// 鍏叡璺敱 +export const constantRoutes = [ + { + path: '/redirect', + component: Layout, + hidden: true, + children: [ + { + path: '/redirect/:path(.*)', + component: () => import('@/views/redirect') + } + ] + }, + { + path: '/login', + component: () => import('@/views/login'), + hidden: true + }, + { + path: '/register', + component: () => import('@/views/register'), + hidden: true + }, + { + path: '/404', + component: () => import('@/views/error/404'), + hidden: true + }, + { + path: '/401', + component: () => import('@/views/error/401'), + hidden: true + }, + { + path: '', + component: Layout, + redirect: 'index', + children: [ + { + path: 'index', + component: () => import('@/views/index'), + name: 'Index', + meta: { title: '棣栭〉', icon: 'dashboard', affix: true } + } + ] + }, + { + path: '/user', + component: Layout, + hidden: true, + redirect: 'noredirect', + children: [ + { + path: 'profile', + component: () => import('@/views/system/user/profile/index'), + name: 'Profile', + meta: { title: '涓汉涓績', icon: 'user' } + } + ] + } +] + +// 鍔ㄦ佽矾鐢憋紝鍩轰簬鐢ㄦ埛鏉冮檺鍔ㄦ佸幓鍔犺浇 +export const dynamicRoutes = [ + { + path: '/system/user-auth', + component: Layout, + hidden: true, + permissions: ['system:user:edit'], + children: [ + { + path: 'role/:userId(\\d+)', + component: () => import('@/views/system/user/authRole'), + name: 'AuthRole', + meta: { title: '鍒嗛厤瑙掕壊', activeMenu: '/system/user' } + } + ] + }, + { + path: '/system/role-auth', + component: Layout, + hidden: true, + permissions: ['system:role:edit'], + children: [ + { + path: 'user/:roleId(\\d+)', + component: () => import('@/views/system/role/authUser'), + name: 'AuthUser', + meta: { title: '鍒嗛厤鐢ㄦ埛', activeMenu: '/system/role' } + } + ] + }, + { + path: '/system/dict-data', + component: Layout, + hidden: true, + permissions: ['system:dict:list'], + children: [ + { + path: 'index/:dictId(\\d+)', + component: () => import('@/views/system/dict/data'), + name: 'Data', + meta: { title: '瀛楀吀鏁版嵁', activeMenu: '/system/dict' } + } + ] + }, + { + path: '/monitor/job-log', + component: Layout, + hidden: true, + permissions: ['monitor:job:list'], + children: [ + { + path: 'index/:jobId(\\d+)', + component: () => import('@/views/monitor/job/log'), + name: 'JobLog', + meta: { title: '璋冨害鏃ュ織', activeMenu: '/monitor/job' } + } + ] + }, + { + path: '/tool/gen-edit', + component: Layout, + hidden: true, + permissions: ['tool:gen:edit'], + children: [ + { + path: 'index/:tableId(\\d+)', + component: () => import('@/views/tool/gen/editTable'), + name: 'GenEdit', + meta: { title: '淇敼鐢熸垚閰嶇疆', activeMenu: '/tool/gen' } + } + ] + } +] + +// 闃叉杩炵画鐐瑰嚮澶氭璺敱鎶ラ敊 +let routerPush = Router.prototype.push; +let routerReplace = Router.prototype.replace; +// push +Router.prototype.push = function push(location) { + return routerPush.call(this, location).catch(err => err) +} +// replace +Router.prototype.replace = function push(location) { + return routerReplace.call(this, location).catch(err => err) +} + +export default new Router({ + mode: 'history', // 鍘绘帀url涓殑# + scrollBehavior: () => ({ y: 0 }), + routes: constantRoutes +}) diff --git a/ruoyi-ui/src/settings.js b/ruoyi-ui/src/settings.js new file mode 100644 index 0000000000000000000000000000000000000000..6a0b09f45c743ec9a04cee59f5c1e4f9116420bb --- /dev/null +++ b/ruoyi-ui/src/settings.js @@ -0,0 +1,44 @@ +module.exports = { + /** + * 渚ц竟鏍忎富棰 娣辫壊涓婚theme-dark锛屾祬鑹蹭富棰榯heme-light + */ + sideTheme: 'theme-dark', + + /** + * 鏄惁绯荤粺甯冨眬閰嶇疆 + */ + showSettings: false, + + /** + * 鏄惁鏄剧ず椤堕儴瀵艰埅 + */ + topNav: false, + + /** + * 鏄惁鏄剧ず tagsView + */ + tagsView: true, + + /** + * 鏄惁鍥哄畾澶撮儴 + */ + fixedHeader: false, + + /** + * 鏄惁鏄剧ずlogo + */ + sidebarLogo: true, + + /** + * 鏄惁鏄剧ず鍔ㄦ佹爣棰 + */ + dynamicTitle: false, + + /** + * @type {string | array} 'production' | ['production', 'development'] + * @description Need show err logs component. + * The default is only used in the production env + * If you want to also use it in dev, you can pass ['production', 'development'] + */ + errorLog: 'production' +} diff --git a/ruoyi-ui/src/store/getters.js b/ruoyi-ui/src/store/getters.js new file mode 100644 index 0000000000000000000000000000000000000000..8adb1b6536c16cc5531a491e74c79cabfa01092f --- /dev/null +++ b/ruoyi-ui/src/store/getters.js @@ -0,0 +1,19 @@ +const getters = { + sidebar: state => state.app.sidebar, + size: state => state.app.size, + device: state => state.app.device, + dict: state => state.dict.dict, + visitedViews: state => state.tagsView.visitedViews, + cachedViews: state => state.tagsView.cachedViews, + token: state => state.user.token, + avatar: state => state.user.avatar, + name: state => state.user.name, + introduction: state => state.user.introduction, + roles: state => state.user.roles, + permissions: state => state.user.permissions, + permission_routes: state => state.permission.routes, + topbarRouters:state => state.permission.topbarRouters, + defaultRoutes:state => state.permission.defaultRoutes, + sidebarRouters:state => state.permission.sidebarRouters, +} +export default getters diff --git a/ruoyi-ui/src/store/index.js b/ruoyi-ui/src/store/index.js new file mode 100644 index 0000000000000000000000000000000000000000..97aaef80eedcfd92c9f535f04e849af89f8f37c5 --- /dev/null +++ b/ruoyi-ui/src/store/index.js @@ -0,0 +1,25 @@ +import Vue from 'vue' +import Vuex from 'vuex' +import app from './modules/app' +import dict from './modules/dict' +import user from './modules/user' +import tagsView from './modules/tagsView' +import permission from './modules/permission' +import settings from './modules/settings' +import getters from './getters' + +Vue.use(Vuex) + +const store = new Vuex.Store({ + modules: { + app, + dict, + user, + tagsView, + permission, + settings + }, + getters +}) + +export default store diff --git a/ruoyi-ui/src/store/modules/app.js b/ruoyi-ui/src/store/modules/app.js new file mode 100644 index 0000000000000000000000000000000000000000..3e22d1c16eb639660e6fe0bcd40defa2d842d2c9 --- /dev/null +++ b/ruoyi-ui/src/store/modules/app.js @@ -0,0 +1,66 @@ +import Cookies from 'js-cookie' + +const state = { + sidebar: { + opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true, + withoutAnimation: false, + hide: false + }, + device: 'desktop', + size: Cookies.get('size') || 'medium' +} + +const mutations = { + TOGGLE_SIDEBAR: state => { + if (state.sidebar.hide) { + return false; + } + state.sidebar.opened = !state.sidebar.opened + state.sidebar.withoutAnimation = false + if (state.sidebar.opened) { + Cookies.set('sidebarStatus', 1) + } else { + Cookies.set('sidebarStatus', 0) + } + }, + CLOSE_SIDEBAR: (state, withoutAnimation) => { + Cookies.set('sidebarStatus', 0) + state.sidebar.opened = false + state.sidebar.withoutAnimation = withoutAnimation + }, + TOGGLE_DEVICE: (state, device) => { + state.device = device + }, + SET_SIZE: (state, size) => { + state.size = size + Cookies.set('size', size) + }, + SET_SIDEBAR_HIDE: (state, status) => { + state.sidebar.hide = status + } +} + +const actions = { + toggleSideBar({ commit }) { + commit('TOGGLE_SIDEBAR') + }, + closeSideBar({ commit }, { withoutAnimation }) { + commit('CLOSE_SIDEBAR', withoutAnimation) + }, + toggleDevice({ commit }, device) { + commit('TOGGLE_DEVICE', device) + }, + setSize({ commit }, size) { + commit('SET_SIZE', size) + }, + toggleSideBarHide({ commit }, status) { + commit('SET_SIDEBAR_HIDE', status) + } +} + +export default { + namespaced: true, + state, + mutations, + actions +} diff --git a/ruoyi-ui/src/store/modules/dict.js b/ruoyi-ui/src/store/modules/dict.js new file mode 100644 index 0000000000000000000000000000000000000000..7a1b2f02bc259eee779a707e9118b879d0860049 --- /dev/null +++ b/ruoyi-ui/src/store/modules/dict.js @@ -0,0 +1,50 @@ +const state = { + dict: new Array() +} +const mutations = { + SET_DICT: (state, { key, value }) => { + if (key !== null && key !== "") { + state.dict.push({ + key: key, + value: value + }) + } + }, + REMOVE_DICT: (state, key) => { + try { + for (let i = 0; i < state.dict.length; i++) { + if (state.dict[i].key == key) { + state.dict.splice(i, 1) + return true + } + } + } catch (e) { + } + }, + CLEAN_DICT: (state) => { + state.dict = new Array() + } +} + +const actions = { + // 璁剧疆瀛楀吀 + setDict({ commit }, data) { + commit('SET_DICT', data) + }, + // 鍒犻櫎瀛楀吀 + removeDict({ commit }, key) { + commit('REMOVE_DICT', key) + }, + // 娓呯┖瀛楀吀 + cleanDict({ commit }) { + commit('CLEAN_DICT') + } +} + +export default { + namespaced: true, + state, + mutations, + actions +} + diff --git a/ruoyi-ui/src/store/modules/permission.js b/ruoyi-ui/src/store/modules/permission.js new file mode 100644 index 0000000000000000000000000000000000000000..b3c216a832aa57c8c2e54e2ed30360b01734c88d --- /dev/null +++ b/ruoyi-ui/src/store/modules/permission.js @@ -0,0 +1,137 @@ +import auth from '@/plugins/auth' +import router, { constantRoutes, dynamicRoutes } from '@/router' +import { getRouters } from '@/api/menu' +import Layout from '@/layout/index' +import ParentView from '@/components/ParentView' +import InnerLink from '@/layout/components/InnerLink' + +const permission = { + state: { + routes: [], + addRoutes: [], + defaultRoutes: [], + topbarRouters: [], + sidebarRouters: [] + }, + mutations: { + SET_ROUTES: (state, routes) => { + state.addRoutes = routes + state.routes = constantRoutes.concat(routes) + }, + SET_DEFAULT_ROUTES: (state, routes) => { + state.defaultRoutes = constantRoutes.concat(routes) + }, + SET_TOPBAR_ROUTES: (state, routes) => { + state.topbarRouters = routes + }, + SET_SIDEBAR_ROUTERS: (state, routes) => { + state.sidebarRouters = routes + }, + }, + actions: { + // 鐢熸垚璺敱 + GenerateRoutes({ commit }) { + return new Promise(resolve => { + // 鍚戝悗绔姹傝矾鐢辨暟鎹 + getRouters().then(res => { + const sdata = JSON.parse(JSON.stringify(res.data)) + const rdata = JSON.parse(JSON.stringify(res.data)) + const sidebarRoutes = filterAsyncRouter(sdata) + const rewriteRoutes = filterAsyncRouter(rdata, false, true) + const asyncRoutes = filterDynamicRoutes(dynamicRoutes); + rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true }) + router.addRoutes(asyncRoutes); + commit('SET_ROUTES', rewriteRoutes) + commit('SET_SIDEBAR_ROUTERS', constantRoutes.concat(sidebarRoutes)) + commit('SET_DEFAULT_ROUTES', sidebarRoutes) + commit('SET_TOPBAR_ROUTES', sidebarRoutes) + resolve(rewriteRoutes) + }) + }) + } + } +} + +// 閬嶅巻鍚庡彴浼犳潵鐨勮矾鐢卞瓧绗︿覆锛岃浆鎹负缁勪欢瀵硅薄 +function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) { + return asyncRouterMap.filter(route => { + if (type && route.children) { + route.children = filterChildren(route.children) + } + if (route.component) { + // Layout ParentView 缁勪欢鐗规畩澶勭悊 + if (route.component === 'Layout') { + route.component = Layout + } else if (route.component === 'ParentView') { + route.component = ParentView + } else if (route.component === 'InnerLink') { + route.component = InnerLink + } else { + route.component = loadView(route.component) + } + } + if (route.children != null && route.children && route.children.length) { + route.children = filterAsyncRouter(route.children, route, type) + } else { + delete route['children'] + delete route['redirect'] + } + return true + }) +} + +function filterChildren(childrenMap, lastRouter = false) { + var children = [] + childrenMap.forEach((el, index) => { + if (el.children && el.children.length) { + if (el.component === 'ParentView' && !lastRouter) { + el.children.forEach(c => { + c.path = el.path + '/' + c.path + if (c.children && c.children.length) { + children = children.concat(filterChildren(c.children, c)) + return + } + children.push(c) + }) + return + } + } + if (lastRouter) { + el.path = lastRouter.path + '/' + el.path + if (el.children && el.children.length) { + children = children.concat(filterChildren(el.children, el)) + return + } + } + children = children.concat(el) + }) + return children +} + +// 鍔ㄦ佽矾鐢遍亶鍘嗭紝楠岃瘉鏄惁鍏峰鏉冮檺 +export function filterDynamicRoutes(routes) { + const res = [] + routes.forEach(route => { + if (route.permissions) { + if (auth.hasPermiOr(route.permissions)) { + res.push(route) + } + } else if (route.roles) { + if (auth.hasRoleOr(route.roles)) { + res.push(route) + } + } + }) + return res +} + +export const loadView = (view) => { + if (process.env.NODE_ENV === 'development') { + return (resolve) => require([`@/views/${view}`], resolve) + } else { + // 浣跨敤 import 瀹炵幇鐢熶骇鐜鐨勮矾鐢辨噿鍔犺浇 + return () => import(`@/views/${view}`) + } +} + +export default permission diff --git a/ruoyi-ui/src/store/modules/settings.js b/ruoyi-ui/src/store/modules/settings.js new file mode 100644 index 0000000000000000000000000000000000000000..2455a1e27408c663e1d2a9caee49cefd431216f1 --- /dev/null +++ b/ruoyi-ui/src/store/modules/settings.js @@ -0,0 +1,42 @@ +import defaultSettings from '@/settings' + +const { sideTheme, showSettings, topNav, tagsView, fixedHeader, sidebarLogo, dynamicTitle } = defaultSettings + +const storageSetting = JSON.parse(localStorage.getItem('layout-setting')) || '' +const state = { + title: '', + theme: storageSetting.theme || '#409EFF', + sideTheme: storageSetting.sideTheme || sideTheme, + showSettings: showSettings, + topNav: storageSetting.topNav === undefined ? topNav : storageSetting.topNav, + tagsView: storageSetting.tagsView === undefined ? tagsView : storageSetting.tagsView, + fixedHeader: storageSetting.fixedHeader === undefined ? fixedHeader : storageSetting.fixedHeader, + sidebarLogo: storageSetting.sidebarLogo === undefined ? sidebarLogo : storageSetting.sidebarLogo, + dynamicTitle: storageSetting.dynamicTitle === undefined ? dynamicTitle : storageSetting.dynamicTitle +} +const mutations = { + CHANGE_SETTING: (state, { key, value }) => { + if (state.hasOwnProperty(key)) { + state[key] = value + } + } +} + +const actions = { + // 淇敼甯冨眬璁剧疆 + changeSetting({ commit }, data) { + commit('CHANGE_SETTING', data) + }, + // 璁剧疆缃戦〉鏍囬 + setTitle({ commit }, title) { + state.title = title + } +} + +export default { + namespaced: true, + state, + mutations, + actions +} + diff --git a/ruoyi-ui/src/store/modules/tagsView.js b/ruoyi-ui/src/store/modules/tagsView.js new file mode 100644 index 0000000000000000000000000000000000000000..5fc011ca894dd3935bd7cf15f328d6a6e71d2500 --- /dev/null +++ b/ruoyi-ui/src/store/modules/tagsView.js @@ -0,0 +1,228 @@ +const state = { + visitedViews: [], + cachedViews: [], + iframeViews: [] +} + +const mutations = { + ADD_IFRAME_VIEW: (state, view) => { + if (state.iframeViews.some(v => v.path === view.path)) return + state.iframeViews.push( + Object.assign({}, view, { + title: view.meta.title || 'no-name' + }) + ) + }, + ADD_VISITED_VIEW: (state, view) => { + if (state.visitedViews.some(v => v.path === view.path)) return + state.visitedViews.push( + Object.assign({}, view, { + title: view.meta.title || 'no-name' + }) + ) + }, + ADD_CACHED_VIEW: (state, view) => { + if (state.cachedViews.includes(view.name)) return + if (view.meta && !view.meta.noCache) { + state.cachedViews.push(view.name) + } + }, + DEL_VISITED_VIEW: (state, view) => { + for (const [i, v] of state.visitedViews.entries()) { + if (v.path === view.path) { + state.visitedViews.splice(i, 1) + break + } + } + state.iframeViews = state.iframeViews.filter(item => item.path !== view.path) + }, + DEL_IFRAME_VIEW: (state, view) => { + state.iframeViews = state.iframeViews.filter(item => item.path !== view.path) + }, + DEL_CACHED_VIEW: (state, view) => { + const index = state.cachedViews.indexOf(view.name) + index > -1 && state.cachedViews.splice(index, 1) + }, + + DEL_OTHERS_VISITED_VIEWS: (state, view) => { + state.visitedViews = state.visitedViews.filter(v => { + return v.meta.affix || v.path === view.path + }) + state.iframeViews = state.iframeViews.filter(item => item.path === view.path) + }, + DEL_OTHERS_CACHED_VIEWS: (state, view) => { + const index = state.cachedViews.indexOf(view.name) + if (index > -1) { + state.cachedViews = state.cachedViews.slice(index, index + 1) + } else { + state.cachedViews = [] + } + }, + DEL_ALL_VISITED_VIEWS: state => { + // keep affix tags + const affixTags = state.visitedViews.filter(tag => tag.meta.affix) + state.visitedViews = affixTags + state.iframeViews = [] + }, + DEL_ALL_CACHED_VIEWS: state => { + state.cachedViews = [] + }, + UPDATE_VISITED_VIEW: (state, view) => { + for (let v of state.visitedViews) { + if (v.path === view.path) { + v = Object.assign(v, view) + break + } + } + }, + DEL_RIGHT_VIEWS: (state, view) => { + const index = state.visitedViews.findIndex(v => v.path === view.path) + if (index === -1) { + return + } + state.visitedViews = state.visitedViews.filter((item, idx) => { + if (idx <= index || (item.meta && item.meta.affix)) { + return true + } + const i = state.cachedViews.indexOf(item.name) + if (i > -1) { + state.cachedViews.splice(i, 1) + } + if(item.meta.link) { + const fi = state.iframeViews.findIndex(v => v.path === item.path) + state.iframeViews.splice(fi, 1) + } + return false + }) + }, + DEL_LEFT_VIEWS: (state, view) => { + const index = state.visitedViews.findIndex(v => v.path === view.path) + if (index === -1) { + return + } + state.visitedViews = state.visitedViews.filter((item, idx) => { + if (idx >= index || (item.meta && item.meta.affix)) { + return true + } + const i = state.cachedViews.indexOf(item.name) + if (i > -1) { + state.cachedViews.splice(i, 1) + } + if(item.meta.link) { + const fi = state.iframeViews.findIndex(v => v.path === item.path) + state.iframeViews.splice(fi, 1) + } + return false + }) + } +} + +const actions = { + addView({ dispatch }, view) { + dispatch('addVisitedView', view) + dispatch('addCachedView', view) + }, + addIframeView({ commit }, view) { + commit('ADD_IFRAME_VIEW', view) + }, + addVisitedView({ commit }, view) { + commit('ADD_VISITED_VIEW', view) + }, + addCachedView({ commit }, view) { + commit('ADD_CACHED_VIEW', view) + }, + delView({ dispatch, state }, view) { + return new Promise(resolve => { + dispatch('delVisitedView', view) + dispatch('delCachedView', view) + resolve({ + visitedViews: [...state.visitedViews], + cachedViews: [...state.cachedViews] + }) + }) + }, + delVisitedView({ commit, state }, view) { + return new Promise(resolve => { + commit('DEL_VISITED_VIEW', view) + resolve([...state.visitedViews]) + }) + }, + delIframeView({ commit, state }, view) { + return new Promise(resolve => { + commit('DEL_IFRAME_VIEW', view) + resolve([...state.iframeViews]) + }) + }, + delCachedView({ commit, state }, view) { + return new Promise(resolve => { + commit('DEL_CACHED_VIEW', view) + resolve([...state.cachedViews]) + }) + }, + delOthersViews({ dispatch, state }, view) { + return new Promise(resolve => { + dispatch('delOthersVisitedViews', view) + dispatch('delOthersCachedViews', view) + resolve({ + visitedViews: [...state.visitedViews], + cachedViews: [...state.cachedViews] + }) + }) + }, + delOthersVisitedViews({ commit, state }, view) { + return new Promise(resolve => { + commit('DEL_OTHERS_VISITED_VIEWS', view) + resolve([...state.visitedViews]) + }) + }, + delOthersCachedViews({ commit, state }, view) { + return new Promise(resolve => { + commit('DEL_OTHERS_CACHED_VIEWS', view) + resolve([...state.cachedViews]) + }) + }, + delAllViews({ dispatch, state }, view) { + return new Promise(resolve => { + dispatch('delAllVisitedViews', view) + dispatch('delAllCachedViews', view) + resolve({ + visitedViews: [...state.visitedViews], + cachedViews: [...state.cachedViews] + }) + }) + }, + delAllVisitedViews({ commit, state }) { + return new Promise(resolve => { + commit('DEL_ALL_VISITED_VIEWS') + resolve([...state.visitedViews]) + }) + }, + delAllCachedViews({ commit, state }) { + return new Promise(resolve => { + commit('DEL_ALL_CACHED_VIEWS') + resolve([...state.cachedViews]) + }) + }, + updateVisitedView({ commit }, view) { + commit('UPDATE_VISITED_VIEW', view) + }, + delRightTags({ commit }, view) { + return new Promise(resolve => { + commit('DEL_RIGHT_VIEWS', view) + resolve([...state.visitedViews]) + }) + }, + delLeftTags({ commit }, view) { + return new Promise(resolve => { + commit('DEL_LEFT_VIEWS', view) + resolve([...state.visitedViews]) + }) + }, +} + +export default { + namespaced: true, + state, + mutations, + actions +} diff --git a/ruoyi-ui/src/store/modules/user.js b/ruoyi-ui/src/store/modules/user.js new file mode 100644 index 0000000000000000000000000000000000000000..7216bc998a86fc7d00bbcf8278555bf56197fe09 --- /dev/null +++ b/ruoyi-ui/src/store/modules/user.js @@ -0,0 +1,101 @@ +import { login, logout, getInfo } from '@/api/login' +import { getToken, setToken, removeToken } from '@/utils/auth' + +const user = { + state: { + token: getToken(), + id: '', + name: '', + avatar: '', + roles: [], + permissions: [] + }, + + mutations: { + SET_TOKEN: (state, token) => { + state.token = token + }, + SET_ID: (state, id) => { + state.id = id + }, + SET_NAME: (state, name) => { + state.name = name + }, + SET_AVATAR: (state, avatar) => { + state.avatar = avatar + }, + SET_ROLES: (state, roles) => { + state.roles = roles + }, + SET_PERMISSIONS: (state, permissions) => { + state.permissions = permissions + } + }, + + actions: { + // 鐧诲綍 + Login({ commit }, userInfo) { + const username = userInfo.username.trim() + const password = userInfo.password + const code = userInfo.code + const uuid = userInfo.uuid + return new Promise((resolve, reject) => { + login(username, password, code, uuid).then(res => { + setToken(res.token) + commit('SET_TOKEN', res.token) + resolve() + }).catch(error => { + reject(error) + }) + }) + }, + + // 鑾峰彇鐢ㄦ埛淇℃伅 + GetInfo({ commit, state }) { + return new Promise((resolve, reject) => { + getInfo().then(res => { + const user = res.user + const avatar = (user.avatar == "" || user.avatar == null) ? require("@/assets/images/profile.jpg") : user.avatar; + if (res.roles && res.roles.length > 0) { // 楠岃瘉杩斿洖鐨剅oles鏄惁鏄竴涓潪绌烘暟缁 + commit('SET_ROLES', res.roles) + commit('SET_PERMISSIONS', res.permissions) + } else { + commit('SET_ROLES', ['ROLE_DEFAULT']) + } + commit('SET_ID', user.userId) + commit('SET_NAME', user.userName) + commit('SET_AVATAR', avatar) + resolve(res) + }).catch(error => { + reject(error) + }) + }) + }, + + // 閫鍑虹郴缁 + LogOut({ commit, state }) { + return new Promise((resolve, reject) => { + logout(state.token).then(() => { + commit('SET_TOKEN', '') + commit('SET_ROLES', []) + commit('SET_PERMISSIONS', []) + removeToken() + resolve() + }).catch(error => { + reject(error) + }) + }) + }, + + // 鍓嶇 鐧诲嚭 + FedLogOut({ commit }) { + return new Promise(resolve => { + commit('SET_TOKEN', '') + removeToken() + resolve() + }) + } + } +} + +export default user diff --git a/ruoyi-ui/src/utils/auth.js b/ruoyi-ui/src/utils/auth.js new file mode 100644 index 0000000000000000000000000000000000000000..08a43d6e299227a695497dd2d8a312096315958b --- /dev/null +++ b/ruoyi-ui/src/utils/auth.js @@ -0,0 +1,15 @@ +import Cookies from 'js-cookie' + +const TokenKey = 'Admin-Token' + +export function getToken() { + return Cookies.get(TokenKey) +} + +export function setToken(token) { + return Cookies.set(TokenKey, token) +} + +export function removeToken() { + return Cookies.remove(TokenKey) +} diff --git a/ruoyi-ui/src/utils/dict/Dict.js b/ruoyi-ui/src/utils/dict/Dict.js new file mode 100644 index 0000000000000000000000000000000000000000..104bd6e72cdc184c6478291e485a1c8489291167 --- /dev/null +++ b/ruoyi-ui/src/utils/dict/Dict.js @@ -0,0 +1,82 @@ +import Vue from 'vue' +import { mergeRecursive } from "@/utils/ruoyi"; +import DictMeta from './DictMeta' +import DictData from './DictData' + +const DEFAULT_DICT_OPTIONS = { + types: [], +} + +/** + * @classdesc 瀛楀吀 + * @property {Object} label 鏍囩瀵硅薄锛屽唴閮ㄥ睘鎬у悕涓哄瓧鍏哥被鍨嬪悕绉 + * @property {Object} dict 瀛楁鏁扮粍锛屽唴閮ㄥ睘鎬у悕涓哄瓧鍏哥被鍨嬪悕绉 + * @property {Array.} _dictMetas 瀛楀吀鍏冩暟鎹暟缁 + */ +export default class Dict { + constructor() { + this.owner = null + this.label = {} + this.type = {} + } + + init(options) { + if (options instanceof Array) { + options = { types: options } + } + const opts = mergeRecursive(DEFAULT_DICT_OPTIONS, options) + if (opts.types === undefined) { + throw new Error('need dict types') + } + const ps = [] + this._dictMetas = opts.types.map(t => DictMeta.parse(t)) + this._dictMetas.forEach(dictMeta => { + const type = dictMeta.type + Vue.set(this.label, type, {}) + Vue.set(this.type, type, []) + if (dictMeta.lazy) { + return + } + ps.push(loadDict(this, dictMeta)) + }) + return Promise.all(ps) + } + + /** + * 閲嶆柊鍔犺浇瀛楀吀 + * @param {String} type 瀛楀吀绫诲瀷 + */ + reloadDict(type) { + const dictMeta = this._dictMetas.find(e => e.type === type) + if (dictMeta === undefined) { + return Promise.reject(`the dict meta of ${type} was not found`) + } + return loadDict(this, dictMeta) + } +} + +/** + * 鍔犺浇瀛楀吀 + * @param {Dict} dict 瀛楀吀 + * @param {DictMeta} dictMeta 瀛楀吀鍏冩暟鎹 + * @returns {Promise} + */ +function loadDict(dict, dictMeta) { + return dictMeta.request(dictMeta) + .then(response => { + const type = dictMeta.type + let dicts = dictMeta.responseConverter(response, dictMeta) + if (!(dicts instanceof Array)) { + console.error('the return of responseConverter must be Array.') + dicts = [] + } else if (dicts.filter(d => d instanceof DictData).length !== dicts.length) { + console.error('the type of elements in dicts must be DictData') + dicts = [] + } + dict.type[type].splice(0, Number.MAX_SAFE_INTEGER, ...dicts) + dicts.forEach(d => { + Vue.set(dict.label[type], d.value, d.label) + }) + return dicts + }) +} diff --git a/ruoyi-ui/src/utils/dict/DictConverter.js b/ruoyi-ui/src/utils/dict/DictConverter.js new file mode 100644 index 0000000000000000000000000000000000000000..0cf5df8636449bb8d5be54d7850aae2aab1a8520 --- /dev/null +++ b/ruoyi-ui/src/utils/dict/DictConverter.js @@ -0,0 +1,17 @@ +import DictOptions from './DictOptions' +import DictData from './DictData' + +export default function(dict, dictMeta) { + const label = determineDictField(dict, dictMeta.labelField, ...DictOptions.DEFAULT_LABEL_FIELDS) + const value = determineDictField(dict, dictMeta.valueField, ...DictOptions.DEFAULT_VALUE_FIELDS) + return new DictData(dict[label], dict[value], dict) +} + +/** + * 纭畾瀛楀吀瀛楁 + * @param {DictData} dict + * @param {...String} fields + */ +function determineDictField(dict, ...fields) { + return fields.find(f => Object.prototype.hasOwnProperty.call(dict, f)) +} diff --git a/ruoyi-ui/src/utils/dict/DictData.js b/ruoyi-ui/src/utils/dict/DictData.js new file mode 100644 index 0000000000000000000000000000000000000000..afc763e8017f76226b5c281ad3b1bbdb82d3da84 --- /dev/null +++ b/ruoyi-ui/src/utils/dict/DictData.js @@ -0,0 +1,13 @@ +/** + * @classdesc 瀛楀吀鏁版嵁 + * @property {String} label 鏍囩 + * @property {*} value 鏍囩 + * @property {Object} raw 鍘熷鏁版嵁 + */ +export default class DictData { + constructor(label, value, raw) { + this.label = label + this.value = value + this.raw = raw + } +} diff --git a/ruoyi-ui/src/utils/dict/DictMeta.js b/ruoyi-ui/src/utils/dict/DictMeta.js new file mode 100644 index 0000000000000000000000000000000000000000..9779daa43fe3b676c3c4a843ec0cff6441730f38 --- /dev/null +++ b/ruoyi-ui/src/utils/dict/DictMeta.js @@ -0,0 +1,38 @@ +import { mergeRecursive } from "@/utils/ruoyi"; +import DictOptions from './DictOptions' + +/** + * @classdesc 瀛楀吀鍏冩暟鎹 + * @property {String} type 绫诲瀷 + * @property {Function} request 璇锋眰 + * @property {String} label 鏍囩瀛楁 + * @property {String} value 鍊煎瓧娈 + */ +export default class DictMeta { + constructor(options) { + this.type = options.type + this.request = options.request + this.responseConverter = options.responseConverter + this.labelField = options.labelField + this.valueField = options.valueField + this.lazy = options.lazy === true + } +} + + +/** + * 瑙f瀽瀛楀吀鍏冩暟鎹 + * @param {Object} options + * @returns {DictMeta} + */ +DictMeta.parse= function(options) { + let opts = null + if (typeof options === 'string') { + opts = DictOptions.metas[options] || {} + opts.type = options + } else if (typeof options === 'object') { + opts = options + } + opts = mergeRecursive(DictOptions.metas['*'], opts) + return new DictMeta(opts) +} diff --git a/ruoyi-ui/src/utils/dict/DictOptions.js b/ruoyi-ui/src/utils/dict/DictOptions.js new file mode 100644 index 0000000000000000000000000000000000000000..338a94e1a8bcc5b4e88606a1d7153c3b8f24e039 --- /dev/null +++ b/ruoyi-ui/src/utils/dict/DictOptions.js @@ -0,0 +1,51 @@ +import { mergeRecursive } from "@/utils/ruoyi"; +import dictConverter from './DictConverter' + +export const options = { + metas: { + '*': { + /** + * 瀛楀吀璇锋眰锛屾柟娉曠鍚嶄负function(dictMeta: DictMeta): Promise + */ + request: (dictMeta) => { + console.log(`load dict ${dictMeta.type}`) + return Promise.resolve([]) + }, + /** + * 瀛楀吀鍝嶅簲鏁版嵁杞崲鍣紝鏂规硶绛惧悕涓篺unction(response: Object, dictMeta: DictMeta): DictData + */ + responseConverter, + labelField: 'label', + valueField: 'value', + }, + }, + /** + * 榛樿鏍囩瀛楁 + */ + DEFAULT_LABEL_FIELDS: ['label', 'name', 'title'], + /** + * 榛樿鍊煎瓧娈 + */ + DEFAULT_VALUE_FIELDS: ['value', 'id', 'uid', 'key'], +} + +/** + * 鏄犲皠瀛楀吀 + * @param {Object} response 瀛楀吀鏁版嵁 + * @param {DictMeta} dictMeta 瀛楀吀鍏冩暟鎹 + * @returns {DictData} + */ +function responseConverter(response, dictMeta) { + const dicts = response.content instanceof Array ? response.content : response + if (dicts === undefined) { + console.warn(`no dict data of "${dictMeta.type}" found in the response`) + return [] + } + return dicts.map(d => dictConverter(d, dictMeta)) +} + +export function mergeOptions(src) { + mergeRecursive(options, src) +} + +export default options diff --git a/ruoyi-ui/src/utils/dict/index.js b/ruoyi-ui/src/utils/dict/index.js new file mode 100644 index 0000000000000000000000000000000000000000..215eb9e052d78b5894ec2b53ae1d096a54aebdf8 --- /dev/null +++ b/ruoyi-ui/src/utils/dict/index.js @@ -0,0 +1,33 @@ +import Dict from './Dict' +import { mergeOptions } from './DictOptions' + +export default function(Vue, options) { + mergeOptions(options) + Vue.mixin({ + data() { + if (this.$options === undefined || this.$options.dicts === undefined || this.$options.dicts === null) { + return {} + } + const dict = new Dict() + dict.owner = this + return { + dict + } + }, + created() { + if (!(this.dict instanceof Dict)) { + return + } + options.onCreated && options.onCreated(this.dict) + this.dict.init(this.$options.dicts).then(() => { + options.onReady && options.onReady(this.dict) + this.$nextTick(() => { + this.$emit('dictReady', this.dict) + if (this.$options.methods && this.$options.methods.onDictReady instanceof Function) { + this.$options.methods.onDictReady.call(this, this.dict) + } + }) + }) + }, + }) +} diff --git a/ruoyi-ui/src/utils/errorCode.js b/ruoyi-ui/src/utils/errorCode.js new file mode 100644 index 0000000000000000000000000000000000000000..d2111ee1016d1f9ef4eddf3bf5710c5fb50c8f6c --- /dev/null +++ b/ruoyi-ui/src/utils/errorCode.js @@ -0,0 +1,6 @@ +export default { + '401': '璁よ瘉澶辫触锛屾棤娉曡闂郴缁熻祫婧', + '403': '褰撳墠鎿嶄綔娌℃湁鏉冮檺', + '404': '璁块棶璧勬簮涓嶅瓨鍦', + 'default': '绯荤粺鏈煡閿欒锛岃鍙嶉缁欑鐞嗗憳' +} diff --git a/ruoyi-ui/src/utils/generator/config.js b/ruoyi-ui/src/utils/generator/config.js new file mode 100644 index 0000000000000000000000000000000000000000..7abf227d5044f41598f7b63de6dc9d3836f5d8a4 --- /dev/null +++ b/ruoyi-ui/src/utils/generator/config.js @@ -0,0 +1,438 @@ +export const formConf = { + formRef: 'elForm', + formModel: 'formData', + size: 'medium', + labelPosition: 'right', + labelWidth: 100, + formRules: 'rules', + gutter: 15, + disabled: false, + span: 24, + formBtns: true +} + +export const inputComponents = [ + { + label: '鍗曡鏂囨湰', + tag: 'el-input', + tagIcon: 'input', + placeholder: '璇疯緭鍏', + defaultValue: undefined, + span: 24, + labelWidth: null, + style: { width: '100%' }, + clearable: true, + prepend: '', + append: '', + 'prefix-icon': '', + 'suffix-icon': '', + maxlength: null, + 'show-word-limit': false, + readonly: false, + disabled: false, + required: true, + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/input' + }, + { + label: '澶氳鏂囨湰', + tag: 'el-input', + tagIcon: 'textarea', + type: 'textarea', + placeholder: '璇疯緭鍏', + defaultValue: undefined, + span: 24, + labelWidth: null, + autosize: { + minRows: 4, + maxRows: 4 + }, + style: { width: '100%' }, + maxlength: null, + 'show-word-limit': false, + readonly: false, + disabled: false, + required: true, + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/input' + }, + { + label: '瀵嗙爜', + tag: 'el-input', + tagIcon: 'password', + placeholder: '璇疯緭鍏', + defaultValue: undefined, + span: 24, + 'show-password': true, + labelWidth: null, + style: { width: '100%' }, + clearable: true, + prepend: '', + append: '', + 'prefix-icon': '', + 'suffix-icon': '', + maxlength: null, + 'show-word-limit': false, + readonly: false, + disabled: false, + required: true, + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/input' + }, + { + label: '璁℃暟鍣', + tag: 'el-input-number', + tagIcon: 'number', + placeholder: '', + defaultValue: undefined, + span: 24, + labelWidth: null, + min: undefined, + max: undefined, + step: undefined, + 'step-strictly': false, + precision: undefined, + 'controls-position': '', + disabled: false, + required: true, + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/input-number' + } +] + +export const selectComponents = [ + { + label: '涓嬫媺閫夋嫨', + tag: 'el-select', + tagIcon: 'select', + placeholder: '璇烽夋嫨', + defaultValue: undefined, + span: 24, + labelWidth: null, + style: { width: '100%' }, + clearable: true, + disabled: false, + required: true, + filterable: false, + multiple: false, + options: [{ + label: '閫夐」涓', + value: 1 + }, { + label: '閫夐」浜', + value: 2 + }], + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/select' + }, + { + label: '绾ц仈閫夋嫨', + tag: 'el-cascader', + tagIcon: 'cascader', + placeholder: '璇烽夋嫨', + defaultValue: [], + span: 24, + labelWidth: null, + style: { width: '100%' }, + props: { + props: { + multiple: false + } + }, + 'show-all-levels': true, + disabled: false, + clearable: true, + filterable: false, + required: true, + options: [{ + id: 1, + value: 1, + label: '閫夐」1', + children: [{ + id: 2, + value: 2, + label: '閫夐」1-1' + }] + }], + dataType: 'dynamic', + labelKey: 'label', + valueKey: 'value', + childrenKey: 'children', + separator: '/', + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/cascader' + }, + { + label: '鍗曢夋缁', + tag: 'el-radio-group', + tagIcon: 'radio', + defaultValue: undefined, + span: 24, + labelWidth: null, + style: {}, + optionType: 'default', + border: false, + size: 'medium', + disabled: false, + required: true, + options: [{ + label: '閫夐」涓', + value: 1 + }, { + label: '閫夐」浜', + value: 2 + }], + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/radio' + }, + { + label: '澶氶夋缁', + tag: 'el-checkbox-group', + tagIcon: 'checkbox', + defaultValue: [], + span: 24, + labelWidth: null, + style: {}, + optionType: 'default', + border: false, + size: 'medium', + disabled: false, + required: true, + options: [{ + label: '閫夐」涓', + value: 1 + }, { + label: '閫夐」浜', + value: 2 + }], + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/checkbox' + }, + { + label: '寮鍏', + tag: 'el-switch', + tagIcon: 'switch', + defaultValue: false, + span: 24, + labelWidth: null, + style: {}, + disabled: false, + required: true, + 'active-text': '', + 'inactive-text': '', + 'active-color': null, + 'inactive-color': null, + 'active-value': true, + 'inactive-value': false, + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/switch' + }, + { + label: '婊戝潡', + tag: 'el-slider', + tagIcon: 'slider', + defaultValue: null, + span: 24, + labelWidth: null, + disabled: false, + required: true, + min: 0, + max: 100, + step: 1, + 'show-stops': false, + range: false, + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/slider' + }, + { + label: '鏃堕棿閫夋嫨', + tag: 'el-time-picker', + tagIcon: 'time', + placeholder: '璇烽夋嫨', + defaultValue: null, + span: 24, + labelWidth: null, + style: { width: '100%' }, + disabled: false, + clearable: true, + required: true, + 'picker-options': { + selectableRange: '00:00:00-23:59:59' + }, + format: 'HH:mm:ss', + 'value-format': 'HH:mm:ss', + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/time-picker' + }, + { + label: '鏃堕棿鑼冨洿', + tag: 'el-time-picker', + tagIcon: 'time-range', + defaultValue: null, + span: 24, + labelWidth: null, + style: { width: '100%' }, + disabled: false, + clearable: true, + required: true, + 'is-range': true, + 'range-separator': '鑷', + 'start-placeholder': '寮濮嬫椂闂', + 'end-placeholder': '缁撴潫鏃堕棿', + format: 'HH:mm:ss', + 'value-format': 'HH:mm:ss', + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/time-picker' + }, + { + label: '鏃ユ湡閫夋嫨', + tag: 'el-date-picker', + tagIcon: 'date', + placeholder: '璇烽夋嫨', + defaultValue: null, + type: 'date', + span: 24, + labelWidth: null, + style: { width: '100%' }, + disabled: false, + clearable: true, + required: true, + format: 'yyyy-MM-dd', + 'value-format': 'yyyy-MM-dd', + readonly: false, + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/date-picker' + }, + { + label: '鏃ユ湡鑼冨洿', + tag: 'el-date-picker', + tagIcon: 'date-range', + defaultValue: null, + span: 24, + labelWidth: null, + style: { width: '100%' }, + type: 'daterange', + 'range-separator': '鑷', + 'start-placeholder': '寮濮嬫棩鏈', + 'end-placeholder': '缁撴潫鏃ユ湡', + disabled: false, + clearable: true, + required: true, + format: 'yyyy-MM-dd', + 'value-format': 'yyyy-MM-dd', + readonly: false, + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/date-picker' + }, + { + label: '璇勫垎', + tag: 'el-rate', + tagIcon: 'rate', + defaultValue: 0, + span: 24, + labelWidth: null, + style: {}, + max: 5, + 'allow-half': false, + 'show-text': false, + 'show-score': false, + disabled: false, + required: true, + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/rate' + }, + { + label: '棰滆壊閫夋嫨', + tag: 'el-color-picker', + tagIcon: 'color', + defaultValue: null, + labelWidth: null, + 'show-alpha': false, + 'color-format': '', + disabled: false, + required: true, + size: 'medium', + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/color-picker' + }, + { + label: '涓婁紶', + tag: 'el-upload', + tagIcon: 'upload', + action: 'https://jsonplaceholder.typicode.com/posts/', + defaultValue: null, + labelWidth: null, + disabled: false, + required: true, + accept: '', + name: 'file', + 'auto-upload': true, + showTip: false, + buttonText: '鐐瑰嚮涓婁紶', + fileSize: 2, + sizeUnit: 'MB', + 'list-type': 'text', + multiple: false, + regList: [], + changeTag: true, + document: 'https://element.eleme.cn/#/zh-CN/component/upload' + } +] + +export const layoutComponents = [ + { + layout: 'rowFormItem', + tagIcon: 'row', + type: 'default', + justify: 'start', + align: 'top', + label: '琛屽鍣', + layoutTree: true, + children: [], + document: 'https://element.eleme.cn/#/zh-CN/component/layout' + }, + { + layout: 'colFormItem', + label: '鎸夐挳', + changeTag: true, + labelWidth: null, + tag: 'el-button', + tagIcon: 'button', + span: 24, + default: '涓昏鎸夐挳', + type: 'primary', + icon: 'el-icon-search', + size: 'medium', + disabled: false, + document: 'https://element.eleme.cn/#/zh-CN/component/button' + } +] + +// 缁勪欢rule鐨勮Е鍙戞柟寮忥紝鏃犺Е鍙戞柟寮忕殑缁勪欢涓嶇敓鎴恟ule +export const trigger = { + 'el-input': 'blur', + 'el-input-number': 'blur', + 'el-select': 'change', + 'el-radio-group': 'change', + 'el-checkbox-group': 'change', + 'el-cascader': 'change', + 'el-time-picker': 'change', + 'el-date-picker': 'change', + 'el-rate': 'change' +} diff --git a/ruoyi-ui/src/utils/generator/css.js b/ruoyi-ui/src/utils/generator/css.js new file mode 100644 index 0000000000000000000000000000000000000000..c1c62e607772c1458171aa839833275f60c6f9f2 --- /dev/null +++ b/ruoyi-ui/src/utils/generator/css.js @@ -0,0 +1,18 @@ +const styles = { + 'el-rate': '.el-rate{display: inline-block; vertical-align: text-top;}', + 'el-upload': '.el-upload__tip{line-height: 1.2;}' +} + +function addCss(cssList, el) { + const css = styles[el.tag] + css && cssList.indexOf(css) === -1 && cssList.push(css) + if (el.children) { + el.children.forEach(el2 => addCss(cssList, el2)) + } +} + +export function makeUpCss(conf) { + const cssList = [] + conf.fields.forEach(el => addCss(cssList, el)) + return cssList.join('\n') +} diff --git a/ruoyi-ui/src/utils/generator/drawingDefault.js b/ruoyi-ui/src/utils/generator/drawingDefault.js new file mode 100644 index 0000000000000000000000000000000000000000..09f133ca113955f33ac9ccfac572026d051ec302 --- /dev/null +++ b/ruoyi-ui/src/utils/generator/drawingDefault.js @@ -0,0 +1,29 @@ +export default [ + { + layout: 'colFormItem', + tagIcon: 'input', + label: '鎵嬫満鍙', + vModel: 'mobile', + formId: 6, + tag: 'el-input', + placeholder: '璇疯緭鍏ユ墜鏈哄彿', + defaultValue: '', + span: 24, + style: { width: '100%' }, + clearable: true, + prepend: '', + append: '', + 'prefix-icon': 'el-icon-mobile', + 'suffix-icon': '', + maxlength: 11, + 'show-word-limit': true, + readonly: false, + disabled: false, + required: true, + changeTag: true, + regList: [{ + pattern: '/^1(3|4|5|7|8|9)\\d{9}$/', + message: '鎵嬫満鍙锋牸寮忛敊璇' + }] + } +] diff --git a/ruoyi-ui/src/utils/generator/html.js b/ruoyi-ui/src/utils/generator/html.js new file mode 100644 index 0000000000000000000000000000000000000000..9bcc5361d1fd03c489ceb4e7d452d8865b467532 --- /dev/null +++ b/ruoyi-ui/src/utils/generator/html.js @@ -0,0 +1,359 @@ +/* eslint-disable max-len */ +import { trigger } from './config' + +let confGlobal +let someSpanIsNot24 + +export function dialogWrapper(str) { + return ` + ${str} +
+ 鍙栨秷 + 纭畾 +
+
` +} + +export function vueTemplate(str) { + return `` +} + +export function vueScript(str) { + return `` +} + +export function cssStyle(cssStr) { + return `` +} + +function buildFormTemplate(conf, child, type) { + let labelPosition = '' + if (conf.labelPosition !== 'right') { + labelPosition = `label-position="${conf.labelPosition}"` + } + const disabled = conf.disabled ? `:disabled="${conf.disabled}"` : '' + let str = ` + ${child} + ${buildFromBtns(conf, type)} + ` + if (someSpanIsNot24) { + str = ` + ${str} + ` + } + return str +} + +function buildFromBtns(conf, type) { + let str = '' + if (conf.formBtns && type === 'file') { + str = ` + 鎻愪氦 + 閲嶇疆 + ` + if (someSpanIsNot24) { + str = ` + ${str} + ` + } + } + return str +} + +// span涓嶄负24鐨勭敤el-col鍖呰9 +function colWrapper(element, str) { + if (someSpanIsNot24 || element.span !== 24) { + return ` + ${str} + ` + } + return str +} + +const layouts = { + colFormItem(element) { + let labelWidth = '' + if (element.labelWidth && element.labelWidth !== confGlobal.labelWidth) { + labelWidth = `label-width="${element.labelWidth}px"` + } + const required = !trigger[element.tag] && element.required ? 'required' : '' + const tagDom = tags[element.tag] ? tags[element.tag](element) : null + let str = ` + ${tagDom} + ` + str = colWrapper(element, str) + return str + }, + rowFormItem(element) { + const type = element.type === 'default' ? '' : `type="${element.type}"` + const justify = element.type === 'default' ? '' : `justify="${element.justify}"` + const align = element.type === 'default' ? '' : `align="${element.align}"` + const gutter = element.gutter ? `gutter="${element.gutter}"` : '' + const children = element.children.map(el => layouts[el.layout](el)) + let str = ` + ${children.join('\n')} + ` + str = colWrapper(element, str) + return str + } +} + +const tags = { + 'el-button': el => { + const { + tag, disabled + } = attrBuilder(el) + const type = el.type ? `type="${el.type}"` : '' + const icon = el.icon ? `icon="${el.icon}"` : '' + const size = el.size ? `size="${el.size}"` : '' + let child = buildElButtonChild(el) + + if (child) child = `\n${child}\n` // 鎹㈣ + return `<${el.tag} ${type} ${icon} ${size} ${disabled}>${child}` + }, + 'el-input': el => { + const { + disabled, vModel, clearable, placeholder, width + } = attrBuilder(el) + const maxlength = el.maxlength ? `:maxlength="${el.maxlength}"` : '' + const showWordLimit = el['show-word-limit'] ? 'show-word-limit' : '' + const readonly = el.readonly ? 'readonly' : '' + const prefixIcon = el['prefix-icon'] ? `prefix-icon='${el['prefix-icon']}'` : '' + const suffixIcon = el['suffix-icon'] ? `suffix-icon='${el['suffix-icon']}'` : '' + const showPassword = el['show-password'] ? 'show-password' : '' + const type = el.type ? `type="${el.type}"` : '' + const autosize = el.autosize && el.autosize.minRows + ? `:autosize="{minRows: ${el.autosize.minRows}, maxRows: ${el.autosize.maxRows}}"` + : '' + let child = buildElInputChild(el) + + if (child) child = `\n${child}\n` // 鎹㈣ + return `<${el.tag} ${vModel} ${type} ${placeholder} ${maxlength} ${showWordLimit} ${readonly} ${disabled} ${clearable} ${prefixIcon} ${suffixIcon} ${showPassword} ${autosize} ${width}>${child}` + }, + 'el-input-number': el => { + const { disabled, vModel, placeholder } = attrBuilder(el) + const controlsPosition = el['controls-position'] ? `controls-position=${el['controls-position']}` : '' + const min = el.min ? `:min='${el.min}'` : '' + const max = el.max ? `:max='${el.max}'` : '' + const step = el.step ? `:step='${el.step}'` : '' + const stepStrictly = el['step-strictly'] ? 'step-strictly' : '' + const precision = el.precision ? `:precision='${el.precision}'` : '' + + return `<${el.tag} ${vModel} ${placeholder} ${step} ${stepStrictly} ${precision} ${controlsPosition} ${min} ${max} ${disabled}>` + }, + 'el-select': el => { + const { + disabled, vModel, clearable, placeholder, width + } = attrBuilder(el) + const filterable = el.filterable ? 'filterable' : '' + const multiple = el.multiple ? 'multiple' : '' + let child = buildElSelectChild(el) + + if (child) child = `\n${child}\n` // 鎹㈣ + return `<${el.tag} ${vModel} ${placeholder} ${disabled} ${multiple} ${filterable} ${clearable} ${width}>${child}` + }, + 'el-radio-group': el => { + const { disabled, vModel } = attrBuilder(el) + const size = `size="${el.size}"` + let child = buildElRadioGroupChild(el) + + if (child) child = `\n${child}\n` // 鎹㈣ + return `<${el.tag} ${vModel} ${size} ${disabled}>${child}` + }, + 'el-checkbox-group': el => { + const { disabled, vModel } = attrBuilder(el) + const size = `size="${el.size}"` + const min = el.min ? `:min="${el.min}"` : '' + const max = el.max ? `:max="${el.max}"` : '' + let child = buildElCheckboxGroupChild(el) + + if (child) child = `\n${child}\n` // 鎹㈣ + return `<${el.tag} ${vModel} ${min} ${max} ${size} ${disabled}>${child}` + }, + 'el-switch': el => { + const { disabled, vModel } = attrBuilder(el) + const activeText = el['active-text'] ? `active-text="${el['active-text']}"` : '' + const inactiveText = el['inactive-text'] ? `inactive-text="${el['inactive-text']}"` : '' + const activeColor = el['active-color'] ? `active-color="${el['active-color']}"` : '' + const inactiveColor = el['inactive-color'] ? `inactive-color="${el['inactive-color']}"` : '' + const activeValue = el['active-value'] !== true ? `:active-value='${JSON.stringify(el['active-value'])}'` : '' + const inactiveValue = el['inactive-value'] !== false ? `:inactive-value='${JSON.stringify(el['inactive-value'])}'` : '' + + return `<${el.tag} ${vModel} ${activeText} ${inactiveText} ${activeColor} ${inactiveColor} ${activeValue} ${inactiveValue} ${disabled}>` + }, + 'el-cascader': el => { + const { + disabled, vModel, clearable, placeholder, width + } = attrBuilder(el) + const options = el.options ? `:options="${el.vModel}Options"` : '' + const props = el.props ? `:props="${el.vModel}Props"` : '' + const showAllLevels = el['show-all-levels'] ? '' : ':show-all-levels="false"' + const filterable = el.filterable ? 'filterable' : '' + const separator = el.separator === '/' ? '' : `separator="${el.separator}"` + + return `<${el.tag} ${vModel} ${options} ${props} ${width} ${showAllLevels} ${placeholder} ${separator} ${filterable} ${clearable} ${disabled}>` + }, + 'el-slider': el => { + const { disabled, vModel } = attrBuilder(el) + const min = el.min ? `:min='${el.min}'` : '' + const max = el.max ? `:max='${el.max}'` : '' + const step = el.step ? `:step='${el.step}'` : '' + const range = el.range ? 'range' : '' + const showStops = el['show-stops'] ? `:show-stops="${el['show-stops']}"` : '' + + return `<${el.tag} ${min} ${max} ${step} ${vModel} ${range} ${showStops} ${disabled}>` + }, + 'el-time-picker': el => { + const { + disabled, vModel, clearable, placeholder, width + } = attrBuilder(el) + const startPlaceholder = el['start-placeholder'] ? `start-placeholder="${el['start-placeholder']}"` : '' + const endPlaceholder = el['end-placeholder'] ? `end-placeholder="${el['end-placeholder']}"` : '' + const rangeSeparator = el['range-separator'] ? `range-separator="${el['range-separator']}"` : '' + const isRange = el['is-range'] ? 'is-range' : '' + const format = el.format ? `format="${el.format}"` : '' + const valueFormat = el['value-format'] ? `value-format="${el['value-format']}"` : '' + const pickerOptions = el['picker-options'] ? `:picker-options='${JSON.stringify(el['picker-options'])}'` : '' + + return `<${el.tag} ${vModel} ${isRange} ${format} ${valueFormat} ${pickerOptions} ${width} ${placeholder} ${startPlaceholder} ${endPlaceholder} ${rangeSeparator} ${clearable} ${disabled}>` + }, + 'el-date-picker': el => { + const { + disabled, vModel, clearable, placeholder, width + } = attrBuilder(el) + const startPlaceholder = el['start-placeholder'] ? `start-placeholder="${el['start-placeholder']}"` : '' + const endPlaceholder = el['end-placeholder'] ? `end-placeholder="${el['end-placeholder']}"` : '' + const rangeSeparator = el['range-separator'] ? `range-separator="${el['range-separator']}"` : '' + const format = el.format ? `format="${el.format}"` : '' + const valueFormat = el['value-format'] ? `value-format="${el['value-format']}"` : '' + const type = el.type === 'date' ? '' : `type="${el.type}"` + const readonly = el.readonly ? 'readonly' : '' + + return `<${el.tag} ${type} ${vModel} ${format} ${valueFormat} ${width} ${placeholder} ${startPlaceholder} ${endPlaceholder} ${rangeSeparator} ${clearable} ${readonly} ${disabled}>` + }, + 'el-rate': el => { + const { disabled, vModel } = attrBuilder(el) + const max = el.max ? `:max='${el.max}'` : '' + const allowHalf = el['allow-half'] ? 'allow-half' : '' + const showText = el['show-text'] ? 'show-text' : '' + const showScore = el['show-score'] ? 'show-score' : '' + + return `<${el.tag} ${vModel} ${allowHalf} ${showText} ${showScore} ${disabled}>` + }, + 'el-color-picker': el => { + const { disabled, vModel } = attrBuilder(el) + const size = `size="${el.size}"` + const showAlpha = el['show-alpha'] ? 'show-alpha' : '' + const colorFormat = el['color-format'] ? `color-format="${el['color-format']}"` : '' + + return `<${el.tag} ${vModel} ${size} ${showAlpha} ${colorFormat} ${disabled}>` + }, + 'el-upload': el => { + const disabled = el.disabled ? ':disabled=\'true\'' : '' + const action = el.action ? `:action="${el.vModel}Action"` : '' + const multiple = el.multiple ? 'multiple' : '' + const listType = el['list-type'] !== 'text' ? `list-type="${el['list-type']}"` : '' + const accept = el.accept ? `accept="${el.accept}"` : '' + const name = el.name !== 'file' ? `name="${el.name}"` : '' + const autoUpload = el['auto-upload'] === false ? ':auto-upload="false"' : '' + const beforeUpload = `:before-upload="${el.vModel}BeforeUpload"` + const fileList = `:file-list="${el.vModel}fileList"` + const ref = `ref="${el.vModel}"` + let child = buildElUploadChild(el) + + if (child) child = `\n${child}\n` // 鎹㈣ + return `<${el.tag} ${ref} ${fileList} ${action} ${autoUpload} ${multiple} ${beforeUpload} ${listType} ${accept} ${name} ${disabled}>${child}` + } +} + +function attrBuilder(el) { + return { + vModel: `v-model="${confGlobal.formModel}.${el.vModel}"`, + clearable: el.clearable ? 'clearable' : '', + placeholder: el.placeholder ? `placeholder="${el.placeholder}"` : '', + width: el.style && el.style.width ? ':style="{width: \'100%\'}"' : '', + disabled: el.disabled ? ':disabled=\'true\'' : '' + } +} + +// el-buttin 瀛愮骇 +function buildElButtonChild(conf) { + const children = [] + if (conf.default) { + children.push(conf.default) + } + return children.join('\n') +} + +// el-input innerHTML +function buildElInputChild(conf) { + const children = [] + if (conf.prepend) { + children.push(``) + } + if (conf.append) { + children.push(``) + } + return children.join('\n') +} + +function buildElSelectChild(conf) { + const children = [] + if (conf.options && conf.options.length) { + children.push(``) + } + return children.join('\n') +} + +function buildElRadioGroupChild(conf) { + const children = [] + if (conf.options && conf.options.length) { + const tag = conf.optionType === 'button' ? 'el-radio-button' : 'el-radio' + const border = conf.border ? 'border' : '' + children.push(`<${tag} v-for="(item, index) in ${conf.vModel}Options" :key="index" :label="item.value" :disabled="item.disabled" ${border}>{{item.label}}`) + } + return children.join('\n') +} + +function buildElCheckboxGroupChild(conf) { + const children = [] + if (conf.options && conf.options.length) { + const tag = conf.optionType === 'button' ? 'el-checkbox-button' : 'el-checkbox' + const border = conf.border ? 'border' : '' + children.push(`<${tag} v-for="(item, index) in ${conf.vModel}Options" :key="index" :label="item.value" :disabled="item.disabled" ${border}>{{item.label}}`) + } + return children.join('\n') +} + +function buildElUploadChild(conf) { + const list = [] + if (conf['list-type'] === 'picture-card') list.push('') + else list.push(`${conf.buttonText}`) + if (conf.showTip) list.push(`
鍙兘涓婁紶涓嶈秴杩 ${conf.fileSize}${conf.sizeUnit} 鐨${conf.accept}鏂囦欢
`) + return list.join('\n') +} + +export function makeUpHtml(conf, type) { + const htmlList = [] + confGlobal = conf + someSpanIsNot24 = conf.fields.some(item => item.span !== 24) + conf.fields.forEach(el => { + htmlList.push(layouts[el.layout](el)) + }) + const htmlStr = htmlList.join('\n') + + let temp = buildFormTemplate(conf, htmlStr, type) + if (type === 'dialog') { + temp = dialogWrapper(temp) + } + confGlobal = null + return temp +} diff --git a/ruoyi-ui/src/utils/generator/icon.json b/ruoyi-ui/src/utils/generator/icon.json new file mode 100644 index 0000000000000000000000000000000000000000..2d9999a31e372b76df8d32656f6530a3b79faa06 --- /dev/null +++ b/ruoyi-ui/src/utils/generator/icon.json @@ -0,0 +1 @@ +["platform-eleme","eleme","delete-solid","delete","s-tools","setting","user-solid","user","phone","phone-outline","more","more-outline","star-on","star-off","s-goods","goods","warning","warning-outline","question","info","remove","circle-plus","success","error","zoom-in","zoom-out","remove-outline","circle-plus-outline","circle-check","circle-close","s-help","help","minus","plus","check","close","picture","picture-outline","picture-outline-round","upload","upload2","download","camera-solid","camera","video-camera-solid","video-camera","message-solid","bell","s-cooperation","s-order","s-platform","s-fold","s-unfold","s-operation","s-promotion","s-home","s-release","s-ticket","s-management","s-open","s-shop","s-marketing","s-flag","s-comment","s-finance","s-claim","s-custom","s-opportunity","s-data","s-check","s-grid","menu","share","d-caret","caret-left","caret-right","caret-bottom","caret-top","bottom-left","bottom-right","back","right","bottom","top","top-left","top-right","arrow-left","arrow-right","arrow-down","arrow-up","d-arrow-left","d-arrow-right","video-pause","video-play","refresh","refresh-right","refresh-left","finished","sort","sort-up","sort-down","rank","loading","view","c-scale-to-original","date","edit","edit-outline","folder","folder-opened","folder-add","folder-remove","folder-delete","folder-checked","tickets","document-remove","document-delete","document-copy","document-checked","document","document-add","printer","paperclip","takeaway-box","search","monitor","attract","mobile","scissors","umbrella","headset","brush","mouse","coordinate","magic-stick","reading","data-line","data-board","pie-chart","data-analysis","collection-tag","film","suitcase","suitcase-1","receiving","collection","files","notebook-1","notebook-2","toilet-paper","office-building","school","table-lamp","house","no-smoking","smoking","shopping-cart-full","shopping-cart-1","shopping-cart-2","shopping-bag-1","shopping-bag-2","sold-out","sell","present","box","bank-card","money","coin","wallet","discount","price-tag","news","guide","male","female","thumb","cpu","link","connection","open","turn-off","set-up","chat-round","chat-line-round","chat-square","chat-dot-round","chat-dot-square","chat-line-square","message","postcard","position","turn-off-microphone","microphone","close-notification","bangzhu","time","odometer","crop","aim","switch-button","full-screen","copy-document","mic","stopwatch","medal-1","medal","trophy","trophy-1","first-aid-kit","discover","place","location","location-outline","location-information","add-location","delete-location","map-location","alarm-clock","timer","watch-1","watch","lock","unlock","key","service","mobile-phone","bicycle","truck","ship","basketball","football","soccer","baseball","wind-power","light-rain","lightning","heavy-rain","sunrise","sunrise-1","sunset","sunny","cloudy","partly-cloudy","cloudy-and-sunny","moon","moon-night","dish","dish-1","food","chicken","fork-spoon","knife-fork","burger","tableware","sugar","dessert","ice-cream","hot-water","water-cup","coffee-cup","cold-drink","goblet","goblet-full","goblet-square","goblet-square-full","refrigerator","grape","watermelon","cherry","apple","pear","orange","coffee","ice-tea","ice-drink","milk-tea","potato-strips","lollipop","ice-cream-square","ice-cream-round"] \ No newline at end of file diff --git a/ruoyi-ui/src/utils/generator/js.js b/ruoyi-ui/src/utils/generator/js.js new file mode 100644 index 0000000000000000000000000000000000000000..ee8668dc61be9064cb260fd874adee1a47a43568 --- /dev/null +++ b/ruoyi-ui/src/utils/generator/js.js @@ -0,0 +1,235 @@ +import { exportDefault, titleCase } from '@/utils/index' +import { trigger } from './config' + +const units = { + KB: '1024', + MB: '1024 / 1024', + GB: '1024 / 1024 / 1024' +} +let confGlobal +const inheritAttrs = { + file: '', + dialog: 'inheritAttrs: false,' +} + + +export function makeUpJs(conf, type) { + confGlobal = conf = JSON.parse(JSON.stringify(conf)) + const dataList = [] + const ruleList = [] + const optionsList = [] + const propsList = [] + const methodList = mixinMethod(type) + const uploadVarList = [] + + conf.fields.forEach(el => { + buildAttributes(el, dataList, ruleList, optionsList, methodList, propsList, uploadVarList) + }) + + const script = buildexport( + conf, + type, + dataList.join('\n'), + ruleList.join('\n'), + optionsList.join('\n'), + uploadVarList.join('\n'), + propsList.join('\n'), + methodList.join('\n') + ) + confGlobal = null + return script +} + +function buildAttributes(el, dataList, ruleList, optionsList, methodList, propsList, uploadVarList) { + buildData(el, dataList) + buildRules(el, ruleList) + + if (el.options && el.options.length) { + buildOptions(el, optionsList) + if (el.dataType === 'dynamic') { + const model = `${el.vModel}Options` + const options = titleCase(model) + buildOptionMethod(`get${options}`, model, methodList) + } + } + + if (el.props && el.props.props) { + buildProps(el, propsList) + } + + if (el.action && el.tag === 'el-upload') { + uploadVarList.push( + `${el.vModel}Action: '${el.action}', + ${el.vModel}fileList: [],` + ) + methodList.push(buildBeforeUpload(el)) + if (!el['auto-upload']) { + methodList.push(buildSubmitUpload(el)) + } + } + + if (el.children) { + el.children.forEach(el2 => { + buildAttributes(el2, dataList, ruleList, optionsList, methodList, propsList, uploadVarList) + }) + } +} + +function mixinMethod(type) { + const list = []; const + minxins = { + file: confGlobal.formBtns ? { + submitForm: `submitForm() { + this.$refs['${confGlobal.formRef}'].validate(valid => { + if(!valid) return + // TODO 鎻愪氦琛ㄥ崟 + }) + },`, + resetForm: `resetForm() { + this.$refs['${confGlobal.formRef}'].resetFields() + },` + } : null, + dialog: { + onOpen: 'onOpen() {},', + onClose: `onClose() { + this.$refs['${confGlobal.formRef}'].resetFields() + },`, + close: `close() { + this.$emit('update:visible', false) + },`, + handleConfirm: `handleConfirm() { + this.$refs['${confGlobal.formRef}'].validate(valid => { + if(!valid) return + this.close() + }) + },` + } + } + + const methods = minxins[type] + if (methods) { + Object.keys(methods).forEach(key => { + list.push(methods[key]) + }) + } + + return list +} + +function buildData(conf, dataList) { + if (conf.vModel === undefined) return + let defaultValue + if (typeof (conf.defaultValue) === 'string' && !conf.multiple) { + defaultValue = `'${conf.defaultValue}'` + } else { + defaultValue = `${JSON.stringify(conf.defaultValue)}` + } + dataList.push(`${conf.vModel}: ${defaultValue},`) +} + +function buildRules(conf, ruleList) { + if (conf.vModel === undefined) return + const rules = [] + if (trigger[conf.tag]) { + if (conf.required) { + const type = Array.isArray(conf.defaultValue) ? 'type: \'array\',' : '' + let message = Array.isArray(conf.defaultValue) ? `璇疯嚦灏戦夋嫨涓涓${conf.vModel}` : conf.placeholder + if (message === undefined) message = `${conf.label}涓嶈兘涓虹┖` + rules.push(`{ required: true, ${type} message: '${message}', trigger: '${trigger[conf.tag]}' }`) + } + if (conf.regList && Array.isArray(conf.regList)) { + conf.regList.forEach(item => { + if (item.pattern) { + rules.push(`{ pattern: ${eval(item.pattern)}, message: '${item.message}', trigger: '${trigger[conf.tag]}' }`) + } + }) + } + ruleList.push(`${conf.vModel}: [${rules.join(',')}],`) + } +} + +function buildOptions(conf, optionsList) { + if (conf.vModel === undefined) return + if (conf.dataType === 'dynamic') { conf.options = [] } + const str = `${conf.vModel}Options: ${JSON.stringify(conf.options)},` + optionsList.push(str) +} + +function buildProps(conf, propsList) { + if (conf.dataType === 'dynamic') { + conf.valueKey !== 'value' && (conf.props.props.value = conf.valueKey) + conf.labelKey !== 'label' && (conf.props.props.label = conf.labelKey) + conf.childrenKey !== 'children' && (conf.props.props.children = conf.childrenKey) + } + const str = `${conf.vModel}Props: ${JSON.stringify(conf.props.props)},` + propsList.push(str) +} + +function buildBeforeUpload(conf) { + const unitNum = units[conf.sizeUnit]; let rightSizeCode = ''; let acceptCode = ''; const + returnList = [] + if (conf.fileSize) { + rightSizeCode = `let isRightSize = file.size / ${unitNum} < ${conf.fileSize} + if(!isRightSize){ + this.$message.error('鏂囦欢澶у皬瓒呰繃 ${conf.fileSize}${conf.sizeUnit}') + }` + returnList.push('isRightSize') + } + if (conf.accept) { + acceptCode = `let isAccept = new RegExp('${conf.accept}').test(file.type) + if(!isAccept){ + this.$message.error('搴旇閫夋嫨${conf.accept}绫诲瀷鐨勬枃浠') + }` + returnList.push('isAccept') + } + const str = `${conf.vModel}BeforeUpload(file) { + ${rightSizeCode} + ${acceptCode} + return ${returnList.join('&&')} + },` + return returnList.length ? str : '' +} + +function buildSubmitUpload(conf) { + const str = `submitUpload() { + this.$refs['${conf.vModel}'].submit() + },` + return str +} + +function buildOptionMethod(methodName, model, methodList) { + const str = `${methodName}() { + // TODO 鍙戣捣璇锋眰鑾峰彇鏁版嵁 + this.${model} + },` + methodList.push(str) +} + +function buildexport(conf, type, data, rules, selectOptions, uploadVar, props, methods) { + const str = `${exportDefault}{ + ${inheritAttrs[type]} + components: {}, + props: [], + data () { + return { + ${conf.formModel}: { + ${data} + }, + ${conf.formRules}: { + ${rules} + }, + ${uploadVar} + ${selectOptions} + ${props} + } + }, + computed: {}, + watch: {}, + created () {}, + mounted () {}, + methods: { + ${methods} + } +}` + return str +} diff --git a/ruoyi-ui/src/utils/generator/render.js b/ruoyi-ui/src/utils/generator/render.js new file mode 100644 index 0000000000000000000000000000000000000000..e8640f0a291e8d6491b8ee2a0ae58f56b4d8915f --- /dev/null +++ b/ruoyi-ui/src/utils/generator/render.js @@ -0,0 +1,126 @@ +import { makeMap } from '@/utils/index' + +// 鍙傝僪ttps://github.com/vuejs/vue/blob/v2.6.10/src/platforms/web/server/util.js +const isAttr = makeMap( + 'accept,accept-charset,accesskey,action,align,alt,async,autocomplete,' + + 'autofocus,autoplay,autosave,bgcolor,border,buffered,challenge,charset,' + + 'checked,cite,class,code,codebase,color,cols,colspan,content,http-equiv,' + + 'name,contenteditable,contextmenu,controls,coords,data,datetime,default,' + + 'defer,dir,dirname,disabled,download,draggable,dropzone,enctype,method,for,' + + 'form,formaction,headers,height,hidden,high,href,hreflang,http-equiv,' + + 'icon,id,ismap,itemprop,keytype,kind,label,lang,language,list,loop,low,' + + 'manifest,max,maxlength,media,method,GET,POST,min,multiple,email,file,' + + 'muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,' + + 'preload,radiogroup,readonly,rel,required,reversed,rows,rowspan,sandbox,' + + 'scope,scoped,seamless,selected,shape,size,type,text,password,sizes,span,' + + 'spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,' + + 'target,title,type,usemap,value,width,wrap' +) + +function vModel(self, dataObject, defaultValue) { + dataObject.props.value = defaultValue + + dataObject.on.input = val => { + self.$emit('input', val) + } +} + +const componentChild = { + 'el-button': { + default(h, conf, key) { + return conf[key] + }, + }, + 'el-input': { + prepend(h, conf, key) { + return + }, + append(h, conf, key) { + return + } + }, + 'el-select': { + options(h, conf, key) { + const list = [] + conf.options.forEach(item => { + list.push() + }) + return list + } + }, + 'el-radio-group': { + options(h, conf, key) { + const list = [] + conf.options.forEach(item => { + if (conf.optionType === 'button') list.push({item.label}) + else list.push({item.label}) + }) + return list + } + }, + 'el-checkbox-group': { + options(h, conf, key) { + const list = [] + conf.options.forEach(item => { + if (conf.optionType === 'button') { + list.push({item.label}) + } else { + list.push({item.label}) + } + }) + return list + } + }, + 'el-upload': { + 'list-type': (h, conf, key) => { + const list = [] + if (conf['list-type'] === 'picture-card') { + list.push() + } else { + list.push({conf.buttonText}) + } + if (conf.showTip) { + list.push(
鍙兘涓婁紶涓嶈秴杩 {conf.fileSize}{conf.sizeUnit} 鐨剓conf.accept}鏂囦欢
) + } + return list + } + } +} + +export default { + render(h) { + const dataObject = { + attrs: {}, + props: {}, + on: {}, + style: {} + } + const confClone = JSON.parse(JSON.stringify(this.conf)) + const children = [] + + const childObjs = componentChild[confClone.tag] + if (childObjs) { + Object.keys(childObjs).forEach(key => { + const childFunc = childObjs[key] + if (confClone[key]) { + children.push(childFunc(h, confClone, key)) + } + }) + } + + Object.keys(confClone).forEach(key => { + const val = confClone[key] + if (key === 'vModel') { + vModel(this, dataObject, confClone.defaultValue) + } else if (dataObject[key]) { + dataObject[key] = val + } else if (!isAttr(key)) { + dataObject.props[key] = val + } else { + dataObject.attrs[key] = val + } + }) + return h(this.conf.tag, dataObject, children) + }, + props: ['conf'] +} diff --git a/ruoyi-ui/src/utils/index.js b/ruoyi-ui/src/utils/index.js new file mode 100644 index 0000000000000000000000000000000000000000..df5db12b0e9beead58411f213e3a0ce7ce6d9aa6 --- /dev/null +++ b/ruoyi-ui/src/utils/index.js @@ -0,0 +1,390 @@ +import { parseTime } from './ruoyi' + +/** + * 琛ㄦ牸鏃堕棿鏍煎紡鍖 + */ +export function formatDate(cellValue) { + if (cellValue == null || cellValue == "") return ""; + var date = new Date(cellValue) + var year = date.getFullYear() + var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1 + var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate() + var hours = date.getHours() < 10 ? '0' + date.getHours() : date.getHours() + var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes() + var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds() + return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds +} + +/** + * @param {number} time + * @param {string} option + * @returns {string} + */ +export function formatTime(time, option) { + if (('' + time).length === 10) { + time = parseInt(time) * 1000 + } else { + time = +time + } + const d = new Date(time) + const now = Date.now() + + const diff = (now - d) / 1000 + + if (diff < 30) { + return '鍒氬垰' + } else if (diff < 3600) { + // less 1 hour + return Math.ceil(diff / 60) + '鍒嗛挓鍓' + } else if (diff < 3600 * 24) { + return Math.ceil(diff / 3600) + '灏忔椂鍓' + } else if (diff < 3600 * 24 * 2) { + return '1澶╁墠' + } + if (option) { + return parseTime(time, option) + } else { + return ( + d.getMonth() + + 1 + + '鏈' + + d.getDate() + + '鏃' + + d.getHours() + + '鏃' + + d.getMinutes() + + '鍒' + ) + } +} + +/** + * @param {string} url + * @returns {Object} + */ +export function getQueryObject(url) { + url = url == null ? window.location.href : url + const search = url.substring(url.lastIndexOf('?') + 1) + const obj = {} + const reg = /([^?&=]+)=([^?&=]*)/g + search.replace(reg, (rs, $1, $2) => { + const name = decodeURIComponent($1) + let val = decodeURIComponent($2) + val = String(val) + obj[name] = val + return rs + }) + return obj +} + +/** + * @param {string} input value + * @returns {number} output value + */ +export function byteLength(str) { + // returns the byte length of an utf8 string + let s = str.length + for (var i = str.length - 1; i >= 0; i--) { + const code = str.charCodeAt(i) + if (code > 0x7f && code <= 0x7ff) s++ + else if (code > 0x7ff && code <= 0xffff) s += 2 + if (code >= 0xDC00 && code <= 0xDFFF) i-- + } + return s +} + +/** + * @param {Array} actual + * @returns {Array} + */ +export function cleanArray(actual) { + const newArray = [] + for (let i = 0; i < actual.length; i++) { + if (actual[i]) { + newArray.push(actual[i]) + } + } + return newArray +} + +/** + * @param {Object} json + * @returns {Array} + */ +export function param(json) { + if (!json) return '' + return cleanArray( + Object.keys(json).map(key => { + if (json[key] === undefined) return '' + return encodeURIComponent(key) + '=' + encodeURIComponent(json[key]) + }) + ).join('&') +} + +/** + * @param {string} url + * @returns {Object} + */ +export function param2Obj(url) { + const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ') + if (!search) { + return {} + } + const obj = {} + const searchArr = search.split('&') + searchArr.forEach(v => { + const index = v.indexOf('=') + if (index !== -1) { + const name = v.substring(0, index) + const val = v.substring(index + 1, v.length) + obj[name] = val + } + }) + return obj +} + +/** + * @param {string} val + * @returns {string} + */ +export function html2Text(val) { + const div = document.createElement('div') + div.innerHTML = val + return div.textContent || div.innerText +} + +/** + * Merges two objects, giving the last one precedence + * @param {Object} target + * @param {(Object|Array)} source + * @returns {Object} + */ +export function objectMerge(target, source) { + if (typeof target !== 'object') { + target = {} + } + if (Array.isArray(source)) { + return source.slice() + } + Object.keys(source).forEach(property => { + const sourceProperty = source[property] + if (typeof sourceProperty === 'object') { + target[property] = objectMerge(target[property], sourceProperty) + } else { + target[property] = sourceProperty + } + }) + return target +} + +/** + * @param {HTMLElement} element + * @param {string} className + */ +export function toggleClass(element, className) { + if (!element || !className) { + return + } + let classString = element.className + const nameIndex = classString.indexOf(className) + if (nameIndex === -1) { + classString += '' + className + } else { + classString = + classString.substr(0, nameIndex) + + classString.substr(nameIndex + className.length) + } + element.className = classString +} + +/** + * @param {string} type + * @returns {Date} + */ +export function getTime(type) { + if (type === 'start') { + return new Date().getTime() - 3600 * 1000 * 24 * 90 + } else { + return new Date(new Date().toDateString()) + } +} + +/** + * @param {Function} func + * @param {number} wait + * @param {boolean} immediate + * @return {*} + */ +export function debounce(func, wait, immediate) { + let timeout, args, context, timestamp, result + + const later = function() { + // 鎹笂涓娆¤Е鍙戞椂闂撮棿闅 + const last = +new Date() - timestamp + + // 涓婃琚寘瑁呭嚱鏁拌璋冪敤鏃堕棿闂撮殧 last 灏忎簬璁惧畾鏃堕棿闂撮殧 wait + if (last < wait && last > 0) { + timeout = setTimeout(later, wait - last) + } else { + timeout = null + // 濡傛灉璁惧畾涓篿mmediate===true锛屽洜涓哄紑濮嬭竟鐣屽凡缁忚皟鐢ㄨ繃浜嗘澶勬棤闇璋冪敤 + if (!immediate) { + result = func.apply(context, args) + if (!timeout) context = args = null + } + } + } + + return function(...args) { + context = this + timestamp = +new Date() + const callNow = immediate && !timeout + // 濡傛灉寤舵椂涓嶅瓨鍦紝閲嶆柊璁惧畾寤舵椂 + if (!timeout) timeout = setTimeout(later, wait) + if (callNow) { + result = func.apply(context, args) + context = args = null + } + + return result + } +} + +/** + * This is just a simple version of deep copy + * Has a lot of edge cases bug + * If you want to use a perfect deep copy, use lodash's _.cloneDeep + * @param {Object} source + * @returns {Object} + */ +export function deepClone(source) { + if (!source && typeof source !== 'object') { + throw new Error('error arguments', 'deepClone') + } + const targetObj = source.constructor === Array ? [] : {} + Object.keys(source).forEach(keys => { + if (source[keys] && typeof source[keys] === 'object') { + targetObj[keys] = deepClone(source[keys]) + } else { + targetObj[keys] = source[keys] + } + }) + return targetObj +} + +/** + * @param {Array} arr + * @returns {Array} + */ +export function uniqueArr(arr) { + return Array.from(new Set(arr)) +} + +/** + * @returns {string} + */ +export function createUniqueString() { + const timestamp = +new Date() + '' + const randomNum = parseInt((1 + Math.random()) * 65536) + '' + return (+(randomNum + timestamp)).toString(32) +} + +/** + * Check if an element has a class + * @param {HTMLElement} elm + * @param {string} cls + * @returns {boolean} + */ +export function hasClass(ele, cls) { + return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)')) +} + +/** + * Add class to element + * @param {HTMLElement} elm + * @param {string} cls + */ +export function addClass(ele, cls) { + if (!hasClass(ele, cls)) ele.className += ' ' + cls +} + +/** + * Remove class from element + * @param {HTMLElement} elm + * @param {string} cls + */ +export function removeClass(ele, cls) { + if (hasClass(ele, cls)) { + const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)') + ele.className = ele.className.replace(reg, ' ') + } +} + +export function makeMap(str, expectsLowerCase) { + const map = Object.create(null) + const list = str.split(',') + for (let i = 0; i < list.length; i++) { + map[list[i]] = true + } + return expectsLowerCase + ? val => map[val.toLowerCase()] + : val => map[val] +} + +export const exportDefault = 'export default ' + +export const beautifierConf = { + html: { + indent_size: '2', + indent_char: ' ', + max_preserve_newlines: '-1', + preserve_newlines: false, + keep_array_indentation: false, + break_chained_methods: false, + indent_scripts: 'separate', + brace_style: 'end-expand', + space_before_conditional: true, + unescape_strings: false, + jslint_happy: false, + end_with_newline: true, + wrap_line_length: '110', + indent_inner_html: true, + comma_first: false, + e4x: true, + indent_empty_lines: true + }, + js: { + indent_size: '2', + indent_char: ' ', + max_preserve_newlines: '-1', + preserve_newlines: false, + keep_array_indentation: false, + break_chained_methods: false, + indent_scripts: 'normal', + brace_style: 'end-expand', + space_before_conditional: true, + unescape_strings: false, + jslint_happy: true, + end_with_newline: true, + wrap_line_length: '110', + indent_inner_html: true, + comma_first: false, + e4x: true, + indent_empty_lines: true + } +} + +// 棣栧瓧姣嶅ぇ灏 +export function titleCase(str) { + return str.replace(/( |^)[a-z]/g, L => L.toUpperCase()) +} + +// 涓嬪垝杞┘宄 +export function camelCase(str) { + return str.replace(/_[a-z]/g, str1 => str1.substr(-1).toUpperCase()) +} + +export function isNumberStr(str) { + return /^[+-]?(0|([1-9]\d*))(\.\d+)?$/g.test(str) +} + diff --git a/ruoyi-ui/src/utils/jsencrypt.js b/ruoyi-ui/src/utils/jsencrypt.js new file mode 100644 index 0000000000000000000000000000000000000000..78d95234a30126396fd060c34918a231c1450745 --- /dev/null +++ b/ruoyi-ui/src/utils/jsencrypt.js @@ -0,0 +1,30 @@ +import JSEncrypt from 'jsencrypt/bin/jsencrypt.min' + +// 瀵嗛挜瀵圭敓鎴 http://web.chacuo.net/netrsakeypair + +const publicKey = 'MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKoR8mX0rGKLqzcWmOzbfj64K8ZIgOdH\n' + + 'nzkXSOVOZbFu/TJhZ7rFAN+eaGkl3C4buccQd/EjEsj9ir7ijT7h96MCAwEAAQ==' + +const privateKey = 'MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAqhHyZfSsYourNxaY\n' + + '7Nt+PrgrxkiA50efORdI5U5lsW79MmFnusUA355oaSXcLhu5xxB38SMSyP2KvuKN\n' + + 'PuH3owIDAQABAkAfoiLyL+Z4lf4Myxk6xUDgLaWGximj20CUf+5BKKnlrK+Ed8gA\n' + + 'kM0HqoTt2UZwA5E2MzS4EI2gjfQhz5X28uqxAiEA3wNFxfrCZlSZHb0gn2zDpWow\n' + + 'cSxQAgiCstxGUoOqlW8CIQDDOerGKH5OmCJ4Z21v+F25WaHYPxCFMvwxpcw99Ecv\n' + + 'DQIgIdhDTIqD2jfYjPTY8Jj3EDGPbH2HHuffvflECt3Ek60CIQCFRlCkHpi7hthh\n' + + 'YhovyloRYsM+IS9h/0BzlEAuO0ktMQIgSPT3aFAgJYwKpqRYKlLDVcflZFCKY7u3\n' + + 'UP8iWi1Qw0Y=' + +// 鍔犲瘑 +export function encrypt(txt) { + const encryptor = new JSEncrypt() + encryptor.setPublicKey(publicKey) // 璁剧疆鍏挜 + return encryptor.encrypt(txt) // 瀵规暟鎹繘琛屽姞瀵 +} + +// 瑙e瘑 +export function decrypt(txt) { + const encryptor = new JSEncrypt() + encryptor.setPrivateKey(privateKey) // 璁剧疆绉侀挜 + return encryptor.decrypt(txt) // 瀵规暟鎹繘琛岃В瀵 +} + diff --git a/ruoyi-ui/src/utils/permission.js b/ruoyi-ui/src/utils/permission.js new file mode 100644 index 0000000000000000000000000000000000000000..189a71629dd0b9e17de77e64435b14ea4f14d25e --- /dev/null +++ b/ruoyi-ui/src/utils/permission.js @@ -0,0 +1,47 @@ +import store from '@/store' + +/** + * 瀛楃鏉冮檺鏍¢獙 + * @param {Array} value 鏍¢獙鍊 + * @returns {Boolean} + */ +export function checkPermi(value) { + if (value && value instanceof Array && value.length > 0) { + const permissions = store.getters && store.getters.permissions + const permissionDatas = value + const all_permission = "*:*:*"; + + const hasPermission = permissions.some(permission => { + return all_permission === permission || permissionDatas.includes(permission) + }) + + return hasPermission; + + } else { + console.error(`need roles! Like checkPermi="['system:user:add','system:user:edit']"`) + return false + } +} + +/** + * 瑙掕壊鏉冮檺鏍¢獙 + * @param {Array} value 鏍¢獙鍊 + * @returns {Boolean} + */ +export function checkRole(value) { + if (value && value instanceof Array && value.length > 0) { + const roles = store.getters && store.getters.roles + const permissionRoles = value + const super_admin = "admin"; + + const hasRole = roles.some(role => { + return super_admin === role || permissionRoles.includes(role) + }) + + return hasRole; + + } else { + console.error(`need roles! Like checkRole="['admin','editor']"`) + return false + } +} \ No newline at end of file diff --git a/ruoyi-ui/src/utils/request.js b/ruoyi-ui/src/utils/request.js new file mode 100644 index 0000000000000000000000000000000000000000..80bf10ba9cb46bb003059b0a2690c6a9349ef4f5 --- /dev/null +++ b/ruoyi-ui/src/utils/request.js @@ -0,0 +1,152 @@ +import axios from 'axios' +import { Notification, MessageBox, Message, Loading } from 'element-ui' +import store from '@/store' +import { getToken } from '@/utils/auth' +import errorCode from '@/utils/errorCode' +import { tansParams, blobValidate } from "@/utils/ruoyi"; +import cache from '@/plugins/cache' +import { saveAs } from 'file-saver' + +let downloadLoadingInstance; +// 鏄惁鏄剧ず閲嶆柊鐧诲綍 +export let isRelogin = { show: false }; + +axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' +// 鍒涘缓axios瀹炰緥 +const service = axios.create({ + // axios涓姹傞厤缃湁baseURL閫夐」锛岃〃绀鸿姹俇RL鍏叡閮ㄥ垎 + baseURL: process.env.VUE_APP_BASE_API, + // 瓒呮椂 + timeout: 30000 +}) + +// request鎷︽埅鍣 +service.interceptors.request.use(config => { + // 鏄惁闇瑕佽缃 token + const isToken = (config.headers || {}).isToken === false + // 鏄惁闇瑕侀槻姝㈡暟鎹噸澶嶆彁浜 + const isRepeatSubmit = (config.headers || {}).repeatSubmit === false + if (getToken() && !isToken) { + config.headers['Authorization'] = 'Bearer ' + getToken() // 璁╂瘡涓姹傛惡甯﹁嚜瀹氫箟token 璇锋牴鎹疄闄呮儏鍐佃嚜琛屼慨鏀 + } + // get璇锋眰鏄犲皠params鍙傛暟 + if (config.method === 'get' && config.params) { + let url = config.url + '?' + tansParams(config.params); + url = url.slice(0, -1); + config.params = {}; + config.url = url; + } + if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) { + const requestObj = { + url: config.url, + data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data, + time: new Date().getTime() + } + const requestSize = Object.keys(JSON.stringify(requestObj)).length; // 璇锋眰鏁版嵁澶у皬 + const limitSize = 5 * 1024 * 1024; // 闄愬埗瀛樻斁鏁版嵁5M + if (requestSize >= limitSize) { + console.warn(`[${config.url}]: ` + '璇锋眰鏁版嵁澶у皬瓒呭嚭鍏佽鐨5M闄愬埗锛屾棤娉曡繘琛岄槻閲嶅鎻愪氦楠岃瘉銆') + return config; + } + const sessionObj = cache.session.getJSON('sessionObj') + if (sessionObj === undefined || sessionObj === null || sessionObj === '') { + cache.session.setJSON('sessionObj', requestObj) + } else { + const s_url = sessionObj.url; // 璇锋眰鍦板潃 + const s_data = sessionObj.data; // 璇锋眰鏁版嵁 + const s_time = sessionObj.time; // 璇锋眰鏃堕棿 + const interval = 1000; // 闂撮殧鏃堕棿(ms)锛屽皬浜庢鏃堕棿瑙嗕负閲嶅鎻愪氦 + if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) { + const message = '鏁版嵁姝e湪澶勭悊锛岃鍕块噸澶嶆彁浜'; + console.warn(`[${s_url}]: ` + message) + return Promise.reject(new Error(message)) + } else { + cache.session.setJSON('sessionObj', requestObj) + } + } + } + return config +}, error => { + console.log(error) + Promise.reject(error) +}) + +// 鍝嶅簲鎷︽埅鍣 +service.interceptors.response.use(res => { + // 鏈缃姸鎬佺爜鍒欓粯璁ゆ垚鍔熺姸鎬 + const code = res.data.code || 200; + // 鑾峰彇閿欒淇℃伅 + const msg = errorCode[code] || res.data.msg || errorCode['default'] + // 浜岃繘鍒舵暟鎹垯鐩存帴杩斿洖 + if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') { + return res.data + } + if (code === 401) { + if (!isRelogin.show) { + isRelogin.show = true; + MessageBox.confirm('鐧诲綍鐘舵佸凡杩囨湡锛屾偍鍙互缁х画鐣欏湪璇ラ〉闈紝鎴栬呴噸鏂扮櫥褰', '绯荤粺鎻愮ず', { confirmButtonText: '閲嶆柊鐧诲綍', cancelButtonText: '鍙栨秷', type: 'warning' }).then(() => { + isRelogin.show = false; + store.dispatch('LogOut').then(() => { + location.href = '/index'; + }) + }).catch(() => { + isRelogin.show = false; + }); + } + return Promise.reject('鏃犳晥鐨勪細璇濓紝鎴栬呬細璇濆凡杩囨湡锛岃閲嶆柊鐧诲綍銆') + } else if (code === 500) { + Message({ message: msg, type: 'error' }) + return Promise.reject(new Error(msg)) + } else if (code === 601) { + Message({ message: msg, type: 'warning' }) + return Promise.reject('error') + } else if (code !== 200) { + Notification.error({ title: msg }) + return Promise.reject('error') + } else { + return res.data + } + }, + error => { + console.log('err' + error) + let { message } = error; + if (message == "Network Error") { + message = "鍚庣鎺ュ彛杩炴帴寮傚父"; + } else if (message.includes("timeout")) { + message = "绯荤粺鎺ュ彛璇锋眰瓒呮椂"; + } else if (message.includes("Request failed with status code")) { + message = "绯荤粺鎺ュ彛" + message.substr(message.length - 3) + "寮傚父"; + } + Message({ message: message, type: 'error', duration: 5 * 1000 }) + return Promise.reject(error) + } +) + +// 閫氱敤涓嬭浇鏂规硶 +export function download(url, params, filename, config) { + downloadLoadingInstance = Loading.service({ text: "姝e湪涓嬭浇鏁版嵁锛岃绋嶅", spinner: "el-icon-loading", background: "rgba(0, 0, 0, 0.7)", }) + return service.post(url, params, { + transformRequest: [(params) => { return tansParams(params) }], + headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, + responseType: 'blob', + ...config + }).then(async (data) => { + const isBlob = blobValidate(data); + if (isBlob) { + const blob = new Blob([data]) + saveAs(blob, filename) + } else { + const resText = await data.text(); + const rspObj = JSON.parse(resText); + const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] + Message.error(errMsg); + } + downloadLoadingInstance.close(); + }).catch((r) => { + console.error(r) + Message.error('涓嬭浇鏂囦欢鍑虹幇閿欒锛岃鑱旂郴绠$悊鍛橈紒') + downloadLoadingInstance.close(); + }) +} + +export default service diff --git a/ruoyi-ui/src/utils/ruoyi.js b/ruoyi-ui/src/utils/ruoyi.js new file mode 100644 index 0000000000000000000000000000000000000000..44bf9c403ff065e9e56c453ae89182fb7479a730 --- /dev/null +++ b/ruoyi-ui/src/utils/ruoyi.js @@ -0,0 +1,233 @@ + + +/** + * 閫氱敤js鏂规硶灏佽澶勭悊 + * Copyright (c) 2019 ruoyi + */ + +// 鏃ユ湡鏍煎紡鍖 +export function parseTime(time, pattern) { + if (arguments.length === 0 || !time) { + return null + } + const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}' + let date + if (typeof time === 'object') { + date = time + } else { + if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) { + time = parseInt(time) + } else if (typeof time === 'string') { + time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), ''); + } + if ((typeof time === 'number') && (time.toString().length === 10)) { + time = time * 1000 + } + date = new Date(time) + } + const formatObj = { + y: date.getFullYear(), + m: date.getMonth() + 1, + d: date.getDate(), + h: date.getHours(), + i: date.getMinutes(), + s: date.getSeconds(), + a: date.getDay() + } + const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { + let value = formatObj[key] + // Note: getDay() returns 0 on Sunday + if (key === 'a') { return ['鏃', '涓', '浜', '涓', '鍥', '浜', '鍏'][value] } + if (result.length > 0 && value < 10) { + value = '0' + value + } + return value || 0 + }) + return time_str +} + +// 琛ㄥ崟閲嶇疆 +export function resetForm(refName) { + if (this.$refs[refName]) { + this.$refs[refName].resetFields(); + } +} + +// 娣诲姞鏃ユ湡鑼冨洿 +export function addDateRange(params, dateRange, propName) { + let search = params; + search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {}; + dateRange = Array.isArray(dateRange) ? dateRange : []; + if (typeof (propName) === 'undefined') { + search.params['beginTime'] = dateRange[0]; + search.params['endTime'] = dateRange[1]; + } else { + search.params['begin' + propName] = dateRange[0]; + search.params['end' + propName] = dateRange[1]; + } + return search; +} + +// 鍥炴樉鏁版嵁瀛楀吀 +export function selectDictLabel(datas, value) { + if (value === undefined) { + return ""; + } + var actions = []; + Object.keys(datas).some((key) => { + if (datas[key].value == ('' + value)) { + actions.push(datas[key].label); + return true; + } + }) + if (actions.length === 0) { + actions.push(value); + } + return actions.join(''); +} + +// 鍥炴樉鏁版嵁瀛楀吀锛堝瓧绗︿覆銆佹暟缁勶級 +export function selectDictLabels(datas, value, separator) { + if (value === undefined || value.length ===0) { + return ""; + } + if (Array.isArray(value)) { + value = value.join(","); + } + var actions = []; + var currentSeparator = undefined === separator ? "," : separator; + var temp = value.split(currentSeparator); + Object.keys(value.split(currentSeparator)).some((val) => { + var match = false; + Object.keys(datas).some((key) => { + if (datas[key].value == ('' + temp[val])) { + actions.push(datas[key].label + currentSeparator); + match = true; + } + }) + if (!match) { + actions.push(temp[val] + currentSeparator); + } + }) + return actions.join('').substring(0, actions.join('').length - 1); +} + +// 瀛楃涓叉牸寮忓寲(%s ) +export function sprintf(str) { + var args = arguments, flag = true, i = 1; + str = str.replace(/%s/g, function () { + var arg = args[i++]; + if (typeof arg === 'undefined') { + flag = false; + return ''; + } + return arg; + }); + return flag ? str : ''; +} + +// 杞崲瀛楃涓诧紝undefined,null绛夎浆鍖栦负"" +export function parseStrEmpty(str) { + if (!str || str == "undefined" || str == "null") { + return ""; + } + return str; +} + +// 鏁版嵁鍚堝苟 +export function mergeRecursive(source, target) { + for (var p in target) { + try { + if (target[p].constructor == Object) { + source[p] = mergeRecursive(source[p], target[p]); + } else { + source[p] = target[p]; + } + } catch (e) { + source[p] = target[p]; + } + } + return source; +}; + +/** + * 鏋勯犳爲鍨嬬粨鏋勬暟鎹 + * @param {*} data 鏁版嵁婧 + * @param {*} id id瀛楁 榛樿 'id' + * @param {*} parentId 鐖惰妭鐐瑰瓧娈 榛樿 'parentId' + * @param {*} children 瀛╁瓙鑺傜偣瀛楁 榛樿 'children' + */ +export function handleTree(data, id, parentId, children) { + let config = { + id: id || 'id', + parentId: parentId || 'parentId', + childrenList: children || 'children' + }; + + var childrenListMap = {}; + var nodeIds = {}; + var tree = []; + + for (let d of data) { + let parentId = d[config.parentId]; + if (childrenListMap[parentId] == null) { + childrenListMap[parentId] = []; + } + nodeIds[d[config.id]] = d; + childrenListMap[parentId].push(d); + } + + for (let d of data) { + let parentId = d[config.parentId]; + if (nodeIds[parentId] == null) { + tree.push(d); + } + } + + for (let t of tree) { + adaptToChildrenList(t); + } + + function adaptToChildrenList(o) { + if (childrenListMap[o[config.id]] !== null) { + o[config.childrenList] = childrenListMap[o[config.id]]; + } + if (o[config.childrenList]) { + for (let c of o[config.childrenList]) { + adaptToChildrenList(c); + } + } + } + return tree; +} + +/** +* 鍙傛暟澶勭悊 +* @param {*} params 鍙傛暟 +*/ +export function tansParams(params) { + let result = '' + for (const propName of Object.keys(params)) { + const value = params[propName]; + var part = encodeURIComponent(propName) + "="; + if (value !== null && value !== "" && typeof (value) !== "undefined") { + if (typeof value === 'object') { + for (const key of Object.keys(value)) { + if (value[key] !== null && value[key] !== "" && typeof (value[key]) !== 'undefined') { + let params = propName + '[' + key + ']'; + var subPart = encodeURIComponent(params) + "="; + result += subPart + encodeURIComponent(value[key]) + "&"; + } + } + } else { + result += part + encodeURIComponent(value) + "&"; + } + } + } + return result +} + +// 楠岃瘉鏄惁涓篵lob鏍煎紡 +export function blobValidate(data) { + return data.type !== 'application/json' +} diff --git a/ruoyi-ui/src/utils/scroll-to.js b/ruoyi-ui/src/utils/scroll-to.js new file mode 100644 index 0000000000000000000000000000000000000000..c5d8e04e07b21b45da43c4dadd7c65ee0d946289 --- /dev/null +++ b/ruoyi-ui/src/utils/scroll-to.js @@ -0,0 +1,58 @@ +Math.easeInOutQuad = function(t, b, c, d) { + t /= d / 2 + if (t < 1) { + return c / 2 * t * t + b + } + t-- + return -c / 2 * (t * (t - 2) - 1) + b +} + +// requestAnimationFrame for Smart Animating http://goo.gl/sx5sts +var requestAnimFrame = (function() { + return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) { window.setTimeout(callback, 1000 / 60) } +})() + +/** + * Because it's so fucking difficult to detect the scrolling element, just move them all + * @param {number} amount + */ +function move(amount) { + document.documentElement.scrollTop = amount + document.body.parentNode.scrollTop = amount + document.body.scrollTop = amount +} + +function position() { + return document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop +} + +/** + * @param {number} to + * @param {number} duration + * @param {Function} callback + */ +export function scrollTo(to, duration, callback) { + const start = position() + const change = to - start + const increment = 20 + let currentTime = 0 + duration = (typeof (duration) === 'undefined') ? 500 : duration + var animateScroll = function() { + // increment the time + currentTime += increment + // find the value with the quadratic in-out easing function + var val = Math.easeInOutQuad(currentTime, start, change, duration) + // move the document.body + move(val) + // do the animation unless its over + if (currentTime < duration) { + requestAnimFrame(animateScroll) + } else { + if (callback && typeof (callback) === 'function') { + // the animation is done so lets callback + callback() + } + } + } + animateScroll() +} diff --git a/ruoyi-ui/src/utils/validate.js b/ruoyi-ui/src/utils/validate.js new file mode 100644 index 0000000000000000000000000000000000000000..57a568e9f1b5413d9b8c7a4c071734d2be0d764e --- /dev/null +++ b/ruoyi-ui/src/utils/validate.js @@ -0,0 +1,80 @@ +/** + * @param {string} path + * @returns {Boolean} + */ +export function isExternal(path) { + return /^(https?:|mailto:|tel:)/.test(path) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function validUsername(str) { + const valid_map = ['admin', 'editor'] + return valid_map.indexOf(str.trim()) >= 0 +} + +/** + * @param {string} url + * @returns {Boolean} + */ +export function validURL(url) { + const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/ + return reg.test(url) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function validLowerCase(str) { + const reg = /^[a-z]+$/ + return reg.test(str) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function validUpperCase(str) { + const reg = /^[A-Z]+$/ + return reg.test(str) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function validAlphabets(str) { + const reg = /^[A-Za-z]+$/ + return reg.test(str) +} + +/** + * @param {string} email + * @returns {Boolean} + */ +export function validEmail(email) { + const reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ + return reg.test(email) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function isString(str) { + return typeof str === 'string' || str instanceof String; +} + +/** + * @param {Array} arg + * @returns {Boolean} + */ +export function isArray(arg) { + if (typeof Array.isArray === 'undefined') { + return Object.prototype.toString.call(arg) === '[object Array]' + } + return Array.isArray(arg) +} diff --git a/ruoyi-ui/src/views/dashboard/BarChart.vue b/ruoyi-ui/src/views/dashboard/BarChart.vue new file mode 100644 index 0000000000000000000000000000000000000000..88e7ef64c41cb2a1253da3a49e41d32fa8e41769 --- /dev/null +++ b/ruoyi-ui/src/views/dashboard/BarChart.vue @@ -0,0 +1,102 @@ + + + diff --git a/ruoyi-ui/src/views/dashboard/LineChart.vue b/ruoyi-ui/src/views/dashboard/LineChart.vue new file mode 100644 index 0000000000000000000000000000000000000000..702ff73fe54544b05b77e2731a219783d2d594ff --- /dev/null +++ b/ruoyi-ui/src/views/dashboard/LineChart.vue @@ -0,0 +1,135 @@ + + + diff --git a/ruoyi-ui/src/views/dashboard/PanelGroup.vue b/ruoyi-ui/src/views/dashboard/PanelGroup.vue new file mode 100644 index 0000000000000000000000000000000000000000..1a1081fcb9835cf828c6a508e027c712a15bc8ce --- /dev/null +++ b/ruoyi-ui/src/views/dashboard/PanelGroup.vue @@ -0,0 +1,181 @@ + + + + + diff --git a/ruoyi-ui/src/views/dashboard/PieChart.vue b/ruoyi-ui/src/views/dashboard/PieChart.vue new file mode 100644 index 0000000000000000000000000000000000000000..63f0d849bd7584a5b1f67bd8754745632c70bf45 --- /dev/null +++ b/ruoyi-ui/src/views/dashboard/PieChart.vue @@ -0,0 +1,79 @@ + + + diff --git a/ruoyi-ui/src/views/dashboard/RaddarChart.vue b/ruoyi-ui/src/views/dashboard/RaddarChart.vue new file mode 100644 index 0000000000000000000000000000000000000000..312e018a59ab83a167b0beb9d99dfaf8d3d47ed6 --- /dev/null +++ b/ruoyi-ui/src/views/dashboard/RaddarChart.vue @@ -0,0 +1,116 @@ + + + diff --git a/ruoyi-ui/src/views/dashboard/mixins/resize.js b/ruoyi-ui/src/views/dashboard/mixins/resize.js new file mode 100644 index 0000000000000000000000000000000000000000..b1e76e947aef4ef6f386250c5b486dff3cefba34 --- /dev/null +++ b/ruoyi-ui/src/views/dashboard/mixins/resize.js @@ -0,0 +1,56 @@ +import { debounce } from '@/utils' + +export default { + data() { + return { + $_sidebarElm: null, + $_resizeHandler: null + } + }, + mounted() { + this.initListener() + }, + activated() { + if (!this.$_resizeHandler) { + // avoid duplication init + this.initListener() + } + + // when keep-alive chart activated, auto resize + this.resize() + }, + beforeDestroy() { + this.destroyListener() + }, + deactivated() { + this.destroyListener() + }, + methods: { + // use $_ for mixins properties + // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential + $_sidebarResizeHandler(e) { + if (e.propertyName === 'width') { + this.$_resizeHandler() + } + }, + initListener() { + this.$_resizeHandler = debounce(() => { + this.resize() + }, 100) + window.addEventListener('resize', this.$_resizeHandler) + + this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0] + this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler) + }, + destroyListener() { + window.removeEventListener('resize', this.$_resizeHandler) + this.$_resizeHandler = null + + this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler) + }, + resize() { + const { chart } = this + chart && chart.resize() + } + } +} diff --git a/ruoyi-ui/src/views/error/401.vue b/ruoyi-ui/src/views/error/401.vue new file mode 100644 index 0000000000000000000000000000000000000000..448b6ecd6a7e14f034e7ed79843a9ea11e1a4119 --- /dev/null +++ b/ruoyi-ui/src/views/error/401.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/ruoyi-ui/src/views/error/404.vue b/ruoyi-ui/src/views/error/404.vue new file mode 100644 index 0000000000000000000000000000000000000000..96f075c17aa691a906fde71aab76aa2478e366ce --- /dev/null +++ b/ruoyi-ui/src/views/error/404.vue @@ -0,0 +1,233 @@ + + + + + diff --git a/ruoyi-ui/src/views/hezhi/authorizeHonor/index.vue b/ruoyi-ui/src/views/hezhi/authorizeHonor/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..6a6ec8318ed730cfca8e94cc26e256fe240a1fdd --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/authorizeHonor/index.vue @@ -0,0 +1,334 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/banner/index.vue b/ruoyi-ui/src/views/hezhi/banner/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..904975d322f04a670d68a19e255490900e21f67f --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/banner/index.vue @@ -0,0 +1,439 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/careerClass/index.vue b/ruoyi-ui/src/views/hezhi/careerClass/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..bb1020f5f7501ab616a814481a91b6a431f63cc8 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/careerClass/index.vue @@ -0,0 +1,341 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/case/index.vue b/ruoyi-ui/src/views/hezhi/case/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..6251e1011ebadc4775083bfd15c122d36959b804 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/case/index.vue @@ -0,0 +1,416 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/caseType/index.vue b/ruoyi-ui/src/views/hezhi/caseType/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..9ab19bbcb6c4044ad009088bf9ad66337ec66eb7 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/caseType/index.vue @@ -0,0 +1,345 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/conferenceNotice/index.vue b/ruoyi-ui/src/views/hezhi/conferenceNotice/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..a22f4e5ca3cfb67e584aa7eb1f5a9aae43b14a1a --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/conferenceNotice/index.vue @@ -0,0 +1,554 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/conferencePeople/index.vue b/ruoyi-ui/src/views/hezhi/conferencePeople/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..8b88a2f2f25b82424399c16975b8f99e5dacf9f2 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/conferencePeople/index.vue @@ -0,0 +1,379 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/conferenceRegistration/index.vue b/ruoyi-ui/src/views/hezhi/conferenceRegistration/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..5cf28d883a95c2a19f073870295ceeea43ed93bb --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/conferenceRegistration/index.vue @@ -0,0 +1,573 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/config/index.vue b/ruoyi-ui/src/views/hezhi/config/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..c09b632841a666ec9ee880631a6901c2a067a514 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/config/index.vue @@ -0,0 +1,443 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/continuingEducationClass/index.vue b/ruoyi-ui/src/views/hezhi/continuingEducationClass/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..bdfc56e2c559dee7eced8ce4fccd0f23afded5cd --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/continuingEducationClass/index.vue @@ -0,0 +1,355 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/cooperatePartner/index.vue b/ruoyi-ui/src/views/hezhi/cooperatePartner/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..3606e81a5e8f263b9fc84b1e3b45f756fae31cea --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/cooperatePartner/index.vue @@ -0,0 +1,375 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/course/index.vue b/ruoyi-ui/src/views/hezhi/course/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..f8b1f92c128967acd5ebc479e6c5cbc85b367625 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/course/index.vue @@ -0,0 +1,600 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/courseChapter/index.vue b/ruoyi-ui/src/views/hezhi/courseChapter/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..c325752f1508dcb69a6badb3bb98f2b8de68a92c --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/courseChapter/index.vue @@ -0,0 +1,361 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/courseChapter/teacher.vue b/ruoyi-ui/src/views/hezhi/courseChapter/teacher.vue new file mode 100644 index 0000000000000000000000000000000000000000..f75ee9d1fbcc66a03ce3bfe6d5827800edd020ac --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/courseChapter/teacher.vue @@ -0,0 +1,293 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/courseEvaluate/index.vue b/ruoyi-ui/src/views/hezhi/courseEvaluate/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..fffd91773d93588d3a2f4e2efcf685331a702b0a --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/courseEvaluate/index.vue @@ -0,0 +1,404 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/download/index.vue b/ruoyi-ui/src/views/hezhi/download/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..5f1285134d43ed953956518e629325812db002cd --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/download/index.vue @@ -0,0 +1,358 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/enterpriseProgress/index.vue b/ruoyi-ui/src/views/hezhi/enterpriseProgress/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..a77a0bea65c410ddaacb0bde5e8d6035f29d7864 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/enterpriseProgress/index.vue @@ -0,0 +1,326 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/evaluateAgency/evaluateAgencyCourse.vue b/ruoyi-ui/src/views/hezhi/evaluateAgency/evaluateAgencyCourse.vue new file mode 100644 index 0000000000000000000000000000000000000000..9a96bb2693b9f6add2b580326b57e11be5925c97 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/evaluateAgency/evaluateAgencyCourse.vue @@ -0,0 +1,308 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/evaluateAgency/index.vue b/ruoyi-ui/src/views/hezhi/evaluateAgency/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..590d845e32bd6db78836440faba2dc9a796bffab --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/evaluateAgency/index.vue @@ -0,0 +1,552 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/evaluateAgencyClass/index.vue b/ruoyi-ui/src/views/hezhi/evaluateAgencyClass/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..131979bdf4096c204e820d38c0f0985ba6e49c97 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/evaluateAgencyClass/index.vue @@ -0,0 +1,355 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/exam/examBatch.vue b/ruoyi-ui/src/views/hezhi/exam/examBatch.vue new file mode 100644 index 0000000000000000000000000000000000000000..a4a273fff97ccab5dd91cd932594717b68465802 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/exam/examBatch.vue @@ -0,0 +1,242 @@ + + + + diff --git a/ruoyi-ui/src/views/hezhi/exam/index.vue b/ruoyi-ui/src/views/hezhi/exam/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..7370f49e5c5ddf07707abcc7105209f54bbc3267 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/exam/index.vue @@ -0,0 +1,813 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/examFile/index.vue b/ruoyi-ui/src/views/hezhi/examFile/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..0facba9c4933a14ddbf0e702e3963a83617a9ea1 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/examFile/index.vue @@ -0,0 +1,372 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/examNotice/index.vue b/ruoyi-ui/src/views/hezhi/examNotice/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..7355a2e9c31bdb7b6d17025c8f42585d8a93ab9f --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/examNotice/index.vue @@ -0,0 +1,462 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/examRegistration/index.vue b/ruoyi-ui/src/views/hezhi/examRegistration/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..ab0a82feb1c60f71b208b3685d3873eb9b2b68b7 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/examRegistration/index.vue @@ -0,0 +1,1827 @@ + + + + diff --git a/ruoyi-ui/src/views/hezhi/examSimulateInfo/index.vue b/ruoyi-ui/src/views/hezhi/examSimulateInfo/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..6319b6ee2c843db7612e6eea68abb65c6d921f43 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/examSimulateInfo/index.vue @@ -0,0 +1,520 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/examSubject/index.vue b/ruoyi-ui/src/views/hezhi/examSubject/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..f15da83b528dfc04acaa019b0d0dc7f4032d9c9c --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/examSubject/index.vue @@ -0,0 +1,620 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/examSubject/subjectAnswer.vue b/ruoyi-ui/src/views/hezhi/examSubject/subjectAnswer.vue new file mode 100644 index 0000000000000000000000000000000000000000..354c1d920d12bb90e7bee964013bb52de6b03296 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/examSubject/subjectAnswer.vue @@ -0,0 +1,314 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/examSubjectAnswer/index.vue b/ruoyi-ui/src/views/hezhi/examSubjectAnswer/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..0d0d464b1f5dd2a3fa35817c069054caf166591e --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/examSubjectAnswer/index.vue @@ -0,0 +1,339 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/examSubjectFormal/index.vue b/ruoyi-ui/src/views/hezhi/examSubjectFormal/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..fd6bb594c12d673d9b5bd5328748996c26e97f3f --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/examSubjectFormal/index.vue @@ -0,0 +1,532 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/examSubjectSimulate/index.vue b/ruoyi-ui/src/views/hezhi/examSubjectSimulate/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..40c6ea46cfec2702118148df6b0d618ed3bb2318 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/examSubjectSimulate/index.vue @@ -0,0 +1,434 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/expressKdCode/index.vue b/ruoyi-ui/src/views/hezhi/expressKdCode/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..0d04ac6a790003491ed342f3535096193af107a0 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/expressKdCode/index.vue @@ -0,0 +1,348 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/link/index.vue b/ruoyi-ui/src/views/hezhi/link/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..a94a7b734488ad59365059a850198f8f8a7228a4 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/link/index.vue @@ -0,0 +1,409 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/liveBroadcast/index.vue b/ruoyi-ui/src/views/hezhi/liveBroadcast/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..e4817d939c06134fab58368ff278fd2bc6097415 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/liveBroadcast/index.vue @@ -0,0 +1,437 @@ + + + \ No newline at end of file diff --git a/ruoyi-ui/src/views/hezhi/liveBroadcast/liveBroadcastTeacher.vue b/ruoyi-ui/src/views/hezhi/liveBroadcast/liveBroadcastTeacher.vue new file mode 100644 index 0000000000000000000000000000000000000000..89dba967b501b128b3679e1ac3b30c41fbec62e3 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/liveBroadcast/liveBroadcastTeacher.vue @@ -0,0 +1,330 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/majorClass/index.vue b/ruoyi-ui/src/views/hezhi/majorClass/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..a59960c3954f14bf42be08dd5f9c78d75db6f442 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/majorClass/index.vue @@ -0,0 +1,447 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/memberAddress/index.vue b/ruoyi-ui/src/views/hezhi/memberAddress/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..ec0b27067807c764d5bba039c92e4e27ad116eff --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/memberAddress/index.vue @@ -0,0 +1,413 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/memberDiscuss/index.vue b/ruoyi-ui/src/views/hezhi/memberDiscuss/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..e9d4c57f1c9a947737d219e0d5be1327e4fe0249 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/memberDiscuss/index.vue @@ -0,0 +1,431 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/memberExamSimulateAll/index.vue b/ruoyi-ui/src/views/hezhi/memberExamSimulateAll/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..4394f812fdc9b7652f1b912ee79ba1551139f681 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/memberExamSimulateAll/index.vue @@ -0,0 +1,429 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/memberJoin/index.vue b/ruoyi-ui/src/views/hezhi/memberJoin/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..9c181cf953b6e86ba9e99a1fecc09acbc77134fe --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/memberJoin/index.vue @@ -0,0 +1,368 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/memberMajor/index.vue b/ruoyi-ui/src/views/hezhi/memberMajor/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..86c5b6e87d3d00c548d3e5298768b516bed251f0 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/memberMajor/index.vue @@ -0,0 +1,369 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/memberOrder/index.vue b/ruoyi-ui/src/views/hezhi/memberOrder/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..14cdea05b0ea74b39dc8fffef7e3947f99c0b2f4 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/memberOrder/index.vue @@ -0,0 +1,489 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/memberScore/index.vue b/ruoyi-ui/src/views/hezhi/memberScore/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..37a666faafd435396ce9319fd7bf75d9597b2059 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/memberScore/index.vue @@ -0,0 +1,454 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/memberSign/index.vue b/ruoyi-ui/src/views/hezhi/memberSign/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..ad8d57903378a2b55533dd96651255e1318ac35b --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/memberSign/index.vue @@ -0,0 +1,421 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/memberSubjectAll/index.vue b/ruoyi-ui/src/views/hezhi/memberSubjectAll/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..3359e94d40c9bc42feff91c12d7b798efbd97ff7 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/memberSubjectAll/index.vue @@ -0,0 +1,415 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/memberSubjectCollect/index.vue b/ruoyi-ui/src/views/hezhi/memberSubjectCollect/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..209349d5c11c5edf451e5599c00c6d9de98d684e --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/memberSubjectCollect/index.vue @@ -0,0 +1,345 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/memberSubjectWrong/index.vue b/ruoyi-ui/src/views/hezhi/memberSubjectWrong/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..c2f612cd50dc28e207b82143a8b2b107744216ad --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/memberSubjectWrong/index.vue @@ -0,0 +1,374 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/news/index.vue b/ruoyi-ui/src/views/hezhi/news/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..7c1c64bf2fcf1def6993e55a56b16d3b1a6c9ed6 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/news/index.vue @@ -0,0 +1,383 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/notice/index.vue b/ruoyi-ui/src/views/hezhi/notice/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..ec3eddfab0bae5ac2407331d6b442cb860852a37 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/notice/index.vue @@ -0,0 +1,460 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/postAddress/index.vue b/ruoyi-ui/src/views/hezhi/postAddress/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..f33b46e68285172be2e132f895311ed722cef99f --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/postAddress/index.vue @@ -0,0 +1,550 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/region/index.vue b/ruoyi-ui/src/views/hezhi/region/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..d53740320bdfd4a21db82a55e0f712d4d7b6db2e --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/region/index.vue @@ -0,0 +1,444 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/smsCode/index.vue b/ruoyi-ui/src/views/hezhi/smsCode/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..0f8b320d90ee3c98377df88d515f682e35831dd5 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/smsCode/index.vue @@ -0,0 +1,296 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/student/index.vue b/ruoyi-ui/src/views/hezhi/student/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..6fa2ab23068377c7e610d3585a7e9ec2ccfd6e80 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/student/index.vue @@ -0,0 +1,667 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/studyCenter/index.vue b/ruoyi-ui/src/views/hezhi/studyCenter/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..b36257ea7a4b044769a42cadceece9d49b09f97b --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/studyCenter/index.vue @@ -0,0 +1,729 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/studyCenter/studyCenterTeacher.vue b/ruoyi-ui/src/views/hezhi/studyCenter/studyCenterTeacher.vue new file mode 100644 index 0000000000000000000000000000000000000000..3d5ed5c33174cb2812117fb0a51e3ee0dd6aa39b --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/studyCenter/studyCenterTeacher.vue @@ -0,0 +1,67 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/studyCenterClass/index.vue b/ruoyi-ui/src/views/hezhi/studyCenterClass/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..105ccba9c4d6673559c1819e428164e80e7f99f4 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/studyCenterClass/index.vue @@ -0,0 +1,354 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/studyCenterFile/index.vue b/ruoyi-ui/src/views/hezhi/studyCenterFile/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..160056eca69d283a9b0680cdae10a010ee289e0d --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/studyCenterFile/index.vue @@ -0,0 +1,320 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/subjectWarehouseClass/index.vue b/ruoyi-ui/src/views/hezhi/subjectWarehouseClass/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..7d71eb9f0cede156c89f55f2bb3757e41769c5bf --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/subjectWarehouseClass/index.vue @@ -0,0 +1,506 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/tbTeacherAuthentication/index.vue b/ruoyi-ui/src/views/hezhi/tbTeacherAuthentication/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..3ab58493d4003abb9267ce96dd6c9adc3aba2cc7 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/tbTeacherAuthentication/index.vue @@ -0,0 +1,442 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/teacher/index.vue b/ruoyi-ui/src/views/hezhi/teacher/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..fc9c36838921a4eec170708f028e56dad300b054 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/teacher/index.vue @@ -0,0 +1,380 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/teacherCourse/index.vue b/ruoyi-ui/src/views/hezhi/teacherCourse/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..df762269fe518392920a582b10a8e4c2c7db2db1 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/teacherCourse/index.vue @@ -0,0 +1,367 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/trends/index.vue b/ruoyi-ui/src/views/hezhi/trends/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..92ce659c578426875694b1e469e31a2349ebb1c5 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/trends/index.vue @@ -0,0 +1,359 @@ + + + diff --git a/ruoyi-ui/src/views/hezhi/typeCourse/index.vue b/ruoyi-ui/src/views/hezhi/typeCourse/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..58f8e957e5a3d0b1b3a9e3db9104aa0ff04c4bf3 --- /dev/null +++ b/ruoyi-ui/src/views/hezhi/typeCourse/index.vue @@ -0,0 +1,364 @@ + + + diff --git a/ruoyi-ui/src/views/index.scss b/ruoyi-ui/src/views/index.scss new file mode 100644 index 0000000000000000000000000000000000000000..d8a4f9ccc8d6892475d42065a5bb190949f3e0de --- /dev/null +++ b/ruoyi-ui/src/views/index.scss @@ -0,0 +1,8 @@ +.home { + width: 100%; + height: 100%; + .home-bg { + width: 90%; + margin-bottom: 25px; + } +} diff --git a/ruoyi-ui/src/views/index.vue b/ruoyi-ui/src/views/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..cb4852e4e7e5223edbe4eb3ef3fe02a19471c9f9 --- /dev/null +++ b/ruoyi-ui/src/views/index.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/ruoyi-ui/src/views/index_v1.vue b/ruoyi-ui/src/views/index_v1.vue new file mode 100644 index 0000000000000000000000000000000000000000..d2d2ec6338745de5d954e54103264e9844f1e842 --- /dev/null +++ b/ruoyi-ui/src/views/index_v1.vue @@ -0,0 +1,98 @@ + + + + + diff --git a/ruoyi-ui/src/views/login.vue b/ruoyi-ui/src/views/login.vue new file mode 100644 index 0000000000000000000000000000000000000000..92b70d777065a64f038521c636773438aef9268e --- /dev/null +++ b/ruoyi-ui/src/views/login.vue @@ -0,0 +1,219 @@ + + + + + diff --git a/ruoyi-ui/src/views/monitor/cache/index.vue b/ruoyi-ui/src/views/monitor/cache/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..8d2f378406707f1b7b4922f47d2318e9abec36e1 --- /dev/null +++ b/ruoyi-ui/src/views/monitor/cache/index.vue @@ -0,0 +1,148 @@ + + + diff --git a/ruoyi-ui/src/views/monitor/cache/list.vue b/ruoyi-ui/src/views/monitor/cache/list.vue new file mode 100644 index 0000000000000000000000000000000000000000..29a7c741d947d4f1dbb9e27b11f9831399f5683e --- /dev/null +++ b/ruoyi-ui/src/views/monitor/cache/list.vue @@ -0,0 +1,241 @@ + + + diff --git a/ruoyi-ui/src/views/monitor/druid/index.vue b/ruoyi-ui/src/views/monitor/druid/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..c6ad585c17a026c09d509b81ba8b255512e6e3b4 --- /dev/null +++ b/ruoyi-ui/src/views/monitor/druid/index.vue @@ -0,0 +1,15 @@ + + diff --git a/ruoyi-ui/src/views/monitor/job/index.vue b/ruoyi-ui/src/views/monitor/job/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..892c72750c4ad834efc69e800339d24574450be0 --- /dev/null +++ b/ruoyi-ui/src/views/monitor/job/index.vue @@ -0,0 +1,513 @@ + + + diff --git a/ruoyi-ui/src/views/monitor/job/log.vue b/ruoyi-ui/src/views/monitor/job/log.vue new file mode 100644 index 0000000000000000000000000000000000000000..60bee1def859e635c0dd9fdf6be7d88ccfed0e0e --- /dev/null +++ b/ruoyi-ui/src/views/monitor/job/log.vue @@ -0,0 +1,295 @@ + + + diff --git a/ruoyi-ui/src/views/monitor/logininfor/index.vue b/ruoyi-ui/src/views/monitor/logininfor/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..d6af834c3edbcee79e527ea63c9cb5ccbe40fde9 --- /dev/null +++ b/ruoyi-ui/src/views/monitor/logininfor/index.vue @@ -0,0 +1,246 @@ + + + + diff --git a/ruoyi-ui/src/views/monitor/online/index.vue b/ruoyi-ui/src/views/monitor/online/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..ad613c96920f5c2cca5fd3d44c4687a762b1ed7c --- /dev/null +++ b/ruoyi-ui/src/views/monitor/online/index.vue @@ -0,0 +1,122 @@ + + + + diff --git a/ruoyi-ui/src/views/monitor/operlog/index.vue b/ruoyi-ui/src/views/monitor/operlog/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..4a1828f398ab6168844451912f4d15c4a1ff0467 --- /dev/null +++ b/ruoyi-ui/src/views/monitor/operlog/index.vue @@ -0,0 +1,323 @@ + + + + diff --git a/ruoyi-ui/src/views/monitor/server/index.vue b/ruoyi-ui/src/views/monitor/server/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..15ffc9a69ab24f46e4e00ce516041b604c633342 --- /dev/null +++ b/ruoyi-ui/src/views/monitor/server/index.vue @@ -0,0 +1,207 @@ + + + diff --git a/ruoyi-ui/src/views/redirect.vue b/ruoyi-ui/src/views/redirect.vue new file mode 100644 index 0000000000000000000000000000000000000000..db4c1d66d13ee0e5e29baef1b4b05347a45f7377 --- /dev/null +++ b/ruoyi-ui/src/views/redirect.vue @@ -0,0 +1,12 @@ + diff --git a/ruoyi-ui/src/views/register.vue b/ruoyi-ui/src/views/register.vue new file mode 100644 index 0000000000000000000000000000000000000000..5e03f76a818077c0657042da5fb47e1826527a30 --- /dev/null +++ b/ruoyi-ui/src/views/register.vue @@ -0,0 +1,210 @@ + + + + + diff --git a/ruoyi-ui/src/views/system/config/index.vue b/ruoyi-ui/src/views/system/config/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..3ab81fc20f4462f82a7c24cc0d8510e38da7dc62 --- /dev/null +++ b/ruoyi-ui/src/views/system/config/index.vue @@ -0,0 +1,343 @@ + + + diff --git a/ruoyi-ui/src/views/system/dept/index.vue b/ruoyi-ui/src/views/system/dept/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..e502b4ea729c78b83d89d2beb0499b9c140d4a09 --- /dev/null +++ b/ruoyi-ui/src/views/system/dept/index.vue @@ -0,0 +1,340 @@ + + + diff --git a/ruoyi-ui/src/views/system/dict/data.vue b/ruoyi-ui/src/views/system/dict/data.vue new file mode 100644 index 0000000000000000000000000000000000000000..3befe4a628c331e16df12e66400d6f487a1b7007 --- /dev/null +++ b/ruoyi-ui/src/views/system/dict/data.vue @@ -0,0 +1,402 @@ + + + \ No newline at end of file diff --git a/ruoyi-ui/src/views/system/dict/index.vue b/ruoyi-ui/src/views/system/dict/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..6ca54571ed9c7602ca9aa706de19a3f21c8ada7c --- /dev/null +++ b/ruoyi-ui/src/views/system/dict/index.vue @@ -0,0 +1,347 @@ + + + \ No newline at end of file diff --git a/ruoyi-ui/src/views/system/menu/index.vue b/ruoyi-ui/src/views/system/menu/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..c703fa0aa897750a9cf1298cd99e1ac3c8bc177a --- /dev/null +++ b/ruoyi-ui/src/views/system/menu/index.vue @@ -0,0 +1,452 @@ + + + diff --git a/ruoyi-ui/src/views/system/notice/index.vue b/ruoyi-ui/src/views/system/notice/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..7982b545e0d2287b435e596ed93a9068dbd51948 --- /dev/null +++ b/ruoyi-ui/src/views/system/notice/index.vue @@ -0,0 +1,312 @@ + + + diff --git a/ruoyi-ui/src/views/system/post/index.vue b/ruoyi-ui/src/views/system/post/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..444bf6344419b5fcbd8e0b261cf57035eb43bcf1 --- /dev/null +++ b/ruoyi-ui/src/views/system/post/index.vue @@ -0,0 +1,309 @@ + + + diff --git a/ruoyi-ui/src/views/system/role/authUser.vue b/ruoyi-ui/src/views/system/role/authUser.vue new file mode 100644 index 0000000000000000000000000000000000000000..147aa33e43cf22f2685dc8197eec1bdf936b56d0 --- /dev/null +++ b/ruoyi-ui/src/views/system/role/authUser.vue @@ -0,0 +1,199 @@ + + + \ No newline at end of file diff --git a/ruoyi-ui/src/views/system/role/index.vue b/ruoyi-ui/src/views/system/role/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..fb3b5ef044bc60b62e53485e701297a093fc87bd --- /dev/null +++ b/ruoyi-ui/src/views/system/role/index.vue @@ -0,0 +1,605 @@ + + + \ No newline at end of file diff --git a/ruoyi-ui/src/views/system/role/selectUser.vue b/ruoyi-ui/src/views/system/role/selectUser.vue new file mode 100644 index 0000000000000000000000000000000000000000..10a5365b73aafc9ea1a05022ff18e0dc8adbaad0 --- /dev/null +++ b/ruoyi-ui/src/views/system/role/selectUser.vue @@ -0,0 +1,136 @@ + + + diff --git a/ruoyi-ui/src/views/system/user/authRole.vue b/ruoyi-ui/src/views/system/user/authRole.vue new file mode 100644 index 0000000000000000000000000000000000000000..943710e520d1f9bf48980243bb392084c952b099 --- /dev/null +++ b/ruoyi-ui/src/views/system/user/authRole.vue @@ -0,0 +1,117 @@ + + + \ No newline at end of file diff --git a/ruoyi-ui/src/views/system/user/index.vue b/ruoyi-ui/src/views/system/user/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..9f2800f19d3ec0d845384ccbaab47e27e32d9e3d --- /dev/null +++ b/ruoyi-ui/src/views/system/user/index.vue @@ -0,0 +1,724 @@ + + + diff --git a/ruoyi-ui/src/views/system/user/profile/index.vue b/ruoyi-ui/src/views/system/user/profile/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..529c56445887cf33cd1b71941466a8c0134d4421 --- /dev/null +++ b/ruoyi-ui/src/views/system/user/profile/index.vue @@ -0,0 +1,91 @@ + + + diff --git a/ruoyi-ui/src/views/system/user/profile/resetPwd.vue b/ruoyi-ui/src/views/system/user/profile/resetPwd.vue new file mode 100644 index 0000000000000000000000000000000000000000..f329e6e870dd8bc535bf4299befb4bf1accd25d0 --- /dev/null +++ b/ruoyi-ui/src/views/system/user/profile/resetPwd.vue @@ -0,0 +1,69 @@ + + + diff --git a/ruoyi-ui/src/views/system/user/profile/userAvatar.vue b/ruoyi-ui/src/views/system/user/profile/userAvatar.vue new file mode 100644 index 0000000000000000000000000000000000000000..cbf3ca197cdb4516b88e378c9f4695c434a098d4 --- /dev/null +++ b/ruoyi-ui/src/views/system/user/profile/userAvatar.vue @@ -0,0 +1,184 @@ + + + + diff --git a/ruoyi-ui/src/views/system/user/profile/userInfo.vue b/ruoyi-ui/src/views/system/user/profile/userInfo.vue new file mode 100644 index 0000000000000000000000000000000000000000..c970dc98ef1eb29c1592d88dffcd8513f9d2dcb1 --- /dev/null +++ b/ruoyi-ui/src/views/system/user/profile/userInfo.vue @@ -0,0 +1,88 @@ + + + diff --git a/ruoyi-ui/src/views/tool/build/CodeTypeDialog.vue b/ruoyi-ui/src/views/tool/build/CodeTypeDialog.vue new file mode 100644 index 0000000000000000000000000000000000000000..b5c2e2e492f13c3d0f879020d87a1bdc1a4ed91e --- /dev/null +++ b/ruoyi-ui/src/views/tool/build/CodeTypeDialog.vue @@ -0,0 +1,106 @@ + + diff --git a/ruoyi-ui/src/views/tool/build/DraggableItem.vue b/ruoyi-ui/src/views/tool/build/DraggableItem.vue new file mode 100644 index 0000000000000000000000000000000000000000..e881778f05ad81e1da4097d32b665fcdb362438a --- /dev/null +++ b/ruoyi-ui/src/views/tool/build/DraggableItem.vue @@ -0,0 +1,100 @@ + diff --git a/ruoyi-ui/src/views/tool/build/IconsDialog.vue b/ruoyi-ui/src/views/tool/build/IconsDialog.vue new file mode 100644 index 0000000000000000000000000000000000000000..958be50c56f1897854da18498db9788a4a3f5a53 --- /dev/null +++ b/ruoyi-ui/src/views/tool/build/IconsDialog.vue @@ -0,0 +1,123 @@ + + + diff --git a/ruoyi-ui/src/views/tool/build/RightPanel.vue b/ruoyi-ui/src/views/tool/build/RightPanel.vue new file mode 100644 index 0000000000000000000000000000000000000000..c2760eb5eab3cf4bb6f02dba47c60c0ee3a14d29 --- /dev/null +++ b/ruoyi-ui/src/views/tool/build/RightPanel.vue @@ -0,0 +1,946 @@ + + + + + diff --git a/ruoyi-ui/src/views/tool/build/TreeNodeDialog.vue b/ruoyi-ui/src/views/tool/build/TreeNodeDialog.vue new file mode 100644 index 0000000000000000000000000000000000000000..fa7f0b2856cc0911e2514521c98373b94aff8345 --- /dev/null +++ b/ruoyi-ui/src/views/tool/build/TreeNodeDialog.vue @@ -0,0 +1,149 @@ + + diff --git a/ruoyi-ui/src/views/tool/build/index.vue b/ruoyi-ui/src/views/tool/build/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..2bd298b8f573796d598c3f2b8a87b1432c55e022 --- /dev/null +++ b/ruoyi-ui/src/views/tool/build/index.vue @@ -0,0 +1,768 @@ + + + + + diff --git a/ruoyi-ui/src/views/tool/gen/basicInfoForm.vue b/ruoyi-ui/src/views/tool/gen/basicInfoForm.vue new file mode 100644 index 0000000000000000000000000000000000000000..70295298e2549045a82bb912ec40e99302d9c766 --- /dev/null +++ b/ruoyi-ui/src/views/tool/gen/basicInfoForm.vue @@ -0,0 +1,60 @@ + + + diff --git a/ruoyi-ui/src/views/tool/gen/createTable.vue b/ruoyi-ui/src/views/tool/gen/createTable.vue new file mode 100644 index 0000000000000000000000000000000000000000..f914b5d3902ec66279a8e2b7e803074ccf7e2929 --- /dev/null +++ b/ruoyi-ui/src/views/tool/gen/createTable.vue @@ -0,0 +1,45 @@ + + + diff --git a/ruoyi-ui/src/views/tool/gen/editTable.vue b/ruoyi-ui/src/views/tool/gen/editTable.vue new file mode 100644 index 0000000000000000000000000000000000000000..951497a71f86c6749e49f2c05c738a2121717416 --- /dev/null +++ b/ruoyi-ui/src/views/tool/gen/editTable.vue @@ -0,0 +1,234 @@ + + + diff --git a/ruoyi-ui/src/views/tool/gen/genInfoForm.vue b/ruoyi-ui/src/views/tool/gen/genInfoForm.vue new file mode 100644 index 0000000000000000000000000000000000000000..98daf6d528c65ba723d2ff77f4641df724cc374a --- /dev/null +++ b/ruoyi-ui/src/views/tool/gen/genInfoForm.vue @@ -0,0 +1,312 @@ + + + diff --git a/ruoyi-ui/src/views/tool/gen/importTable.vue b/ruoyi-ui/src/views/tool/gen/importTable.vue new file mode 100644 index 0000000000000000000000000000000000000000..3ea9532bffe64c9fd2502b4dec7757a44c553239 --- /dev/null +++ b/ruoyi-ui/src/views/tool/gen/importTable.vue @@ -0,0 +1,120 @@ + + + diff --git a/ruoyi-ui/src/views/tool/gen/index.vue b/ruoyi-ui/src/views/tool/gen/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..9237c30286077fa661818cfe4f328c26fd442a36 --- /dev/null +++ b/ruoyi-ui/src/views/tool/gen/index.vue @@ -0,0 +1,354 @@ + + + diff --git a/ruoyi-ui/src/views/tool/swagger/index.vue b/ruoyi-ui/src/views/tool/swagger/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..b8becc67cf42f8f24024700b6faf2594972ed3fb --- /dev/null +++ b/ruoyi-ui/src/views/tool/swagger/index.vue @@ -0,0 +1,15 @@ + + diff --git a/ruoyi-ui/vue.config.js b/ruoyi-ui/vue.config.js new file mode 100644 index 0000000000000000000000000000000000000000..a4d7cc6f4ad2d76150fb88332b8f2e9b792f7bcf --- /dev/null +++ b/ruoyi-ui/vue.config.js @@ -0,0 +1,135 @@ +"use strict"; +const path = require("path"); + +function resolve(dir) { + return path.join(__dirname, dir); +} + +const CompressionPlugin = require("compression-webpack-plugin"); + +const name = process.env.VUE_APP_TITLE || "瀛︿俊鑰冭瘯绠$悊绯荤粺"; // 缃戦〉鏍囬 + +const port = process.env.port || process.env.npm_config_port || 80; // 绔彛 + +// vue.config.js 閰嶇疆璇存槑 +//瀹樻柟vue.config.js 鍙傝冩枃妗 https://cli.vuejs.org/zh/config/#css-loaderoptions +// 杩欓噷鍙垪涓閮ㄥ垎锛屽叿浣撻厤缃弬鑰冩枃妗 +module.exports = { + // 閮ㄧ讲鐢熶骇鐜鍜屽紑鍙戠幆澧冧笅鐨刄RL銆 + // 榛樿鎯呭喌涓嬶紝Vue CLI 浼氬亣璁句綘鐨勫簲鐢ㄦ槸琚儴缃插湪涓涓煙鍚嶇殑鏍硅矾寰勪笂 + // 渚嬪 https://www.ruoyi.vip/銆傚鏋滃簲鐢ㄨ閮ㄧ讲鍦ㄤ竴涓瓙璺緞涓婏紝浣犲氨闇瑕佺敤杩欎釜閫夐」鎸囧畾杩欎釜瀛愯矾寰勩備緥濡傦紝濡傛灉浣犵殑搴旂敤琚儴缃插湪 https://www.ruoyi.vip/admin/锛屽垯璁剧疆 baseUrl 涓 /admin/銆 + publicPath: process.env.NODE_ENV === "production" ? "/" : "/", + // 鍦╪pm run build 鎴 yarn build 鏃 锛岀敓鎴愭枃浠剁殑鐩綍鍚嶇О锛堣鍜宐aseUrl鐨勭敓浜х幆澧冭矾寰勪竴鑷达級锛堥粯璁ist锛 + outputDir: "dist", + // 鐢ㄤ簬鏀剧疆鐢熸垚鐨勯潤鎬佽祫婧 (js銆乧ss銆乮mg銆乫onts) 鐨勶紱锛堥」鐩墦鍖呬箣鍚庯紝闈欐佽祫婧愪細鏀惧湪杩欎釜鏂囦欢澶逛笅锛 + assetsDir: "static", + // 鏄惁寮鍚痚slint淇濆瓨妫娴嬶紝鏈夋晥鍊硷細ture | false | 'error' + lintOnSave: process.env.NODE_ENV === "development", + // 濡傛灉浣犱笉闇瑕佺敓浜х幆澧冪殑 source map锛屽彲浠ュ皢鍏惰缃负 false 浠ュ姞閫熺敓浜х幆澧冩瀯寤恒 + productionSourceMap: false, + // webpack-dev-server 鐩稿叧閰嶇疆 + devServer: { + host: "0.0.0.0", + port: port, + open: true, + proxy: { + // detail: https://cli.vuejs.org/config/#devserver-proxy + [process.env.VUE_APP_BASE_API]: { + target: "http://192.168.0.133:8080", + // target: `http://localhost:8080`, + changeOrigin: true, + pathRewrite: { + ["^" + process.env.VUE_APP_BASE_API]: "", + }, + profile: { + // target: `http://192.168.0.131:8080`, + target: `http://localhost:8080`, + changeOrigin: true, + }, + }, + }, + disableHostCheck: true, + }, + css: { + loaderOptions: { + sass: { + sassOptions: { outputStyle: "expanded" }, + }, + }, + }, + configureWebpack: { + name: name, + resolve: { + alias: { + "@": resolve("src"), + }, + }, + plugins: [ + // http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#浣跨敤gzip瑙e帇缂╅潤鎬佹枃浠 + new CompressionPlugin({ + cache: false, // 涓嶅惎鐢ㄦ枃浠剁紦瀛 + test: /\.(js|css|html|jpe?g|png|gif|svg)?$/i, // 鍘嬬缉鏂囦欢鏍煎紡 + filename: "[path][base].gz[query]", // 鍘嬬缉鍚庣殑鏂囦欢鍚 + algorithm: "gzip", // 浣跨敤gzip鍘嬬缉 + minRatio: 0.8, // 鍘嬬缉姣斾緥锛屽皬浜 80% 鐨勬枃浠朵笉浼氳鍘嬬缉 + deleteOriginalAssets: false, // 鍘嬬缉鍚庡垹闄ゅ師鏂囦欢 + }), + ], + }, + chainWebpack(config) { + config.plugins.delete("preload"); // TODO: need test + config.plugins.delete("prefetch"); // TODO: need test + + // set svg-sprite-loader + config.module.rule("svg").exclude.add(resolve("src/assets/icons")).end(); + config.module + .rule("icons") + .test(/\.svg$/) + .include.add(resolve("src/assets/icons")) + .end() + .use("svg-sprite-loader") + .loader("svg-sprite-loader") + .options({ + symbolId: "icon-[name]", + }) + .end(); + + config.when(process.env.NODE_ENV !== "development", (config) => { + config + .plugin("ScriptExtHtmlWebpackPlugin") + .after("html") + .use("script-ext-html-webpack-plugin", [ + { + // `runtime` must same as runtimeChunk name. default is `runtime` + inline: /runtime\..*\.js$/, + }, + ]) + .end(); + + config.optimization.splitChunks({ + chunks: "all", + cacheGroups: { + libs: { + name: "chunk-libs", + test: /[\\/]node_modules[\\/]/, + priority: 10, + chunks: "initial", // only package third parties that are initially dependent + }, + elementUI: { + name: "chunk-elementUI", // split elementUI into a single package + test: /[\\/]node_modules[\\/]_?element-ui(.*)/, // in order to adapt to cnpm + priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app + }, + commons: { + name: "chunk-commons", + test: resolve("src/components"), // can customize your rules + minChunks: 3, // minimum common number + priority: 5, + reuseExistingChunk: true, + }, + }, + }); + config.optimization.runtimeChunk("single"); + }); + }, +}; diff --git a/ry.bat b/ry.bat new file mode 100644 index 0000000000000000000000000000000000000000..ac1e4373973fab87700f666b13abf9de9e8000c9 --- /dev/null +++ b/ry.bat @@ -0,0 +1,67 @@ +@echo off + +rem jar平级目录 +set AppName=ruoyi-admin.jar + +rem JVM参数 +set JVM_OPTS="-Dname=%AppName% -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC" + + +ECHO. + ECHO. [1] 启动%AppName% + ECHO. [2] 关闭%AppName% + ECHO. [3] 重启%AppName% + ECHO. [4] 启动状态 %AppName% + ECHO. [5] 退 出 +ECHO. + +ECHO.请输入选择项目的序号: +set /p ID= + IF "%id%"=="1" GOTO start + IF "%id%"=="2" GOTO stop + IF "%id%"=="3" GOTO restart + IF "%id%"=="4" GOTO status + IF "%id%"=="5" EXIT +PAUSE +:start + for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do ( + set pid=%%a + set image_name=%%b + ) + if defined pid ( + echo %%is running + PAUSE + ) + +start javaw %JVM_OPTS% -jar %AppName% + +echo starting…… +echo Start %AppName% success... +goto:eof + +rem 函数stop通过jps命令查找pid并结束进程 +:stop + for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do ( + set pid=%%a + set image_name=%%b + ) + if not defined pid (echo process %AppName% does not exists) else ( + echo prepare to kill %image_name% + echo start kill %pid% ... + rem 根据进程ID,kill进程 + taskkill /f /pid %pid% + ) +goto:eof +:restart + call :stop + call :start +goto:eof +:status + for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do ( + set pid=%%a + set image_name=%%b + ) + if not defined pid (echo process %AppName% is dead ) else ( + echo %image_name% is running + ) +goto:eof diff --git a/ry.sh b/ry.sh new file mode 100644 index 0000000000000000000000000000000000000000..d6a9cf33ac732f9744f573139e8502ef049c0745 --- /dev/null +++ b/ry.sh @@ -0,0 +1,86 @@ +#!/bin/sh +# ./ry.sh start 鍚姩 stop 鍋滄 restart 閲嶅惎 status 鐘舵 +AppName=ruoyi-admin.jar + +# JVM鍙傛暟 +JVM_OPTS="-Dname=$AppName -Duser.timezone=Asia/Shanghai -Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC" +APP_HOME=`pwd` +LOG_PATH=$APP_HOME/logs/$AppName.log + +if [ "$1" = "" ]; +then + echo -e "\033[0;31m 鏈緭鍏ユ搷浣滃悕 \033[0m \033[0;34m {start|stop|restart|status} \033[0m" + exit 1 +fi + +if [ "$AppName" = "" ]; +then + echo -e "\033[0;31m 鏈緭鍏ュ簲鐢ㄥ悕 \033[0m" + exit 1 +fi + +function start() +{ + PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'` + + if [ x"$PID" != x"" ]; then + echo "$AppName is running..." + else + nohup java $JVM_OPTS -jar $AppName > /dev/null 2>&1 & + echo "Start $AppName success..." + fi +} + +function stop() +{ + echo "Stop $AppName" + + PID="" + query(){ + PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'` + } + + query + if [ x"$PID" != x"" ]; then + kill -TERM $PID + echo "$AppName (pid:$PID) exiting..." + while [ x"$PID" != x"" ] + do + sleep 1 + query + done + echo "$AppName exited." + else + echo "$AppName already stopped." + fi +} + +function restart() +{ + stop + sleep 2 + start +} + +function status() +{ + PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l` + if [ $PID != 0 ];then + echo "$AppName is running..." + else + echo "$AppName is not running..." + fi +} + +case $1 in + start) + start;; + stop) + stop;; + restart) + restart;; + status) + status;; + *) + +esac diff --git a/sql/quartz.sql b/sql/quartz.sql new file mode 100644 index 0000000000000000000000000000000000000000..cee613b7bb879cdf12b6b90ce04fbd73c237e430 --- /dev/null +++ b/sql/quartz.sql @@ -0,0 +1,174 @@ +DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS; +DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS; +DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE; +DROP TABLE IF EXISTS QRTZ_LOCKS; +DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS; +DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS; +DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS; +DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS; +DROP TABLE IF EXISTS QRTZ_TRIGGERS; +DROP TABLE IF EXISTS QRTZ_JOB_DETAILS; +DROP TABLE IF EXISTS QRTZ_CALENDARS; + +-- ---------------------------- +-- 1銆佸瓨鍌ㄦ瘡涓涓凡閰嶇疆鐨 jobDetail 鐨勮缁嗕俊鎭 +-- ---------------------------- +create table QRTZ_JOB_DETAILS ( + sched_name varchar(120) not null comment '璋冨害鍚嶇О', + job_name varchar(200) not null comment '浠诲姟鍚嶇О', + job_group varchar(200) not null comment '浠诲姟缁勫悕', + description varchar(250) null comment '鐩稿叧浠嬬粛', + job_class_name varchar(250) not null comment '鎵ц浠诲姟绫诲悕绉', + is_durable varchar(1) not null comment '鏄惁鎸佷箙鍖', + is_nonconcurrent varchar(1) not null comment '鏄惁骞跺彂', + is_update_data varchar(1) not null comment '鏄惁鏇存柊鏁版嵁', + requests_recovery varchar(1) not null comment '鏄惁鎺ュ彈鎭㈠鎵ц', + job_data blob null comment '瀛樻斁鎸佷箙鍖杍ob瀵硅薄', + primary key (sched_name, job_name, job_group) +) engine=innodb comment = '浠诲姟璇︾粏淇℃伅琛'; + +-- ---------------------------- +-- 2銆 瀛樺偍宸查厤缃殑 Trigger 鐨勪俊鎭 +-- ---------------------------- +create table QRTZ_TRIGGERS ( + sched_name varchar(120) not null comment '璋冨害鍚嶇О', + trigger_name varchar(200) not null comment '瑙﹀彂鍣ㄧ殑鍚嶅瓧', + trigger_group varchar(200) not null comment '瑙﹀彂鍣ㄦ墍灞炵粍鐨勫悕瀛', + job_name varchar(200) not null comment 'qrtz_job_details琛╦ob_name鐨勫閿', + job_group varchar(200) not null comment 'qrtz_job_details琛╦ob_group鐨勫閿', + description varchar(250) null comment '鐩稿叧浠嬬粛', + next_fire_time bigint(13) null comment '涓婁竴娆¤Е鍙戞椂闂达紙姣锛', + prev_fire_time bigint(13) null comment '涓嬩竴娆¤Е鍙戞椂闂达紙榛樿涓-1琛ㄧず涓嶈Е鍙戯級', + priority integer null comment '浼樺厛绾', + trigger_state varchar(16) not null comment '瑙﹀彂鍣ㄧ姸鎬', + trigger_type varchar(8) not null comment '瑙﹀彂鍣ㄧ殑绫诲瀷', + start_time bigint(13) not null comment '寮濮嬫椂闂', + end_time bigint(13) null comment '缁撴潫鏃堕棿', + calendar_name varchar(200) null comment '鏃ョ▼琛ㄥ悕绉', + misfire_instr smallint(2) null comment '琛ュ伩鎵ц鐨勭瓥鐣', + job_data blob null comment '瀛樻斁鎸佷箙鍖杍ob瀵硅薄', + primary key (sched_name, trigger_name, trigger_group), + foreign key (sched_name, job_name, job_group) references QRTZ_JOB_DETAILS(sched_name, job_name, job_group) +) engine=innodb comment = '瑙﹀彂鍣ㄨ缁嗕俊鎭〃'; + +-- ---------------------------- +-- 3銆 瀛樺偍绠鍗曠殑 Trigger锛屽寘鎷噸澶嶆鏁帮紝闂撮殧锛屼互鍙婂凡瑙﹀彂鐨勬鏁 +-- ---------------------------- +create table QRTZ_SIMPLE_TRIGGERS ( + sched_name varchar(120) not null comment '璋冨害鍚嶇О', + trigger_name varchar(200) not null comment 'qrtz_triggers琛╰rigger_name鐨勫閿', + trigger_group varchar(200) not null comment 'qrtz_triggers琛╰rigger_group鐨勫閿', + repeat_count bigint(7) not null comment '閲嶅鐨勬鏁扮粺璁', + repeat_interval bigint(12) not null comment '閲嶅鐨勯棿闅旀椂闂', + times_triggered bigint(10) not null comment '宸茬粡瑙﹀彂鐨勬鏁', + primary key (sched_name, trigger_name, trigger_group), + foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group) +) engine=innodb comment = '绠鍗曡Е鍙戝櫒鐨勪俊鎭〃'; + +-- ---------------------------- +-- 4銆 瀛樺偍 Cron Trigger锛屽寘鎷 Cron 琛ㄨ揪寮忓拰鏃跺尯淇℃伅 +-- ---------------------------- +create table QRTZ_CRON_TRIGGERS ( + sched_name varchar(120) not null comment '璋冨害鍚嶇О', + trigger_name varchar(200) not null comment 'qrtz_triggers琛╰rigger_name鐨勫閿', + trigger_group varchar(200) not null comment 'qrtz_triggers琛╰rigger_group鐨勫閿', + cron_expression varchar(200) not null comment 'cron琛ㄨ揪寮', + time_zone_id varchar(80) comment '鏃跺尯', + primary key (sched_name, trigger_name, trigger_group), + foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group) +) engine=innodb comment = 'Cron绫诲瀷鐨勮Е鍙戝櫒琛'; + +-- ---------------------------- +-- 5銆 Trigger 浣滀负 Blob 绫诲瀷瀛樺偍(鐢ㄤ簬 Quartz 鐢ㄦ埛鐢 JDBC 鍒涘缓浠栦滑鑷繁瀹氬埗鐨 Trigger 绫诲瀷锛孞obStore 骞朵笉鐭ラ亾濡備綍瀛樺偍瀹炰緥鐨勬椂鍊) +-- ---------------------------- +create table QRTZ_BLOB_TRIGGERS ( + sched_name varchar(120) not null comment '璋冨害鍚嶇О', + trigger_name varchar(200) not null comment 'qrtz_triggers琛╰rigger_name鐨勫閿', + trigger_group varchar(200) not null comment 'qrtz_triggers琛╰rigger_group鐨勫閿', + blob_data blob null comment '瀛樻斁鎸佷箙鍖朤rigger瀵硅薄', + primary key (sched_name, trigger_name, trigger_group), + foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group) +) engine=innodb comment = 'Blob绫诲瀷鐨勮Е鍙戝櫒琛'; + +-- ---------------------------- +-- 6銆 浠 Blob 绫诲瀷瀛樺偍瀛樻斁鏃ュ巻淇℃伅锛 quartz鍙厤缃竴涓棩鍘嗘潵鎸囧畾涓涓椂闂磋寖鍥 +-- ---------------------------- +create table QRTZ_CALENDARS ( + sched_name varchar(120) not null comment '璋冨害鍚嶇О', + calendar_name varchar(200) not null comment '鏃ュ巻鍚嶇О', + calendar blob not null comment '瀛樻斁鎸佷箙鍖朿alendar瀵硅薄', + primary key (sched_name, calendar_name) +) engine=innodb comment = '鏃ュ巻淇℃伅琛'; + +-- ---------------------------- +-- 7銆 瀛樺偍宸叉殏鍋滅殑 Trigger 缁勭殑淇℃伅 +-- ---------------------------- +create table QRTZ_PAUSED_TRIGGER_GRPS ( + sched_name varchar(120) not null comment '璋冨害鍚嶇О', + trigger_group varchar(200) not null comment 'qrtz_triggers琛╰rigger_group鐨勫閿', + primary key (sched_name, trigger_group) +) engine=innodb comment = '鏆傚仠鐨勮Е鍙戝櫒琛'; + +-- ---------------------------- +-- 8銆 瀛樺偍涓庡凡瑙﹀彂鐨 Trigger 鐩稿叧鐨勭姸鎬佷俊鎭紝浠ュ強鐩歌仈 Job 鐨勬墽琛屼俊鎭 +-- ---------------------------- +create table QRTZ_FIRED_TRIGGERS ( + sched_name varchar(120) not null comment '璋冨害鍚嶇О', + entry_id varchar(95) not null comment '璋冨害鍣ㄥ疄渚媔d', + trigger_name varchar(200) not null comment 'qrtz_triggers琛╰rigger_name鐨勫閿', + trigger_group varchar(200) not null comment 'qrtz_triggers琛╰rigger_group鐨勫閿', + instance_name varchar(200) not null comment '璋冨害鍣ㄥ疄渚嬪悕', + fired_time bigint(13) not null comment '瑙﹀彂鐨勬椂闂', + sched_time bigint(13) not null comment '瀹氭椂鍣ㄥ埗瀹氱殑鏃堕棿', + priority integer not null comment '浼樺厛绾', + state varchar(16) not null comment '鐘舵', + job_name varchar(200) null comment '浠诲姟鍚嶇О', + job_group varchar(200) null comment '浠诲姟缁勫悕', + is_nonconcurrent varchar(1) null comment '鏄惁骞跺彂', + requests_recovery varchar(1) null comment '鏄惁鎺ュ彈鎭㈠鎵ц', + primary key (sched_name, entry_id) +) engine=innodb comment = '宸茶Е鍙戠殑瑙﹀彂鍣ㄨ〃'; + +-- ---------------------------- +-- 9銆 瀛樺偍灏戦噺鐨勬湁鍏 Scheduler 鐨勭姸鎬佷俊鎭紝鍋囧鏄敤浜庨泦缇や腑锛屽彲浠ョ湅鍒板叾浠栫殑 Scheduler 瀹炰緥 +-- ---------------------------- +create table QRTZ_SCHEDULER_STATE ( + sched_name varchar(120) not null comment '璋冨害鍚嶇О', + instance_name varchar(200) not null comment '瀹炰緥鍚嶇О', + last_checkin_time bigint(13) not null comment '涓婃妫鏌ユ椂闂', + checkin_interval bigint(13) not null comment '妫鏌ラ棿闅旀椂闂', + primary key (sched_name, instance_name) +) engine=innodb comment = '璋冨害鍣ㄧ姸鎬佽〃'; + +-- ---------------------------- +-- 10銆 瀛樺偍绋嬪簭鐨勬偛瑙傞攣鐨勪俊鎭(鍋囧浣跨敤浜嗘偛瑙傞攣) +-- ---------------------------- +create table QRTZ_LOCKS ( + sched_name varchar(120) not null comment '璋冨害鍚嶇О', + lock_name varchar(40) not null comment '鎮茶閿佸悕绉', + primary key (sched_name, lock_name) +) engine=innodb comment = '瀛樺偍鐨勬偛瑙傞攣淇℃伅琛'; + +-- ---------------------------- +-- 11銆 Quartz闆嗙兢瀹炵幇鍚屾鏈哄埗鐨勮閿佽〃 +-- ---------------------------- +create table QRTZ_SIMPROP_TRIGGERS ( + sched_name varchar(120) not null comment '璋冨害鍚嶇О', + trigger_name varchar(200) not null comment 'qrtz_triggers琛╰rigger_name鐨勫閿', + trigger_group varchar(200) not null comment 'qrtz_triggers琛╰rigger_group鐨勫閿', + str_prop_1 varchar(512) null comment 'String绫诲瀷鐨則rigger鐨勭涓涓弬鏁', + str_prop_2 varchar(512) null comment 'String绫诲瀷鐨則rigger鐨勭浜屼釜鍙傛暟', + str_prop_3 varchar(512) null comment 'String绫诲瀷鐨則rigger鐨勭涓変釜鍙傛暟', + int_prop_1 int null comment 'int绫诲瀷鐨則rigger鐨勭涓涓弬鏁', + int_prop_2 int null comment 'int绫诲瀷鐨則rigger鐨勭浜屼釜鍙傛暟', + long_prop_1 bigint null comment 'long绫诲瀷鐨則rigger鐨勭涓涓弬鏁', + long_prop_2 bigint null comment 'long绫诲瀷鐨則rigger鐨勭浜屼釜鍙傛暟', + dec_prop_1 numeric(13,4) null comment 'decimal绫诲瀷鐨則rigger鐨勭涓涓弬鏁', + dec_prop_2 numeric(13,4) null comment 'decimal绫诲瀷鐨則rigger鐨勭浜屼釜鍙傛暟', + bool_prop_1 varchar(1) null comment 'Boolean绫诲瀷鐨則rigger鐨勭涓涓弬鏁', + bool_prop_2 varchar(1) null comment 'Boolean绫诲瀷鐨則rigger鐨勭浜屼釜鍙傛暟', + primary key (sched_name, trigger_name, trigger_group), + foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group) +) engine=innodb comment = '鍚屾鏈哄埗鐨勮閿佽〃'; + +commit; \ No newline at end of file diff --git a/sql/ry_20240629.sql b/sql/ry_20240629.sql new file mode 100644 index 0000000000000000000000000000000000000000..4e526638c83d18cffad7908c0aacf4d08bee5cd7 --- /dev/null +++ b/sql/ry_20240629.sql @@ -0,0 +1,701 @@ +-- ---------------------------- +-- 1銆侀儴闂ㄨ〃 +-- ---------------------------- +drop table if exists sys_dept; +create table sys_dept ( + dept_id bigint(20) not null auto_increment comment '閮ㄩ棬id', + parent_id bigint(20) default 0 comment '鐖堕儴闂╥d', + ancestors varchar(50) default '' comment '绁栫骇鍒楄〃', + dept_name varchar(30) default '' comment '閮ㄩ棬鍚嶇О', + order_num int(4) default 0 comment '鏄剧ず椤哄簭', + leader varchar(20) default null comment '璐熻矗浜', + phone varchar(11) default null comment '鑱旂郴鐢佃瘽', + email varchar(50) default null comment '閭', + status char(1) default '0' comment '閮ㄩ棬鐘舵侊紙0姝e父 1鍋滅敤锛', + del_flag char(1) default '0' comment '鍒犻櫎鏍囧織锛0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛', + create_by varchar(64) default '' comment '鍒涘缓鑰', + create_time datetime comment '鍒涘缓鏃堕棿', + update_by varchar(64) default '' comment '鏇存柊鑰', + update_time datetime comment '鏇存柊鏃堕棿', + primary key (dept_id) +) engine=innodb auto_increment=200 comment = '閮ㄩ棬琛'; + +-- ---------------------------- +-- 鍒濆鍖-閮ㄩ棬琛ㄦ暟鎹 +-- ---------------------------- +insert into sys_dept values(100, 0, '0', '瀛︿俊鑰冭瘯绉戞妧', 0, '瀛︿俊鑰冭瘯', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(101, 100, '0,100', '娣卞湷鎬诲叕鍙', 1, '瀛︿俊鑰冭瘯', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(102, 100, '0,100', '闀挎矙鍒嗗叕鍙', 2, '瀛︿俊鑰冭瘯', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(103, 101, '0,100,101', '鐮斿彂閮ㄩ棬', 1, '瀛︿俊鑰冭瘯', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(104, 101, '0,100,101', '甯傚満閮ㄩ棬', 2, '瀛︿俊鑰冭瘯', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(105, 101, '0,100,101', '娴嬭瘯閮ㄩ棬', 3, '瀛︿俊鑰冭瘯', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(106, 101, '0,100,101', '璐㈠姟閮ㄩ棬', 4, '瀛︿俊鑰冭瘯', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(107, 101, '0,100,101', '杩愮淮閮ㄩ棬', 5, '瀛︿俊鑰冭瘯', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(108, 102, '0,100,102', '甯傚満閮ㄩ棬', 1, '瀛︿俊鑰冭瘯', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); +insert into sys_dept values(109, 102, '0,100,102', '璐㈠姟閮ㄩ棬', 2, '瀛︿俊鑰冭瘯', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); + + +-- ---------------------------- +-- 2銆佺敤鎴蜂俊鎭〃 +-- ---------------------------- +drop table if exists sys_user; +create table sys_user ( + user_id bigint(20) not null auto_increment comment '鐢ㄦ埛ID', + dept_id bigint(20) default null comment '閮ㄩ棬ID', + user_name varchar(30) not null comment '鐢ㄦ埛璐﹀彿', + nick_name varchar(30) not null comment '鐢ㄦ埛鏄电О', + user_type varchar(2) default '00' comment '鐢ㄦ埛绫诲瀷锛00绯荤粺鐢ㄦ埛锛', + email varchar(50) default '' comment '鐢ㄦ埛閭', + phonenumber varchar(11) default '' comment '鎵嬫満鍙风爜', + sex char(1) default '0' comment '鐢ㄦ埛鎬у埆锛0鐢 1濂 2鏈煡锛', + avatar varchar(100) default '' comment '澶村儚鍦板潃', + password varchar(100) default '' comment '瀵嗙爜', + status char(1) default '0' comment '甯愬彿鐘舵侊紙0姝e父 1鍋滅敤锛', + del_flag char(1) default '0' comment '鍒犻櫎鏍囧織锛0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛', + login_ip varchar(128) default '' comment '鏈鍚庣櫥褰旾P', + login_date datetime comment '鏈鍚庣櫥褰曟椂闂', + create_by varchar(64) default '' comment '鍒涘缓鑰', + create_time datetime comment '鍒涘缓鏃堕棿', + update_by varchar(64) default '' comment '鏇存柊鑰', + update_time datetime comment '鏇存柊鏃堕棿', + remark varchar(500) default null comment '澶囨敞', + primary key (user_id) +) engine=innodb auto_increment=100 comment = '鐢ㄦ埛淇℃伅琛'; + +-- ---------------------------- +-- 鍒濆鍖-鐢ㄦ埛淇℃伅琛ㄦ暟鎹 +-- ---------------------------- +insert into sys_user values(1, 103, 'admin', '瀛︿俊鑰冭瘯', '00', 'ry@163.com', '15888888888', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '绠$悊鍛'); +insert into sys_user values(2, 105, 'ry', '瀛︿俊鑰冭瘯', '00', 'ry@qq.com', '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 'admin', sysdate(), '', null, '娴嬭瘯鍛'); + + +-- ---------------------------- +-- 3銆佸矖浣嶄俊鎭〃 +-- ---------------------------- +drop table if exists sys_post; +create table sys_post +( + post_id bigint(20) not null auto_increment comment '宀椾綅ID', + post_code varchar(64) not null comment '宀椾綅缂栫爜', + post_name varchar(50) not null comment '宀椾綅鍚嶇О', + post_sort int(4) not null comment '鏄剧ず椤哄簭', + status char(1) not null comment '鐘舵侊紙0姝e父 1鍋滅敤锛', + create_by varchar(64) default '' comment '鍒涘缓鑰', + create_time datetime comment '鍒涘缓鏃堕棿', + update_by varchar(64) default '' comment '鏇存柊鑰', + update_time datetime comment '鏇存柊鏃堕棿', + remark varchar(500) default null comment '澶囨敞', + primary key (post_id) +) engine=innodb comment = '宀椾綅淇℃伅琛'; + +-- ---------------------------- +-- 鍒濆鍖-宀椾綅淇℃伅琛ㄦ暟鎹 +-- ---------------------------- +insert into sys_post values(1, 'ceo', '钁d簨闀', 1, '0', 'admin', sysdate(), '', null, ''); +insert into sys_post values(2, 'se', '椤圭洰缁忕悊', 2, '0', 'admin', sysdate(), '', null, ''); +insert into sys_post values(3, 'hr', '浜哄姏璧勬簮', 3, '0', 'admin', sysdate(), '', null, ''); +insert into sys_post values(4, 'user', '鏅氬憳宸', 4, '0', 'admin', sysdate(), '', null, ''); + + +-- ---------------------------- +-- 4銆佽鑹蹭俊鎭〃 +-- ---------------------------- +drop table if exists sys_role; +create table sys_role ( + role_id bigint(20) not null auto_increment comment '瑙掕壊ID', + role_name varchar(30) not null comment '瑙掕壊鍚嶇О', + role_key varchar(100) not null comment '瑙掕壊鏉冮檺瀛楃涓', + role_sort int(4) not null comment '鏄剧ず椤哄簭', + data_scope char(1) default '1' comment '鏁版嵁鑼冨洿锛1锛氬叏閮ㄦ暟鎹潈闄 2锛氳嚜瀹氭暟鎹潈闄 3锛氭湰閮ㄩ棬鏁版嵁鏉冮檺 4锛氭湰閮ㄩ棬鍙婁互涓嬫暟鎹潈闄愶級', + menu_check_strictly tinyint(1) default 1 comment '鑿滃崟鏍戦夋嫨椤规槸鍚﹀叧鑱旀樉绀', + dept_check_strictly tinyint(1) default 1 comment '閮ㄩ棬鏍戦夋嫨椤规槸鍚﹀叧鑱旀樉绀', + status char(1) not null comment '瑙掕壊鐘舵侊紙0姝e父 1鍋滅敤锛', + del_flag char(1) default '0' comment '鍒犻櫎鏍囧織锛0浠h〃瀛樺湪 2浠h〃鍒犻櫎锛', + create_by varchar(64) default '' comment '鍒涘缓鑰', + create_time datetime comment '鍒涘缓鏃堕棿', + update_by varchar(64) default '' comment '鏇存柊鑰', + update_time datetime comment '鏇存柊鏃堕棿', + remark varchar(500) default null comment '澶囨敞', + primary key (role_id) +) engine=innodb auto_increment=100 comment = '瑙掕壊淇℃伅琛'; + +-- ---------------------------- +-- 鍒濆鍖-瑙掕壊淇℃伅琛ㄦ暟鎹 +-- ---------------------------- +insert into sys_role values('1', '瓒呯骇绠$悊鍛', 'admin', 1, 1, 1, 1, '0', '0', 'admin', sysdate(), '', null, '瓒呯骇绠$悊鍛'); +insert into sys_role values('2', '鏅氳鑹', 'common', 2, 2, 1, 1, '0', '0', 'admin', sysdate(), '', null, '鏅氳鑹'); + + +-- ---------------------------- +-- 5銆佽彍鍗曟潈闄愯〃 +-- ---------------------------- +drop table if exists sys_menu; +create table sys_menu ( + menu_id bigint(20) not null auto_increment comment '鑿滃崟ID', + menu_name varchar(50) not null comment '鑿滃崟鍚嶇О', + parent_id bigint(20) default 0 comment '鐖惰彍鍗旾D', + order_num int(4) default 0 comment '鏄剧ず椤哄簭', + path varchar(200) default '' comment '璺敱鍦板潃', + component varchar(255) default null comment '缁勪欢璺緞', + query varchar(255) default null comment '璺敱鍙傛暟', + route_name varchar(50) default '' comment '璺敱鍚嶇О', + is_frame int(1) default 1 comment '鏄惁涓哄閾撅紙0鏄 1鍚︼級', + is_cache int(1) default 0 comment '鏄惁缂撳瓨锛0缂撳瓨 1涓嶇紦瀛橈級', + menu_type char(1) default '' comment '鑿滃崟绫诲瀷锛圡鐩綍 C鑿滃崟 F鎸夐挳锛', + visible char(1) default 0 comment '鑿滃崟鐘舵侊紙0鏄剧ず 1闅愯棌锛', + status char(1) default 0 comment '鑿滃崟鐘舵侊紙0姝e父 1鍋滅敤锛', + perms varchar(100) default null comment '鏉冮檺鏍囪瘑', + icon varchar(100) default '#' comment '鑿滃崟鍥炬爣', + create_by varchar(64) default '' comment '鍒涘缓鑰', + create_time datetime comment '鍒涘缓鏃堕棿', + update_by varchar(64) default '' comment '鏇存柊鑰', + update_time datetime comment '鏇存柊鏃堕棿', + remark varchar(500) default '' comment '澶囨敞', + primary key (menu_id) +) engine=innodb auto_increment=2000 comment = '鑿滃崟鏉冮檺琛'; + +-- ---------------------------- +-- 鍒濆鍖-鑿滃崟淇℃伅琛ㄦ暟鎹 +-- ---------------------------- +-- 涓绾ц彍鍗 +insert into sys_menu values('1', '绯荤粺绠$悊', '0', '1', 'system', null, '', '', 1, 0, 'M', '0', '0', '', 'system', 'admin', sysdate(), '', null, '绯荤粺绠$悊鐩綍'); +insert into sys_menu values('2', '绯荤粺鐩戞帶', '0', '2', 'monitor', null, '', '', 1, 0, 'M', '0', '0', '', 'monitor', 'admin', sysdate(), '', null, '绯荤粺鐩戞帶鐩綍'); +insert into sys_menu values('3', '绯荤粺宸ュ叿', '0', '3', 'tool', null, '', '', 1, 0, 'M', '0', '0', '', 'tool', 'admin', sysdate(), '', null, '绯荤粺宸ュ叿鐩綍'); +insert into sys_menu values('4', '瀛︿俊鑰冭瘯瀹樼綉', '0', '4', 'http://ruoyi.vip', null, '', '', 0, 0, 'M', '0', '0', '', 'guide', 'admin', sysdate(), '', null, '瀛︿俊鑰冭瘯瀹樼綉鍦板潃'); +-- 浜岀骇鑿滃崟 +insert into sys_menu values('100', '鐢ㄦ埛绠$悊', '1', '1', 'user', 'system/user/index', '', '', 1, 0, 'C', '0', '0', 'system:user:list', 'user', 'admin', sysdate(), '', null, '鐢ㄦ埛绠$悊鑿滃崟'); +insert into sys_menu values('101', '瑙掕壊绠$悊', '1', '2', 'role', 'system/role/index', '', '', 1, 0, 'C', '0', '0', 'system:role:list', 'peoples', 'admin', sysdate(), '', null, '瑙掕壊绠$悊鑿滃崟'); +insert into sys_menu values('102', '鑿滃崟绠$悊', '1', '3', 'menu', 'system/menu/index', '', '', 1, 0, 'C', '0', '0', 'system:menu:list', 'tree-table', 'admin', sysdate(), '', null, '鑿滃崟绠$悊鑿滃崟'); +insert into sys_menu values('103', '閮ㄩ棬绠$悊', '1', '4', 'dept', 'system/dept/index', '', '', 1, 0, 'C', '0', '0', 'system:dept:list', 'tree', 'admin', sysdate(), '', null, '閮ㄩ棬绠$悊鑿滃崟'); +insert into sys_menu values('104', '宀椾綅绠$悊', '1', '5', 'post', 'system/post/index', '', '', 1, 0, 'C', '0', '0', 'system:post:list', 'post', 'admin', sysdate(), '', null, '宀椾綅绠$悊鑿滃崟'); +insert into sys_menu values('105', '瀛楀吀绠$悊', '1', '6', 'dict', 'system/dict/index', '', '', 1, 0, 'C', '0', '0', 'system:dict:list', 'dict', 'admin', sysdate(), '', null, '瀛楀吀绠$悊鑿滃崟'); +insert into sys_menu values('106', '鍙傛暟璁剧疆', '1', '7', 'config', 'system/config/index', '', '', 1, 0, 'C', '0', '0', 'system:config:list', 'edit', 'admin', sysdate(), '', null, '鍙傛暟璁剧疆鑿滃崟'); +insert into sys_menu values('107', '閫氱煡鍏憡', '1', '8', 'notice', 'system/notice/index', '', '', 1, 0, 'C', '0', '0', 'system:notice:list', 'message', 'admin', sysdate(), '', null, '閫氱煡鍏憡鑿滃崟'); +insert into sys_menu values('108', '鏃ュ織绠$悊', '1', '9', 'log', '', '', '', 1, 0, 'M', '0', '0', '', 'log', 'admin', sysdate(), '', null, '鏃ュ織绠$悊鑿滃崟'); +insert into sys_menu values('109', '鍦ㄧ嚎鐢ㄦ埛', '2', '1', 'online', 'monitor/online/index', '', '', 1, 0, 'C', '0', '0', 'monitor:online:list', 'online', 'admin', sysdate(), '', null, '鍦ㄧ嚎鐢ㄦ埛鑿滃崟'); +insert into sys_menu values('110', '瀹氭椂浠诲姟', '2', '2', 'job', 'monitor/job/index', '', '', 1, 0, 'C', '0', '0', 'monitor:job:list', 'job', 'admin', sysdate(), '', null, '瀹氭椂浠诲姟鑿滃崟'); +insert into sys_menu values('111', '鏁版嵁鐩戞帶', '2', '3', 'druid', 'monitor/druid/index', '', '', 1, 0, 'C', '0', '0', 'monitor:druid:list', 'druid', 'admin', sysdate(), '', null, '鏁版嵁鐩戞帶鑿滃崟'); +insert into sys_menu values('112', '鏈嶅姟鐩戞帶', '2', '4', 'server', 'monitor/server/index', '', '', 1, 0, 'C', '0', '0', 'monitor:server:list', 'server', 'admin', sysdate(), '', null, '鏈嶅姟鐩戞帶鑿滃崟'); +insert into sys_menu values('113', '缂撳瓨鐩戞帶', '2', '5', 'cache', 'monitor/cache/index', '', '', 1, 0, 'C', '0', '0', 'monitor:cache:list', 'redis', 'admin', sysdate(), '', null, '缂撳瓨鐩戞帶鑿滃崟'); +insert into sys_menu values('114', '缂撳瓨鍒楄〃', '2', '6', 'cacheList', 'monitor/cache/list', '', '', 1, 0, 'C', '0', '0', 'monitor:cache:list', 'redis-list', 'admin', sysdate(), '', null, '缂撳瓨鍒楄〃鑿滃崟'); +insert into sys_menu values('115', '琛ㄥ崟鏋勫缓', '3', '1', 'build', 'tool/build/index', '', '', 1, 0, 'C', '0', '0', 'tool:build:list', 'build', 'admin', sysdate(), '', null, '琛ㄥ崟鏋勫缓鑿滃崟'); +insert into sys_menu values('116', '浠g爜鐢熸垚', '3', '2', 'gen', 'tool/gen/index', '', '', 1, 0, 'C', '0', '0', 'tool:gen:list', 'code', 'admin', sysdate(), '', null, '浠g爜鐢熸垚鑿滃崟'); +insert into sys_menu values('117', '绯荤粺鎺ュ彛', '3', '3', 'swagger', 'tool/swagger/index', '', '', 1, 0, 'C', '0', '0', 'tool:swagger:list', 'swagger', 'admin', sysdate(), '', null, '绯荤粺鎺ュ彛鑿滃崟'); +-- 涓夌骇鑿滃崟 +insert into sys_menu values('500', '鎿嶄綔鏃ュ織', '108', '1', 'operlog', 'monitor/operlog/index', '', '', 1, 0, 'C', '0', '0', 'monitor:operlog:list', 'form', 'admin', sysdate(), '', null, '鎿嶄綔鏃ュ織鑿滃崟'); +insert into sys_menu values('501', '鐧诲綍鏃ュ織', '108', '2', 'logininfor', 'monitor/logininfor/index', '', '', 1, 0, 'C', '0', '0', 'monitor:logininfor:list', 'logininfor', 'admin', sysdate(), '', null, '鐧诲綍鏃ュ織鑿滃崟'); +-- 鐢ㄦ埛绠$悊鎸夐挳 +insert into sys_menu values('1000', '鐢ㄦ埛鏌ヨ', '100', '1', '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1001', '鐢ㄦ埛鏂板', '100', '2', '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:add', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1002', '鐢ㄦ埛淇敼', '100', '3', '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:edit', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1003', '鐢ㄦ埛鍒犻櫎', '100', '4', '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:remove', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1004', '鐢ㄦ埛瀵煎嚭', '100', '5', '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:export', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1005', '鐢ㄦ埛瀵煎叆', '100', '6', '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:import', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1006', '閲嶇疆瀵嗙爜', '100', '7', '', '', '', '', 1, 0, 'F', '0', '0', 'system:user:resetPwd', '#', 'admin', sysdate(), '', null, ''); +-- 瑙掕壊绠$悊鎸夐挳 +insert into sys_menu values('1007', '瑙掕壊鏌ヨ', '101', '1', '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1008', '瑙掕壊鏂板', '101', '2', '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:add', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1009', '瑙掕壊淇敼', '101', '3', '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:edit', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1010', '瑙掕壊鍒犻櫎', '101', '4', '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:remove', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1011', '瑙掕壊瀵煎嚭', '101', '5', '', '', '', '', 1, 0, 'F', '0', '0', 'system:role:export', '#', 'admin', sysdate(), '', null, ''); +-- 鑿滃崟绠$悊鎸夐挳 +insert into sys_menu values('1012', '鑿滃崟鏌ヨ', '102', '1', '', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1013', '鑿滃崟鏂板', '102', '2', '', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:add', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1014', '鑿滃崟淇敼', '102', '3', '', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:edit', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1015', '鑿滃崟鍒犻櫎', '102', '4', '', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:remove', '#', 'admin', sysdate(), '', null, ''); +-- 閮ㄩ棬绠$悊鎸夐挳 +insert into sys_menu values('1016', '閮ㄩ棬鏌ヨ', '103', '1', '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1017', '閮ㄩ棬鏂板', '103', '2', '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:add', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1018', '閮ㄩ棬淇敼', '103', '3', '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:edit', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1019', '閮ㄩ棬鍒犻櫎', '103', '4', '', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:remove', '#', 'admin', sysdate(), '', null, ''); +-- 宀椾綅绠$悊鎸夐挳 +insert into sys_menu values('1020', '宀椾綅鏌ヨ', '104', '1', '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1021', '宀椾綅鏂板', '104', '2', '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:add', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1022', '宀椾綅淇敼', '104', '3', '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:edit', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1023', '宀椾綅鍒犻櫎', '104', '4', '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:remove', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1024', '宀椾綅瀵煎嚭', '104', '5', '', '', '', '', 1, 0, 'F', '0', '0', 'system:post:export', '#', 'admin', sysdate(), '', null, ''); +-- 瀛楀吀绠$悊鎸夐挳 +insert into sys_menu values('1025', '瀛楀吀鏌ヨ', '105', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1026', '瀛楀吀鏂板', '105', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:add', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1027', '瀛楀吀淇敼', '105', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:edit', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1028', '瀛楀吀鍒犻櫎', '105', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:remove', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1029', '瀛楀吀瀵煎嚭', '105', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:dict:export', '#', 'admin', sysdate(), '', null, ''); +-- 鍙傛暟璁剧疆鎸夐挳 +insert into sys_menu values('1030', '鍙傛暟鏌ヨ', '106', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1031', '鍙傛暟鏂板', '106', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:add', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1032', '鍙傛暟淇敼', '106', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:edit', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1033', '鍙傛暟鍒犻櫎', '106', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:remove', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1034', '鍙傛暟瀵煎嚭', '106', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:config:export', '#', 'admin', sysdate(), '', null, ''); +-- 閫氱煡鍏憡鎸夐挳 +insert into sys_menu values('1035', '鍏憡鏌ヨ', '107', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1036', '鍏憡鏂板', '107', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:add', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1037', '鍏憡淇敼', '107', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:edit', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1038', '鍏憡鍒犻櫎', '107', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'system:notice:remove', '#', 'admin', sysdate(), '', null, ''); +-- 鎿嶄綔鏃ュ織鎸夐挳 +insert into sys_menu values('1039', '鎿嶄綔鏌ヨ', '500', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1040', '鎿嶄綔鍒犻櫎', '500', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:remove', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1041', '鏃ュ織瀵煎嚭', '500', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:export', '#', 'admin', sysdate(), '', null, ''); +-- 鐧诲綍鏃ュ織鎸夐挳 +insert into sys_menu values('1042', '鐧诲綍鏌ヨ', '501', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1043', '鐧诲綍鍒犻櫎', '501', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:remove', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1044', '鏃ュ織瀵煎嚭', '501', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:export', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1045', '璐︽埛瑙i攣', '501', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:unlock', '#', 'admin', sysdate(), '', null, ''); +-- 鍦ㄧ嚎鐢ㄦ埛鎸夐挳 +insert into sys_menu values('1046', '鍦ㄧ嚎鏌ヨ', '109', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:online:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1047', '鎵归噺寮洪', '109', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:online:batchLogout', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1048', '鍗曟潯寮洪', '109', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:online:forceLogout', '#', 'admin', sysdate(), '', null, ''); +-- 瀹氭椂浠诲姟鎸夐挳 +insert into sys_menu values('1049', '浠诲姟鏌ヨ', '110', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1050', '浠诲姟鏂板', '110', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:add', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1051', '浠诲姟淇敼', '110', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:edit', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1052', '浠诲姟鍒犻櫎', '110', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:remove', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1053', '鐘舵佷慨鏀', '110', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:changeStatus', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1054', '浠诲姟瀵煎嚭', '110', '6', '#', '', '', '', 1, 0, 'F', '0', '0', 'monitor:job:export', '#', 'admin', sysdate(), '', null, ''); +-- 浠g爜鐢熸垚鎸夐挳 +insert into sys_menu values('1055', '鐢熸垚鏌ヨ', '116', '1', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:query', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1056', '鐢熸垚淇敼', '116', '2', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:edit', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1057', '鐢熸垚鍒犻櫎', '116', '3', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:remove', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1058', '瀵煎叆浠g爜', '116', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:import', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1059', '棰勮浠g爜', '116', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:preview', '#', 'admin', sysdate(), '', null, ''); +insert into sys_menu values('1060', '鐢熸垚浠g爜', '116', '6', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:code', '#', 'admin', sysdate(), '', null, ''); + + +-- ---------------------------- +-- 6銆佺敤鎴峰拰瑙掕壊鍏宠仈琛 鐢ㄦ埛N-1瑙掕壊 +-- ---------------------------- +drop table if exists sys_user_role; +create table sys_user_role ( + user_id bigint(20) not null comment '鐢ㄦ埛ID', + role_id bigint(20) not null comment '瑙掕壊ID', + primary key(user_id, role_id) +) engine=innodb comment = '鐢ㄦ埛鍜岃鑹插叧鑱旇〃'; + +-- ---------------------------- +-- 鍒濆鍖-鐢ㄦ埛鍜岃鑹插叧鑱旇〃鏁版嵁 +-- ---------------------------- +insert into sys_user_role values ('1', '1'); +insert into sys_user_role values ('2', '2'); + + +-- ---------------------------- +-- 7銆佽鑹插拰鑿滃崟鍏宠仈琛 瑙掕壊1-N鑿滃崟 +-- ---------------------------- +drop table if exists sys_role_menu; +create table sys_role_menu ( + role_id bigint(20) not null comment '瑙掕壊ID', + menu_id bigint(20) not null comment '鑿滃崟ID', + primary key(role_id, menu_id) +) engine=innodb comment = '瑙掕壊鍜岃彍鍗曞叧鑱旇〃'; + +-- ---------------------------- +-- 鍒濆鍖-瑙掕壊鍜岃彍鍗曞叧鑱旇〃鏁版嵁 +-- ---------------------------- +insert into sys_role_menu values ('2', '1'); +insert into sys_role_menu values ('2', '2'); +insert into sys_role_menu values ('2', '3'); +insert into sys_role_menu values ('2', '4'); +insert into sys_role_menu values ('2', '100'); +insert into sys_role_menu values ('2', '101'); +insert into sys_role_menu values ('2', '102'); +insert into sys_role_menu values ('2', '103'); +insert into sys_role_menu values ('2', '104'); +insert into sys_role_menu values ('2', '105'); +insert into sys_role_menu values ('2', '106'); +insert into sys_role_menu values ('2', '107'); +insert into sys_role_menu values ('2', '108'); +insert into sys_role_menu values ('2', '109'); +insert into sys_role_menu values ('2', '110'); +insert into sys_role_menu values ('2', '111'); +insert into sys_role_menu values ('2', '112'); +insert into sys_role_menu values ('2', '113'); +insert into sys_role_menu values ('2', '114'); +insert into sys_role_menu values ('2', '115'); +insert into sys_role_menu values ('2', '116'); +insert into sys_role_menu values ('2', '117'); +insert into sys_role_menu values ('2', '500'); +insert into sys_role_menu values ('2', '501'); +insert into sys_role_menu values ('2', '1000'); +insert into sys_role_menu values ('2', '1001'); +insert into sys_role_menu values ('2', '1002'); +insert into sys_role_menu values ('2', '1003'); +insert into sys_role_menu values ('2', '1004'); +insert into sys_role_menu values ('2', '1005'); +insert into sys_role_menu values ('2', '1006'); +insert into sys_role_menu values ('2', '1007'); +insert into sys_role_menu values ('2', '1008'); +insert into sys_role_menu values ('2', '1009'); +insert into sys_role_menu values ('2', '1010'); +insert into sys_role_menu values ('2', '1011'); +insert into sys_role_menu values ('2', '1012'); +insert into sys_role_menu values ('2', '1013'); +insert into sys_role_menu values ('2', '1014'); +insert into sys_role_menu values ('2', '1015'); +insert into sys_role_menu values ('2', '1016'); +insert into sys_role_menu values ('2', '1017'); +insert into sys_role_menu values ('2', '1018'); +insert into sys_role_menu values ('2', '1019'); +insert into sys_role_menu values ('2', '1020'); +insert into sys_role_menu values ('2', '1021'); +insert into sys_role_menu values ('2', '1022'); +insert into sys_role_menu values ('2', '1023'); +insert into sys_role_menu values ('2', '1024'); +insert into sys_role_menu values ('2', '1025'); +insert into sys_role_menu values ('2', '1026'); +insert into sys_role_menu values ('2', '1027'); +insert into sys_role_menu values ('2', '1028'); +insert into sys_role_menu values ('2', '1029'); +insert into sys_role_menu values ('2', '1030'); +insert into sys_role_menu values ('2', '1031'); +insert into sys_role_menu values ('2', '1032'); +insert into sys_role_menu values ('2', '1033'); +insert into sys_role_menu values ('2', '1034'); +insert into sys_role_menu values ('2', '1035'); +insert into sys_role_menu values ('2', '1036'); +insert into sys_role_menu values ('2', '1037'); +insert into sys_role_menu values ('2', '1038'); +insert into sys_role_menu values ('2', '1039'); +insert into sys_role_menu values ('2', '1040'); +insert into sys_role_menu values ('2', '1041'); +insert into sys_role_menu values ('2', '1042'); +insert into sys_role_menu values ('2', '1043'); +insert into sys_role_menu values ('2', '1044'); +insert into sys_role_menu values ('2', '1045'); +insert into sys_role_menu values ('2', '1046'); +insert into sys_role_menu values ('2', '1047'); +insert into sys_role_menu values ('2', '1048'); +insert into sys_role_menu values ('2', '1049'); +insert into sys_role_menu values ('2', '1050'); +insert into sys_role_menu values ('2', '1051'); +insert into sys_role_menu values ('2', '1052'); +insert into sys_role_menu values ('2', '1053'); +insert into sys_role_menu values ('2', '1054'); +insert into sys_role_menu values ('2', '1055'); +insert into sys_role_menu values ('2', '1056'); +insert into sys_role_menu values ('2', '1057'); +insert into sys_role_menu values ('2', '1058'); +insert into sys_role_menu values ('2', '1059'); +insert into sys_role_menu values ('2', '1060'); + +-- ---------------------------- +-- 8銆佽鑹插拰閮ㄩ棬鍏宠仈琛 瑙掕壊1-N閮ㄩ棬 +-- ---------------------------- +drop table if exists sys_role_dept; +create table sys_role_dept ( + role_id bigint(20) not null comment '瑙掕壊ID', + dept_id bigint(20) not null comment '閮ㄩ棬ID', + primary key(role_id, dept_id) +) engine=innodb comment = '瑙掕壊鍜岄儴闂ㄥ叧鑱旇〃'; + +-- ---------------------------- +-- 鍒濆鍖-瑙掕壊鍜岄儴闂ㄥ叧鑱旇〃鏁版嵁 +-- ---------------------------- +insert into sys_role_dept values ('2', '100'); +insert into sys_role_dept values ('2', '101'); +insert into sys_role_dept values ('2', '105'); + + +-- ---------------------------- +-- 9銆佺敤鎴蜂笌宀椾綅鍏宠仈琛 鐢ㄦ埛1-N宀椾綅 +-- ---------------------------- +drop table if exists sys_user_post; +create table sys_user_post +( + user_id bigint(20) not null comment '鐢ㄦ埛ID', + post_id bigint(20) not null comment '宀椾綅ID', + primary key (user_id, post_id) +) engine=innodb comment = '鐢ㄦ埛涓庡矖浣嶅叧鑱旇〃'; + +-- ---------------------------- +-- 鍒濆鍖-鐢ㄦ埛涓庡矖浣嶅叧鑱旇〃鏁版嵁 +-- ---------------------------- +insert into sys_user_post values ('1', '1'); +insert into sys_user_post values ('2', '2'); + + +-- ---------------------------- +-- 10銆佹搷浣滄棩蹇楄褰 +-- ---------------------------- +drop table if exists sys_oper_log; +create table sys_oper_log ( + oper_id bigint(20) not null auto_increment comment '鏃ュ織涓婚敭', + title varchar(50) default '' comment '妯″潡鏍囬', + business_type int(2) default 0 comment '涓氬姟绫诲瀷锛0鍏跺畠 1鏂板 2淇敼 3鍒犻櫎锛', + method varchar(200) default '' comment '鏂规硶鍚嶇О', + request_method varchar(10) default '' comment '璇锋眰鏂瑰紡', + operator_type int(1) default 0 comment '鎿嶄綔绫诲埆锛0鍏跺畠 1鍚庡彴鐢ㄦ埛 2鎵嬫満绔敤鎴凤級', + oper_name varchar(50) default '' comment '鎿嶄綔浜哄憳', + dept_name varchar(50) default '' comment '閮ㄩ棬鍚嶇О', + oper_url varchar(255) default '' comment '璇锋眰URL', + oper_ip varchar(128) default '' comment '涓绘満鍦板潃', + oper_location varchar(255) default '' comment '鎿嶄綔鍦扮偣', + oper_param varchar(2000) default '' comment '璇锋眰鍙傛暟', + json_result varchar(2000) default '' comment '杩斿洖鍙傛暟', + status int(1) default 0 comment '鎿嶄綔鐘舵侊紙0姝e父 1寮傚父锛', + error_msg varchar(2000) default '' comment '閿欒娑堟伅', + oper_time datetime comment '鎿嶄綔鏃堕棿', + cost_time bigint(20) default 0 comment '娑堣楁椂闂', + primary key (oper_id), + key idx_sys_oper_log_bt (business_type), + key idx_sys_oper_log_s (status), + key idx_sys_oper_log_ot (oper_time) +) engine=innodb auto_increment=100 comment = '鎿嶄綔鏃ュ織璁板綍'; + + +-- ---------------------------- +-- 11銆佸瓧鍏哥被鍨嬭〃 +-- ---------------------------- +drop table if exists sys_dict_type; +create table sys_dict_type +( + dict_id bigint(20) not null auto_increment comment '瀛楀吀涓婚敭', + dict_name varchar(100) default '' comment '瀛楀吀鍚嶇О', + dict_type varchar(100) default '' comment '瀛楀吀绫诲瀷', + status char(1) default '0' comment '鐘舵侊紙0姝e父 1鍋滅敤锛', + create_by varchar(64) default '' comment '鍒涘缓鑰', + create_time datetime comment '鍒涘缓鏃堕棿', + update_by varchar(64) default '' comment '鏇存柊鑰', + update_time datetime comment '鏇存柊鏃堕棿', + remark varchar(500) default null comment '澶囨敞', + primary key (dict_id), + unique (dict_type) +) engine=innodb auto_increment=100 comment = '瀛楀吀绫诲瀷琛'; + +insert into sys_dict_type values(1, '鐢ㄦ埛鎬у埆', 'sys_user_sex', '0', 'admin', sysdate(), '', null, '鐢ㄦ埛鎬у埆鍒楄〃'); +insert into sys_dict_type values(2, '鑿滃崟鐘舵', 'sys_show_hide', '0', 'admin', sysdate(), '', null, '鑿滃崟鐘舵佸垪琛'); +insert into sys_dict_type values(3, '绯荤粺寮鍏', 'sys_normal_disable', '0', 'admin', sysdate(), '', null, '绯荤粺寮鍏冲垪琛'); +insert into sys_dict_type values(4, '浠诲姟鐘舵', 'sys_job_status', '0', 'admin', sysdate(), '', null, '浠诲姟鐘舵佸垪琛'); +insert into sys_dict_type values(5, '浠诲姟鍒嗙粍', 'sys_job_group', '0', 'admin', sysdate(), '', null, '浠诲姟鍒嗙粍鍒楄〃'); +insert into sys_dict_type values(6, '绯荤粺鏄惁', 'sys_yes_no', '0', 'admin', sysdate(), '', null, '绯荤粺鏄惁鍒楄〃'); +insert into sys_dict_type values(7, '閫氱煡绫诲瀷', 'sys_notice_type', '0', 'admin', sysdate(), '', null, '閫氱煡绫诲瀷鍒楄〃'); +insert into sys_dict_type values(8, '閫氱煡鐘舵', 'sys_notice_status', '0', 'admin', sysdate(), '', null, '閫氱煡鐘舵佸垪琛'); +insert into sys_dict_type values(9, '鎿嶄綔绫诲瀷', 'sys_oper_type', '0', 'admin', sysdate(), '', null, '鎿嶄綔绫诲瀷鍒楄〃'); +insert into sys_dict_type values(10, '绯荤粺鐘舵', 'sys_common_status', '0', 'admin', sysdate(), '', null, '鐧诲綍鐘舵佸垪琛'); + + +-- ---------------------------- +-- 12銆佸瓧鍏告暟鎹〃 +-- ---------------------------- +drop table if exists sys_dict_data; +create table sys_dict_data +( + dict_code bigint(20) not null auto_increment comment '瀛楀吀缂栫爜', + dict_sort int(4) default 0 comment '瀛楀吀鎺掑簭', + dict_label varchar(100) default '' comment '瀛楀吀鏍囩', + dict_value varchar(100) default '' comment '瀛楀吀閿', + dict_type varchar(100) default '' comment '瀛楀吀绫诲瀷', + css_class varchar(100) default null comment '鏍峰紡灞炴э紙鍏朵粬鏍峰紡鎵╁睍锛', + list_class varchar(100) default null comment '琛ㄦ牸鍥炴樉鏍峰紡', + is_default char(1) default 'N' comment '鏄惁榛樿锛圷鏄 N鍚︼級', + status char(1) default '0' comment '鐘舵侊紙0姝e父 1鍋滅敤锛', + create_by varchar(64) default '' comment '鍒涘缓鑰', + create_time datetime comment '鍒涘缓鏃堕棿', + update_by varchar(64) default '' comment '鏇存柊鑰', + update_time datetime comment '鏇存柊鏃堕棿', + remark varchar(500) default null comment '澶囨敞', + primary key (dict_code) +) engine=innodb auto_increment=100 comment = '瀛楀吀鏁版嵁琛'; + +insert into sys_dict_data values(1, 1, '鐢', '0', 'sys_user_sex', '', '', 'Y', '0', 'admin', sysdate(), '', null, '鎬у埆鐢'); +insert into sys_dict_data values(2, 2, '濂', '1', 'sys_user_sex', '', '', 'N', '0', 'admin', sysdate(), '', null, '鎬у埆濂'); +insert into sys_dict_data values(3, 3, '鏈煡', '2', 'sys_user_sex', '', '', 'N', '0', 'admin', sysdate(), '', null, '鎬у埆鏈煡'); +insert into sys_dict_data values(4, 1, '鏄剧ず', '0', 'sys_show_hide', '', 'primary', 'Y', '0', 'admin', sysdate(), '', null, '鏄剧ず鑿滃崟'); +insert into sys_dict_data values(5, 2, '闅愯棌', '1', 'sys_show_hide', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '闅愯棌鑿滃崟'); +insert into sys_dict_data values(6, 1, '姝e父', '0', 'sys_normal_disable', '', 'primary', 'Y', '0', 'admin', sysdate(), '', null, '姝e父鐘舵'); +insert into sys_dict_data values(7, 2, '鍋滅敤', '1', 'sys_normal_disable', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '鍋滅敤鐘舵'); +insert into sys_dict_data values(8, 1, '姝e父', '0', 'sys_job_status', '', 'primary', 'Y', '0', 'admin', sysdate(), '', null, '姝e父鐘舵'); +insert into sys_dict_data values(9, 2, '鏆傚仠', '1', 'sys_job_status', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '鍋滅敤鐘舵'); +insert into sys_dict_data values(10, 1, '榛樿', 'DEFAULT', 'sys_job_group', '', '', 'Y', '0', 'admin', sysdate(), '', null, '榛樿鍒嗙粍'); +insert into sys_dict_data values(11, 2, '绯荤粺', 'SYSTEM', 'sys_job_group', '', '', 'N', '0', 'admin', sysdate(), '', null, '绯荤粺鍒嗙粍'); +insert into sys_dict_data values(12, 1, '鏄', 'Y', 'sys_yes_no', '', 'primary', 'Y', '0', 'admin', sysdate(), '', null, '绯荤粺榛樿鏄'); +insert into sys_dict_data values(13, 2, '鍚', 'N', 'sys_yes_no', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '绯荤粺榛樿鍚'); +insert into sys_dict_data values(14, 1, '閫氱煡', '1', 'sys_notice_type', '', 'warning', 'Y', '0', 'admin', sysdate(), '', null, '閫氱煡'); +insert into sys_dict_data values(15, 2, '鍏憡', '2', 'sys_notice_type', '', 'success', 'N', '0', 'admin', sysdate(), '', null, '鍏憡'); +insert into sys_dict_data values(16, 1, '姝e父', '0', 'sys_notice_status', '', 'primary', 'Y', '0', 'admin', sysdate(), '', null, '姝e父鐘舵'); +insert into sys_dict_data values(17, 2, '鍏抽棴', '1', 'sys_notice_status', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '鍏抽棴鐘舵'); +insert into sys_dict_data values(18, 99, '鍏朵粬', '0', 'sys_oper_type', '', 'info', 'N', '0', 'admin', sysdate(), '', null, '鍏朵粬鎿嶄綔'); +insert into sys_dict_data values(19, 1, '鏂板', '1', 'sys_oper_type', '', 'info', 'N', '0', 'admin', sysdate(), '', null, '鏂板鎿嶄綔'); +insert into sys_dict_data values(20, 2, '淇敼', '2', 'sys_oper_type', '', 'info', 'N', '0', 'admin', sysdate(), '', null, '淇敼鎿嶄綔'); +insert into sys_dict_data values(21, 3, '鍒犻櫎', '3', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '鍒犻櫎鎿嶄綔'); +insert into sys_dict_data values(22, 4, '鎺堟潈', '4', 'sys_oper_type', '', 'primary', 'N', '0', 'admin', sysdate(), '', null, '鎺堟潈鎿嶄綔'); +insert into sys_dict_data values(23, 5, '瀵煎嚭', '5', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', sysdate(), '', null, '瀵煎嚭鎿嶄綔'); +insert into sys_dict_data values(24, 6, '瀵煎叆', '6', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', sysdate(), '', null, '瀵煎叆鎿嶄綔'); +insert into sys_dict_data values(25, 7, '寮洪', '7', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '寮洪鎿嶄綔'); +insert into sys_dict_data values(26, 8, '鐢熸垚浠g爜', '8', 'sys_oper_type', '', 'warning', 'N', '0', 'admin', sysdate(), '', null, '鐢熸垚鎿嶄綔'); +insert into sys_dict_data values(27, 9, '娓呯┖鏁版嵁', '9', 'sys_oper_type', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '娓呯┖鎿嶄綔'); +insert into sys_dict_data values(28, 1, '鎴愬姛', '0', 'sys_common_status', '', 'primary', 'N', '0', 'admin', sysdate(), '', null, '姝e父鐘舵'); +insert into sys_dict_data values(29, 2, '澶辫触', '1', 'sys_common_status', '', 'danger', 'N', '0', 'admin', sysdate(), '', null, '鍋滅敤鐘舵'); + + +-- ---------------------------- +-- 13銆佸弬鏁伴厤缃〃 +-- ---------------------------- +drop table if exists sys_config; +create table sys_config ( + config_id int(5) not null auto_increment comment '鍙傛暟涓婚敭', + config_name varchar(100) default '' comment '鍙傛暟鍚嶇О', + config_key varchar(100) default '' comment '鍙傛暟閿悕', + config_value varchar(500) default '' comment '鍙傛暟閿', + config_type char(1) default 'N' comment '绯荤粺鍐呯疆锛圷鏄 N鍚︼級', + create_by varchar(64) default '' comment '鍒涘缓鑰', + create_time datetime comment '鍒涘缓鏃堕棿', + update_by varchar(64) default '' comment '鏇存柊鑰', + update_time datetime comment '鏇存柊鏃堕棿', + remark varchar(500) default null comment '澶囨敞', + primary key (config_id) +) engine=innodb auto_increment=100 comment = '鍙傛暟閰嶇疆琛'; + +insert into sys_config values(1, '涓绘鏋堕〉-榛樿鐨偆鏍峰紡鍚嶇О', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', sysdate(), '', null, '钃濊壊 skin-blue銆佺豢鑹 skin-green銆佺传鑹 skin-purple銆佺孩鑹 skin-red銆侀粍鑹 skin-yellow' ); +insert into sys_config values(2, '鐢ㄦ埛绠$悊-璐﹀彿鍒濆瀵嗙爜', 'sys.user.initPassword', '123456', 'Y', 'admin', sysdate(), '', null, '鍒濆鍖栧瘑鐮 123456' ); +insert into sys_config values(3, '涓绘鏋堕〉-渚ц竟鏍忎富棰', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', sysdate(), '', null, '娣辫壊涓婚theme-dark锛屾祬鑹蹭富棰榯heme-light' ); +insert into sys_config values(4, '璐﹀彿鑷姪-楠岃瘉鐮佸紑鍏', 'sys.account.captchaEnabled', 'true', 'Y', 'admin', sysdate(), '', null, '鏄惁寮鍚獙璇佺爜鍔熻兘锛坱rue寮鍚紝false鍏抽棴锛'); +insert into sys_config values(5, '璐﹀彿鑷姪-鏄惁寮鍚敤鎴锋敞鍐屽姛鑳', 'sys.account.registerUser', 'false', 'Y', 'admin', sysdate(), '', null, '鏄惁寮鍚敞鍐岀敤鎴峰姛鑳斤紙true寮鍚紝false鍏抽棴锛'); +insert into sys_config values(6, '鐢ㄦ埛鐧诲綍-榛戝悕鍗曞垪琛', 'sys.login.blackIPList', '', 'Y', 'admin', sysdate(), '', null, '璁剧疆鐧诲綍IP榛戝悕鍗曢檺鍒讹紝澶氫釜鍖归厤椤逛互;鍒嗛殧锛屾敮鎸佸尮閰嶏紙*閫氶厤銆佺綉娈碉級'); + + +-- ---------------------------- +-- 14銆佺郴缁熻闂褰 +-- ---------------------------- +drop table if exists sys_logininfor; +create table sys_logininfor ( + info_id bigint(20) not null auto_increment comment '璁块棶ID', + user_name varchar(50) default '' comment '鐢ㄦ埛璐﹀彿', + ipaddr varchar(128) default '' comment '鐧诲綍IP鍦板潃', + login_location varchar(255) default '' comment '鐧诲綍鍦扮偣', + browser varchar(50) default '' comment '娴忚鍣ㄧ被鍨', + os varchar(50) default '' comment '鎿嶄綔绯荤粺', + status char(1) default '0' comment '鐧诲綍鐘舵侊紙0鎴愬姛 1澶辫触锛', + msg varchar(255) default '' comment '鎻愮ず娑堟伅', + login_time datetime comment '璁块棶鏃堕棿', + primary key (info_id), + key idx_sys_logininfor_s (status), + key idx_sys_logininfor_lt (login_time) +) engine=innodb auto_increment=100 comment = '绯荤粺璁块棶璁板綍'; + + +-- ---------------------------- +-- 15銆佸畾鏃朵换鍔¤皟搴﹁〃 +-- ---------------------------- +drop table if exists sys_job; +create table sys_job ( + job_id bigint(20) not null auto_increment comment '浠诲姟ID', + job_name varchar(64) default '' comment '浠诲姟鍚嶇О', + job_group varchar(64) default 'DEFAULT' comment '浠诲姟缁勫悕', + invoke_target varchar(500) not null comment '璋冪敤鐩爣瀛楃涓', + cron_expression varchar(255) default '' comment 'cron鎵ц琛ㄨ揪寮', + misfire_policy varchar(20) default '3' comment '璁″垝鎵ц閿欒绛栫暐锛1绔嬪嵆鎵ц 2鎵ц涓娆 3鏀惧純鎵ц锛', + concurrent char(1) default '1' comment '鏄惁骞跺彂鎵ц锛0鍏佽 1绂佹锛', + status char(1) default '0' comment '鐘舵侊紙0姝e父 1鏆傚仠锛', + create_by varchar(64) default '' comment '鍒涘缓鑰', + create_time datetime comment '鍒涘缓鏃堕棿', + update_by varchar(64) default '' comment '鏇存柊鑰', + update_time datetime comment '鏇存柊鏃堕棿', + remark varchar(500) default '' comment '澶囨敞淇℃伅', + primary key (job_id, job_name, job_group) +) engine=innodb auto_increment=100 comment = '瀹氭椂浠诲姟璋冨害琛'; + +insert into sys_job values(1, '绯荤粺榛樿锛堟棤鍙傦級', 'DEFAULT', 'ryTask.ryNoParams', '0/10 * * * * ?', '3', '1', '1', 'admin', sysdate(), '', null, ''); +insert into sys_job values(2, '绯荤粺榛樿锛堟湁鍙傦級', 'DEFAULT', 'ryTask.ryParams(\'ry\')', '0/15 * * * * ?', '3', '1', '1', 'admin', sysdate(), '', null, ''); +insert into sys_job values(3, '绯荤粺榛樿锛堝鍙傦級', 'DEFAULT', 'ryTask.ryMultipleParams(\'ry\', true, 2000L, 316.50D, 100)', '0/20 * * * * ?', '3', '1', '1', 'admin', sysdate(), '', null, ''); + + +-- ---------------------------- +-- 16銆佸畾鏃朵换鍔¤皟搴︽棩蹇楄〃 +-- ---------------------------- +drop table if exists sys_job_log; +create table sys_job_log ( + job_log_id bigint(20) not null auto_increment comment '浠诲姟鏃ュ織ID', + job_name varchar(64) not null comment '浠诲姟鍚嶇О', + job_group varchar(64) not null comment '浠诲姟缁勫悕', + invoke_target varchar(500) not null comment '璋冪敤鐩爣瀛楃涓', + job_message varchar(500) comment '鏃ュ織淇℃伅', + status char(1) default '0' comment '鎵ц鐘舵侊紙0姝e父 1澶辫触锛', + exception_info varchar(2000) default '' comment '寮傚父淇℃伅', + create_time datetime comment '鍒涘缓鏃堕棿', + primary key (job_log_id) +) engine=innodb comment = '瀹氭椂浠诲姟璋冨害鏃ュ織琛'; + + +-- ---------------------------- +-- 17銆侀氱煡鍏憡琛 +-- ---------------------------- +drop table if exists sys_notice; +create table sys_notice ( + notice_id int(4) not null auto_increment comment '鍏憡ID', + notice_title varchar(50) not null comment '鍏憡鏍囬', + notice_type char(1) not null comment '鍏憡绫诲瀷锛1閫氱煡 2鍏憡锛', + notice_content longblob default null comment '鍏憡鍐呭', + status char(1) default '0' comment '鍏憡鐘舵侊紙0姝e父 1鍏抽棴锛', + create_by varchar(64) default '' comment '鍒涘缓鑰', + create_time datetime comment '鍒涘缓鏃堕棿', + update_by varchar(64) default '' comment '鏇存柊鑰', + update_time datetime comment '鏇存柊鏃堕棿', + remark varchar(255) default null comment '澶囨敞', + primary key (notice_id) +) engine=innodb auto_increment=10 comment = '閫氱煡鍏憡琛'; + +-- ---------------------------- +-- 鍒濆鍖-鍏憡淇℃伅琛ㄦ暟鎹 +-- ---------------------------- +insert into sys_notice values('1', '娓╅Θ鎻愰啋锛2018-07-01 瀛︿俊鑰冭瘯鏂扮増鏈彂甯冨暒', '2', '鏂扮増鏈唴瀹', '0', 'admin', sysdate(), '', null, '绠$悊鍛'); +insert into sys_notice values('2', '缁存姢閫氱煡锛2018-07-01 瀛︿俊鑰冭瘯绯荤粺鍑屾櫒缁存姢', '1', '缁存姢鍐呭', '0', 'admin', sysdate(), '', null, '绠$悊鍛'); + + +-- ---------------------------- +-- 18銆佷唬鐮佺敓鎴愪笟鍔¤〃 +-- ---------------------------- +drop table if exists gen_table; +create table gen_table ( + table_id bigint(20) not null auto_increment comment '缂栧彿', + table_name varchar(200) default '' comment '琛ㄥ悕绉', + table_comment varchar(500) default '' comment '琛ㄦ弿杩', + sub_table_name varchar(64) default null comment '鍏宠仈瀛愯〃鐨勮〃鍚', + sub_table_fk_name varchar(64) default null comment '瀛愯〃鍏宠仈鐨勫閿悕', + class_name varchar(100) default '' comment '瀹炰綋绫诲悕绉', + tpl_category varchar(200) default 'crud' comment '浣跨敤鐨勬ā鏉匡紙crud鍗曡〃鎿嶄綔 tree鏍戣〃鎿嶄綔锛', + tpl_web_type varchar(30) default '' comment '鍓嶇妯℃澘绫诲瀷锛坋lement-ui妯$増 element-plus妯$増锛', + package_name varchar(100) comment '鐢熸垚鍖呰矾寰', + module_name varchar(30) comment '鐢熸垚妯″潡鍚', + business_name varchar(30) comment '鐢熸垚涓氬姟鍚', + function_name varchar(50) comment '鐢熸垚鍔熻兘鍚', + function_author varchar(50) comment '鐢熸垚鍔熻兘浣滆', + gen_type char(1) default '0' comment '鐢熸垚浠g爜鏂瑰紡锛0zip鍘嬬缉鍖 1鑷畾涔夎矾寰勶級', + gen_path varchar(200) default '/' comment '鐢熸垚璺緞锛堜笉濉粯璁ら」鐩矾寰勶級', + options varchar(1000) comment '鍏跺畠鐢熸垚閫夐」', + create_by varchar(64) default '' comment '鍒涘缓鑰', + create_time datetime comment '鍒涘缓鏃堕棿', + update_by varchar(64) default '' comment '鏇存柊鑰', + update_time datetime comment '鏇存柊鏃堕棿', + remark varchar(500) default null comment '澶囨敞', + primary key (table_id) +) engine=innodb auto_increment=1 comment = '浠g爜鐢熸垚涓氬姟琛'; + + +-- ---------------------------- +-- 19銆佷唬鐮佺敓鎴愪笟鍔¤〃瀛楁 +-- ---------------------------- +drop table if exists gen_table_column; +create table gen_table_column ( + column_id bigint(20) not null auto_increment comment '缂栧彿', + table_id bigint(20) comment '褰掑睘琛ㄧ紪鍙', + column_name varchar(200) comment '鍒楀悕绉', + column_comment varchar(500) comment '鍒楁弿杩', + column_type varchar(100) comment '鍒楃被鍨', + java_type varchar(500) comment 'JAVA绫诲瀷', + java_field varchar(200) comment 'JAVA瀛楁鍚', + is_pk char(1) comment '鏄惁涓婚敭锛1鏄級', + is_increment char(1) comment '鏄惁鑷锛1鏄級', + is_required char(1) comment '鏄惁蹇呭~锛1鏄級', + is_insert char(1) comment '鏄惁涓烘彃鍏ュ瓧娈碉紙1鏄級', + is_edit char(1) comment '鏄惁缂栬緫瀛楁锛1鏄級', + is_list char(1) comment '鏄惁鍒楄〃瀛楁锛1鏄級', + is_query char(1) comment '鏄惁鏌ヨ瀛楁锛1鏄級', + query_type varchar(200) default 'EQ' comment '鏌ヨ鏂瑰紡锛堢瓑浜庛佷笉绛変簬銆佸ぇ浜庛佸皬浜庛佽寖鍥达級', + html_type varchar(200) comment '鏄剧ず绫诲瀷锛堟枃鏈銆佹枃鏈煙銆佷笅鎷夋銆佸閫夋銆佸崟閫夋銆佹棩鏈熸帶浠讹級', + dict_type varchar(200) default '' comment '瀛楀吀绫诲瀷', + sort int comment '鎺掑簭', + create_by varchar(64) default '' comment '鍒涘缓鑰', + create_time datetime comment '鍒涘缓鏃堕棿', + update_by varchar(64) default '' comment '鏇存柊鑰', + update_time datetime comment '鏇存柊鏃堕棿', + primary key (column_id) +) engine=innodb auto_increment=1 comment = '浠g爜鐢熸垚涓氬姟琛ㄥ瓧娈';