From 179b12e3bf7031c2d41bca308759fc20a4c9eaed Mon Sep 17 00:00:00 2001 From: liumengyu <2459468901@qq.com> Date: Fri, 21 Aug 2026 12:08:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=85=A5=E5=AF=BC=E5=87=BA=20?= =?UTF-8?q?=E6=A8=A1=E7=89=88=E4=B8=8B=E8=BD=BD=20bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/jwgl/DownloadController.java | 102 +++ .../web/controller/jwgl/KSController.java | 77 ++ ...培养方案课程数据文件模板.xls | Bin 0 -> 61440 bytes .../main/resources/file/学员队模板.xls | Bin 0 -> 53760 bytes .../file/导入教学日志模板.xls | Bin 0 -> 27648 bytes .../file/教学场地管理模板.xls | Bin 0 -> 51712 bytes .../src/main/resources/file/教材管理.xls | Bin 0 -> 65024 bytes .../main/resources/file/教研室模板.xls | Bin 0 -> 57856 bytes .../resources/file/联教连训管理.xls | Bin 0 -> 34816 bytes .../file/课程课目数据文件模板.xls | Bin 0 -> 60416 bytes .../java/com/roomroot/jwgl/entity/BZLB.java | 2 +- .../java/com/roomroot/jwgl/entity/BZTGMX.java | 2 +- .../com/roomroot/jwgl/entity/DBVersion.java | 2 +- .../com/roomroot/jwgl/entity/FWBDRWB.java | 2 +- .../com/roomroot/jwgl/entity/FWBDWPRYB.java | 2 +- .../com/roomroot/jwgl/entity/FWBDXQB.java | 2 +- .../java/com/roomroot/jwgl/entity/JCXX.java | 4 +- .../java/com/roomroot/jwgl/entity/JSB.java | 2 +- .../java/com/roomroot/jwgl/entity/JXRW.java | 2 +- .../java/com/roomroot/jwgl/entity/JYB.java | 2 +- .../java/com/roomroot/jwgl/entity/JYSRWS.java | 2 +- .../java/com/roomroot/jwgl/entity/KB.java | 4 +- .../java/com/roomroot/jwgl/entity/KCB.java | 2 +- .../java/com/roomroot/jwgl/entity/KCBMBB.java | 2 +- .../com/roomroot/jwgl/entity/LBSBXXB.java | 2 +- .../com/roomroot/jwgl/entity/LBZYGLPT.java | 2 +- .../java/com/roomroot/jwgl/entity/LLB.java | 2 +- .../java/com/roomroot/jwgl/entity/MHKSQB.java | 2 +- .../java/com/roomroot/jwgl/entity/PXRW.java | 2 +- .../java/com/roomroot/jwgl/entity/SSKC.java | 6 +- .../java/com/roomroot/jwgl/entity/SSKCB.java | 2 +- .../java/com/roomroot/jwgl/entity/WSSXB.java | 2 +- .../java/com/roomroot/jwgl/entity/XKZYXX.java | 2 +- .../java/com/roomroot/jwgl/entity/XQ.java | 2 +- .../com/roomroot/jwgl/entity/XQJYXXB.java | 2 +- .../com/roomroot/jwgl/entity/XYCPCPXMB.java | 2 +- .../roomroot/jwgl/entity/XYDNDXQJBXXB.java | 4 +- .../java/com/roomroot/jwgl/entity/XYDRWB.java | 2 +- .../com/roomroot/jwgl/entity/XYDSCKCB.java | 2 +- .../com/roomroot/jwgl/entity/XYJXQJB.java | 2 +- .../com/roomroot/jwgl/entity/XYKCBKCP.java | 2 +- .../com/roomroot/jwgl/entity/XYQJSPB.java | 2 +- .../java/com/roomroot/jwgl/entity/XYXX.java | 6 +- .../java/com/roomroot/jwgl/entity/XYXXB.java | 2 +- .../java/com/roomroot/jwgl/entity/ZYB.java | 4 +- .../com/roomroot/jwgl/entity/ZYJXJHB.java | 2 +- .../roomroot/jwgl/mapper/DBVersionMapper.xml | 4 +- .../com/roomroot/jwgl/mapper/KBMapper.xml | 2 +- .../com/roomroot/jwgl/mapper/KCBMBBMapper.xml | 4 +- .../roomroot/jwgl/mapper/LBZYGLPTMapper.xml | 4 +- .../mapper/SystemInitializationMapper.xml | 4 +- .../jwgl/mapper/TeachingMaterialMapper.xml | 4 +- .../com/roomroot/jwgl/mapper/WSSXBMapper.xml | 4 +- .../com/roomroot/jwgl/mapper/XQMapper.xml | 4 +- .../roomroot/jwgl/mapper/XYCPCPXMBMapper.xml | 4 +- .../com/roomroot/jwgl/mapper/XYXXMapper.xml | 4 +- .../com/roomroot/jwgl/mapper/ZYBMapper.xml | 4 +- .../com/roomroot/jwgl/service/LogService.java | 3 + .../service/impl/DisciplineServiceImpl.java | 2 +- .../jwgl/service/impl/KBServiceImpl.java | 2 +- .../jwgl/service/impl/LogServiceImpl.java | 76 ++ .../roomroot/jwgl/utils/ExcelParseUtil.java | 64 ++ backend/sql/jwgl.sql | 0 backend/sql/quartz.sql | 174 ----- backend/sql/ry_20260417.sql | 723 ------------------ 65 files changed, 389 insertions(+), 964 deletions(-) create mode 100644 backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/DownloadController.java create mode 100644 backend/roomroot-admin/src/main/resources/file/人才培养方案课程数据文件模板.xls create mode 100644 backend/roomroot-admin/src/main/resources/file/学员队模板.xls create mode 100644 backend/roomroot-admin/src/main/resources/file/导入教学日志模板.xls create mode 100644 backend/roomroot-admin/src/main/resources/file/教学场地管理模板.xls create mode 100644 backend/roomroot-admin/src/main/resources/file/教材管理.xls create mode 100644 backend/roomroot-admin/src/main/resources/file/教研室模板.xls create mode 100644 backend/roomroot-admin/src/main/resources/file/联教连训管理.xls create mode 100644 backend/roomroot-admin/src/main/resources/file/课程课目数据文件模板.xls delete mode 100644 backend/sql/jwgl.sql delete mode 100644 backend/sql/quartz.sql delete mode 100644 backend/sql/ry_20260417.sql diff --git a/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/DownloadController.java b/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/DownloadController.java new file mode 100644 index 000000000..9e6fe3206 --- /dev/null +++ b/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/DownloadController.java @@ -0,0 +1,102 @@ +package com.roomroot.web.controller.jwgl; + +import com.roomroot.common.exception.ServiceException; +import com.roomroot.common.utils.file.FileUtils; +import jakarta.servlet.http.HttpServletResponse; +import org.apache.commons.io.IOUtils; +import org.springframework.core.io.ClassPathResource; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +/** + * 导入模版下载。模版文件位于 classpath:file/ + */ +@RestController +@RequestMapping("/download") +public class DownloadController { + + private static final String TEMPLATE_DIR = "file/"; + + /** + * 人才培养方案课程数据文件模板 + */ + @GetMapping("/training-program") + public void downloadTrainingProgram(HttpServletResponse response) throws IOException { + downloadTemplate(response, "人才培养方案课程数据文件模板.xls"); + } + + /** + * 学员队模板 + */ + @GetMapping("/student-team") + public void downloadStudentTeam(HttpServletResponse response) throws IOException { + downloadTemplate(response, "学员队模板.xls"); + } + + /** + * 导入教学日志模板 + */ + @GetMapping("/teaching-log") + public void downloadTeachingLog(HttpServletResponse response) throws IOException { + downloadTemplate(response, "导入教学日志模板.xls"); + } + + /** + * 教学场地管理模板 + */ + @GetMapping("/classroom") + public void downloadClassroom(HttpServletResponse response) throws IOException { + downloadTemplate(response, "教学场地管理模板.xls"); + } + + /** + * 教材管理模板 + */ + @GetMapping("/teaching-material") + public void downloadTeachingMaterial(HttpServletResponse response) throws IOException { + downloadTemplate(response, "教材管理.xls"); + } + + /** + * 教研室模板 + */ + @GetMapping("/jys") + public void downloadJys(HttpServletResponse response) throws IOException { + downloadTemplate(response, "教研室模板.xls"); + } + + /** + * 联教连训管理模板 + */ + @GetMapping("/joint-training") + public void downloadJointTraining(HttpServletResponse response) throws IOException { + downloadTemplate(response, "联教连训管理.xls"); + } + + /** + * 课程课目数据文件模板 + */ + @GetMapping("/course-subject") + public void downloadCourseSubject(HttpServletResponse response) throws IOException { + downloadTemplate(response, "课程课目数据文件模板.xls"); + } + + private void downloadTemplate(HttpServletResponse response, String fileName) throws IOException { + ClassPathResource resource = new ClassPathResource(TEMPLATE_DIR + fileName); + if (!resource.exists()) { + throw new ServiceException("模板文件不存在:" + fileName); + } + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + FileUtils.setAttachmentResponseHeader(response, fileName); + try (InputStream is = resource.getInputStream(); OutputStream os = response.getOutputStream()) { + IOUtils.copy(is, os); + os.flush(); + } + } +} diff --git a/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/KSController.java b/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/KSController.java index 96c631599..2a766fb44 100644 --- a/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/KSController.java +++ b/backend/roomroot-admin/src/main/java/com/roomroot/web/controller/jwgl/KSController.java @@ -2,6 +2,7 @@ package com.roomroot.web.controller.jwgl; import com.roomroot.jwgl.dto.ks.HourStatisticsQuery; import com.roomroot.jwgl.entity.KSFBZ; +import com.roomroot.jwgl.entity.KSBZXM; import com.roomroot.jwgl.entity.KSXSFA; import com.roomroot.jwgl.service.KJService; import com.roomroot.jwgl.service.KSService; @@ -17,6 +18,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; import jakarta.annotation.Resource; @@ -259,4 +261,79 @@ public class KSController { ksService.exportFeeStatistics(cond, response); } + // ======================== 联教联训管理(课时补助项目) ======================== + + /** + * 新增联教联训(课时补助项目)。 + *

对应表:课时补助项目。编号为空时由服务端生成 UUID。

+ */ + @PostMapping("/yjlx/add") + public Result addSubsidyProject(@RequestBody KSBZXM entity) { + logService.addSubsidyProject(entity); + return Result.success(); + } + + /** + * 删除联教联训(课时补助项目)。 + * + * @param bh 编号 + */ + @PostMapping("/yjlx/delete") + public Result deleteSubsidyProject(@RequestParam("bh") String bh) { + logService.deleteSubsidyProject(bh); + return Result.success(); + } + + /** + * 更新联教联训(课时补助项目)。 + */ + @PostMapping("/yjlx/update") + public Result updateSubsidyProject(@RequestBody KSBZXM entity) { + logService.updateSubsidyProject(entity); + return Result.success(); + } + + /** + * 根据编号查询联教联训详情。 + */ + @GetMapping("/yjlx/get") + public Result getSubsidyProject(@RequestParam("bh") String bh) { + return Result.success(logService.getSubsidyProjectById(bh)); + } + + /** + * 分页查询联教联训列表(支持按名称模糊筛选)。 + */ + @GetMapping("/yjlx/list") + public Result> listSubsidyProject( + @RequestParam(defaultValue = "1") Integer pageNum, + @RequestParam(defaultValue = "20") Integer pageSize, + @RequestParam(required = false) String mc) { + KSBZXM cond = new KSBZXM(); + cond.setMc(mc); + return Result.success(logService.pageSubsidyProject(new PageQuery(pageNum, pageSize), cond)); + } + + /** + * 从 Excel(.xls/.xlsx) 导入联教联训数据。 + *

模板列:序号, 补助项目名称, 性质, 依据, 开始日期, 结束日期, 项目说明, + * 项目备注, 教研室名称, 补助教员姓名, 补助课时量, 课时量备注

+ * + * @param file 上传的联教连训管理.xls 文件 + * @return 导入条数 + */ + @PostMapping("/yjlx/import") + public Result importSubsidyProject(@RequestParam("file") MultipartFile file) throws Exception { + int count = logService.importSubsidyProject(file); + return Result.success("导入成功,共" + count + "条", count); + } + + /** + * 导出联教联训数据到 Excel(.xlsx)。 + */ + @GetMapping("/yjlx/export") + public void exportSubsidyProject(HttpServletResponse response) throws Exception { + logService.exportSubsidyProject(response); + } + } diff --git a/backend/roomroot-admin/src/main/resources/file/人才培养方案课程数据文件模板.xls b/backend/roomroot-admin/src/main/resources/file/人才培养方案课程数据文件模板.xls new file mode 100644 index 0000000000000000000000000000000000000000..6542707aa5d4c353fc9438b4673cd7f07ebd43e4 GIT binary patch literal 61440 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 F{{pMN1D5~* literal 0 HcmV?d00001 diff --git a/backend/roomroot-admin/src/main/resources/file/学员队模板.xls b/backend/roomroot-admin/src/main/resources/file/学员队模板.xls new file mode 100644 index 0000000000000000000000000000000000000000..f9d0bd1186d35ec210c85d535dedd7b949bd6110 GIT binary patch literal 53760 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 AjQ{`u literal 0 HcmV?d00001 diff --git a/backend/roomroot-admin/src/main/resources/file/教学场地管理模板.xls b/backend/roomroot-admin/src/main/resources/file/教学场地管理模板.xls new file mode 100644 index 0000000000000000000000000000000000000000..aa601e9a9d6aa5ce425ab3aaf87864bbecad4f16 GIT binary patch literal 51712 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 literal 0 HcmV?d00001 diff --git a/backend/roomroot-admin/src/main/resources/file/教研室模板.xls b/backend/roomroot-admin/src/main/resources/file/教研室模板.xls new file mode 100644 index 0000000000000000000000000000000000000000..736ef5ea6767b27bc7d112368bd2a9fbdb29fea9 GIT binary patch literal 57856 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 literal 0 HcmV?d00001 diff --git a/backend/roomroot-admin/src/main/resources/file/联教连训管理.xls b/backend/roomroot-admin/src/main/resources/file/联教连训管理.xls new file mode 100644 index 0000000000000000000000000000000000000000..8fc81c506f325976d36fb3c58d419e456279adc1 GIT binary patch literal 34816 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 literal 0 HcmV?d00001 diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/BZLB.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/BZLB.java index 319fdeae4..78eb8926d 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/BZLB.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/BZLB.java @@ -10,7 +10,7 @@ import lombok.Data; * 保障类别 */ @Data -@TableName(value = "保障类别", schema = "JW") +@TableName(value = "保障类别") public class BZLB { /** diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/BZTGMX.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/BZTGMX.java index 7f8d0b808..402b95068 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/BZTGMX.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/BZTGMX.java @@ -77,7 +77,7 @@ public class BZTGMX extends BaseEntity { private String zylb; /** - * json字典 + * JSONZD */ private String jsonzd; diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/DBVersion.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/DBVersion.java index 395574461..39afe0967 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/DBVersion.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/DBVersion.java @@ -218,7 +218,7 @@ public class DBVersion extends BaseEntity { private String jSXSBJ; /** - * json字典 + * JSONZD */ private String jsonZD; diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/FWBDRWB.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/FWBDRWB.java index 6bfeb569f..df82cd09f 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/FWBDRWB.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/FWBDRWB.java @@ -104,7 +104,7 @@ public class FWBDRWB extends BaseEntity { private LocalDateTime jssj; /** - * json字典 + * JSONZD */ private String jsonzd; diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/FWBDWPRYB.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/FWBDWPRYB.java index 96ce02c14..2dbfdc93a 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/FWBDWPRYB.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/FWBDWPRYB.java @@ -74,7 +74,7 @@ public class FWBDWPRYB extends BaseEntity { private String wcqk; /** - * json字典 + * JSONZD */ private String jsonzd; diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/FWBDXQB.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/FWBDXQB.java index 2f8a23680..248435ad3 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/FWBDXQB.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/FWBDXQB.java @@ -124,7 +124,7 @@ public class FWBDXQB extends BaseEntity { private LocalDateTime jssj; /** - * json字典 + * JSONZD */ private String jsonzd; diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JCXX.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JCXX.java index ec5bb25e0..fd0075e8b 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JCXX.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JCXX.java @@ -216,9 +216,9 @@ public class JCXX extends BaseEntity { private String xqk; /** - * json字典 + * JSONZD */ - @TableField("json字典") + @TableField("JSONZD") private String jsonzd; /** diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JSB.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JSB.java index 0cb90b581..5d4669fc7 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JSB.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JSB.java @@ -113,7 +113,7 @@ public class JSB extends BaseEntity { private String jc; /** - * json字典 + * JSONZD */ @TableField("JSONZD") private String jsonzd; diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JXRW.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JXRW.java index c30f30804..e5726f72c 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JXRW.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JXRW.java @@ -15,7 +15,7 @@ import java.time.LocalDateTime; */ @Data @EqualsAndHashCode(callSuper = true) -@TableName(value = "教学任务", schema = "JW") +@TableName(value = "教学任务") public class JXRW extends BaseEntity { /** diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JYB.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JYB.java index da5e103bf..1e13cdf09 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JYB.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JYB.java @@ -108,7 +108,7 @@ public class JYB { @TableField(value = "序号标识", updateStrategy = FieldStrategy.NEVER) private Integer xhbs; - /** json字典 */ + /** JSONZD */ @TableField("JSONZD") private String jsonzd; diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JYSRWS.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JYSRWS.java index c7b983c3c..ff229be80 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JYSRWS.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/JYSRWS.java @@ -15,7 +15,7 @@ import java.time.LocalDateTime; */ @Data @EqualsAndHashCode(callSuper = true) -@TableName(value = "教研室任务书", schema = "JW") +@TableName(value = "教研室任务书") public class JYSRWS extends BaseEntity { /** diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/KB.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/KB.java index ee261b23d..0341b1cea 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/KB.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/KB.java @@ -151,8 +151,8 @@ public class KB { @TableField("课程建设方式") private String kcjsfs; - /** json字典 */ - @TableField("json字典") + /** JSONZD */ + @TableField("JSONZD") private String jsonzd; /** 政治类课程 */ diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/KCB.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/KCB.java index 11ae6afd9..7a341bcc4 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/KCB.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/KCB.java @@ -13,7 +13,7 @@ import java.time.LocalDateTime; * 课程表 */ @Data -@TableName(value = "课程表", schema = "JW") +@TableName(value = "课程表") public class KCB { /** diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/KCBMBB.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/KCBMBB.java index d8be705af..f4d018aac 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/KCBMBB.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/KCBMBB.java @@ -249,7 +249,7 @@ public class KCBMBB extends BaseEntity { private Integer kCBYZZKTS; /** - * json字典 + * JSONZD */ private String jsonZD; diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/LBSBXXB.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/LBSBXXB.java index c03d63a21..4d989f206 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/LBSBXXB.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/LBSBXXB.java @@ -117,7 +117,7 @@ public class LBSBXXB extends BaseEntity { private String zbdzj; /** - * json字典 + * JSONZD */ private String jsonzd; diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/LBZYGLPT.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/LBZYGLPT.java index 352cfc424..5144a851c 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/LBZYGLPT.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/LBZYGLPT.java @@ -102,7 +102,7 @@ public class LBZYGLPT extends BaseEntity { private Boolean zYPTDLWCLB; /** - * json字典 + * JSONZD */ private String jsonZD; diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/LLB.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/LLB.java index f270773ce..769ca5691 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/LLB.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/LLB.java @@ -279,7 +279,7 @@ public class LLB extends BaseEntity { private LocalDateTime xgrq; /** - * json字典 + * JSONZD */ private String jsonzd; diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/MHKSQB.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/MHKSQB.java index b933e846c..58f835c75 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/MHKSQB.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/MHKSQB.java @@ -124,7 +124,7 @@ public class MHKSQB extends BaseEntity { private LocalDateTime jwshsj; /** - * json字典 + * JSONZD */ private String jsonzd; diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/PXRW.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/PXRW.java index 8b9d38b0e..8c1cca8d9 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/PXRW.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/PXRW.java @@ -89,7 +89,7 @@ public class PXRW extends BaseEntity { private Integer jhbcs; /** - * json字典 + * JSONZD */ private String jsonzd; diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/SSKC.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/SSKC.java index 348b0196f..da7c9efbf 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/SSKC.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/SSKC.java @@ -13,7 +13,7 @@ import java.time.LocalDateTime; * 实施_课程 */ @Data -@TableName(value = "实施_课程", schema = "JW") +@TableName(value = "实施_课程") public class SSKC { /** @@ -189,9 +189,9 @@ public class SSKC { private String fzqzbzbh; /** - * json字典 + * JSONZD */ - @TableField("json字典") + @TableField("JSONZD") private String jsonzd; /** diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/SSKCB.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/SSKCB.java index 55a353d96..fd72199b8 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/SSKCB.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/SSKCB.java @@ -154,7 +154,7 @@ public class SSKCB { private String ycxx; /** - * json字典 + * JSONZD */ @TableField("JSONZD") private String jsonzd; diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/WSSXB.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/WSSXB.java index 73bc43798..f9f0730bc 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/WSSXB.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/WSSXB.java @@ -64,7 +64,7 @@ public class WSSXB extends BaseEntity { private String bZ; /** - * json字典 + * JSONZD */ private String jsonZD; diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XKZYXX.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XKZYXX.java index 914cfc74b..0908546bb 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XKZYXX.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XKZYXX.java @@ -78,7 +78,7 @@ public class XKZYXX { @TableField("自定义分类") private String zdyfl; - /** json字典 */ + /** JSONZD */ @TableField("JSONZD") private String jsonzd; diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XQ.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XQ.java index c7bbedf7c..e2efd9ef1 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XQ.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XQ.java @@ -113,7 +113,7 @@ public class XQ extends BaseEntity { private String sdjldw; /** - * json字典 + * JSONZD */ @TableField("JSONZD") private String jsonzd; diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XQJYXXB.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XQJYXXB.java index 1f1e984fa..906071c82 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XQJYXXB.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XQJYXXB.java @@ -84,7 +84,7 @@ public class XQJYXXB extends BaseEntity { private String ddjylb; /** - * json字典 + * JSONZD */ private String jsonzd; diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYCPCPXMB.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYCPCPXMB.java index 20bda2d27..74f236244 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYCPCPXMB.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYCPCPXMB.java @@ -79,7 +79,7 @@ public class XYCPCPXMB extends BaseEntity { private String pSKJYTGNR; /** - * json字典 + * JSONZD */ private String jsonZD; diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYDNDXQJBXXB.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYDNDXQJBXXB.java index d9cdd2aa4..7c3272185 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYDNDXQJBXXB.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYDNDXQJBXXB.java @@ -17,7 +17,7 @@ import java.time.LocalDateTime; */ @Data @EqualsAndHashCode(callSuper = true) -@TableName(value = "学员队年度学期基本信息表", schema = "JW") +@TableName(value = "学员队年度学期基本信息表") public class XYDNDXQJBXXB extends BaseEntity { /** @@ -114,7 +114,7 @@ public class XYDNDXQJBXXB extends BaseEntity { private Integer kfjypk; /** - * json字典 + * JSONZD */ @TableField("JSONZD") private String jsonzd; diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYDRWB.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYDRWB.java index e0d6e3a96..2ee9394a3 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYDRWB.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYDRWB.java @@ -15,7 +15,7 @@ import java.time.LocalDateTime; */ @Data @EqualsAndHashCode(callSuper = true) -@TableName(value = "学员队任务表", schema = "JW") +@TableName(value = "学员队任务表") public class XYDRWB extends BaseEntity { /** diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYDSCKCB.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYDSCKCB.java index fd559d07b..4f5991cfe 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYDSCKCB.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYDSCKCB.java @@ -15,7 +15,7 @@ import java.time.LocalDateTime; */ @Data @EqualsAndHashCode(callSuper = true) -@TableName(value = "学员队输出课程表", schema = "JW") +@TableName(value = "学员队输出课程表") public class XYDSCKCB extends BaseEntity { /** diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYJXQJB.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYJXQJB.java index 254bf3c1c..e9a28b3e9 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYJXQJB.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYJXQJB.java @@ -13,7 +13,7 @@ import java.time.LocalDateTime; * 学员教学请假表 */ @Data -@TableName(value = "学员教学请假表", schema = "JW") +@TableName(value = "学员教学请假表") public class XYJXQJB { /** diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYKCBKCP.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYKCBKCP.java index 479d9060b..a19da8737 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYKCBKCP.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYKCBKCP.java @@ -89,7 +89,7 @@ public class XYKCBKCP extends BaseEntity { private String ktcptjjson; /** - * json字典 + * JSONZD */ private String jsonzd; diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYQJSPB.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYQJSPB.java index 86d533492..682921278 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYQJSPB.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYQJSPB.java @@ -13,7 +13,7 @@ import java.time.LocalDateTime; * 学员请假审批表 */ @Data -@TableName(value = "学员请假审批表", schema = "JW") +@TableName(value = "学员请假审批表") public class XYQJSPB { /** diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYXX.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYXX.java index 4091d676a..006872a07 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYXX.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYXX.java @@ -122,7 +122,7 @@ public class XYXX { private Integer txzt; /** 留级状态 */ - @TableField("留级状态 0 1留级") + @TableField("留级状态") private Integer ljzt; /** 分班状态 */ @@ -153,8 +153,8 @@ public class XYXX { @TableField("允许查看成绩") private String yxckcj; - /** json字典 */ - @TableField("json字典") + /** JSONZD */ + @TableField("JSONZD") private String jsonzd; /** 当前班次编号 */ diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYXXB.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYXXB.java index 514a0ba12..36666baa2 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYXXB.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/XYXXB.java @@ -194,7 +194,7 @@ public class XYXXB extends BaseEntity { private Integer yxckcj; /** - * json字典 + * JSONZD */ private String jsonzd; diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/ZYB.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/ZYB.java index 7fb0cc80e..f6af3eef4 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/ZYB.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/ZYB.java @@ -117,8 +117,8 @@ public class ZYB { @TableField("系统模式") private String xtms; - /** json字典 NVARCHAR(4000) */ - @TableField("json字典") + /** JSONZD NVARCHAR(4000) */ + @TableField("JSONZD") private String jsonzd; /** 主干专业 */ diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/ZYJXJHB.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/ZYJXJHB.java index d058edcc8..fd7592a4b 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/ZYJXJHB.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/entity/ZYJXJHB.java @@ -13,7 +13,7 @@ import java.time.LocalDateTime; * 专业教学计划表 */ @Data -@TableName(value = "专业教学计划表", schema = "JW") +@TableName(value = "专业教学计划表") public class ZYJXJHB { /** diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/DBVersionMapper.xml b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/DBVersionMapper.xml index acde9eb0f..02b62f867 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/DBVersionMapper.xml +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/DBVersionMapper.xml @@ -43,12 +43,12 @@ - + -ID, VersionDate, VersionValue, UniversityName, 学员队全名称含年级, 学期名称样式, 节次类别, 外部文件存储根路径, 本站文件访问路径, 登录失败弹窗, 允许密码尝试次数, 用户锁定分钟数, 允许教研室管理教材, 使用虚拟教学场地设置班次专用教室, 使用虚拟教员设置课程责任教员, 允许多主讲分组教学, 跟查课录入锁定天数, UniversityCode, UniversityValidCode, 显示78节, 显示晚上, 显示夜间, 教学要点名称, 教材导出包含图片, 建立班次学期信息时自动生成教学计划, 成绩报表显示结论成绩, 缺省系统名称, Excel课表按开课日期排序, Excel课表显示实施教员数, 系统模式, 课程表标题样式, 课程表副标题样式, 大屏显示教学内容, 大屏显示前景标题颜色, 大屏显示前景内容颜色, 大屏显示背景颜色, 实践课标记, 三实课标记, 增加学时标记, 减少学时标记, json字典, 学员正课请假模板文件编号 +ID, VersionDate, VersionValue, UniversityName, 学员队全名称含年级, 学期名称样式, 节次类别, 外部文件存储根路径, 本站文件访问路径, 登录失败弹窗, 允许密码尝试次数, 用户锁定分钟数, 允许教研室管理教材, 使用虚拟教学场地设置班次专用教室, 使用虚拟教员设置课程责任教员, 允许多主讲分组教学, 跟查课录入锁定天数, UniversityCode, UniversityValidCode, 显示78节, 显示晚上, 显示夜间, 教学要点名称, 教材导出包含图片, 建立班次学期信息时自动生成教学计划, 成绩报表显示结论成绩, 缺省系统名称, Excel课表按开课日期排序, Excel课表显示实施教员数, 系统模式, 课程表标题样式, 课程表副标题样式, 大屏显示教学内容, 大屏显示前景标题颜色, 大屏显示前景内容颜色, 大屏显示背景颜色, 实践课标记, 三实课标记, 增加学时标记, 减少学时标记, JSONZD, 学员正课请假模板文件编号 diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/KBMapper.xml b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/KBMapper.xml index b6bfe5acc..72cbf70f9 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/KBMapper.xml +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/KBMapper.xml @@ -36,7 +36,7 @@ - + diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/KCBMBBMapper.xml b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/KCBMBBMapper.xml index 3e7b9a91b..6bae68d51 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/KCBMBBMapper.xml +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/KCBMBBMapper.xml @@ -49,11 +49,11 @@ - + -编号, 模版名称, 标题位置, 专业信息位置, 课表时间行号, 显示夜间, 末尾列位置, 课程行位置, 课程序号列位置, 课程名称列位置, 课程简称列位置, 课程学时列位置, 课程类型列位置, 课程责任教研室列位置, 课程责任教员列位置, 课程授课教员列位置, 课程人数列位置, 课程场地列位置, 全局备注位置, 更新时间, 上传者, 备注, 模版, 模版存在, 模版可用, 备注纵向样式, 无课站位字符, 队别位置, 课程合班信息位置, 标题格式, 副标题格式, 专用教室位置, 附加备注1位置, 附加备注2位置, 课表样式, 课表包含选修, 纵向显示78节, 纵向显示晚上, 纵向显示天数, 课程全部场地列位置, 课程表样式, 课程主讲教员列位置, 课程辅导教员列位置, 课程周次范围列位置, 课程表起始列位置, 课程表一周正课天数, json字典 +编号, 模版名称, 标题位置, 专业信息位置, 课表时间行号, 显示夜间, 末尾列位置, 课程行位置, 课程序号列位置, 课程名称列位置, 课程简称列位置, 课程学时列位置, 课程类型列位置, 课程责任教研室列位置, 课程责任教员列位置, 课程授课教员列位置, 课程人数列位置, 课程场地列位置, 全局备注位置, 更新时间, 上传者, 备注, 模版, 模版存在, 模版可用, 备注纵向样式, 无课站位字符, 队别位置, 课程合班信息位置, 标题格式, 副标题格式, 专用教室位置, 附加备注1位置, 附加备注2位置, 课表样式, 课表包含选修, 纵向显示78节, 纵向显示晚上, 纵向显示天数, 课程全部场地列位置, 课程表样式, 课程主讲教员列位置, 课程辅导教员列位置, 课程周次范围列位置, 课程表起始列位置, 课程表一周正课天数, JSONZD diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/LBZYGLPTMapper.xml b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/LBZYGLPTMapper.xml index 7ee4f0ba0..c27899606 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/LBZYGLPTMapper.xml +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/LBZYGLPTMapper.xml @@ -20,11 +20,11 @@ - + -编号, 平台标识, 平台品牌, 平台类型, 平台版本, 平台状态, 平台UserName, 平台Password, 平台IP, 平台端口, 平台参数1, 平台参数2, 平台参数3, 平台参数4, 平台参数5, 平台参数6, 资源平台独立完成录播, json字典 +编号, 平台标识, 平台品牌, 平台类型, 平台版本, 平台状态, 平台UserName, 平台Password, 平台IP, 平台端口, 平台参数1, 平台参数2, 平台参数3, 平台参数4, 平台参数5, 平台参数6, 资源平台独立完成录播, JSONZD diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/SystemInitializationMapper.xml b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/SystemInitializationMapper.xml index 5cef1fe4a..82d2d9903 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/SystemInitializationMapper.xml +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/SystemInitializationMapper.xml @@ -179,7 +179,7 @@ "大屏显示教学内容", "大屏显示前景标题颜色", "大屏显示前景内容颜色", "大屏显示背景颜色", "实践课标记", "三实课标记", "增加学时标记", - "减少学时标记", "json字典", "学员正课请假模板文件编号" + "减少学时标记", "JSONZD", "学员正课请假模板文件编号" ) SELECT currentVersion."ID" + 1, @@ -222,7 +222,7 @@ currentVersion."三实课标记", currentVersion."增加学时标记", currentVersion."减少学时标记", - currentVersion."json字典", + currentVersion."JSONZD", currentVersion."学员正课请假模板文件编号" FROM "DBVersion" currentVersion WHERE currentVersion."ID" = #{dto.expectedVersionId} diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/TeachingMaterialMapper.xml b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/TeachingMaterialMapper.xml index 50ac256b7..3ff78d3b9 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/TeachingMaterialMapper.xml +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/TeachingMaterialMapper.xml @@ -35,7 +35,7 @@ - + @@ -59,7 +59,7 @@ 教材编写类型, 教材重点类型, 备注, 停用, 停用日期, 计量单位, 出版日期, 创建时间, 修改时间, 教材来源, 教材层次, 责任教员及联系方式, 文件编号, 封面图片文件编号, 出版方式, 教材代码, 编写单位, 教学管理机构编号, - 教研室代号, 版权图片文件编号, 自编教材编审状态, 评选情况, json字典, + 教研室代号, 版权图片文件编号, 自编教材编审状态, 评选情况, JSONZD, 自编立项日期, 教材使用情况, 教材密级, 颁发审定单位, 需彩印, 封面PSD文件编号, 封面PDF文件编号, 内容PDF文件编号, 内容WORD文件编号, 锁定数量, 借出数量, 库存数量, 库存位置, 默认领用类型, ID, DEL_FLAG diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/WSSXBMapper.xml b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/WSSXBMapper.xml index ba8d98424..d80abc94d 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/WSSXBMapper.xml +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/WSSXBMapper.xml @@ -12,12 +12,12 @@ - + -编号, 统一编号, 名称, 事项类别, 创建时间, 修改时间, 关键字, 摘要, 备注, json字典, 日志 +编号, 统一编号, 名称, 事项类别, 创建时间, 修改时间, 关键字, 摘要, 备注, JSONZD, 日志 diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XQMapper.xml b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XQMapper.xml index 2f53d7f0a..fdacc94f5 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XQMapper.xml +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XQMapper.xml @@ -19,12 +19,12 @@ - + -年度, 当前学期, 开学日期, 结束日期, 调课不审批, 课时系数方案编号, 禁止调课, 终结成绩定及格, 教务领导审核调课, 调课不审批_教员, 调课不审批_时间, 调课不审批_保障, 锁定周数, 调课不审批_场地, 序号, 锁定计量单位, json字典, 课时统计时间 +年度, 当前学期, 开学日期, 结束日期, 调课不审批, 课时系数方案编号, 禁止调课, 终结成绩定及格, 教务领导审核调课, 调课不审批_教员, 调课不审批_时间, 调课不审批_保障, 锁定周数, 调课不审批_场地, 序号, 锁定计量单位, JSONZD, 课时统计时间 diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYCPCPXMBMapper.xml b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYCPCPXMBMapper.xml index e45b90447..b72c98adf 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYCPCPXMBMapper.xml +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYCPCPXMBMapper.xml @@ -15,11 +15,11 @@ - + -编号, 名称, 课程板块测评_分值权重标准编号, 课程板块测评_测评结果样式编号, 学员评教员_分值权重标准编号, 学员评教员_测评结果样式编号, 创建时间, 停用状态, 备注, 停用时间, 评课程通告内容, 评授课教员通告内容, json字典 +编号, 名称, 课程板块测评_分值权重标准编号, 课程板块测评_测评结果样式编号, 学员评教员_分值权重标准编号, 学员评教员_测评结果样式编号, 创建时间, 停用状态, 备注, 停用时间, 评课程通告内容, 评授课教员通告内容, JSONZD diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYXXMapper.xml b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYXXMapper.xml index 139cf22fa..3290e35c4 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYXXMapper.xml +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/XYXXMapper.xml @@ -39,7 +39,7 @@ - + @@ -61,7 +61,7 @@ 入伍年月日, 性别, 出生日期, 名族, 籍贯, 原部职别, 邮政编码, 文化程度, 学位, 学员类别, 军衔文职, 所属军区, 骨干任职, 本科毕业院校, 国防生, 考生号, 备注, 身份证号, 退学状态, 留级状态, 分班状态, 论文编号, 论文题目, 论文摘要, 拼音, - 成绩报告单编号, 允许查看成绩, json字典, 当前班次编号, 论文答辩文档编号, 标签, + 成绩报告单编号, 允许查看成绩, JSONZD, 当前班次编号, 论文答辩文档编号, 标签, 联系电话, 通信地址, 单位联络人信息, 奖励处分情况, 已注册, 军人证件类型, 曾用名, 入伍地, 出生地, 生源地 diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/ZYBMapper.xml b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/ZYBMapper.xml index ebdeed7fc..8ad3b6970 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/ZYBMapper.xml +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/mapper/ZYBMapper.xml @@ -28,7 +28,7 @@ - + @@ -41,7 +41,7 @@ 专业代号, 专业名称, 专业方向, 学年制, 学期数, 专业备注, 专业规范, 专业代码, 专业版本, 停用, 启用时间, 停用时间, 教学管理机构编号, 培训层次, 培训类型, 学科专业信息标识号, 培训类型2, 学员类别, 自定义分类, 专业标识号, 序号标识, 简称, 节次类别, 系统模式, - json字典, 主干专业, 规范名称, 教学大纲编号, 人培编号, 培养目标 + JSONZD, 主干专业, 规范名称, 教学大纲编号, 人培编号, 培养目标 diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/LogService.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/LogService.java index 0b6041aab..395133675 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/LogService.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/LogService.java @@ -104,8 +104,11 @@ public interface LogService { void addSubsidyProject(KSBZXM entity); void updateSubsidyProject(KSBZXM entity); + void deleteSubsidyProject(String bh); KSBZXM getSubsidyProjectById(String bh); PageResult pageSubsidyProject(PageQuery query, KSBZXM cond); + int importSubsidyProject(org.springframework.web.multipart.MultipartFile file) throws Exception; + void exportSubsidyProject(jakarta.servlet.http.HttpServletResponse response) throws Exception; // ==================== 教学日志课时补助审批表(汇总) ==================== diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/DisciplineServiceImpl.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/DisciplineServiceImpl.java index e42f0be4e..0c931fd1b 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/DisciplineServiceImpl.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/DisciplineServiceImpl.java @@ -234,7 +234,7 @@ public class DisciplineServiceImpl implements DisciplineService { assertMaxLength(entity.getJc(), 50, "简称"); assertMaxLength(entity.getJclb(), 50, "节次类别"); assertMaxLength(entity.getXtms(), 50, "系统模式"); - assertMaxLength(entity.getJsonzd(), 4000, "json字典"); + assertMaxLength(entity.getJsonzd(), 4000, "JSONZD"); assertMaxLength(entity.getGfmc(), 250, "规范名称"); assertMaxLength(entity.getPymb(), 500, "培养目标"); } diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/KBServiceImpl.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/KBServiceImpl.java index 6aeeb94a3..33b1a5f6d 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/KBServiceImpl.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/KBServiceImpl.java @@ -159,7 +159,7 @@ public class KBServiceImpl implements KBService { assertMaxLength(entity.getBb(), 50, "版本"); assertMaxLength(entity.getKczcfs(), 50, "课程支持方式"); assertMaxLength(entity.getKcjsfs(), 50, "课程建设方式"); - assertMaxLength(entity.getJsonzd(), 4000, "json字典"); + assertMaxLength(entity.getJsonzd(), 4000, "JSONZD"); assertMaxLength(entity.getKhfs(), 50, "考核方式"); assertMaxLength(entity.getMj(), 50, "密级"); assertMaxLength(entity.getPxqk(), 50, "评选情况"); diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/LogServiceImpl.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/LogServiceImpl.java index 51d148994..64c69c130 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/LogServiceImpl.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/service/impl/LogServiceImpl.java @@ -545,12 +545,15 @@ public class LogServiceImpl implements LogService { @Override @Transactional public void addSubsidyProject(KSBZXM entity) { + entity.setCjsj(LocalDateTime.now()); + entity.setXgsj(LocalDateTime.now()); ksbzxmMapper.insert(entity); } @Override @Transactional public void updateSubsidyProject(KSBZXM entity) { + entity.setXgsj(LocalDateTime.now()); ksbzxmMapper.updateById(entity); } @@ -568,6 +571,79 @@ public class LogServiceImpl implements LogService { return new PageResult<>(result.getRecords(), result.getTotal(), query.getPageNum(), query.getPageSize()); } + @Override + @Transactional + public void deleteSubsidyProject(String bh) { + ksbzxmMapper.deleteById(bh); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int importSubsidyProject(org.springframework.web.multipart.MultipartFile file) throws Exception { + if (file == null || file.isEmpty()) { + throw new RuntimeException("导入文件不能为空"); + } + List list = com.roomroot.jwgl.utils.ExcelParseUtil.parseKSBZXMExcel( + file.getInputStream(), file.getOriginalFilename()); + if (list.isEmpty()) { + throw new RuntimeException("Excel中无有效数据"); + } + LocalDateTime now = LocalDateTime.now(); + for (KSBZXM entity : list) { + if (entity.getBh() == null || entity.getBh().isEmpty()) { + entity.setBh(com.roomroot.jwgl.utils.UuidUtil.getUUID()); + } + if (entity.getXmlx() == null || entity.getXmlx().isEmpty()) { + entity.setXmlx("联教联训"); + } + entity.setCjsj(now); + entity.setXgsj(now); + ksbzxmMapper.insert(entity); + } + return list.size(); + } + + @Override + public void exportSubsidyProject(jakarta.servlet.http.HttpServletResponse response) throws Exception { + List list = ksbzxmMapper.selectList( + new LambdaQueryWrapper().orderByDesc(KSBZXM::getCjsj)); + String[] headers = {"编号", "名称", "性质", "依据", "开始日期", "结束日期", "天数", + "基本课时量", "课时类型", "说明", "备注", "项目类型"}; + + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setHeader("Content-Disposition", + "attachment; filename=" + java.net.URLEncoder.encode( + "联教联训管理.xlsx", java.nio.charset.StandardCharsets.UTF_8)); + try (org.apache.poi.xssf.usermodel.XSSFWorkbook workbook = new org.apache.poi.xssf.usermodel.XSSFWorkbook()) { + org.apache.poi.ss.usermodel.Sheet sheet = workbook.createSheet("联教联训"); + org.apache.poi.ss.usermodel.Row headerRow = sheet.createRow(0); + for (int i = 0; i < headers.length; i++) { + headerRow.createCell(i).setCellValue(headers[i]); + } + int rowIdx = 1; + for (KSBZXM e : list) { + org.apache.poi.ss.usermodel.Row row = sheet.createRow(rowIdx++); + row.createCell(0).setCellValue(e.getBh() == null ? "" : e.getBh()); + row.createCell(1).setCellValue(e.getMc() == null ? "" : e.getMc()); + row.createCell(2).setCellValue(e.getXz() == null ? "" : e.getXz()); + row.createCell(3).setCellValue(e.getYj() == null ? "" : e.getYj()); + row.createCell(4).setCellValue(e.getKsrq() == null ? "" : e.getKsrq().toString()); + row.createCell(5).setCellValue(e.getJsrq() == null ? "" : e.getJsrq().toString()); + row.createCell(6).setCellValue(e.getTs() == null ? "" : String.valueOf(e.getTs())); + row.createCell(7).setCellValue(e.getJbksl() == null ? "" : String.valueOf(e.getJbksl())); + row.createCell(8).setCellValue(e.getKslx() == null ? "" : e.getKslx()); + row.createCell(9).setCellValue(e.getSm() == null ? "" : e.getSm()); + row.createCell(10).setCellValue(e.getBz() == null ? "" : e.getBz()); + row.createCell(11).setCellValue(e.getXmlx() == null ? "" : e.getXmlx()); + } + for (int i = 0; i < headers.length; i++) { + sheet.autoSizeColumn(i); + } + workbook.write(response.getOutputStream()); + response.getOutputStream().flush(); + } + } + // ==================== 教学日志课时补助审批表(汇总) ==================== @Override diff --git a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/utils/ExcelParseUtil.java b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/utils/ExcelParseUtil.java index 8141c1808..b0feca1c8 100644 --- a/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/utils/ExcelParseUtil.java +++ b/backend/roomroot-jwgl/src/main/java/com/roomroot/jwgl/utils/ExcelParseUtil.java @@ -6,6 +6,7 @@ import com.roomroot.jwgl.dto.courserunning.SingleCourseImportDTO; import com.roomroot.jwgl.dto.departmentpersonnel.DepartmentPersonnelCreateDTO; import com.roomroot.jwgl.entity.JXSSJH; import com.roomroot.jwgl.entity.JYSB; +import com.roomroot.jwgl.entity.KSBZXM; import com.roomroot.jwgl.entity.XYDB; import com.roomroot.jwgl.entity.XYXX; import org.apache.poi.ss.usermodel.Cell; @@ -19,6 +20,7 @@ import java.io.InputStream; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; @@ -322,6 +324,68 @@ public class ExcelParseUtil { return result; } + /** + * 解析联教联训(课时补助项目)导入 Excel 文件(支持 .xls / .xlsx)。 + *

模板表头顺序:

+ * 序号, 补助项目名称, 性质, 依据, 开始日期, 结束日期, 项目说明, 项目备注, + * 教研室名称, 补助教员姓名, 补助课时量, 课时量备注 + *

只映射课时补助项目表存在的字段;序号/教研室名称/补助教员姓名/课时量备注无对应列,忽略。

+ * + * @return 课时补助项目实体列表(创建/修改时间由业务层填充) + * @throws Exception 解析异常 + */ + public static List parseKSBZXMExcel(InputStream inputStream, String fileName) throws Exception { + List result = new ArrayList<>(); + Workbook workbook = createWorkbook(inputStream, fileName); + try { + Sheet sheet = workbook.getSheetAt(0); + int lastRowNum = sheet.getLastRowNum(); + for (int rowNum = 1; rowNum <= lastRowNum; rowNum++) { + Row row = sheet.getRow(rowNum); + if (row == null) { + continue; + } + KSBZXM entity = new KSBZXM(); + // 补助项目名称 + entity.setMc(getCellStringValue(row.getCell(1))); + // 性质 + entity.setXz(getCellStringValue(row.getCell(2))); + // 依据 + entity.setYj(getCellStringValue(row.getCell(3))); + // 开始日期 + entity.setKsrq(parseDateTimeCell(row.getCell(4))); + // 结束日期 + entity.setJsrq(parseDateTimeCell(row.getCell(5))); + // 项目说明 + entity.setSm(getCellStringValue(row.getCell(6))); + // 项目备注 + entity.setBz(getCellStringValue(row.getCell(7))); + // 补助课时量 -> 基本课时量 + String ksl = getCellStringValue(row.getCell(10)); + if (ksl != null && !ksl.isEmpty()) { + try { + entity.setJbksl(Float.parseFloat(ksl)); + } catch (NumberFormatException ignored) { + entity.setJbksl(0f); + } + } + // 天数:由开始与结束日期计算(含首尾,不足整天按自然日计) + if (entity.getKsrq() != null && entity.getJsrq() != null) { + long days = ChronoUnit.DAYS.between( + entity.getKsrq().toLocalDate(), entity.getJsrq().toLocalDate()) + 1; + entity.setTs((float) Math.max(days, 1)); + } + // 至少要有名称才视为有效行 + if (entity.getMc() != null && !entity.getMc().isEmpty()) { + result.add(entity); + } + } + } finally { + workbook.close(); + } + return result; + } + private static Workbook createWorkbook(InputStream inputStream, String fileName) throws Exception { String name = fileName == null ? "" : fileName.toLowerCase(); if (!name.endsWith(".xlsx") && !name.endsWith(".xls")) { diff --git a/backend/sql/jwgl.sql b/backend/sql/jwgl.sql deleted file mode 100644 index e69de29bb..000000000 diff --git a/backend/sql/quartz.sql b/backend/sql/quartz.sql deleted file mode 100644 index 1e6afd018..000000000 --- a/backend/sql/quartz.sql +++ /dev/null @@ -1,174 +0,0 @@ -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 '存放持久化job对象', - 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表job_name的外键', - job_group varchar(200) not null comment 'qrtz_job_details表job_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 '存放持久化job对象', - 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表trigger_name的外键', - trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_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表trigger_name的外键', - trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_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 类型,JobStore 并不知道如何存储实例的时候) --- ---------------------------- -create table QRTZ_BLOB_TRIGGERS ( - sched_name varchar(120) not null comment '调度名称', - trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', - trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', - blob_data blob null comment '存放持久化Trigger对象', - 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 '存放持久化calendar对象', - 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表trigger_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 '调度器实例id', - trigger_name varchar(200) not null comment 'qrtz_triggers表trigger_name的外键', - trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_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表trigger_name的外键', - trigger_group varchar(200) not null comment 'qrtz_triggers表trigger_group的外键', - str_prop_1 varchar(512) null comment 'String类型的trigger的第一个参数', - str_prop_2 varchar(512) null comment 'String类型的trigger的第二个参数', - str_prop_3 varchar(512) null comment 'String类型的trigger的第三个参数', - int_prop_1 int null comment 'int类型的trigger的第一个参数', - int_prop_2 int null comment 'int类型的trigger的第二个参数', - long_prop_1 bigint null comment 'long类型的trigger的第一个参数', - long_prop_2 bigint null comment 'long类型的trigger的第二个参数', - dec_prop_1 numeric(13,4) null comment 'decimal类型的trigger的第一个参数', - dec_prop_2 numeric(13,4) null comment 'decimal类型的trigger的第二个参数', - bool_prop_1 varchar(1) null comment 'Boolean类型的trigger的第一个参数', - bool_prop_2 varchar(1) null comment 'Boolean类型的trigger的第二个参数', - 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/backend/sql/ry_20260417.sql b/backend/sql/ry_20260417.sql deleted file mode 100644 index 86a9b9ae1..000000000 --- a/backend/sql/ry_20260417.sql +++ /dev/null @@ -1,723 +0,0 @@ --- ---------------------------- --- 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 '父部门id', - 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正常 1停用)', - del_flag char(1) default '0' comment '删除标志(0代表存在 2代表删除)', - 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', 'fysx@qq.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(101, 100, '0,100', '深圳总公司', 1, '风影随行', '15888888888', 'fysx@qq.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(102, 100, '0,100', '长沙分公司', 2, '风影随行', '15888888888', 'fysx@qq.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(103, 101, '0,100,101', '研发部门', 1, '风影随行', '15888888888', 'fysx@qq.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(104, 101, '0,100,101', '市场部门', 2, '风影随行', '15888888888', 'fysx@qq.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(105, 101, '0,100,101', '测试部门', 3, '风影随行', '15888888888', 'fysx@qq.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(106, 101, '0,100,101', '财务部门', 4, '风影随行', '15888888888', 'fysx@qq.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(107, 101, '0,100,101', '运维部门', 5, '风影随行', '15888888888', 'fysx@qq.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(108, 102, '0,100,102', '市场部门', 1, '风影随行', '15888888888', 'fysx@qq.com', '0', '0', 'admin', sysdate(), '', null); -insert into sys_dept values(109, 102, '0,100,102', '财务部门', 2, '风影随行', '15888888888', 'fysx@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正常 1停用)', - del_flag char(1) default '0' comment '删除标志(0代表存在 2代表删除)', - login_ip varchar(128) default '' comment '最后登录IP', - login_date datetime comment '最后登录时间', - pwd_update_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(), sysdate(), 'admin', sysdate(), '', null, '管理员'); -insert into sys_user values(2, 105, 'ry', '风影随行', '00', 'fysx@qq.com ', '15666666666', '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 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正常 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', '董事长', 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正常 1停用)', - del_flag char(1) default '0' comment '删除标志(0代表存在 2代表删除)', - 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 '父菜单ID', - 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 '菜单类型(M目录 C菜单 F按钮)', - visible char(1) default 0 comment '菜单状态(0显示 1隐藏)', - status char(1) default 0 comment '菜单状态(0正常 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', '代码生成', '3', '2', 'gen', 'tool/gen/index', '', '', 1, 0, 'C', '0', '0', 'tool:gen:list', 'code', 'admin', sysdate(), '', null, '代码生成菜单'); -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', '账户解锁', '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, ''); --- 代码生成按钮 -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', '导入代码', '116', '4', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:import', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1059', '预览代码', '116', '5', '#', '', '', '', 1, 0, 'F', '0', '0', 'tool:gen:preview', '#', 'admin', sysdate(), '', null, ''); -insert into sys_menu values('1060', '生成代码', '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正常 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正常 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 '是否默认(Y是 N否)', - status char(1) default '0' comment '状态(0正常 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, '正常', '0', 'sys_normal_disable', '', 'primary', 'Y', '0', 'admin', sysdate(), '', null, '正常状态'); -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, '正常', '0', 'sys_job_status', '', 'primary', 'Y', '0', 'admin', sysdate(), '', null, '正常状态'); -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, '正常', '0', 'sys_notice_status', '', 'primary', 'Y', '0', 'admin', sysdate(), '', null, '正常状态'); -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, '生成代码', '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, '正常状态'); -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 '系统内置(Y是 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,浅色主题theme-light' ); -insert into sys_config values(4, '账号自助-验证码开关', 'sys.account.captchaEnabled', 'true', 'Y', 'admin', sysdate(), '', null, '是否开启验证码功能(true开启,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黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段)'); -insert into sys_config values(7, '用户管理-初始密码修改策略', 'sys.account.initPasswordModify', '1', 'Y', 'admin', sysdate(), '', null, '0:初始密码修改策略关闭,没有任何提示,1:提醒用户,如果未修改初始密码,则在登录时就会提醒修改密码对话框'); -insert into sys_config values(8, '用户管理-账号密码更新周期', 'sys.account.passwordValidateDays', '0', 'Y', 'admin', sysdate(), '', null, '密码更新周期(填写数字,数据初始化值为0不限制,若修改必须为大于0小于365的正整数),如果超过这个周期登录系统时,则在登录时就会提醒修改密码对话框'); -insert into sys_config values(9, '用户管理-密码字符范围', 'sys.account.chrtype', '0', 'Y', 'admin', sysdate(), '', null, '默认任意字符范围,0任意(密码可以输入任意字符),1数字(密码只能为0-9数字),2英文字母(密码只能为a-z和A-Z字母),3字母和数字(密码必须包含字母,数字),4字母数字和特殊字符(目前支持的特殊字符包括:~!@#$%^&*()-=_+)'); - - --- ---------------------------- --- 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正常 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正常 1失败)', - exception_info varchar(2000) default '' comment '异常信息', - start_time datetime comment '执行开始时间', - end_time datetime 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正常 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, '管理员'); -insert into sys_notice values('3', '风影随行开源框架介绍', '1', '

项目介绍

RuoYi开源项目是为企业用户定制的后台脚手架框架,为企业打造的一站式解决方案,降低企业开发成本,提升开发效率。主要包括用户管理、角色管理、部门管理、菜单管理、参数管理、字典管理、岗位管理、定时任务服务监控、登录日志、操作日志、代码生成等功能。其中,还支持多数据源、数据权限、国际化、Redis缓存、Docker部署、滑动验证码、第三方认证登录、分布式事务、分布式文件存储、分库分表处理等技术特点。


官网及演示

风影随行文档地址: http://doc.ruoyi.vip

演示地址【不分离版】: http://demo.ruoyi.vip

演示地址【分离版本】: http://vue.ruoyi.vip

演示地址【微服务版】: http://cloud.ruoyi.vip

演示地址【移动端版】: http://h5.ruoyi.vip


', '0', 'admin', sysdate(), '', null, '管理员'); - - --- ---------------------------- --- 18、公告已读记录表 --- ---------------------------- -drop table if exists sys_notice_read; -create table sys_notice_read ( - read_id bigint(20) not null auto_increment comment '已读主键', - notice_id int(4) not null comment '公告id', - user_id bigint(20) not null comment '用户id', - read_time datetime not null comment '阅读时间', - primary key (read_id), - unique key uk_user_notice (user_id, notice_id) comment '同一用户同一公告只记录一次' -) engine=innodb auto_increment=1 comment='公告已读记录表'; - - --- ---------------------------- --- 19、代码生成业务表 --- ---------------------------- -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 '前端模板类型(element-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 '生成功能作者', - form_col_num int(1) default 1 comment '表单布局(单列 双列 三列)', - gen_type char(1) default '0' comment '生成代码方式(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 = '代码生成业务表'; - - --- ---------------------------- --- 20、代码生成业务表字段 --- ---------------------------- -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 = '代码生成业务表字段'; \ No newline at end of file

风影随行官网地址: http://ruoyi.vip