From 8f9e974aad02486862e252983d996bd66a61ce99 Mon Sep 17 00:00:00 2001 From: GoCo Date: Tue, 12 Aug 2025 19:17:33 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20=E8=AF=BE=E7=A8=8B?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3-01?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../biz/controller/CourseBizController.java | 37 ++-- .../biz/controller/ResourceBizController.java | 40 ++++ .../modules/biz/service/CourseBizService.java | 12 ++ .../biz/service/EntityLinkBizService.java | 7 + .../biz/service/ResourceBizService.java | 24 +++ .../service/impl/CourseBizServiceImpl.java | 16 ++ .../service/impl/ResourceBizServiceImpl.java | 117 +++++++++++ .../controller/EntityLinkController.java | 182 ++++++++++++++++++ .../gen/entitylink/entity/EntityLink.java | 68 +++++++ .../entitylink/mapper/EntityLinkMapper.java | 17 ++ .../mapper/xml/EntityLinkMapper.xml | 5 + .../service/IEntityLinkService.java | 14 ++ .../service/impl/EntityLinkServiceImpl.java | 19 ++ .../src/main/resources/application-dev.yml | 2 +- 14 files changed, 542 insertions(+), 18 deletions(-) create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/controller/ResourceBizController.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/service/EntityLinkBizService.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/service/ResourceBizService.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/service/impl/ResourceBizServiceImpl.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/entitylink/controller/EntityLinkController.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/entitylink/entity/EntityLink.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/entitylink/mapper/EntityLinkMapper.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/entitylink/mapper/xml/EntityLinkMapper.xml create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/entitylink/service/IEntityLinkService.java create mode 100644 jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/entitylink/service/impl/EntityLinkServiceImpl.java diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/controller/CourseBizController.java b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/controller/CourseBizController.java index 60ec168b..89189bd2 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/controller/CourseBizController.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/controller/CourseBizController.java @@ -10,14 +10,15 @@ import org.jeecg.common.system.vo.LoginUser; import org.jeecg.config.shiro.IgnoreAuth; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.multipart.MultipartFile; import org.jeecg.common.system.api.ISysBaseAPI; import org.jeecg.modules.biz.service.CourseBizService; +import org.jeecg.modules.gen.course.entity.Course; + +import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -28,6 +29,22 @@ import javax.servlet.http.HttpServletResponse; @Slf4j public class CourseBizController { + @Autowired + private CourseBizService courseBizService; + @Autowired + private ISysBaseAPI sysBaseApi; + + @GetMapping("/list") + @Operation(summary = "根据分类、难度、专题查询课程列表") + @IgnoreAuth + public Result> queryCourseList( + @RequestParam(value = "categoryId", required = false) String categoryId, + @RequestParam(value = "difficulty", required = false) String difficulty, + @RequestParam(value = "subject", required = false) String topic) { + List list = courseBizService.getCourseList(categoryId, difficulty, topic); + return Result.OK(list); + } + @GetMapping("/test") @Operation(summary = "测试") @IgnoreAuth @@ -35,11 +52,6 @@ public class CourseBizController { return Result.OK("test"); } - @Autowired - private ISysBaseAPI sysBaseApi; - @Autowired - private CourseBizService courseBusinessService; - @GetMapping("/test2") @Operation(summary = "测试2") public Result test2(HttpServletRequest request, HttpServletResponse response) { @@ -53,16 +65,7 @@ public class CourseBizController { @Operation(summary = "测试3") @IgnoreAuth public Result test3() { - long count = courseBusinessService.count(); + long count = courseBizService.count(); return Result.OK(count); } - - @PostMapping("/upload") - @Operation(summary = "课程视频文件上传", description = "课程视频文件上传,返回m3u8文件地址") - @IgnoreAuth - public Result upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws Exception { - if (file == null || file.isEmpty()) return Result.error("没有找到上传的文件"); - String url = courseBusinessService.uploadHls(file, request); - return Result.OK(url); - } } diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/controller/ResourceBizController.java b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/controller/ResourceBizController.java new file mode 100644 index 00000000..b812252f --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/controller/ResourceBizController.java @@ -0,0 +1,40 @@ +package org.jeecg.modules.biz.controller; + +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletRequest; + +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.constant.CommonConstant; +import org.jeecg.common.system.util.JwtUtil; +import org.jeecg.common.system.vo.LoginUser; +import org.jeecg.config.shiro.IgnoreAuth; +import org.jeecg.modules.biz.service.ResourceBizService; + +import io.swagger.v3.oas.annotations.Operation; + +@Tag(name = "资源") +@RestController +@RequestMapping("/biz/resource") +@Slf4j +public class ResourceBizController { + + @Autowired + private ResourceBizService resourceBizService; + + @PostMapping("/upload") + @Operation(summary = "课程视频文件上传", description = "课程视频文件上传,返回m3u8文件地址") + @IgnoreAuth + public Result upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws Exception { + if (file == null || file.isEmpty()) return Result.error("没有找到上传的文件"); + String url = resourceBizService.uploadHls(file, request); + return Result.OK(url); + } +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/service/CourseBizService.java b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/service/CourseBizService.java index 84ee7ac9..d88f2457 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/service/CourseBizService.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/service/CourseBizService.java @@ -1,7 +1,10 @@ package org.jeecg.modules.biz.service; +import java.util.List; + import javax.servlet.http.HttpServletRequest; +import org.jeecg.modules.gen.course.entity.Course; import org.jeecg.modules.gen.test.entity.TestTable; import org.springframework.web.multipart.MultipartFile; import com.baomidou.mybatisplus.extension.service.IService; @@ -19,6 +22,15 @@ public interface CourseBizService extends IService { * @throws Exception 处理异常 */ String uploadHls(MultipartFile file, HttpServletRequest request) throws Exception; + + /** + * 根据分类、难度、专题查询课程列表 + * @param categoryId + * @param difficulty + * @param topic + * @return + */ + List getCourseList(String categoryId, String difficulty, String topic); } diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/service/EntityLinkBizService.java b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/service/EntityLinkBizService.java new file mode 100644 index 00000000..2e2eac13 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/service/EntityLinkBizService.java @@ -0,0 +1,7 @@ +package org.jeecg.modules.biz.service; + +import com.baomidou.mybatisplus.extension.service.IService; + +public interface EntityLinkBizService { + +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/service/ResourceBizService.java b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/service/ResourceBizService.java new file mode 100644 index 00000000..d88555de --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/service/ResourceBizService.java @@ -0,0 +1,24 @@ +package org.jeecg.modules.biz.service; + +import javax.servlet.http.HttpServletRequest; + +import org.jeecg.modules.gen.resource.entity.Resource; +import org.springframework.web.multipart.MultipartFile; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * 资源业务 + */ +public interface ResourceBizService extends IService { + + /** + * 上传视频并切片为 HLS(m3u8+ts),按配置(local|minio|alioss)上传,返回 m3u8 的路径/URL + * @param file 上传的视频文件 + * @param request 用于读取 header 或环境配置 + * @return m3u8 路径/URL + * @throws Exception 处理异常 + */ + String uploadHls(MultipartFile file, HttpServletRequest request) throws Exception; +} + + diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/service/impl/CourseBizServiceImpl.java b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/service/impl/CourseBizServiceImpl.java index 422711d7..7da2dcc7 100644 --- a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/service/impl/CourseBizServiceImpl.java +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/service/impl/CourseBizServiceImpl.java @@ -7,10 +7,14 @@ import org.jeecg.common.util.SpringContextUtils; import org.jeecg.common.util.oss.OssBootUtil; import org.jeecg.modules.biz.service.CourseBizService; import org.jeecg.modules.gen.test.mapper.TestTableMapper; +import org.jeecg.modules.gen.course.entity.Course; +import org.jeecg.modules.gen.course.mapper.CourseMapper; import org.jeecg.modules.gen.test.entity.TestTable; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import javax.servlet.http.HttpServletRequest; @@ -27,6 +31,18 @@ import java.util.stream.Stream; @Service public class CourseBizServiceImpl extends ServiceImpl implements CourseBizService { + @Autowired + private CourseMapper courseMapper; + + @Override + public List getCourseList(String categoryId, String difficulty, String topic) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + if (difficulty != null && difficulty.trim().length() > 0) { + queryWrapper.eq("difficulty", difficulty); + } + return courseMapper.selectList(queryWrapper); + } + @Override public String uploadHls(MultipartFile file, HttpServletRequest request) throws Exception { // 读取上传类型(header 优先) diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/service/impl/ResourceBizServiceImpl.java b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/service/impl/ResourceBizServiceImpl.java new file mode 100644 index 00000000..1f0f6472 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/biz/service/impl/ResourceBizServiceImpl.java @@ -0,0 +1,117 @@ +package org.jeecg.modules.biz.service.impl; + +import lombok.extern.slf4j.Slf4j; +import org.jeecg.common.util.CommonUtils; +import org.jeecg.common.util.MinioUtil; +import org.jeecg.common.util.SpringContextUtils; +import org.jeecg.common.util.oss.OssBootUtil; +import org.jeecg.modules.biz.service.ResourceBizService; +import org.jeecg.modules.gen.test.mapper.TestTableMapper; +import org.jeecg.modules.gen.resource.mapper.ResourceMapper; +import org.jeecg.modules.gen.resource.entity.Resource; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +import javax.servlet.http.HttpServletRequest; +import java.io.File; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.stream.Stream; + +@Slf4j +@Service +public class ResourceBizServiceImpl extends ServiceImpl implements ResourceBizService { + + @Override + public String uploadHls(MultipartFile file, HttpServletRequest request) throws Exception { + // 读取上传类型(header 优先) + String headerUploadType = request.getHeader("uploadType"); + String configUploadType = SpringContextUtils.getApplicationContext().getEnvironment().getProperty("jeecg.uploadType", "minio"); + String uploadType = (headerUploadType != null && headerUploadType.trim().length() > 0) ? headerUploadType : configUploadType; + + // 1) 保存临时原始视频 + String uuid = UUID.randomUUID().toString(); + String tmpRoot = System.getProperty("java.io.tmpdir"); + Path tmpVideoDir = Path.of(tmpRoot, "jeecg", "video", uuid); + Path hlsDir = Path.of(tmpRoot, "jeecg", "hls", uuid); + Files.createDirectories(tmpVideoDir); + Files.createDirectories(hlsDir); + + String original = CommonUtils.getFileName(Objects.requireNonNull(file.getOriginalFilename())); + Path tmpVideoFile = tmpVideoDir.resolve(original); + Files.copy(file.getInputStream(), tmpVideoFile, StandardCopyOption.REPLACE_EXISTING); + + // 2) ffmpeg 切片 + Path m3u8Path = hlsDir.resolve(uuid + ".m3u8"); + List cmd = Arrays.asList( + "ffmpeg", "-i", tmpVideoFile.toString(), + "-c:v", "libx264", "-c:a", "aac", + "-hls_time", "10", "-hls_playlist_type", "vod", + m3u8Path.toString()); + Process p = new ProcessBuilder(cmd).redirectErrorStream(true).start(); + boolean ok = p.waitFor(10, TimeUnit.MINUTES) && p.exitValue() == 0; + if (!ok) { + deleteQuietly(hlsDir.toFile()); + deleteQuietly(tmpVideoDir.toFile()); + throw new RuntimeException("ffmpeg切片超时"); + } + + // 3) 上传切片 + String m3u8Url = ""; + String base = "video/hls/" + uuid; + try (Stream paths = Files.list(hlsDir)) { + for (Path f : (Iterable) paths::iterator) { + if (!Files.isRegularFile(f)) continue; + String rel = base + "/" + f.getFileName().toString(); + try (InputStream in = Files.newInputStream(f)) { + if ("minio".equals(uploadType)) { + String tmpUrl = MinioUtil.upload(in, rel); + if (f.getFileName().toString().endsWith(".m3u8")) { + m3u8Url = tmpUrl; + } + } else if ("alioss".equals(uploadType)) { + OssBootUtil.upload(in, rel); + if (f.getFileName().toString().endsWith(".m3u8")) { + m3u8Url = rel; // 可在网关拼域名 + } + } else { + String uploadpath = SpringContextUtils.getApplicationContext().getEnvironment().getProperty("jeecg.path.upload"); + Path target = Path.of(uploadpath, rel); + Files.createDirectories(target.getParent()); + Files.copy(f, target, StandardCopyOption.REPLACE_EXISTING); + if (f.getFileName().toString().endsWith(".m3u8")) { + m3u8Url = rel; // local 返回相对路径 + } + } + } + } + } finally { + deleteQuietly(hlsDir.toFile()); + deleteQuietly(tmpVideoDir.toFile()); + } + + return m3u8Url; + } + + /** 删除临时目录文件 */ + private static void deleteQuietly(File file) { + try { + if (file == null || !file.exists()) return; + if (file.isDirectory()) { + File[] children = file.listFiles(); + if (children != null) { + for (File c : children) deleteQuietly(c); + } + } + file.delete(); + } catch (Exception ignored) {} + } +} + + diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/entitylink/controller/EntityLinkController.java b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/entitylink/controller/EntityLinkController.java new file mode 100644 index 00000000..f46669de --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/entitylink/controller/EntityLinkController.java @@ -0,0 +1,182 @@ +package org.jeecg.modules.gen.entitylink.controller; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.system.query.QueryRuleEnum; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.gen.entitylink.entity.EntityLink; +import org.jeecg.modules.gen.entitylink.service.IEntityLinkService; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; + +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.jeecg.common.system.base.controller.JeecgController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; +import com.alibaba.fastjson.JSON; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.apache.shiro.authz.annotation.RequiresPermissions; + /** + * @Description: 主体绑定 + * @Author: jeecg-boot + * @Date: 2025-08-12 + * @Version: V1.0 + */ +@Tag(name="主体绑定") +@RestController +@RequestMapping("/gen/entitylink/entityLink") +@Slf4j +public class EntityLinkController extends JeecgController { + @Autowired + private IEntityLinkService entityLinkService; + + /** + * 分页列表查询 + * + * @param entityLink + * @param pageNo + * @param pageSize + * @param req + * @return + */ + //@AutoLog(value = "主体绑定-分页列表查询") + @Operation(summary="主体绑定-分页列表查询") + @GetMapping(value = "/list") + public Result> queryPageList(EntityLink entityLink, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + + + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(entityLink, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = entityLinkService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param entityLink + * @return + */ + @AutoLog(value = "主体绑定-添加") + @Operation(summary="主体绑定-添加") + @RequiresPermissions("gen.entitylink:entity_link:add") + @PostMapping(value = "/add") + public Result add(@RequestBody EntityLink entityLink) { + entityLinkService.save(entityLink); + + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param entityLink + * @return + */ + @AutoLog(value = "主体绑定-编辑") + @Operation(summary="主体绑定-编辑") + @RequiresPermissions("gen.entitylink:entity_link:edit") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) + public Result edit(@RequestBody EntityLink entityLink) { + entityLinkService.updateById(entityLink); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "主体绑定-通过id删除") + @Operation(summary="主体绑定-通过id删除") + @RequiresPermissions("gen.entitylink:entity_link:delete") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name="id",required=true) String id) { + entityLinkService.removeById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "主体绑定-批量删除") + @Operation(summary="主体绑定-批量删除") + @RequiresPermissions("gen.entitylink:entity_link:deleteBatch") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.entityLinkService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + //@AutoLog(value = "主体绑定-通过id查询") + @Operation(summary="主体绑定-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name="id",required=true) String id) { + EntityLink entityLink = entityLinkService.getById(id); + if(entityLink==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(entityLink); + } + + /** + * 导出excel + * + * @param request + * @param entityLink + */ + @RequiresPermissions("gen.entitylink:entity_link:exportXls") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, EntityLink entityLink) { + return super.exportXls(request, entityLink, EntityLink.class, "主体绑定"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequiresPermissions("gen.entitylink:entity_link:importExcel") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, EntityLink.class); + } + +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/entitylink/entity/EntityLink.java b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/entitylink/entity/EntityLink.java new file mode 100644 index 00000000..58a5b1e6 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/entitylink/entity/EntityLink.java @@ -0,0 +1,68 @@ +package org.jeecg.modules.gen.entitylink.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.TableLogic; +import org.jeecg.common.constant.ProvinceCityArea; +import org.jeecg.common.util.SpringContextUtils; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecg.common.aspect.annotation.Dict; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Description: 主体绑定 + * @Author: jeecg-boot + * @Date: 2025-08-12 + * @Version: V1.0 + */ +@Data +@TableName("entity_link") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@Schema(description="主体绑定") +public class EntityLink implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键*/ + @TableId(type = IdType.ASSIGN_ID) + @Schema(description = "主键") + private java.lang.String id; + /**主体类型*/ + @Excel(name = "主体类型", width = 15) + @Schema(description = "主体类型") + private java.lang.String sourceType; + /**主体id*/ + @Excel(name = "主体id", width = 15) + @Schema(description = "主体id") + private java.lang.String sourceId; + /**内容类型*/ + @Excel(name = "内容类型", width = 15) + @Schema(description = "内容类型") + private java.lang.String targetType; + /**内容id*/ + @Excel(name = "内容id", width = 15) + @Schema(description = "内容id") + private java.lang.String targetId; + /**排序*/ + @Excel(name = "排序", width = 15) + @Schema(description = "排序") + private java.lang.Integer sortOrder; + /**创建人*/ + @Schema(description = "创建人") + private java.lang.String createBy; + /**创建日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @Schema(description = "创建日期") + private java.util.Date createTime; +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/entitylink/mapper/EntityLinkMapper.java b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/entitylink/mapper/EntityLinkMapper.java new file mode 100644 index 00000000..8a266e49 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/entitylink/mapper/EntityLinkMapper.java @@ -0,0 +1,17 @@ +package org.jeecg.modules.gen.entitylink.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import org.jeecg.modules.gen.entitylink.entity.EntityLink; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 主体绑定 + * @Author: jeecg-boot + * @Date: 2025-08-12 + * @Version: V1.0 + */ +public interface EntityLinkMapper extends BaseMapper { + +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/entitylink/mapper/xml/EntityLinkMapper.xml b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/entitylink/mapper/xml/EntityLinkMapper.xml new file mode 100644 index 00000000..9ac5cef8 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/entitylink/mapper/xml/EntityLinkMapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/entitylink/service/IEntityLinkService.java b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/entitylink/service/IEntityLinkService.java new file mode 100644 index 00000000..d6734742 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/entitylink/service/IEntityLinkService.java @@ -0,0 +1,14 @@ +package org.jeecg.modules.gen.entitylink.service; + +import org.jeecg.modules.gen.entitylink.entity.EntityLink; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + * @Description: 主体绑定 + * @Author: jeecg-boot + * @Date: 2025-08-12 + * @Version: V1.0 + */ +public interface IEntityLinkService extends IService { + +} diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/entitylink/service/impl/EntityLinkServiceImpl.java b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/entitylink/service/impl/EntityLinkServiceImpl.java new file mode 100644 index 00000000..cf45eb3e --- /dev/null +++ b/jeecg-boot/jeecg-boot-module/jeecg-module-learn/src/main/java/org/jeecg/modules/gen/entitylink/service/impl/EntityLinkServiceImpl.java @@ -0,0 +1,19 @@ +package org.jeecg.modules.gen.entitylink.service.impl; + +import org.jeecg.modules.gen.entitylink.entity.EntityLink; +import org.jeecg.modules.gen.entitylink.mapper.EntityLinkMapper; +import org.jeecg.modules.gen.entitylink.service.IEntityLinkService; +import org.springframework.stereotype.Service; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: 主体绑定 + * @Author: jeecg-boot + * @Date: 2025-08-12 + * @Version: V1.0 + */ +@Service +public class EntityLinkServiceImpl extends ServiceImpl implements IEntityLinkService { + +} diff --git a/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml index 753f7a27..84a1220a 100644 --- a/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml +++ b/jeecg-boot/jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml @@ -152,7 +152,7 @@ spring: datasource: master: # url: jdbc:mysql://127.0.0.1:33061/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai - url: jdbc:mysql://110.42.96.65:55616/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai + url: jdbc:mysql://103.40.14.23:25523/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver