diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index b512af9..9c26130 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -108,6 +108,83 @@ org.dromara zaojia-productManagement + + + + + + org.apache.poi + poi + 5.2.0 + + + org.apache.poi + poi-scratchpad + 5.2.0 + + + org.apache.poi + poi-ooxml + 5.2.0 + + + + + + + + + + + + + fr.opensagres.xdocreport + fr.opensagres.xdocreport.document + 2.0.1 + + + fr.opensagres.xdocreport + org.apache.poi.xwpf.converter.xhtml + 1.0.6 + + + fr.opensagres.xdocreport + fr.opensagres.poi.xwpf.converter.xhtml + 2.0.3 + + + xmlbeans + org.apache.xmlbeans + + + + + fr.opensagres.xdocreport + org.apache.poi.xwpf.converter.core + 1.0.6 + + + ooxml-schemas + org.apache.poi + + + + + + + + + + + + + + + + + + + @@ -151,6 +228,33 @@ ${project.artifactId} + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index d7ebaee..803de73 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -10,12 +10,14 @@ spring.boot.admin.client: userpassword: ${spring.boot.admin.client.password} username: ruoyi password: 123456 - +server: + # 端口号 + port: 8080 --- # snail-job 配置 snail-job: - enabled: false + enabled: true # 需要在 SnailJob 后台组管理创建对应名称的组,然后创建任务的时候选择对应的组,才能正确分派任务 - group: "ruoyi_group" + group: "guoyanGroup" # SnailJob 接入验证令牌 详见 script/sql/snail_job.sql `sj_group_config` 表 token: "SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT" server: @@ -45,17 +47,20 @@ spring: driverClassName: com.mysql.cj.jdbc.Driver # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题) - url: jdbc:mysql://localhost:3306/zaojia?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true +# url: jdbc:mysql://localhost:3306/zaojia?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true +# username: root +# password: root + url: jdbc:mysql://218.246.6.174:3306/zaojiatest?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true username: root password: root # 从库数据源 - slave: - lazy: true - type: ${spring.datasource.type} - driverClassName: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://116.62.210.190:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true - username: root - password: Guoyan83086775 +# slave: +# lazy: true +# type: ${spring.datasource.type} +# driverClassName: com.mysql.cj.jdbc.Driver +# url: jdbc:mysql://116.62.210.190:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true +# username: root +# password: Guoyan83086775 # oracle: # type: ${spring.datasource.type} # driverClassName: oracle.jdbc.OracleDriver @@ -100,7 +105,7 @@ spring.data: # 数据库索引 database: 0 # redis 密码必须配置 - #password: ruoyi123 +# password: root # 连接超时时间 timeout: 10s # 是否开启ssl @@ -259,20 +264,25 @@ justauth: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: ${justauth.address}/social-callback?source=gitlab -elasticsearch: - # es host ip 地址(集群),多个以","间隔 - uris: localhost:9200 - username: elastic - password: 123456789 - # es 请求方式 - scheme: http - # es 连接超时时间(ms) - connectTimeOut: 1000 - # es socket 连接超时时间(ms) - socketTimeOut: 30000 - # es 请求超时时间(ms) - connectionRequestTimeOut: 500 - # es 最大连接数 - maxConnectNum: 100 - # es 每个路由的最大连接数 - maxConnectNumPerRoute: 100 +#elasticsearch: +# # es host ip 地址(集群),多个以","间隔 +# uris: localhost:9200 +# username: elastic +# password: 123456789 +# # es 请求方式 +# scheme: http +# # es 连接超时时间(ms) +# connectTimeOut: 1000 +# # es socket 连接超时时间(ms) +# socketTimeOut: 30000 +# # es 请求超时时间(ms) +# connectionRequestTimeOut: 500 +# # es 最大连接数 +# maxConnectNum: 100 +# # es 每个路由的最大连接数 +# maxConnectNumPerRoute: 100 +chat: + # 聊天机器人配置 + filePath: D:\python项目39 + #http://localhost %http://183.136.156.2:50000 + chatUrl: http://183.136.156.2:50000 diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml index 2823bba..fa16e0e 100644 --- a/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -13,10 +13,12 @@ spring.boot.admin.client: userpassword: ${spring.boot.admin.client.password} username: ruoyi password: 123456 - +server: + # 端口号 + port: 8081 --- # snail-job 配置 snail-job: - enabled: true + enabled: false # 需要在 SnailJob 后台组管理创建对应名称的组,然后创建任务的时候选择对应的组,才能正确分派任务 group: "ruoyi_group" # SnailJob 接入验证令牌 详见 script/sql/snail_job.sql `sj_group_config` 表 @@ -48,7 +50,7 @@ spring: driverClassName: com.mysql.cj.jdbc.Driver # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题) - url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + url: jdbc:mysql://localhost:3306/zaojia?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true username: root password: root # 从库数据源 @@ -56,9 +58,9 @@ spring: lazy: true type: ${spring.datasource.type} driverClassName: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true - username: - password: + url: jdbc:mysql://116.62.210.190:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + username: root + password: Guoyan83086775 # oracle: # type: ${spring.datasource.type} # driverClassName: oracle.jdbc.OracleDriver @@ -103,7 +105,7 @@ spring.data: # 数据库索引 database: 0 # redis 密码必须配置 - password: ruoyi123 + password: root # 连接超时时间 timeout: 10s # 是否开启ssl @@ -261,3 +263,24 @@ justauth: client-id: 10**********6 client-secret: 1f7d08**********5b7**********29e redirect-uri: ${justauth.address}/social-callback?source=gitlab +#elasticsearch: +# # es host ip 地址(集群),多个以","间隔 +# uris: localhost:9200 +# username: elastic +# password: 123456789 +# # es 请求方式 +# scheme: http +# # es 连接超时时间(ms) +# connectTimeOut: 1000 +# # es socket 连接超时时间(ms) +# socketTimeOut: 30000 +# # es 请求超时时间(ms) +# connectionRequestTimeOut: 500 +# # es 最大连接数 +# maxConnectNum: 100 +# # es 每个路由的最大连接数 +# maxConnectNumPerRoute: 100 +chat: + # 聊天机器人配置 + filePath: /usr/app/tempFile + chatUrl: http://183.136.156.2:50000 diff --git a/ruoyi-admin/src/main/resources/application-test.yml b/ruoyi-admin/src/main/resources/application-test.yml new file mode 100644 index 0000000..ac29cb8 --- /dev/null +++ b/ruoyi-admin/src/main/resources/application-test.yml @@ -0,0 +1,286 @@ +--- # 临时文件存储位置 避免临时文件被系统清理报错 +spring.servlet.multipart.location: /ruoyi/server/temp + +--- # 监控中心配置 +spring.boot.admin.client: + # 增加客户端开关 + enabled: true + url: http://localhost:9090/admin + instance: + service-host-type: IP + metadata: + username: ${spring.boot.admin.client.username} + userpassword: ${spring.boot.admin.client.password} + username: ruoyi + password: 123456 +server: + # 端口号 + port: 8082 +--- # snail-job 配置 +snail-job: + enabled: false + # 需要在 SnailJob 后台组管理创建对应名称的组,然后创建任务的时候选择对应的组,才能正确分派任务 + group: "ruoyi_group" + # SnailJob 接入验证令牌 详见 script/sql/snail_job.sql `sj_group_config` 表 + token: "SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT" + server: + host: 127.0.0.1 + port: 17888 + # 详见 script/sql/snail_job.sql `sj_namespace` 表 + namespace: ${spring.profiles.active} + # 随主应用端口飘逸 + port: 3${server.port} + +--- # 数据源配置 +spring: + datasource: + type: com.zaxxer.hikari.HikariDataSource + # 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content + dynamic: + # 性能分析插件(有性能损耗 不建议生产环境使用) + p6spy: false + # 设置默认的数据源或者数据源组,默认值即为 master + primary: master + # 严格模式 匹配不到数据源则报错 + strict: true + datasource: + # 主库数据源 + master: + type: ${spring.datasource.type} + driverClassName: com.mysql.cj.jdbc.Driver + # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 + # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题) + url: jdbc:mysql://localhost:3306/zaojiatest?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + username: root + password: root + # 从库数据源 + slave: + lazy: true + type: ${spring.datasource.type} + driverClassName: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://116.62.210.190:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + username: root + password: Guoyan83086775 +# oracle: +# type: ${spring.datasource.type} +# driverClassName: oracle.jdbc.OracleDriver +# url: jdbc:oracle:thin:@//localhost:1521/XE +# username: ROOT +# password: root +# postgres: +# type: ${spring.datasource.type} +# driverClassName: org.postgresql.Driver +# url: jdbc:postgresql://localhost:5432/postgres?useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true +# username: root +# password: root +# sqlserver: +# type: ${spring.datasource.type} +# driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver +# url: jdbc:sqlserver://localhost:1433;DatabaseName=tempdb;SelectMethod=cursor;encrypt=false;rewriteBatchedStatements=true +# username: SA +# password: root + hikari: + # 最大连接池数量 + maxPoolSize: 20 + # 最小空闲线程数量 + minIdle: 10 + # 配置获取连接等待超时的时间 + connectionTimeout: 30000 + # 校验超时时间 + validationTimeout: 5000 + # 空闲连接存活最大时间,默认10分钟 + idleTimeout: 600000 + # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟 + maxLifetime: 1800000 + # 多久检查一次连接的活性 + keepaliveTime: 30000 + +--- # redis 单机配置(单机与集群只能开启一个另一个需要注释掉) +spring.data: + redis: + # 地址 + host: localhost + # 端口,默认为6379 + port: 6379 + # 数据库索引 + database: 0 + # redis 密码必须配置 + password: root + # 连接超时时间 + timeout: 10s + # 是否开启ssl + ssl.enabled: false + +# redisson 配置 +redisson: + # redis key前缀 + keyPrefix: + # 线程池数量 + threads: 16 + # Netty线程池数量 + nettyThreads: 32 + # 单节点配置 + singleServerConfig: + # 客户端名称 + clientName: ${ruoyi.name} + # 最小空闲连接数 + connectionMinimumIdleSize: 32 + # 连接池大小 + connectionPoolSize: 64 + # 连接空闲超时,单位:毫秒 + idleConnectionTimeout: 10000 + # 命令等待超时,单位:毫秒 + timeout: 3000 + # 发布和订阅连接池大小 + subscriptionConnectionPoolSize: 50 + +--- # mail 邮件发送 +mail: + enabled: false + host: smtp.163.com + port: 465 + # 是否需要用户名密码验证 + auth: true + # 发送方,遵循RFC-822标准 + from: xxx@163.com + # 用户名(注意:如果使用foxmail邮箱,此处user为qq号) + user: xxx@163.com + # 密码(注意,某些邮箱需要为SMTP服务单独设置密码,详情查看相关帮助) + pass: xxxxxxxxxx + # 使用 STARTTLS安全连接,STARTTLS是对纯文本通信协议的扩展。 + starttlsEnable: true + # 使用SSL安全连接 + sslEnable: true + # SMTP超时时长,单位毫秒,缺省值不超时 + timeout: 0 + # Socket连接超时值,单位毫秒,缺省值不超时 + connectionTimeout: 0 + +--- # sms 短信 支持 阿里云 腾讯云 云片 等等各式各样的短信服务商 +# https://sms4j.com/doc3/ 差异配置文档地址 支持单厂商多配置,可以配置多个同时使用 +sms: + # 配置源类型用于标定配置来源(interface,yaml) + config-type: yaml + # 用于标定yml中的配置是否开启短信拦截,接口配置不受此限制 + restricted: true + # 短信拦截限制单手机号每分钟最大发送,只对开启了拦截的配置有效 + minute-max: 1 + # 短信拦截限制单手机号每日最大发送量,只对开启了拦截的配置有效 + account-max: 30 + # 以下配置来自于 org.dromara.sms4j.provider.config.BaseConfig类中 + blends: + # 唯一ID 用于发送短信寻找具体配置 随便定义别用中文即可 + # 可以同时存在两个相同厂商 例如: ali1 ali2 两个不同的阿里短信账号 也可用于区分租户 + config1: + # 框架定义的厂商名称标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分 + supplier: alibaba + # 有些称为accessKey有些称之为apiKey,也有称为sdkKey或者appId。 + access-key-id: 您的accessKey + # 称为accessSecret有些称之为apiSecret + access-key-secret: 您的accessKeySecret + signature: 您的短信签名 + sdk-app-id: 您的sdkAppId + config2: + # 厂商标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分 + supplier: tencent + access-key-id: 您的accessKey + access-key-secret: 您的accessKeySecret + signature: 您的短信签名 + sdk-app-id: 您的sdkAppId + +--- # 三方授权 +justauth: + # 前端外网访问地址 + address: http://localhost:80 + type: + maxkey: + # maxkey 服务器地址 + # 注意 如下均配置均不需要修改 maxkey 已经内置好了数据 + server-url: http://sso.maxkey.top + client-id: 876892492581044224 + client-secret: x1Y5MTMwNzIwMjMxNTM4NDc3Mzche8 + redirect-uri: ${justauth.address}/social-callback?source=maxkey + topiam: + # topiam 服务器地址 + server-url: http://127.0.0.1:1989/api/v1/authorize/y0q************spq***********8ol + client-id: 449c4*********937************759 + client-secret: ac7***********1e0************28d + redirect-uri: ${justauth.address}/social-callback?source=topiam + scopes: [ openid, email, phone, profile ] + qq: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=qq + union-id: false + weibo: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=weibo + gitee: + client-id: 91436b7940090d09c72c7daf85b959cfd5f215d67eea73acbf61b6b590751a98 + client-secret: 02c6fcfd70342980cd8dd2f2c06c1a350645d76c754d7a264c4e125f9ba915ac + redirect-uri: ${justauth.address}/social-callback?source=gitee + dingtalk: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=dingtalk + baidu: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=baidu + csdn: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=csdn + coding: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=coding + coding-group-name: xx + oschina: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=oschina + alipay_wallet: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=alipay_wallet + alipay-public-key: MIIB**************DAQAB + wechat_open: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=wechat_open + wechat_mp: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=wechat_mp + wechat_enterprise: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=wechat_enterprise + agent-id: 1000002 + gitlab: + client-id: 10**********6 + client-secret: 1f7d08**********5b7**********29e + redirect-uri: ${justauth.address}/social-callback?source=gitlab +#elasticsearch: +# # es host ip 地址(集群),多个以","间隔 +# uris: localhost:9200 +# username: elastic +# password: 123456789 +# # es 请求方式 +# scheme: http +# # es 连接超时时间(ms) +# connectTimeOut: 1000 +# # es socket 连接超时时间(ms) +# socketTimeOut: 30000 +# # es 请求超时时间(ms) +# connectionRequestTimeOut: 500 +# # es 最大连接数 +# maxConnectNum: 100 +# # es 每个路由的最大连接数 +# maxConnectNumPerRoute: 100 +chat: + # 聊天机器人配置 + filePath: /usr/app/tempFile + chatUrl: http://183.136.156.2:50003 diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 5d94bef..c24d425 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -22,7 +22,7 @@ captcha: # 开发环境配置 server: # 服务器的HTTP端口,默认为8080 - port: 8080 +# port: 8080 servlet: # 应用的访问路径 context-path: / @@ -70,14 +70,15 @@ spring: # 国际化资源文件路径 basename: i18n/messages profiles: - active: @profiles.active@ + #@profiles.active@ + active: dev # 文件上传 servlet: multipart: # 单个文件大小 - max-file-size: 10MB + max-file-size: 1000MB # 设置总上传的文件大小 - max-request-size: 20MB + max-request-size: 1000MB mvc: # 设置静态资源路径 防止所有请求都去查静态资源 static-path-pattern: /static/** diff --git a/ruoyi-admin/src/test/java/org/dromara/test/TagUnitTest.java b/ruoyi-admin/src/test/java/org/dromara/test/TagUnitTest.java index b50afa6..70bb5cf 100644 --- a/ruoyi-admin/src/test/java/org/dromara/test/TagUnitTest.java +++ b/ruoyi-admin/src/test/java/org/dromara/test/TagUnitTest.java @@ -1,8 +1,30 @@ package org.dromara.test; +import org.apache.poi.hwpf.HWPFDocument; +import org.apache.poi.hwpf.converter.PicturesManager; +import org.apache.poi.hwpf.converter.WordToHtmlConverter; +import org.apache.poi.hwpf.usermodel.PictureType; + +import org.apache.poi.xwpf.converter.xhtml.XHTMLConverter; +import org.apache.poi.xwpf.converter.xhtml.XHTMLOptions; +import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.w3c.dom.Document; + +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import java.io.*; import org.junit.jupiter.api.*; import org.springframework.boot.test.context.SpringBootTest; + +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FileInputStream; + /** * 标签单元测试案例 * @@ -15,40 +37,109 @@ public class TagUnitTest { @Tag("dev") @DisplayName("测试 @Tag dev") @Test - public void testTagDev() { - System.out.println("dev"); - } + public void testTagDev() throws Exception { + String inputFilePath="C:\\Users\\gy051\\Desktop\\1223.doc"; + String outputFilePath="D:\\JPG\\test.html"; + InputStream is = new FileInputStream(inputFilePath); +// InputStream is = FileHelper.convertWordToUTF8Stream(inputFilePath); + System.out.println("outputFilePath:"+outputFilePath); + HWPFDocument wordDocument = new HWPFDocument(is); + WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument()); + String rootPath = "D:\\JPG\\"; + final int[] fileIndex = {0}; + wordToHtmlConverter.setPicturesManager(new PicturesManager() { - @Tag("prod") - @DisplayName("测试 @Tag prod") - @Test - public void testTagProd() { - System.out.println("prod"); - } + @Override + public String savePicture(byte[] bytes, PictureType pictureType, String s, float v, float v1) { + fileIndex[0]++; + File file = new File(rootPath + fileIndex[0]+".png"); + try { + FileOutputStream out = new FileOutputStream(file); + out.write(bytes); + out.close(); + } catch (Exception e) { + e.printStackTrace(); + } + return fileIndex[0]+".png"; // 返回图片的相对路径或者URL + } - @Tag("local") - @DisplayName("测试 @Tag local") - @Test - public void testTagLocal() { - System.out.println("local"); - } - @Tag("exclude") - @DisplayName("测试 @Tag exclude") - @Test - public void testTagExclude() { - System.out.println("exclude"); - } + }); + wordToHtmlConverter.processDocument(wordDocument); + Document htmlDocument = wordToHtmlConverter.getDocument(); - @BeforeEach - public void testBeforeEach() { - System.out.println("@BeforeEach =================="); - } + // 将Document转换为XHTML + StringWriter writer = new StringWriter(); + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + Transformer transformer = transformerFactory.newTransformer(); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + transformer.setOutputProperty(OutputKeys.METHOD, "html"); + transformer.transform(new DOMSource(htmlDocument), new StreamResult(writer)); +// 自定义处理标题 +// W3CDocument w3cDocument = converter.getDocument(); +// Range range = hwpfDocument.getRange(); +// +// for (int i = 0; i < range.numParagraphs(); i++) { +// ParagraphProperties pp = range.getParagraph(i).getParagraphProperties(); +// if (pp != null && pp.getParaStyleIndex() >= 0) { +// String styleName = hwpfDocument.getStyleSheet().getParagraphStyle(pp.getParaStyleIndex()).getName(); +// // 判断标题样式并转换为对应的 HTML 标签 +// if (styleName.startsWith("Heading")) { +// int headingLevel = Character.getNumericValue(styleName.charAt(7)); +// // 这里只处理 H1 到 H6 +// if (headingLevel >= 1 && headingLevel <= 6) { +// // 你可以将段落内容直接插入到 HTML 中,适当修改格式 +// String headingTag = "h" + headingLevel; +// writer.append("<").append(headingTag).append(">") +// .append(range.getParagraph(i).text().trim()) +// .append(""); +// } +// } else { +// writer.append("

").append(range.getParagraph(i).text().trim()).append("

"); +// } +// } +// } + // 输出 HTML 字符串 + String htmlString = writer.getBuffer().toString(); + // 将 HTML 字符串写入文件 + FileOutputStream out = new FileOutputStream(outputFilePath); + byte[] bytes = htmlString.getBytes("UTF-8"); + out.write(bytes); + out.close(); - @AfterEach - public void testAfterEach() { - System.out.println("@AfterEach =================="); } +// +// @Tag("prod") +// @DisplayName("测试 @Tag prod") +// @Test +// public void testTagProd() { +// System.out.println("prod"); +// } +// +// @Tag("local") +// @DisplayName("测试 @Tag local") +// @Test +// public void testTagLocal() { +// System.out.println("local"); +// } +// +// @Tag("exclude") +// @DisplayName("测试 @Tag exclude") +// @Test +// public void testTagExclude() { +// System.out.println("exclude"); +// } +// +// @BeforeEach +// public void testBeforeEach() { +// System.out.println("@BeforeEach =================="); +// } +// +// @AfterEach +// public void testAfterEach() { +// System.out.println("@AfterEach =================="); +// } +// } diff --git a/ruoyi-common/ruoyi-common-sse/pom.xml b/ruoyi-common/ruoyi-common-sse/pom.xml index ae44c98..efe7dee 100644 --- a/ruoyi-common/ruoyi-common-sse/pom.xml +++ b/ruoyi-common/ruoyi-common-sse/pom.xml @@ -32,5 +32,17 @@ org.dromara ruoyi-common-json + + com.squareup.okhttp3 + okhttp + + + com.squareup.okhttp3 + okhttp-sse + + + com.alibaba + fastjson + diff --git a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/dto/ChatGlmDto.java b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/dto/ChatGlmDto.java new file mode 100644 index 0000000..db2ae8c --- /dev/null +++ b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/dto/ChatGlmDto.java @@ -0,0 +1,21 @@ +package org.dromara.common.sse.dto; + +import lombok.Data; + +/** + * Created by WeiRan on 2023.03.20 19:19 + */ +@Data +public class ChatGlmDto { + + private String messageId; + + private Object context; + + private String requestTaskNo; + + private boolean incremental = true; + + private boolean notSensitive = true; + +} diff --git a/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/utils/ExecuteSSEUtil.java b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/utils/ExecuteSSEUtil.java new file mode 100644 index 0000000..ecdebfd --- /dev/null +++ b/ruoyi-common/ruoyi-common-sse/src/main/java/org/dromara/common/sse/utils/ExecuteSSEUtil.java @@ -0,0 +1,33 @@ +package org.dromara.common.sse.utils; + +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.sse.EventSource; +import okhttp3.sse.EventSources; +import org.dromara.common.sse.listener.SSEListener; + +import java.util.concurrent.TimeUnit; + +public class ExecuteSSEUtil { + private static OkHttpClient okHttpClient = new OkHttpClient.Builder()//构建器 + .connectTimeout(600, TimeUnit.SECONDS)//连接超时 + .writeTimeout(600, TimeUnit.SECONDS)//写入超时 + .readTimeout(600, TimeUnit.SECONDS)//读取超时 + .build(); + + + public static void executeSSE(String url, SSEListener eventSourceListener, String chatGlm) throws Exception { + RequestBody formBody = RequestBody.create(chatGlm, MediaType.parse("application/json; charset=utf-8")); + Request.Builder requestBuilder = new Request.Builder(); + Request request = requestBuilder.url(url).get().build(); + okHttpClient.dispatcher().setMaxRequestsPerHost(200); + okHttpClient.dispatcher().setMaxRequests(200); + EventSource.Factory factory = EventSources.createFactory(okHttpClient); + //创建事件 + factory.newEventSource(request, eventSourceListener); + eventSourceListener.getCountDownLatch().await(); + } + +} diff --git a/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-dev.yml b/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-dev.yml index cbe40be..5f63dcf 100644 --- a/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-dev.yml +++ b/ruoyi-extend/ruoyi-snailjob-server/src/main/resources/application-dev.yml @@ -2,7 +2,7 @@ spring: datasource: type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true + url: jdbc:mysql://localhost:3306/snail_job?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true username: root password: root hikari: diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysOssController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysOssController.java index 73ada3b..1decd37 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysOssController.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/system/SysOssController.java @@ -66,7 +66,7 @@ public class SysOssController extends BaseController { * * @param file 文件 */ - @SaCheckPermission("system:oss:upload") +// @SaCheckPermission("system:oss:upload") @Log(title = "OSS对象存储", businessType = BusinessType.INSERT) @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public R upload(@RequestPart("file") MultipartFile file) { diff --git a/script/sql/snail_job.sql b/script/sql/snail_job.sql index c3aa760..fb427b3 100644 --- a/script/sql/snail_job.sql +++ b/script/sql/snail_job.sql @@ -39,7 +39,7 @@ CREATE TABLE `sj_group_config` AUTO_INCREMENT = 0 DEFAULT CHARSET = utf8mb4 COMMENT ='组配置'; -INSERT INTO `sj_group_config` VALUES (1, 'dev', 'ruoyi_group', '', 'SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT', 1, 1, 0, 1, 1, 4, now(), now()); +INSERT INTO `sj_group_config` VALUES (1, 'dev', 'guoyanGroup', '', 'SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT', 1, 1, 0, 1, 1, 4, now(), now()); CREATE TABLE `sj_notify_config` ( diff --git a/zaojiaManagement/zaojia-productManagement/pom.xml b/zaojiaManagement/zaojia-productManagement/pom.xml index a0d0a3f..8b0dd9d 100644 --- a/zaojiaManagement/zaojia-productManagement/pom.xml +++ b/zaojiaManagement/zaojia-productManagement/pom.xml @@ -16,68 +16,92 @@ 产品管理模块 + org.dromara - ruoyi-common-websocket + ruoyi-common-core org.dromara - ruoyi-common-mail + ruoyi-common-doc org.dromara - ruoyi-common-sms + ruoyi-common-mybatis org.dromara - ruoyi-common-mybatis + ruoyi-common-translation + + org.dromara - ruoyi-common-web + ruoyi-common-oss + org.dromara ruoyi-common-log - - org.dromara - ruoyi-common-idempotent - + + org.dromara ruoyi-common-excel + + org.dromara - ruoyi-common-translation + ruoyi-common-sms + org.dromara ruoyi-common-tenant + org.dromara ruoyi-common-security + + + org.dromara + ruoyi-common-web + + + + org.dromara + ruoyi-common-idempotent + + + + org.dromara + ruoyi-common-sensitive + + org.dromara ruoyi-common-encrypt + org.dromara - ruoyi-common-excel + ruoyi-common-websocket + org.dromara - guoyan-common-elasticsearch + ruoyi-common-sse - com.squareup.okhttp3 - okhttp + org.dromara + ruoyi-system 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 new file mode 100644 index 0000000..b65dd18 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/DocAiController.java @@ -0,0 +1,133 @@ +package org.dromara.productManagement.controller; + +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; +import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.productManagement.service.IDocAiService; +import org.springframework.http.MediaType; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +/** + * DocAiController类,处理与文档AI相关的HTTP请求。 + */ +@RequiredArgsConstructor +@RestController +@RequestMapping("/productManagement/docAi1") +@Validated +public class DocAiController { + + private final IDocAiService docAiService; + + + /** + * SSE调用接口 + * @param originalFilename 原始文件名 + * @param context 请求上下文 + * @param rp HttpServletResponse对象 + * @throws Exception 异常 + */ + @PostMapping(value = "/sse-invoke", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = "text/event-stream;charset=UTF-8") + public void sse(@RequestPart(name = "originalFilename") String originalFilename, @RequestPart("content") String context, HttpServletResponse rp) throws Exception { + docAiService.executeSSE("/stream", originalFilename, context, rp); + } + + /** + * 检查地名接口 + * @param originalFilename 原始文件名 + * @param context 请求上下文 + * @param rp HttpServletResponse对象 + * @throws Exception 异常 + */ + @PostMapping(value = "/sse/checkPlaceName", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = "text/event-stream;charset=UTF-8") + public void checkPlaceName(@RequestPart(name = "originalFilename") String originalFilename, @RequestPart("content") String context, HttpServletResponse rp) throws Exception { + docAiService.executeSSE("/sse/checkPlaceName", originalFilename, context, rp); + } + + /** + * 检查重复文本接口 + * @param originalFilename 原始文件名 + * @param context 请求上下文 + * @param rp HttpServletResponse对象 + * @throws Exception 异常 + */ + @PostMapping(value = "/sse/checkRepeatText", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = "text/event-stream;charset=UTF-8") + public void checkRepeatText(@RequestPart(name = "originalFilename") String originalFilename, @RequestPart("content") String context, HttpServletResponse rp) throws Exception { + docAiService.executeSSE("/sse/checkRepeatText", originalFilename, context, rp); + } + + /** + * 检查公司名称接口 + * @param originalFilename 原始文件名 + * @param context 请求上下文 + * @param rp HttpServletResponse对象 + * @throws Exception 异常 + */ + @PostMapping(value = "/sse/checkCompanyName", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = "text/event-stream;charset=UTF-8") + public void checkCompanyName(@RequestPart(name = "originalFilename") String originalFilename, @RequestPart("content") String context, HttpServletResponse rp) throws Exception { + docAiService.executeSSE("/sse/checkCompanyName", originalFilename, context, rp); + } + + /** + * 检查文档错误接口 + * @param originalFilename 原始文件名 + * @param context 请求上下文 + * @param rp HttpServletResponse对象 + * @throws Exception 异常 + */ + @PostMapping(value = "/sse/checkDocumentError", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = "text/event-stream;charset=UTF-8") + public void checkDocumentError(@RequestPart(name = "originalFilename") String originalFilename, @RequestPart("content") String context, HttpServletResponse rp) throws Exception { + docAiService.executeSSE("/sse/checkDocumentErrorWeb", originalFilename, context, rp); + } + + /** + * 检查标题名称接口 + * @param originalFilename 原始文件名 + * @param context 请求上下文 + * @param rp HttpServletResponse对象 + * @throws Exception 异常 + */ + @PostMapping(value = "/sse/checkTitleName", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = "text/event-stream;charset=UTF-8") + public void checkTitleName(@RequestPart(name = "originalFilename") String originalFilename, @RequestPart("content") String context, HttpServletResponse rp) throws Exception { + docAiService.executeSSE("/sse/checkTitleName", originalFilename, context, rp); + } + + /** + * 文档评估接口 + * @param originalFilename 原始文件名 + * @param context 请求上下文 + * @param rp HttpServletResponse对象 + * @throws Exception 异常 + */ + @PostMapping(value = "/sse/documentEvaluate", consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = "text/event-stream;charset=UTF-8") + public void documentEvaluate(@RequestPart(name = "originalFilename", required = false) String originalFilename, @RequestPart("content") String context, HttpServletResponse rp) throws Exception { + docAiService.executeSSE("/sse/documentEvaluate", originalFilename, context, rp); + } + + /** + * 获取日志接口 + * @param rp HttpServletResponse对象 + * @throws Exception 异常 + */ + @GetMapping(value = "/sse/getLog", produces = "text/event-stream;charset=UTF-8") + public void getLog(HttpServletResponse rp) throws Exception { + docAiService.getLog(rp); + } + + /** + * 上传文件接口 + * @param file 上传的文件 + * @param originalFilename 原始文件名 + * @return 上传结果 + * @throws IOException IO异常 + * @throws InterruptedException 中断异常 + */ + @PostMapping(value = "/sse/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public R uploadFile(@RequestPart(name = "fileInfo") MultipartFile file, @RequestPart(name = "originalFilename") String originalFilename) throws IOException, InterruptedException { + return docAiService.uploadFile(file, originalFilename); + } +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/DocumentTaskResultsController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/DocumentTaskResultsController.java new file mode 100644 index 0000000..e8f42d2 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/DocumentTaskResultsController.java @@ -0,0 +1,115 @@ +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.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.DocumentTaskResultsVo; +import org.dromara.productManagement.domain.bo.DocumentTaskResultsBo; +import org.dromara.productManagement.service.IDocumentTaskResultsService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 文档任务结果 + * + * @author Lion Li + * @date 2024-10-23 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/productManagement/DocumentTaskResults") +public class DocumentTaskResultsController extends BaseController { + + private final IDocumentTaskResultsService documentTaskResultsService; + + /** + * 查询文档任务结果列表 + */ +// @SaCheckPermission("productManagement:DocumentTaskResults:list") + @GetMapping("/list") + public TableDataInfo list(DocumentTaskResultsBo bo, PageQuery pageQuery) { + return documentTaskResultsService.queryPageList(bo, pageQuery); + } + + /** + * 导出文档任务结果列表 + */ +// @SaCheckPermission("productManagement:DocumentTaskResults:export") + @Log(title = "文档任务结果", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(DocumentTaskResultsBo bo, HttpServletResponse response) { + List list = documentTaskResultsService.queryList(bo); + ExcelUtil.exportExcel(list, "文档任务结果", DocumentTaskResultsVo.class, response); + } + + /** + * 获取文档任务结果详细信息 + * + * @param id 主键 + */ +// @SaCheckPermission("productManagement:DocumentTaskResults:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable String id) { + return R.ok(documentTaskResultsService.queryById(id)); + } + /** + * 根据任务id获取文档任务结果详细信息 + * + * @param id 任务id + */ +// @SaCheckPermission("productManagement:DocumentTaskResults:query") + @GetMapping("/task/{id}") + public R getInfobyTaskId(@NotNull(message = "主键不能为空") + @PathVariable String id) { + return R.ok(documentTaskResultsService.queryByTaskId(id)); + } + /** + * 新增文档任务结果 + */ +// @SaCheckPermission("productManagement:DocumentTaskResults:add") + @Log(title = "文档任务结果", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody DocumentTaskResultsBo bo) { + return toAjax(documentTaskResultsService.insertByBo(bo)); + } + + /** + * 修改文档任务结果 + */ +// @SaCheckPermission("productManagement:DocumentTaskResults:edit") + @Log(title = "文档任务结果", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody DocumentTaskResultsBo bo) { + return toAjax(documentTaskResultsService.updateByBo(bo)); + } + + /** + * 删除文档任务结果 + * + * @param ids 主键串 + */ +// @SaCheckPermission("productManagement:DocumentTaskResults:remove") + @Log(title = "文档任务结果", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable String[] ids) { + return toAjax(documentTaskResultsService.deleteWithValidByIds(List.of(ids), true)); + } +} 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 new file mode 100644 index 0000000..41ed3c4 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/DocumentTasksController.java @@ -0,0 +1,112 @@ +package org.dromara.productManagement.controller; + +import java.io.IOException; +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.system.service.ISysOssService; +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.DocumentTasksVo; +import org.dromara.productManagement.domain.bo.DocumentTasksBo; +import org.dromara.productManagement.service.IDocumentTasksService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 文档任务 + * + * @author Lion Li + * @date 2024-10-22 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/productManagement/DocumentTasks") +public class DocumentTasksController extends BaseController { + + private final IDocumentTasksService documentTasksService; + + + /** + * 查询文档任务列表 + */ +// @SaCheckPermission("productManagement:DocumentTasks:list") + @GetMapping("/list") + public TableDataInfo list(DocumentTasksBo bo, PageQuery pageQuery) { + return documentTasksService.queryPageList(bo, pageQuery); + } + + /** + * 导出文档任务列表 + */ +// @SaCheckPermission("productManagement:DocumentTasks:export") + @Log(title = "文档任务", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(DocumentTasksBo bo, HttpServletResponse response) { + List list = documentTasksService.queryList(bo); + ExcelUtil.exportExcel(list, "文档任务", DocumentTasksVo.class, response); + } + + /** + * 获取文档任务详细信息 + * + * @param id 主键 + */ +// @SaCheckPermission("productManagement:DocumentTasks:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(documentTasksService.queryById(id)); + } + + /** + * 新增文档任务 + */ +// @SaCheckPermission("productManagement:DocumentTasks:add") + @Log(title = "文档任务", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody DocumentTasksBo bo) throws IOException, InterruptedException { + return toAjax(documentTasksService.insertByBo(bo)); + } + + /** + * 修改文档任务 + */ +// @SaCheckPermission("productManagement:DocumentTasks:edit") + @Log(title = "文档任务", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody DocumentTasksBo bo) { + return toAjax(documentTasksService.updateByBo(bo)); + } + + /** + * 删除文档任务 + * + * @param ids 主键串 + */ +// @SaCheckPermission("productManagement:DocumentTasks:remove") + @Log(title = "文档任务", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(documentTasksService.deleteWithValidByIds(List.of(ids), true)); + } + @PutMapping("/stopTask/{id}") + public R stop(@NotNull(message = "主键不能为空") @PathVariable Long id) { + return toAjax(documentTasksService.stopTask(id)); + } +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/DocumentTasksPermissionsController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/DocumentTasksPermissionsController.java new file mode 100644 index 0000000..ec8564a --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/DocumentTasksPermissionsController.java @@ -0,0 +1,125 @@ +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.dromara.system.domain.vo.SysUserVo; +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.DocumentTasksPermissionsVo; +import org.dromara.productManagement.domain.bo.DocumentTasksPermissionsBo; +import org.dromara.productManagement.service.IDocumentTasksPermissionsService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 文档任务权限 + * + * @author Lion Li + * @date 2024-11-08 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/productManagement/DocumentTasksPermissions") +public class DocumentTasksPermissionsController extends BaseController { + + private final IDocumentTasksPermissionsService documentTasksPermissionsService; + + /** + * 查询文档任务权限列表 + */ + @SaCheckPermission("productManagement:DocumentTasksPermissions:list") + @GetMapping("/list") + public TableDataInfo list(DocumentTasksPermissionsBo bo, PageQuery pageQuery) { + return documentTasksPermissionsService.queryPageList(bo, pageQuery); + } + + /** + * 导出文档任务权限列表 + */ + @SaCheckPermission("productManagement:DocumentTasksPermissions:export") + @Log(title = "文档任务权限", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(DocumentTasksPermissionsBo bo, HttpServletResponse response) { + List list = documentTasksPermissionsService.queryList(bo); + ExcelUtil.exportExcel(list, "文档任务权限", DocumentTasksPermissionsVo.class, response); + } + + /** + * 获取文档任务权限详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("productManagement:DocumentTasksPermissions:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable String id) { + return R.ok(documentTasksPermissionsService.queryById(id)); + } + + /** + * 新增文档任务权限 + */ + @SaCheckPermission("productManagement:DocumentTasksPermissions:add") + @Log(title = "文档任务权限", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody DocumentTasksPermissionsBo bo) { + return toAjax(documentTasksPermissionsService.insertByBo(bo)); + } + + /** + * 修改文档任务权限 + */ + @SaCheckPermission("productManagement:DocumentTasksPermissions:edit") + @Log(title = "文档任务权限", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody DocumentTasksPermissionsBo bo) { + return toAjax(documentTasksPermissionsService.updateByBo(bo)); + } + + /** + * 删除文档任务权限 + * + * @param ids 主键串 + */ + @SaCheckPermission("productManagement:DocumentTasksPermissions:remove") + @Log(title = "文档任务权限", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable String[] ids) { + return toAjax(documentTasksPermissionsService.deleteWithValidByIds(List.of(ids), true)); + } + /** + * 获取所有用户信息 + */ + @GetMapping("/getUsersAll") + public R> getUsersAll() { + List list = documentTasksPermissionsService.getUsersAll(); + return R.ok(list); + } + + /** + * 获取文档任务权限详细信息根据用户id + */ + @GetMapping("/getTasksPermissionsByUserId") + public R getTasksPermissionsByUserId() { + Long userId = LoginHelper.getUserId(); + DocumentTasksPermissionsVo documentTasksPermissionsVo = documentTasksPermissionsService.getTasksPermissionsByUserId(userId); + return R.ok(documentTasksPermissionsVo); + } +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/DocumentTasksPermissionsDetailController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/DocumentTasksPermissionsDetailController.java new file mode 100644 index 0000000..3daa15b --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/DocumentTasksPermissionsDetailController.java @@ -0,0 +1,105 @@ +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.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.DocumentTasksPermissionsDetailVo; +import org.dromara.productManagement.domain.bo.DocumentTasksPermissionsDetailBo; +import org.dromara.productManagement.service.IDocumentTasksPermissionsDetailService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 文档任务权限详情 + * + * @author Lion Li + * @date 2024-11-11 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/productManagement/DocumentTasksPermissionsDetail") +public class DocumentTasksPermissionsDetailController extends BaseController { + + private final IDocumentTasksPermissionsDetailService documentTasksPermissionsDetailService; + + /** + * 查询文档任务权限详情列表 + */ + @SaCheckPermission("productManagement:DocumentTasksPermissionsDetail:list") + @GetMapping("/list") + public TableDataInfo list(DocumentTasksPermissionsDetailBo bo, PageQuery pageQuery) { + return documentTasksPermissionsDetailService.queryPageList(bo, pageQuery); + } + + /** + * 导出文档任务权限详情列表 + */ + @SaCheckPermission("productManagement:DocumentTasksPermissionsDetail:export") + @Log(title = "文档任务权限详情", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(DocumentTasksPermissionsDetailBo bo, HttpServletResponse response) { + List list = documentTasksPermissionsDetailService.queryList(bo); + ExcelUtil.exportExcel(list, "文档任务权限详情", DocumentTasksPermissionsDetailVo.class, response); + } + + /** + * 获取文档任务权限详情详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("productManagement:DocumentTasksPermissionsDetail:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable String id) { + return R.ok(documentTasksPermissionsDetailService.queryById(id)); + } + + /** + * 新增文档任务权限详情 + */ + @SaCheckPermission("productManagement:DocumentTasksPermissionsDetail:add") + @Log(title = "文档任务权限详情", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody DocumentTasksPermissionsDetailBo bo) { + return toAjax(documentTasksPermissionsDetailService.insertByBo(bo)); + } + + /** + * 修改文档任务权限详情 + */ + @SaCheckPermission("productManagement:DocumentTasksPermissionsDetail:edit") + @Log(title = "文档任务权限详情", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody DocumentTasksPermissionsDetailBo bo) { + return toAjax(documentTasksPermissionsDetailService.updateByBo(bo)); + } + + /** + * 删除文档任务权限详情 + * + * @param ids 主键串 + */ + @SaCheckPermission("productManagement:DocumentTasksPermissionsDetail:remove") + @Log(title = "文档任务权限详情", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable String[] ids) { + return toAjax(documentTasksPermissionsDetailService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/FileReadInfoController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/FileReadInfoController.java new file mode 100644 index 0000000..e6e5465 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/FileReadInfoController.java @@ -0,0 +1,125 @@ +package org.dromara.productManagement.controller; + +import java.util.List; + +import cn.hutool.core.util.ObjectUtil; +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.common.excel.core.ExcelResult; +import org.springframework.http.MediaType; +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.FileReadInfoVo; +import org.dromara.productManagement.domain.bo.FileReadInfoBo; +import org.dromara.productManagement.service.IFileReadInfoService; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; + +/** + * 文件处理信息表 + * + * @author Lion Li + * @date 2024-09-20 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/productManagement/fileReadInfo") +public class FileReadInfoController extends BaseController { + + private final IFileReadInfoService fileReadInfoService; + + /** + * 查询文件处理信息表列表 + */ + @SaCheckPermission("productManagement:fileReadInfo:list") + @GetMapping("/list") + public TableDataInfo list(FileReadInfoBo bo, PageQuery pageQuery) { + return fileReadInfoService.queryPageList(bo, pageQuery); + } + + /** + * 导出文件处理信息表列表 + */ + @SaCheckPermission("productManagement:fileReadInfo:export") + @Log(title = "文件处理信息表", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(FileReadInfoBo bo, HttpServletResponse response) { + List list = fileReadInfoService.queryList(bo); + ExcelUtil.exportExcel(list, "文件处理信息表", FileReadInfoVo.class, response); + } + + /** + * 获取文件处理信息表详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("productManagement:fileReadInfo:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(fileReadInfoService.queryById(id)); + } + + /** + * 新增文件处理信息表 + */ + @SaCheckPermission("productManagement:fileReadInfo:add") + @Log(title = "文件处理信息表", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody FileReadInfoBo bo) { + return toAjax(fileReadInfoService.insertByBo(bo)); + } + + /** + * 修改文件处理信息表 + */ + @SaCheckPermission("productManagement:fileReadInfo:edit") + @Log(title = "文件处理信息表", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody FileReadInfoBo bo) { + return toAjax(fileReadInfoService.updateByBo(bo)); + } + + /** + * 删除文件处理信息表 + * + * @param ids 主键串 + */ + @SaCheckPermission("productManagement:fileReadInfo:remove") + @Log(title = "文件处理信息表", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(fileReadInfoService.deleteWithValidByIds(List.of(ids), true)); + } + /** + * 导入数据 + * + * @param file 导入文件 + * @param updateSupport 是否更新已存在数据 + */ + @Log(title = "文件处理信息表", businessType = BusinessType.IMPORT) + @SaCheckPermission("productManagement:fileReadInfo:import") + @PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public R importData(@RequestPart("file") MultipartFile file,@RequestPart("content") String context) throws Exception { + if (ObjectUtil.isNull(file)) { + return R.fail("上传文件不能为空"); + } + fileReadInfoService.importData(file,context); + return R.ok(); + } +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/Qwen72bController.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/Qwen72bController.java index 060ec75..c3f79bb 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/Qwen72bController.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/controller/Qwen72bController.java @@ -2,31 +2,17 @@ package org.dromara.productManagement.controller; import java.io.File; import java.io.IOException; -import java.util.HashMap; -import java.util.List; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; - import cn.hutool.core.io.FileUtil; -import cn.hutool.core.util.IdUtil; -import com.aizuda.snailjob.client.job.core.annotation.JobExecutor; -import com.aizuda.snailjob.client.job.core.dto.JobArgs; -import com.aizuda.snailjob.client.model.ExecuteResult; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; + import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; - -import cn.dev33.satoken.annotation.SaCheckPermission; import okhttp3.*; import okhttp3.RequestBody; -import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.sse.dto.ChatGlmDto; import org.dromara.common.sse.listener.SSEListener; import org.dromara.common.sse.utils.ExecuteSSEUtil; -import org.dromara.system.domain.vo.SysOssVo; import org.dromara.system.service.ISysOssService; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; @@ -49,13 +35,12 @@ import org.springframework.web.multipart.MultipartFile; @Validated @RequiredArgsConstructor @RestController -@RequestMapping("/productManagement/supplierInformation") +@RequestMapping("/productManagement/docAi") public class Qwen72bController extends BaseController { @Value("${chat.filePath}") private String chatFilePath; @Value("${chat.chatUrl}") private String chatUrl; - private final ISysOssService ossService; private final OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(300, TimeUnit.SECONDS)//连接超时(单位:秒) @@ -64,493 +49,181 @@ public class Qwen72bController extends BaseController { .readTimeout(600, TimeUnit.SECONDS)//读取超时(单位:秒) .writeTimeout(600, TimeUnit.SECONDS)//写入超时(单位:秒) .build(); - @SaCheckPermission("productManagement:supplierInformation:list") - @PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - public R list111(@RequestPart("file") MultipartFile file,String content) throws IOException, ExecutionException, InterruptedException { - // 使用Hutool的FileUtil将MultipartFile保存到目标文件 - String fileName= uploadFile(file); -// -// String result = ""; -// String infozong = ""; - - -// CompletableFuture checkPlaceName = fetchDataAsync("http://localhost:5000/checkPlaceName/"+fileName); -// CompletableFuture checkRepeatText = fetchDataAsync("http://localhost:5000/checkRepeatText/"+fileName); -// CompletableFuture checkCompanyName = fetchDataAsync("http://localhost:5000/checkCompanyName/"+fileName); -// -// CompletableFuture.allOf(checkPlaceName, checkRepeatText, checkCompanyName) -// .thenAccept(ignore -> { -// try { -// String checkPlaceNameData = checkPlaceName.get(); -// String checkRepeatTextData = checkRepeatText.get(); -// String checkCompanyNameData = checkCompanyName.get(); -// List entity =null; -// if(StringUtils.isNotBlank(checkPlaceNameData)){ -// ObjectMapper objectMapper = new ObjectMapper(); -// entity = objectMapper.readValue(result, new TypeReference>() {}); -// } -// // 在这里处理所有数据 -// System.out.println("Data1: " + checkPlaceNameData); -// System.out.println("Data2: " + checkRepeatTextData); -// System.out.println("Data3: " + checkCompanyNameData); -// } catch (Exception e) { -// e.printStackTrace(); -// } -// }) -// .exceptionally(ex -> { -// ex.printStackTrace(); -// return null; -// }); - //同时访问三个接口 -// CompletableFuture checkPlaceNameData = fetchDataAsync("http://183.136.156.2:50000/checkPlaceName/"+fileName) -// .thenApply(data -> { -// List entity =null; -// if(StringUtils.isNotBlank(data)){ -// ObjectMapper objectMapper = new ObjectMapper(); -// try { -// entity = objectMapper.readValue(data, new TypeReference>() {}); -// } catch (JsonProcessingException e) { -// throw new RuntimeException(e); -// } -// } -// if(entity==null||entity.size()==0){ -// return "未发现发现异常地名"; -// } -// String info = "发现异常地名:\n"; -// for(HashMap map:entity){ -// String placeName = (String) map.get("placeName"); -// String yuanwen = (String) map.get("yuanwen"); -// info += "原文:"+yuanwen+"\n出现异常地名:"+placeName+"!请注意"+"\n"; -// } -// // 对第一个接口的数据进行处理 -// return info; -// }); -//// -//// CompletableFuture checkRepeatTextData = fetchDataAsync("http://183.136.156.2:50000/checkRepeatText/"+fileName) -//// .thenApply(data -> { -//// // 对第二个接口的数据进行处理 -//// List entity =null; -//// if(StringUtils.isNotBlank(data)){ -//// ObjectMapper objectMapper = new ObjectMapper(); -//// try { -//// entity = objectMapper.readValue(data, new TypeReference>() {}); -//// } catch (JsonProcessingException e) { -//// throw new RuntimeException(e); -//// } -//// } -//// String info = "发现存在相似地方:\n"; -//// -//// if(entity==null||entity.size()==0){ -//// return "未发现原文存在相似地方"; -//// }else{ -//// for(HashMap map:entity){ -//// String yuanwen1 = (String) map.get("yuanwen1"); -//// String yuanwen2 = (String) map.get("yuanwen2"); -//// info += "原文1:"+yuanwen1+"\n原文2:"+yuanwen2+"\n请注意,存在相似"+"\n\n"; -//// } -//// return info; -//// } -//// }); -//// -// CompletableFuture checkCompanyNameData = fetchDataAsync("http://183.136.156.2:50000/checkCompanyName/"+fileName) -// .thenApply(data -> { -// // 对第三个接口的数据进行处理 -// List entity =null; -// if(StringUtils.isNotBlank(data)){ -// ObjectMapper objectMapper = new ObjectMapper(); -// try { -// entity = objectMapper.readValue(data, new TypeReference>() {}); -// } catch (JsonProcessingException e) { -// throw new RuntimeException(e); -// } -// } -// if(entity==null||entity.size()==0){ -// return "未发现异常公司或组织名称"; -// } -// String info = "发现异常公司或组织名称:\n"; -// for(HashMap map:entity){ -// String placeName = (String) map.get("placeName"); -// String yuanwen = (String) map.get("yuanwen"); -// info += "原文:"+yuanwen+"\n异常公司或组织名称:"+placeName+"!请注意"+"\n"; -// } -// // 对第一个接口的数据进行处理 -// return info; -// }); -// CompletableFuture getDocumentErrorData = fetchDataAsync("http://183.136.156.2:50000/getDocumentError/"+fileName) -// .thenApply(data -> { -// // 对第三个接口的数据进行处理 -// List entity =null; -// if(StringUtils.isNotBlank(data)){ -// ObjectMapper objectMapper = new ObjectMapper(); -// try { -// entity = objectMapper.readValue(data, new TypeReference>() {}); -// } catch (JsonProcessingException e) { -// throw new RuntimeException(e); -// } -// } -// if(entity==null||entity.size()==0){ -// return "未发现错别字"; -// } -// String info = "发现错别字:\n"; -// for(HashMap map:entity){ -// String placeName = (String) map.get("placeName"); -// String jianyi = (String) map.get("jianyi"); -// info += "原文:"+placeName+"\n建议:"+jianyi+"\n"; -// } -// // 对第一个接口的数据进行处理 -// return info; -// }); -//// CompletableFuture completableFuture = CompletableFuture.allOf(checkPlaceNameData, checkRepeatTextData, checkCompanyNameData,getDocumentErrorData) -//// .thenApply(ignore -> { -//// try { -//// return checkPlaceNameData.get()+"\n"+checkRepeatTextData.get()+"\n"+checkCompanyNameData.get(); -//// } catch (Exception e) { -//// throw new RuntimeException(e); -//// } -//// }); -// CompletableFuture completableFuture = CompletableFuture.allOf(checkPlaceNameData,checkCompanyNameData,getDocumentErrorData) -// .thenApply(ignore -> { -// try { -// return checkPlaceNameData.get()+"\n"+checkCompanyNameData.get()+"\n"; -// } catch (Exception e) { -// throw new RuntimeException(e); -// } -// }); -// String strings = completableFuture.get(); - CompletableFuture checkPlaceNameData = fetchDataAsync(chatUrl+"/checkPlaceName?filename=" + fileName) - .thenApply(data -> { - List entity = null; - if (StringUtils.isNotBlank(data)) { - ObjectMapper objectMapper = new ObjectMapper(); - try { - entity = objectMapper.readValue(data, new TypeReference>() {}); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } - } - if (entity == null || entity.size() == 0) { - return "未发现发现异常地名"; - } - String info = "发现异常地名:\n"; - for (HashMap map : entity) { - String placeName = (String) map.get("placeName"); - String yuanwen = (String) map.get("yuanwen"); - info += "原文:" + yuanwen + "\n出现异常地名:" + placeName + "!请注意" + "\n"; - } - return info; - }); - - CompletableFuture checkCompanyNameData = checkPlaceNameData - .thenCompose(result -> fetchDataAsync(chatUrl+"/checkCompanyName?filename=" + fileName)) - .thenApply(data -> { - List entity = null; - if (StringUtils.isNotBlank(data)) { - ObjectMapper objectMapper = new ObjectMapper(); - try { - entity = objectMapper.readValue(data, new TypeReference>() {}); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } - } - if (entity == null || entity.size() == 0) { - return "未发现异常公司或组织名称"; - } - String info = "发现异常公司或组织名称:\n"; - for (HashMap map : entity) { - String companyName = (String) map.get("companyName"); - String yuanwen = (String) map.get("yuanwen"); - info += "原文:" + yuanwen + "\n异常公司或组织名称:" + companyName + "!请注意" + "\n"; - } - return info; - }); - CompletableFuture getDocumentErrorData = checkCompanyNameData - .thenCompose(result -> fetchDataAsync(chatUrl+"/getDocumentError?filename=" + fileName)) - .thenApply(data -> { - List entity = null; - if (StringUtils.isNotBlank(data)) { - ObjectMapper objectMapper = new ObjectMapper(); - try { - entity = objectMapper.readValue(data, new TypeReference>() {}); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } - } - if (entity == null || entity.size() == 0) { - return "未发现错别字"; - } - String info = "发现错别字:\n"; - for (HashMap map : entity) { - String placeName = (String) map.get("placeName"); - String jianyi = (String) map.get("jianyi"); - info += "原文:" + placeName + "\n建议:" + jianyi + "\n"; - } - return info; - }); - CompletableFuture checkRepeatTextData = getDocumentErrorData - .thenCompose(result -> fetchDataAsync(chatUrl+"/getDocumentError?filename=" + fileName+"§ionName="+content)) - .thenApply(data -> { - // 对第二个接口的数据进行处理 - List entity =null; - if(StringUtils.isNotBlank(data)){ - ObjectMapper objectMapper = new ObjectMapper(); - try { - entity = objectMapper.readValue(data, new TypeReference>() {}); - } catch (JsonProcessingException e) { - throw new RuntimeException(e); - } - } - String info = "发现存在相似地方:\n"; - - if(entity==null||entity.size()==0){ - return "未发现原文存在相似地方"; - }else{ - for(HashMap map:entity){ - String yuanwen1 = (String) map.get("yuanwen1"); - String yuanwen2 = (String) map.get("yuanwen2"); - info += "原文1:"+yuanwen1+"\n原文2:"+yuanwen2+"\n请注意,存在相似"+"\n\n"; - } - return info; - } - }); - CompletableFuture completableFuture = checkRepeatTextData - .thenApply(result -> { - StringBuilder combinedResult = new StringBuilder(); - try { - combinedResult.append(checkPlaceNameData.get()).append("\n"); - combinedResult.append(checkCompanyNameData.get()).append("\n"); - combinedResult.append(getDocumentErrorData.get()).append("\n"); - combinedResult.append(checkRepeatTextData.get()).append("\n");; - } catch (Exception e) { - throw new RuntimeException(e); - } - return combinedResult.toString(); - }); - - String strings = completableFuture.get(); - return R.ok("ok",strings); - } //对多个请求进行异步处理,并返回CompletableFuture对象,最后通过thenAccept()方法处理结果。 - public CompletableFuture fetchDataAsync(String url) { - CompletableFuture future = new CompletableFuture<>(); - - Request request = new Request.Builder() - .url(url) - .build(); - - client.newCall(request).enqueue(new Callback() { - @Override - public void onFailure(Call call, IOException e) { - future.completeExceptionally(e); - } - - @Override - public void onResponse(Call call, Response response) throws IOException { - if (response.isSuccessful()) { - future.complete(response.body().string()); - } else { - future.completeExceptionally(new IOException("Unexpected code " + response)); - } - } - }); - - return future; - } @PostMapping(value = "/sse-invoke", consumes = MediaType.MULTIPART_FORM_DATA_VALUE,produces = "text/event-stream;charset=UTF-8") - public void sse(@RequestPart(name = "fileInfo", required = false) MultipartFile fileInfo, @RequestPart("content") String context, HttpServletResponse rp) { - try { + public void sse(@RequestPart(name = "originalFilename") String originalFilename, @RequestPart("content") String context, HttpServletResponse rp) throws Exception { // String token = ApiTokenUtil.generateClientToken(API_KEY); - ChatGlmDto chatGlmDto = new ChatGlmDto(); - SSEListener sseListener = new SSEListener(chatGlmDto, rp); - ExecuteSSEUtil.executeSSE(chatUrl+"/stream?context="+context, sseListener, JSON.toJSONString(chatGlmDto)); - } catch (Exception e) { - e.printStackTrace(); - } + ChatGlmDto chatGlmDto = new ChatGlmDto(); + SSEListener sseListener = new SSEListener(chatGlmDto, rp); + ExecuteSSEUtil.executeSSE(chatUrl+"/stream?context="+context, sseListener, JSON.toJSONString(chatGlmDto)); } @PostMapping(value = "/sse/checkPlaceName", consumes = MediaType.MULTIPART_FORM_DATA_VALUE,produces = "text/event-stream;charset=UTF-8") - public void checkPlaceName(@RequestPart(name = "fileInfo", required = false) MultipartFile fileInfo, @RequestPart("content") String context, HttpServletResponse rp) { - try { - String fileName = uploadFile(fileInfo); -// String token = ApiTokenUtil.generateClientToken(API_KEY); - ChatGlmDto chatGlmDto = new ChatGlmDto(); - SSEListener sseListener = new SSEListener(chatGlmDto, rp); - //http://183.136.156.2:50000/see/checkPlaceName?filename="+fileName - ExecuteSSEUtil.executeSSE(chatUrl+"/sse/checkPlaceName?filename="+fileName, sseListener, JSON.toJSONString(chatGlmDto)); - } catch (Exception e) { - e.printStackTrace(); - } + public void checkPlaceName( + @RequestPart(name = "originalFilename") String originalFilename, + @RequestPart("content") String context, HttpServletResponse rp) throws Exception { + + String fileName="uploads/"+originalFilename; + Long userId = LoginHelper.getUserId(); + ChatGlmDto chatGlmDto = new ChatGlmDto(); + SSEListener sseListener = new SSEListener(chatGlmDto, rp); + //http://183.136.156.2:50000/see/checkPlaceName?filename="+fileName + ExecuteSSEUtil.executeSSE(chatUrl+"/sse/checkPlaceName?filename="+fileName+"&userId="+userId, sseListener, JSON.toJSONString(chatGlmDto)); } @PostMapping(value = "/sse/checkRepeatText", consumes = MediaType.MULTIPART_FORM_DATA_VALUE,produces = "text/event-stream;charset=UTF-8") - public void checkRepeatText(@RequestPart(name = "fileInfo", required = false) MultipartFile fileInfo, @RequestPart("content") String context, HttpServletResponse rp) { - try { - String fileName = uploadFile(fileInfo); -// String token = ApiTokenUtil.generateClientToken(API_KEY); - ChatGlmDto chatGlmDto = new ChatGlmDto(); - SSEListener sseListener = new SSEListener(chatGlmDto, rp); - ExecuteSSEUtil.executeSSE(chatUrl+"/sse/checkRepeatText?filename="+fileName, sseListener, JSON.toJSONString(chatGlmDto)); - } catch (Exception e) { - e.printStackTrace(); - } + public void checkRepeatText( + @RequestPart(name = "originalFilename") String originalFilename, + @RequestPart("content") String context, HttpServletResponse rp) throws Exception { + String fileName="uploads/"+originalFilename; + Long userId = LoginHelper.getUserId(); + ChatGlmDto chatGlmDto = new ChatGlmDto(); + SSEListener sseListener = new SSEListener(chatGlmDto, rp); + ExecuteSSEUtil.executeSSE(chatUrl+"/sse/checkRepeatText?filename="+fileName+"&userId="+userId, sseListener, JSON.toJSONString(chatGlmDto)); } @PostMapping(value = "/sse/checkCompanyName", consumes = MediaType.MULTIPART_FORM_DATA_VALUE,produces = "text/event-stream;charset=UTF-8") - public void checkCompanyName(@RequestPart(name = "fileInfo", required = false) MultipartFile fileInfo, @RequestPart("content") String context, HttpServletResponse rp) { - try { - String fileName = uploadFile(fileInfo); -// String token = ApiTokenUtil.generateClientToken(API_KEY); - ChatGlmDto chatGlmDto = new ChatGlmDto(); - SSEListener sseListener = new SSEListener(chatGlmDto, rp); - ExecuteSSEUtil.executeSSE(chatUrl+"/sse/checkCompanyName?filename="+fileName, sseListener, JSON.toJSONString(chatGlmDto)); - } catch (Exception e) { - e.printStackTrace(); - } + public void checkCompanyName( + @RequestPart(name = "originalFilename") String originalFilename, + @RequestPart("content") String context, HttpServletResponse rp) throws Exception { + String fileName="uploads/"+originalFilename; + Long userId = LoginHelper.getUserId(); + ChatGlmDto chatGlmDto = new ChatGlmDto(); + SSEListener sseListener = new SSEListener(chatGlmDto, rp); + ExecuteSSEUtil.executeSSE(chatUrl+"/sse/checkCompanyName?filename="+fileName+"&userId="+userId, sseListener, JSON.toJSONString(chatGlmDto)); + } @PostMapping(value = "/sse/checkDocumentError", consumes = MediaType.MULTIPART_FORM_DATA_VALUE,produces = "text/event-stream;charset=UTF-8") - public void checkDocumentError(@RequestPart(name = "fileInfo", required = false) MultipartFile fileInfo, @RequestPart("content") String context, HttpServletResponse rp) { - try { - String fileName = uploadFile(fileInfo); -// String token = ApiTokenUtil.generateClientToken(API_KEY); - ChatGlmDto chatGlmDto = new ChatGlmDto(); - SSEListener sseListener = new SSEListener(chatGlmDto, rp); - ExecuteSSEUtil.executeSSE(chatUrl+"/sse/checkDocumentErrorWeb?filename="+fileName, sseListener, JSON.toJSONString(chatGlmDto)); - } catch (Exception e) { - e.printStackTrace(); - } + public void checkDocumentError( + @RequestPart(name = "originalFilename") String originalFilename, + @RequestPart("content") String context, HttpServletResponse rp) throws Exception { + String fileName="uploads/"+originalFilename; + Long userId = LoginHelper.getUserId(); + ChatGlmDto chatGlmDto = new ChatGlmDto(); + SSEListener sseListener = new SSEListener(chatGlmDto, rp); + ExecuteSSEUtil.executeSSE(chatUrl+"/sse/checkDocumentErrorWeb?filename="+fileName+"&userId="+userId, sseListener, JSON.toJSONString(chatGlmDto)); } @PostMapping(value = "/sse/checkTitleName", consumes = MediaType.MULTIPART_FORM_DATA_VALUE,produces = "text/event-stream;charset=UTF-8") - public void checkTitleName(@RequestPart(name = "fileInfo", required = false) MultipartFile fileInfo, @RequestPart("content") String context, HttpServletResponse rp) { - try { - String fileName = uploadFile(fileInfo); -// String token = ApiTokenUtil.generateClientToken(API_KEY); - ChatGlmDto chatGlmDto = new ChatGlmDto(); - SSEListener sseListener = new SSEListener(chatGlmDto, rp); - ExecuteSSEUtil.executeSSE(chatUrl+"/sse/checkTitleName?filename="+fileName, sseListener, JSON.toJSONString(chatGlmDto)); - } catch (Exception e) { - e.printStackTrace(); - } - } - @PostMapping(value = "/sse/checkDocumentAll/checkPlaceName", consumes = MediaType.MULTIPART_FORM_DATA_VALUE,produces = "text/event-stream;charset=UTF-8") - public void checkDocumentAllCheckPlaceName(@RequestPart(name = "fileInfo", required = false) MultipartFile fileInfo, @RequestPart("uuid") String uuid, HttpServletResponse rp) { - try { - String fileName = uploadFile(fileInfo,uuid); -// String token = ApiTokenUtil.generateClientToken(API_KEY); - ChatGlmDto chatGlmDto = new ChatGlmDto(); - SSEListener sseListener = new SSEListener(chatGlmDto, rp); - //http://183.136.156.2:50000/see/checkPlaceName?filename="+fileName - ExecuteSSEUtil.executeSSE(chatUrl+"/sse/checkPlaceName?filename="+fileName, sseListener, JSON.toJSONString(chatGlmDto)); - } catch (Exception e) { - e.printStackTrace(); - } - } - @PostMapping(value = "/sse/checkDocumentAll/checkRepeatText", consumes = MediaType.MULTIPART_FORM_DATA_VALUE,produces = "text/event-stream;charset=UTF-8") - public void checkDocumentAllCheckRepeatText(@RequestPart(name = "fileInfo", required = false) MultipartFile fileInfo, @RequestPart("uuid") String uuid, HttpServletResponse rp) { - try { - String fileName = "uploads/"+uuid; -// String token = ApiTokenUtil.generateClientToken(API_KEY); - ChatGlmDto chatGlmDto = new ChatGlmDto(); - SSEListener sseListener = new SSEListener(chatGlmDto, rp); - ExecuteSSEUtil.executeSSE(chatUrl+"/sse/checkRepeatText?filename="+fileName, sseListener, JSON.toJSONString(chatGlmDto)); - } catch (Exception e) { - e.printStackTrace(); - } - } - @PostMapping(value = "/sse/checkDocumentAll/checkCompanyName", consumes = MediaType.MULTIPART_FORM_DATA_VALUE,produces = "text/event-stream;charset=UTF-8") - public void checkDocumentAllCheckCompanyName(@RequestPart(name = "fileInfo", required = false) MultipartFile fileInfo, @RequestPart("uuid") String uuid, HttpServletResponse rp) { - try { - String fileName = "uploads/"+uuid; -// String token = ApiTokenUtil.generateClientToken(API_KEY); - ChatGlmDto chatGlmDto = new ChatGlmDto(); - SSEListener sseListener = new SSEListener(chatGlmDto, rp); - ExecuteSSEUtil.executeSSE(chatUrl+"/sse/checkCompanyName?filename="+fileName, sseListener, JSON.toJSONString(chatGlmDto)); - } catch (Exception e) { - e.printStackTrace(); - } - } - @PostMapping(value = "/sse/checkDocumentAll/checkDocumentError", consumes = MediaType.MULTIPART_FORM_DATA_VALUE,produces = "text/event-stream;charset=UTF-8") - public void checkDocumentAllCcheckDocumentError(@RequestPart(name = "fileInfo", required = false) MultipartFile fileInfo, @RequestPart("uuid") String uuid, HttpServletResponse rp) { - try { - String fileName = "uploads/"+uuid; -// String token = ApiTokenUtil.generateClientToken(API_KEY); - ChatGlmDto chatGlmDto = new ChatGlmDto(); - SSEListener sseListener = new SSEListener(chatGlmDto, rp); - ExecuteSSEUtil.executeSSE(chatUrl+"/sse/checkDocumentErrorWeb?filename="+fileName, sseListener, JSON.toJSONString(chatGlmDto)); - } catch (Exception e) { - e.printStackTrace(); + public void checkTitleName( + @RequestPart(name = "originalFilename") String originalFilename, + @RequestPart("content") String context, HttpServletResponse rp) throws Exception { + String fileName="uploads/"+originalFilename; + Long userId = LoginHelper.getUserId(); + ChatGlmDto chatGlmDto = new ChatGlmDto(); + SSEListener sseListener = new SSEListener(chatGlmDto, rp); + ExecuteSSEUtil.executeSSE(chatUrl+"/sse/checkTitleName?filename="+fileName+"&userId="+userId, sseListener, JSON.toJSONString(chatGlmDto)); + } + @PostMapping(value = "/sse/documentEvaluate", consumes = MediaType.MULTIPART_FORM_DATA_VALUE,produces = "text/event-stream;charset=UTF-8") + public void documentEvaluate( + @RequestPart(name = "originalFilename",required = false) String originalFilename, + @RequestPart("content") String context, HttpServletResponse rp) throws Exception { + String fileName="uploads/"+originalFilename; + Long userId = LoginHelper.getUserId(); + ChatGlmDto chatGlmDto = new ChatGlmDto(); + SSEListener sseListener = new SSEListener(chatGlmDto, rp); + ExecuteSSEUtil.executeSSE(chatUrl+"/xysse/documentEvaluate?filename="+fileName+"&userId="+userId, sseListener, JSON.toJSONString(chatGlmDto)); + } + @GetMapping(value = "/sse/getLog",produces = "text/event-stream;charset=UTF-8") + public void getlog(HttpServletResponse rp) throws Exception { + Long userId = LoginHelper.getUserId(); + ChatGlmDto chatGlmDto = new ChatGlmDto(); + SSEListener sseListener = new SSEListener(chatGlmDto, rp); + ExecuteSSEUtil.executeSSE(chatUrl+"/sse/getLog?userId="+userId, sseListener, JSON.toJSONString(chatGlmDto)); + } + + + /** + * 上传文件与文件转换 + * @param file 上传的文件 + * @param uuid 文件唯一标识 + * @return 上传成功返回文件路径,失败返回失败原因 + * @throws IOException + * @throws InterruptedException + */ + @PostMapping(value = "/sse/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public R uploadFileby(@RequestPart(name = "fileInfo") MultipartFile file,@RequestPart(name = "originalFilename") String originalFilename) throws IOException, InterruptedException { + String destDir = chatFilePath; + if (originalFilename == null) { + throw new IllegalArgumentException("文件名不能为空"); } - } - @PostMapping(value = "/sse/checkDocumentAll/checkTitleName", consumes = MediaType.MULTIPART_FORM_DATA_VALUE,produces = "text/event-stream;charset=UTF-8") - public void checkDocumentAllCheckTitleName(@RequestPart(name = "fileInfo", required = false) MultipartFile fileInfo, @RequestPart("uuid") String uuid, HttpServletResponse rp) { - try { - String fileName = "uploads/"+uuid; -// String token = ApiTokenUtil.generateClientToken(API_KEY); - ChatGlmDto chatGlmDto = new ChatGlmDto(); - SSEListener sseListener = new SSEListener(chatGlmDto, rp); - ExecuteSSEUtil.executeSSE(chatUrl+"/sse/checkTitleName?filename="+fileName, sseListener, JSON.toJSONString(chatGlmDto)); - } catch (Exception e) { - e.printStackTrace(); + // 获取文件的后缀 + String suffix = FileUtil.getSuffix(originalFilename); + + // 构建目标文件路径 + String destPath = destDir + File.separator + originalFilename; + + // 创建目标文件 + File destFile = new File(destPath); + FileUtil.writeFromStream(file.getInputStream(), destFile); + //不是docx文件需要转换 + if (!originalFilename.endsWith(".docx")) { + ProcessBuilder builder = new ProcessBuilder("unoconv","-o" ,destDir,"-f", "docx", destFile.getAbsolutePath()); + + Process process = builder.start(); + + int complated = process.waitFor(); + if (complated!=0) { + // 如果返回值不是0,说明转换失败 + process.destroyForcibly(); + String failMsg = suffix+"转docx失败,请检查文件是否正确~"; + return R.fail(failMsg,failMsg); + }else{ + //文档转换成果 + process.destroyForcibly(); + destPath=destPath.substring(0,destPath.lastIndexOf("."))+".docx"; + } } - } - public String uploadFile(MultipartFile file) throws IOException { -// String destDir = chatFilePath; -// String originalFilename = file.getOriginalFilename(); -// if (originalFilename == null) { -// throw new IllegalArgumentException("文件名不能为空"); -// } -// -// // 获取文件的后缀 -// String suffix = FileUtil.getSuffix(originalFilename); -// -// // 生成唯一的文件名 -// String name = IdUtil.fastSimpleUUID() + "." + suffix; -// -// // 构建目标文件路径 -// String destPath = destDir + File.separator + name; -// -// // 创建目标文件 -// File destFile = new File(destPath); -// FileUtil.writeFromStream(file.getInputStream(), destFile); -// if(!sendRequest(chatUrl+"/upload", destPath)){ -// throw new RuntimeException("上传文件失败"); -// } - SysOssVo oss = ossService.upload(file); - String fileName = oss.getOriginalName(); - RequestBody requestBody = new MultipartBody.Builder() - .setType(MultipartBody.FORM) - .addFormDataPart("file", fileName, - RequestBody.create(okhttp3.MediaType.parse(MediaType.APPLICATION_OCTET_STREAM_VALUE), file.getBytes())) - .build(); - Request request = new Request.Builder() - .url(chatUrl+"/upload") // 替换为你的Flask服务器地址 - .post(requestBody) - .build(); - Response response = client.newCall(request).execute(); - return "uploads/"+fileName; + if(!sendRequest(chatUrl+"/sse/upload", destPath)){ + return R.fail("文件上传失败","文件上传失败"); + } + return R.ok("ok","uploads/"+originalFilename); } - public String uploadFile(MultipartFile file,String uuid) throws IOException { + @PostMapping(value = "/xysse/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public R uploadFileby1(@RequestPart(name = "fileInfo") MultipartFile file,@RequestPart(name = "originalFilename") String originalFilename) throws IOException, InterruptedException { String destDir = chatFilePath; - String originalFilename = file.getOriginalFilename(); if (originalFilename == null) { throw new IllegalArgumentException("文件名不能为空"); } - // 获取文件的后缀 String suffix = FileUtil.getSuffix(originalFilename); - // 生成唯一的文件名 - String name = uuid; - // 构建目标文件路径 - String destPath = destDir + File.separator + name; + String destPath = destDir + File.separator + originalFilename; // 创建目标文件 File destFile = new File(destPath); FileUtil.writeFromStream(file.getInputStream(), destFile); - if(!sendRequest(chatUrl+"/upload", destPath)){ - throw new RuntimeException("上传文件失败"); + //不是docx文件需要转换 + if (!originalFilename.endsWith(".docx")) { + ProcessBuilder builder = new ProcessBuilder("unoconv","-o" ,destDir,"-f", "docx", destFile.getAbsolutePath()); + + Process process = builder.start(); + + int complated = process.waitFor(); + if (complated!=0) { + // 如果返回值不是0,说明转换失败 + process.destroyForcibly(); + String failMsg = suffix+"转docx失败,请检查文件是否正确~"; + return R.fail(failMsg,failMsg); + }else{ + //文档转换成果 + process.destroyForcibly(); + destPath=destPath.substring(0,destPath.lastIndexOf("."))+".docx"; + } + } + + if(!sendRequest(chatUrl+"/xysse/upload", destPath)){ + return R.fail("文件上传失败","文件上传失败"); } - return "uploads/"+name; + return R.ok("ok","uploads/"+originalFilename); } + + /** + * 发送文件到flask服务器 + * @param url + * @param filePath + * @return + */ public boolean sendRequest(String url,String filePath) { // 替换为你要上传的文件路径 File file = new File(filePath); @@ -576,9 +249,4 @@ public class Qwen72bController extends BaseController { } return false; } - @JobExecutor(name="ces") - public ExecuteResult jobExecute(JobArgs jobArgs) { - System.out.println(jobArgs.getJobParams()); - return ExecuteResult.success("测试成功aaaaaaa"); - } } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/DocumentEvaluationResult.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/DocumentEvaluationResult.java new file mode 100644 index 0000000..e6afa21 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/DocumentEvaluationResult.java @@ -0,0 +1,129 @@ +package org.dromara.productManagement.domain; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.util.List; + +// 文档评价结果类 +@Data +class DocumentEvaluationResult { + @JsonProperty("evaluationResultSummary") + private EvaluationSummary evaluationSummary; // 评价汇总 + + @JsonProperty("evaluationDetails") + private List evaluationDetails; // 评价详情列表 + + // 评价汇总内部类 + @Data + public static class EvaluationSummary { + @JsonProperty("evaluationRegistration") + private String evaluationRegistration; // 评价登记 + + @JsonProperty("evaluationScore") + private String evaluationScore; // 评价得分 + } + + // 评价详情内部类 + @Data + public static class EvaluationDetail { + @JsonProperty("functionClarity") + private EvaluationCriteria functionClarity; // 功能清晰性 + + @JsonProperty("functionCompleteness") + private EvaluationCriteria functionCompleteness; // 功能完整性 + + @JsonProperty("functionTestability") + private EvaluationCriteria functionTestability; // 功能可测试性 + + @JsonProperty("functionDetail") + private EvaluationCriteria functionDetail; // 功能详细性 + + @JsonProperty("originalText") + private String originalText; // 原文 + + @JsonProperty("polishedText") + private String polishedText; // 润色完善 + } + + // 评价标准内部类 + @Data + public static class EvaluationCriteria { + @JsonProperty("level") + private String level; // 级别 + + @JsonProperty("score") + private String score; // 分值 + + @JsonProperty("evaluationDescription") + private String evaluationDescription; // 评价说明 + } +} +/** + * json格式 + * { + * "evaluationResultSummary": { + * "evaluationRegistration": "2023-001", + * "evaluationScore": "85" + * }, + * "evaluationDetails": [ + * { + * "functionClarity": { + * "level": "Excellent", + * "score": "90", + * "evaluationDescription": "The function description is clear and precise." + * }, + * "functionCompleteness": { + * "level": "Good", + * "score": "80", + * "evaluationDescription": "The functionality is mostly complete, missing some details." + * }, + * "functionTestability": { + * "level": "Good", + * "score": "85", + * "evaluationDescription": "The function is easy to test, but documentation is insufficient." + * }, + * "functionDetail": { + * "level": "Excellent", + * "score": "95", + * "evaluationDescription": "The details of the function are accurate and comprehensive." + * }, + * "originalText": "Original text content.", + * "polishedText": "Polished text content." + * }, + * { + * "functionClarity": { + * "level": "Average", + * "score": "70", + * "evaluationDescription": "The function description is not clear enough." + * }, + * "functionCompleteness": { + * "level": "Satisfactory", + * "score": "75", + * "evaluationDescription": "Some functionalities are missing." + * }, + * "functionTestability": { + * "level": "Average", + * "score": "70", + * "evaluationDescription": "Testing is not convenient enough." + * }, + * "functionDetail": { + * "level": "Good", + * "score": "80", + * "evaluationDescription": "Function details are relatively complete." + * }, + * "originalText": "Second original text content.", + * "polishedText": "Second polished text content." + * } + * ] + * } + * // 创建ObjectMapper实例 + * ObjectMapper objectMapper = new ObjectMapper(); + * try { + * // 将JSON字符串映射到Java对象 + * DocumentEvaluationResult documentEvaluationResult = objectMapper.readValue(jsonString, DocumentEvaluationResult.class); + * System.out.println(documentEvaluationResult); + * } catch (IOException e) { + * e.printStackTrace(); + * } + */ diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/DocumentTaskResults.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/DocumentTaskResults.java new file mode 100644 index 0000000..5562c22 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/DocumentTaskResults.java @@ -0,0 +1,53 @@ +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; + +/** + * 文档任务结果对象 document_task_results + * + * @author Lion Li + * @date 2024-10-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("document_task_results") +public class DocumentTaskResults extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private String id; + + /** + * 任务id + */ + private Long documentTaskId; + + /** + * 任务结果 + */ + private String result; + + /** + * + */ + @TableLogic + private String delFlag; + + /** + * 版本号 + */ + @Version + private Long version; + + +} 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 new file mode 100644 index 0000000..44e0a05 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/DocumentTasks.java @@ -0,0 +1,66 @@ +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.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 文档任务对象 document_tasks + * + * @author Lion Li + * @date 2024-10-22 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("document_tasks") +public class DocumentTasks extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private String id; + + /** + * 任务名称 + */ + private String taskName; + + /** + * 文档名称 + */ + private String documentName; + private Long ossId; + + /** + * 预计时间 + */ + private Date estimatedCompletionTime; + + /** + * 状态 + */ + private String progressStatus; + + /** + * + */ + @TableLogic + private String delFlag; + + /** + * 版本号 + */ + @Version + private Long version; + + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/DocumentTasksPermissions.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/DocumentTasksPermissions.java new file mode 100644 index 0000000..ba04fdb --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/DocumentTasksPermissions.java @@ -0,0 +1,69 @@ +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; + +/** + * 文档任务权限对象 document_tasks_permissions + * + * @author Lion Li + * @date 2024-11-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("document_tasks_permissions") +public class DocumentTasksPermissions extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private String id; + + /** + * 用户ID + */ + private Long userId; + + /** + * 角色ID + */ + private Long roleId; + + /** + * 每日文档数 + */ + private Long dailyDocumentCount; + + /** + * 优先级 + */ + private Long priority; + + /** + * 任务种类 + */ + private String taskType; + + + /** + * 删除标志 + */ + @TableLogic + private String delFlag; + + /** + * 版本号 + */ + @Version + private Long version; + + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/DocumentTasksPermissionsDetail.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/DocumentTasksPermissionsDetail.java new file mode 100644 index 0000000..b4e315e --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/DocumentTasksPermissionsDetail.java @@ -0,0 +1,58 @@ +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; + +/** + * 文档任务权限详情对象 document_tasks_permissions_detail + * + * @author Lion Li + * @date 2024-11-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("document_tasks_permissions_detail") +public class DocumentTasksPermissionsDetail extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private String id; + + /** + * 用户ID + */ + private Long userId; + + /** + * 剩余文档数 + */ + private Long remainingDocumentCount; + + /** + * 任务种类 + */ + private String taskType; + + /** + * 删除标志 + */ + @TableLogic + private String delFlag; + + /** + * 版本号 + */ + @Version + private Long version; + + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/FileReadInfo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/FileReadInfo.java new file mode 100644 index 0000000..4e3f75e --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/FileReadInfo.java @@ -0,0 +1,51 @@ +package org.dromara.productManagement.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 文件处理信息表对象 file_read_info + * + * @author Lion Li + * @date 2024-09-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("file_read_info") +public class FileReadInfo extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @TableId(value = "id") + private Long id; + + /** + * 文件名称 + */ + private String fileName; + + /** + * 文件状态,1是已读 + */ + private String fileStatus; + + /** + * 文件读取模式 + */ + private String fileReadMode; + + /** + * 反馈 + */ + private String feedback; + + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/DocumentTaskResultsBo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/DocumentTaskResultsBo.java new file mode 100644 index 0000000..684b1e5 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/DocumentTaskResultsBo.java @@ -0,0 +1,39 @@ +package org.dromara.productManagement.domain.bo; + +import org.dromara.productManagement.domain.DocumentTaskResults; +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.*; + +/** + * 文档任务结果业务对象 document_task_results + * + * @author Lion Li + * @date 2024-10-23 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = DocumentTaskResults.class, reverseConvertGenerate = false) +public class DocumentTaskResultsBo extends BaseEntity { + + /** + * id + */ + private String id; + + /** + * 任务id + */ + private Long documentTaskId; + + /** + * 任务结果 + */ + private String result; + + +} 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 new file mode 100644 index 0000000..8f11224 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/DocumentTasksBo.java @@ -0,0 +1,58 @@ +package org.dromara.productManagement.domain.bo; + +import org.dromara.productManagement.domain.DocumentTasks; +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.*; +import java.util.Date; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 文档任务业务对象 document_tasks + * + * @author Lion Li + * @date 2024-10-22 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = DocumentTasks.class, reverseConvertGenerate = false) +public class DocumentTasksBo extends BaseEntity { + /** + * 主键 + */ + private String id; + /** + * 任务名称 + */ +// @NotBlank(message = "任务名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String taskName; + @NotEmpty(message = "任务名称列表不能为空", groups = { AddGroup.class, EditGroup.class }) + private List<@NotBlank(message = "任务名称不能为空") String> taskNameList; + /** + * 文档名称 + */ +// @NotBlank(message = "文档名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String documentName; + @NotNull(message = "文档不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long ossId; + + /** + * 预计时间 + */ +// @NotNull(message = "预计时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private Date estimatedCompletionTime; + + /** + * 状态 + */ +// @NotBlank(message = "状态不能为空", groups = { AddGroup.class, EditGroup.class }) + private String progressStatus; + + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/DocumentTasksPermissionsBo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/DocumentTasksPermissionsBo.java new file mode 100644 index 0000000..340dd5e --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/DocumentTasksPermissionsBo.java @@ -0,0 +1,65 @@ +package org.dromara.productManagement.domain.bo; + +import org.dromara.productManagement.domain.DocumentTasksPermissions; +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.*; + +import java.util.List; + +/** + * 文档任务权限业务对象 document_tasks_permissions + * + * @author Lion Li + * @date 2024-11-08 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = DocumentTasksPermissions.class, reverseConvertGenerate = false) +public class DocumentTasksPermissionsBo extends BaseEntity { + + /** + * 主键ID + */ + @NotBlank(message = "主键ID不能为空", groups = { EditGroup.class }) + private String id; + + /** + * 用户ID + */ + private Long userId; + + /** + * 角色ID + */ + private Long roleId; + + /** + * 每日文档数 + */ + @NotNull(message = "每日文档数不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long dailyDocumentCount; + + /** + * 优先级 + */ + @NotNull(message = "优先级不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long priority; + + /** + * 任务种类 + */ + private String taskType; + + + /** + * 任务列表 + */ + @NotNull(message = "任务种类不能为空", groups = { AddGroup.class, EditGroup.class }) + private List taskTypeList; + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/DocumentTasksPermissionsDetailBo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/DocumentTasksPermissionsDetailBo.java new file mode 100644 index 0000000..6aaa5e8 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/DocumentTasksPermissionsDetailBo.java @@ -0,0 +1,47 @@ +package org.dromara.productManagement.domain.bo; + +import org.dromara.productManagement.domain.DocumentTasksPermissionsDetail; +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.*; + +/** + * 文档任务权限详情业务对象 document_tasks_permissions_detail + * + * @author Lion Li + * @date 2024-11-11 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = DocumentTasksPermissionsDetail.class, reverseConvertGenerate = false) +public class DocumentTasksPermissionsDetailBo extends BaseEntity { + + /** + * 主键ID + */ + private String id; + + /** + * 用户ID + */ + @NotNull(message = "用户ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long userId; + + /** + * 剩余文档数 + */ + @NotNull(message = "剩余文档数不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long remainingDocumentCount; + + /** + * 任务种类 + */ + @NotBlank(message = "任务种类不能为空", groups = { AddGroup.class, EditGroup.class }) + private String taskType; + + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/FileReadInfoBo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/FileReadInfoBo.java new file mode 100644 index 0000000..e5389ad --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/bo/FileReadInfoBo.java @@ -0,0 +1,54 @@ +package org.dromara.productManagement.domain.bo; + +import org.dromara.productManagement.domain.FileReadInfo; +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.*; + +/** + * 文件处理信息表业务对象 file_read_info + * + * @author Lion Li + * @date 2024-09-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = FileReadInfo.class, reverseConvertGenerate = false) +public class FileReadInfoBo extends BaseEntity { + + /** + * + */ + @NotNull(message = "不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 文件名称 + */ + @NotBlank(message = "文件名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fileName; + + /** + * 文件状态,1是已读 + */ + @NotBlank(message = "文件状态,1是已读不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fileStatus; + + /** + * 文件读取模式 + */ + @NotBlank(message = "文件读取模式不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fileReadMode; + + /** + * 反馈 + */ + @NotBlank(message = "反馈不能为空", groups = { AddGroup.class, EditGroup.class }) + private String feedback; + + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/DocumentTaskResultsVo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/DocumentTaskResultsVo.java new file mode 100644 index 0000000..385343c --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/DocumentTaskResultsVo.java @@ -0,0 +1,35 @@ +package org.dromara.productManagement.domain.vo; + +import org.dromara.productManagement.domain.DocumentTaskResults; +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; + + + +/** + * 文档任务结果视图对象 document_task_results + * + * @author Lion Li + * @date 2024-10-23 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = DocumentTaskResults.class) +public class DocumentTaskResultsVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + /** + * 任务结果 + */ + private String result; + +} 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 new file mode 100644 index 0000000..cc22b28 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/DocumentTasksPermissionsDetailVo.java @@ -0,0 +1,57 @@ +package org.dromara.productManagement.domain.vo; + +import org.dromara.productManagement.domain.DocumentTasksPermissionsDetail; +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; + + + +/** + * 文档任务权限详情视图对象 document_tasks_permissions_detail + * + * @author Lion Li + * @date 2024-11-11 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = DocumentTasksPermissionsDetail.class) +public class DocumentTasksPermissionsDetailVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private String id; + + /** + * 用户ID + */ + @ExcelProperty(value = "用户ID") + private Long userId; + + /** + * 剩余文档数 + */ + @ExcelProperty(value = "剩余文档数") + private Long remainingDocumentCount; + + /** + * 任务种类 + */ + @ExcelProperty(value = "任务种类", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "document_task") + private String taskType; + + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/DocumentTasksPermissionsVo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/DocumentTasksPermissionsVo.java new file mode 100644 index 0000000..f86ec3f --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/DocumentTasksPermissionsVo.java @@ -0,0 +1,74 @@ +package org.dromara.productManagement.domain.vo; + +import org.dromara.productManagement.domain.DocumentTasksPermissions; +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; +import java.util.List; + + +/** + * 文档任务权限视图对象 document_tasks_permissions + * + * @author Lion Li + * @date 2024-11-08 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = DocumentTasksPermissions.class) +public class DocumentTasksPermissionsVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private String id; + + /** + * 用户ID + */ + @ExcelProperty(value = "用户ID") + private Long userId; + + /** + * 角色ID + */ + @ExcelProperty(value = "角色ID") + private Long roleId; + + /** + * 每日文档数 + */ + @ExcelProperty(value = "每日文档数") + private Long dailyDocumentCount; + + /** + * 优先级 + */ + @ExcelProperty(value = "优先级") + private Long priority; + + /** + * 任务种类 + */ + @ExcelProperty(value = "任务种类", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "document_task") + private String taskType; + + + /** + * 任务列表 + */ + private List taskTypeList; + +} 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 new file mode 100644 index 0000000..8003c95 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/DocumentTasksVo.java @@ -0,0 +1,62 @@ +package org.dromara.productManagement.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.productManagement.domain.DocumentTasks; +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; + + + +/** + * 文档任务视图对象 document_tasks + * + * @author Lion Li + * @date 2024-10-22 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = DocumentTasks.class) +public class DocumentTasksVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + @ExcelProperty(value = "主键") + private String id; + /** + * 任务名称 + */ + @ExcelProperty(value = "任务名称", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "document_task") + private String taskName; + + /** + * 文档名称 + */ + @ExcelProperty(value = "文档名称") + private String documentName; + + /** + * 预计时间 + */ + @ExcelProperty(value = "预计时间") + private Date estimatedCompletionTime; + @ExcelProperty(value = "上传时间") + private Date createTime; + /** + * 状态 + */ + @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "document_task_status") + private String progressStatus; + + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/FileReadInfoVo.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/FileReadInfoVo.java new file mode 100644 index 0000000..707639f --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/domain/vo/FileReadInfoVo.java @@ -0,0 +1,63 @@ +package org.dromara.productManagement.domain.vo; + +import org.dromara.productManagement.domain.FileReadInfo; +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; + + + +/** + * 文件处理信息表视图对象 file_read_info + * + * @author Lion Li + * @date 2024-09-20 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = FileReadInfo.class) +public class FileReadInfoVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * + */ + @ExcelProperty(value = "") + private Long id; + + /** + * 文件名称 + */ + @ExcelProperty(value = "文件名称") + private String fileName; + + /** + * 文件状态,1是已读 + */ + @ExcelProperty(value = "文件状态,1是已读", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "sys_yes_no") + private String fileStatus; + + /** + * 文件读取模式 + */ + @ExcelProperty(value = "文件读取模式") + private String fileReadMode; + + /** + * 反馈 + */ + @ExcelProperty(value = "反馈") + private String feedback; + + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/job/Qwen72bJobExecutor.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/job/Qwen72bJobExecutor.java index 12f3839..97f5cf7 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/job/Qwen72bJobExecutor.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/job/Qwen72bJobExecutor.java @@ -1,22 +1,18 @@ package org.dromara.productManagement.job; -import com.aizuda.snailjob.client.job.core.annotation.JobExecutor; -import com.aizuda.snailjob.client.job.core.dto.JobArgs; -import com.aizuda.snailjob.client.model.ExecuteResult; -import com.aizuda.snailjob.common.core.util.JsonUtil; -import com.aizuda.snailjob.common.log.SnailJobLog; + import org.springframework.stereotype.Component; @Component public class Qwen72bJobExecutor { - @JobExecutor(name = "checkRepeatTextJobExecute") - - public ExecuteResult checkRepeatTextJobExecute(JobArgs jobArgs) { - SnailJobLog.LOCAL.info("testJobExecutor. jobArgs:{}", JsonUtil.toJsonString(jobArgs)); - SnailJobLog.REMOTE.info("testJobExecutor. jobArgs:{}", JsonUtil.toJsonString(jobArgs)); - - return ExecuteResult.success("测试成功"); - } +// @JobExecutor(name = "checkRepeatTextJobExecute") +// +// public ExecuteResult checkRepeatTextJobExecute(JobArgs jobArgs) { +// SnailJobLog.LOCAL.info("testJobExecutor. jobArgs:{}", JsonUtil.toJsonString(jobArgs)); +// SnailJobLog.REMOTE.info("testJobExecutor. jobArgs:{}", JsonUtil.toJsonString(jobArgs)); +// +// return ExecuteResult.success("测试成功"); +// } } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/DocumentTaskResultsMapper.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/DocumentTaskResultsMapper.java new file mode 100644 index 0000000..2116b10 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/DocumentTaskResultsMapper.java @@ -0,0 +1,15 @@ +package org.dromara.productManagement.mapper; + +import org.dromara.productManagement.domain.DocumentTaskResults; +import org.dromara.productManagement.domain.vo.DocumentTaskResultsVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 文档任务结果Mapper接口 + * + * @author Lion Li + * @date 2024-10-23 + */ +public interface DocumentTaskResultsMapper extends BaseMapperPlus { + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/DocumentTasksMapper.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/DocumentTasksMapper.java new file mode 100644 index 0000000..88af7e0 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/DocumentTasksMapper.java @@ -0,0 +1,21 @@ +package org.dromara.productManagement.mapper; + +import org.dromara.common.mybatis.annotation.DataColumn; +import org.dromara.common.mybatis.annotation.DataPermission; +import org.dromara.productManagement.domain.DocumentTasks; +import org.dromara.productManagement.domain.vo.DocumentTasksVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 文档任务Mapper接口 + * + * @author Lion Li + * @date 2024-10-22 + */ +@DataPermission({ +// @DataColumn(key = "deptName", value = "dept_id"), + @DataColumn(key = "userName", value = "create_by") +}) +public interface DocumentTasksMapper extends BaseMapperPlus { + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/DocumentTasksPermissionsDetailMapper.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/DocumentTasksPermissionsDetailMapper.java new file mode 100644 index 0000000..9b59dad --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/DocumentTasksPermissionsDetailMapper.java @@ -0,0 +1,15 @@ +package org.dromara.productManagement.mapper; + +import org.dromara.productManagement.domain.DocumentTasksPermissionsDetail; +import org.dromara.productManagement.domain.vo.DocumentTasksPermissionsDetailVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 文档任务权限详情Mapper接口 + * + * @author Lion Li + * @date 2024-11-11 + */ +public interface DocumentTasksPermissionsDetailMapper extends BaseMapperPlus { + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/DocumentTasksPermissionsMapper.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/DocumentTasksPermissionsMapper.java new file mode 100644 index 0000000..bb6303b --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/DocumentTasksPermissionsMapper.java @@ -0,0 +1,17 @@ +package org.dromara.productManagement.mapper; + +import org.apache.ibatis.annotations.Param; +import org.dromara.productManagement.domain.DocumentTasksPermissions; +import org.dromara.productManagement.domain.vo.DocumentTasksPermissionsVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 文档任务权限Mapper接口 + * + * @author Lion Li + * @date 2024-11-08 + */ +public interface DocumentTasksPermissionsMapper extends BaseMapperPlus { + DocumentTasksPermissionsVo selectDocumentPermissionsByUserIdAndTaskType(@Param("userId") Long userId,@Param("taskType") String taskType); + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/FileReadInfoMapper.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/FileReadInfoMapper.java new file mode 100644 index 0000000..a1d694e --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/FileReadInfoMapper.java @@ -0,0 +1,15 @@ +package org.dromara.productManagement.mapper; + +import org.dromara.productManagement.domain.FileReadInfo; +import org.dromara.productManagement.domain.vo.FileReadInfoVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 文件处理信息表Mapper接口 + * + * @author Lion Li + * @date 2024-09-20 + */ +public interface FileReadInfoMapper extends BaseMapperPlus { + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgCompanyProductModelDetailsMapper.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgCompanyProductModelDetailsMapper.java index 5b9ae72..8a774c9 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgCompanyProductModelDetailsMapper.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/mapper/PmgCompanyProductModelDetailsMapper.java @@ -11,5 +11,4 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; * @date 2024-07-01 */ public interface PmgCompanyProductModelDetailsMapper extends BaseMapperPlus { - } diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IDocAiService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IDocAiService.java new file mode 100644 index 0000000..68b6a71 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IDocAiService.java @@ -0,0 +1,41 @@ +package org.dromara.productManagement.service; + +import jakarta.servlet.http.HttpServletResponse; +import org.dromara.common.core.domain.R; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.io.InputStream; + +/** + * DocAiService接口,用于定义与文档AI相关的业务逻辑。 + */ +public interface IDocAiService { + /** + * 执行SSE请求 + * @param endpoint 请求的端点 + * @param originalFilename 原始文件名 + * @param context 请求上下文 + * @param rp HttpServletResponse对象 + * @throws Exception 异常 + */ + void executeSSE(String endpoint, String originalFilename, String context, HttpServletResponse rp) throws Exception; + + /** + * 获取日志 + * @param rp HttpServletResponse对象 + * @throws Exception 异常 + */ + void getLog(HttpServletResponse rp) throws Exception; + + /** + * 上传文件 + * @param file 上传的文件 + * @param originalFilename 原始文件名 + * @return 上传结果 + * @throws IOException IO异常 + * @throws InterruptedException 中断异常 + */ + R uploadFile(MultipartFile file, String originalFilename) throws IOException, InterruptedException; + String uploadFileByStream(InputStream inputStream, String originalFilename,String url) throws IOException, InterruptedException; +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IDocumentTaskResultsService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IDocumentTaskResultsService.java new file mode 100644 index 0000000..b862a18 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IDocumentTaskResultsService.java @@ -0,0 +1,70 @@ +package org.dromara.productManagement.service; + +import org.dromara.productManagement.domain.vo.DocumentTaskResultsVo; +import org.dromara.productManagement.domain.bo.DocumentTaskResultsBo; +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-10-23 + */ +public interface IDocumentTaskResultsService { + + /** + * 查询文档任务结果 + * + * @param id 主键 + * @return 文档任务结果 + */ + DocumentTaskResultsVo queryById(String id); + + /** + * 分页查询文档任务结果列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 文档任务结果分页列表 + */ + TableDataInfo queryPageList(DocumentTaskResultsBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的文档任务结果列表 + * + * @param bo 查询条件 + * @return 文档任务结果列表 + */ + List queryList(DocumentTaskResultsBo bo); + + /** + * 新增文档任务结果 + * + * @param bo 文档任务结果 + * @return 是否新增成功 + */ + Boolean insertByBo(DocumentTaskResultsBo bo); + + /** + * 修改文档任务结果 + * + * @param bo 文档任务结果 + * @return 是否修改成功 + */ + Boolean updateByBo(DocumentTaskResultsBo bo); + + /** + * 校验并批量删除文档任务结果信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + DocumentTaskResultsVo queryByTaskId(String id); +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IDocumentTasksPermissionsDetailService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IDocumentTasksPermissionsDetailService.java new file mode 100644 index 0000000..cac1cd6 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IDocumentTasksPermissionsDetailService.java @@ -0,0 +1,68 @@ +package org.dromara.productManagement.service; + +import org.dromara.productManagement.domain.vo.DocumentTasksPermissionsDetailVo; +import org.dromara.productManagement.domain.bo.DocumentTasksPermissionsDetailBo; +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-11-11 + */ +public interface IDocumentTasksPermissionsDetailService { + + /** + * 查询文档任务权限详情 + * + * @param id 主键 + * @return 文档任务权限详情 + */ + DocumentTasksPermissionsDetailVo queryById(String id); + + /** + * 分页查询文档任务权限详情列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 文档任务权限详情分页列表 + */ + TableDataInfo queryPageList(DocumentTasksPermissionsDetailBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的文档任务权限详情列表 + * + * @param bo 查询条件 + * @return 文档任务权限详情列表 + */ + List queryList(DocumentTasksPermissionsDetailBo bo); + + /** + * 新增文档任务权限详情 + * + * @param bo 文档任务权限详情 + * @return 是否新增成功 + */ + Boolean insertByBo(DocumentTasksPermissionsDetailBo bo); + + /** + * 修改文档任务权限详情 + * + * @param bo 文档任务权限详情 + * @return 是否修改成功 + */ + Boolean updateByBo(DocumentTasksPermissionsDetailBo 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/IDocumentTasksPermissionsService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IDocumentTasksPermissionsService.java new file mode 100644 index 0000000..20d2380 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IDocumentTasksPermissionsService.java @@ -0,0 +1,74 @@ +package org.dromara.productManagement.service; + +import org.dromara.productManagement.domain.vo.DocumentTasksPermissionsVo; +import org.dromara.productManagement.domain.bo.DocumentTasksPermissionsBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.system.domain.vo.SysUserVo; + +import java.util.Collection; +import java.util.List; + +/** + * 文档任务权限Service接口 + * + * @author Lion Li + * @date 2024-11-08 + */ +public interface IDocumentTasksPermissionsService { + + /** + * 查询文档任务权限 + * + * @param id 主键 + * @return 文档任务权限 + */ + DocumentTasksPermissionsVo queryById(String id); + + /** + * 分页查询文档任务权限列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 文档任务权限分页列表 + */ + TableDataInfo queryPageList(DocumentTasksPermissionsBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的文档任务权限列表 + * + * @param bo 查询条件 + * @return 文档任务权限列表 + */ + List queryList(DocumentTasksPermissionsBo bo); + + /** + * 新增文档任务权限 + * + * @param bo 文档任务权限 + * @return 是否新增成功 + */ + Boolean insertByBo(DocumentTasksPermissionsBo bo); + + /** + * 修改文档任务权限 + * + * @param bo 文档任务权限 + * @return 是否修改成功 + */ + Boolean updateByBo(DocumentTasksPermissionsBo bo); + + /** + * 校验并批量删除文档任务权限信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + + List getUsersAll(); + + DocumentTasksPermissionsVo getTasksPermissionsByUserId(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 new file mode 100644 index 0000000..3428f0a --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IDocumentTasksService.java @@ -0,0 +1,71 @@ +package org.dromara.productManagement.service; + +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 java.io.IOException; +import java.util.Collection; +import java.util.List; + +/** + * 文档任务Service接口 + * + * @author Lion Li + * @date 2024-10-22 + */ +public interface IDocumentTasksService { + + /** + * 查询文档任务 + * + * @param id 主键 + * @return 文档任务 + */ + DocumentTasksVo queryById(Long id); + + /** + * 分页查询文档任务列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 文档任务分页列表 + */ + TableDataInfo queryPageList(DocumentTasksBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的文档任务列表 + * + * @param bo 查询条件 + * @return 文档任务列表 + */ + List queryList(DocumentTasksBo bo); + + /** + * 新增文档任务 + * + * @param bo 文档任务 + * @return 是否新增成功 + */ + Boolean insertByBo(DocumentTasksBo bo) throws IOException, InterruptedException; + + /** + * 修改文档任务 + * + * @param bo 文档任务 + * @return 是否修改成功 + */ + Boolean updateByBo(DocumentTasksBo bo); + + /** + * 校验并批量删除文档任务信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + int stopTask(Long id); +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IFileReadInfoService.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IFileReadInfoService.java new file mode 100644 index 0000000..c0034dc --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/IFileReadInfoService.java @@ -0,0 +1,72 @@ +package org.dromara.productManagement.service; + +import org.dromara.productManagement.domain.vo.FileReadInfoVo; +import org.dromara.productManagement.domain.bo.FileReadInfoBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.Collection; +import java.util.List; + +/** + * 文件处理信息表Service接口 + * + * @author Lion Li + * @date 2024-09-20 + */ +public interface IFileReadInfoService { + + /** + * 查询文件处理信息表 + * + * @param id 主键 + * @return 文件处理信息表 + */ + FileReadInfoVo queryById(Long id); + + /** + * 分页查询文件处理信息表列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 文件处理信息表分页列表 + */ + TableDataInfo queryPageList(FileReadInfoBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的文件处理信息表列表 + * + * @param bo 查询条件 + * @return 文件处理信息表列表 + */ + List queryList(FileReadInfoBo bo); + + /** + * 新增文件处理信息表 + * + * @param bo 文件处理信息表 + * @return 是否新增成功 + */ + Boolean insertByBo(FileReadInfoBo bo); + + /** + * 修改文件处理信息表 + * + * @param bo 文件处理信息表 + * @return 是否修改成功 + */ + Boolean updateByBo(FileReadInfoBo bo); + + /** + * 校验并批量删除文件处理信息表信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + void importData(MultipartFile file, String context) throws IOException; +} 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 new file mode 100644 index 0000000..2389a5a --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocAiServiceImpl.java @@ -0,0 +1,178 @@ +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.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import jakarta.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.concurrent.TimeUnit; + +import cn.hutool.core.io.FileUtil; +import okhttp3.*; +import com.alibaba.fastjson.JSON; +import org.springframework.http.MediaType; +import org.dromara.common.sse.dto.ChatGlmDto; +import org.dromara.common.sse.listener.SSEListener; +import org.dromara.common.sse.utils.ExecuteSSEUtil; + +/** + * DocAiServiceImpl类,实现IDocAiService接口,提供文档AI相关的具体逻辑。 + */ +@Service +public class DocAiServiceImpl implements IDocAiService { + + @Value("${chat.filePath}") + private String chatFilePath; + @Value("${chat.chatUrl}") + private String chatUrl; + + private final OkHttpClient client = new OkHttpClient.Builder() + .connectTimeout(300, TimeUnit.SECONDS) + .callTimeout(1200, TimeUnit.SECONDS) + .pingInterval(50, TimeUnit.SECONDS) + .readTimeout(600, TimeUnit.SECONDS) + .writeTimeout(600, TimeUnit.SECONDS) + .build(); + + /** + * 执行SSE请求 + * @param url 请求的URL + * @param context 请求上下文 + * @param rp HttpServletResponse对象 + * @throws Exception 异常 + */ + private void executeSSE(String url, String context, HttpServletResponse rp) throws Exception { + ChatGlmDto chatGlmDto = new ChatGlmDto(); + SSEListener sseListener = new SSEListener(chatGlmDto, rp); + ExecuteSSEUtil.executeSSE(url + "?context=" + context, sseListener, JSON.toJSONString(chatGlmDto)); + } + + /** + * 获取文件名 + * @param originalFilename 原始文件名 + * @return 文件名 + */ + private String getFileName(String originalFilename) { + return "uploads/" + originalFilename; + } + + /** + * 获取用户ID + * @return 用户ID + */ + private Long getUserId() { + return LoginHelper.getUserId(); + } + + @Override + public void executeSSE(String endpoint, String originalFilename, String context, HttpServletResponse rp) throws Exception { + String fileName = getFileName(originalFilename); + Long userId = getUserId(); + executeSSE(chatUrl + endpoint + "?filename=" + fileName + "&userId=" + userId, context, rp); + } + + @Override + public void getLog(HttpServletResponse rp) throws Exception { + Long userId = getUserId(); + executeSSE(chatUrl + "/sse/getLog?userId=" + userId, "", rp); + } + + @Override + public R uploadFile(MultipartFile file, String originalFilename) throws IOException, InterruptedException { + String destDir = chatFilePath; + if (originalFilename == null) { + throw new IllegalArgumentException("文件名不能为空"); + } + String suffix = FileUtil.getSuffix(originalFilename); + String destPath = destDir + File.separator + originalFilename; + File destFile = new File(destPath); + FileUtil.writeFromStream(file.getInputStream(), destFile); + + if (!originalFilename.endsWith(".docx")) { + ProcessBuilder builder = new ProcessBuilder("unoconv", "-o", destDir, "-f", "docx", destFile.getAbsolutePath()); + 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失败,请检查文件是否正确~ 错误信息: " + errorMessage; + return R.fail(failMsg, failMsg); + } else { + process.destroyForcibly(); + destPath = destPath.substring(0, destPath.lastIndexOf(".")) + ".docx"; + } + } + + if (!sendRequest(chatUrl + "/sse/upload", destPath)) { + 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; + if (originalFilename == null) { + throw new IllegalArgumentException("文件名不能为空"); + } + String suffix = FileUtil.getSuffix(originalFilename); + String destPath = destDir + File.separator + originalFilename; + File destFile = new File(destPath); + if(url.equals("/sse/upload")){ + FileUtil.writeFromStream(inputStream, destFile); + } + + if (!originalFilename.endsWith(".docx")) { + ProcessBuilder builder = new ProcessBuilder("unoconv", "-o", destDir, "-f", "docx", destFile.getAbsolutePath()); + 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失败,请检查文件是否正确~ 错误信息: " + errorMessage; + return failMsg; + } else { + process.destroyForcibly(); + destPath = destPath.substring(0, destPath.lastIndexOf(".")) + ".docx"; + } + } + + if (!sendRequest(chatUrl + url, destPath)) { + return "文件上传失败"; + } + return "1"; + } + /** + * 发送文件到服务器 + * @param url 服务器URL + * @param filePath 文件路径 + * @return 是否成功 + */ + private boolean sendRequest(String url, String filePath) { + File file = new File(filePath); + RequestBody requestBody = new MultipartBody.Builder() + .setType(MultipartBody.FORM) + .addFormDataPart("file", file.getName(), + RequestBody.create(okhttp3.MediaType.parse(MediaType.APPLICATION_OCTET_STREAM_VALUE), file)) + .build(); + + Request request = new Request.Builder() + .url(url) + .post(requestBody) + .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/service/impl/DocumentTaskResultsServiceImpl.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocumentTaskResultsServiceImpl.java new file mode 100644 index 0000000..82c7bf7 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocumentTaskResultsServiceImpl.java @@ -0,0 +1,138 @@ +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.DocumentTaskResultsBo; +import org.dromara.productManagement.domain.vo.DocumentTaskResultsVo; +import org.dromara.productManagement.domain.DocumentTaskResults; +import org.dromara.productManagement.mapper.DocumentTaskResultsMapper; +import org.dromara.productManagement.service.IDocumentTaskResultsService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 文档任务结果Service业务层处理 + * + * @author Lion Li + * @date 2024-10-23 + */ +@RequiredArgsConstructor +@Service +public class DocumentTaskResultsServiceImpl implements IDocumentTaskResultsService { + + private final DocumentTaskResultsMapper baseMapper; + + /** + * 查询文档任务结果 + * + * @param id 主键 + * @return 文档任务结果 + */ + @Override + public DocumentTaskResultsVo queryById(String id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询文档任务结果列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 文档任务结果分页列表 + */ + @Override + public TableDataInfo queryPageList(DocumentTaskResultsBo 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(DocumentTaskResultsBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(DocumentTaskResultsBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getId() != null, DocumentTaskResults::getId, bo.getId()); + lqw.eq(bo.getDocumentTaskId() != null, DocumentTaskResults::getDocumentTaskId, bo.getDocumentTaskId()); + lqw.eq(StringUtils.isNotBlank(bo.getResult()), DocumentTaskResults::getResult, bo.getResult()); + return lqw; + } + + /** + * 新增文档任务结果 + * + * @param bo 文档任务结果 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(DocumentTaskResultsBo bo) { + DocumentTaskResults add = MapstructUtils.convert(bo, DocumentTaskResults.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改文档任务结果 + * + * @param bo 文档任务结果 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(DocumentTaskResultsBo bo) { + DocumentTaskResults update = MapstructUtils.convert(bo, DocumentTaskResults.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(DocumentTaskResults 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 DocumentTaskResultsVo queryByTaskId(String id) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(DocumentTaskResults::getDocumentTaskId, id); + return baseMapper.selectVoOne(lqw); + } +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocumentTasksPermissionsDetailServiceImpl.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocumentTasksPermissionsDetailServiceImpl.java new file mode 100644 index 0000000..140ff14 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocumentTasksPermissionsDetailServiceImpl.java @@ -0,0 +1,131 @@ +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.DocumentTasksPermissionsDetailBo; +import org.dromara.productManagement.domain.vo.DocumentTasksPermissionsDetailVo; +import org.dromara.productManagement.domain.DocumentTasksPermissionsDetail; +import org.dromara.productManagement.mapper.DocumentTasksPermissionsDetailMapper; +import org.dromara.productManagement.service.IDocumentTasksPermissionsDetailService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 文档任务权限详情Service业务层处理 + * + * @author Lion Li + * @date 2024-11-11 + */ +@RequiredArgsConstructor +@Service +public class DocumentTasksPermissionsDetailServiceImpl implements IDocumentTasksPermissionsDetailService { + + private final DocumentTasksPermissionsDetailMapper baseMapper; + + /** + * 查询文档任务权限详情 + * + * @param id 主键 + * @return 文档任务权限详情 + */ + @Override + public DocumentTasksPermissionsDetailVo queryById(String id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询文档任务权限详情列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 文档任务权限详情分页列表 + */ + @Override + public TableDataInfo queryPageList(DocumentTasksPermissionsDetailBo 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(DocumentTasksPermissionsDetailBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(DocumentTasksPermissionsDetailBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getUserId() != null, DocumentTasksPermissionsDetail::getUserId, bo.getUserId()); + lqw.eq(bo.getRemainingDocumentCount() != null, DocumentTasksPermissionsDetail::getRemainingDocumentCount, bo.getRemainingDocumentCount()); + lqw.eq(StringUtils.isNotBlank(bo.getTaskType()), DocumentTasksPermissionsDetail::getTaskType, bo.getTaskType()); + return lqw; + } + + /** + * 新增文档任务权限详情 + * + * @param bo 文档任务权限详情 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(DocumentTasksPermissionsDetailBo bo) { + DocumentTasksPermissionsDetail add = MapstructUtils.convert(bo, DocumentTasksPermissionsDetail.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改文档任务权限详情 + * + * @param bo 文档任务权限详情 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(DocumentTasksPermissionsDetailBo bo) { + DocumentTasksPermissionsDetail update = MapstructUtils.convert(bo, DocumentTasksPermissionsDetail.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(DocumentTasksPermissionsDetail entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除文档任务权限详情信息 + * + * @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/DocumentTasksPermissionsServiceImpl.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocumentTasksPermissionsServiceImpl.java new file mode 100644 index 0000000..254981b --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocumentTasksPermissionsServiceImpl.java @@ -0,0 +1,181 @@ +package org.dromara.productManagement.service.impl; + +import cn.hutool.core.util.StrUtil; +import org.dromara.common.core.service.DictService; +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.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.stereotype.Service; +import org.dromara.productManagement.domain.bo.DocumentTasksPermissionsBo; +import org.dromara.productManagement.domain.vo.DocumentTasksPermissionsVo; +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; + +/** + * 文档任务权限Service业务层处理 + * + * @author Lion Li + * @date 2024-11-08 + */ +@RequiredArgsConstructor +@Service +public class DocumentTasksPermissionsServiceImpl implements IDocumentTasksPermissionsService { + + private final DocumentTasksPermissionsMapper baseMapper; + private final SysUserMapper userMapper; + private final DictService dictTypeService; + + /** + * 查询文档任务权限 + * + * @param id 主键 + * @return 文档任务权限 + */ + @Override + public DocumentTasksPermissionsVo queryById(String id){ + DocumentTasksPermissionsVo vo = baseMapper.selectVoById(id); + vo.setTaskTypeList(List.of(vo.getTaskType().split(","))); + return vo; + } + + /** + * 分页查询文档任务权限列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 文档任务权限分页列表 + */ + @Override + public TableDataInfo queryPageList(DocumentTasksPermissionsBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + result.getRecords().forEach(r -> r.setTaskTypeList(List.of(r.getTaskType().split(",")))); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的文档任务权限列表 + * + * @param bo 查询条件 + * @return 文档任务权限列表 + */ + @Override + public List queryList(DocumentTasksPermissionsBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(DocumentTasksPermissionsBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(bo.getUserId() != null, DocumentTasksPermissions::getUserId, bo.getUserId()); + lqw.eq(bo.getRoleId() != null, DocumentTasksPermissions::getRoleId, bo.getRoleId()); + lqw.eq(bo.getDailyDocumentCount() != null, DocumentTasksPermissions::getDailyDocumentCount, bo.getDailyDocumentCount()); + lqw.eq(bo.getPriority() != null, DocumentTasksPermissions::getPriority, bo.getPriority()); + lqw.eq(StringUtils.isNotBlank(bo.getTaskType()), DocumentTasksPermissions::getTaskType, bo.getTaskType()); + lqw.orderByAsc(DocumentTasksPermissions::getPriority).orderByDesc(DocumentTasksPermissions::getRoleId); + return lqw; + } + + /** + * 新增文档任务权限 + * + * @param bo 文档任务权限 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(DocumentTasksPermissionsBo bo) { + DocumentTasksPermissions add = MapstructUtils.convert(bo, DocumentTasksPermissions.class); + add.setTaskType(String.join(",", bo.getTaskTypeList())); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改文档任务权限 + * + * @param bo 文档任务权限 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(DocumentTasksPermissionsBo bo) { + DocumentTasksPermissions update = MapstructUtils.convert(bo, DocumentTasksPermissions.class); + update.setTaskType(String.join(",", bo.getTaskTypeList())); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(DocumentTasksPermissions entity){ + //TODO 做一些数据校验,如唯一约束 + Arrays.stream(entity.getTaskType().split(",")).forEach(t -> { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + if (!StrUtil.isBlankIfStr(entity.getUserId())){ + lqw.eq(DocumentTasksPermissions::getUserId, entity.getUserId()); + } + if (!StrUtil.isBlankIfStr(entity.getRoleId())){ + lqw.eq(DocumentTasksPermissions::getRoleId, entity.getRoleId()); + } + lqw.like(DocumentTasksPermissions::getTaskType, t); + //id不能相同 + if(!StrUtil.isBlankIfStr(entity.getId())){ + lqw.ne(DocumentTasksPermissions::getId, entity.getId()); + } + Long count = baseMapper.selectCount(lqw); + if (count > 0 ) { + String label = dictTypeService.getDictLabel("document_task", t); + throw new IllegalArgumentException(label + "已有权限,不能重复添加!"); + } + }); + } + + /** + * 校验并批量删除文档任务权限信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public List getUsersAll() { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(SysUser::getStatus, 0); + return userMapper.selectVoList(lqw); + } + + @Override + public DocumentTasksPermissionsVo getTasksPermissionsByUserId(Long userId) { +// DocumentTasksPermissionsVo documentTasksPermissionsVo = baseMapper.selectDocumentPermissionsByUserId(userId); +// return documentTasksPermissionsVo; + return null; + } +} 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 new file mode 100644 index 0000000..d754eec --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/DocumentTasksServiceImpl.java @@ -0,0 +1,345 @@ +package org.dromara.productManagement.service.impl; + +import cn.dev33.satoken.stp.StpUtil; +import okhttp3.*; +import org.dromara.common.core.service.DictService; +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.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.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.service.IDocAiService; +import org.dromara.system.domain.vo.SysOssVo; +import org.dromara.system.service.ISysOssService; +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 java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 文档任务Service业务层处理 + * + * @author Lion Li + * @date 2024-10-22 + */ +@RequiredArgsConstructor +@Service +@Transactional +public class DocumentTasksServiceImpl implements IDocumentTasksService { + private final OkHttpClient client = new OkHttpClient.Builder().build(); + private final DocumentTasksMapper baseMapper; + private final DocumentTasksPermissionsMapper documentTasksPermissionsMapper; + private final DocumentTasksPermissionsDetailMapper documentTasksPermissionsDetailMapper; + private final ISysOssService ossService; + private final IDocAiService docAiService; + private final DictService dictTypeService; + @Value("${chat.chatUrl}") + private String chatUrl; + /** + * 查询文档任务 + * + * @param id 主键 + * @return 文档任务 + */ + @Override + public DocumentTasksVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询文档任务列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 文档任务分页列表 + */ + @Override + public TableDataInfo queryPageList(DocumentTasksBo 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(DocumentTasksBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(DocumentTasksBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getTaskName()), DocumentTasks::getTaskName, bo.getTaskName()); + // 处理 taskName 是 List 的情况 + List taskNames = bo.getTaskNameList(); + if (taskNames != null && !taskNames.isEmpty()) { + 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()); + return lqw; + } + + /** + * 新增文档任务 + * + * @param bo 文档任务 + * @return 是否新增成功 + */ + @Override + @Transactional + public Boolean insertByBo(DocumentTasksBo bo) throws IOException, InterruptedException { + 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); + } + + }); + } + 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 timestamp = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()); // 获取当前时间戳 + +// // 获取文件扩展名 +// 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) { + // 创建 DocumentTasks 实体并设置属性 + DocumentTasks add = MapstructUtils.convert(bo, DocumentTasks.class); + 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"; +// } + //参数 add.id,taskName。newFileName; + flag = baseMapper.insert(add) > 0; + //获取当前用户的任务优先级 + DocumentTasksPermissionsVo documentTasksPermissionsVo = documentTasksPermissionsMapper.selectDocumentPermissionsByUserIdAndTaskType(LoginHelper.getUserId(),taskName); + Long priority = documentTasksPermissionsVo.getPriority(); +// sendRequest(add.getId(), taskName, "uploads/"+newFileName, priority); + + if (!flag) { + throw new RuntimeException("新增文档任务失败"); + } + } + } + + 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; + } + } + /** + * 修改文档任务 + * + * @param bo 文档任务 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(DocumentTasksBo bo) { +// DocumentTasks update = MapstructUtils.convert(bo, DocumentTasks.class); +//// validEntityBeforeSave(update); +//// return baseMapper.updateById(update) > 0; + List taskNames = bo.getTaskNameList(); + boolean flag = false; + + if (taskNames != null && !taskNames.isEmpty()) { + for (String taskName : taskNames) { + // 创建 DocumentTasks 实体并设置属性 + DocumentTasks update = MapstructUtils.convert(bo, DocumentTasks.class); + update.setTaskName(taskName); + + // 验证实体并保存 + validEntityBeforeSave(update); + flag = baseMapper.updateById(update) > 0; + + if (!flag) { + throw new RuntimeException("新增文档任务失败"); + } + } + } + + return flag; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(DocumentTasks 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 stopTask(Long id) { + 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) + .build(); + + //使用同步调用 + try (Response response = client.newCall(request).execute()) { + if (response.isSuccessful()) { + return response.code(); + } else { + throw new RuntimeException("任务暂停失败: " + response); + } + } catch (IOException e) { + e.printStackTrace(); + } + return 0; + } +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/FileReadInfoServiceImpl.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/FileReadInfoServiceImpl.java new file mode 100644 index 0000000..710569e --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/FileReadInfoServiceImpl.java @@ -0,0 +1,179 @@ +package org.dromara.productManagement.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import okhttp3.*; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.service.OssService; +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.system.domain.vo.SysOssUploadVo; +import org.dromara.system.domain.vo.SysOssVo; +import org.dromara.system.service.ISysOssService; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Service; +import org.dromara.productManagement.domain.bo.FileReadInfoBo; +import org.dromara.productManagement.domain.vo.FileReadInfoVo; +import org.dromara.productManagement.domain.FileReadInfo; +import org.dromara.productManagement.mapper.FileReadInfoMapper; +import org.dromara.productManagement.service.IFileReadInfoService; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.Collection; +import java.util.concurrent.TimeUnit; + +/** + * 文件处理信息表Service业务层处理 + * + * @author Lion Li + * @date 2024-09-20 + */ +@RequiredArgsConstructor +@Service +public class FileReadInfoServiceImpl implements IFileReadInfoService { + + private final FileReadInfoMapper baseMapper; + private final ISysOssService ossService; + @Value("${chat.filePath}") + private String chatFilePath; + @Value("${chat.chatUrl}") + private String chatUrl; + private final OkHttpClient client = new OkHttpClient.Builder() + .connectTimeout(300, TimeUnit.SECONDS)//连接超时(单位:秒) + .callTimeout(1200, TimeUnit.SECONDS)//整个流程耗费的超时时间(单位:秒)--很少人使用 + .pingInterval(50, TimeUnit.SECONDS)//websocket轮训间隔(单位:秒) + .readTimeout(600, TimeUnit.SECONDS)//读取超时(单位:秒) + .writeTimeout(600, TimeUnit.SECONDS)//写入超时(单位:秒) + .build(); + /** + * 查询文件处理信息表 + * + * @param id 主键 + * @return 文件处理信息表 + */ + @Override + public FileReadInfoVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询文件处理信息表列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 文件处理信息表分页列表 + */ + @Override + public TableDataInfo queryPageList(FileReadInfoBo 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(FileReadInfoBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(FileReadInfoBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.like(StringUtils.isNotBlank(bo.getFileName()), FileReadInfo::getFileName, bo.getFileName()); + lqw.eq(StringUtils.isNotBlank(bo.getFileStatus()), FileReadInfo::getFileStatus, bo.getFileStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getFileReadMode()), FileReadInfo::getFileReadMode, bo.getFileReadMode()); + lqw.eq(StringUtils.isNotBlank(bo.getFeedback()), FileReadInfo::getFeedback, bo.getFeedback()); + return lqw; + } + + /** + * 新增文件处理信息表 + * + * @param bo 文件处理信息表 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(FileReadInfoBo bo) { + FileReadInfo add = MapstructUtils.convert(bo, FileReadInfo.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改文件处理信息表 + * + * @param bo 文件处理信息表 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(FileReadInfoBo bo) { + FileReadInfo update = MapstructUtils.convert(bo, FileReadInfo.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(FileReadInfo 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 void importData(MultipartFile file, String context) throws IOException { + RequestBody requestBody = new MultipartBody.Builder() + .setType(MultipartBody.FORM) + .addFormDataPart("file", file.getName(), + RequestBody.create(okhttp3.MediaType.parse(MediaType.APPLICATION_OCTET_STREAM_VALUE), file.getBytes())) + .build(); + Request request = new Request.Builder() + .url(chatUrl+"/upload") // 替换为你的Flask服务器地址 + .post(requestBody) + .build(); + try (Response response = client.newCall(request).execute()) { + if (response.isSuccessful()) { + SysOssVo oss = ossService.upload(file); + String fileName = oss.getFileName(); + } + } catch (IOException e) { + e.printStackTrace(); + } + + } + +} diff --git a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/PmgSupplierProductsServiceImpl.java b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/PmgSupplierProductsServiceImpl.java index 3329a31..3816951 100644 --- a/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/PmgSupplierProductsServiceImpl.java +++ b/zaojiaManagement/zaojia-productManagement/src/main/java/org/dromara/productManagement/service/impl/PmgSupplierProductsServiceImpl.java @@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.fasterxml.jackson.databind.ObjectMapper; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; -import org.dromara.common.elasticsearch.entity.SupplierProductsDTO; +//import org.dromara.common.elasticsearch.entity.SupplierProductsDTO; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; diff --git a/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/DocumentTaskResultsMapper.xml b/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/DocumentTaskResultsMapper.xml new file mode 100644 index 0000000..cd19ff6 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/DocumentTaskResultsMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/DocumentTasksMapper.xml b/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/DocumentTasksMapper.xml new file mode 100644 index 0000000..00aba33 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/DocumentTasksMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/DocumentTasksPermissionsDetailMapper.xml b/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/DocumentTasksPermissionsDetailMapper.xml new file mode 100644 index 0000000..d98b4f0 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/DocumentTasksPermissionsDetailMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/DocumentTasksPermissionsMapper.xml b/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/DocumentTasksPermissionsMapper.xml new file mode 100644 index 0000000..a8f58e3 --- /dev/null +++ b/zaojiaManagement/zaojia-productManagement/src/main/resources/mapper/productManagement/DocumentTasksPermissionsMapper.xml @@ -0,0 +1,28 @@ + + + + +