From fcdb4459e7f64d68f79c50ce8a02e60974d2740a Mon Sep 17 00:00:00 2001 From: zhouhaibin Date: Wed, 18 Dec 2024 10:22:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=A8=A1=E5=9E=8B=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E8=AF=8D=EF=BC=8C=E6=8F=90=E7=A4=BA=E8=AF=8D=E5=8E=86?= =?UTF-8?q?=E5=8F=B2=E8=AE=B0=E5=BD=95=EF=BC=8C=E6=A8=A1=E5=9E=8B=E6=9D=83?= =?UTF-8?q?=E9=99=90=E7=AE=A1=E7=90=86,=E7=94=A8=E6=88=B7=E4=B8=8E?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E8=AF=8D=E7=B1=BB=E5=9E=8B=E7=BB=91=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DocAiController.java | 2 +- .../controller/DocumentTasksController.java | 25 +- .../controller/ModelPromptsController.java | 106 +++++++ .../ModelPromptsHistoryController.java | 116 +++++++ .../ModelUserPromptssettingController.java | 116 +++++++ .../domain/DocumentTasks.java | 15 +- .../domain/ModelPrompts.java | 99 ++++++ .../domain/ModelPromptsHistory.java | 103 +++++++ .../domain/ModelUserPromptssetting.java | 63 ++++ .../domain/bo/DocumentTasksBo.java | 30 +- .../domain/bo/ModelPromptsBo.java | 93 ++++++ .../domain/bo/ModelPromptsHistoryBo.java | 89 ++++++ .../domain/bo/ModelUserPromptssettingBo.java | 54 ++++ .../vo/DocumentTasksPermissionsDetailVo.java | 4 +- .../domain/vo/DocumentTasksVo.java | 28 +- .../domain/vo/ModelPromptsHistoryVo.java | 113 +++++++ .../domain/vo/ModelPromptsVo.java | 107 +++++++ .../domain/vo/ModelUserPromptssettingVo.java | 63 ++++ .../mapper/ModelPromptsHistoryMapper.java | 15 + .../mapper/ModelPromptsMapper.java | 15 + .../mapper/ModelUserPromptssettingMapper.java | 15 + .../IDocumentTasksPermissionsService.java | 1 + .../service/IDocumentTasksService.java | 4 + .../service/IModelPromptsHistoryService.java | 75 +++++ .../service/IModelPromptsService.java | 68 +++++ .../IModelUserPromptssettingService.java | 70 +++++ .../service/impl/DocAiServiceImpl.java | 16 +- .../DocumentTasksPermissionsServiceImpl.java | 78 ++++- .../impl/DocumentTasksServiceImpl.java | 284 ++++++++++-------- .../impl/ModelPromptsHistoryServiceImpl.java | 159 ++++++++++ .../service/impl/ModelPromptsServiceImpl.java | 166 ++++++++++ .../ModelUserPromptssettingServiceImpl.java | 148 +++++++++ .../productManagement/utils/MyHttpUtils.java | 77 +++++ .../productManagement/utils/MyTimeUtils.java | 44 +++ .../ModelPromptsHistoryMapper.xml | 7 + .../productManagement/ModelPromptsMapper.xml | 7 + .../ModelUserPromptssettingMapper.xml | 7 + 37 files changed, 2335 insertions(+), 147 deletions(-) create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/ModelPromptsController.java create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/ModelPromptsHistoryController.java create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/ModelUserPromptssettingController.java create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ModelPrompts.java create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ModelPromptsHistory.java create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ModelUserPromptssetting.java create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ModelPromptsBo.java create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ModelPromptsHistoryBo.java create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ModelUserPromptssettingBo.java create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ModelPromptsHistoryVo.java create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ModelPromptsVo.java create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ModelUserPromptssettingVo.java create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/ModelPromptsHistoryMapper.java create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/ModelPromptsMapper.java create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/ModelUserPromptssettingMapper.java create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IModelPromptsHistoryService.java create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IModelPromptsService.java create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IModelUserPromptssettingService.java create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ModelPromptsHistoryServiceImpl.java create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ModelPromptsServiceImpl.java create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ModelUserPromptssettingServiceImpl.java create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/utils/MyHttpUtils.java create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/utils/MyTimeUtils.java create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/ModelPromptsHistoryMapper.xml create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/ModelPromptsMapper.xml create mode 100644 zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/ModelUserPromptssettingMapper.xml diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/DocAiController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/DocAiController.java index b65dd18..86a8c46 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/DocAiController.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/DocAiController.java @@ -17,7 +17,7 @@ import java.io.IOException; */ @RequiredArgsConstructor @RestController -@RequestMapping("/productManagement/docAi1") +@RequestMapping("/productManagement/docAi") @Validated public class DocAiController { diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/DocumentTasksController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/DocumentTasksController.java index 41ed3c4..4ffbbf9 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/DocumentTasksController.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/DocumentTasksController.java @@ -7,7 +7,10 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.system.domain.vo.SysOssUploadVo; +import org.dromara.system.domain.vo.SysOssVo; import org.dromara.system.service.ISysOssService; +import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -23,6 +26,7 @@ import org.dromara.productManagement.domain.vo.DocumentTasksVo; import org.dromara.productManagement.domain.bo.DocumentTasksBo; import org.dromara.productManagement.service.IDocumentTasksService; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; /** * 文档任务 @@ -42,7 +46,7 @@ public class DocumentTasksController extends BaseController { /** * 查询文档任务列表 */ -// @SaCheckPermission("productManagement:DocumentTasks:list") + @SaCheckPermission("productManagement:DocumentTasks:list") @GetMapping("/list") public TableDataInfo list(DocumentTasksBo bo, PageQuery pageQuery) { return documentTasksService.queryPageList(bo, pageQuery); @@ -51,7 +55,7 @@ public class DocumentTasksController extends BaseController { /** * 导出文档任务列表 */ -// @SaCheckPermission("productManagement:DocumentTasks:export") + @SaCheckPermission("productManagement:DocumentTasks:export") @Log(title = "文档任务", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(DocumentTasksBo bo, HttpServletResponse response) { @@ -64,7 +68,7 @@ public class DocumentTasksController extends BaseController { * * @param id 主键 */ -// @SaCheckPermission("productManagement:DocumentTasks:query") + @SaCheckPermission("productManagement:DocumentTasks:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") @PathVariable Long id) { @@ -74,7 +78,7 @@ public class DocumentTasksController extends BaseController { /** * 新增文档任务 */ -// @SaCheckPermission("productManagement:DocumentTasks:add") + @SaCheckPermission("productManagement:DocumentTasks:add") @Log(title = "文档任务", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() @@ -85,7 +89,7 @@ public class DocumentTasksController extends BaseController { /** * 修改文档任务 */ -// @SaCheckPermission("productManagement:DocumentTasks:edit") + @SaCheckPermission("productManagement:DocumentTasks:edit") @Log(title = "文档任务", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping() @@ -98,7 +102,7 @@ public class DocumentTasksController extends BaseController { * * @param ids 主键串 */ -// @SaCheckPermission("productManagement:DocumentTasks:remove") + @SaCheckPermission("productManagement:DocumentTasks:remove") @Log(title = "文档任务", businessType = BusinessType.DELETE) @DeleteMapping("/{ids}") public R remove(@NotEmpty(message = "主键不能为空") @@ -109,4 +113,13 @@ public class DocumentTasksController extends BaseController { public R stop(@NotNull(message = "主键不能为空") @PathVariable Long id) { return toAjax(documentTasksService.stopTask(id)); } + @PostMapping(value = "/back/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public R uploadFile(@RequestPart(name = "file") MultipartFile file) throws IOException, InterruptedException { + SysOssVo oss = documentTasksService.uploadFile(file); + SysOssUploadVo uploadVo = new SysOssUploadVo(); + uploadVo.setUrl(oss.getUrl()); + uploadVo.setFileName(oss.getOriginalName()); + uploadVo.setOssId(oss.getOssId().toString()); + return R.ok(uploadVo); + } } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/ModelPromptsController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/ModelPromptsController.java new file mode 100644 index 0000000..71a52d1 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/ModelPromptsController.java @@ -0,0 +1,106 @@ +package org.dromara.productManagement.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.common.encrypt.annotation.ApiEncrypt; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.productManagement.domain.vo.ModelPromptsVo; +import org.dromara.productManagement.domain.bo.ModelPromptsBo; +import org.dromara.productManagement.service.IModelPromptsService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 模型提示词 + * + * @author Lion Li + * @date 2024-12-05 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/productManagement/ModelPrompts") +public class ModelPromptsController extends BaseController { + + private final IModelPromptsService modelPromptsService; + + /** + * 查询模型提示词列表 + */ + @SaCheckPermission("productManagement:ModelPrompts:list") + @GetMapping("/list") + public TableDataInfo list(ModelPromptsBo bo, PageQuery pageQuery) { + return modelPromptsService.queryPageList(bo, pageQuery); + } + + /** + * 导出模型提示词列表 + */ + @SaCheckPermission("productManagement:ModelPrompts:export") + @Log(title = "模型提示词", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(ModelPromptsBo bo, HttpServletResponse response) { + List list = modelPromptsService.queryList(bo); + ExcelUtil.exportExcel(list, "模型提示词", ModelPromptsVo.class, response); + } + + /** + * 获取模型提示词详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("productManagement:ModelPrompts:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(modelPromptsService.queryById(id)); + } + + /** + * 新增模型提示词 + */ + @SaCheckPermission("productManagement:ModelPrompts:add") + @Log(title = "模型提示词", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody ModelPromptsBo bo) { + return toAjax(modelPromptsService.insertByBo(bo)); + } + + /** + * 修改模型提示词 + */ + @SaCheckPermission("productManagement:ModelPrompts:edit") + @Log(title = "模型提示词", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody ModelPromptsBo bo) { + return toAjax(modelPromptsService.updateByBo(bo)); + } + + /** + * 删除模型提示词 + * + * @param ids 主键串 + */ + @SaCheckPermission("productManagement:ModelPrompts:remove") + @Log(title = "模型提示词", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(modelPromptsService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/ModelPromptsHistoryController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/ModelPromptsHistoryController.java new file mode 100644 index 0000000..1575616 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/ModelPromptsHistoryController.java @@ -0,0 +1,116 @@ +package org.dromara.productManagement.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.common.encrypt.annotation.ApiEncrypt; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.productManagement.domain.vo.ModelPromptsHistoryVo; +import org.dromara.productManagement.domain.bo.ModelPromptsHistoryBo; +import org.dromara.productManagement.service.IModelPromptsHistoryService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 模型提示词历史记录 + * + * @author Lion Li + * @date 2024-12-05 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/productManagement/ModelPromptsHistory") +public class ModelPromptsHistoryController extends BaseController { + + private final IModelPromptsHistoryService modelPromptsHistoryService; + + /** + * 查询模型提示词历史记录列表 + */ + @SaCheckPermission("productManagement:ModelPromptsHistory:list") + @GetMapping("/list") + public TableDataInfo list(ModelPromptsHistoryBo bo, PageQuery pageQuery) { + return modelPromptsHistoryService.queryPageList(bo, pageQuery); + } + + /** + * 导出模型提示词历史记录列表 + */ + @SaCheckPermission("productManagement:ModelPromptsHistory:export") + @Log(title = "模型提示词历史记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(ModelPromptsHistoryBo bo, HttpServletResponse response) { + List list = modelPromptsHistoryService.queryList(bo); + ExcelUtil.exportExcel(list, "模型提示词历史记录", ModelPromptsHistoryVo.class, response); + } + + /** + * 获取模型提示词历史记录详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("productManagement:ModelPromptsHistory:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(modelPromptsHistoryService.queryById(id)); + } + + /** + * 新增模型提示词历史记录 + */ + @SaCheckPermission("productManagement:ModelPromptsHistory:add") + @Log(title = "模型提示词历史记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody ModelPromptsHistoryBo bo) { + return toAjax(modelPromptsHistoryService.insertByBo(bo)); + } + + /** + * 修改模型提示词历史记录 + */ + @SaCheckPermission("productManagement:ModelPromptsHistory:edit") + @Log(title = "模型提示词历史记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody ModelPromptsHistoryBo bo) { + return toAjax(modelPromptsHistoryService.updateByBo(bo)); + } + + /** + * 删除模型提示词历史记录 + * + * @param ids 主键串 + */ + @SaCheckPermission("productManagement:ModelPromptsHistory:remove") + @Log(title = "模型提示词历史记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(modelPromptsHistoryService.deleteWithValidByIds(List.of(ids), true)); + } + /** + * 修改模型提示词历史记录 + */ + @SaCheckPermission("productManagement:ModelPromptsHistory:restore") + @Log(title = "模型提示词历史记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PostMapping("/restore/{id}") + public R restore(@Validated(EditGroup.class) @PathVariable Long id) { + return toAjax(modelPromptsHistoryService.restoreByid(id)); + } +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/ModelUserPromptssettingController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/ModelUserPromptssettingController.java new file mode 100644 index 0000000..cdbae99 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/ModelUserPromptssettingController.java @@ -0,0 +1,116 @@ +package org.dromara.productManagement.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.common.satoken.utils.LoginHelper; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.productManagement.domain.vo.ModelUserPromptssettingVo; +import org.dromara.productManagement.domain.bo.ModelUserPromptssettingBo; +import org.dromara.productManagement.service.IModelUserPromptssettingService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 模型提示词用户配置 + * + * @author Lion Li + * @date 2024-12-06 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/productManagement/ModelUserPromptssetting") +public class ModelUserPromptssettingController extends BaseController { + + private final IModelUserPromptssettingService modelUserPromptssettingService; + + /** + * 查询模型提示词用户配置列表 + */ + @SaCheckPermission("productManagement:ModelUserPromptssetting:list") + @GetMapping("/list") + public TableDataInfo list(ModelUserPromptssettingBo bo, PageQuery pageQuery) { + return modelUserPromptssettingService.queryPageList(bo, pageQuery); + } + + /** + * 导出模型提示词用户配置列表 + */ + @SaCheckPermission("productManagement:ModelUserPromptssetting:export") + @Log(title = "模型提示词用户配置", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(ModelUserPromptssettingBo bo, HttpServletResponse response) { + List list = modelUserPromptssettingService.queryList(bo); + ExcelUtil.exportExcel(list, "模型提示词用户配置", ModelUserPromptssettingVo.class, response); + } + + /** + * 获取模型提示词用户配置详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("productManagement:ModelUserPromptssetting:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(modelUserPromptssettingService.queryById(id)); + } + + /** + * 新增模型提示词用户配置 + */ + @SaCheckPermission("productManagement:ModelUserPromptssetting:add") + @Log(title = "模型提示词用户配置", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody ModelUserPromptssettingBo bo) { + return toAjax(modelUserPromptssettingService.insertByBo(bo)); + } + + /** + * 修改模型提示词用户配置 + */ + @SaCheckPermission("productManagement:ModelUserPromptssetting:edit") + @Log(title = "模型提示词用户配置", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody ModelUserPromptssettingBo bo) { + return toAjax(modelUserPromptssettingService.updateByBo(bo)); + } + + /** + * 删除模型提示词用户配置 + * + * @param ids 主键串 + */ + @SaCheckPermission("productManagement:ModelUserPromptssetting:remove") + @Log(title = "模型提示词用户配置", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(modelUserPromptssettingService.deleteWithValidByIds(List.of(ids), true)); + } + /** + * 根据用户id获取模型提示词用户配置详细信息 + * + */ +// @SaCheckPermission("productManagement:ModelUserPromptssetting:query") + @GetMapping("/getInfoByuserId") + public R getInfoByuserId() { + Long userId = LoginHelper.getUserId(); + return R.ok(modelUserPromptssettingService.queryByuserId(userId)); + } +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/DocumentTasks.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/DocumentTasks.java index 44e0a05..950e16c 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/DocumentTasks.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/DocumentTasks.java @@ -27,12 +27,16 @@ public class DocumentTasks extends TenantEntity { * id */ @TableId(value = "id") - private String id; + private Long id; /** * 任务名称 */ private String taskName; + /** + * 后台任务id + */ + private String taskId; /** * 文档名称 @@ -62,5 +66,14 @@ public class DocumentTasks extends TenantEntity { @Version private Long version; + /** + * 模型所属区域 + */ + private String taskRegion; + + /** + * 模型所属行业 + */ + private String taskIndustry; } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ModelPrompts.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ModelPrompts.java new file mode 100644 index 0000000..e1ce3d9 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ModelPrompts.java @@ -0,0 +1,99 @@ +package org.dromara.productManagement.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 用于存储模型提示词对象 model_prompts + * + * @author Lion Li + * @date 2024-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("model_prompts") +public class ModelPrompts extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 任务角色描述 + */ + private String taskRoleDesc; + + /** + * 模型任务名称 + */ + private String taskName; + + /** + * 模型所属区域 + */ + private String taskRegion; + + /** + * 模型所属行业 + */ + private String taskIndustry; + + /** + * 任务背景 + */ + private String context; + + /** + * 任务描述 + */ + private String description; + + /** + * 任务流程 + */ + private String workflow; + + /** + * 输出说明 + */ + private String outputDesc; + + /** + * 注意事项 + */ + private String cautions; + + /** + * 模型版本 + */ + private String modelVersion; + + /** + * 备注 + */ + private String note; + + + /** + * + */ + @TableLogic + private String delFlag; + + /** + * + */ + @Version + private String version; + + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ModelPromptsHistory.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ModelPromptsHistory.java new file mode 100644 index 0000000..8b834ab --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ModelPromptsHistory.java @@ -0,0 +1,103 @@ +package org.dromara.productManagement.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 模型提示词历史记录对象 model_prompts_history + * + * @author Lion Li + * @date 2024-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("model_prompts_history") +public class ModelPromptsHistory extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 提示词id + */ + private Long promptId; + + /** + * 任务角色描述 + */ + private String taskRoleDesc; + + /** + * 模型任务名称 + */ + private String taskName; + + /** + * 模型所属区域 + */ + private String taskRegion; + + /** + * 模型所属行业 + */ + private String taskIndustry; + + /** + * 任务背景 + */ + private String context; + + /** + * 任务描述 + */ + private String description; + + /** + * 任务流程 + */ + private String workflow; + + /** + * 输出说明 + */ + private String outputDesc; + + /** + * 注意事项 + */ + private String cautions; + + /** + * 模型版本 + */ + private String modelVersion; + + /** + * 备注 + */ + private String note; + + /** + * + */ + @TableLogic + private String delFlag; + + /** + * + */ + @Version + private String version; + + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ModelUserPromptssetting.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ModelUserPromptssetting.java new file mode 100644 index 0000000..54a5ba2 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/ModelUserPromptssetting.java @@ -0,0 +1,63 @@ +package org.dromara.productManagement.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 模型提示词用户配置对象 model_user_promptssetting + * + * @author Lion Li + * @date 2024-12-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("model_user_promptssetting") +public class ModelUserPromptssetting extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 模型所属行业 + */ + private String taskIndustry; + + /** + * 模型所属区域 + */ + private String taskRegion; + + /** + * 任务类型(名称) + */ + private String taskName; + + /** + * 用户id + */ + private Long userId; + + /** + * + */ + @TableLogic + private String delFlag; + + /** + * + */ + @Version + private String version; + + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/DocumentTasksBo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/DocumentTasksBo.java index 8f11224..8b220a9 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/DocumentTasksBo.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/DocumentTasksBo.java @@ -1,5 +1,7 @@ package org.dromara.productManagement.domain.bo; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; import org.dromara.productManagement.domain.DocumentTasks; import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.common.core.validate.AddGroup; @@ -42,17 +44,33 @@ public class DocumentTasksBo extends BaseEntity { @NotNull(message = "文档不能为空", groups = { AddGroup.class, EditGroup.class }) private Long ossId; +// /** +// * 预计时间 +// */ +//// @NotNull(message = "预计时间不能为空", groups = { AddGroup.class, EditGroup.class }) +// private Date estimatedCompletionTime; +// /** +// * 后台任务id +// */ +// private String taskId; +// /** +// * 状态 +// */ +//// @NotBlank(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class }) + private String progressStatus; + /** - * 预计时间 + * 模型所属区域 */ -// @NotNull(message = "预计时间不能为空", groups = { AddGroup.class, EditGroup.class }) - private Date estimatedCompletionTime; + @NotBlank(message = "模型所属区域不能为空", groups = { AddGroup.class, EditGroup.class }) + private String taskRegion; /** - * 状态 + * 模型所属行业 */ -// @NotBlank(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class }) - private String progressStatus; + @NotBlank(message = "模型所属行业不能为空", groups = { AddGroup.class, EditGroup.class }) + private String taskIndustry; + } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ModelPromptsBo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ModelPromptsBo.java new file mode 100644 index 0000000..5822a58 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ModelPromptsBo.java @@ -0,0 +1,93 @@ +package org.dromara.productManagement.domain.bo; + +import org.dromara.productManagement.domain.ModelPrompts; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 用于存储模型提示词业务对象 model_prompts + * + * @author Lion Li + * @date 2024-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = ModelPrompts.class, reverseConvertGenerate = false) +public class ModelPromptsBo extends BaseEntity { + + /** + * id + */ + private Long id; + + /** + * 任务角色描述 + */ + @NotBlank(message = "任务角色描述不能为空", groups = { AddGroup.class, EditGroup.class }) + private String taskRoleDesc; + + /** + * 模型任务名称 + */ + @NotBlank(message = "模型任务名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String taskName; + + /** + * 模型所属区域 + */ + @NotBlank(message = "模型所属区域不能为空", groups = { AddGroup.class, EditGroup.class }) + private String taskRegion; + + /** + * 模型所属行业 + */ + @NotBlank(message = "模型所属行业不能为空", groups = { AddGroup.class, EditGroup.class }) + private String taskIndustry; + + /** + * 任务背景 + */ + @NotBlank(message = "任务背景不能为空", groups = { AddGroup.class, EditGroup.class }) + private String context; + + /** + * 任务描述 + */ + @NotBlank(message = "任务描述不能为空", groups = { AddGroup.class, EditGroup.class }) + private String description; + + /** + * 任务流程 + */ + private String workflow; + + /** + * 输出说明 + */ + @NotBlank(message = "输出说明不能为空", groups = { AddGroup.class, EditGroup.class }) + private String outputDesc; + + /** + * 注意事项 + */ + private String cautions; + + /** + * 模型版本 + */ + private String modelVersion; + + /** + * 备注 + */ + private String note; + + + + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ModelPromptsHistoryBo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ModelPromptsHistoryBo.java new file mode 100644 index 0000000..f12de7b --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ModelPromptsHistoryBo.java @@ -0,0 +1,89 @@ +package org.dromara.productManagement.domain.bo; + +import org.dromara.productManagement.domain.ModelPromptsHistory; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 模型提示词历史记录业务对象 model_prompts_history + * + * @author Lion Li + * @date 2024-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = ModelPromptsHistory.class, reverseConvertGenerate = false) +public class ModelPromptsHistoryBo extends BaseEntity { + + /** + * id + */ + private Long id; + + /** + * 提示词id + */ + private Long promptId; + + /** + * 任务角色描述 + */ + private String taskRoleDesc; + + /** + * 模型任务名称 + */ + private String taskName; + + /** + * 模型所属区域 + */ + private String taskRegion; + + /** + * 模型所属行业 + */ + private String taskIndustry; + + /** + * 任务背景 + */ + private String context; + + /** + * 任务描述 + */ + private String description; + + /** + * 任务流程 + */ + private String workflow; + + /** + * 输出说明 + */ + private String outputDesc; + + /** + * 注意事项 + */ + private String cautions; + + /** + * 模型版本 + */ + private String modelVersion; + + /** + * 备注 + */ + private String note; + + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ModelUserPromptssettingBo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ModelUserPromptssettingBo.java new file mode 100644 index 0000000..9516d5f --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/ModelUserPromptssettingBo.java @@ -0,0 +1,54 @@ +package org.dromara.productManagement.domain.bo; + +import org.dromara.productManagement.domain.ModelUserPromptssetting; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 模型提示词用户配置业务对象 model_user_promptssetting + * + * @author Lion Li + * @date 2024-12-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = ModelUserPromptssetting.class, reverseConvertGenerate = false) +public class ModelUserPromptssettingBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 模型所属行业 + */ + @NotBlank(message = "模型所属行业不能为空", groups = { AddGroup.class, EditGroup.class }) + private String taskIndustry; + + /** + * 模型所属区域 + */ + @NotBlank(message = "模型所属区域不能为空", groups = { AddGroup.class, EditGroup.class }) + private String taskRegion; + + /** + * 任务类型(名称) + */ + @NotBlank(message = "任务类型(名称)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String taskName; + + /** + * 用户id + */ + @NotNull(message = "用户id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long userId; + + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/DocumentTasksPermissionsDetailVo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/DocumentTasksPermissionsDetailVo.java index cc22b28..65ca66e 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/DocumentTasksPermissionsDetailVo.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/DocumentTasksPermissionsDetailVo.java @@ -1,5 +1,7 @@ package org.dromara.productManagement.domain.vo; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; import org.dromara.productManagement.domain.DocumentTasksPermissionsDetail; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; @@ -53,5 +55,5 @@ public class DocumentTasksPermissionsDetailVo implements Serializable { @ExcelDictFormat(dictType = "document_task") private String taskType; - + private Date updateTime; } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/DocumentTasksVo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/DocumentTasksVo.java index 8003c95..b3d4e3b 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/DocumentTasksVo.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/DocumentTasksVo.java @@ -43,7 +43,10 @@ public class DocumentTasksVo implements Serializable { */ @ExcelProperty(value = "文档名称") private String documentName; - + /** + * 后台任务id + */ + private String taskId; /** * 预计时间 */ @@ -58,5 +61,28 @@ public class DocumentTasksVo implements Serializable { @ExcelDictFormat(dictType = "document_task_status") private String progressStatus; + /** + * 创建者 + */ + private Long createBy; + private String createUser; + /** + * 任务时长 + */ + private String taskDuration; + @ExcelProperty(value = "更新时间") + private Date updateTime; + /** + * 模型所属区域 + */ + @ExcelProperty(value = "模型所属区域", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "model_region") + private String taskRegion; + /** + * 模型所属行业 + */ + @ExcelProperty(value = "模型所属行业", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "model_industry") + private String taskIndustry; } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ModelPromptsHistoryVo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ModelPromptsHistoryVo.java new file mode 100644 index 0000000..0032099 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ModelPromptsHistoryVo.java @@ -0,0 +1,113 @@ +package org.dromara.productManagement.domain.vo; + +import org.dromara.productManagement.domain.ModelPromptsHistory; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 模型提示词历史记录视图对象 model_prompts_history + * + * @author Lion Li + * @date 2024-12-05 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = ModelPromptsHistory.class) +public class ModelPromptsHistoryVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 提示词id + */ + @ExcelProperty(value = "提示词id") + private Long promptId; + + /** + * 任务角色描述 + */ + @ExcelProperty(value = "任务角色描述") + private String taskRoleDesc; + + /** + * 模型任务名称 + */ + @ExcelProperty(value = "模型任务名称", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "document_task") + private String taskName; + + /** + * 模型所属区域 + */ + @ExcelProperty(value = "模型所属区域", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "model_region") + private String taskRegion; + + /** + * 模型所属行业 + */ + @ExcelProperty(value = "模型所属行业", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "model_industry") + private String taskIndustry; + + /** + * 任务背景 + */ + @ExcelProperty(value = "任务背景") + private String context; + + /** + * 任务描述 + */ + @ExcelProperty(value = "任务描述") + private String description; + + /** + * 任务流程 + */ + @ExcelProperty(value = "任务流程") + private String workflow; + + /** + * 输出说明 + */ + @ExcelProperty(value = "输出说明") + private String outputDesc; + + /** + * 注意事项 + */ + @ExcelProperty(value = "注意事项") + private String cautions; + + /** + * 模型版本 + */ + @ExcelProperty(value = "模型版本") + private String modelVersion; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String note; + + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ModelPromptsVo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ModelPromptsVo.java new file mode 100644 index 0000000..33da280 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ModelPromptsVo.java @@ -0,0 +1,107 @@ +package org.dromara.productManagement.domain.vo; + +import org.dromara.productManagement.domain.ModelPrompts; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 用于存储模型提示词视图对象 model_prompts + * + * @author Lion Li + * @date 2024-12-05 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = ModelPrompts.class) +public class ModelPromptsVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 任务角色描述 + */ + @ExcelProperty(value = "任务角色描述") + private String taskRoleDesc; + + /** + * 模型任务名称 + */ + @ExcelProperty(value = "模型任务名称", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "document_task") + private String taskName; + + /** + * 模型所属区域 + */ + @ExcelProperty(value = "模型所属区域", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "model_region") + private String taskRegion; + + /** + * 模型所属行业 + */ + @ExcelProperty(value = "模型所属行业", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "model_industry") + private String taskIndustry; + + /** + * 任务背景 + */ + @ExcelProperty(value = "任务背景") + private String context; + + /** + * 任务描述 + */ + @ExcelProperty(value = "任务描述") + private String description; + + /** + * 任务流程 + */ + @ExcelProperty(value = "任务流程") + private String workflow; + + /** + * 输出说明 + */ + @ExcelProperty(value = "输出说明") + private String outputDesc; + + /** + * 注意事项 + */ + @ExcelProperty(value = "注意事项") + private String cautions; + + /** + * 模型版本 + */ + @ExcelProperty(value = "模型版本") + private String modelVersion; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String note; + + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ModelUserPromptssettingVo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ModelUserPromptssettingVo.java new file mode 100644 index 0000000..bb50ac4 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/ModelUserPromptssettingVo.java @@ -0,0 +1,63 @@ +package org.dromara.productManagement.domain.vo; + +import org.dromara.productManagement.domain.ModelUserPromptssetting; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 模型提示词用户配置视图对象 model_user_promptssetting + * + * @author Lion Li + * @date 2024-12-06 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = ModelUserPromptssetting.class) +public class ModelUserPromptssettingVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 模型所属行业 + */ + @ExcelProperty(value = "模型所属行业") + private String taskIndustry; + + /** + * 模型所属区域 + */ + @ExcelProperty(value = "模型所属区域") + private String taskRegion; + + /** + * 任务类型(名称) + */ + @ExcelProperty(value = "任务类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "名=称") + private String taskName; + + /** + * 用户id + */ + @ExcelProperty(value = "用户id") + private Long userId; + + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/ModelPromptsHistoryMapper.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/ModelPromptsHistoryMapper.java new file mode 100644 index 0000000..4157000 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/ModelPromptsHistoryMapper.java @@ -0,0 +1,15 @@ +package org.dromara.productManagement.mapper; + +import org.dromara.productManagement.domain.ModelPromptsHistory; +import org.dromara.productManagement.domain.vo.ModelPromptsHistoryVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 模型提示词历史记录Mapper接口 + * + * @author Lion Li + * @date 2024-12-05 + */ +public interface ModelPromptsHistoryMapper extends BaseMapperPlus { + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/ModelPromptsMapper.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/ModelPromptsMapper.java new file mode 100644 index 0000000..fe89a9c --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/ModelPromptsMapper.java @@ -0,0 +1,15 @@ +package org.dromara.productManagement.mapper; + +import org.dromara.productManagement.domain.ModelPrompts; +import org.dromara.productManagement.domain.vo.ModelPromptsVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 用于存储模型提示词Mapper接口 + * + * @author Lion Li + * @date 2024-12-05 + */ +public interface ModelPromptsMapper extends BaseMapperPlus { + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/ModelUserPromptssettingMapper.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/ModelUserPromptssettingMapper.java new file mode 100644 index 0000000..23ddbcf --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/ModelUserPromptssettingMapper.java @@ -0,0 +1,15 @@ +package org.dromara.productManagement.mapper; + +import org.dromara.productManagement.domain.ModelUserPromptssetting; +import org.dromara.productManagement.domain.vo.ModelUserPromptssettingVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 模型提示词用户配置Mapper接口 + * + * @author Lion Li + * @date 2024-12-06 + */ +public interface ModelUserPromptssettingMapper extends BaseMapperPlus { + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IDocumentTasksPermissionsService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IDocumentTasksPermissionsService.java index 20d2380..3948d65 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IDocumentTasksPermissionsService.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IDocumentTasksPermissionsService.java @@ -71,4 +71,5 @@ public interface IDocumentTasksPermissionsService { List getUsersAll(); DocumentTasksPermissionsVo getTasksPermissionsByUserId(Long userId); + void validateUserTaskPermissions(List taskNames, Long userId); } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IDocumentTasksService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IDocumentTasksService.java index 3428f0a..85f8897 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IDocumentTasksService.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IDocumentTasksService.java @@ -4,6 +4,8 @@ import org.dromara.productManagement.domain.vo.DocumentTasksVo; import org.dromara.productManagement.domain.bo.DocumentTasksBo; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.system.domain.vo.SysOssVo; +import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.util.Collection; @@ -68,4 +70,6 @@ public interface IDocumentTasksService { Boolean deleteWithValidByIds(Collection ids, Boolean isValid); int stopTask(Long id); + SysOssVo uploadFile(MultipartFile file) throws IOException, InterruptedException; + } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IModelPromptsHistoryService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IModelPromptsHistoryService.java new file mode 100644 index 0000000..9556636 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IModelPromptsHistoryService.java @@ -0,0 +1,75 @@ +package org.dromara.productManagement.service; + +import org.dromara.productManagement.domain.vo.ModelPromptsHistoryVo; +import org.dromara.productManagement.domain.bo.ModelPromptsHistoryBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 模型提示词历史记录Service接口 + * + * @author Lion Li + * @date 2024-12-05 + */ +public interface IModelPromptsHistoryService { + + /** + * 查询模型提示词历史记录 + * + * @param id 主键 + * @return 模型提示词历史记录 + */ + ModelPromptsHistoryVo queryById(Long id); + + /** + * 分页查询模型提示词历史记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 模型提示词历史记录分页列表 + */ + TableDataInfo queryPageList(ModelPromptsHistoryBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的模型提示词历史记录列表 + * + * @param bo 查询条件 + * @return 模型提示词历史记录列表 + */ + List queryList(ModelPromptsHistoryBo bo); + + /** + * 新增模型提示词历史记录 + * + * @param bo 模型提示词历史记录 + * @return 是否新增成功 + */ + Boolean insertByBo(ModelPromptsHistoryBo bo); + + /** + * 修改模型提示词历史记录 + * + * @param bo 模型提示词历史记录 + * @return 是否修改成功 + */ + Boolean updateByBo(ModelPromptsHistoryBo bo); + + /** + * 校验并批量删除模型提示词历史记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + /** + * 根据id恢复模型提示词历史记录 + * + * @param id 模型提示词历史记录id + * @return 是否恢复成功 + */ + int restoreByid(Long id); +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IModelPromptsService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IModelPromptsService.java new file mode 100644 index 0000000..625ffd6 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IModelPromptsService.java @@ -0,0 +1,68 @@ +package org.dromara.productManagement.service; + +import org.dromara.productManagement.domain.vo.ModelPromptsVo; +import org.dromara.productManagement.domain.bo.ModelPromptsBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 用于存储模型提示词Service接口 + * + * @author Lion Li + * @date 2024-12-05 + */ +public interface IModelPromptsService { + + /** + * 查询用于存储模型提示词 + * + * @param id 主键 + * @return 用于存储模型提示词 + */ + ModelPromptsVo queryById(Long id); + + /** + * 分页查询用于存储模型提示词列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 用于存储模型提示词分页列表 + */ + TableDataInfo queryPageList(ModelPromptsBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的用于存储模型提示词列表 + * + * @param bo 查询条件 + * @return 用于存储模型提示词列表 + */ + List queryList(ModelPromptsBo bo); + + /** + * 新增用于存储模型提示词 + * + * @param bo 用于存储模型提示词 + * @return 是否新增成功 + */ + Boolean insertByBo(ModelPromptsBo bo); + + /** + * 修改用于存储模型提示词 + * + * @param bo 用于存储模型提示词 + * @return 是否修改成功 + */ + Boolean updateByBo(ModelPromptsBo bo); + + /** + * 校验并批量删除用于存储模型提示词信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IModelUserPromptssettingService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IModelUserPromptssettingService.java new file mode 100644 index 0000000..b977aea --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IModelUserPromptssettingService.java @@ -0,0 +1,70 @@ +package org.dromara.productManagement.service; + +import org.dromara.productManagement.domain.vo.ModelUserPromptssettingVo; +import org.dromara.productManagement.domain.bo.ModelUserPromptssettingBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 模型提示词用户配置Service接口 + * + * @author Lion Li + * @date 2024-12-06 + */ +public interface IModelUserPromptssettingService { + + /** + * 查询模型提示词用户配置 + * + * @param id 主键 + * @return 模型提示词用户配置 + */ + ModelUserPromptssettingVo queryById(Long id); + + /** + * 分页查询模型提示词用户配置列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 模型提示词用户配置分页列表 + */ + TableDataInfo queryPageList(ModelUserPromptssettingBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的模型提示词用户配置列表 + * + * @param bo 查询条件 + * @return 模型提示词用户配置列表 + */ + List queryList(ModelUserPromptssettingBo bo); + + /** + * 新增模型提示词用户配置 + * + * @param bo 模型提示词用户配置 + * @return 是否新增成功 + */ + Boolean insertByBo(ModelUserPromptssettingBo bo); + + /** + * 修改模型提示词用户配置 + * + * @param bo 模型提示词用户配置 + * @return 是否修改成功 + */ + Boolean updateByBo(ModelUserPromptssettingBo bo); + + /** + * 校验并批量删除模型提示词用户配置信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + ModelUserPromptssettingVo queryByuserId(Long userId); +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocAiServiceImpl.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocAiServiceImpl.java index 2389a5a..0cfa9dd 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocAiServiceImpl.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocAiServiceImpl.java @@ -3,6 +3,7 @@ package org.dromara.productManagement.service.impl; import org.dromara.common.core.domain.R; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.productManagement.service.IDocAiService; +import org.dromara.system.domain.vo.SysOssVo; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -27,8 +28,8 @@ import org.dromara.common.sse.utils.ExecuteSSEUtil; @Service public class DocAiServiceImpl implements IDocAiService { - @Value("${chat.filePath}") - private String chatFilePath; + @Value("${chat.tempfilePath}") + private String tempfilePath; @Value("${chat.chatUrl}") private String chatUrl; @@ -84,8 +85,8 @@ public class DocAiServiceImpl implements IDocAiService { } @Override - public R uploadFile(MultipartFile file, String originalFilename) throws IOException, InterruptedException { - String destDir = chatFilePath; + public R uploadFile(MultipartFile file,String originalFilename) throws IOException, InterruptedException { + String destDir = tempfilePath; if (originalFilename == null) { throw new IllegalArgumentException("文件名不能为空"); } @@ -95,7 +96,8 @@ public class DocAiServiceImpl implements IDocAiService { FileUtil.writeFromStream(file.getInputStream(), destFile); if (!originalFilename.endsWith(".docx")) { - ProcessBuilder builder = new ProcessBuilder("unoconv", "-o", destDir, "-f", "docx", destFile.getAbsolutePath()); +// ProcessBuilder builder = new ProcessBuilder("unoconv", "-o", destDir, "-f", "docx", destFile.getAbsolutePath()); + ProcessBuilder builder = new ProcessBuilder("libreoffice", "--headless", "--convert-to", "docx",destFile.getAbsolutePath(),"--outdir",destDir ); Process process = builder.start(); int completed = process.waitFor(); if (completed != 0) { @@ -114,10 +116,12 @@ public class DocAiServiceImpl implements IDocAiService { return R.fail("文件上传失败", "文件上传失败"); } return R.ok("ok", "uploads/" + originalFilename); + } @Override public String uploadFileByStream(InputStream inputStream, String originalFilename,String url) throws IOException, InterruptedException { - String destDir = chatFilePath; + //方法已经弃用 + String destDir = tempfilePath; if (originalFilename == null) { throw new IllegalArgumentException("文件名不能为空"); } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocumentTasksPermissionsServiceImpl.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocumentTasksPermissionsServiceImpl.java index 254981b..9f55715 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocumentTasksPermissionsServiceImpl.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocumentTasksPermissionsServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.productManagement.service.impl; +import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.util.StrUtil; import org.dromara.common.core.service.DictService; import org.dromara.common.core.utils.MapstructUtils; @@ -10,10 +11,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; +import org.dromara.productManagement.domain.DocumentTasksPermissionsDetail; +import org.dromara.productManagement.domain.vo.DocumentTasksPermissionsDetailVo; +import org.dromara.productManagement.mapper.DocumentTasksPermissionsDetailMapper; import org.dromara.system.domain.SysUser; import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.mapper.SysUserMapper; import org.dromara.system.service.ISysDictTypeService; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.dromara.productManagement.domain.bo.DocumentTasksPermissionsBo; import org.dromara.productManagement.domain.vo.DocumentTasksPermissionsVo; @@ -21,10 +26,9 @@ import org.dromara.productManagement.domain.DocumentTasksPermissions; import org.dromara.productManagement.mapper.DocumentTasksPermissionsMapper; import org.dromara.productManagement.service.IDocumentTasksPermissionsService; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.Collection; +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.*; /** * 文档任务权限Service业务层处理 @@ -39,6 +43,7 @@ public class DocumentTasksPermissionsServiceImpl implements IDocumentTasksPermis private final DocumentTasksPermissionsMapper baseMapper; private final SysUserMapper userMapper; private final DictService dictTypeService; + private final DocumentTasksPermissionsDetailMapper documentTasksPermissionsDetailMapper; /** * 查询文档任务权限 @@ -178,4 +183,69 @@ public class DocumentTasksPermissionsServiceImpl implements IDocumentTasksPermis // return documentTasksPermissionsVo; return null; } + /** + * 验证当前用户是否有任务权限,并处理任务数量超限的情况 + * + * @param taskNames 任务名称列表 + * @param userId 用户ID + */ + @Override + public void validateUserTaskPermissions(List taskNames, Long userId) { + // 如果是超级管理员,则不做权限验证 + if (!StpUtil.hasRole("superadmin")) { + taskNames.forEach(taskName -> { + DocumentTasksPermissionsVo vo = baseMapper.selectDocumentPermissionsByUserIdAndTaskType(userId, taskName); + // 任务是否有权限 + if (vo == null || !vo.getTaskType().contains(taskName)) { + String label = dictTypeService.getDictLabel("document_task", taskName); + throw new RuntimeException("无权操作[" + label + "],请联系管理员"); + } + + // 任务是否数量超限 + // 先查询数据库中是否有数据 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(DocumentTasksPermissionsDetail::getUserId, userId); + queryWrapper.eq(DocumentTasksPermissionsDetail::getTaskType, taskName); + DocumentTasksPermissionsDetailVo documentTasksPermissionsDetailVo = documentTasksPermissionsDetailMapper.selectVoOne(queryWrapper); + + if (documentTasksPermissionsDetailVo != null) { + // 判断日期是否是第二天 + Date updateTime = documentTasksPermissionsDetailVo.getUpdateTime(); + // 将 updateTime 转换为 LocalDate + LocalDate updateDate = updateTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + // 获取当前日期 + LocalDate today = LocalDate.now(); + + // 判断 updateDate 和 today 是否为同一天 + if (!updateDate.isEqual(today)) { + // updateTime 不是同一天 + documentTasksPermissionsDetailVo.setRemainingDocumentCount(vo.getDailyDocumentCount() - 1); + DocumentTasksPermissionsDetail detail = new DocumentTasksPermissionsDetail(); + BeanUtils.copyProperties(documentTasksPermissionsDetailVo, detail); + documentTasksPermissionsDetailMapper.updateById(detail); + } else { + // updateTime 同一天 + if (documentTasksPermissionsDetailVo.getRemainingDocumentCount() <= 0) { + // 超限 + String label = dictTypeService.getDictLabel("document_task", taskName); + throw new RuntimeException("任务[" + label + "]数量超限,请联系管理员"); + } else { + // 数量减1 + documentTasksPermissionsDetailVo.setRemainingDocumentCount(documentTasksPermissionsDetailVo.getRemainingDocumentCount() - 1); + DocumentTasksPermissionsDetail detail = new DocumentTasksPermissionsDetail(); + BeanUtils.copyProperties(documentTasksPermissionsDetailVo, detail); + documentTasksPermissionsDetailMapper.updateById(detail); + } + } + } else { + // 没有数据,则新增一条数据 + DocumentTasksPermissionsDetail documentTasksPermissionsDetail = new DocumentTasksPermissionsDetail(); + documentTasksPermissionsDetail.setUserId(userId); + documentTasksPermissionsDetail.setTaskType(taskName); + documentTasksPermissionsDetail.setRemainingDocumentCount(vo.getDailyDocumentCount() - 1); + documentTasksPermissionsDetailMapper.insert(documentTasksPermissionsDetail); + } + }); + } + } } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocumentTasksServiceImpl.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocumentTasksServiceImpl.java index d754eec..568f952 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocumentTasksServiceImpl.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocumentTasksServiceImpl.java @@ -1,8 +1,11 @@ package org.dromara.productManagement.service.impl; import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.io.FileUtil; import okhttp3.*; +import org.dromara.common.core.domain.R; import org.dromara.common.core.service.DictService; +import org.dromara.common.core.service.UserService; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -15,29 +18,41 @@ import org.dromara.common.oss.core.OssClient; import org.dromara.common.oss.factory.OssFactory; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.productManagement.domain.DocumentTasksPermissionsDetail; +import org.dromara.productManagement.domain.ModelPrompts; +import org.dromara.productManagement.domain.ModelUserPromptssetting; import org.dromara.productManagement.domain.vo.DocumentTasksPermissionsDetailVo; import org.dromara.productManagement.domain.vo.DocumentTasksPermissionsVo; -import org.dromara.productManagement.mapper.DocumentTasksPermissionsDetailMapper; -import org.dromara.productManagement.mapper.DocumentTasksPermissionsMapper; +import org.dromara.productManagement.mapper.*; import org.dromara.productManagement.service.IDocAiService; +import org.dromara.productManagement.service.IDocumentTasksPermissionsService; +import org.dromara.productManagement.utils.MyHttpUtils; +import org.dromara.productManagement.utils.MyTimeUtils; import org.dromara.system.domain.vo.SysOssVo; import org.dromara.system.service.ISysOssService; +import org.dromara.system.service.ISysUserService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.dromara.productManagement.domain.bo.DocumentTasksBo; import org.dromara.productManagement.domain.vo.DocumentTasksVo; import org.dromara.productManagement.domain.DocumentTasks; -import org.dromara.productManagement.mapper.DocumentTasksMapper; import org.dromara.productManagement.service.IDocumentTasksService; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.text.SimpleDateFormat; +import java.time.Duration; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.Date; import java.util.List; import java.util.Map; @@ -53,15 +68,21 @@ import java.util.Collection; @Service @Transactional public class DocumentTasksServiceImpl implements IDocumentTasksService { - private final OkHttpClient client = new OkHttpClient.Builder().build(); private final DocumentTasksMapper baseMapper; + private final ModelPromptsMapper modelPromptsMapper; + private final ModelUserPromptssettingMapper modelUserPromptssettingMapper; private final DocumentTasksPermissionsMapper documentTasksPermissionsMapper; - private final DocumentTasksPermissionsDetailMapper documentTasksPermissionsDetailMapper; + private final IDocumentTasksPermissionsService documentTasksPermissionsService; private final ISysOssService ossService; - private final IDocAiService docAiService; + private final ISysUserService userService; private final DictService dictTypeService; @Value("${chat.chatUrl}") private String chatUrl; + //根目录地址 + @Value("${chat.filePath}") + private String fileRootPath; + @Value("${chat.tempfilePath}") + private String tempfilePath; /** * 查询文档任务 * @@ -84,7 +105,20 @@ public class DocumentTasksServiceImpl implements IDocumentTasksService { public TableDataInfo queryPageList(DocumentTasksBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + result.getRecords().forEach(vo -> { + Long createBy = vo.getCreateBy(); + vo.setCreateUser(userService.selectUserById(createBy).getNickName()); + //计算updateTime 和 createTime之间相差的小时数 + // 格式化输出 + String formattedDuration=""; + if(!vo.getProgressStatus().equals("PENDING")&&!vo.getProgressStatus().equals("STARTED")){ + formattedDuration= MyTimeUtils.formatTimeDifference(vo.getCreateTime(), vo.getUpdateTime()); + } + vo.setTaskDuration(formattedDuration); + }); return TableDataInfo.build(result); + + } /** @@ -109,8 +143,11 @@ public class DocumentTasksServiceImpl implements IDocumentTasksService { lqw.in(DocumentTasks::getTaskName, taskNames); } lqw.like(StringUtils.isNotBlank(bo.getDocumentName()), DocumentTasks::getDocumentName, bo.getDocumentName()); - lqw.eq(bo.getEstimatedCompletionTime() != null, DocumentTasks::getEstimatedCompletionTime, bo.getEstimatedCompletionTime()); lqw.eq(StringUtils.isNotBlank(bo.getProgressStatus()), DocumentTasks::getProgressStatus, bo.getProgressStatus()); + lqw.orderByDesc(DocumentTasks::getCreateTime); + if(taskNames == null ||!taskNames.contains("contractReview")){ + lqw.ne(DocumentTasks::getTaskName,"contractReview"); + } return lqw; } @@ -123,70 +160,58 @@ public class DocumentTasksServiceImpl implements IDocumentTasksService { @Override @Transactional public Boolean insertByBo(DocumentTasksBo bo) throws IOException, InterruptedException { + Long userId = LoginHelper.getUserId(); List taskNames = bo.getTaskNameList(); - //验证当前用户是否有任务权限,如果是超级管理员,则不做权限验证 - if(!StpUtil.hasRole("superadmin")){ - taskNames.forEach(taskName -> { - Long userId = LoginHelper.getUserId(); - DocumentTasksPermissionsVo vo = documentTasksPermissionsMapper.selectDocumentPermissionsByUserIdAndTaskType(userId, taskName); - //任务是否有权限 - if(vo == null || !vo.getTaskType().contains(taskName)){ - String label = dictTypeService.getDictLabel("document_task", taskName); - throw new RuntimeException("无权操作["+label+"],请联系管理员"); - } - //任务是否数量超限 - //先查询数据库中是否有数据 - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.eq(DocumentTasksPermissionsDetail::getUserId, userId); - queryWrapper.eq(DocumentTasksPermissionsDetail::getTaskType, taskName); - DocumentTasksPermissionsDetailVo documentTasksPermissionsDetailVo = documentTasksPermissionsDetailMapper.selectVoOne(queryWrapper); - if(documentTasksPermissionsDetailVo != null ){ - if( documentTasksPermissionsDetailVo.getRemainingDocumentCount()<=0){ - //超限 - String label = dictTypeService.getDictLabel("document_task", taskName); - throw new RuntimeException("任务["+label+"]数量超限,请联系管理员"); - }else{ - //数量减1 - DocumentTasksPermissionsDetail detail = new DocumentTasksPermissionsDetail(); - documentTasksPermissionsDetailVo.setRemainingDocumentCount(documentTasksPermissionsDetailVo.getRemainingDocumentCount()-1); - BeanUtils.copyProperties(documentTasksPermissionsDetailVo,detail); - documentTasksPermissionsDetailMapper.updateById(detail); - } - - } - if(documentTasksPermissionsDetailVo==null){ - //没有数据,则新增一条数据 - DocumentTasksPermissionsDetail documentTasksPermissionsDetail = new DocumentTasksPermissionsDetail(); - documentTasksPermissionsDetail.setUserId(userId); - documentTasksPermissionsDetail.setTaskType(taskName); - documentTasksPermissionsDetail.setRemainingDocumentCount(vo.getDailyDocumentCount()-1); - documentTasksPermissionsDetailMapper.insert(documentTasksPermissionsDetail); - } - - }); + //校验所属区域和所属行业是否存在提示词 + taskNames.forEach(taskName -> { + ModelPrompts modelPrompts = modelPromptsMapper.selectOne(Wrappers.lambdaQuery() + .eq(ModelPrompts::getTaskName, taskName) + .eq(ModelPrompts::getTaskIndustry, bo.getTaskIndustry()) + .eq(ModelPrompts::getTaskRegion, bo.getTaskRegion())); + if(modelPrompts == null){ + String label = dictTypeService.getDictLabel("document_task", taskName); + throw new RuntimeException("任务名称:["+label+"],当前任务所属区域或所属行业不存在模型,请联系管理员配置"); + } + }); + //变更或新增当前角色所属区域和所属行业的配置 + //当前任务存在提示词,保存用户个人设置 + //先查询数据库中是否有数据 + ModelUserPromptssetting promptssetting = modelUserPromptssettingMapper.selectOne(Wrappers.lambdaQuery() + .eq(ModelUserPromptssetting::getUserId, userId)); + if(promptssetting!= null){ + //已存在,更新 + promptssetting.setTaskIndustry(bo.getTaskIndustry()); + promptssetting.setTaskRegion(bo.getTaskRegion()); + modelUserPromptssettingMapper.updateById(promptssetting); } + else{ + //不存在,新增 + ModelUserPromptssetting userPromptssetting = new ModelUserPromptssetting(); + userPromptssetting.setUserId(userId); + userPromptssetting.setTaskIndustry(bo.getTaskIndustry()); + userPromptssetting.setTaskRegion(bo.getTaskRegion()); + modelUserPromptssettingMapper.insert(userPromptssetting); + } + //验证当前用户是否有任务权限,如果是超级管理员,则不做权限验证 + documentTasksPermissionsService.validateUserTaskPermissions(taskNames,userId); boolean flag = false; Long ossId = bo.getOssId(); SysOssVo fileInfo = ossService.getById(ossId); String fileName = fileInfo.getOriginalName(); - OssClient storage = OssFactory.instance(fileInfo.getService()); - InputStream inputStream = storage.getObjectContent(fileInfo.getUrl()); + String filePath =fileRootPath+fileInfo.getFileName(); String timestamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); // 获取当前时间戳 + String parentPath = new File(filePath).getParent(); + // 获取文件扩展名 + String fileExtension = ""; + int lastIndexOfDot = fileName.lastIndexOf('.'); + if (lastIndexOfDot != -1) { + fileExtension = fileName.substring(lastIndexOfDot); // 获取文件扩展名 + fileName = fileName.substring(0, lastIndexOfDot); // 获取文件名 + } + + // 拼接新的文件名 + String newFileName = fileName + "_" + timestamp + fileExtension; -// // 获取文件扩展名 -// String fileExtension = ""; -// int lastIndexOfDot = fileName.lastIndexOf('.'); -// if (lastIndexOfDot != -1) { -// fileExtension = fileName.substring(lastIndexOfDot); // 获取文件扩展名 -// fileName = fileName.substring(0, lastIndexOfDot); // 获取文件名 -// } -// -// // 拼接新的文件名 -// String newFileName = fileName + "_" + timestamp + fileExtension; -// String s = docAiService.uploadFileByStream(inputStream, newFileName,"/sse/upload"); -// if(!s.equals("1")){ -// throw new RuntimeException(s); -// } bo.setDocumentName(fileInfo.getOriginalName()); if (taskNames != null && !taskNames.isEmpty()) { for (String taskName : taskNames) { @@ -195,23 +220,43 @@ public class DocumentTasksServiceImpl implements IDocumentTasksService { add.setTaskName(taskName); // 验证实体并保存 validEntityBeforeSave(add); - // 发送请求 -// if(taskName.equals("DocumentEvaluation")){ -// String s1 = docAiService.uploadFileByStream(inputStream, newFileName,"/xysse/upload"); -// if(!s1.equals("1")){ -// throw new RuntimeException(s1); -// } -// } -// if(!fileExtension.contains("docx")){ -// newFileName = fileName + "_" + timestamp + ".docx"; -// } + if(!fileExtension.contains("docx")){ + //文件转换为docx +// ProcessBuilder builder = new ProcessBuilder("unoconv", "-o", parentPath, "-f", "docx", filePath); + ProcessBuilder builder = new ProcessBuilder("libreoffice", "--headless", "--convert-to", "docx",filePath, "--outdir", parentPath); + Process process = builder.start(); + int completed = process.waitFor(); + if (completed != 0) { + InputStream errorStream = process.getErrorStream(); + String errorMessage = new String(errorStream.readAllBytes()); + process.destroyForcibly(); + String failMsg = fileName + "转docx失败,请检查文件是否正确~ 错误信息: " + errorMessage; + throw new RuntimeException(failMsg); + } else { + process.destroyForcibly(); + // 获取文件名部分 + int lastDotIndex = filePath.lastIndexOf('.'); + if (lastDotIndex == -1) { + // 如果没有扩展名,直接添加 .docx + filePath= filePath + ".docx"; + } else { + // 如果有其他扩展名,替换为 .docx + filePath= filePath.substring(0, lastDotIndex) + ".docx"; + } + } + + } //参数 add.id,taskName。newFileName; + add.setProgressStatus("PENDING"); + flag = baseMapper.insert(add) > 0; + Long priority=1L; //获取当前用户的任务优先级 - DocumentTasksPermissionsVo documentTasksPermissionsVo = documentTasksPermissionsMapper.selectDocumentPermissionsByUserIdAndTaskType(LoginHelper.getUserId(),taskName); - Long priority = documentTasksPermissionsVo.getPriority(); -// sendRequest(add.getId(), taskName, "uploads/"+newFileName, priority); - + if(!StpUtil.hasRole("superadmin")){ + DocumentTasksPermissionsVo documentTasksPermissionsVo = documentTasksPermissionsMapper.selectDocumentPermissionsByUserIdAndTaskType(LoginHelper.getUserId(),taskName); + priority = documentTasksPermissionsVo.getPriority(); + } + MyHttpUtils.sendTaskStartMessage(chatUrl+"/back/taskStart",add.getId(), taskName, filePath, priority); if (!flag) { throw new RuntimeException("新增文档任务失败"); } @@ -220,50 +265,7 @@ public class DocumentTasksServiceImpl implements IDocumentTasksService { return flag; } - private void sendRequest(String taskId, String taskName, String filename,Long priority) { -// String url = getUrlByTaskName(taskName); - String url = chatUrl+"/back/taskStart"; - if (url == null) { - throw new IllegalArgumentException("无效的任务名称: " + taskName); - } - - Request request = new Request.Builder() - .url(url+"?userId="+ LoginHelper.getUserId()+"&taskId="+taskId+"&filename="+filename+"&taskName="+taskName+"&priority="+priority) - .build(); - - // 使用异步调用 - client.newCall(request).enqueue(new Callback() { - @Override - public void onFailure(Call call, IOException e) { - e.printStackTrace(); // 处理请求失败 - } - - @Override - public void onResponse(Call call, Response response) throws IOException { - // 忽略返回内容 - response.close(); // 确保响应被关闭 - } - }); - } - private String getUrlByTaskName(String taskName) { - switch (taskName) { - case "checkRepeatText": - return chatUrl+"/back/checkRepeatText"; - case "checkPlaceName": - return chatUrl+"/back/checkPlaceName"; - case "checkCompanyName": - return chatUrl+"/back/checkCompanyName"; - case "checkDocumentError": - return chatUrl+"/back/checkDocumentErrorWeb"; - case "checkTitleName": - return chatUrl+"/back/checkTitleName"; - case "DocumentEvaluation": - return chatUrl+"/xyback/documentEvaluate"; - default: - return null; - } - } /** * 修改文档任务 * @@ -321,13 +323,14 @@ public class DocumentTasksServiceImpl implements IDocumentTasksService { @Override public int stopTask(Long id) { + OkHttpClient client = new OkHttpClient.Builder().build(); String url = chatUrl + "/back/stopTask"; //查询任务名称 DocumentTasksVo documentTasksVo = baseMapper.selectVoById(id); String taskName = documentTasksVo.getTaskName(); //发送请求 Request request = new Request.Builder() - .url(url+"?taskId="+id+"&taskName="+taskName) + .url(url+"?taskId="+documentTasksVo.getTaskId()+"&taskName="+taskName) .build(); //使用同步调用 @@ -342,4 +345,43 @@ public class DocumentTasksServiceImpl implements IDocumentTasksService { } return 0; } + @Override + public SysOssVo uploadFile(MultipartFile file) throws IOException, InterruptedException { + String destDir = tempfilePath; + // 判断目标目录是否存在,如果不存在则创建 + File directory = new File(destDir); + if (!directory.exists()) { + boolean isCreated = directory.mkdirs(); // 创建目录 + if (!isCreated) { + throw new RuntimeException("无法创建目标目录: " + destDir); + } + } + String originalfileName = file.getOriginalFilename();//文件名 + String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length()); + String destPath = destDir + File.separator + originalfileName; + File destFile = new File(destPath); + FileUtil.writeFromStream(file.getInputStream(), destFile); + if (!suffix.equals(".docx")) { +// ProcessBuilder builder = new ProcessBuilder("unoconv", "-o", destDir, "-f", "docx", destFile.getAbsolutePath()); + ProcessBuilder builder = new ProcessBuilder("libreoffice", "--headless", "--convert-to", "docx",destPath, "--outdir", destDir); + Process process = builder.start(); + int completed = process.waitFor(); + if (completed != 0) { + InputStream errorStream = process.getErrorStream(); + String errorMessage = new String(errorStream.readAllBytes()); + process.destroyForcibly(); + String failMsg = suffix + "转docx失败,可以尝试用WORD或WPS打开文件,另存为docx文件,再尝试上传。 错误信息: " + errorMessage; + throw new RuntimeException(failMsg); + } else { + process.destroyForcibly(); + destPath = destPath.substring(0, destPath.lastIndexOf(".")) + ".docx"; + } + } + //校验文件是否可用 + if(!MyHttpUtils.sendFileCheckMessage(chatUrl + "/back/checkFile", destPath)){ + throw new RuntimeException("文件无法正常打开。可以尝试用WORD或WPS打开文件,进行修复并另存,用另存的文件再做一次尝试。"); + } + SysOssVo upload = ossService.upload(new File(destPath)); + return upload; + } } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ModelPromptsHistoryServiceImpl.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ModelPromptsHistoryServiceImpl.java new file mode 100644 index 0000000..1a8b560 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ModelPromptsHistoryServiceImpl.java @@ -0,0 +1,159 @@ +package org.dromara.productManagement.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.dromara.productManagement.domain.DocumentTasks; +import org.dromara.productManagement.domain.ModelPrompts; +import org.dromara.productManagement.domain.vo.ModelPromptsVo; +import org.dromara.productManagement.mapper.ModelPromptsMapper; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.dromara.productManagement.domain.bo.ModelPromptsHistoryBo; +import org.dromara.productManagement.domain.vo.ModelPromptsHistoryVo; +import org.dromara.productManagement.domain.ModelPromptsHistory; +import org.dromara.productManagement.mapper.ModelPromptsHistoryMapper; +import org.dromara.productManagement.service.IModelPromptsHistoryService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 模型提示词历史记录Service业务层处理 + * + * @author Lion Li + * @date 2024-12-05 + */ +@RequiredArgsConstructor +@Service +public class ModelPromptsHistoryServiceImpl implements IModelPromptsHistoryService { + + private final ModelPromptsHistoryMapper baseMapper; + private final ModelPromptsMapper modelPromptsMapper; + /** + * 查询模型提示词历史记录 + * + * @param id 主键 + * @return 模型提示词历史记录 + */ + @Override + public ModelPromptsHistoryVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询模型提示词历史记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 模型提示词历史记录分页列表 + */ + @Override + public TableDataInfo queryPageList(ModelPromptsHistoryBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的模型提示词历史记录列表 + * + * @param bo 查询条件 + * @return 模型提示词历史记录列表 + */ + @Override + public List queryList(ModelPromptsHistoryBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(ModelPromptsHistoryBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getTaskName()), ModelPromptsHistory::getTaskName, bo.getTaskName()); + lqw.eq(StringUtils.isNotBlank(bo.getTaskRegion()), ModelPromptsHistory::getTaskRegion, bo.getTaskRegion()); + lqw.eq(StringUtils.isNotBlank(bo.getTaskIndustry()), ModelPromptsHistory::getTaskIndustry, bo.getTaskIndustry()); + lqw.orderByDesc(ModelPromptsHistory::getCreateTime).orderByDesc(ModelPromptsHistory::getModelVersion); + return lqw; + } + + /** + * 新增模型提示词历史记录 + * + * @param bo 模型提示词历史记录 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(ModelPromptsHistoryBo bo) { + ModelPromptsHistory add = MapstructUtils.convert(bo, ModelPromptsHistory.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改模型提示词历史记录 + * + * @param bo 模型提示词历史记录 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(ModelPromptsHistoryBo bo) { + ModelPromptsHistory update = MapstructUtils.convert(bo, ModelPromptsHistory.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(ModelPromptsHistory entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除模型提示词历史记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public int restoreByid(Long id) { + //根据id查询出历史记录 + ModelPromptsHistory modelPromptsHistory = baseMapper.selectById(id); + ModelPrompts modelPrompts = new ModelPrompts(); + BeanUtils.copyProperties(modelPromptsHistory, modelPrompts); + + modelPrompts.setId(modelPromptsHistory.getPromptId()); + //查询当前模型 + ModelPromptsVo modelPromptsVo = modelPromptsMapper.selectVoById(modelPromptsHistory.getPromptId()); + int version = Integer.parseInt(modelPromptsVo.getModelVersion()); + modelPrompts.setModelVersion(String.valueOf(version+1)); + modelPromptsMapper.updateById(modelPrompts); + //更新历史记录 + ModelPromptsHistory history = new ModelPromptsHistory(); + BeanUtils.copyProperties(modelPromptsVo, history); + history.setId(null); + history.setPromptId(modelPromptsVo.getId()); + baseMapper.insert(history); + return 1; + } +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ModelPromptsServiceImpl.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ModelPromptsServiceImpl.java new file mode 100644 index 0000000..93e2848 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ModelPromptsServiceImpl.java @@ -0,0 +1,166 @@ +package org.dromara.productManagement.service.impl; + +import cn.hutool.core.util.StrUtil; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.dromara.productManagement.domain.ModelPromptsHistory; +import org.dromara.productManagement.mapper.ModelPromptsHistoryMapper; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.dromara.productManagement.domain.bo.ModelPromptsBo; +import org.dromara.productManagement.domain.vo.ModelPromptsVo; +import org.dromara.productManagement.domain.ModelPrompts; +import org.dromara.productManagement.mapper.ModelPromptsMapper; +import org.dromara.productManagement.service.IModelPromptsService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 用于存储模型提示词Service业务层处理 + * + * @author Lion Li + * @date 2024-12-05 + */ +@RequiredArgsConstructor +@Service +public class ModelPromptsServiceImpl implements IModelPromptsService { + + private final ModelPromptsMapper baseMapper; + private final ModelPromptsHistoryMapper historyMapper; + /** + * 查询用于存储模型提示词 + * + * @param id 主键 + * @return 用于存储模型提示词 + */ + @Override + public ModelPromptsVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询用于存储模型提示词列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 用于存储模型提示词分页列表 + */ + @Override + public TableDataInfo queryPageList(ModelPromptsBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的用于存储模型提示词列表 + * + * @param bo 查询条件 + * @return 用于存储模型提示词列表 + */ + @Override + public List queryList(ModelPromptsBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(ModelPromptsBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getId() != null, ModelPrompts::getId, bo.getId()); + lqw.eq(StringUtils.isNotBlank(bo.getTaskName()), ModelPrompts::getTaskName, bo.getTaskName()); + lqw.eq(StringUtils.isNotBlank(bo.getTaskRegion()), ModelPrompts::getTaskRegion, bo.getTaskRegion()); + lqw.eq(StringUtils.isNotBlank(bo.getTaskIndustry()), ModelPrompts::getTaskIndustry, bo.getTaskIndustry()); + return lqw; + } + + /** + * 新增用于存储模型提示词 + * + * @param bo 用于存储模型提示词 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(ModelPromptsBo bo) { + ModelPrompts add = MapstructUtils.convert(bo, ModelPrompts.class); + validEntityBeforeSave(add); + //查询版本号是否存在 + if(StrUtil.isBlankIfStr(bo.getModelVersion())){ + add.setModelVersion("1"); + }else{ + //获取版本号字符串,转成int,加1,再转成字符串 + int version = Integer.parseInt(bo.getModelVersion()); + add.setModelVersion(String.valueOf(version+1)); + } + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + add.setId(add.getId()); + } + return flag; + } + + /** + * 修改用于存储模型提示词 + * + * @param bo 用于存储模型提示词 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(ModelPromptsBo bo) { + ModelPrompts update = MapstructUtils.convert(bo, ModelPrompts.class); + validEntityBeforeSave(update); + //更新前查询原数据 + ModelPrompts old = baseMapper.selectById(update.getId()); + //原数据跟新到历史记录表 + ModelPromptsHistory modelPromptsHistory = new ModelPromptsHistory(); + BeanUtils.copyProperties(old, modelPromptsHistory); + modelPromptsHistory.setId(null); + modelPromptsHistory.setPromptId(update.getId()); + historyMapper.insert(modelPromptsHistory); + //更新最新数据 + //获取版本号字符串,转成int,加1,再转成字符串 + int version = Integer.parseInt(bo.getModelVersion()); + update.setModelVersion(String.valueOf(version+1)); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(ModelPrompts entity){ + //TODO 做一些数据校验,如唯一约束 + //根据任务名称、区域、行业查询是否存在相同的提示词 + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(ModelPrompts::getTaskName, entity.getTaskName()); + lqw.eq(ModelPrompts::getTaskRegion, entity.getTaskRegion()); + lqw.eq(ModelPrompts::getTaskIndustry, entity.getTaskIndustry()); + lqw.ne(ModelPrompts::getId, entity.getId()); + Long count = baseMapper.selectCount(lqw); + if(count > 0){ + throw new IllegalArgumentException("任务名称、区域、行业不能重复!"); + } + } + + /** + * 校验并批量删除用于存储模型提示词信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ModelUserPromptssettingServiceImpl.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ModelUserPromptssettingServiceImpl.java new file mode 100644 index 0000000..6ff37e4 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/ModelUserPromptssettingServiceImpl.java @@ -0,0 +1,148 @@ +package org.dromara.productManagement.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.dromara.productManagement.domain.bo.ModelUserPromptssettingBo; +import org.dromara.productManagement.domain.vo.ModelUserPromptssettingVo; +import org.dromara.productManagement.domain.ModelUserPromptssetting; +import org.dromara.productManagement.mapper.ModelUserPromptssettingMapper; +import org.dromara.productManagement.service.IModelUserPromptssettingService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 模型提示词用户配置Service业务层处理 + * + * @author Lion Li + * @date 2024-12-06 + */ +@RequiredArgsConstructor +@Service +public class ModelUserPromptssettingServiceImpl implements IModelUserPromptssettingService { + + private final ModelUserPromptssettingMapper baseMapper; + + /** + * 查询模型提示词用户配置 + * + * @param id 主键 + * @return 模型提示词用户配置 + */ + @Override + public ModelUserPromptssettingVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询模型提示词用户配置列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 模型提示词用户配置分页列表 + */ + @Override + public TableDataInfo queryPageList(ModelUserPromptssettingBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的模型提示词用户配置列表 + * + * @param bo 查询条件 + * @return 模型提示词用户配置列表 + */ + @Override + public List queryList(ModelUserPromptssettingBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(ModelUserPromptssettingBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getTaskIndustry()), ModelUserPromptssetting::getTaskIndustry, bo.getTaskIndustry()); + lqw.eq(StringUtils.isNotBlank(bo.getTaskRegion()), ModelUserPromptssetting::getTaskRegion, bo.getTaskRegion()); + lqw.like(StringUtils.isNotBlank(bo.getTaskName()), ModelUserPromptssetting::getTaskName, bo.getTaskName()); + lqw.eq(bo.getUserId() != null, ModelUserPromptssetting::getUserId, bo.getUserId()); + return lqw; + } + + /** + * 新增模型提示词用户配置 + * + * @param bo 模型提示词用户配置 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(ModelUserPromptssettingBo bo) { + ModelUserPromptssetting add = MapstructUtils.convert(bo, ModelUserPromptssetting.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改模型提示词用户配置 + * + * @param bo 模型提示词用户配置 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(ModelUserPromptssettingBo bo) { + ModelUserPromptssetting update = MapstructUtils.convert(bo, ModelUserPromptssetting.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(ModelUserPromptssetting entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除模型提示词用户配置信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public ModelUserPromptssettingVo queryByuserId(Long userId) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(ModelUserPromptssetting::getUserId, userId); + ModelUserPromptssetting modelUserPromptssetting = baseMapper.selectOne(lqw); + ModelUserPromptssettingVo modelUserPromptssettingVo = new ModelUserPromptssettingVo(); + if (modelUserPromptssetting != null) { + modelUserPromptssettingVo =MapstructUtils.convert(modelUserPromptssetting, ModelUserPromptssettingVo.class); + }else{ + //不存在配置返回默认通用 + modelUserPromptssettingVo.setTaskIndustry("normal"); + modelUserPromptssettingVo.setTaskRegion("normal"); + } + return modelUserPromptssettingVo; + } +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/utils/MyHttpUtils.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/utils/MyHttpUtils.java new file mode 100644 index 0000000..272a376 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/utils/MyHttpUtils.java @@ -0,0 +1,77 @@ +package org.dromara.productManagement.utils; + +import okhttp3.*; +import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.productManagement.domain.vo.DocumentTasksVo; +import org.springframework.beans.factory.annotation.Value; + +import java.io.File; +import java.io.IOException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; + +public class MyHttpUtils { + // chatUrl 应该是静态字段,因为它在静态方法中使用 + private static String chatUrl; + + // 添加setter方法以注入值 + @Value("${chat.chatUrl}") + public void setChatUrl(String url) { + MyHttpUtils.chatUrl = url; + } + + public static void sendTaskStartMessage(String url,Long taskId, String taskName, String filename,Long priority) { + OkHttpClient client = new OkHttpClient.Builder().build(); + if (url == null) { + throw new IllegalArgumentException("无效的任务名称: " + taskName); + } + +// Request request = new Request.Builder() +// .url(url+"?userId="+ LoginHelper.getUserId()+"&taskId="+taskId+"&filename="+filename+"&taskName="+taskName+"&priority="+priority) +// .build(); + HttpUrl.Builder urlBuilder = HttpUrl.parse(url).newBuilder(); + urlBuilder.addQueryParameter("userId", String.valueOf(LoginHelper.getUserId())); + urlBuilder.addQueryParameter("taskId", String.valueOf(taskId)); + urlBuilder.addQueryParameter("filename", filename); + urlBuilder.addQueryParameter("taskName", taskName); + urlBuilder.addQueryParameter("priority", String.valueOf(priority)); + Request request = new Request.Builder() + .url(urlBuilder.build()) + .build(); + // 使用异步调用 + client.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(Call call, IOException e) { + e.printStackTrace(); // 处理请求失败 + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + // 忽略返回内容 + response.close(); // 确保响应被关闭 + } + }); + } + + /** + * 校验文档是否正常 + * @param url 校验接口地址 + * @param filePath 文档路径 + */ + public static Boolean sendFileCheckMessage(String url, String filePath) { + OkHttpClient client = new OkHttpClient.Builder().build(); + String fullUrl = url + "?filePath=" + URLEncoder.encode(filePath, StandardCharsets.UTF_8); + + Request request = new Request.Builder() + .url(fullUrl) + .get() // 使用 GET 请求方法 + .build(); + + try (Response response = client.newCall(request).execute()) { + return response.isSuccessful(); + } catch (IOException e) { + e.printStackTrace(); + } + return false; + } +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/utils/MyTimeUtils.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/utils/MyTimeUtils.java new file mode 100644 index 0000000..8ac8da6 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/utils/MyTimeUtils.java @@ -0,0 +1,44 @@ +package org.dromara.productManagement.utils; + +import org.springframework.beans.factory.annotation.Value; + +import java.time.Duration; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Date; +public class MyTimeUtils { + // chatUrl 应该是静态字段,因为它在静态方法中使用 + private static String chatUrl; + + // 添加setter方法以注入值 + @Value("${chat.chatUrl}") + public void setChatUrl(String url) { + MyTimeUtils.chatUrl = url; + } + /** + * 计算并格式化两个 Date 对象之间的时间差 + * + * @param createTime 创建时间 + * @param updateTime 更新时间 + * @return 格式化后的时间差字符串 + */ + public static String formatTimeDifference(Date createTime, Date updateTime) { + // 将 Date 转换为 LocalDateTime + LocalDateTime createLocalDateTime = createTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + LocalDateTime updateLocalDateTime = updateTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + + // 计算两个时间之间的差值 + Duration duration = Duration.between(createLocalDateTime, updateLocalDateTime); + + // 获取小时数和分钟数 + long hours = duration.toHours(); + long minutes = duration.toMinutes() % 60; + + // 格式化时间差 + if (hours > 0) { + return String.format("%d小时%d分钟", hours, minutes); + } else { + return String.format("%d分钟", minutes); + } + } +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/ModelPromptsHistoryMapper.xml b/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/ModelPromptsHistoryMapper.xml new file mode 100644 index 0000000..2ae6192 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/ModelPromptsHistoryMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/ModelPromptsMapper.xml b/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/ModelPromptsMapper.xml new file mode 100644 index 0000000..9d0290a --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/ModelPromptsMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/ModelUserPromptssettingMapper.xml b/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/ModelUserPromptssettingMapper.xml new file mode 100644 index 0000000..7e892a8 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/ModelUserPromptssettingMapper.xml @@ -0,0 +1,7 @@ + + + + +