diff --git a/xinnengyuan/.gitignore b/xinnengyuan/.gitignore index 2adafeb0..e1e3d8ac 100644 --- a/xinnengyuan/.gitignore +++ b/xinnengyuan/.gitignore @@ -54,3 +54,4 @@ docs /file .idea/ chat-memory/ +queries/ diff --git a/xinnengyuan/pom.xml b/xinnengyuan/pom.xml index 7022d665..70e17df4 100644 --- a/xinnengyuan/pom.xml +++ b/xinnengyuan/pom.xml @@ -86,6 +86,15 @@ true + + menu + + menu + info + ruoyi + 123456 + + prod diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml index 229ef4d1..953e8f06 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application-dev.yml @@ -4,7 +4,7 @@ server: port: 8899 --- # 监控中心配置 spring.boot.admin.client: - # 增加客户端开关 + # 增加客户端开关 enabled: false url: http://192.168.110.119:9090/admin instance: @@ -41,7 +41,7 @@ spring: api-key: sk-8d8df92fcbac4bd2922edba30b0bb8fa chat: options: - model: qwen-plus + model: qwen3-max datasource: type: com.zaxxer.hikari.HikariDataSource # 动态数据源文档 https://www.kancloud.cn/tracy5546/dynamic-datasource/content @@ -66,7 +66,7 @@ spring: # username: xinnengyuan # password: mEZPC5Sdf3r2HENi # 从库数据源 -# slave: + # slave: # lazy: true # type: ${spring.datasource.type} # driverClassName: com.mysql.cj.jdbc.Driver @@ -368,3 +368,14 @@ drone: chat: server: port: 19099 +# rabbitmq 配置 +rabbitmq: + exchange-name: dev-normal-exchange + queue-name: dev-normal-queue + routing-key: dev.normal.routing.key + delay-exchange-name: dev-delay-queue + delay-queue-name: dev-delay-exchange + delay-routing-key: dev.delay.routing.key + dead-letter-exchange: dev-dlx-exchange + dead-letter-queue: dev-dlx-queue + dead-letter-routing-key: dev.dlx.routing.key diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application-local.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application-local.yml index 64b0ccdc..38eebf83 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application-local.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application-local.yml @@ -343,3 +343,14 @@ drone: chat: server: port: 18088 +# rabbitmq 配置 +rabbitmq: + exchange-name: local-normal-exchange + queue-name: local-normal-queue + routing-key: local.normal.routing.key + delay-exchange-name: local-delay-queue + delay-queue-name: local-delay-exchange + delay-routing-key: local.delay.routing.key + dead-letter-exchange: local-dlx-exchange + dead-letter-queue: local-dlx-queue + dead-letter-routing-key: local.dlx.routing.key diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application-menu.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application-menu.yml new file mode 100644 index 00000000..68773c98 --- /dev/null +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application-menu.yml @@ -0,0 +1,356 @@ +# 开发环境配置 +server: + # 服务器的HTTP端口,默认为8080 + port: 9528 +--- # 临时文件存储位置 避免临时文件被系统清理报错 +spring.servlet.multipart.location: /ruoyi/server/temp + +--- # 监控中心配置 +spring.boot.admin.client: + # 增加客户端开关 + enabled: false + url: http://localhost:9090/admin + instance: + service-host-type: IP + metadata: + username: ${spring.boot.admin.client.username} + userpassword: ${spring.boot.admin.client.password} + username: @monitor.username@ + password: @monitor.password@ + +--- # snail-job 配置 +snail-job: + enabled: false + # 需要在 SnailJob 后台组管理创建对应名称的组,然后创建任务的时候选择对应的组,才能正确分派任务 + group: "ruoyi_group" + # SnailJob 接入验证令牌 详见 script/sql/ry_job.sql `sj_group_config`表 + token: "SJ_cKqBTPzCsWA3VyuCfFoccmuIEGXjr5KT" + server: + host: 127.0.0.1 + port: 17888 + # 命名空间UUID 详见 script/sql/ry_job.sql `sj_namespace`表`unique_id`字段 + namespace: ${spring.profiles.active} + # 随主应用端口漂移 + port: 2${server.port} + # 客户端ip指定 + host: + # RPC类型: netty, grpc + rpc-type: grpc + +--- # 数据源配置 +spring: + ai: + dashscope: + api-key: sk-8d8df92fcbac4bd2922edba30b0bb8fa + chat: + options: + model: qwen3-max + 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://192.168.110.2:13386/xinnengyuanmenu?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + username: xinnengyuanmenu + password: 2RkXFG8ZE6r5LL7B + # # 从库数据源 + # slave: + # 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: + # 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: 192.168.110.2 + # 端口,默认为6379 + port: 9287 + # 数据库索引 + database: 21 + # redis 密码必须配置 + password: syar23rdsaagdrsa + # 连接超时时间 + 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: false + # 短信拦截限制单手机号每分钟最大发送,只对开启了拦截的配置有效 + 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: AKIDb3JK5dx4wa0DCxWqvxlKejvysZ3ITVJv + access-key-secret: c5LPFsJI8k7GDxTkoeFj4A1ukQr66rPi + signature: 重庆远界大数据研究院 + sdk-app-id: 1401018866 + template-id: 2491779 + config3: + # 注册 + supplier: tencent + access-key-id: AKIDb3JK5dx4wa0DCxWqvxlKejvysZ3ITVJv + access-key-secret: c5LPFsJI8k7GDxTkoeFj4A1ukQr66rPi + signature: 重庆远界大数据研究院 + sdk-app-id: 1401018866 + template-id: 2491776 + config4: + # 质量工单逾期 + supplier: tencent + access-key-id: AKIDb3JK5dx4wa0DCxWqvxlKejvysZ3ITVJv + access-key-secret: c5LPFsJI8k7GDxTkoeFj4A1ukQr66rPi + signature: 重庆远界大数据研究院 + sdk-app-id: 1401018866 + template-id: 2534747 + config5: + # 设计图纸 + supplier: tencent + access-key-id: AKIDb3JK5dx4wa0DCxWqvxlKejvysZ3ITVJv + access-key-secret: c5LPFsJI8k7GDxTkoeFj4A1ukQr66rPi + signature: 重庆远界大数据研究院 + sdk-app-id: 1401018866 + template-id: 2534750 + config6: + # 安全工单 + supplier: tencent + access-key-id: AKIDb3JK5dx4wa0DCxWqvxlKejvysZ3ITVJv + access-key-secret: c5LPFsJI8k7GDxTkoeFj4A1ukQr66rPi + signature: 重庆远界大数据研究院 + sdk-app-id: 1401018866 + template-id: 2534848 + +--- # 三方授权 +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 +# 和风天气 https://dev.qweather.com/ +weather: + key-id: T65EAABUXC + project-id: 2JTHPUQ5YY + private-key: MC4CAQAwBQYDK2VwBCIEIMAglX7IsxYiTeM+FXXnvCUsIggajeP4s8gAllewm6BN + api-host: n35rk53njv.re.qweatherapi.com +# dxf转 geojson 执行文件名 +dxf2GeoJson: + file-name: main +ys7: + app-key: xxx + app-secret: xxx + job: + capture-enabled: false # 控制是否启用萤石抓拍任务 + device-sync-enabled: false # 控制是否同步萤石设备 +# 斯巴达算法 +sparta: + url: http://119.3.204.120:8040 + client-id: test + client-secret: 115fcb08fa6742a1b086d9bb80a6ad59 +# 身份证加密密钥(32 位) +id-card: + encrypt-key: 7ae260d150a14027d2238a1cf80a48ef +recognizer: + url: http://192.168.110.5:50071 + +qrCode: + url: http://xny.yj-3d.com:7788 +# 无人机大图 +drone: + url: http://192.168.110.2:9512 +# 聊天服务 +chat: + server: + port: 18088 +# rabbitmq 配置 +rabbitmq: + exchange-name: local-normal-exchange + queue-name: local-normal-queue + routing-key: local.normal.routing.key + delay-exchange-name: local-delay-queue + delay-queue-name: local-delay-exchange + delay-routing-key: local.delay.routing.key + dead-letter-exchange: local-dlx-exchange + dead-letter-queue: local-dlx-queue + dead-letter-routing-key: local.dlx.routing.key diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application-prod.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application-prod.yml index 235b008a..5b6e6e05 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application-prod.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application-prod.yml @@ -358,3 +358,14 @@ drone: chat: server: port: 19099 +# rabbitmq 配置 +rabbitmq: + exchange-name: prod-normal-exchange + queue-name: prod-normal-queue + routing-key: prod.normal.routing.key + delay-exchange-name: prod-delay-queue + delay-queue-name: prod-delay-exchange + delay-routing-key: prod.delay.routing.key + dead-letter-exchange: prod-dlx-exchange + dead-letter-queue: prod-dlx-queue + dead-letter-routing-key: prod.dlx.routing.key diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application.yml index 9b5259f3..6cf84cfe 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application.yml @@ -95,7 +95,13 @@ spring: deserialization: # 允许对象忽略json中不存在的属性 fail_on_unknown_properties: false - + rabbitmq: + host: 192.168.110.2 + port: 5672 + username: admin + password: yuanjiexny + publisher-returns: true + publisher-confirm-type: correlated # Sa-Token配置 sa-token: # token名称 (同时也是cookie名称) @@ -109,7 +115,7 @@ sa-token: # token有效期,单位s 默认30天, -1代表永不过期 timeout: 2592000 # token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒 - active-timeout: 86400 + active-timeout: 2592000 # 同一账号最大登录数量,-1代表不限 max-login-count: -1 @@ -305,6 +311,12 @@ springdoc: packages-to-scan: org.dromara.ai - group: 31.投标管理模块 packages-to-scan: org.dromara.bidding + - group: 32.设备模块 + packages-to-scan: org.dromara.device + - group: 33.摄像头模块 + packages-to-scan: org.dromara.other + - group: 34.机械模块 + packages-to-scan: org.dromara.mechanical # knife4j的增强配置,不需要增强可以不配 knife4j: enable: true diff --git a/xinnengyuan/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/TimestampUtils.java b/xinnengyuan/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/TimestampUtils.java new file mode 100644 index 00000000..b35d6364 --- /dev/null +++ b/xinnengyuan/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/TimestampUtils.java @@ -0,0 +1,146 @@ +package org.dromara.common.core.utils; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.TimeZone; + +/** + * 时间戳转换工具类(包含时分秒提取) + */ +public class TimestampUtils { + + // 默认时区(东八区) + private static final TimeZone DEFAULT_TIME_ZONE = TimeZone.getTimeZone("GMT+8"); + + // 完整日期格式 + private static final String FULL_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; + + // 时分秒格式 + private static final String TIME_FORMAT = "HH:mm:ss"; + + // 日期格式 + private static final String DATE_FORMAT = "yyyy-MM-dd"; + + /** + * 将日期字符串转为秒级时间戳(优化版) + * 支持格式:"2025-12-03 23:59:59"、"2025-12-03"等 + * @param dateStr 日期字符串 + * @return 秒级时间戳 + */ + public static Long parseDateToTimestamp(String dateStr) { + if (StrUtil.isBlank(dateStr)) { + return null; + } + + // 使用Hutool的DateUtil进行智能解析(推荐) + try { + Date date = DateUtil.parse(dateStr); + return date.getTime() / 1000L; // 转为秒级时间戳 + } catch (Exception e) { + throw new IllegalArgumentException( + String.format("日期格式错误:%s,支持格式:yyyy-MM-dd HH:mm:ss、yyyy-MM-dd等", dateStr) + ); + } + } + + /** + * 将时间戳转换为完整日期格式(yyyy-MM-dd HH:mm:ss) + */ + public static String formatTimestamp(Object timestamp) { + if (timestamp == null) { + return null; + } + + String timestampStr = timestamp.toString().trim(); + if (StrUtil.isBlank(timestampStr)) { + return null; + } + + Long time = parseToMilliseconds(timestampStr); + SimpleDateFormat sdf = new SimpleDateFormat(FULL_DATE_FORMAT); + sdf.setTimeZone(DEFAULT_TIME_ZONE); + return sdf.format(new Date(time)); + } + + /** + * 提取时间戳中的时分秒部分(HH:mm:ss) + */ + public static String extractTime(Object timestamp) { + if (timestamp == null) { + return null; + } + + String timestampStr = timestamp.toString().trim(); + if (StrUtil.isBlank(timestampStr)) { + return null; + } + + Long time = parseToMilliseconds(timestampStr); + SimpleDateFormat sdf = new SimpleDateFormat(TIME_FORMAT); + sdf.setTimeZone(DEFAULT_TIME_ZONE); + return sdf.format(new Date(time)); + } + + /** + * 提取时间戳中的日期部分(yyyy-MM-dd) + */ + public static String extractDate(Object timestamp) { + if (timestamp == null) { + return null; + } + + String timestampStr = timestamp.toString().trim(); + if (StrUtil.isBlank(timestampStr)) { + return null; + } + + Long time = parseToMilliseconds(timestampStr); + SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); + sdf.setTimeZone(DEFAULT_TIME_ZONE); + return sdf.format(new Date(time)); + } + + /** + * 解析时间戳字符串为毫秒级时间戳 + */ + private static Long parseToMilliseconds(String timestampStr) { + try { + Long time = Long.parseLong(timestampStr); + // 10位秒级时间戳转为13位毫秒级 + if (timestampStr.length() == 10) { + time = time * 1000; + } + return time; + } catch (NumberFormatException e) { + throw new IllegalArgumentException("时间戳格式错误:" + timestampStr); + } + } + + /** + * 获取时间戳对应的小时 + */ + public static int getHour(Object timestamp) { + String timeStr = extractTime(timestamp); + return Integer.parseInt(timeStr.split(":")[0]); + } + + /** + * 获取时间戳对应的分钟 + */ + public static int getMinute(Object timestamp) { + String timeStr = extractTime(timestamp); + return Integer.parseInt(timeStr.split(":")[1]); + } + + /** + * 获取时间戳对应的秒 + */ + public static int getSecond(Object timestamp) { + String timeStr = extractTime(timestamp); + return Integer.parseInt(timeStr.split(":")[2]); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/pom.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/pom.xml index 4bffab53..c9925bb7 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/pom.xml +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/pom.xml @@ -29,6 +29,10 @@ + + org.springframework.boot + spring-boot-starter-amqp + com.twelvemonkeys.imageio diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/DashScopeChat.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/DashScopeChat.java index b24f8d6d..91c9932f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/DashScopeChat.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/DashScopeChat.java @@ -25,7 +25,7 @@ import java.util.concurrent.CompletableFuture; public class DashScopeChat { @Resource - private SimpleChat simpleChat; + private DashScopeSimpleChat dashScopeSimpleChat; @Resource private IAIChatMemoryService chatMemoryService; @@ -66,10 +66,8 @@ public class DashScopeChat { .collectList() .flatMapMany(tokens -> { String aiResponse = String.join("", tokens); - if (isFirst) { - // 异步生成标题 - generateChatTitleAsync(chatId, message, aiResponse, userId); - } + // 异步生成标题 + generateChatTitleAsync(chatId, message, aiResponse, userId); // 返回完整的流结果 return Flux.fromIterable(tokens); }); @@ -100,7 +98,7 @@ public class DashScopeChat { 用户:%s AI:%s """, userMessage, aiResponse); - String title = simpleChat.doChat(prompt); + String title = dashScopeSimpleChat.doChat(prompt); log.info("用户:{} 生成标题成功:{} -> {}", userId, chatId, title); // 保存对话数据 AIChatMemory memory = new AIChatMemory(); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/SimpleChat.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/DashScopeSimpleChat.java similarity index 88% rename from xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/SimpleChat.java rename to xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/DashScopeSimpleChat.java index 4f2dbdff..eaa2e68d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/SimpleChat.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/ai/chat/DashScopeSimpleChat.java @@ -9,11 +9,11 @@ import org.springframework.stereotype.Component; * @date 2025-11-04 15:26 */ @Component -public class SimpleChat { +public class DashScopeSimpleChat { private final ChatClient dashScopeChatClient; - public SimpleChat(ChatClient.Builder chatClientBuilder) { + public DashScopeSimpleChat(ChatClient.Builder chatClientBuilder) { this.dashScopeChatClient = chatClientBuilder // 设置 ChatClient 中 ChatModel 的 Options 参数 .defaultOptions( diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/PersonalHomeController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/PersonalHomeController.java index c481c94b..563b71b6 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/PersonalHomeController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/PersonalHomeController.java @@ -41,7 +41,6 @@ import org.dromara.patch.service.IPdMasterService; import org.dromara.project.service.IBusProjectService; import org.dromara.system.domain.SysMenu; import org.dromara.system.domain.vo.RouterVo; -import org.dromara.system.mapper.SysRoleMapper; import org.dromara.system.service.impl.SysMenuServiceImpl; import org.dromara.system.service.impl.SysUserServiceImpl; import org.dromara.warm.flow.core.FlowEngine; @@ -97,8 +96,7 @@ public class PersonalHomeController extends BaseController { @Resource private IBusProjectService projectService; - private final SysRoleMapper roleMapper; - private final SysMenuServiceImpl sysMenuService; + private final SysMenuServiceImpl sysMenuService; // region AI 模块 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/UEController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/UEController.java new file mode 100644 index 00000000..efc4a1d4 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/UEController.java @@ -0,0 +1,39 @@ +package org.dromara.bigscreen.controller; + +import jakarta.annotation.Resource; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +import org.dromara.bigscreen.domain.vo.ProjectPeopleVo; +import org.dromara.bigscreen.service.ProjectBigScreenService; +import org.dromara.common.core.domain.R; +import org.dromara.project.domain.vo.project.BusProjectVo; +import org.dromara.project.service.IBusProjectService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * UE大屏 + * + * @author Lion Li + * @date 2025-11-04 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/UE/screen") +public class UEController { + + @Resource + private IBusProjectService projectService; + + + @GetMapping("/projectInfo/{projectId}") + public R getProjectPeople(@NotNull(message = "主键不能为空") + @PathVariable Long projectId) { + return R.ok(projectService.selectById(projectId)); + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusTotalsupplyplanServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusTotalsupplyplanServiceImpl.java index 1b2c659f..a6959892 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusTotalsupplyplanServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusTotalsupplyplanServiceImpl.java @@ -1,6 +1,7 @@ package org.dromara.cailiaoshebei.service.impl; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelReader; import com.alibaba.excel.read.metadata.ReadSheet; @@ -104,7 +105,7 @@ public class BusTotalsupplyplanServiceImpl extends ServiceImpl buildQueryWrapper(BusTotalsupplyplanBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(bo.getProjectId() != null ,BusTotalsupplyplan::getProjectId,bo.getProjectId()); + lqw.eq(bo.getProjectId() != null, BusTotalsupplyplan::getProjectId, bo.getProjectId()); lqw.eq(StringUtils.isNotBlank(bo.getTexture()), BusTotalsupplyplan::getTexture, bo.getTexture()); lqw.eq(StringUtils.isNotBlank(bo.getBrand()), BusTotalsupplyplan::getBrand, bo.getBrand()); lqw.eq(StringUtils.isNotBlank(bo.getQualityStandard()), BusTotalsupplyplan::getQualityStandard, bo.getQualityStandard()); @@ -239,7 +240,14 @@ public class BusTotalsupplyplanServiceImpl extends ServiceImpl data.getId() != null).toList(); + if (CollUtil.isEmpty(allData)) { throw new ServiceException("未读取到有效数据", HttpStatus.BAD_REQUEST); } // 处理导入的数据 @@ -248,7 +256,7 @@ public class BusTotalsupplyplanServiceImpl extends ServiceImpl list(BusComplaintBoxBo bo, PageQuery pageQuery) { + LoginUser loginUser = LoginHelper.getLoginUser(); + if (loginUser != null) { + bo.setUserId(loginUser.getUserId()); + } + return busComplaintBoxService.appQueryPageList(bo, pageQuery); + } + + + + /** + * 获取意见箱详细信息 + * + * @param id 主键 + */ +// @SaCheckPermission("appComplaintBox:complaintBox:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(busComplaintBoxService.appQueryById(id)); + } + + /** + * 新增意见箱 + */ +// @SaCheckPermission("appComplaintBox:complaintBox:add") + @Log(title = "意见箱", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody BusComplaintBoxBo bo) { + return toAjax(busComplaintBoxService.insertByBo(bo)); + } + + + /** + * 新增意见回复 + */ +// @SaCheckPermission("appComplaintBox:complaintBox:add") + @Log(title = "意见箱", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/postAReply") + public R postAReply(@Validated(AddGroup.class) @RequestBody BusComplaintBoxMessageLoggingBo bo) { + return toAjax(busComplaintBoxMessageLoggingService.insertAppByBo(bo)); + } + + /** + * 修改意见阅读状态 + */ +// @SaCheckPermission("appComplaintBox:complaintBox:edit") + @Log(title = "意见箱", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/editCheckStatus") + public R editCheckStatus(@Validated(EditGroup.class) @RequestBody BusComplaintBoxBo bo) { + return toAjax(busComplaintBoxService.editCheckStatus(bo)); + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/app/domain/vo/AppDetailsOfTheOpinionVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/app/domain/vo/AppDetailsOfTheOpinionVo.java new file mode 100644 index 00000000..72e47704 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/app/domain/vo/AppDetailsOfTheOpinionVo.java @@ -0,0 +1,16 @@ +package org.dromara.complaintBox.app.domain.vo; + +import lombok.Data; +import org.dromara.complaintBox.domain.vo.BusComplaintBoxMessageLoggingVo; +import org.dromara.complaintBox.domain.vo.BusComplaintBoxVo; + +import java.io.Serializable; +import java.util.List; + +@Data +public class AppDetailsOfTheOpinionVo implements Serializable { + + private BusComplaintBoxVo busComplaintBoxVo; + + private List messageLoggingVos; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/controller/BusComplaintBoxController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/controller/BusComplaintBoxController.java new file mode 100644 index 00000000..6137f009 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/controller/BusComplaintBoxController.java @@ -0,0 +1,124 @@ +package org.dromara.complaintBox.controller; + +import lombok.RequiredArgsConstructor; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.complaintBox.domain.bo.BusComplaintBoxDisposeLoggingBo; +import org.dromara.complaintBox.domain.bo.BusComplaintBoxMessageLoggingBo; +import org.dromara.complaintBox.domain.vo.BusComplaintBoxDisposeLoggingVo; +import org.dromara.complaintBox.domain.vo.ComplaintBoxCountVo; +import org.dromara.complaintBox.domain.vo.DetailsOfTheOpinionVo; +import org.dromara.complaintBox.service.IBusComplaintBoxDisposeLoggingService; +import org.dromara.complaintBox.service.IBusComplaintBoxMessageLoggingService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +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.complaintBox.domain.vo.BusComplaintBoxVo; +import org.dromara.complaintBox.domain.bo.BusComplaintBoxBo; +import org.dromara.complaintBox.service.IBusComplaintBoxService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +import java.util.List; + +/** + * 意见箱 + * + * @author Lion Li + * @date 2025-11-29 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/complaintBox/complaintBox") +public class BusComplaintBoxController extends BaseController { + + private final IBusComplaintBoxService busComplaintBoxService; + @Lazy + @Autowired + private IBusComplaintBoxMessageLoggingService busComplaintBoxMessageLoggingService; + @Lazy + @Autowired + private IBusComplaintBoxDisposeLoggingService disposeLoggingService; + + + /** + * 查询意见箱列表 + */ + @SaCheckPermission("complaintBox:complaintBox:list") + @GetMapping("/list") + public TableDataInfo list(BusComplaintBoxBo bo, PageQuery pageQuery) { + return busComplaintBoxService.queryPageList(bo, pageQuery); + } + /** + * 查询意见处理记录列表 + */ + @SaCheckPermission("complaintBox:complaintBox:list") + @GetMapping("/getDisposeLogList") + public TableDataInfo getDisposeLogList(BusComplaintBoxDisposeLoggingBo bo, PageQuery pageQuery) { + return disposeLoggingService.queryPageList(bo, pageQuery); + } + /** + * web获取各个处理状态数量 + */ + @SaCheckPermission("complaintBox:complaintBox:list") + @GetMapping("/getCount") + public R> getCount(BusComplaintBoxBo bo) { + return R.ok(busComplaintBoxService.getCount(bo)); + } + + /** + * 获取意见箱详细信息 + * + * @param id 主键 + */ +// @SaCheckPermission("complaintBox:complaintBox:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(busComplaintBoxService.getInfo(id)); + } + + /** + * 新增意见回复 + */ + @SaCheckPermission("complaintBox:complaintBox:add") + @Log(title = "意见箱", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/postAReply") + public R postAReply(@Validated(AddGroup.class) @RequestBody BusComplaintBoxMessageLoggingBo bo) { + return toAjax(busComplaintBoxMessageLoggingService.insertWebByBo(bo)); + } + + + /** + * 修改意见阅读状态 + */ + @SaCheckPermission("complaintBox:complaintBox:edit") + @Log(title = "意见箱", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/editCheckStatus") + public R editCheckStatus(@Validated(EditGroup.class) @RequestBody BusComplaintBoxBo bo) { + return toAjax(busComplaintBoxService.editCheckStatus(bo)); + } + + /** + * 修改意见阅读状态 + */ + @SaCheckPermission("complaintBox:complaintBox:edit") + @Log(title = "意见箱", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/editStatus") + public R editStatus(@Validated(EditGroup.class) @RequestBody BusComplaintBoxBo bo) { + return toAjax(busComplaintBoxService.editStatus(bo)); + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/BusComplaintBox.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/BusComplaintBox.java new file mode 100644 index 00000000..108d526c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/BusComplaintBox.java @@ -0,0 +1,91 @@ +package org.dromara.complaintBox.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 意见箱对象 bus_complaint_box + * + * @author Lion Li + * @date 2025-11-29 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("bus_complaint_box") +public class BusComplaintBox extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 公司id(当前登录人的顶层下一级部门id) + */ + private Long companyId; + + /** + * 项目id + */ + private Long projectId; + + /** + * 用户id + */ + private Long userId; + + /** + * 用户名 + */ + private String userName; + + /** + * 头像地址 + */ + private Long avatar; + + /** + * 标题 + */ + private String title; + + /** + * 意见类型(1、功能建议,2、Bug反馈,3、体验问题,4其他意见) + */ + private String opinionType; + + /** + * 详细描述 + */ + private String detail; + + /** + * 上传图片(id,id之间使用','分割) + */ + private String fileId; + + /** + * 是否匿名提交(0、否,1、是) + */ + private String isCryptonym; + + /** + * 处理状态(0、待处理,5、处理中,9、已解决,10、退回,14、不予解决()) + */ + private String status; + + /** + * 当前处理人id + */ + private Long currentDisposeUserId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/BusComplaintBoxDisposeLogging.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/BusComplaintBoxDisposeLogging.java new file mode 100644 index 00000000..8a874e68 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/BusComplaintBoxDisposeLogging.java @@ -0,0 +1,61 @@ +package org.dromara.complaintBox.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 意见箱-意见处理记录对象 bus_complaint_box_dispose_logging + * + * @author Lion Li + * @date 2025-11-29 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("bus_complaint_box_dispose_logging") +public class BusComplaintBoxDisposeLogging extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 意见id + */ + private Long complaintId; + + /** + * 用户id + */ + private Long userId; + + /** + * 用户名 + */ + private String userName; + + /** + * 头像地址 + */ + private Long avatar; + + /** + * 是否退回(0、否,1、是) + */ + private String isRefund; + + /** + * 退回原因 + */ + private String cause; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/BusComplaintBoxMessageLogging.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/BusComplaintBoxMessageLogging.java new file mode 100644 index 00000000..9ccaf50a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/BusComplaintBoxMessageLogging.java @@ -0,0 +1,76 @@ +package org.dromara.complaintBox.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 意见箱-意见沟通记录对象 bus_complaint_box_message_logging + * + * @author Lion Li + * @date 2025-11-29 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("bus_complaint_box_message_logging") +public class BusComplaintBoxMessageLogging extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 意见id + */ + private Long complaintId; + + /** + * 回复用户id + */ + private Long replyUserId; + + /** + * 回复用户名 + */ + private String replyUserName; + + /** + * 回复用户头像地址 + */ + private Long replyAvatar; + + /** + * 被回复用户id + */ + private Long repliedUserId; + + /** + * 被回复用户名 + */ + private String repliedUserName; + + /** + * 被回复用户头像地址 + */ + private Long repliedAvatar; + + /** + * 消息内容 + */ + private String details; + + /** + * 处理状态(0、未读,1、已读) + */ + private String status; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/bo/BusComplaintBoxBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/bo/BusComplaintBoxBo.java new file mode 100644 index 00000000..c99a891f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/bo/BusComplaintBoxBo.java @@ -0,0 +1,95 @@ +package org.dromara.complaintBox.domain.bo; + +import org.dromara.complaintBox.domain.BusComplaintBox; +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.*; + +/** + * 意见箱业务对象 bus_complaint_box + * + * @author Lion Li + * @date 2025-11-29 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = BusComplaintBox.class, reverseConvertGenerate = false) +public class BusComplaintBoxBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 公司id(当前登录人的顶层下一级部门id) + */ + private Long companyId; + + /** + * 项目id + */ + private Long projectId; + + /** + * 用户id + */ + @NotNull(message = "主键ID不能为空", groups = { AddGroup.class }) + private Long userId; + /** + * 当前处理人id + */ + private Long currentDisposeUserId; + + /** + * 用户名 + */ + private String userName; + + /** + * 头像地址 + */ + private Long avatar; + + /** + * 标题 + */ + private String title; + + /** + * 意见类型(1、功能建议,2、Bug反馈,3、体验问题,4其他意见) + */ + private String opinionType; + + /** + * 详细描述 + */ + private String detail; + + /** + * 上传图片(id,id之间使用','分割) + */ + private String fileId; + + /** + * 是否匿名提交(0、否,1、是) + */ + private String isCryptonym; + + /** + * 处理状态(0、待处理,5、处理中,9、已解决,14、关闭) + */ + private String status; + + /** + * 退回原因 + */ + private String cause; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/bo/BusComplaintBoxDisposeLoggingBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/bo/BusComplaintBoxDisposeLoggingBo.java new file mode 100644 index 00000000..a8b74939 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/bo/BusComplaintBoxDisposeLoggingBo.java @@ -0,0 +1,60 @@ +package org.dromara.complaintBox.domain.bo; + +import org.dromara.complaintBox.domain.BusComplaintBoxDisposeLogging; +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.*; + +/** + * 意见箱-意见处理记录业务对象 bus_complaint_box_dispose_logging + * + * @author Lion Li + * @date 2025-11-29 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = BusComplaintBoxDisposeLogging.class, reverseConvertGenerate = false) +public class BusComplaintBoxDisposeLoggingBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 意见id + */ + private Long complaintId; + + /** + * 用户id + */ + private Long userId; + + /** + * 用户名 + */ + private String userName; + + /** + * 头像地址 + */ + private Long avatar; + + /** + * 是否退回(0、否,1、是) + */ + private String isRefund; + + /** + * 退回原因 + */ + private String cause; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/bo/BusComplaintBoxMessageLoggingBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/bo/BusComplaintBoxMessageLoggingBo.java new file mode 100644 index 00000000..1da3700c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/bo/BusComplaintBoxMessageLoggingBo.java @@ -0,0 +1,80 @@ +package org.dromara.complaintBox.domain.bo; + +import org.dromara.complaintBox.domain.BusComplaintBoxMessageLogging; +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.*; + +/** + * 意见箱-意见沟通记录业务对象 bus_complaint_box_message_logging + * + * @author Lion Li + * @date 2025-11-29 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = BusComplaintBoxMessageLogging.class, reverseConvertGenerate = false) +public class BusComplaintBoxMessageLoggingBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 意见id + */ + private Long complaintId; + + /** + * 回复用户id + */ + private Long replyUserId; + + /** + * 回复用户名 + */ + private String replyUserName; + + /** + * 回复用户头像地址 + */ + private Long replyAvatar; + + /** + * 被回复用户id + */ + private Long repliedUserId; + + /** + * 被回复用户名 + */ + private String repliedUserName; + + /** + * 被回复用户头像地址 + */ + private Long repliedAvatar; + + /** + * 消息内容 + */ + private String details; + + /** + * 处理状态(0、未读,1、已读) + */ + private String status; + + /** + * 上一条沟通记录id + */ + private Long oldId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/BusComplaintBoxDisposeLoggingVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/BusComplaintBoxDisposeLoggingVo.java new file mode 100644 index 00000000..26b3108c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/BusComplaintBoxDisposeLoggingVo.java @@ -0,0 +1,82 @@ +package org.dromara.complaintBox.domain.vo; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import org.dromara.complaintBox.domain.BusComplaintBoxDisposeLogging; +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; + + + +/** + * 意见箱-意见处理记录视图对象 bus_complaint_box_dispose_logging + * + * @author Lion Li + * @date 2025-11-29 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BusComplaintBoxDisposeLogging.class) +public class BusComplaintBoxDisposeLoggingVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 意见id + */ + @ExcelProperty(value = "意见id") + private Long complaintId; + + /** + * 用户id + */ + @ExcelProperty(value = "用户id") + private Long userId; + + /** + * 用户名 + */ + @ExcelProperty(value = "用户名") + private String userName; + + /** + * 头像地址 + */ + @ExcelProperty(value = "头像地址") + private Long avatar; + + /** + * 是否退回(0、否,1、是) + */ + @ExcelProperty(value = "是否退回", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=、否,1、是") + private String isRefund; + + /** + * 退回原因 + */ + @ExcelProperty(value = "退回原因") + private String cause; + + /** + * 创建时间 + */ + private Date createTime; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/BusComplaintBoxMessageLoggingVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/BusComplaintBoxMessageLoggingVo.java new file mode 100644 index 00000000..d4fbea39 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/BusComplaintBoxMessageLoggingVo.java @@ -0,0 +1,99 @@ +package org.dromara.complaintBox.domain.vo; + +import org.dromara.complaintBox.domain.BusComplaintBoxMessageLogging; +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; + + + +/** + * 意见箱-意见沟通记录视图对象 bus_complaint_box_message_logging + * + * @author Lion Li + * @date 2025-11-29 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BusComplaintBoxMessageLogging.class) +public class BusComplaintBoxMessageLoggingVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 意见id + */ + @ExcelProperty(value = "意见id") + private Long complaintId; + + /** + * 回复用户id + */ + private Long replyUserId; + + /** + * 回复用户名 + */ + private String replyUserName; + + /** + * 回复用户头像地址 + */ + private Long replyAvatar; + private String replyAvatarUrl; + + /** + * 被回复用户id + */ + private Long repliedUserId; + + /** + * 被回复用户名 + */ + private String repliedUserName; + + /** + * 被回复用户头像地址 + */ + private Long repliedAvatar; + private String repliedAvatarUrl; + + /** + * 消息内容 + */ + @ExcelProperty(value = "消息内容") + private String details; + + /** + * 处理状态(0、未读,1、已读) + */ + @ExcelProperty(value = "处理状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=、未读,1、已读") + private String status; + + /** + * 发起人类型(0、发起人,1、处理人) + */ + private Integer type; + + /** + * 创建时间 + */ + private Date createTime; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/BusComplaintBoxVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/BusComplaintBoxVo.java new file mode 100644 index 00000000..a344d742 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/BusComplaintBoxVo.java @@ -0,0 +1,125 @@ +package org.dromara.complaintBox.domain.vo; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import org.dromara.complaintBox.domain.BusComplaintBox; +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; + + +/** + * 意见箱视图对象 bus_complaint_box + * + * @author Lion Li + * @date 2025-11-29 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = BusComplaintBox.class) +public class BusComplaintBoxVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 公司id(当前登录人的顶层下一级部门id) + */ + @ExcelProperty(value = "公司id", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "当=前登录人的顶层下一级部门id") + private Long companyId; + + /** + * 项目id + */ + @ExcelProperty(value = "项目id") + private Long projectId; + + /** + * 用户id + */ + @ExcelProperty(value = "用户id") + private Long userId; + + /** + * 用户名 + */ + @ExcelProperty(value = "用户名") + private String userName; + + /** + * 头像地址 + */ + @ExcelProperty(value = "头像地址") + private Long avatar; + private String avatarUrl; + + /** + * 标题 + */ + @ExcelProperty(value = "标题") + private String title; + + /** + * 意见类型(1、功能建议,2、Bug反馈,3、体验问题,4其他意见) + */ + @ExcelProperty(value = "意见类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1=、功能建议,2、Bug反馈,3、体验问题,4其他意见") + private String opinionType; + + /** + * 详细描述 + */ + @ExcelProperty(value = "详细描述") + private String detail; + + /** + * 上传图片(id,id之间使用','分割) + */ + @ExcelProperty(value = "上传图片", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "i=d,id之间使用','分割") + private String fileId; + private List fileUrls; + + /** + * 是否匿名提交(0、否,1、是) + */ + @ExcelProperty(value = "是否匿名提交", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=、否,1、是") + private String isCryptonym; + + /** + * 处理状态(0、待处理,5、处理中,9、已解决,14、关闭) + */ + @ExcelProperty(value = "处理状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=、待处理,5、处理中,9、已解决,14、关闭") + private String status; + + /** + * 当前处理人id + */ + private Long currentDisposeUserId; + + private Integer count; + + /** + * 创建时间 + */ + private Date createTime; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/ComplaintBoxCountVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/ComplaintBoxCountVo.java new file mode 100644 index 00000000..646e0b70 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/ComplaintBoxCountVo.java @@ -0,0 +1,18 @@ +package org.dromara.complaintBox.domain.vo; + +import lombok.Data; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; + +import java.io.Serializable; + +@Data +public class ComplaintBoxCountVo implements Serializable { + + private String type; + +// @Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "type",other = "opinion_processing_status") + private String typeName; + + private Integer count; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/DetailsOfTheOpinionVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/DetailsOfTheOpinionVo.java new file mode 100644 index 00000000..d5e2bc22 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/domain/vo/DetailsOfTheOpinionVo.java @@ -0,0 +1,14 @@ +package org.dromara.complaintBox.domain.vo; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +public class DetailsOfTheOpinionVo implements Serializable { + + private BusComplaintBoxVo busComplaintBoxVo; + + private List messageLoggingVos; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/mapper/BusComplaintBoxDisposeLoggingMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/mapper/BusComplaintBoxDisposeLoggingMapper.java new file mode 100644 index 00000000..833d26fb --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/mapper/BusComplaintBoxDisposeLoggingMapper.java @@ -0,0 +1,15 @@ +package org.dromara.complaintBox.mapper; + +import org.dromara.complaintBox.domain.BusComplaintBoxDisposeLogging; +import org.dromara.complaintBox.domain.vo.BusComplaintBoxDisposeLoggingVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 意见箱-意见处理记录Mapper接口 + * + * @author Lion Li + * @date 2025-11-29 + */ +public interface BusComplaintBoxDisposeLoggingMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/mapper/BusComplaintBoxMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/mapper/BusComplaintBoxMapper.java new file mode 100644 index 00000000..03ba0d72 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/mapper/BusComplaintBoxMapper.java @@ -0,0 +1,26 @@ +package org.dromara.complaintBox.mapper; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Param; +import org.dromara.complaintBox.domain.BusComplaintBox; +import org.dromara.complaintBox.domain.bo.BusComplaintBoxBo; +import org.dromara.complaintBox.domain.vo.BusComplaintBoxVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.complaintBox.domain.vo.ComplaintBoxCountVo; + +import java.util.List; + +/** + * 意见箱Mapper接口 + * + * @author Lion Li + * @date 2025-11-29 + */ +public interface BusComplaintBoxMapper extends BaseMapperPlus { + + Page selectVoPageList(@Param("page") Page page, @Param("bo") BusComplaintBoxBo bo); + + Page selectVoPageWebList(@Param("page") Page page, @Param("bo") BusComplaintBoxBo bo); + + List getCount(@Param("bo") BusComplaintBoxBo bo); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/mapper/BusComplaintBoxMessageLoggingMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/mapper/BusComplaintBoxMessageLoggingMapper.java new file mode 100644 index 00000000..744f6045 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/mapper/BusComplaintBoxMessageLoggingMapper.java @@ -0,0 +1,15 @@ +package org.dromara.complaintBox.mapper; + +import org.dromara.complaintBox.domain.BusComplaintBoxMessageLogging; +import org.dromara.complaintBox.domain.vo.BusComplaintBoxMessageLoggingVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 意见箱-意见沟通记录Mapper接口 + * + * @author Lion Li + * @date 2025-11-29 + */ +public interface BusComplaintBoxMessageLoggingMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/IBusComplaintBoxDisposeLoggingService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/IBusComplaintBoxDisposeLoggingService.java new file mode 100644 index 00000000..dcfbfb32 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/IBusComplaintBoxDisposeLoggingService.java @@ -0,0 +1,70 @@ +package org.dromara.complaintBox.service; + +import org.dromara.complaintBox.domain.vo.BusComplaintBoxDisposeLoggingVo; +import org.dromara.complaintBox.domain.bo.BusComplaintBoxDisposeLoggingBo; +import org.dromara.complaintBox.domain.BusComplaintBoxDisposeLogging; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 意见箱-意见处理记录Service接口 + * + * @author Lion Li + * @date 2025-11-29 + */ +public interface IBusComplaintBoxDisposeLoggingService extends IService{ + + /** + * 查询意见箱-意见处理记录 + * + * @param id 主键 + * @return 意见箱-意见处理记录 + */ + BusComplaintBoxDisposeLoggingVo queryById(Long id); + + /** + * 分页查询意见箱-意见处理记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 意见箱-意见处理记录分页列表 + */ + TableDataInfo queryPageList(BusComplaintBoxDisposeLoggingBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的意见箱-意见处理记录列表 + * + * @param bo 查询条件 + * @return 意见箱-意见处理记录列表 + */ + List queryList(BusComplaintBoxDisposeLoggingBo bo); + + /** + * 新增意见箱-意见处理记录 + * + * @param bo 意见箱-意见处理记录 + * @return 是否新增成功 + */ + Boolean insertByBo(BusComplaintBoxDisposeLoggingBo bo); + + /** + * 修改意见箱-意见处理记录 + * + * @param bo 意见箱-意见处理记录 + * @return 是否修改成功 + */ + Boolean updateByBo(BusComplaintBoxDisposeLoggingBo bo); + + /** + * 校验并批量删除意见箱-意见处理记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/IBusComplaintBoxMessageLoggingService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/IBusComplaintBoxMessageLoggingService.java new file mode 100644 index 00000000..5bd0169a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/IBusComplaintBoxMessageLoggingService.java @@ -0,0 +1,84 @@ +package org.dromara.complaintBox.service; + +import org.dromara.complaintBox.domain.vo.BusComplaintBoxMessageLoggingVo; +import org.dromara.complaintBox.domain.bo.BusComplaintBoxMessageLoggingBo; +import org.dromara.complaintBox.domain.BusComplaintBoxMessageLogging; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 意见箱-意见沟通记录Service接口 + * + * @author Lion Li + * @date 2025-11-29 + */ +public interface IBusComplaintBoxMessageLoggingService extends IService{ + + /** + * 查询意见箱-意见沟通记录 + * + * @param id 主键 + * @return 意见箱-意见沟通记录 + */ + BusComplaintBoxMessageLoggingVo queryById(Long id); + + /** + * 分页查询意见箱-意见沟通记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 意见箱-意见沟通记录分页列表 + */ + TableDataInfo queryPageList(BusComplaintBoxMessageLoggingBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的意见箱-意见沟通记录列表 + * + * @param bo 查询条件 + * @return 意见箱-意见沟通记录列表 + */ + List queryList(BusComplaintBoxMessageLoggingBo bo); + + /** + * 新增意见箱-意见沟通记录 + * + * @param bo 意见箱-意见沟通记录 + * @return 是否新增成功 + */ + Boolean insertAppByBo(BusComplaintBoxMessageLoggingBo bo); + /** + * 新增意见箱-意见沟通记录 + * + * @param bo 意见箱-意见沟通记录 + * @return 是否新增成功 + */ + Boolean insertWebByBo(BusComplaintBoxMessageLoggingBo bo); + + /** + * 修改意见箱-意见沟通记录 + * + * @param bo 意见箱-意见沟通记录 + * @return 是否修改成功 + */ + Boolean updateByBo(BusComplaintBoxMessageLoggingBo bo); + + /** + * 校验并批量删除意见箱-意见沟通记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 通过意见id获取沟通记录 + * @param id + * @return + */ + List getMessageLogListByComplaintId(Long id); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/IBusComplaintBoxService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/IBusComplaintBoxService.java new file mode 100644 index 00000000..8400a950 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/IBusComplaintBoxService.java @@ -0,0 +1,117 @@ +package org.dromara.complaintBox.service; + +import org.dromara.complaintBox.app.domain.vo.AppDetailsOfTheOpinionVo; +import org.dromara.complaintBox.domain.vo.BusComplaintBoxVo; +import org.dromara.complaintBox.domain.bo.BusComplaintBoxBo; +import org.dromara.complaintBox.domain.BusComplaintBox; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.complaintBox.domain.vo.ComplaintBoxCountVo; +import org.dromara.complaintBox.domain.vo.DetailsOfTheOpinionVo; + +import java.util.Collection; +import java.util.List; + +/** + * 意见箱Service接口 + * + * @author Lion Li + * @date 2025-11-29 + */ +public interface IBusComplaintBoxService extends IService{ + + /** + * 查询意见箱 + * + * @param id 主键 + * @return 意见箱 + */ + BusComplaintBoxVo queryById(Long id); + + /** + * 分页查询意见箱列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 意见箱分页列表 + */ + TableDataInfo queryPageList(BusComplaintBoxBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的意见箱列表 + * + * @param bo 查询条件 + * @return 意见箱列表 + */ + List queryList(BusComplaintBoxBo bo); + + /** + * 新增意见箱 + * + * @param bo 意见箱 + * @return 是否新增成功 + */ + Boolean insertByBo(BusComplaintBoxBo bo); + + /** + * 修改意见箱 + * + * @param bo 意见箱 + * @return 是否修改成功 + */ + Boolean updateByBo(BusComplaintBoxBo bo); + + /** + * 校验并批量删除意见箱信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * app获取当前用户提出意见列表 + * @param bo + * @param pageQuery + * @return + */ + TableDataInfo appQueryPageList(BusComplaintBoxBo bo, PageQuery pageQuery); + + /** + * APP获取当前意见详情 + * @param id + * @return + */ + AppDetailsOfTheOpinionVo appQueryById(Long id); + + /** + * 获取当前意见详情 + * @param id + * @return + */ + DetailsOfTheOpinionVo getInfo(Long id); + + /** + * 修改沟通记录阅读状态 + * @param bo + * @return + */ + int editCheckStatus(BusComplaintBoxBo bo); + + /** + * web获取各个处理状态数量 + * @param bo + * @return + */ + List getCount(BusComplaintBoxBo bo); + + /** + * 修改意见状态 + * @param bo + * @return + */ + int editStatus(BusComplaintBoxBo bo); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxDisposeLoggingServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxDisposeLoggingServiceImpl.java new file mode 100644 index 00000000..5bd6fa4a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxDisposeLoggingServiceImpl.java @@ -0,0 +1,134 @@ +package org.dromara.complaintBox.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.complaintBox.domain.bo.BusComplaintBoxDisposeLoggingBo; +import org.dromara.complaintBox.domain.vo.BusComplaintBoxDisposeLoggingVo; +import org.dromara.complaintBox.domain.BusComplaintBoxDisposeLogging; +import org.dromara.complaintBox.mapper.BusComplaintBoxDisposeLoggingMapper; +import org.dromara.complaintBox.service.IBusComplaintBoxDisposeLoggingService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 意见箱-意见处理记录Service业务层处理 + * + * @author Lion Li + * @date 2025-11-29 + */ +@RequiredArgsConstructor +@Service +public class BusComplaintBoxDisposeLoggingServiceImpl extends ServiceImpl implements IBusComplaintBoxDisposeLoggingService { + + private final BusComplaintBoxDisposeLoggingMapper baseMapper; + + /** + * 查询意见箱-意见处理记录 + * + * @param id 主键 + * @return 意见箱-意见处理记录 + */ + @Override + public BusComplaintBoxDisposeLoggingVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询意见箱-意见处理记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 意见箱-意见处理记录分页列表 + */ + @Override + public TableDataInfo queryPageList(BusComplaintBoxDisposeLoggingBo 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(BusComplaintBoxDisposeLoggingBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(BusComplaintBoxDisposeLoggingBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(BusComplaintBoxDisposeLogging::getCreateTime); + lqw.eq(bo.getComplaintId() != null, BusComplaintBoxDisposeLogging::getComplaintId, bo.getComplaintId()); + lqw.eq(bo.getUserId() != null, BusComplaintBoxDisposeLogging::getUserId, bo.getUserId()); + lqw.like(StringUtils.isNotBlank(bo.getUserName()), BusComplaintBoxDisposeLogging::getUserName, bo.getUserName()); + lqw.eq(StringUtils.isNotBlank(bo.getIsRefund()), BusComplaintBoxDisposeLogging::getIsRefund, bo.getIsRefund()); + return lqw; + } + + /** + * 新增意见箱-意见处理记录 + * + * @param bo 意见箱-意见处理记录 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(BusComplaintBoxDisposeLoggingBo bo) { + BusComplaintBoxDisposeLogging add = MapstructUtils.convert(bo, BusComplaintBoxDisposeLogging.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改意见箱-意见处理记录 + * + * @param bo 意见箱-意见处理记录 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(BusComplaintBoxDisposeLoggingBo bo) { + BusComplaintBoxDisposeLogging update = MapstructUtils.convert(bo, BusComplaintBoxDisposeLogging.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(BusComplaintBoxDisposeLogging 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/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxMessageLoggingServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxMessageLoggingServiceImpl.java new file mode 100644 index 00000000..8055cc0c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxMessageLoggingServiceImpl.java @@ -0,0 +1,223 @@ +package org.dromara.complaintBox.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.dromara.common.core.domain.model.LoginUser; +import org.dromara.common.core.exception.ServiceException; +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.satoken.utils.LoginHelper; +import org.dromara.complaintBox.domain.BusComplaintBox; +import org.dromara.complaintBox.mapper.BusComplaintBoxMapper; +import org.dromara.complaintBox.service.IBusComplaintBoxService; +import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.service.ISysUserService; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.dromara.complaintBox.domain.bo.BusComplaintBoxMessageLoggingBo; +import org.dromara.complaintBox.domain.vo.BusComplaintBoxMessageLoggingVo; +import org.dromara.complaintBox.domain.BusComplaintBoxMessageLogging; +import org.dromara.complaintBox.mapper.BusComplaintBoxMessageLoggingMapper; +import org.dromara.complaintBox.service.IBusComplaintBoxMessageLoggingService; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 意见箱-意见沟通记录Service业务层处理 + * + * @author Lion Li + * @date 2025-11-29 + */ +@RequiredArgsConstructor +@Service +public class BusComplaintBoxMessageLoggingServiceImpl extends ServiceImpl implements IBusComplaintBoxMessageLoggingService { + + private final BusComplaintBoxMessageLoggingMapper baseMapper; + @Lazy + private final ISysUserService sysUserService; +// @Lazy + private final BusComplaintBoxMapper busComplaintBoxMapper; + + /** + * 查询意见箱-意见沟通记录 + * + * @param id 主键 + * @return 意见箱-意见沟通记录 + */ + @Override + public BusComplaintBoxMessageLoggingVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询意见箱-意见沟通记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 意见箱-意见沟通记录分页列表 + */ + @Override + public TableDataInfo queryPageList(BusComplaintBoxMessageLoggingBo 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(BusComplaintBoxMessageLoggingBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(BusComplaintBoxMessageLoggingBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(BusComplaintBoxMessageLogging::getId); + lqw.eq(bo.getComplaintId() != null, BusComplaintBoxMessageLogging::getComplaintId, bo.getComplaintId()); + lqw.eq(StringUtils.isNotBlank(bo.getDetails()), BusComplaintBoxMessageLogging::getDetails, bo.getDetails()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), BusComplaintBoxMessageLogging::getStatus, bo.getStatus()); + return lqw; + } + + /** + * 新增意见箱-意见沟通记录 + * + * @param bo 意见箱-意见沟通记录 + * @return 是否新增成功 + */ + @Override + public Boolean insertAppByBo(BusComplaintBoxMessageLoggingBo bo) { + LoginUser loginUser = LoginHelper.getLoginUser(); + if (loginUser == null) { + throw new ServiceException("登录信息出错,请重新登录!!!"); + } + BusComplaintBox busComplaintBox = busComplaintBoxMapper.selectById(bo.getComplaintId()); + if (busComplaintBox == null) { + throw new ServiceException("意见信息找不到!!!"); + } + if ("14".equals(busComplaintBox.getStatus()) || "9".equals(busComplaintBox.getStatus())) { + throw new ServiceException("意见已关闭!!!"); + } + SysUserVo sysUserVo = sysUserService.selectUserById(loginUser.getUserId()); + bo.setReplyUserId(sysUserVo.getUserId()); + bo.setReplyUserName(sysUserVo.getNickName()); + bo.setReplyAvatar(sysUserVo.getAvatar()); + BusComplaintBoxMessageLogging add = MapstructUtils.convert(bo, BusComplaintBoxMessageLogging.class); + if (busComplaintBox.getCurrentDisposeUserId() != null) { + SysUserVo userVo = sysUserService.selectUserById(busComplaintBox.getCurrentDisposeUserId()); + if (userVo != null) { + add.setRepliedUserId(userVo.getUserId()); + add.setRepliedUserName(userVo.getUserName()); + add.setRepliedAvatar(userVo.getAvatar()); + } + } + + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertWebByBo(BusComplaintBoxMessageLoggingBo bo) { + LoginUser loginUser = LoginHelper.getLoginUser(); + if (loginUser == null) { + throw new ServiceException("登录信息出错,请重新登录!!!"); + } + BusComplaintBox busComplaintBox = busComplaintBoxMapper.selectById(bo.getComplaintId()); + if (busComplaintBox == null) { + throw new ServiceException("意见信息找不到!!!"); + } + if (busComplaintBox.getCurrentDisposeUserId()!= null && !loginUser.getUserId().equals(busComplaintBox.getCurrentDisposeUserId())) { + throw new ServiceException("处理人异常"); + } + if ("0".equals(busComplaintBox.getStatus())){ + throw new ServiceException("意见未处理,不能发布信息"); + } + if ("14".equals(busComplaintBox.getStatus()) || "9".equals(busComplaintBox.getStatus())) { + throw new ServiceException("意见已关闭!!!"); + } + SysUserVo sysUserVo = sysUserService.selectUserById(loginUser.getUserId()); + bo.setReplyUserId(sysUserVo.getUserId()); + bo.setReplyUserName(sysUserVo.getNickName()); + bo.setReplyAvatar(sysUserVo.getAvatar()); + BusComplaintBoxMessageLogging add = MapstructUtils.convert(bo, BusComplaintBoxMessageLogging.class); + add.setRepliedUserId(busComplaintBox.getUserId()); + add.setRepliedUserName(busComplaintBox.getUserName()); + add.setRepliedAvatar(busComplaintBox.getAvatar()); + + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; +// if ("0".equals(busComplaintBox.getStatus())){ +// busComplaintBox.setStatus("5"); +// busComplaintBox.setCurrentDisposeUserId(sysUserVo.getUserId()); +// busComplaintBoxMapper.updateById(busComplaintBox); +// } + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改意见箱-意见沟通记录 + * + * @param bo 意见箱-意见沟通记录 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(BusComplaintBoxMessageLoggingBo bo) { + BusComplaintBoxMessageLogging update = MapstructUtils.convert(bo, BusComplaintBoxMessageLogging.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(BusComplaintBoxMessageLogging entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除意见箱-意见沟通记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + /** + * 根据意见id获取沟通记录 + * @param id + * @return + */ + @Override + public List getMessageLogListByComplaintId(Long id) { + return baseMapper.selectVoList(new LambdaQueryWrapper().eq(BusComplaintBoxMessageLogging::getComplaintId, id)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxServiceImpl.java new file mode 100644 index 00000000..f4a0df4a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/complaintBox/service/impl/BusComplaintBoxServiceImpl.java @@ -0,0 +1,380 @@ +package org.dromara.complaintBox.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.annotation.Resource; +import org.dromara.common.core.domain.model.LoginUser; +import org.dromara.common.core.exception.ServiceException; +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.satoken.utils.LoginHelper; +import org.dromara.complaintBox.app.domain.vo.AppDetailsOfTheOpinionVo; +import org.dromara.complaintBox.domain.BusComplaintBoxDisposeLogging; +import org.dromara.complaintBox.domain.BusComplaintBoxMessageLogging; +import org.dromara.complaintBox.domain.vo.BusComplaintBoxMessageLoggingVo; +import org.dromara.complaintBox.domain.vo.ComplaintBoxCountVo; +import org.dromara.complaintBox.domain.vo.DetailsOfTheOpinionVo; +import org.dromara.complaintBox.mapper.BusComplaintBoxMessageLoggingMapper; +import org.dromara.complaintBox.service.IBusComplaintBoxDisposeLoggingService; +import org.dromara.complaintBox.service.IBusComplaintBoxMessageLoggingService; +import org.dromara.system.domain.vo.SysDeptVo; +import org.dromara.system.domain.vo.SysOssVo; +import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.service.ISysDeptService; +import org.dromara.system.service.ISysOssService; +import org.dromara.system.service.ISysUserService; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.dromara.complaintBox.domain.bo.BusComplaintBoxBo; +import org.dromara.complaintBox.domain.vo.BusComplaintBoxVo; +import org.dromara.complaintBox.domain.BusComplaintBox; +import org.dromara.complaintBox.mapper.BusComplaintBoxMapper; +import org.dromara.complaintBox.service.IBusComplaintBoxService; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 意见箱Service业务层处理 + * + * @author Lion Li + * @date 2025-11-29 + */ +@RequiredArgsConstructor +@Service +public class BusComplaintBoxServiceImpl extends ServiceImpl implements IBusComplaintBoxService { + + private final BusComplaintBoxMapper baseMapper; +// @Lazy + private final BusComplaintBoxMessageLoggingMapper messageLoggingMapper; + @Lazy + @Resource + private ISysUserService sysUserService; + @Lazy + @Resource + private ISysDeptService sysDeptService; + @Lazy + @Resource + private ISysOssService sysOssService; + @Lazy + @Resource + private IBusComplaintBoxDisposeLoggingService disposeLoggingService; + + /** + * 查询意见箱 + * + * @param id 主键 + * @return 意见箱 + */ + @Override + public BusComplaintBoxVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询意见箱列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 意见箱分页列表 + */ + @Override + public TableDataInfo queryPageList(BusComplaintBoxBo bo, PageQuery pageQuery) { + Page result = baseMapper.selectVoPageWebList(pageQuery.build(), bo); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的意见箱列表 + * + * @param bo 查询条件 + * @return 意见箱列表 + */ + @Override + public List queryList(BusComplaintBoxBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(BusComplaintBoxBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(BusComplaintBox::getId); + lqw.eq(bo.getCompanyId() != null, BusComplaintBox::getCompanyId, bo.getCompanyId()); + lqw.eq(bo.getProjectId() != null, BusComplaintBox::getProjectId, bo.getProjectId()); + lqw.eq(bo.getUserId() != null, BusComplaintBox::getUserId, bo.getUserId()); + lqw.eq(bo.getCurrentDisposeUserId() != null, + BusComplaintBox::getCurrentDisposeUserId, bo.getCurrentDisposeUserId()) + .or() + .isNull(BusComplaintBox::getCurrentDisposeUserId); + lqw.eq(StringUtils.isNotBlank(bo.getTitle()), BusComplaintBox::getTitle, bo.getTitle()); + lqw.eq(StringUtils.isNotBlank(bo.getOpinionType()), BusComplaintBox::getOpinionType, bo.getOpinionType()); + lqw.eq(StringUtils.isNotBlank(bo.getDetail()), BusComplaintBox::getDetail, bo.getDetail()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), BusComplaintBox::getFileId, bo.getFileId()); + lqw.eq(StringUtils.isNotBlank(bo.getIsCryptonym()), BusComplaintBox::getIsCryptonym, bo.getIsCryptonym()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), BusComplaintBox::getStatus, bo.getStatus()); + return lqw; + } + + /** + * 新增意见箱 + * + * @param bo 意见箱 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(BusComplaintBoxBo bo) { + BusComplaintBox add = MapstructUtils.convert(bo, BusComplaintBox.class); + //获取用户信息进行填充 + SysUserVo sysUserVo = sysUserService.selectUserById(add.getUserId()); + add.setAvatar(sysUserVo.getAvatar()); + add.setUserName(sysUserVo.getNickName()); + //获取部门信息 + SysDeptVo sysDeptVo =sysDeptService.selectDeptById(sysUserVo.getDeptId()); + if (sysDeptVo != null) { + String[] split = sysDeptVo.getAncestors().split(","); + if (split.length > 0) { + //当祖级列表长度大于3时取第2个作为公司id + if (split.length > 1) { + add.setCompanyId(Long.parseLong(split[1])); + }else { + add.setCompanyId(Long.parseLong(split[0])); + } + } + } + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改意见箱 + * + * @param bo 意见箱 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(BusComplaintBoxBo bo) { + BusComplaintBox update = MapstructUtils.convert(bo, BusComplaintBox.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(BusComplaintBox entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除意见箱信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + /** + * app获取当前用户提出意见列表 + * @param bo + * @param pageQuery + * @return + */ + @Override + public TableDataInfo appQueryPageList(BusComplaintBoxBo bo, PageQuery pageQuery) { + Page result = baseMapper.selectVoPageList(pageQuery.build(), bo); + return TableDataInfo.build(result); + } + + /** + * app获取当前意见详情 + * @param id + * @return + */ + @Override + public AppDetailsOfTheOpinionVo appQueryById(Long id) { + AppDetailsOfTheOpinionVo vo = new AppDetailsOfTheOpinionVo(); + BusComplaintBoxVo busComplaintBoxVo = baseMapper.selectVoById(id); + if(busComplaintBoxVo == null){ + throw new ServiceException("找不到意见信息!!!"); + } + if (busComplaintBoxVo.getAvatar() != null){ + SysOssVo ossVo = sysOssService.getById(busComplaintBoxVo.getAvatar()); + if (ossVo != null){ + busComplaintBoxVo.setAvatarUrl(ossVo.getUrl()); + } + } + if (busComplaintBoxVo.getFileId() != null){ + String[] split = busComplaintBoxVo.getFileId().split(","); + List fileIds = Arrays.stream(split) + .filter(str -> str != null && !str.trim().isEmpty()) // 过滤空值和空白字符串 + .map(str -> { + try { + return Long.valueOf(str.trim()); + } catch (NumberFormatException e) { + // 转换失败时可返回null,后续再过滤 + return null; + } + }) + .filter(Objects::nonNull) // 过滤转换失败的null值 + .toList(); + List sysOssVos = sysOssService.listByIds(fileIds); + List urls = new ArrayList<>(); + sysOssVos.forEach(sysOssVo -> { + if (sysOssVo != null){ + urls.add(sysOssVo.getUrl()); + } + }); + busComplaintBoxVo.setFileUrls(urls); + } + vo.setBusComplaintBoxVo(busComplaintBoxVo); + List messageLoggingVos = messageLoggingMapper.selectVoList(new LambdaQueryWrapper().eq(BusComplaintBoxMessageLogging::getComplaintId, id)); + if(CollectionUtils.isNotEmpty(messageLoggingVos)){ + messageLoggingVos.forEach(mvo->{ + if (mvo.getReplyAvatar() != null){ + SysOssVo ossVo = sysOssService.getById(mvo.getReplyAvatar()); + if (ossVo != null){ + mvo.setReplyAvatarUrl(ossVo.getUrl()); + } + } + if (mvo.getRepliedAvatar() != null){ + SysOssVo ossVo = sysOssService.getById(mvo.getRepliedAvatar()); + if (ossVo != null){ + mvo.setRepliedAvatarUrl(ossVo.getUrl()); + } + } + }); + vo.setMessageLoggingVos(messageLoggingVos); + } + return vo; + } + + @Override + public DetailsOfTheOpinionVo getInfo(Long id) { + DetailsOfTheOpinionVo vo = new DetailsOfTheOpinionVo(); + BusComplaintBoxVo busComplaintBoxVo = baseMapper.selectVoById(id); + if(busComplaintBoxVo == null){ + throw new ServiceException("找不到意见信息!!!"); + } + vo.setBusComplaintBoxVo(busComplaintBoxVo); + List messageLoggingVos = messageLoggingMapper.selectVoList(new LambdaQueryWrapper().eq(BusComplaintBoxMessageLogging::getComplaintId, id)); + if(CollectionUtils.isNotEmpty(messageLoggingVos)){ + messageLoggingVos.forEach(messageLoggingVo->{ + messageLoggingVo.setType(messageLoggingVo.getReplyUserId().equals(busComplaintBoxVo.getUserId()) ? 0 : 1); + if (messageLoggingVo.getReplyAvatar() != null){ + SysOssVo ossVo = sysOssService.getById(messageLoggingVo.getReplyAvatar()); + if (ossVo != null){ + messageLoggingVo.setReplyAvatarUrl(ossVo.getUrl()); + } + } + if (messageLoggingVo.getRepliedAvatar() != null){ + SysOssVo ossVo = sysOssService.getById(messageLoggingVo.getRepliedAvatar()); + if (ossVo != null){ + messageLoggingVo.setRepliedAvatarUrl(ossVo.getUrl()); + } + } + }); + vo.setMessageLoggingVos(messageLoggingVos); + } + return vo; + + } + + + + /** + * app修改沟通记录阅读状态 + * @param bo + * @return + */ + @Override + public int editCheckStatus(BusComplaintBoxBo bo) { + if (bo.getId() == null || bo.getUserId() == null) { + return 1; + } + Long count = messageLoggingMapper.selectCount(new LambdaQueryWrapper() + .eq(BusComplaintBoxMessageLogging::getStatus,"0") + .eq(BusComplaintBoxMessageLogging::getComplaintId, bo.getId()) + .eq(BusComplaintBoxMessageLogging::getRepliedUserId, bo.getUserId())); + if (count == 0) { + return 1; + } + return messageLoggingMapper.update(new LambdaUpdateWrapper() + .set(BusComplaintBoxMessageLogging::getStatus,"1") + .eq(BusComplaintBoxMessageLogging::getComplaintId,bo.getId()) + .eq(BusComplaintBoxMessageLogging::getRepliedUserId,bo.getUserId())); + } + + @Override + public List getCount(BusComplaintBoxBo bo) { + + return baseMapper.getCount(bo); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int editStatus(BusComplaintBoxBo bo) { + if (bo.getStatus() == null){ + throw new ServiceException("意见状态不能为空"); + } + BusComplaintBoxVo busComplaintBoxVo = baseMapper.selectVoById(bo.getId()); + if (busComplaintBoxVo == null){ + throw new ServiceException("找不到意见!!"); + } + if ("14".equals(busComplaintBoxVo.getStatus())){ + throw new ServiceException("该意见已经关闭,不允许再修改状态"); + } + LambdaUpdateWrapper lqw = new LambdaUpdateWrapper(); + lqw.set(BusComplaintBox::getStatus, bo.getStatus()); + lqw.eq(BusComplaintBox::getId, bo.getId()); + if ("5".equals(bo.getStatus())){ + BusComplaintBoxDisposeLogging logging = new BusComplaintBoxDisposeLogging(); + logging.setComplaintId(bo.getId()); + LoginUser loginUser = LoginHelper.getLoginUser(); + SysUserVo sysUserVo = sysUserService.selectUserById(loginUser.getUserId()); + if (sysUserVo == null){ + throw new ServiceException("找不到当前登录用户信息!"); + } + lqw.set(BusComplaintBox::getCurrentDisposeUserId, loginUser.getUserId()); + logging.setUserId(loginUser.getUserId()); + logging.setUserName(sysUserVo.getNickName()); + logging.setAvatar(sysUserVo.getAvatar()); + disposeLoggingService.save(logging); + } + if ("0".equals(bo.getStatus())){ + lqw.set(BusComplaintBox::getCurrentDisposeUserId, null); + BusComplaintBoxDisposeLogging logging = disposeLoggingService.getBaseMapper() + .selectOne(new LambdaQueryWrapper() + .eq(BusComplaintBoxDisposeLogging::getComplaintId, bo.getId()) + .eq(BusComplaintBoxDisposeLogging::getUserId, busComplaintBoxVo.getCurrentDisposeUserId()) + .eq(BusComplaintBoxDisposeLogging::getIsRefund, "0")); + if (logging == null){ + throw new ServiceException("找不到处理人记录"); + } + logging.setIsRefund("1"); + logging.setCause(bo.getCause()); + disposeLoggingService.updateById(logging); + } + return baseMapper.update(lqw); + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/controller/SubConstructionUserController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/controller/SubConstructionUserController.java index 063db64e..73728aa0 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/controller/SubConstructionUserController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/controller/SubConstructionUserController.java @@ -412,6 +412,7 @@ public class SubConstructionUserController extends BaseController { vo.setUploadFile("部分上传"); } dataList.add(vo); + order++; } // 写入当前Sheet的数据 excelWriter.write(dataList, writeSheet); @@ -456,7 +457,9 @@ public class SubConstructionUserController extends BaseController { } else { vo.setUploadFile("部分上传"); } + vo.setTeamName(null); dataList.add(vo); + order++; } // 写入当前Sheet的数据 excelWriter.write(dataList, writeSheet); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/controller/SubConstructionUserFileController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/controller/SubConstructionUserFileController.java index 9f49dfe0..0a5ff30a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/controller/SubConstructionUserFileController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/controller/SubConstructionUserFileController.java @@ -21,6 +21,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.List; +import java.util.Map; /** * 施工人员文件存储 @@ -45,6 +46,21 @@ public class SubConstructionUserFileController extends BaseController { return R.ok(constructionUserFileService.queryList(req)); } + + /** + * 下载用户文件的ZIP(按类型分文件夹) + * @param userId 用户ID + */ + @GetMapping("/downloadFiles") + public void downloadUserFilesByType(Long userId,String type, HttpServletResponse response) { + try { + constructionUserFileService.generateTypeGroupZip(userId,type, response); + } catch (Exception e) { + e.printStackTrace(); + response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); + } + } + /** * 导出施工人员文件存储列表 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuser/SubConstructionUserChangeProjectReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuser/SubConstructionUserChangeProjectReq.java index 9e95b14a..5e9848fa 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuser/SubConstructionUserChangeProjectReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/dto/constructionuser/SubConstructionUserChangeProjectReq.java @@ -34,4 +34,11 @@ public class SubConstructionUserChangeProjectReq implements Serializable { */ @NotNull(message = "分包公司id不能为空") private Long contractorId; + + + /** + * 工种 + */ + private String typeOfWork; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/vo/constructionuser/SubConstructionUserVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/vo/constructionuser/SubConstructionUserVo.java index b57de4fe..6be001ec 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/vo/constructionuser/SubConstructionUserVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/domain/vo/constructionuser/SubConstructionUserVo.java @@ -9,12 +9,15 @@ import org.dromara.common.excel.convert.ExcelDictConvert; import org.dromara.common.translation.annotation.Translation; import org.dromara.common.translation.constant.TransConstant; import org.dromara.contractor.domain.SubConstructionUser; +import org.dromara.contractor.domain.vo.constructionuserfile.SubConstructionUserFileVo; +import org.dromara.project.domain.vo.constructionuserexit.BusConstructionUserExitVo; import java.io.Serial; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDate; import java.util.Date; +import java.util.List; /** @@ -295,5 +298,29 @@ public class SubConstructionUserVo implements Serializable { */ private Long sysUserId; + /** + * 岗位(默认为0普通员工,1组长) + */ private String postId; + + /** + * 分包管理人员ID + */ + private String fbId; + + /** + * 分包管理人员名称 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "fbId") + private String fbName; + + /** + * 文件 + */ + List subConstructionUserFileVos; + + /** + * 记录 + */ + List busConstructionUserExitVos; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/ISubConstructionUserFileService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/ISubConstructionUserFileService.java index 65bcfecc..04af8b5f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/ISubConstructionUserFileService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/ISubConstructionUserFileService.java @@ -9,6 +9,7 @@ import org.dromara.contractor.domain.dto.constructionuserfile.SubConstructionUse import org.dromara.contractor.domain.dto.constructionuserfile.SubConstructionUserFileSaveReq; import org.dromara.contractor.domain.dto.constructionuserfile.SubConstructionUserFileTemplateReq; import org.dromara.contractor.domain.vo.constructionuserfile.SubConstructionUserFileVo; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -82,4 +83,12 @@ public interface ISubConstructionUserFileService extends IService getFileByUserId(Long userId); + + /** + * 获取施工人员文件列表 + */ + Map> fileList(Long userId); + + + void generateTypeGroupZip(Long userId,String type, HttpServletResponse response) throws Exception; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserFileServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserFileServiceImpl.java index 7c28b00c..1fb5f21b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserFileServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserFileServiceImpl.java @@ -45,6 +45,9 @@ import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; import java.nio.file.Path; import java.nio.file.Paths; import java.util.*; @@ -231,7 +234,7 @@ public class SubConstructionUserFileServiceImpl extends ServiceImpl userIdList = constructionUserFileList.stream().map(SubConstructionUserFile::getUserId).toList(); @@ -470,6 +473,94 @@ public class SubConstructionUserFileServiceImpl extends ServiceImpl> fileList(Long userId) { + + List subConstructionUserFileVos = baseMapper.selectVoList(Wrappers.lambdaQuery() + .eq(SubConstructionUserFile::getUserId, userId)); + Map> resultMap = subConstructionUserFileVos.stream().collect(Collectors.groupingBy(SubConstructionUserFileVo::getFileType)); + return resultMap; + } + + + + + @Override + public void generateTypeGroupZip(Long userId,String type, HttpServletResponse response) throws Exception { + + // 1. 查询该用户的所有文件 + List list = lambdaQuery() + .eq(SubConstructionUserFile::getUserId, userId) + .eq(StrUtil.isNotBlank(type),SubConstructionUserFile::getFileType, type) + .list(); + if (list.isEmpty()) { + throw new ServiceException("该用户没有文件"); + } + List userFileType = dictTypeService.selectDictDataByType("user_file_type"); + Map collect = userFileType.stream().collect(Collectors.toMap(SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel)); + + // 3. 设置响应头(ZIP文件下载) + response.setContentType("application/zip"); + response.setHeader("Content-Disposition", "attachment; filename=\"user_files.zip\""); + + // 4. 压缩流直接写入响应(无临时文件) + try (ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream())) { + // 遍历每个文件类型分组 + for (SubConstructionUserFile entry : list) { + String fileType = entry.getFileType(); // 文件夹名称:文件类型(如"01") + + String fileTypeName = collect.get(fileType); + + String fileUrl = entry.getPath(); + if (StringUtils.isBlank(fileUrl)) { + continue; + } + String[] split = fileUrl.split(","); + List ossIds = Arrays.stream(split).map(Long::valueOf).toList(); + List sysOssVos = ossService.listByIds(ossIds); + for (SysOssVo sysOssVo : sysOssVos) { + String ossVoUrl = sysOssVo.getUrl(); + if (StringUtils.isBlank(ossVoUrl)) { + continue; + } + String zipEntryName = fileTypeName + "/" + sysOssVo.getOriginalName(); + ZipEntry zipEntry = new ZipEntry(zipEntryName); + zipOut.putNextEntry(zipEntry); + // 下载远程文件并写入ZIP + URL url = new URL(ossVoUrl); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + connection.setConnectTimeout(5000); + connection.setReadTimeout(10000); + + try (InputStream in = connection.getInputStream()) { + byte[] buffer = new byte[1024 * 8]; + int len; + while ((len = in.read(buffer)) != -1) { + zipOut.write(buffer, 0, len); + } + } finally { + connection.disconnect(); + zipOut.closeEntry(); // 关闭当前条目 + } + } + } + } + } + + + + + + + + + + + + + + /** * 递归扫描指定目录,找到 “姓名-Id” 格式的文件夹并解析 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserServiceImpl.java index 1ae52ec8..2217c133 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/contractor/service/impl/SubConstructionUserServiceImpl.java @@ -38,9 +38,11 @@ import org.dromara.contractor.domain.SubConstructionUser; import org.dromara.contractor.domain.SubConstructionUserFile; import org.dromara.contractor.domain.SubContractor; import org.dromara.contractor.domain.dto.constructionuser.*; +import org.dromara.contractor.domain.dto.constructionuserfile.SubConstructionUserFileQueryReq; import org.dromara.contractor.domain.enums.SubConstructionUserFileStatusEnum; import org.dromara.contractor.domain.exportvo.BusConstructionUserExportVo; import org.dromara.contractor.domain.vo.constructionuser.*; +import org.dromara.contractor.domain.vo.constructionuserfile.SubConstructionUserFileVo; import org.dromara.contractor.domain.vo.contractor.SubContractorVo; import org.dromara.contractor.mapper.SubConstructionUserMapper; import org.dromara.contractor.service.ISubConstructionUserFileService; @@ -48,10 +50,12 @@ import org.dromara.contractor.service.ISubConstructionUserService; import org.dromara.contractor.service.ISubContractorService; import org.dromara.project.domain.*; import org.dromara.project.domain.dto.attendance.TodayUserDto; +import org.dromara.project.domain.dto.constructionuserexit.BusConstructionUserExitQueryReq; import org.dromara.project.domain.enums.BusAttendanceClockStatusEnum; import org.dromara.project.domain.enums.BusAttendanceCommuterEnum; import org.dromara.project.domain.enums.BusConstructionUserAttendanceStatusEnum; import org.dromara.project.domain.vo.attendance.AttendanceTodayUserVo; +import org.dromara.project.domain.vo.constructionuserexit.BusConstructionUserExitVo; import org.dromara.project.domain.vo.projectteam.BusProjectTeamAppVo; import org.dromara.project.service.*; import org.dromara.system.domain.SysUser; @@ -157,6 +161,10 @@ public class SubConstructionUserServiceImpl extends ServiceImpl subConstructionUserFileVos = constructionUserFileService.queryList(req); + vo.setSubConstructionUserFileVos(subConstructionUserFileVos); + BusConstructionUserExitQueryReq busConstructionUserExitQueryReq = new BusConstructionUserExitQueryReq(); + busConstructionUserExitQueryReq.setUserId(constructionUser.getSysUserId()); + List busConstructionUserExitVos = busConstructionUserExitService.queryList(busConstructionUserExitQueryReq); + vo.setBusConstructionUserExitVos(busConstructionUserExitVos); + return vo; } /** @@ -230,7 +247,7 @@ public class SubConstructionUserServiceImpl extends ServiceImpl lambdaUpdate = Wrappers.lambdaUpdate(SubConstructionUser.class) .eq(SubConstructionUser::getId, id) .set(SubConstructionUser::getProjectId, req.getProjectId()) - .set(SubConstructionUser::getContractorId, req.getContractorId()); + .set(SubConstructionUser::getContractorId, req.getContractorId()) + .set(SubConstructionUser::getTypeOfWork, req.getTypeOfWork()) + ; + + userProjectRelevancyService.deleteByUserId(constructionUser.getSysUserId()); + + roleService.deleteRoleByUserIdAndProjectId(constructionUser.getSysUserId(), req.getProjectId()); + return this.update(lambdaUpdate); } @@ -890,6 +914,22 @@ public class SubConstructionUserServiceImpl extends ServiceImpllambdaQuery() + .eq(BusProjectTeamMember::getTeamId, constructionUser.getTeamId()) + .last("limit 1") + ); + if (one != null) { + constructionUserVo.setPostId(one.getPostId()); + } + } + } return constructionUserVo; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesVolumeCatalogController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesVolumeCatalogController.java index f6e342cf..d5a4310c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesVolumeCatalogController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/controller/DesVolumeCatalogController.java @@ -26,6 +26,7 @@ import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogCreateReq; import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogQueryReq; import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogUpdateReq; import org.dromara.design.domain.vo.CopyUserVo; +import org.dromara.design.domain.vo.DelayContVo; import org.dromara.design.domain.vo.DesUserVo; import org.dromara.design.domain.vo.volumecatalog.DesVolumeCatalogVo; import org.dromara.design.domain.vo.volumefile.DesVolumeFileVo; @@ -45,10 +46,7 @@ import java.io.IOException; import java.io.InputStream; import java.time.LocalDate; import java.time.ZoneId; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -131,6 +129,16 @@ public class DesVolumeCatalogController extends BaseController { return toAjax(desVolumeCatalogService.viewerFile(id)); } + /** + * 计划过期统计 + */ + @GetMapping("/delayCont/{projectId}") + public R delayCont(@PathVariable Long projectId) { + return R.ok(desVolumeCatalogService.delayCont(projectId)); + } + + + /** * 新增卷册目录 */ @@ -167,6 +175,9 @@ public class DesVolumeCatalogController extends BaseController { } + + + /** * 收资清单模板导出 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/volumecatalog/DesVolumeCatalogQueryReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/volumecatalog/DesVolumeCatalogQueryReq.java index 750602b9..47b290af 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/volumecatalog/DesVolumeCatalogQueryReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/dto/volumecatalog/DesVolumeCatalogQueryReq.java @@ -46,4 +46,9 @@ public class DesVolumeCatalogQueryReq implements Serializable { */ private String designSubitem; + /** + * 0-不延期,1-延期 + */ + private String delay; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/DelayContVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/DelayContVo.java new file mode 100644 index 00000000..7d54aa4b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/domain/vo/DelayContVo.java @@ -0,0 +1,23 @@ +package org.dromara.design.domain.vo; + + +import lombok.Data; + +@Data +public class DelayContVo { + + /** + * 总数 + */ + private Integer total; + + /** + * 延迟数 + */ + private Integer delay; + + /** + * 今日数 + */ + private Integer today; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeCatalogService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeCatalogService.java index a5e5cb04..bf3f5e04 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeCatalogService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeCatalogService.java @@ -11,7 +11,9 @@ import org.dromara.design.domain.DesVolumeFile; import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogCreateReq; import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogQueryReq; import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogUpdateReq; +import org.dromara.design.domain.vo.DelayContVo; import org.dromara.design.domain.vo.volumecatalog.DesVolumeCatalogVo; +import org.springframework.web.bind.annotation.PathVariable; import java.util.Collection; import java.util.List; @@ -130,4 +132,9 @@ public interface IDesVolumeCatalogService extends IService { * @return 设计子项列表 */ List listDesignSubitem(Long projectId); + + /** + * 统计 + */ + DelayContVo delayCont(Long projectId); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeFileService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeFileService.java index 948060ed..2958cf2f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeFileService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/IDesVolumeFileService.java @@ -100,4 +100,7 @@ public interface IDesVolumeFileService extends IService { TableDataInfo queryAppPageList(DesVolumeFileAppPageDto dto, PageQuery pageQuery); AuditFileVo auditFile(AuditFileDto dto); + + + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeCatalogServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeCatalogServiceImpl.java index f1a03153..4f66d4ef 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeCatalogServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/design/service/impl/DesVolumeCatalogServiceImpl.java @@ -28,6 +28,7 @@ import org.dromara.design.domain.bo.DesUserBo; import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogCreateReq; import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogQueryReq; import org.dromara.design.domain.dto.volumecatalog.DesVolumeCatalogUpdateReq; +import org.dromara.design.domain.vo.DelayContVo; import org.dromara.design.domain.vo.volumecatalog.DesVolumeCatalogVo; import org.dromara.design.mapper.DesVolumeCatalogMapper; import org.dromara.design.service.*; @@ -43,6 +44,8 @@ import org.springframework.transaction.annotation.Transactional; import java.io.IOException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; +import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -236,6 +239,17 @@ public class DesVolumeCatalogServiceImpl extends ServiceImpl list = this.lambdaQuery() + .eq(DesVolumeCatalog::getProjectId, projectId).list(); + DelayContVo delayContVo = new DelayContVo(); + delayContVo.setTotal(list.size()); + delayContVo.setDelay((int)list.stream().filter(item -> item.getPlannedCompletion().isBefore(LocalDate.now()) && item.getDesignState().equals("2")).count()); + delayContVo.setToday((int)list.stream().filter(item -> item.getPlannedCompletion().isEqual(LocalDate.now())).count()); + return delayContVo; + } + /** * 修改卷册目录 * @@ -353,6 +367,7 @@ public class DesVolumeCatalogServiceImpl extends ServiceImpl wrapper.gt(DesVolumeCatalog::getPlannedCompletion, LocalDateTime.now()) + .or() + .eq(DesVolumeCatalog::getDesignState, "1") + ); + } return lqw; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceAccessRecordController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceAccessRecordController.java new file mode 100644 index 00000000..fcb25f86 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceAccessRecordController.java @@ -0,0 +1,123 @@ +package org.dromara.device.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.project.domain.BusProject; +import org.dromara.project.service.IBusProjectService; +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.device.domain.vo.DeviceAccessRecordVo; +import org.dromara.device.domain.bo.DeviceAccessRecordBo; +import org.dromara.device.service.IDeviceAccessRecordService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 设备进出场记录 + * + * @author Lion Li + * @date 2025-12-01 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/device/accessRecord") +public class DeviceAccessRecordController extends BaseController { + + private final IDeviceAccessRecordService deviceAccessRecordService; + + private final IBusProjectService projectService; + + /** + * 查询设备进出场记录列表 + */ +// @SaCheckPermission("device:accessRecord:list") + @GetMapping("/list") + public TableDataInfo list(DeviceAccessRecordBo bo, PageQuery pageQuery) { + return deviceAccessRecordService.queryPageList(bo, pageQuery); + } + + /** + * 导出设备进出场记录列表 + */ + @SaCheckPermission("device:accessRecord:export") + @Log(title = "设备进出场记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(DeviceAccessRecordBo bo, HttpServletResponse response) { + List list = deviceAccessRecordService.queryList(bo); + ExcelUtil.exportExcel(list, "设备进出场记录", DeviceAccessRecordVo.class, response); + } + + /** + * 获取设备进出场记录详细信息 + * + * @param id 主键 + */ +// @SaCheckPermission("device:accessRecord:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(deviceAccessRecordService.queryById(id)); + } + + /** + * 子项目列表 + */ + @GetMapping("/childProjectList/{projectId}") + public R> childProjectId(@PathVariable Long projectId) { + List list = projectService.lambdaQuery() + .select(BusProject::getId, BusProject::getProjectName) + .eq(BusProject::getPId, projectId).list(); + return R.ok(list); + } + + + /** + * 新增设备进出场记录 + */ + @SaCheckPermission("device:accessRecord:add") + @Log(title = "设备进出场记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody DeviceAccessRecordBo bo) { + return toAjax(deviceAccessRecordService.insertByBo(bo)); + } + + + + /** + * 修改设备进出场记录 + */ +// @SaCheckPermission("device:accessRecord:edit") + @Log(title = "设备进出场记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody DeviceAccessRecordBo bo) { + return toAjax(deviceAccessRecordService.updateByBo(bo)); + } + + /** + * 删除设备进出场记录 + * + * @param ids 主键串 + */ + @SaCheckPermission("device:accessRecord:remove") + @Log(title = "设备进出场记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(deviceAccessRecordService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceInfoController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceInfoController.java new file mode 100644 index 00000000..caaa5ca4 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceInfoController.java @@ -0,0 +1,150 @@ +package org.dromara.device.controller; + +import java.util.List; +import java.util.Map; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.device.domain.bo.DeviceAccessRecordBo; +import org.dromara.device.domain.vo.DeviceAccessRecordVo; +import org.dromara.device.domain.vo.DeviceInfoCountVo; +import org.dromara.device.service.IDeviceAccessRecordService; +import org.redisson.api.RList; +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.device.domain.vo.DeviceInfoVo; +import org.dromara.device.domain.bo.DeviceInfoBo; +import org.dromara.device.service.IDeviceInfoService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 设备信息 + * + * @author Lion Li + * @date 2025-12-01 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/device/info") +public class DeviceInfoController extends BaseController { + + private final IDeviceInfoService deviceInfoService; + + private final IDeviceAccessRecordService deviceAccessRecordService; + + /** + * 查询设备信息列表 + */ + @SaCheckPermission("device:info:list") + @GetMapping("/list") + public TableDataInfo list(DeviceInfoBo bo, PageQuery pageQuery) { + return deviceInfoService.queryPageList(bo, pageQuery); + } + + /** + * 导出设备信息列表 + */ + @SaCheckPermission("device:info:export") + @Log(title = "设备信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(DeviceInfoBo bo, HttpServletResponse response) { + List list = deviceInfoService.queryList(bo); + ExcelUtil.exportExcel(list, "设备信息", DeviceInfoVo.class, response); + } + + /** + * 获取设备信息详细信息 + * + * @param id 主键 + */ +// @SaCheckPermission("device:info:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(deviceInfoService.queryById(id)); + } + + /** + * 进出场纪录 + */ + @GetMapping("/recordList") + public R> recordList(DeviceAccessRecordBo bo) { + List list = deviceAccessRecordService.queryList(bo); + return R.ok(list); + } + + + /** + * 设备信息统计 + */ + @SaCheckPermission("device:info:list") + @GetMapping("/count/{projectId}") + public R> count(@PathVariable Long projectId) { + return R.ok(deviceInfoService.count(projectId)); + } + + /** + * 设备类型统计 + */ + @SaCheckPermission("device:info:list") + @GetMapping("/typeCount/{projectId}") + public R> typeCount(@PathVariable Long projectId) { + return R.ok(deviceInfoService.typeCount(projectId)); + } + + /** + * 新增设备信息 + */ + @SaCheckPermission("device:info:add") + @Log(title = "设备信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody DeviceInfoBo bo) { + return toAjax(deviceInfoService.insertByBo(bo)); + } + + /** + * 修改设备信息 + */ + @SaCheckPermission("device:info:edit") + @Log(title = "设备信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody DeviceInfoBo bo) { + return toAjax(deviceInfoService.updateByBo(bo)); + } + + /** + * 删除设备信息 + * + * @param ids 主键串 + */ + @SaCheckPermission("device:info:remove") + @Log(title = "设备信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(deviceInfoService.deleteWithValidByIds(List.of(ids), true)); + } + + /** + * 设备信息列表 + */ + @GetMapping("/deviceList") + public R> deviceList(DeviceInfoBo bo) { + List list = deviceInfoService.queryList(bo); + return R.ok(list); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceTypeController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceTypeController.java new file mode 100644 index 00000000..881ce274 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/controller/DeviceTypeController.java @@ -0,0 +1,188 @@ +package org.dromara.device.controller; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +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.device.domain.vo.DeviceTypeVo; +import org.dromara.device.domain.bo.DeviceTypeBo; +import org.dromara.device.service.IDeviceTypeService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 设备类型 + * + * @author Lion Li + * @date 2025-12-01 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/device/type") +public class DeviceTypeController extends BaseController { + + private final IDeviceTypeService deviceTypeService; + + /** + * 查询设备类型列表 + */ + @SaCheckPermission("device:type:list") + @GetMapping("/list") + public TableDataInfo list(DeviceTypeBo bo, PageQuery pageQuery) { + return deviceTypeService.queryPageList(bo, pageQuery); + } + + + /** + * 设备树状列表 + */ + @SaCheckPermission("device:type:list") + @GetMapping("/treeList") + public R> treeList(DeviceTypeBo bo) { + List list = deviceTypeService.queryList(bo); + List deviceTypeVos = buildTreeWithAutoRoot(list); + return R.ok(deviceTypeVos); + } + + + public static List buildTreeWithAutoRoot(List list) { + // 1. 用 Map 缓存所有节点(key=节点ID,value=节点对象) + // 防御性判断:空列表直接返回,避免空指针 + if (list == null || list.isEmpty()) { + return new ArrayList<>(); + } + + // 1. 提取所有有效节点ID(用于判断父ID是否存在) + Set validNodeIds = list.stream() + .map(DeviceTypeVo::getId) + .collect(Collectors.toSet()); + + // 2. 用Map缓存所有节点(key=节点ID,value=节点对象),O(1)查找 + Map nodeMap = list.stream() + .collect(Collectors.toMap(DeviceTypeVo::getId, node -> node)); + + List rootNodes = new ArrayList<>(); + List orphanNodes = new ArrayList<>(); + + for (DeviceTypeVo node : list) { + Long parentId = node.getParentId(); + boolean isRoot = false; + + // 判定是否为顶级节点(满足以下任一条件) + if (parentId == null || parentId == 0) { + // 条件1:parentId为0或NULL(设计约定的顶级节点) + isRoot = true; + } else if (!validNodeIds.contains(parentId)) { + // 条件2:parentId不在有效节点ID中(孤儿节点,视为顶级) + isRoot = true; + orphanNodes.add(node); + } + + if (isRoot) { + // 顶级节点直接加入根列表,无需挂载 + rootNodes.add(node); + } else { + // 非顶级节点:挂载到父节点的children中 + DeviceTypeVo parentNode = nodeMap.get(parentId); + if (parentNode != null) { + if (parentNode.getChildren() == null) { + parentNode.setChildren(new ArrayList<>()); + } + // 关键:避免重复挂载(判断子节点中是否已存在当前节点) + boolean isAlreadyMounted = parentNode.getChildren().stream() + .anyMatch(child -> child.getId().equals(node.getId())); + if (!isAlreadyMounted) { + parentNode.getChildren().add(node); + } + } + } + } + + // 打印孤儿节点日志(便于排查数据问题) + if (!orphanNodes.isEmpty()) { + String orphanIds = orphanNodes.stream() + .map(DeviceTypeVo::getId) + .map(String::valueOf) + .collect(Collectors.joining(",")); + System.out.println("警告:存在孤儿节点(父节点不存在),节点ID:" + orphanIds); + } + + return rootNodes; + } + + + /** + * 导出设备类型列表 + */ + @SaCheckPermission("device:type:export") + @Log(title = "设备类型", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(DeviceTypeBo bo, HttpServletResponse response) { + List list = deviceTypeService.queryList(bo); + ExcelUtil.exportExcel(list, "设备类型", DeviceTypeVo.class, response); + } + + /** + * 获取设备类型详细信息 + * + * @param id 主键 + */ +// @SaCheckPermission("device:type:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(deviceTypeService.queryById(id)); + } + + /** + * 新增设备类型 + */ + @SaCheckPermission("device:type:add") + @Log(title = "设备类型", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody DeviceTypeBo bo) { + return toAjax(deviceTypeService.insertByBo(bo)); + } + + /** + * 修改设备类型 + */ + @SaCheckPermission("device:type:edit") + @Log(title = "设备类型", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody DeviceTypeBo bo) { + return toAjax(deviceTypeService.updateByBo(bo)); + } + + /** + * 删除设备类型 + * + * @param ids 主键串 + */ + @SaCheckPermission("device:type:remove") + @Log(title = "设备类型", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(deviceTypeService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/DeviceAccessRecord.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/DeviceAccessRecord.java new file mode 100644 index 00000000..06e4fef0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/DeviceAccessRecord.java @@ -0,0 +1,85 @@ +package org.dromara.device.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.time.LocalDateTime; + +/** + * 设备进出场记录对象 device_access_record + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("device_access_record") +public class DeviceAccessRecord extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 记录编号(唯一标识,如:RC-2024-0012) + */ + private String recordNo; + + /** + * 设备ID(关联设备表device的id) + */ + private Long deviceId; + + /** + * 设备名 + */ + private String deviceName; + + /** + * 状态(1-进场,2-出场,可扩展其他状态) + */ + private String status; + + /** + * 操作时间(记录发生的时间,如:2024-03-15 09:30:25) + */ + private LocalDateTime operateTime; + + /** + * 子项目名字 + */ + private String location; + + /** + * 操作人ID(关联用户表user的id) + */ + private Long operatorId; + + /** + * 操作人姓名(冗余存储,如:张三) + */ + private String operatorName; + + /** + * 原因(如:安装使用、设备调拨、入库存储) + */ + private String reason; + + /** + * 详细说明(查看详情时展示的补充信息,可选) + */ + private String details; + + /** + * 子项目ID + */ + private Long childProjectId; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/DeviceInfo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/DeviceInfo.java new file mode 100644 index 00000000..8919dc7e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/DeviceInfo.java @@ -0,0 +1,104 @@ +package org.dromara.device.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; + +import java.io.Serial; +import java.time.LocalDate; + +/** + * 设备信息对象 device_info + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("device_info") +public class DeviceInfo extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 项目Id + */ + private Long projectId; + + /** + * 设备编号 + */ + private String deviceCode; + + /** + * 设备名称 + */ + private String deviceName; + + /** + * 型号规格 + */ + private String modelSpec; + + /** + * 设备类型ID(关联设备类型表device_type的id) + */ + private Long typeId; + + /** + * 生产厂家 + */ + private String manufacturer; + + /** + * 出厂日期(yyyy-mm-dd) + */ + private LocalDate productionDate; + + /** + * 保修日期(yyyy-mm-dd) + */ + private LocalDate warrantyDate; + + /** + * 设备状态(0-闲置,1-使用中,2-维修中,3-报废) + */ + private String status; + + /** + * 负责人姓名 + */ + private String responsiblePerson; + + /** + * 联系电话(支持固定电话和手机号) + */ + private String contactPhone; + + /** + * 设备描述(详细说明) + */ + private String description; + + /** + * 图片 + */ + private String image; + + /** + * 附件 + */ + private String file; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/DeviceType.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/DeviceType.java new file mode 100644 index 00000000..52a490e8 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/DeviceType.java @@ -0,0 +1,61 @@ +package org.dromara.device.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 设备类型对象 device_type + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("device_type") +public class DeviceType extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 设备类型编码 + */ + private String typeCode; + + /** + * 设备类型名称 + */ + private String typeName; + + /** + * 父类型ID + */ + private Long parentId; + + /** + * 层级(1=顶级,2=二级,3=三级...,最大支持255级) + */ + private Integer level; + + /** + * 祖级列表 + */ + private String ancestors; + + /** + * 设备类型描述 + */ + private String description; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceAccessRecordBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceAccessRecordBo.java new file mode 100644 index 00000000..472e47f0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceAccessRecordBo.java @@ -0,0 +1,86 @@ +package org.dromara.device.domain.bo; + +import org.dromara.device.domain.DeviceAccessRecord; +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.time.LocalDateTime; + +/** + * 设备进出场记录业务对象 device_access_record + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = DeviceAccessRecord.class, reverseConvertGenerate = false) +public class DeviceAccessRecordBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 记录编号(唯一标识,如:RC-2024-0012) + */ + private String recordNo; + + /** + * 设备ID(关联设备表device的id) + */ + private Long deviceId; + + /** + * 设备名 + */ + private String deviceName; + + /** + * 状态(1-进场,2-出场,可扩展其他状态) + */ + private String status; + + /** + * 操作时间(记录发生的时间,如:2024-03-15 09:30:25) + */ + private LocalDateTime operateTime; + + /** + * 位置/目的地(如:A区-1号电站、B区仓库→A区电站) + */ + private String location; + + /** + * 操作人ID(关联用户表user的id) + */ + private Long operatorId; + + /** + * 操作人姓名(冗余存储,如:张三) + */ + private String operatorName; + + /** + * 原因(如:安装使用、设备调拨、入库存储) + */ + private String reason; + + /** + * 详细说明(查看详情时展示的补充信息,可选) + */ + private String details; + + /** + * 子项目ID + */ + private Long childProjectId; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceInfoBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceInfoBo.java new file mode 100644 index 00000000..5c9cade1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceInfoBo.java @@ -0,0 +1,104 @@ +package org.dromara.device.domain.bo; + +import org.dromara.device.domain.DeviceInfo; +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 org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; + +import java.time.LocalDate; + +/** + * 设备信息业务对象 device_info + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = DeviceInfo.class, reverseConvertGenerate = false) +public class DeviceInfoBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 项目Id + */ + private Long projectId; + + /** + * 设备编号 + */ + private String deviceCode; + + /** + * 设备名称 + */ + private String deviceName; + + /** + * 型号规格 + */ + private String modelSpec; + + /** + * 设备类型ID(关联设备类型表device_type的id) + */ + private Long typeId; + + /** + * 生产厂家 + */ + private String manufacturer; + + /** + * 出厂日期(yyyy-mm-dd) + */ + private LocalDate productionDate; + + /** + * 保修日期(yyyy-mm-dd) + */ + private LocalDate warrantyDate; + + /** + * 设备状态(0-闲置,1-使用中,2-维修中,3-报废) + */ + private String status; + + /** + * 负责人姓名 + */ + private String responsiblePerson; + + /** + * 联系电话(支持固定电话和手机号) + */ + private String contactPhone; + + /** + * 设备描述(详细说明) + */ + private String description; + + /** + * 图片 + */ + private String image; + + /** + * 附件 + */ + private String file; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceTypeBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceTypeBo.java new file mode 100644 index 00000000..a006f7fa --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/bo/DeviceTypeBo.java @@ -0,0 +1,53 @@ +package org.dromara.device.domain.bo; + +import org.dromara.device.domain.DeviceType; +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.*; + +/** + * 设备类型业务对象 device_type + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = DeviceType.class, reverseConvertGenerate = false) +public class DeviceTypeBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + private String typeCode; + + /** + * 设备类型名称 + */ + @NotBlank(message = "设备类型名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String typeName; + + /** + * 父类型ID + */ + private Long parentId; + + /** + * 层级(1=顶级,2=二级,3=三级...,最大支持255级) + */ + private Integer level; + + /** + * 设备类型描述 + */ + private String description; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceAccessRecordVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceAccessRecordVo.java new file mode 100644 index 00000000..0d92721d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceAccessRecordVo.java @@ -0,0 +1,104 @@ +package org.dromara.device.domain.vo; + +import org.dromara.device.domain.DeviceAccessRecord; +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.time.LocalDateTime; +import java.util.Date; + + + +/** + * 设备进出场记录视图对象 device_access_record + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = DeviceAccessRecord.class) +public class DeviceAccessRecordVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 记录编号(唯一标识,如:RC-2024-0012) + */ + @ExcelProperty(value = "记录编号", converter = ExcelDictConvert.class) + private String recordNo; + + /** + * 设备ID(关联设备表device的id) + */ + @ExcelProperty(value = "设备ID", converter = ExcelDictConvert.class) + private Long deviceId; + + /** + * 设备名 + */ + @ExcelProperty(value = "设备名") + private String deviceName; + + /** + * 状态(1-进场,2-出场,可扩展其他状态) + */ + @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) + private String status; + + /** + * 操作时间(记录发生的时间,如:2024-03-15 09:30:25) + */ + @ExcelProperty(value = "操作时间", converter = ExcelDictConvert.class) + private LocalDateTime operateTime; + + /** + * 位置/目的地(如:A区-1号电站、B区仓库→A区电站) + */ + @ExcelProperty(value = "位置/目的地", converter = ExcelDictConvert.class) + private String location; + + /** + * 操作人ID(关联用户表user的id) + */ + @ExcelProperty(value = "操作人ID", converter = ExcelDictConvert.class) + private Long operatorId; + + /** + * 操作人姓名(冗余存储,如:张三) + */ + @ExcelProperty(value = "操作人姓名", converter = ExcelDictConvert.class) + private String operatorName; + + /** + * 原因(如:安装使用、设备调拨、入库存储) + */ + @ExcelProperty(value = "原因", converter = ExcelDictConvert.class) + private String reason; + + /** + * 详细说明(查看详情时展示的补充信息,可选) + */ + @ExcelProperty(value = "详细说明", converter = ExcelDictConvert.class) + private String details; + + /** + * 创建时间 + */ + private Date createTime; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceInfoCountVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceInfoCountVo.java new file mode 100644 index 00000000..a47e7d92 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceInfoCountVo.java @@ -0,0 +1,27 @@ +package org.dromara.device.domain.vo; + +import lombok.Data; + +@Data +public class DeviceInfoCountVo { + /** + * 总数 + */ + private Integer total; + /** + * 使用 + */ + private Integer use; + /** + * 维护 + */ + private Integer maintain; + /** + * 闲置 + */ + private Integer idle; + /** + * 报废 + */ + private Integer broken; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceInfoVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceInfoVo.java new file mode 100644 index 00000000..3a5ed8ed --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceInfoVo.java @@ -0,0 +1,137 @@ +package org.dromara.device.domain.vo; + +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.device.domain.DeviceInfo; +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.time.LocalDate; +import java.util.Date; + + + +/** + * 设备信息视图对象 device_info + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = DeviceInfo.class) +public class DeviceInfoVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 项目Id + */ + @ExcelProperty(value = "项目Id") + private Long projectId; + + /** + * 设备编号 + */ + @ExcelProperty(value = "设备编号") + private String deviceCode; + + /** + * 设备名称 + */ + @ExcelProperty(value = "设备名称") + private String deviceName; + + /** + * 型号规格 + */ + @ExcelProperty(value = "型号规格") + private String modelSpec; + + /** + * 设备类型ID(关联设备类型表device_type的id) + */ + @ExcelProperty(value = "设备类型ID", converter = ExcelDictConvert.class) + private Long typeId; + + private String typeName; + + /** + * 生产厂家 + */ + @ExcelProperty(value = "生产厂家") + private String manufacturer; + + /** + * 出厂日期(yyyy-mm-dd) + */ + @ExcelProperty(value = "出厂日期", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "y=yyy-mm-dd") + private LocalDate productionDate; + + /** + * 保修日期(yyyy-mm-dd) + */ + @ExcelProperty(value = "保修日期", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "y=yyy-mm-dd") + private LocalDate warrantyDate; + + /** + * 设备状态(0-闲置,1-使用中,2-维修中,3-报废) + */ + @ExcelProperty(value = "设备状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=-闲置,1-使用中,2-维修中,3-报废") + private String status; + + /** + * 负责人姓名 + */ + @ExcelProperty(value = "负责人姓名") + private String responsiblePerson; + + /** + * 联系电话(支持固定电话和手机号) + */ + @ExcelProperty(value = "联系电话", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "支=持固定电话和手机号") + private String contactPhone; + + /** + * 设备描述(详细说明) + */ + @ExcelProperty(value = "设备描述", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "详=细说明") + private String description; + + /** + * 图片 + */ + @ExcelProperty(value = "图片") + private String image; + + /** + * 图片Url + */ + @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "image") + private String imageUrl; + /** + * 附件 + */ + @ExcelProperty(value = "附件") + private String file; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceTypeVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceTypeVo.java new file mode 100644 index 00000000..b7c477ba --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/domain/vo/DeviceTypeVo.java @@ -0,0 +1,78 @@ +package org.dromara.device.domain.vo; + +import org.dromara.device.domain.DeviceType; +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; + + +/** + * 设备类型视图对象 device_type + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = DeviceType.class) +public class DeviceTypeVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 设备类型编码 + */ + @ExcelProperty(value = "设备类型编码") + private String typeCode; + + /** + * 设备类型名称 + */ + @ExcelProperty(value = "设备类型名称") + private String typeName; + + /** + * 父类型ID + */ + @ExcelProperty(value = "父类型ID") + private Long parentId; + + /** + * 层级(1=顶级,2=二级,3=三级...,最大支持255级) + */ + @ExcelProperty(value = "层级", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1==顶级,2=二级,3=三级...,最大支持255级") + private Integer level; + + /** + * 祖级列表 + */ + @ExcelProperty(value = "祖级列表") + private String ancestors; + + /** + * 设备类型描述 + */ + @ExcelProperty(value = "设备类型描述") + private String description; + + + private List children; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/mapper/DeviceAccessRecordMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/mapper/DeviceAccessRecordMapper.java new file mode 100644 index 00000000..e8b8ccf2 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/mapper/DeviceAccessRecordMapper.java @@ -0,0 +1,15 @@ +package org.dromara.device.mapper; + +import org.dromara.device.domain.DeviceAccessRecord; +import org.dromara.device.domain.vo.DeviceAccessRecordVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 设备进出场记录Mapper接口 + * + * @author Lion Li + * @date 2025-12-01 + */ +public interface DeviceAccessRecordMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/mapper/DeviceInfoMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/mapper/DeviceInfoMapper.java new file mode 100644 index 00000000..bea69563 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/mapper/DeviceInfoMapper.java @@ -0,0 +1,15 @@ +package org.dromara.device.mapper; + +import org.dromara.device.domain.DeviceInfo; +import org.dromara.device.domain.vo.DeviceInfoVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 设备信息Mapper接口 + * + * @author Lion Li + * @date 2025-12-01 + */ +public interface DeviceInfoMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/mapper/DeviceTypeMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/mapper/DeviceTypeMapper.java new file mode 100644 index 00000000..12791784 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/mapper/DeviceTypeMapper.java @@ -0,0 +1,15 @@ +package org.dromara.device.mapper; + +import org.dromara.device.domain.DeviceType; +import org.dromara.device.domain.vo.DeviceTypeVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 设备类型Mapper接口 + * + * @author Lion Li + * @date 2025-12-01 + */ +public interface DeviceTypeMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/IDeviceAccessRecordService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/IDeviceAccessRecordService.java new file mode 100644 index 00000000..fe3b8862 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/IDeviceAccessRecordService.java @@ -0,0 +1,70 @@ +package org.dromara.device.service; + +import org.dromara.device.domain.vo.DeviceAccessRecordVo; +import org.dromara.device.domain.bo.DeviceAccessRecordBo; +import org.dromara.device.domain.DeviceAccessRecord; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 设备进出场记录Service接口 + * + * @author Lion Li + * @date 2025-12-01 + */ +public interface IDeviceAccessRecordService extends IService{ + + /** + * 查询设备进出场记录 + * + * @param id 主键 + * @return 设备进出场记录 + */ + DeviceAccessRecordVo queryById(Long id); + + /** + * 分页查询设备进出场记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 设备进出场记录分页列表 + */ + TableDataInfo queryPageList(DeviceAccessRecordBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的设备进出场记录列表 + * + * @param bo 查询条件 + * @return 设备进出场记录列表 + */ + List queryList(DeviceAccessRecordBo bo); + + /** + * 新增设备进出场记录 + * + * @param bo 设备进出场记录 + * @return 是否新增成功 + */ + Boolean insertByBo(DeviceAccessRecordBo bo); + + /** + * 修改设备进出场记录 + * + * @param bo 设备进出场记录 + * @return 是否修改成功 + */ + Boolean updateByBo(DeviceAccessRecordBo bo); + + /** + * 校验并批量删除设备进出场记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/IDeviceInfoService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/IDeviceInfoService.java new file mode 100644 index 00000000..85c2e7a9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/IDeviceInfoService.java @@ -0,0 +1,83 @@ +package org.dromara.device.service; + +import org.dromara.device.domain.vo.DeviceInfoVo; +import org.dromara.device.domain.bo.DeviceInfoBo; +import org.dromara.device.domain.DeviceInfo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 设备信息Service接口 + * + * @author Lion Li + * @date 2025-12-01 + */ +public interface IDeviceInfoService extends IService{ + + /** + * 查询设备信息 + * + * @param id 主键 + * @return 设备信息 + */ + DeviceInfoVo queryById(Long id); + + /** + * 分页查询设备信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 设备信息分页列表 + */ + TableDataInfo queryPageList(DeviceInfoBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的设备信息列表 + * + * @param bo 查询条件 + * @return 设备信息列表 + */ + List queryList(DeviceInfoBo bo); + + /** + * 新增设备信息 + * + * @param bo 设备信息 + * @return 是否新增成功 + */ + Boolean insertByBo(DeviceInfoBo bo); + + /** + * 修改设备信息 + * + * @param bo 设备信息 + * @return 是否修改成功 + */ + Boolean updateByBo(DeviceInfoBo bo); + + /** + * 校验并批量删除设备信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 设备数量统计 + */ + Map count(Long projectId); + + /** + * 设备类型统计 + */ + Map typeCount(Long projectId); + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/IDeviceTypeService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/IDeviceTypeService.java new file mode 100644 index 00000000..e5f805b4 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/IDeviceTypeService.java @@ -0,0 +1,70 @@ +package org.dromara.device.service; + +import org.dromara.device.domain.vo.DeviceTypeVo; +import org.dromara.device.domain.bo.DeviceTypeBo; +import org.dromara.device.domain.DeviceType; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 设备类型Service接口 + * + * @author Lion Li + * @date 2025-12-01 + */ +public interface IDeviceTypeService extends IService{ + + /** + * 查询设备类型 + * + * @param id 主键 + * @return 设备类型 + */ + DeviceTypeVo queryById(Long id); + + /** + * 分页查询设备类型列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 设备类型分页列表 + */ + TableDataInfo queryPageList(DeviceTypeBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的设备类型列表 + * + * @param bo 查询条件 + * @return 设备类型列表 + */ + List queryList(DeviceTypeBo bo); + + /** + * 新增设备类型 + * + * @param bo 设备类型 + * @return 是否新增成功 + */ + Boolean insertByBo(DeviceTypeBo bo); + + /** + * 修改设备类型 + * + * @param bo 设备类型 + * @return 是否修改成功 + */ + Boolean updateByBo(DeviceTypeBo bo); + + /** + * 校验并批量删除设备类型信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceAccessRecordServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceAccessRecordServiceImpl.java new file mode 100644 index 00000000..b73aeb5c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceAccessRecordServiceImpl.java @@ -0,0 +1,151 @@ +package org.dromara.device.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.device.domain.bo.DeviceAccessRecordBo; +import org.dromara.device.domain.vo.DeviceAccessRecordVo; +import org.dromara.device.domain.DeviceAccessRecord; +import org.dromara.device.mapper.DeviceAccessRecordMapper; +import org.dromara.device.service.IDeviceAccessRecordService; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 设备进出场记录Service业务层处理 + * + * @author Lion Li + * @date 2025-12-01 + */ +@RequiredArgsConstructor +@Service +public class DeviceAccessRecordServiceImpl extends ServiceImpl implements IDeviceAccessRecordService { + + private final DeviceAccessRecordMapper baseMapper; + + /** + * 查询设备进出场记录 + * + * @param id 主键 + * @return 设备进出场记录 + */ + @Override + public DeviceAccessRecordVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询设备进出场记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 设备进出场记录分页列表 + */ + @Override + public TableDataInfo queryPageList(DeviceAccessRecordBo 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(DeviceAccessRecordBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(DeviceAccessRecordBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(DeviceAccessRecord::getId); + lqw.eq(StringUtils.isNotBlank(bo.getRecordNo()), DeviceAccessRecord::getRecordNo, bo.getRecordNo()); + lqw.eq(bo.getDeviceId() != null, DeviceAccessRecord::getDeviceId, bo.getDeviceId()); + lqw.like(StringUtils.isNotBlank(bo.getDeviceName()), DeviceAccessRecord::getDeviceName, bo.getDeviceName()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), DeviceAccessRecord::getStatus, bo.getStatus()); + + if(bo.getOperateTime() != null){ + LocalDateTime operateTime = bo.getOperateTime(); + //一天的开始 + LocalDateTime startTime = operateTime.withHour(0).withMinute(0).withSecond(0); + //一天的结束 + LocalDateTime endTime = operateTime.withHour(23).withMinute(59).withSecond(59); + lqw.between(DeviceAccessRecord::getOperateTime,startTime,endTime); + } + + lqw.eq(bo.getOperateTime() != null, DeviceAccessRecord::getOperateTime, bo.getOperateTime()); + lqw.eq(StringUtils.isNotBlank(bo.getLocation()), DeviceAccessRecord::getLocation, bo.getLocation()); + lqw.eq(bo.getOperatorId() != null, DeviceAccessRecord::getOperatorId, bo.getOperatorId()); + lqw.like(StringUtils.isNotBlank(bo.getOperatorName()), DeviceAccessRecord::getOperatorName, bo.getOperatorName()); + lqw.eq(StringUtils.isNotBlank(bo.getReason()), DeviceAccessRecord::getReason, bo.getReason()); + lqw.eq(StringUtils.isNotBlank(bo.getDetails()), DeviceAccessRecord::getDetails, bo.getDetails()); + return lqw; + } + + /** + * 新增设备进出场记录 + * + * @param bo 设备进出场记录 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(DeviceAccessRecordBo bo) { + DeviceAccessRecord add = MapstructUtils.convert(bo, DeviceAccessRecord.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改设备进出场记录 + * + * @param bo 设备进出场记录 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(DeviceAccessRecordBo bo) { + DeviceAccessRecord update = MapstructUtils.convert(bo, DeviceAccessRecord.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(DeviceAccessRecord 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/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceInfoServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceInfoServiceImpl.java new file mode 100644 index 00000000..f09a5458 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceInfoServiceImpl.java @@ -0,0 +1,219 @@ +package org.dromara.device.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.dromara.common.core.exception.ServiceException; +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.device.domain.DeviceAccessRecord; +import org.dromara.device.domain.DeviceType; +import org.dromara.device.domain.vo.DeviceInfoCountVo; +import org.dromara.device.service.IDeviceAccessRecordService; +import org.dromara.device.service.IDeviceTypeService; +import org.dromara.system.domain.vo.SysDictDataVo; +import org.dromara.system.service.ISysDictDataService; +import org.dromara.system.service.ISysDictTypeService; +import org.springframework.stereotype.Service; +import org.dromara.device.domain.bo.DeviceInfoBo; +import org.dromara.device.domain.vo.DeviceInfoVo; +import org.dromara.device.domain.DeviceInfo; +import org.dromara.device.mapper.DeviceInfoMapper; +import org.dromara.device.service.IDeviceInfoService; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 设备信息Service业务层处理 + * + * @author Lion Li + * @date 2025-12-01 + */ +@RequiredArgsConstructor +@Service +public class DeviceInfoServiceImpl extends ServiceImpl implements IDeviceInfoService { + + private final DeviceInfoMapper baseMapper; + + private final IDeviceTypeService deviceTypeService; + + private final IDeviceAccessRecordService deviceAccessRecordService; + + private final ISysDictTypeService dictTypeService; + + /** + * 查询设备信息 + * + * @param id 主键 + * @return 设备信息 + */ + @Override + public DeviceInfoVo queryById(Long id){ + DeviceInfoVo deviceInfoVo = baseMapper.selectVoById(id); + DeviceType byId = deviceTypeService.getById(deviceInfoVo.getTypeId()); + deviceInfoVo.setTypeName(byId.getTypeName()); + return deviceInfoVo; + } + + /** + * 分页查询设备信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 设备信息分页列表 + */ + @Override + public TableDataInfo queryPageList(DeviceInfoBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + List records = result.getRecords(); + Set collect = records.stream().map(DeviceInfoVo::getTypeId).collect(Collectors.toSet()); + if(CollectionUtil.isEmpty(collect)){ + return TableDataInfo.build(result); + } + List deviceTypes = deviceTypeService.listByIds(collect); + Map deviceTypeMap = deviceTypes.stream().collect(Collectors.toMap(DeviceType::getId, DeviceType::getTypeName)); + result.getRecords().forEach(deviceInfoVo -> { + deviceInfoVo.setTypeName(deviceTypeMap.get(deviceInfoVo.getTypeId())); + }); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的设备信息列表 + * + * @param bo 查询条件 + * @return 设备信息列表 + */ + @Override + public List queryList(DeviceInfoBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(DeviceInfoBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(DeviceInfo::getId); + lqw.eq(bo.getProjectId() != null, DeviceInfo::getProjectId, bo.getProjectId()); + lqw.like(StringUtils.isNotBlank(bo.getDeviceCode()), DeviceInfo::getDeviceCode, bo.getDeviceCode()); + lqw.like(StringUtils.isNotBlank(bo.getDeviceName()), DeviceInfo::getDeviceName, bo.getDeviceName()); + lqw.eq(StringUtils.isNotBlank(bo.getModelSpec()), DeviceInfo::getModelSpec, bo.getModelSpec()); + lqw.eq(bo.getTypeId() != null, DeviceInfo::getTypeId, bo.getTypeId()); + lqw.eq(StringUtils.isNotBlank(bo.getManufacturer()), DeviceInfo::getManufacturer, bo.getManufacturer()); + lqw.eq(bo.getProductionDate() != null, DeviceInfo::getProductionDate, bo.getProductionDate()); + lqw.eq(bo.getWarrantyDate() != null, DeviceInfo::getWarrantyDate, bo.getWarrantyDate()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), DeviceInfo::getStatus, bo.getStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getResponsiblePerson()), DeviceInfo::getResponsiblePerson, bo.getResponsiblePerson()); + lqw.eq(StringUtils.isNotBlank(bo.getContactPhone()), DeviceInfo::getContactPhone, bo.getContactPhone()); + lqw.eq(StringUtils.isNotBlank(bo.getDescription()), DeviceInfo::getDescription, bo.getDescription()); + lqw.eq(StringUtils.isNotBlank(bo.getImage()), DeviceInfo::getImage, bo.getImage()); + lqw.eq(StringUtils.isNotBlank(bo.getFile()), DeviceInfo::getFile, bo.getFile()); + return lqw; + } + + /** + * 新增设备信息 + * + * @param bo 设备信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(DeviceInfoBo bo) { + DeviceInfo add = MapstructUtils.convert(bo, DeviceInfo.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改设备信息 + * + * @param bo 设备信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(DeviceInfoBo bo) { + DeviceInfo update = MapstructUtils.convert(bo, DeviceInfo.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(DeviceInfo entity){ + boolean exists = this.lambdaQuery().eq(DeviceInfo::getDeviceCode, entity.getDeviceCode()) + .ne(entity.getId() != null, DeviceInfo::getId, entity.getId()).exists(); + if (exists) { + throw new ServiceException("设备编码已存在"); + } + } + + /** + * 校验并批量删除设备信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + List list = deviceAccessRecordService.lambdaQuery().in(DeviceAccessRecord::getDeviceId, ids).list(); + if(CollectionUtil.isNotEmpty(list)){ + throw new ServiceException("设备存在进出场记录,不能删除"); + } + } + + return baseMapper.deleteByIds(ids) > 0; + } + + + @Override + public Map count(Long projectId) { + + Map map = new LinkedHashMap<>(); + List deviceStatus = dictTypeService.selectDictDataByType("device_status"); + + List list = this.lambdaQuery().eq(DeviceInfo::getProjectId, projectId).list(); + for (SysDictDataVo status : deviceStatus) { + map.put(status.getDictLabel(), (int)list.stream().filter(deviceInfo -> status.getDictValue().equals(deviceInfo.getStatus())).count()); + } + return map; + } + + @Override + public Map typeCount(Long projectId) { + Map map = new LinkedHashMap<>(); + + List list = this.lambdaQuery().eq(DeviceInfo::getProjectId, projectId).list(); + Set collect = list.stream().map(DeviceInfo::getTypeId).collect(Collectors.toSet()); + List deviceTypes; + if(CollectionUtil.isEmpty(collect)){ + deviceTypes = new ArrayList<>(); + }else{ + deviceTypes = deviceTypeService.listByIds(collect); + } + List list1 = deviceTypeService.lambdaQuery().eq(DeviceType::getParentId, 0L).list(); + for (DeviceType deviceType : list1) { + Long id = deviceType.getId(); + long count = deviceTypes.stream() + .filter(vo -> vo.getAncestors().contains(StringUtils.SEPARATOR + id) ||vo.getId().equals(id)) + .count(); + map.put(deviceType.getTypeName(), (int)count); + } + + return map; + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceTypeServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceTypeServiceImpl.java new file mode 100644 index 00000000..7da44b2e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/device/service/impl/DeviceTypeServiceImpl.java @@ -0,0 +1,176 @@ +package org.dromara.device.service.impl; + +import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.annotation.Resource; +import org.dromara.common.core.exception.ServiceException; +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.device.domain.DeviceInfo; +import org.dromara.device.service.IDeviceInfoService; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.dromara.device.domain.bo.DeviceTypeBo; +import org.dromara.device.domain.vo.DeviceTypeVo; +import org.dromara.device.domain.DeviceType; +import org.dromara.device.mapper.DeviceTypeMapper; +import org.dromara.device.service.IDeviceTypeService; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 设备类型Service业务层处理 + * + * @author Lion Li + * @date 2025-12-01 + */ +@RequiredArgsConstructor +@Service +public class DeviceTypeServiceImpl extends ServiceImpl implements IDeviceTypeService { + + private final DeviceTypeMapper baseMapper; + + @Resource + @Lazy + private IDeviceInfoService deviceInfoService; + + /** + * 查询设备类型 + * + * @param id 主键 + * @return 设备类型 + */ + @Override + public DeviceTypeVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询设备类型列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 设备类型分页列表 + */ + @Override + public TableDataInfo queryPageList(DeviceTypeBo 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(DeviceTypeBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(DeviceTypeBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(DeviceType::getId); + lqw.like(StringUtils.isNotBlank(bo.getTypeCode()), DeviceType::getTypeCode, bo.getTypeCode()); + lqw.like(StringUtils.isNotBlank(bo.getTypeName()), DeviceType::getTypeName, bo.getTypeName()); + lqw.eq(bo.getParentId() != null, DeviceType::getParentId, bo.getParentId()); + lqw.eq(bo.getLevel() != null, DeviceType::getLevel, bo.getLevel()); + lqw.eq(StringUtils.isNotBlank(bo.getDescription()), DeviceType::getDescription, bo.getDescription()); + return lqw; + } + + /** + * 新增设备类型 + * + * @param bo 设备类型 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(DeviceTypeBo bo) { + DeviceType add = MapstructUtils.convert(bo, DeviceType.class); + validEntityBeforeSave(add); + handleLevelAndAncestors(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改设备类型 + * + * @param bo 设备类型 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(DeviceTypeBo bo) { + DeviceType update = MapstructUtils.convert(bo, DeviceType.class); + validEntityBeforeSave(update); + handleLevelAndAncestors(update); + return baseMapper.updateById(update) > 0; + } + + private void handleLevelAndAncestors(DeviceType deviceType) { + if(deviceType.getParentId() == 0L){ + deviceType.setAncestors("0"); + deviceType.setLevel(1); + }else { + DeviceType parent = baseMapper.selectById(deviceType.getParentId()); + deviceType.setAncestors(parent.getAncestors() + StringUtils.SEPARATOR + parent.getId()); + deviceType.setLevel(parent.getLevel() + 1); + } + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(DeviceType entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除设备类型信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + List checkIds = new ArrayList<>(); + if(isValid){ + for (Long id : ids) { + DeviceType deviceType = baseMapper.selectById(id); + if(deviceType == null){ + continue; + } + String prefix = deviceType.getAncestors() + "," + deviceType.getId(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .like(DeviceType::getAncestors, prefix) + .orderByAsc(DeviceType::getLevel, DeviceType::getId); + List list = baseMapper.selectList(queryWrapper); + checkIds.addAll(list.stream().map(DeviceType::getId).toList()); + } + checkIds.addAll(ids); + List list = deviceInfoService.lambdaQuery().in(DeviceInfo::getTypeId, checkIds).list(); + if(CollectionUtil.isNotEmpty(list)){ + throw new ServiceException("当前类型或子级类型存在设备"); + } + } + return baseMapper.deleteByIds(checkIds) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/service/impl/DroProjectDroneServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/service/impl/DroProjectDroneServiceImpl.java index 37322aab..c8b4cd46 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/service/impl/DroProjectDroneServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/service/impl/DroProjectDroneServiceImpl.java @@ -17,6 +17,8 @@ import org.dromara.drone.domain.bo.DroProjectDroneBo; import org.dromara.drone.domain.vo.DroProjectDroneVo; import org.dromara.drone.mapper.DroProjectDroneMapper; import org.dromara.drone.service.IDroProjectDroneService; +import org.dromara.facility.domain.FacRedLine; +import org.dromara.facility.service.IFacRedLineService; import org.dromara.manager.dronemanager.DroneManager; import org.springframework.stereotype.Service; @@ -37,6 +39,9 @@ public class DroProjectDroneServiceImpl extends ServiceImpl gatewayList = list.stream().map(DroProjectDrone::getDroneSn).toList(); + // 获取项目红线信息 + FacRedLine redLine = facRedLineService.lambdaQuery() + .eq(FacRedLine::getProjectId, projectId) + .last("limit 1") + .one(); + String positionStr = null; + if (redLine != null) { + positionStr = redLine.getPositions(); + } + // 添加机场信息 + droneManager.addAirportInfoByProject(gatewayList, positionStr, projectId); } return true; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacRedLineServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacRedLineServiceImpl.java index 8c92ec42..6bb12489 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacRedLineServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacRedLineServiceImpl.java @@ -168,6 +168,7 @@ public class FacRedLineServiceImpl extends ServiceImpl> getRlList(GpsEquipmentSonBo bo) { + return R.ok(gpsEquipmentService.getRlList(bo)); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/bo/GpsEquipmentSonBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/bo/GpsEquipmentSonBo.java index 6f3cf5a8..3a850901 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/bo/GpsEquipmentSonBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/domain/bo/GpsEquipmentSonBo.java @@ -1,17 +1,15 @@ package org.dromara.gps.domain.bo; -import org.dromara.gps.domain.GpsEquipmentSon; -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 jakarta.validation.constraints.NotNull; import lombok.Data; import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.gps.domain.GpsEquipmentSon; import java.math.BigDecimal; import java.time.LocalDateTime; -import java.util.Date; /** * GPS设备定位信息业务对象 gps_equipment_son @@ -137,4 +135,14 @@ public class GpsEquipmentSonBo extends BaseEntity { */ private Long tripId; + /** + * 用户名称 + */ + private String userName; + + /** + * 头像地址 + */ + private String avatar; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/mapper/GpsEquipmentMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/mapper/GpsEquipmentMapper.java index e1f2a8a3..a5af589b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/mapper/GpsEquipmentMapper.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/mapper/GpsEquipmentMapper.java @@ -19,13 +19,18 @@ public interface GpsEquipmentMapper extends BaseMapperPlus getUeClientList(@Param("startTime") LocalDateTime startOfDay, @Param("endTime") LocalDateTime now); + @Select("") + List getUserOrClientDate(@Param("bo") GpsEquipmentSonBo bo); @Select("WITH RankedData AS (\n" + " SELECT\n" + " *,\n" + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IGpsEquipmentService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IGpsEquipmentService.java index 9d832426..bb8023fa 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IGpsEquipmentService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IGpsEquipmentService.java @@ -1,5 +1,6 @@ package org.dromara.gps.service; +import org.dromara.gps.domain.bo.GpsEquipmentSonBo; import org.dromara.gps.domain.vo.GpsEquipmentSonVo; import org.dromara.gps.domain.vo.GpsEquipmentVo; import org.dromara.gps.domain.bo.GpsEquipmentBo; @@ -11,6 +12,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.dromara.gps.domain.vo.GpsProjectVo; import org.dromara.gps.domain.vo.GpsUserVo; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Collection; import java.util.List; @@ -108,4 +110,11 @@ public interface IGpsEquipmentService extends IService{ List getUeUserListByProjectId(LocalDateTime startOfDay, LocalDateTime now); List getListToVehicle(GpsEquipmentBo bo); + + /** + * 查询GPS人员或设备定位日期信息列表 + * @param bo + * @return + */ + List getRlList(GpsEquipmentSonBo bo); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IGpsEquipmentSonService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IGpsEquipmentSonService.java index f7dc357c..8d6dd596 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IGpsEquipmentSonService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/IGpsEquipmentSonService.java @@ -9,6 +9,7 @@ import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.service.IService; import org.dromara.gps.domain.vo.GpsStatusVo; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Collection; import java.util.List; @@ -88,4 +89,11 @@ public interface IGpsEquipmentSonService extends IService{ List getVehicleList(GpsEquipmentSonBo bo); List getNewVehicleList(GpsEquipmentSonBo bo); + + /** + * 查询GPS人员或设备定位日期信息列表 + * @param bo + * @return + */ + List getUserOrClientDate(GpsEquipmentSonBo bo); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentServiceImpl.java index 0601fd4d..85c7b14c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentServiceImpl.java @@ -11,7 +11,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.domain.dto.OssDTO; import org.dromara.common.core.exception.ServiceException; +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.PageQuery; @@ -52,8 +54,7 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.math.RoundingMode; -import java.time.Duration; -import java.time.LocalDateTime; +import java.time.*; import java.util.*; /** @@ -82,6 +83,8 @@ public class GpsEquipmentServiceImpl extends ServiceImpl ossDTOS = ossService.selectByIds(sysUserVo.getAvatar().toString()); + if (ossDTOS != null && !ossDTOS.isEmpty()) { + gpsEquipmentSonBo.setAvatar(ossDTOS.getFirst().getUrl()); + } + } + } + gpsEquipmentSonBo.setCreateTime(new Date()); + setPersonToRedis(gpsEquipmentSonBo,expireSeconds); + + // 保存到Redis并设置过期监听 updateDeviceAliveStatus(gpsEquipment.getClientId()); } @@ -627,5 +673,28 @@ public class GpsEquipmentServiceImpl extends ServiceImpl getRlList(GpsEquipmentSonBo bo) { + return gpsEquipmentSonService.getUserOrClientDate(bo); + } + + /** + * 打卡人员存入redis + */ + private void setPersonToRedis(GpsEquipmentSonBo entity,long time) { + String key = "rydw_userId_:" + entity.getUserId(); + + // 先删除可能存在的旧数据 + if (RedisUtils.isExistsObject(key)) { + RedisUtils.deleteObject(key); + } + + RedisUtils.setCacheObject(key, entity, Duration.ofSeconds(time)); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentSonServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentSonServiceImpl.java index 282a1462..3bd39100 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentSonServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/gps/service/impl/GpsEquipmentSonServiceImpl.java @@ -26,6 +26,7 @@ import org.dromara.gps.domain.GpsEquipmentSon; import org.dromara.gps.mapper.GpsEquipmentSonMapper; import org.dromara.gps.service.IGpsEquipmentSonService; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.*; @@ -247,4 +248,23 @@ public class GpsEquipmentSonServiceImpl extends ServiceImpl getUserOrClientDate(GpsEquipmentSonBo bo) { + if (bo.getProjectId() == null) { + throw new ServiceException("项目id不能为空!"); + } + if (bo.getClientId() == null && bo.getUserId() == null) { + throw new ServiceException("设备id或用户id不能为空!"); + } + if (bo.getStartTime() == null || bo.getEndTime() == null) { + throw new ServiceException("开始时间和结算时间不能为空!!!"); + } + return baseMapper.getUserOrClientDate(bo); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/land/controller/BusLandBlockController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/land/controller/BusLandBlockController.java index 4a1e8569..7cb8c642 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/land/controller/BusLandBlockController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/land/controller/BusLandBlockController.java @@ -162,7 +162,9 @@ public class BusLandBlockController extends BaseController { if (listener.hasError()) { throw new ServiceException("Excel导入失败"); } - + if (listener.getSuccessCount() <= 0) { + return R.fail("未读取到有效数据"); + } log.info("地块数据导入完成,成功: {},失败: {}", listener.getSuccessCount(), listener.getFailCount()); } catch (IOException e) { diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/dronemanager/DroneManager.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/dronemanager/DroneManager.java index 38fd0596..a35a4bec 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/dronemanager/DroneManager.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/dronemanager/DroneManager.java @@ -22,11 +22,12 @@ public class DroneManager { /** * 添加机场信息 * - * @param gateways 网关列表 - * @param projectId 项目id + * @param gateways 网关列表 + * @param redLineStr 红线坐标 + * @param projectId 项目 id */ - public void addAirportInfoByProject(List gateways, Long projectId) { - DroneRequestUtils.addAirportInfoByProject(droneProperties.getUrl(), gateways, projectId); + public void addAirportInfoByProject(List gateways, String redLineStr, Long projectId) { + DroneRequestUtils.addAirportInfoByProject(droneProperties.getUrl(), gateways, redLineStr, projectId); } /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/dronemanager/DroneRequestUtils.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/dronemanager/DroneRequestUtils.java index fe17682b..605b2815 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/dronemanager/DroneRequestUtils.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/dronemanager/DroneRequestUtils.java @@ -1,6 +1,7 @@ package org.dromara.manager.dronemanager; import cn.hutool.core.collection.CollUtil; +import cn.hutool.http.Header; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.json.JSONArray; @@ -25,28 +26,29 @@ public class DroneRequestUtils { /** * 添加项目机场信息 * - * @param gateways 飞机编号 - * @param projectId 项目id + * @param gateways 飞机编号 + * @param redLineStr 红线位置 + * @param projectId 项目 id */ - public static void addAirportInfoByProject(String url, List gateways, Long projectId) { + public static void addAirportInfoByProject(String url, List gateways, String redLineStr, Long projectId) { if (CollUtil.isEmpty(gateways)) { throw new ServiceException("请选择飞机", HttpStatus.BAD_REQUEST); } if (projectId == null) { throw new ServiceException("请选择项目", HttpStatus.BAD_REQUEST); } - // 拼接 query 参数 - StringBuilder queryBuilder = new StringBuilder(); - queryBuilder.append("projectId=").append(projectId); - for (String gateway : gateways) { - queryBuilder.append("&gateways=").append(gateway); - } - - // 完整 URL - String fullUrl = url + DroneConstant.ADD_DRONE_INFO_BY_PROJECT + "?" + queryBuilder; + String gatewayStr = String.join(",", gateways); + // 构造请求体 JSON + JSONObject reqBody = new JSONObject(); + reqBody.set("projectId", projectId); + reqBody.set("gateways", gatewayStr); + reqBody.set("range", redLineStr); + String fullUrl = url + DroneConstant.ADD_DRONE_INFO_BY_PROJECT; + log.info("添加项目机场信息请求 URL:{}", fullUrl); String errorMsg = "添加项目机场信息请求失败"; try (HttpResponse response = HttpRequest.post(fullUrl) - .body("{}") + .header(Header.CONTENT_TYPE, "application/json") + .body(reqBody.toString()) .execute()) { if (!response.isOk()) { log.error("{}:{}", errorMsg, response.getStatus()); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/Ys7Constant.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/Ys7Constant.java index a919dc35..b15f11f8 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/Ys7Constant.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/Ys7Constant.java @@ -61,4 +61,14 @@ public interface Ys7Constant { */ String setDeviceVideoUrlByPost = "https://open.ys7.com/api/lapp/device/fullday/record/switch/set"; + /** + * 摄像头查询设备本地录像 Get + */ + String getDeviceLocalVideoUrlByGet = "https://open.ys7.com/api/v3/device/local/video/unify/query"; + + /** + * 获取播放地址 POST + */ + String getDeviceLappVideoUrlByPost = "https://open.ys7.com/api/lapp/v2/live/address/get"; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/Ys7RequestUtils.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/Ys7RequestUtils.java index dfb29cb2..636ba096 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/Ys7RequestUtils.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/Ys7RequestUtils.java @@ -4,17 +4,20 @@ import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.constant.HttpStatus; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.StringUtils; -import org.dromara.manager.ys7manager.vo.Ys7NoDataResponseVo; -import org.dromara.manager.ys7manager.vo.Ys7PageResponseVo; -import org.dromara.manager.ys7manager.vo.Ys7QueryDeviceResponseVo; -import org.dromara.manager.ys7manager.vo.Ys7ResponseVo; +import org.dromara.common.core.utils.TimestampUtils; +import org.dromara.manager.ys7manager.dto.DeviceLocalVideoRequstDto; +import org.dromara.manager.ys7manager.dto.DevicePlayBackUrlRequstDto; +import org.dromara.manager.ys7manager.vo.*; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Objects; /** * @author lilemy @@ -290,4 +293,159 @@ public class Ys7RequestUtils { } } + + /** + * 获取播放地址 + * @param dto + * @return + */ + public static String getDevicePlayBackUrl(DevicePlayBackUrlRequstDto dto) { + if (StringUtils.isAnyBlank(dto.getAccessToken(), dto.getDeviceSerial())) { + throw new ServiceException("获取回放录像参数为空", HttpStatus.BAD_REQUEST); + } + HashMap paramMap = new HashMap<>(); + paramMap.put("accessToken", dto.getAccessToken()); + paramMap.put("deviceSerial", dto.getDeviceSerial()); + if (dto.getChannelNo() != null) { + paramMap.put("channelNo", dto.getChannelNo()); + } + if (dto.getQuality() != null) { + paramMap.put("quality", dto.getQuality()); + } + if (dto.getProtocol() != null) { + paramMap.put("protocol", dto.getProtocol()); + } + if (dto.getStartTime() != null) { + paramMap.put("startTime", dto.getStartTime()); + } + if (dto.getEndTime() != null) { + paramMap.put("stopTime", dto.getEndTime()); + } + if (dto.getType() != null) { + paramMap.put("type", dto.getType()); + } + if (dto.getExpireTime() != null) { + paramMap.put("expireTime", dto.getExpireTime()); + } + if (dto.getRecType() != null) { + paramMap.put("recType", dto.getRecType()); + } + if (dto.getCode() != null) { + paramMap.put("code", dto.getCode()); + } + if (dto.getSupportH265() != null) { + paramMap.put("supportH265", dto.getSupportH265()); + } + if (dto.getPlaybackSpeed() != null) { + paramMap.put("playbackSpeed", dto.getPlaybackSpeed()); + } + if (dto.getGbchannel() != null) { + paramMap.put("gbchannel", dto.getGbchannel()); + } + String errorMsg = "获取回放录像请求失败"; + try (HttpResponse response = HttpRequest.post(Ys7Constant.getDeviceLappVideoUrlByPost) + .form(paramMap) + .execute()) { + if (!response.isOk()) { + log.error("{}:{}", errorMsg, response.getStatus()); + throw new ServiceException(errorMsg + response.getStatus()); + } + String body = response.body(); + log.info("本地录像body{}",body); + Ys7ResponseVo responseVo = JSONUtil.toBean(body, Ys7ResponseVo.class); + if (!responseVo.getCode().equals("200")) { + log.error("{},状态码:{},{}", errorMsg, responseVo.getCode(), responseVo.getMsg()); + throw new ServiceException(errorMsg + responseVo.getMsg()); + } + String data = responseVo.getData(); + String picUrl = JSONUtil.parseObj(data).getStr("url"); + log.info("获取回放录像请求成功,设备[{}]回放成功,通道:{},url:{}", dto.getDeviceSerial(), dto.getChannelNo(), picUrl); + return picUrl; + } + } + + /** + * 查询设备某天的本地录像 + * @param dto + * @return + */ + public static List getDeviceLocalVideo(DeviceLocalVideoRequstDto dto) { + if (StringUtils.isAnyBlank(dto.getAccessToken(), dto.getDeviceSerial(),dto.getStartTime(), dto.getEndTime())) { + throw new ServiceException("查询设备本地录像参数为空", HttpStatus.BAD_REQUEST); + } + dto.setStartTime(Objects.requireNonNull(TimestampUtils.parseDateToTimestamp(dto.getStartTime())).toString()); + dto.setEndTime(Objects.requireNonNull(TimestampUtils.parseDateToTimestamp(dto.getEndTime())).toString()); + List vos = new ArrayList<>(); + getRexords(dto, vos); + return vos; + } + + private static void getRexords(DeviceLocalVideoRequstDto dto, List vos) { + String errorMsg = "查询设备本地录像请求失败"; + String body = getDevicceLocalVideoBody(dto); + log.info("本地录像body{}",body); + JSONObject jsonObject = JSONUtil.parseObj(body); + DeviceLocalVideoMetaVo meta = JSONUtil.toBean(jsonObject.getJSONObject("meta"), DeviceLocalVideoMetaVo.class); + if (!meta.getCode().equals("200")) { + log.error("{},状态码:{},{}", errorMsg, meta.getCode(), meta.getMessage()); + throw new ServiceException(errorMsg + meta.getMessage()); + } + DeviceLocalVideoDataVo data = JSONUtil.toBean(jsonObject.getJSONObject("data"), DeviceLocalVideoDataVo.class); + if (data != null) { + List list = JSONUtil.toList(data.getRecords(), DeviceLocalVideoRecordsVo.class); + if (list != null && !list.isEmpty()) { + list.forEach(vo -> { + vo.setStartTime(TimestampUtils.extractTime(vo.getStartTime())); + vo.setEndTime(TimestampUtils.extractTime(vo.getEndTime())); + }); + vos.addAll(list); + } + if (data.getHasMore()){ + dto.setStartTime(data.getNextFileTime()); + if (Long.parseLong(dto.getStartTime()) > Long.parseLong(dto.getEndTime())){ + return; + } + getRexords(dto, vos); + } + } + + } + + private static String getDevicceLocalVideoBody(DeviceLocalVideoRequstDto dto) { + // 2. 构建Header参数(接口文档的Header部分) + HttpRequest request = HttpRequest.get(Ys7Constant.getDeviceLocalVideoUrlByGet) + .header("accessToken", dto.getAccessToken()) // Header参数:accessToken + .header("deviceSerial", dto.getDeviceSerial());// Header参数:deviceSerial + // 可选Header:localIndex(对应dto的channelNo) + if (dto.getChannelNo() != null) { + request.header("channelNo", dto.getChannelNo().toString()); + } + + // 3. 构建Query参数(接口文档的query部分) + request.form("startTime", dto.getStartTime()) // Query必传:startTime + .form("endTime", dto.getEndTime()); // Query必传:endTime + // 可选Query参数 + if (dto.getRecordType() != null) { + request.form("recordType", dto.getRecordType().toString()); + } + if (dto.getIsQueryByNvr() != null) { + request.form("isQueryByNvr", dto.getIsQueryByNvr().toString()); + } + if (dto.getLocation() != null) { + request.form("location", dto.getLocation().toString()); + } + if (dto.getPageSize() != null) { + request.form("pageSize", dto.getPageSize().toString()); + } + + String errorMsg = "查询设备本地录像请求失败"; + try (HttpResponse response = request.execute()) { + if (!response.isOk()) { + log.error("{}:{}", errorMsg, response.getStatus()); + throw new ServiceException(errorMsg + response.getStatus()); + } + return response.body(); + } + } + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/dto/DeviceLocalVideoRequstDto.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/dto/DeviceLocalVideoRequstDto.java new file mode 100644 index 00000000..62e67124 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/dto/DeviceLocalVideoRequstDto.java @@ -0,0 +1,18 @@ +package org.dromara.manager.ys7manager.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class DeviceLocalVideoRequstDto implements Serializable { + private String accessToken; //toke + private String deviceSerial; //设备序列号 + private Integer channelNo; // 通道号,默认1 + private Integer recordType; // 1:定时录像 2:事件录像 3:智能-车 4:智能-人形 5:自动浓缩录像,不填默认查询所有类型 + private String startTime; // 回放开始时间(格式:yyyy-MM-dd HH:mm:ss) + private String endTime; // 回放结束时间(格式:yyyy-MM-dd HH:mm:ss) + private Integer isQueryByNvr; // 是否反查NVR录像:0-不反查(默认),1-反查NVR + private Integer location; // 录像检索位置:1-本地录像检索(默认),2-CVR中心录像检索 + private Integer pageSize; // 分页的页面大小,默认50,最大200 +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/dto/DevicePlayBackUrlRequstDto.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/dto/DevicePlayBackUrlRequstDto.java new file mode 100644 index 00000000..094477b4 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/dto/DevicePlayBackUrlRequstDto.java @@ -0,0 +1,23 @@ +package org.dromara.manager.ys7manager.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class DevicePlayBackUrlRequstDto implements Serializable { + private String accessToken; //toke + private String deviceSerial; //设备序列号 + private Integer channelNo; // 通道号,默认1 + private Integer protocol; // 流协议:1-ezopen、2-hls、3-rtmp、4-flv,默认1 + private String code; // 视频加密密码 + private Integer expireTime; // 过期时长(秒),30秒-720天 + private String type; // 地址类型:1-预览,2-本地录像回放,3-云存储录像回放,默认1 + private Integer quality; // 清晰度:1-高清,2-流畅 + private String startTime; // 回放开始时间(格式:yyyy-MM-dd HH:mm:ss) + private String endTime; // 回放结束时间(格式:yyyy-MM-dd HH:mm:ss) + private Integer supportH265; // 是否需要H265编码:1-是,0-否 + private Integer recType; // 回放源,0-系统自动选择,1-云存储,2-本地录像。非必选,默认为0 + private String playbackSpeed; // 回放倍速:-1、0.5、1、2、4、8、16(仅支持flv协议+回放类型) + private String gbchannel; // 国标设备通道编号 +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/vo/DeviceLocalVideoDataVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/vo/DeviceLocalVideoDataVo.java new file mode 100644 index 00000000..97df8568 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/vo/DeviceLocalVideoDataVo.java @@ -0,0 +1,29 @@ +package org.dromara.manager.ys7manager.vo; + +import lombok.Data; + +/** + * @author lilemy + * @date 2025/6/12 17:14 + */ +@Data +public class DeviceLocalVideoDataVo { + + /** + * 响应内容 + */ + private String records; + + //该录像文件是否来自关联的nvr + private String fromNvr; + + // fromNvr为true,则返回关联NVR设备序列号,否则返回入参填的设备序列号。 + private String deviceSerial; + // fromNvr为true,则返回关联NVR设备通道号,否则返回入参填的设备通道号 + private String localIndex; + //是否存在更多录像文件 + private Boolean hasMore; + // hasMore为true时,该参数值为下一个录像文件的开始时间。如需分页查询,该参数值可作为下一页录像文件查询的开始时间。 + private String nextFileTime; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/vo/DeviceLocalVideoMetaVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/vo/DeviceLocalVideoMetaVo.java new file mode 100644 index 00000000..0873bc1b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/vo/DeviceLocalVideoMetaVo.java @@ -0,0 +1,27 @@ +package org.dromara.manager.ys7manager.vo; + +import lombok.Data; + +/** + * @author lilemy + * @date 2025/6/12 17:14 + */ +@Data +public class DeviceLocalVideoMetaVo { + + /** + * 响应码 + */ + private String code; + + /** + * 响应信息 + */ + private String message; + + /** + * 响应信息 + */ + private String moreInfo; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/vo/DeviceLocalVideoRecordsVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/vo/DeviceLocalVideoRecordsVo.java new file mode 100644 index 00000000..ddbd65df --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/manager/ys7manager/vo/DeviceLocalVideoRecordsVo.java @@ -0,0 +1,27 @@ +package org.dromara.manager.ys7manager.vo; + +import lombok.Data; + +/** + * @author lilemy + * @date 2025/6/12 17:14 + */ +@Data +public class DeviceLocalVideoRecordsVo { + + /** + * 开始时间 + */ + private String startTime; + + /** + * 结束时间 + */ + private String endTime; + + //录像类型 + private String type; + //录像文件大小,单位:字节 + private String size; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/controller/JxAqjcglController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/controller/JxAqjcglController.java new file mode 100644 index 00000000..09df6c0e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/controller/JxAqjcglController.java @@ -0,0 +1,167 @@ +package org.dromara.mechanical.jxaqgl.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.device.domain.bo.DeviceInfoBo; +import org.dromara.device.domain.vo.DeviceInfoVo; +import org.dromara.device.service.IDeviceInfoService; +import org.dromara.mechanical.jxaqgl.domain.vo.JxAnqjcgHeadVo; +import org.dromara.project.domain.vo.projectteam.BusProjectTeamForemanVo; +import org.dromara.project.service.IBusProjectTeamService; +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.mechanical.jxaqgl.domain.vo.JxAqjcglVo; +import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglBo; +import org.dromara.mechanical.jxaqgl.service.IJxAqjcglService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 机械安全检查记录 + * + * @author Lion Li + * @date 2025-12-03 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/jxaqgl/aqjcgl") +public class JxAqjcglController extends BaseController { + + private final IJxAqjcglService jxAqjcglService; + + + private final IDeviceInfoService deviceInfoService; + + private final IBusProjectTeamService busProjectTeamService; + + + + + + /** + * 根据项目id查询项目班组班组长信息列表 + */ + @SaCheckPermission("jxaqgl:aqjcgl:list") + @GetMapping("/listForeman/{projectId}") + public R> listForeman(@NotNull(message = "项目id不能为空") + @PathVariable Long projectId) { + return R.ok(busProjectTeamService.queryForemanListByProjectId(projectId)); + } + + + + + + /** + * 查询设备信息列表 + */ + @SaCheckPermission("jxaqgl:aqjcgl:list") + @GetMapping("/getlist") + public TableDataInfo list(DeviceInfoBo bo, PageQuery pageQuery) { + return deviceInfoService.queryPageList(bo, pageQuery); + } + + + + /** + * 查询近30天机械安全检查记录头部数据 + */ + @SaCheckPermission("jxaqgl:aqjcgl:list") + @GetMapping("/listHead") + public R listHead(JxAqjcglBo bo, PageQuery pageQuery) { + return R.ok(jxAqjcglService.listHead(bo, pageQuery)); + } + + + /** + * 查询近6月机械安全检查结果趋势 + */ + @SaCheckPermission("jxaqgl:aqjcgl:list") + @GetMapping("/listHeadJgqs") + public List listHeadJgqs(JxAqjcglBo bo, PageQuery pageQuery) { + return jxAqjcglService.listHeadJgqs(bo, pageQuery); + } + + + + + /** + * 查询机械安全检查记录列表 + */ + @SaCheckPermission("jxaqgl:aqjcgl:list") + @GetMapping("/list") + public TableDataInfo list(JxAqjcglBo bo, PageQuery pageQuery) { + return jxAqjcglService.queryPageList(bo, pageQuery); + } + + /** + * 导出机械安全检查记录列表 + */ + @SaCheckPermission("jxaqgl:aqjcgl:export") + @Log(title = "机械安全检查记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(JxAqjcglBo bo, HttpServletResponse response) { + List list = jxAqjcglService.queryList(bo); + ExcelUtil.exportExcel(list, "机械安全检查记录", JxAqjcglVo.class, response); + } + + /** + * 获取机械安全检查记录详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("jxaqgl:aqjcgl:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(jxAqjcglService.queryById(id)); + } + + /** + * 新增机械安全检查记录 + */ + @SaCheckPermission("jxaqgl:aqjcgl:add") + @Log(title = "机械安全检查记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody JxAqjcglBo bo) { + return toAjax(jxAqjcglService.insertByBo(bo)); + } + + /** + * 修改机械安全检查记录 + */ + @SaCheckPermission("jxaqgl:aqjcgl:edit") + @Log(title = "机械安全检查记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody JxAqjcglBo bo) { + return toAjax(jxAqjcglService.updateByBo(bo)); + } + + /** + * 删除机械安全检查记录 + * + * @param ids 主键串 + */ + @SaCheckPermission("jxaqgl:aqjcgl:remove") + @Log(title = "机械安全检查记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(jxAqjcglService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/JxAqjcgl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/JxAqjcgl.java new file mode 100644 index 00000000..e2909aee --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/JxAqjcgl.java @@ -0,0 +1,141 @@ +package org.dromara.mechanical.jxaqgl.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.time.LocalDate; + +/** + * 机械安全检查记录对象 jx_aqjcgl + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("jx_aqjcgl") +public class JxAqjcgl extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 检查单编号 + */ + private String inspectionOrderNo; + + /** + * 检查日期 + */ + private LocalDate inspectionDate; + + /** + * 检查类型 + */ + private String inspectionType; + + /** + * 检查人 + */ + private Long inspector; + + /** + * 参与人(多个用逗号分隔) + */ + private String participants; + + /** + * 所属项目(如田东) + */ + private Long projectStation; + + /** + * 所属项目名称(如田东) + */ + private String projectName; + + /** + * 机械设备id + */ + private String equipmentId; + + /** + * 机械设备名称 + */ + private String equipmentName; + + /** + * 不通过原因 + */ + private String notPassCause; + /** + * 机械设备编号 + */ + private String equipmentCode; + + /** + * 设备类型(下拉选择项) + */ + private String equipmentType; + + /** + * 检查结果 + */ + private String inspectionResult; + + /** + * 风险等级 + */ + private String riskGrade; + + + /** + * 整改状态 + */ + private String abarbeitungState; + + /** + * 整改责任人 + */ + private Long abarbeitung; + + /** + * 选择分包还是班组 + */ + private String rectificationUnit; + + /** + * 整改单位 + */ + private Long rectificationId; + + /** + * 整改日期 + */ + private LocalDate abarbeitungDate; + + /** + * 审核状态 + */ + private String auditStatus; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + /** + * 文件id (多个文件逗号分隔) + */ + private String pdfId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/JxAqjcglJcnr.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/JxAqjcglJcnr.java new file mode 100644 index 00000000..f8ad6f4e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/JxAqjcglJcnr.java @@ -0,0 +1,46 @@ +package org.dromara.mechanical.jxaqgl.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 机械安全检查记录——检查内容对象 jx_aqjcgl_jcnr + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("jx_aqjcgl_jcnr") +public class JxAqjcglJcnr extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 主表ID + */ + private Long masterId; + + /** + * 检查内容value + */ + private String examineValue; + + /** + * 检查内容数据 + */ + private String examineContent; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/JxAqjcglWtxq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/JxAqjcglWtxq.java new file mode 100644 index 00000000..f89a98c7 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/JxAqjcglWtxq.java @@ -0,0 +1,41 @@ +package org.dromara.mechanical.jxaqgl.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 机械安全检查记录——问题详情对象 jx_aqjcgl_wtxq + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("jx_aqjcgl_wtxq") +public class JxAqjcglWtxq extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 主表ID + */ + private Long masterId; + + /** + * 问题详情 + */ + private String issueParticulars; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/MonthDateRange.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/MonthDateRange.java new file mode 100644 index 00000000..2340a1bf --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/MonthDateRange.java @@ -0,0 +1,24 @@ +package org.dromara.mechanical.jxaqgl.domain; + + +import lombok.Data; + +import java.time.LocalDate; + +@Data +public class MonthDateRange { + + private LocalDate startDate; // 当月1号 + private LocalDate endDate; // 当月最后一天 + private String yearMonth; // 年月标识 + + + + + // 构造方法 + public MonthDateRange(LocalDate startDate, LocalDate endDate, String yearMonth) { + this.startDate = startDate; + this.endDate = endDate; + this.yearMonth = yearMonth; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/bo/JxAqjcglBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/bo/JxAqjcglBo.java new file mode 100644 index 00000000..510a9425 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/bo/JxAqjcglBo.java @@ -0,0 +1,164 @@ +package org.dromara.mechanical.jxaqgl.domain.bo; + +import org.dromara.mechanical.jxaqgl.domain.JxAqjcgl; +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.time.LocalDate; +import java.util.List; + +/** + * 机械安全检查记录业务对象 jx_aqjcgl + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = JxAqjcgl.class, reverseConvertGenerate = false) +public class JxAqjcglBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 检查单编号 + */ + private String inspectionOrderNo; + + /** + * 检查日期 + */ + @NotNull(message = "检查日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate inspectionDate; + + /** + * 检查类型 + */ + @NotBlank(message = "检查类型不能为空", groups = { AddGroup.class, EditGroup.class }) + private String inspectionType; + + /** + * 检查人 + */ + @NotNull(message = "检查人不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long inspector; + + /** + * 参与人(多个用逗号分隔) + */ + private String participants; + + + /** + * 整改状态 + */ + private String abarbeitungState; + + /** + * 选择分包还是班组 + */ + private String rectificationUnit; + + /** + * 整改单位 + */ + private Long rectificationId; + + /** + * 所属项目(如田东) + */ + @NotNull(message = "所属项目(如田东)不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long projectStation; + + /** + * 所属项目名称(如田东) + */ + @NotNull(message = "所属项目名称(如田东)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String projectName; + + /** + * 机械设备id + */ + @NotBlank(message = "机械设备id不能为空", groups = { AddGroup.class, EditGroup.class }) + private String equipmentId; + + /** + * 机械设备名称 + */ + @NotBlank(message = "机械设备名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String equipmentName; + + /** + * 机械设备编号 + */ +// @NotBlank(message = "机械设备编号不能为空", groups = { AddGroup.class, EditGroup.class }) + private String equipmentCode; + + /** + * 设备类型(下拉选择项) + */ + @NotBlank(message = "设备类型(下拉选择项)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String equipmentType; + + /** + * 检查结果 + */ + @NotBlank(message = "检查结果不能为空", groups = { AddGroup.class, EditGroup.class }) + private String inspectionResult; + + /** + * 不通过原因 + */ + private String notPassCause; + + /** + * 风险等级 + */ + private String riskGrade; + + /** + * 整改责任人 + */ + private Long abarbeitung; + + /** + * 整改日期 + */ + private LocalDate abarbeitungDate; + + /** + * 审核状态 + */ + private String auditStatus; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + /** + * 文件id (多个文件逗号分隔) + */ + private String pdfId; + + + /** + * 检查内容 + */ + private List jcnrList; + /** + * 问题详情 + */ + private List wtxqBoList; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/bo/JxAqjcglJcnrBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/bo/JxAqjcglJcnrBo.java new file mode 100644 index 00000000..8f712e40 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/bo/JxAqjcglJcnrBo.java @@ -0,0 +1,47 @@ +package org.dromara.mechanical.jxaqgl.domain.bo; + +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglJcnr; +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.*; + +/** + * 机械安全检查记录——检查内容业务对象 jx_aqjcgl_jcnr + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = JxAqjcglJcnr.class, reverseConvertGenerate = false) +public class JxAqjcglJcnrBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 主表ID + */ + @NotNull(message = "主表ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long masterId; + + /** + * 检查内容key + */ + @NotBlank(message = "检查内容value不能为空", groups = { AddGroup.class, EditGroup.class }) + private String examineValue; + /** + * 检查内容数据 + */ + @NotBlank(message = "检查内容数据不能为空", groups = { AddGroup.class, EditGroup.class }) + private String examineContent; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/bo/JxAqjcglWtxqBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/bo/JxAqjcglWtxqBo.java new file mode 100644 index 00000000..f9f8641b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/bo/JxAqjcglWtxqBo.java @@ -0,0 +1,42 @@ +package org.dromara.mechanical.jxaqgl.domain.bo; + +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq; +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.*; + +/** + * 机械安全检查记录——问题详情业务对象 jx_aqjcgl_wtxq + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = JxAqjcglWtxq.class, reverseConvertGenerate = false) +public class JxAqjcglWtxqBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 主表ID + */ + @NotNull(message = "主表ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long masterId; + + /** + * 问题详情 + */ + @NotBlank(message = "问题详情不能为空", groups = { AddGroup.class, EditGroup.class }) + private String issueParticulars; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAnqjcgHeadVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAnqjcgHeadVo.java new file mode 100644 index 00000000..df75a781 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAnqjcgHeadVo.java @@ -0,0 +1,69 @@ +package org.dromara.mechanical.jxaqgl.domain.vo; + + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class JxAnqjcgHeadVo implements Serializable { + + /** + * 月份 + */ + private String month = ""; + + /** + * 总数 + */ + private Long zs = 0L; + + /** + * 未通过 + */ + private Long wtg = 0L; + + /** + * 通过 + */ + private Long tg = 0L; + + + /** + * 待检测 + */ + private Long djc = 0L; + + + /** + * 整改完成率 + */ +// private String wcl = "0%"; + + /** + * 日常巡检 + */ + private Long rcxj = 0L; + + /** + * 周检 + */ + private Long zj = 0L; + + /** + * 月检 + */ + private Long yj = 0L; + + /** + * 专项检查 + */ + private Long zxjc = 0L; + /** + * 复检 + */ + private Long fj = 0L; + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAqjcglJcnrVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAqjcglJcnrVo.java new file mode 100644 index 00000000..3490a512 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAqjcglJcnrVo.java @@ -0,0 +1,55 @@ +package org.dromara.mechanical.jxaqgl.domain.vo; + +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglJcnr; +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; + + + +/** + * 机械安全检查记录——检查内容视图对象 jx_aqjcgl_jcnr + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = JxAqjcglJcnr.class) +public class JxAqjcglJcnrVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 主表ID + */ + @ExcelProperty(value = "主表ID") + private Long masterId; + + /** + * 检查内容key + */ + @ExcelProperty(value = "检查内容value") + private String examineValue; + /** + * 检查内容数据 + */ + @ExcelProperty(value = "检查内容数据") + private String examineContent; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAqjcglVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAqjcglVo.java new file mode 100644 index 00000000..932d1e35 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAqjcglVo.java @@ -0,0 +1,222 @@ +package org.dromara.mechanical.jxaqgl.domain.vo; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import jakarta.validation.constraints.NotBlank; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcgl; +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 org.dromara.mechanical.jxaqgl.domain.JxAqjcglJcnr; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq; +import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglJcnrBo; +import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglWtxqBo; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; +import java.util.Date; +import java.util.List; + + +/** + * 机械安全检查记录视图对象 jx_aqjcgl + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = JxAqjcgl.class) +public class JxAqjcglVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 检查单编号 + */ + @ExcelProperty(value = "检查单编号") + private String inspectionOrderNo; + + /** + * 检查日期 + */ + @ExcelProperty(value = "检查日期") + private LocalDate inspectionDate; + + /** + * 检查类型 + */ + @ExcelProperty(value = "检查类型") + private String inspectionType; + + /** + * 检查人 + */ + @ExcelProperty(value = "检查人") + private Long inspector; + + + /** + * 整改状态 + */ + private String abarbeitungState; + + /** + * 选择分包还是班组 + */ + private String rectificationUnit; + + /** + * 整改单位 + */ + private Long rectificationId; + + /** + * 整改单位 + */ + private String rectificationName; + /** + * 检查人 + */ + @ExcelProperty(value = "检查人") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "inspector") + private String inspectorName; + + /** + * 参与人(多个用逗号分隔) + */ + @ExcelProperty(value = "参与人") + private String participants; + + /** + * 所属项目(如田东) + */ + @ExcelProperty(value = "所属项目(如田东)") + private Long projectStation; + + /** + * 所属项目名称(如田东) + */ + @ExcelProperty(value = "所属项目名称(如田东)") + private String projectName; + + /** + * 机械设备id + */ + @ExcelProperty(value = "机械设备id") + private String equipmentId; + + /** + * 机械设备名称 + */ + @ExcelProperty(value = "机械设备名称") + private String equipmentName; + + /** + * 机械设备编号 + */ + @ExcelProperty(value = "机械设备编号") + private String equipmentCode; + + /** + * 设备类型 + */ + @ExcelProperty(value = "设备类型") + private String equipmentType; + + /** + * 检查结果 + */ + @ExcelProperty(value = "检查结果") + private String inspectionResult; + + /** + * 风险等级 + */ + @ExcelProperty(value = "风险等级") + private String riskGrade; + + /** + * 整改责任人 + */ + @ExcelProperty(value = "整改责任人") + private Long abarbeitung; + + + /** + * 整改责任人 + */ + @ExcelProperty(value = "整改责任人") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "abarbeitung") + private String abarbeitungName; + + + /** + * 整改日期 + */ + @ExcelProperty(value = "整改日期") + private LocalDate abarbeitungDate; + + /** + * 审核状态 + */ + @ExcelProperty(value = "审核状态") + private String auditStatus; + + /** + * 文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String fileId; + + /** + * 文件id (多个文件逗号分隔) + */ + private String pdfId; + + /** + * 不通过原因 + */ + private String notPassCause; + + /** + * 创建者 + */ + @TableField(fill = FieldFill.INSERT) + private Long createBy; + + /** + * 创建者 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy") + @TableField(fill = FieldFill.INSERT) + private Long createByname; + + /** + * 检查内容 + */ + private List jcnrList; + /** + * 问题详情 + */ + private List wtxqBoList; + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAqjcglWtxqVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAqjcglWtxqVo.java new file mode 100644 index 00000000..ccd7acc9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/domain/vo/JxAqjcglWtxqVo.java @@ -0,0 +1,50 @@ +package org.dromara.mechanical.jxaqgl.domain.vo; + +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq; +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; + + + +/** + * 机械安全检查记录——问题详情视图对象 jx_aqjcgl_wtxq + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = JxAqjcglWtxq.class) +public class JxAqjcglWtxqVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 主表ID + */ + @ExcelProperty(value = "主表ID") + private Long masterId; + + /** + * 问题详情 + */ + @ExcelProperty(value = "问题详情") + private String issueParticulars; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/mapper/JxAqjcglJcnrMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/mapper/JxAqjcglJcnrMapper.java new file mode 100644 index 00000000..89ec5c0b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/mapper/JxAqjcglJcnrMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mechanical.jxaqgl.mapper; + +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglJcnr; +import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglJcnrVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 机械安全检查记录——检查内容Mapper接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface JxAqjcglJcnrMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/mapper/JxAqjcglMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/mapper/JxAqjcglMapper.java new file mode 100644 index 00000000..5987f759 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/mapper/JxAqjcglMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mechanical.jxaqgl.mapper; + +import org.dromara.mechanical.jxaqgl.domain.JxAqjcgl; +import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 机械安全检查记录Mapper接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface JxAqjcglMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/mapper/JxAqjcglWtxqMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/mapper/JxAqjcglWtxqMapper.java new file mode 100644 index 00000000..f3eb44c1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/mapper/JxAqjcglWtxqMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mechanical.jxaqgl.mapper; + +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq; +import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglWtxqVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 机械安全检查记录——问题详情Mapper接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface JxAqjcglWtxqMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/IJxAqjcglJcnrService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/IJxAqjcglJcnrService.java new file mode 100644 index 00000000..e2fb79c9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/IJxAqjcglJcnrService.java @@ -0,0 +1,70 @@ +package org.dromara.mechanical.jxaqgl.service; + +import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglJcnrVo; +import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglJcnrBo; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglJcnr; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 机械安全检查记录——检查内容Service接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface IJxAqjcglJcnrService extends IService{ + + /** + * 查询机械安全检查记录——检查内容 + * + * @param id 主键 + * @return 机械安全检查记录——检查内容 + */ + JxAqjcglJcnrVo queryById(Long id); + + /** + * 分页查询机械安全检查记录——检查内容列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械安全检查记录——检查内容分页列表 + */ + TableDataInfo queryPageList(JxAqjcglJcnrBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械安全检查记录——检查内容列表 + * + * @param bo 查询条件 + * @return 机械安全检查记录——检查内容列表 + */ + List queryList(JxAqjcglJcnrBo bo); + + /** + * 新增机械安全检查记录——检查内容 + * + * @param bo 机械安全检查记录——检查内容 + * @return 是否新增成功 + */ + Boolean insertByBo(JxAqjcglJcnrBo bo); + + /** + * 修改机械安全检查记录——检查内容 + * + * @param bo 机械安全检查记录——检查内容 + * @return 是否修改成功 + */ + Boolean updateByBo(JxAqjcglJcnrBo bo); + + /** + * 校验并批量删除机械安全检查记录——检查内容信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/IJxAqjcglService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/IJxAqjcglService.java new file mode 100644 index 00000000..b376500d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/IJxAqjcglService.java @@ -0,0 +1,76 @@ +package org.dromara.mechanical.jxaqgl.service; + +import org.dromara.common.core.domain.R; +import org.dromara.mechanical.jxaqgl.domain.vo.JxAnqjcgHeadVo; +import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglVo; +import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglBo; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcgl; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 机械安全检查记录Service接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface IJxAqjcglService extends IService{ + + /** + * 查询机械安全检查记录 + * + * @param id 主键 + * @return 机械安全检查记录 + */ + JxAqjcglVo queryById(Long id); + + /** + * 分页查询机械安全检查记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械安全检查记录分页列表 + */ + TableDataInfo queryPageList(JxAqjcglBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械安全检查记录列表 + * + * @param bo 查询条件 + * @return 机械安全检查记录列表 + */ + List queryList(JxAqjcglBo bo); + + /** + * 新增机械安全检查记录 + * + * @param bo 机械安全检查记录 + * @return 是否新增成功 + */ + Boolean insertByBo(JxAqjcglBo bo); + + /** + * 修改机械安全检查记录 + * + * @param bo 机械安全检查记录 + * @return 是否修改成功 + */ + Boolean updateByBo(JxAqjcglBo bo); + + /** + * 校验并批量删除机械安全检查记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + JxAnqjcgHeadVo listHead(JxAqjcglBo bo, PageQuery pageQuery); + + List listHeadJgqs(JxAqjcglBo bo, PageQuery pageQuery); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/IJxAqjcglWtxqService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/IJxAqjcglWtxqService.java new file mode 100644 index 00000000..eaccc5bc --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/IJxAqjcglWtxqService.java @@ -0,0 +1,70 @@ +package org.dromara.mechanical.jxaqgl.service; + +import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglWtxqVo; +import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglWtxqBo; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 机械安全检查记录——问题详情Service接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface IJxAqjcglWtxqService extends IService{ + + /** + * 查询机械安全检查记录——问题详情 + * + * @param id 主键 + * @return 机械安全检查记录——问题详情 + */ + JxAqjcglWtxqVo queryById(Long id); + + /** + * 分页查询机械安全检查记录——问题详情列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械安全检查记录——问题详情分页列表 + */ + TableDataInfo queryPageList(JxAqjcglWtxqBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械安全检查记录——问题详情列表 + * + * @param bo 查询条件 + * @return 机械安全检查记录——问题详情列表 + */ + List queryList(JxAqjcglWtxqBo bo); + + /** + * 新增机械安全检查记录——问题详情 + * + * @param bo 机械安全检查记录——问题详情 + * @return 是否新增成功 + */ + Boolean insertByBo(JxAqjcglWtxqBo bo); + + /** + * 修改机械安全检查记录——问题详情 + * + * @param bo 机械安全检查记录——问题详情 + * @return 是否修改成功 + */ + Boolean updateByBo(JxAqjcglWtxqBo bo); + + /** + * 校验并批量删除机械安全检查记录——问题详情信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/impl/JxAqjcglJcnrServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/impl/JxAqjcglJcnrServiceImpl.java new file mode 100644 index 00000000..0841cd3d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/impl/JxAqjcglJcnrServiceImpl.java @@ -0,0 +1,132 @@ +package org.dromara.mechanical.jxaqgl.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.mechanical.jxaqgl.domain.bo.JxAqjcglJcnrBo; +import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglJcnrVo; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglJcnr; +import org.dromara.mechanical.jxaqgl.mapper.JxAqjcglJcnrMapper; +import org.dromara.mechanical.jxaqgl.service.IJxAqjcglJcnrService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 机械安全检查记录——检查内容Service业务层处理 + * + * @author Lion Li + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class JxAqjcglJcnrServiceImpl extends ServiceImpl implements IJxAqjcglJcnrService { + + private final JxAqjcglJcnrMapper baseMapper; + + /** + * 查询机械安全检查记录——检查内容 + * + * @param id 主键 + * @return 机械安全检查记录——检查内容 + */ + @Override + public JxAqjcglJcnrVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询机械安全检查记录——检查内容列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械安全检查记录——检查内容分页列表 + */ + @Override + public TableDataInfo queryPageList(JxAqjcglJcnrBo 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(JxAqjcglJcnrBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(JxAqjcglJcnrBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(JxAqjcglJcnr::getId); + lqw.eq(bo.getMasterId() != null, JxAqjcglJcnr::getMasterId, bo.getMasterId()); + lqw.eq(StringUtils.isNotBlank(bo.getExamineContent()), JxAqjcglJcnr::getExamineContent, bo.getExamineContent()); + return lqw; + } + + /** + * 新增机械安全检查记录——检查内容 + * + * @param bo 机械安全检查记录——检查内容 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(JxAqjcglJcnrBo bo) { + JxAqjcglJcnr add = MapstructUtils.convert(bo, JxAqjcglJcnr.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改机械安全检查记录——检查内容 + * + * @param bo 机械安全检查记录——检查内容 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(JxAqjcglJcnrBo bo) { + JxAqjcglJcnr update = MapstructUtils.convert(bo, JxAqjcglJcnr.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(JxAqjcglJcnr 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/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/impl/JxAqjcglServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/impl/JxAqjcglServiceImpl.java new file mode 100644 index 00000000..ad85eb0c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/impl/JxAqjcglServiceImpl.java @@ -0,0 +1,363 @@ +package org.dromara.mechanical.jxaqgl.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.annotation.Resource; +import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.enums.InspectionRectificationUnitType; +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.utils.BatchNumberGenerator; +import org.dromara.contractor.domain.SubContractor; +import org.dromara.contractor.service.ISubContractorService; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglJcnr; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq; +import org.dromara.mechanical.jxaqgl.domain.MonthDateRange; +import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglJcnrBo; +import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglWtxqBo; +import org.dromara.mechanical.jxaqgl.domain.vo.JxAnqjcgHeadVo; +import org.dromara.mechanical.jxaqgl.service.IJxAqjcglJcnrService; +import org.dromara.mechanical.jxaqgl.service.IJxAqjcglWtxqService; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxVo; +import org.dromara.mechanical.jxzgbh.domain.JxYhzgbh; +import org.dromara.mechanical.jxzgbh.domain.bo.JxYhzgbhBo; +import org.dromara.mechanical.jxzgbh.domain.bo.JxZgxxBo; +import org.dromara.mechanical.jxzgbh.service.IJxYhzgbhService; +import org.dromara.mechanical.jxzgbh.service.IJxZgxxService; +import org.dromara.project.domain.BusProjectTeam; +import org.dromara.project.service.IBusProjectService; +import org.dromara.project.service.IBusProjectTeamService; +import org.dromara.system.service.impl.SysOssServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.dromara.mechanical.jxaqgl.domain.bo.JxAqjcglBo; +import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglVo; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcgl; +import org.dromara.mechanical.jxaqgl.mapper.JxAqjcglMapper; +import org.dromara.mechanical.jxaqgl.service.IJxAqjcglService; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.util.*; + +/** + * 机械安全检查记录Service业务层处理 + * + * @author Lion Li + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class JxAqjcglServiceImpl extends ServiceImpl implements IJxAqjcglService { + + private final JxAqjcglMapper baseMapper; + + private final IJxAqjcglJcnrService jxAqjcglJcnrService; + + private final IJxAqjcglWtxqService jxAqjcglWtxqService; + + + private final SysOssServiceImpl sysOssService; + + @Resource + private ISubContractorService contractorService; + + @Resource + private IBusProjectTeamService projectTeamService; + + @Lazy + @Autowired + private IJxYhzgbhService jxYhzgbhService; + + + /** + * 查询机械安全检查记录 + * + * @param id 主键 + * @return 机械安全检查记录 + */ + @Override + public JxAqjcglVo queryById(Long id){ + JxAqjcglVo jxAqjcglVo = baseMapper.selectVoById(id); + saveValue(jxAqjcglVo); + return jxAqjcglVo; + } + + private void saveValue(JxAqjcglVo jxAqjcglVo) { + if (jxAqjcglVo != null) { + List jxAqjcglWtxqs = jxAqjcglWtxqService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxAqjcglWtxq::getMasterId, jxAqjcglVo.getId())); + List jxAqjcglJcnrs = jxAqjcglJcnrService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxAqjcglJcnr::getMasterId, jxAqjcglVo.getId())); + jxAqjcglVo.setWtxqBoList(jxAqjcglWtxqs); + jxAqjcglVo.setJcnrList(jxAqjcglJcnrs); + + // 关联整改单位信息 + Long rectificationId = jxAqjcglVo.getRectificationId(); + String rectificationUnit = jxAqjcglVo.getRectificationUnit(); + if (rectificationId != null && rectificationUnit != null) { + if (rectificationUnit.equals(InspectionRectificationUnitType.CONTRACTOR.getValue())) { + SubContractor contractor = contractorService.getById(rectificationId); + jxAqjcglVo.setRectificationName(contractor.getName()); + } else if (rectificationUnit.equals(InspectionRectificationUnitType.TEAM.getValue())) { + BusProjectTeam team = projectTeamService.getById(rectificationId); + if (team != null) { + jxAqjcglVo.setRectificationName(team.getTeamName()); + } + } + } + + + } + } + + /** + * 分页查询机械安全检查记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械安全检查记录分页列表 + */ + @Override + public TableDataInfo queryPageList(JxAqjcglBo 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(JxAqjcglBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(JxAqjcglBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(JxAqjcgl::getId); + lqw.eq(StringUtils.isNotBlank(bo.getInspectionOrderNo()), JxAqjcgl::getInspectionOrderNo, bo.getInspectionOrderNo()); + lqw.eq(bo.getInspectionDate() != null, JxAqjcgl::getInspectionDate, bo.getInspectionDate()); + lqw.eq(StringUtils.isNotBlank(bo.getInspectionType()), JxAqjcgl::getInspectionType, bo.getInspectionType()); + lqw.eq(bo.getInspector() != null, JxAqjcgl::getInspector, bo.getInspector()); + lqw.eq(StringUtils.isNotBlank(bo.getParticipants()), JxAqjcgl::getParticipants, bo.getParticipants()); + lqw.eq(bo.getProjectStation() != null, JxAqjcgl::getProjectStation, bo.getProjectStation()); + lqw.like(bo.getProjectName() != null, JxAqjcgl::getProjectName, bo.getProjectName()); + lqw.eq(StringUtils.isNotBlank(bo.getEquipmentId()), JxAqjcgl::getEquipmentId, bo.getEquipmentId()); + lqw.like(StringUtils.isNotBlank(bo.getEquipmentName()), JxAqjcgl::getEquipmentName, bo.getEquipmentName()); + lqw.eq(StringUtils.isNotBlank(bo.getEquipmentCode()), JxAqjcgl::getEquipmentCode, bo.getEquipmentCode()); + lqw.eq(StringUtils.isNotBlank(bo.getEquipmentType()), JxAqjcgl::getEquipmentType, bo.getEquipmentType()); + lqw.eq(StringUtils.isNotBlank(bo.getInspectionResult()), JxAqjcgl::getInspectionResult, bo.getInspectionResult()); + lqw.eq(StringUtils.isNotBlank(bo.getRiskGrade()), JxAqjcgl::getRiskGrade, bo.getRiskGrade()); + lqw.eq(bo.getAbarbeitung() != null, JxAqjcgl::getAbarbeitung, bo.getAbarbeitung()); + lqw.eq(bo.getAbarbeitungDate() != null, JxAqjcgl::getAbarbeitungDate, bo.getAbarbeitungDate()); + lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), JxAqjcgl::getAuditStatus, bo.getAuditStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), JxAqjcgl::getFileId, bo.getFileId()); + return lqw; + } + + /** + * 新增机械安全检查记录 + * + * @param bo 机械安全检查记录 + * @return 是否新增成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(JxAqjcglBo bo) { + JxAqjcgl add = MapstructUtils.convert(bo, JxAqjcgl.class); + validEntityBeforeSave(add); + String banBen = BatchNumberGenerator.generateBatchNumber("JXAQJCJL-"); + add.setInspectionOrderNo(banBen); + + boolean flag = baseMapper.insert(add) > 0; +// 问题情况添加 + List wtxqBoList = bo.getWtxqBoList(); + if (wtxqBoList != null && wtxqBoList.size() > 0) { + wtxqBoList.stream().forEach(wtxqBo -> wtxqBo.setMasterId(add.getId())); + jxAqjcglWtxqService.saveBatch(MapstructUtils.convert(wtxqBoList, JxAqjcglWtxq.class)); + } + +// 检查内容添加 + List jcnrList = bo.getJcnrList(); + if (jcnrList != null && jcnrList.size() > 0) { + jcnrList.stream().forEach(wtxqBo -> wtxqBo.setMasterId(add.getId())); + jxAqjcglJcnrService.saveBatch(MapstructUtils.convert(jcnrList, JxAqjcglJcnr.class)); + } + + return flag; + } + + /** + * 修改机械安全检查记录 + * + * @param bo 机械安全检查记录 + * @return 是否修改成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(JxAqjcglBo bo) { + JxAqjcgl update = MapstructUtils.convert(bo, JxAqjcgl.class); + validEntityBeforeSave(update); + if ("2".equals(bo.getInspectionResult())){ + update.setAbarbeitungState("1"); + JxYhzgbh jxYhzgbh = jxYhzgbhService.getBaseMapper().selectOne(new LambdaQueryWrapper().eq(JxYhzgbh::getMasterId, update.getId())); + if (jxYhzgbh != null) throw new ServiceException("该数据已存在整改数据"); +// 不通过转为整改数据 + JxYhzgbhBo jxYhzgbhBo = new JxYhzgbhBo(); + String banBen = BatchNumberGenerator.generateBatchNumber("JXZGBH-"); + jxYhzgbhBo.setInspectionOrderNo(banBen); + jxYhzgbhBo.setMasterId(bo.getId()); + jxYhzgbhBo.setInspectionJcdNo(bo.getInspectionOrderNo()); + jxYhzgbhBo.setInspector(bo.getInspector()); + jxYhzgbhBo.setRiskGrade(bo.getRiskGrade()); + jxYhzgbhBo.setAbarbeitung(bo.getAbarbeitung()); + jxYhzgbhBo.setYhly("1"); + jxYhzgbhBo.setReviewState("2"); + jxYhzgbhBo.setAbarbeitungState("1"); + jxYhzgbhBo.setEquipmentName(bo.getEquipmentName()); + jxYhzgbhBo.setDiscoverDate(bo.getInspectionDate()); + jxYhzgbhBo.setDiscoverId(bo.getCreateBy()); + jxYhzgbhService.insertByBo(jxYhzgbhBo); + + } + // 问题情况添加 + List wtxqBoList = bo.getWtxqBoList(); + jxAqjcglWtxqService.getBaseMapper().delete(new LambdaQueryWrapper().eq(JxAqjcglWtxq::getMasterId, update.getId())); + if (wtxqBoList != null && wtxqBoList.size() > 0) { + wtxqBoList.stream().forEach(wtxqBo -> wtxqBo.setMasterId(update.getId())); + jxAqjcglWtxqService.saveBatch(MapstructUtils.convert(wtxqBoList, JxAqjcglWtxq.class)); + } + +// 检查内容添加 + List jcnrList = bo.getJcnrList(); + jxAqjcglJcnrService.getBaseMapper().delete(new LambdaQueryWrapper().eq(JxAqjcglJcnr::getMasterId, update.getId())); + if (jcnrList != null && jcnrList.size() > 0) { + jcnrList.stream().forEach(wtxqBo -> wtxqBo.setMasterId(update.getId())); + jxAqjcglJcnrService.saveBatch(MapstructUtils.convert(jcnrList, JxAqjcglJcnr.class)); + } + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(JxAqjcgl entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除机械安全检查记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + List deleteIds = new ArrayList<>(); + + for (Long id : ids) { + JxYhzgbh jxYhzgbh = jxYhzgbhService.getBaseMapper().selectOne(new LambdaQueryWrapper().eq(JxYhzgbh::getMasterId, id)); + if (jxYhzgbh != null) throw new ServiceException("隐患整改编号为"+jxYhzgbh.getInspectionOrderNo()+"已存在整改数据,无法删除"); + JxAqjcglVo vo = baseMapper.selectVoById(id); + if (vo != null){ + //删除附件 + if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){ + List list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList(); + deleteIds.addAll(list); + } + if (vo.getPdfId()!= null && !vo.getPdfId().isEmpty()){ + List list = Arrays.stream(vo.getPdfId().split(",")).map(Long::valueOf).toList(); + deleteIds.addAll(list); + } + } + } + if (!deleteIds.isEmpty()) { + sysOssService.deleteWithValidByIds(deleteIds, false); + } + jxAqjcglWtxqService.getBaseMapper().delete(new LambdaQueryWrapper().in(JxAqjcglWtxq::getMasterId, ids)); + jxAqjcglJcnrService.getBaseMapper().delete(new LambdaQueryWrapper().in(JxAqjcglJcnr::getMasterId, ids)); + + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public JxAnqjcgHeadVo listHead(JxAqjcglBo bo, PageQuery pageQuery) { + JxAnqjcgHeadVo jxAnqjcgHeadVo = new JxAnqjcgHeadVo(); + List jxAqjcgls = this.getBaseMapper().selectList(new LambdaQueryWrapper().le(JxAqjcgl::getCreateTime, LocalDate.now().plusDays(1)).ge(JxAqjcgl::getCreateTime, LocalDate.now().minusDays(29))); + if (jxAqjcgls != null && jxAqjcgls.size() > 0) { + jxAnqjcgHeadVo.setZs(Long.valueOf(jxAqjcgls.size())); + jxAnqjcgHeadVo.setTg(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionResult().equals("1")).count()); + jxAnqjcgHeadVo.setWtg(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionResult().equals("2")).count()); + jxAnqjcgHeadVo.setDjc(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionResult().equals("3")).count()); + + jxAnqjcgHeadVo.setRcxj(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionType().equals("1")).count()); + jxAnqjcgHeadVo.setZj(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionType().equals("2")).count()); + jxAnqjcgHeadVo.setYj(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionType().equals("3")).count()); + jxAnqjcgHeadVo.setZxjc(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionType().equals("4")).count()); + jxAnqjcgHeadVo.setFj(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionType().equals("5")).count()); + } + return jxAnqjcgHeadVo; + } + + @Override + public List listHeadJgqs(JxAqjcglBo bo, PageQuery pageQuery) { + List monthRanges = getLast6MonthsRange(); + ArrayList jxAnqjcgHeadVos = new ArrayList<>(); + + for (MonthDateRange range : monthRanges) { + JxAnqjcgHeadVo jxAnqjcgHeadVo = new JxAnqjcgHeadVo(); + List jxAqjcgls = this.getBaseMapper().selectList(new LambdaQueryWrapper().le(JxAqjcgl::getCreateTime, range.getEndDate()).ge(JxAqjcgl::getCreateTime, range.getStartDate())); + jxAnqjcgHeadVo.setMonth(range.getYearMonth()); + if (jxAqjcgls != null && jxAqjcgls.size() > 0) { + jxAnqjcgHeadVo.setZs(Long.valueOf(jxAqjcgls.size())); + jxAnqjcgHeadVo.setWtg(jxAqjcgls.stream().filter(jxAqjcgl -> jxAqjcgl.getInspectionResult().equals("2")).count()); + } + jxAnqjcgHeadVos.add(jxAnqjcgHeadVo); + } + + return jxAnqjcgHeadVos; + } + + + /** + * 获取近6个月的每月完整日期范围 + * @return 包含6个 MonthDateRange 对象的列表(按「当前月→最早月」排序) + */ + public static List getLast6MonthsRange() { + List monthRangeList = new ArrayList<>(); + LocalDate today = LocalDate.now(); + + // 循环6次:当前月(i=0)、前1月(i=1)...前5月(i=5) + for (int i = 0; i < 6; i++) { + // 1. 获取目标月的1号(核心:先减月份,再设为当月1号,避免日期异常) + LocalDate monthFirstDay = today.minusMonths(i).withDayOfMonth(1); + + // 2. 获取目标月的最后一天(下个月1号 - 1天) + LocalDate monthLastDay = monthFirstDay.plusMonths(1).minusDays(1); + + // 3. 生成年月标识(如 "2024-05") + String yearMonth = monthFirstDay.toString().substring(0, 7); // 截取 yyyy-MM 部分 + + // 4. 封装到对象并添加到列表 + monthRangeList.add(new MonthDateRange(monthFirstDay, monthLastDay, yearMonth)); + } + + return monthRangeList; + } +} + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/impl/JxAqjcglWtxqServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/impl/JxAqjcglWtxqServiceImpl.java new file mode 100644 index 00000000..526b0046 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxaqgl/service/impl/JxAqjcglWtxqServiceImpl.java @@ -0,0 +1,132 @@ +package org.dromara.mechanical.jxaqgl.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.mechanical.jxaqgl.domain.bo.JxAqjcglWtxqBo; +import org.dromara.mechanical.jxaqgl.domain.vo.JxAqjcglWtxqVo; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq; +import org.dromara.mechanical.jxaqgl.mapper.JxAqjcglWtxqMapper; +import org.dromara.mechanical.jxaqgl.service.IJxAqjcglWtxqService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 机械安全检查记录——问题详情Service业务层处理 + * + * @author Lion Li + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class JxAqjcglWtxqServiceImpl extends ServiceImpl implements IJxAqjcglWtxqService { + + private final JxAqjcglWtxqMapper baseMapper; + + /** + * 查询机械安全检查记录——问题详情 + * + * @param id 主键 + * @return 机械安全检查记录——问题详情 + */ + @Override + public JxAqjcglWtxqVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询机械安全检查记录——问题详情列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械安全检查记录——问题详情分页列表 + */ + @Override + public TableDataInfo queryPageList(JxAqjcglWtxqBo 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(JxAqjcglWtxqBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(JxAqjcglWtxqBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(JxAqjcglWtxq::getId); + lqw.eq(bo.getMasterId() != null, JxAqjcglWtxq::getMasterId, bo.getMasterId()); + lqw.eq(StringUtils.isNotBlank(bo.getIssueParticulars()), JxAqjcglWtxq::getIssueParticulars, bo.getIssueParticulars()); + return lqw; + } + + /** + * 新增机械安全检查记录——问题详情 + * + * @param bo 机械安全检查记录——问题详情 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(JxAqjcglWtxqBo bo) { + JxAqjcglWtxq add = MapstructUtils.convert(bo, JxAqjcglWtxq.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改机械安全检查记录——问题详情 + * + * @param bo 机械安全检查记录——问题详情 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(JxAqjcglWtxqBo bo) { + JxAqjcglWtxq update = MapstructUtils.convert(bo, JxAqjcglWtxq.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(JxAqjcglWtxq 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/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxGzwxController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxGzwxController.java new file mode 100644 index 00000000..00e6c3bd --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxGzwxController.java @@ -0,0 +1,151 @@ +package org.dromara.mechanical.jxgl.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.device.domain.bo.DeviceInfoBo; +import org.dromara.device.domain.vo.DeviceInfoVo; +import org.dromara.device.service.IDeviceInfoService; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxHeadVo; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxJlVo; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjlHeadVo; +import org.dromara.system.service.impl.SysOssServiceImpl; +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.mechanical.jxgl.domain.vo.JxGzwxVo; +import org.dromara.mechanical.jxgl.domain.bo.JxGzwxBo; +import org.dromara.mechanical.jxgl.service.IJxGzwxService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 机械故障维修 + * + * @author Lion Li + * @date 2025-12-01 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/jxgl/gzwx") +public class JxGzwxController extends BaseController { + + private final IJxGzwxService jxGzwxService; + + + private final IDeviceInfoService deviceInfoService; + + + + + + /** + * 查询设备信息列表 + */ + @SaCheckPermission("jxgl:gzwx:list") + @GetMapping("/getlist") + public TableDataInfo list(DeviceInfoBo bo, PageQuery pageQuery) { + return deviceInfoService.queryPageList(bo, pageQuery); + } + + + /** + * 查询机械故障维修列表 + */ + @SaCheckPermission("jxgl:gzwx:list") + @GetMapping("/list") + public TableDataInfo list(JxGzwxBo bo, PageQuery pageQuery) { + return jxGzwxService.queryPageList(bo, pageQuery); + } + + + /** + * 根据故障id查询机械故障维修记录列表 + */ + @SaCheckPermission("jxgl:gzwx:list") + @GetMapping("/getlistById/{id}") + public List getlistById(@PathVariable("id") Long id) { + return jxGzwxService.getlistById(id); + } + + /** + * 导出机械故障维修列表 + */ + @SaCheckPermission("jxgl:gzwx:export") + @Log(title = "机械故障维修", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(JxGzwxBo bo, HttpServletResponse response) { + List list = jxGzwxService.queryList(bo); + ExcelUtil.exportExcel(list, "机械故障维修", JxGzwxVo.class, response); + } + + /** + * 获取机械故障维修详细信息 + * + * @param faultId 主键 + */ + @SaCheckPermission("jxgl:gzwx:query") + @GetMapping("/{faultId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long faultId) { + return R.ok(jxGzwxService.queryById(faultId)); + } + + /** + * 新增机械故障维修 + */ + @SaCheckPermission("jxgl:gzwx:add") + @Log(title = "机械故障维修", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody JxGzwxBo bo) { + return toAjax(jxGzwxService.insertByBo(bo)); + } + + /** + * 修改机械故障维修 + */ + @SaCheckPermission("jxgl:gzwx:edit") + @Log(title = "机械故障维修", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody JxGzwxBo bo) { + return toAjax(jxGzwxService.updateByBo(bo)); + } + + /** + * 删除机械故障维修 + * + * @param faultIds 主键串 + */ + @SaCheckPermission("jxgl:gzwx:remove") + @Log(title = "机械故障维修", businessType = BusinessType.DELETE) + @DeleteMapping("/{faultIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] faultIds) { + return toAjax(jxGzwxService.deleteWithValidByIds(List.of(faultIds), true)); + } + + /** + * 机械故障头部数据返回 + * + * + */ + @SaCheckPermission("jxgl:gzwx:list") + @Log(title = "机械故障头部数据", businessType = BusinessType.DELETE) + @GetMapping("/jxgzwx") + public R jxgzwx() { + return R.ok(jxGzwxService.jxgzwx()); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxGzwxJlController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxGzwxJlController.java new file mode 100644 index 00000000..48aa52ec --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxGzwxJlController.java @@ -0,0 +1,135 @@ +package org.dromara.mechanical.jxgl.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.mechanical.jxgl.domain.bo.JxGzwxBo; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxHeadVo; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxVo; +import org.dromara.mechanical.jxgl.service.IJxGzwxService; +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.mechanical.jxgl.domain.vo.JxGzwxJlVo; +import org.dromara.mechanical.jxgl.domain.bo.JxGzwxJlBo; +import org.dromara.mechanical.jxgl.service.IJxGzwxJlService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 机械故障维修记录 + * + * @author Lion Li + * @date 2025-12-01 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/jxgl/gzwxJl") +public class JxGzwxJlController extends BaseController { + + private final IJxGzwxJlService jxGzwxJlService; + + private final IJxGzwxService jxGzwxService; + + + + + /** + * 查询机械故障维修列表 + */ + @SaCheckPermission("jxgl:gzwxJl:list") + @GetMapping("/getlist") + public TableDataInfo list(JxGzwxBo bo, PageQuery pageQuery) { + return jxGzwxService.queryPageList(bo, pageQuery); + } + + /** + * 查询机械故障维修记录列表 + */ + @SaCheckPermission("jxgl:gzwxJl:list") + @GetMapping("/list") + public TableDataInfo list(JxGzwxJlBo bo, PageQuery pageQuery) { + return jxGzwxJlService.queryPageList(bo, pageQuery); + } + + /** + * 导出机械故障维修记录列表 + */ + @SaCheckPermission("jxgl:gzwxJl:export") + @Log(title = "机械故障维修记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(JxGzwxJlBo bo, HttpServletResponse response) { + List list = jxGzwxJlService.queryList(bo); + ExcelUtil.exportExcel(list, "机械故障维修记录", JxGzwxJlVo.class, response); + } + + /** + * 获取机械故障维修记录详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("jxgl:gzwxJl:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(jxGzwxJlService.queryById(id)); + } + + /** + * 新增机械故障维修记录 + */ + @SaCheckPermission("jxgl:gzwxJl:add") + @Log(title = "机械故障维修记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody JxGzwxJlBo bo) { + return toAjax(jxGzwxJlService.insertByBo(bo)); + } + + /** + * 修改机械故障维修记录 + */ + @SaCheckPermission("jxgl:gzwxJl:edit") + @Log(title = "机械故障维修记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody JxGzwxJlBo bo) { + return toAjax(jxGzwxJlService.updateByBo(bo)); + } + + /** + * 删除机械故障维修记录 + * + * @param ids 主键串 + */ + @SaCheckPermission("jxgl:gzwxJl:remove") + @Log(title = "机械故障维修记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(jxGzwxJlService.deleteWithValidByIds(List.of(ids), true)); + } + + /** + * 机械故障记录头部数据返回 + * + * + */ + @SaCheckPermission("jxgl:gzwxJl:list") + @Log(title = "机械故障记录头部数据", businessType = BusinessType.DELETE) + @GetMapping("/jxgzwx") + public R jxgzwx() { + return R.ok(jxGzwxJlService.jxgzwx()); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxWhjhController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxWhjhController.java new file mode 100644 index 00000000..fa1fbdb1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxWhjhController.java @@ -0,0 +1,153 @@ +package org.dromara.mechanical.jxgl.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.device.domain.bo.DeviceInfoBo; +import org.dromara.device.domain.vo.DeviceInfoVo; +import org.dromara.device.service.IDeviceInfoService; +import org.dromara.mechanical.jxgl.domain.JxWhjl; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjhHeadVo; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjlVo; +import org.dromara.mechanical.jxgl.service.IJxWhjlService; +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.mechanical.jxgl.domain.vo.JxWhjhVo; +import org.dromara.mechanical.jxgl.domain.bo.JxWhjhBo; +import org.dromara.mechanical.jxgl.service.IJxWhjhService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 机械维护计划 + * + * @author Lion Li + * @date 2025-12-01 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/jxgl/whjh") +public class JxWhjhController extends BaseController { + + private final IJxWhjhService jxWhjhService; + + + + private final IDeviceInfoService deviceInfoService; + + + + + + /** + * 查询设备信息列表 + */ + @SaCheckPermission("jxgl:whjh:list") + @GetMapping("/getlist") + public TableDataInfo list(DeviceInfoBo bo, PageQuery pageQuery) { + return deviceInfoService.queryPageList(bo, pageQuery); + } + + + /** + * 根据计划id查询记录信息列表 + */ + @SaCheckPermission("jxgl:whjh:list") + @GetMapping("/getlistById/{id}") + public List getlistById(@PathVariable("id") Long id) { + return jxWhjhService.getlistById(id); + } + + + /** + * 查询机械维护计划列表 + */ + @SaCheckPermission("jxgl:whjh:list") + @GetMapping("/list") + public TableDataInfo list(JxWhjhBo bo, PageQuery pageQuery) { + return jxWhjhService.queryPageList(bo, pageQuery); + } + + /** + * 导出机械维护计划列表 + */ + @SaCheckPermission("jxgl:whjh:export") + @Log(title = "机械维护计划", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(JxWhjhBo bo, HttpServletResponse response) { + List list = jxWhjhService.queryList(bo); + ExcelUtil.exportExcel(list, "机械维护计划", JxWhjhVo.class, response); + } + + /** + * 获取机械维护计划详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("jxgl:whjh:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(jxWhjhService.queryById(id)); + } + + /** + * 新增机械维护计划 + */ + @SaCheckPermission("jxgl:whjh:add") + @Log(title = "机械维护计划", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody JxWhjhBo bo) { + return toAjax(jxWhjhService.insertByBo(bo)); + } + + /** + * 修改机械维护计划 + */ + @SaCheckPermission("jxgl:whjh:edit") + @Log(title = "机械维护计划", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody JxWhjhBo bo) { + return toAjax(jxWhjhService.updateByBo(bo)); + } + + /** + * 删除机械维护计划 + * + * @param ids 主键串 + */ + @SaCheckPermission("jxgl:whjh:remove") + @Log(title = "机械维护计划", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(jxWhjhService.deleteWithValidByIds(List.of(ids), true)); + } + + + /** + * 机械维护计划头部数据返回 + * + * + */ + @SaCheckPermission("jxgl:whjh:list") + @Log(title = "机械维护计划", businessType = BusinessType.DELETE) + @GetMapping("/jxwh") + public R jxwhHead() { + return R.ok(jxWhjhService.jxwhHead()); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxWhjlController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxWhjlController.java new file mode 100644 index 00000000..a41cfb38 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/controller/JxWhjlController.java @@ -0,0 +1,140 @@ +package org.dromara.mechanical.jxgl.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.device.domain.bo.DeviceInfoBo; +import org.dromara.device.domain.vo.DeviceInfoVo; +import org.dromara.mechanical.jxgl.domain.bo.JxWhjhBo; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjhHeadVo; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjhVo; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjlHeadVo; +import org.dromara.mechanical.jxgl.service.IJxWhjhService; +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.mechanical.jxgl.domain.vo.JxWhjlVo; +import org.dromara.mechanical.jxgl.domain.bo.JxWhjlBo; +import org.dromara.mechanical.jxgl.service.IJxWhjlService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 机械维护记录 + * + * @author Lion Li + * @date 2025-12-01 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/jxgl/whjl") +public class JxWhjlController extends BaseController { + + private final IJxWhjlService jxWhjlService; + + private final IJxWhjhService jxWhjhService; + + /** + * 查询机械维护计划列表 + */ + @SaCheckPermission("jxgl:whjl:list") + @GetMapping("/getlist") + public TableDataInfo list(JxWhjhBo bo, PageQuery pageQuery) { + return jxWhjhService.queryPageList(bo, pageQuery); + } + + /** + * 查询机械维护记录列表 + */ + @SaCheckPermission("jxgl:whjl:list") + @GetMapping("/list") + public TableDataInfo list(JxWhjlBo bo, PageQuery pageQuery) { + return jxWhjlService.queryPageList(bo, pageQuery); + } + + /** + * 导出机械维护记录列表 + */ + @SaCheckPermission("jxgl:whjl:export") + @Log(title = "机械维护记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(JxWhjlBo bo, HttpServletResponse response) { + List list = jxWhjlService.queryList(bo); + ExcelUtil.exportExcel(list, "机械维护记录", JxWhjlVo.class, response); + } + + /** + * 获取机械维护记录详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("jxgl:whjl:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(jxWhjlService.queryById(id)); + } + + /** + * 新增机械维护记录 + */ + @SaCheckPermission("jxgl:whjl:add") + @Log(title = "机械维护记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody JxWhjlBo bo) { + return toAjax(jxWhjlService.insertByBo(bo)); + } + + /** + * 修改机械维护记录 + */ + @SaCheckPermission("jxgl:whjl:edit") + @Log(title = "机械维护记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody JxWhjlBo bo) { + return toAjax(jxWhjlService.updateByBo(bo)); + } + + /** + * 删除机械维护记录 + * + * @param ids 主键串 + */ + @SaCheckPermission("jxgl:whjl:remove") + @Log(title = "机械维护记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(jxWhjlService.deleteWithValidByIds(List.of(ids), true)); + } + /** + * 机械维护记录头部数据返回 + * + * + */ + @SaCheckPermission("jxgl:whjl:list") + @Log(title = "机械维护记录头部数据", businessType = BusinessType.DELETE) + @GetMapping("/jxwjjl") + public R jxwhHead() { + return R.ok(jxWhjlService.jxwhHead()); + } + + + + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxGzwx.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxGzwx.java new file mode 100644 index 00000000..fdc079dc --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxGzwx.java @@ -0,0 +1,97 @@ +package org.dromara.mechanical.jxgl.domain; + +import jakarta.validation.constraints.NotBlank; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * 机械故障维修对象 jx_gzwx + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("jx_gzwx") +public class JxGzwx extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 故障ID + */ + @TableId(value = "fault_id") + private Long faultId; + + /** + * 故障名称 + */ + private String faultName; + + + /** + * 台账ID + */ + private Long equipmentId; + + /** + * 设备名称/型号(显示用) + */ + private String equipmentName; + + /** + * 故障发生时间 + */ + private LocalDateTime faultTime; + + /** + * 故障类型 (发动机/液压系统/电器系统/底盘/其他) + */ + private String faultType; + + /** + * 故障描述 + */ + private String faultDescription; + + /** + * 故障严重程度 (轻微/一般/严重/停机) + */ + private String severity; + + /** + * 维修预期完成日期 + */ + private LocalDate repairStartTime; + + /** + * 状态 维修中 已恢复 关闭 + */ + private String status; + + /** + * 故障照片、维修工单 + */ + private String attachments; + + /** + * 备注 + */ + private String remark; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxGzwxJl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxGzwxJl.java new file mode 100644 index 00000000..40c8839b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxGzwxJl.java @@ -0,0 +1,124 @@ +package org.dromara.mechanical.jxgl.domain; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.math.BigDecimal; + +import java.io.Serial; +import java.time.LocalDateTime; + +/** + * 机械故障维修记录对象 jx_gzwx_jl + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("jx_gzwx_jl") +public class JxGzwxJl extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(value = "id") + private Long id; + + /** + * 故障ID + */ + private Long faultId; + + /** + * 故障名称 + */ + private String faultName; + + /** + * 故障记录名称 + */ + private String faultjlName; + + + /** + * 台账ID + */ + private Long equipmentId; + + + /** + * 设备名称/型号(显示用) + */ + private String equipmentName; + + /** + * 维修开始时间 + */ + private LocalDateTime repairStartTime; + + /** + * 维修结束时间 + */ + private LocalDateTime repairEndTime; + + /** + * 维修人员 + */ + private Long repairPerson; + + /** + * 维修内容 + */ + private String repairContent; + + /** + * 更换配件 + */ + private String partsUsed; + + /** + * 维修费用(材料费 + 工时费) + */ + private BigDecimal repairCost; + + /** + * 原因分析 + */ + private String faultCause; + + /** + * 预防措施 + */ + private String preventiveActions; + + /** + * 状态 维修中 已恢复 关闭 + */ + private String status; + + /** + * 故障照片、维修工单 + */ + private String attachments; + + /** + * 备注 + */ + private String remark; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxWhjh.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxWhjh.java new file mode 100644 index 00000000..1cfdf36f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxWhjh.java @@ -0,0 +1,108 @@ +package org.dromara.mechanical.jxgl.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.math.BigDecimal; + +import java.io.Serial; +import java.time.LocalDate; + +/** + * 机械维护计划对象 jx_whjh + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("jx_whjh") +public class JxWhjh extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 计划ID(主键) + */ + @TableId(value = "id") + private Long id; + + /** + * 台账ID(关联设备台账) + */ + private Long equipmentId; + + /** + * 设备名称/型号(显示用) + */ + private String equipmentName; + + /** + * 维修计划名称 + */ + private String wxjhName; + + /** + * 计划类型 字典 + */ + private String planType; + + /** + * 保养级别 字典 + */ + private String maintenanceLevel; + + /** + * 保养内容 + */ + private String maintenanceItems; + + /** + * 周期类型 字典 + */ + private String cycleType; + + /** + * 周期值 + */ + private BigDecimal cycleValue; + + /** + * 计划开始日期 + */ + private LocalDate expectedStartDate; + + /** + * 计划截止日期 + */ + private LocalDate expectedEndDate; + + /** + * 负责人员 + */ + private Long responsiblePerson; + + /** + * 状态 (未开始/进行中/已完成/逾期) + */ + private String status; + + /** + * 提前几天提醒 + */ + private Long remindBeforeDays; + + /** + * 备注 + */ + private String remark; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxWhjl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxWhjl.java new file mode 100644 index 00000000..c1be93f7 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/JxWhjl.java @@ -0,0 +1,106 @@ +package org.dromara.mechanical.jxgl.domain; + +import jakarta.validation.constraints.NotBlank; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.math.BigDecimal; + +import java.io.Serial; +import java.time.LocalDate; + +/** + * 机械维护记录对象 jx_whjl + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("jx_whjl") +public class JxWhjl extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 记录ID + */ + @TableId(value = "id") + private Long id; + + /** + * 所属计划ID(可空,因为有些是临时保养) + */ + private Long whjhId; + + /** + * 台账ID + */ + private Long equipmentId; + /** + * 设备名称/型号(显示用) + */ + private String equipmentName; + + + /** + * 实际保养日期 + */ + private LocalDate maintenanceDate; + + /** + * 当日/累计工时(用于判断周期) + */ + private BigDecimal maintenanceHours; + + /** + * 实际保养内容(JSON) + */ + private String maintenanceItems; + + /** + * 更换配件列表 + */ + private String partsReplaced; + + /** + * 使用耗材(润滑油、滤芯等) + */ + private String materialsUsed; + + /** + * 执行人 + */ + private Long maintainer; + + /** + * 保养结果(正常/异常/需复检) + */ + private String maintenanceResult; + + /** + * 维修计划名称 + */ + private String wxjhName; + + /** + * 维修记录名称 + */ + private String wxjlName; + + /** + * 备注 + */ + private String remark; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxGzwxBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxGzwxBo.java new file mode 100644 index 00000000..ecdf53dc --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxGzwxBo.java @@ -0,0 +1,106 @@ +package org.dromara.mechanical.jxgl.domain.bo; + +import org.dromara.mechanical.jxgl.domain.JxGzwx; +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.time.LocalDate; +import java.time.LocalDateTime; + +/** + * 机械故障维修业务对象 jx_gzwx + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = JxGzwx.class, reverseConvertGenerate = false) +public class JxGzwxBo extends BaseEntity { + + /** + * 故障ID + */ + private Long faultId; + + /** + * 台账ID + */ + @NotNull(message = "台账ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long equipmentId; + + + /** + * 设备名称/型号(显示用) + */ + @NotBlank(message = "设备名称/型号(显示用)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String equipmentName; + + /** + * 故障发生时间 + */ + @NotNull(message = "故障发生时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDateTime faultTime; + + /** + * 故障类型 (发动机/液压系统/电器系统/底盘/其他) + */ + @NotBlank(message = "故障类型 (发动机/液压系统/电器系统/底盘/其他)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String faultType; + + /** + * 故障描述 + */ + @NotBlank(message = "故障描述不能为空", groups = { AddGroup.class, EditGroup.class }) + private String faultDescription; + + /** + * 故障严重程度 (轻微/一般/严重/停机) + */ + @NotBlank(message = "故障严重程度 (轻微/一般/严重/停机)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String severity; + + /** + * 维修预期完成日期 + */ + private LocalDate repairStartTime; + + /** + * 状态 维修中 已恢复 关闭 + */ + @NotBlank(message = "状态 维修中 已恢复 关闭不能为空", groups = { AddGroup.class, EditGroup.class }) + private String status; + + /** + * 故障照片、维修工单 + */ + private String attachments; + + /** + * 备注 + */ + private String remark; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + /** + * 故障名称 + */ + private String faultName; + + + + private LocalDate startTime; + + private LocalDate endTime; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxGzwxJlBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxGzwxJlBo.java new file mode 100644 index 00000000..eb0fb729 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxGzwxJlBo.java @@ -0,0 +1,128 @@ +package org.dromara.mechanical.jxgl.domain.bo; + +import org.dromara.mechanical.jxgl.domain.JxGzwxJl; +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.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * 机械故障维修记录业务对象 jx_gzwx_jl + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = JxGzwxJl.class, reverseConvertGenerate = false) +public class JxGzwxJlBo extends BaseEntity { + + /** + * ID + */ + private Long id; + + /** + * 故障ID + */ + @NotNull(message = "故障ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long faultId; + + + /** + * 故障名称 + */ + private String faultName; + + /** + * 故障记录名称 + */ + private String faultjlName; + + /** + * 台账ID + */ + @NotNull(message = "台账ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long equipmentId; + + + /** + * 设备名称/型号(显示用) + */ + @NotBlank(message = "设备名称/型号(显示用)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String equipmentName; + + /** + * 维修开始时间 + */ + private LocalDateTime repairStartTime; + + /** + * 维修结束时间 + */ + private LocalDateTime repairEndTime; + + /** + * 维修人员 + */ + private Long repairPerson; + + /** + * 维修内容 + */ + private String repairContent; + + /** + * 更换配件 + */ + private String partsUsed; + + /** + * 维修费用(材料费 + 工时费) + */ + private BigDecimal repairCost; + + /** + * 原因分析 + */ + private String faultCause; + + /** + * 预防措施 + */ + private String preventiveActions; + + /** + * 状态 维修中 已恢复 关闭 + */ + @NotBlank(message = "状态 维修中 已恢复 关闭不能为空", groups = { AddGroup.class, EditGroup.class }) + private String status; + + /** + * 故障照片、维修工单 + */ + private String attachments; + + /** + * 备注 + */ + private String remark; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + + private LocalDate startTime; + + private LocalDate endTime; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxWhjhBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxWhjhBo.java new file mode 100644 index 00000000..2eb20b66 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxWhjhBo.java @@ -0,0 +1,115 @@ +package org.dromara.mechanical.jxgl.domain.bo; + +import org.dromara.mechanical.jxgl.domain.JxWhjh; +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.math.BigDecimal; +import java.time.LocalDate; + +/** + * 机械维护计划业务对象 jx_whjh + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = JxWhjh.class, reverseConvertGenerate = false) +public class JxWhjhBo extends BaseEntity { + + /** + * 计划ID(主键) + */ + private Long id; + + /** + * 台账ID(关联设备台账) + */ + @NotNull(message = "台账ID(关联设备台账)不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long equipmentId; + + /** + * 设备名称/型号(显示用) + */ + @NotBlank(message = "设备名称/型号(显示用)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String equipmentName; + + /** + * 计划类型 字典 + */ + @NotBlank(message = "计划类型 字典不能为空", groups = { AddGroup.class, EditGroup.class }) + private String planType; + + /** + * 保养级别 字典 + */ + @NotBlank(message = "保养级别 字典不能为空", groups = { AddGroup.class, EditGroup.class }) + private String maintenanceLevel; + + /** + * 保养内容 + */ + private String maintenanceItems; + + + /** + * 维修计划名称 + */ + private String wxjhName; + + /** + * 周期类型 字典 + */ + private String cycleType; + + /** + * 周期值 + */ + private BigDecimal cycleValue; + + /** + * 计划开始日期 + */ + @NotNull(message = "计划开始日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate expectedStartDate; + + /** + * 计划截止日期 + */ + @NotNull(message = "计划截止日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate expectedEndDate; + + /** + * 负责人员 + */ + @NotNull(message = "负责人员不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long responsiblePerson; + + /** + * 状态 (未开始/进行中/已完成/逾期) + */ + @NotBlank(message = "状态 (未开始/进行中/已完成/逾期)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String status; + + /** + * 提前几天提醒 + */ + private Long remindBeforeDays; + + /** + * 备注 + */ + private String remark; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxWhjlBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxWhjlBo.java new file mode 100644 index 00000000..01e37a61 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/bo/JxWhjlBo.java @@ -0,0 +1,107 @@ +package org.dromara.mechanical.jxgl.domain.bo; + +import org.dromara.mechanical.jxgl.domain.JxWhjl; +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.math.BigDecimal; +import java.time.LocalDate; + +/** + * 机械维护记录业务对象 jx_whjl + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = JxWhjl.class, reverseConvertGenerate = false) +public class JxWhjlBo extends BaseEntity { + + /** + * 记录ID + */ + private Long id; + + /** + * 所属计划ID(可空,因为有些是临时保养) + */ + private Long whjhId; + + /** + * 维修计划名称 + */ + private String wxjhName; + + /** + * 维修记录名称 + */ + private String wxjlName; + + /** + * 台账ID + */ + @NotNull(message = "台账ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long equipmentId; + /** + * 设备名称/型号(显示用) + */ + @NotBlank(message = "设备名称/型号(显示用)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String equipmentName; + + + /** + * 实际保养日期 + */ + @NotNull(message = "实际保养日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate maintenanceDate; + + /** + * 当日/累计工时(用于判断周期) + */ + @NotNull(message = "当日/累计工时(用于判断周期)不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal maintenanceHours; + + /** + * 实际保养内容(JSON) + */ + private String maintenanceItems; + + /** + * 更换配件列表 + */ + private String partsReplaced; + + /** + * 使用耗材(润滑油、滤芯等) + */ + private String materialsUsed; + + /** + * 执行人 + */ + @NotNull(message = "执行人不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long maintainer; + + /** + * 保养结果(正常/异常/需复检) + */ + @NotBlank(message = "保养结果(正常/异常/需复检)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String maintenanceResult; + + /** + * 备注 + */ + private String remark; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxHeadVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxHeadVo.java new file mode 100644 index 00000000..287bcb5c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxHeadVo.java @@ -0,0 +1,21 @@ +package org.dromara.mechanical.jxgl.domain.vo; + + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class JxGzwxHeadVo implements Serializable { + + //总计划数 + private Long zs = 0L; + + //待处理 + private Long dcl = 0L; + + // 已完成 + private Long ywc = 0L; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxJlVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxJlVo.java new file mode 100644 index 00000000..e96b2f0f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxJlVo.java @@ -0,0 +1,180 @@ +package org.dromara.mechanical.jxgl.domain.vo; + +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.mechanical.jxgl.domain.JxGzwxJl; +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.time.LocalDateTime; +import java.util.Date; + + + +/** + * 机械故障维修记录视图对象 jx_gzwx_jl + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = JxGzwxJl.class) +public class JxGzwxJlVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ExcelProperty(value = "ID") + private Long id; + + /** + * 台账ID + */ + private Long equipmentId; + + + /** + * 设备名称/型号(显示用) + */ + private String equipmentName; + + /** + * 故障名称 + */ + private String faultName; + + /** + * 故障记录名称 + */ + private String faultjlName; + + /** + * 故障ID + */ + @ExcelProperty(value = "故障ID") + private Long faultId; + + /** + * 维修开始时间 + */ + @ExcelProperty(value = "维修开始时间") + private LocalDateTime repairStartTime; + + /** + * 维修结束时间 + */ + @ExcelProperty(value = "维修结束时间") + private LocalDateTime repairEndTime; + + /** + * 维修人员 + */ + @ExcelProperty(value = "维修人员") + private Long repairPerson; + + + /** + * 维修人员 + */ + @ExcelProperty(value = "维修人员") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "repairPerson") + private String repairPersonName; + + /** + * 维修内容 + */ + @ExcelProperty(value = "维修内容") + private String repairContent; + + /** + * 更换配件 + */ + @ExcelProperty(value = "更换配件") + private String partsUsed; + + /** + * 维修费用(材料费 + 工时费) + */ + @ExcelProperty(value = "维修费用") +// @ExcelDictFormat(readConverterExp = "材料费和工时费") + private BigDecimal repairCost; + + /** + * 原因分析 + */ + @ExcelProperty(value = "原因分析 ") + private String faultCause; + + /** + * 预防措施 + */ + @ExcelProperty(value = "预防措施") + private String preventiveActions; + + /** + * 状态 维修中 已恢复 关闭 + */ + @ExcelProperty(value = "状态 维修中 已恢复 关闭") +// @ExcelDictFormat(dictType = "jx_gzwxzt") + private String status; + + /** + * 故障照片、维修工单 + */ + @ExcelProperty(value = "故障照片、维修工单") + private String attachments; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String fileId; + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + + + /** + * 创建者 + */ + @TableField(fill = FieldFill.INSERT) + private Long createBy; + + /** + * 创建者 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy") + @TableField(fill = FieldFill.INSERT) + private Long createByname; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxVo.java new file mode 100644 index 00000000..32782d95 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxGzwxVo.java @@ -0,0 +1,136 @@ +package org.dromara.mechanical.jxgl.domain.vo; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import jakarta.validation.constraints.NotBlank; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.mechanical.jxgl.domain.JxGzwx; +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.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Date; + + + +/** + * 机械故障维修视图对象 jx_gzwx + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = JxGzwx.class) +public class JxGzwxVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 故障ID + */ + @ExcelProperty(value = "故障ID") + private Long faultId; + + /** + * 故障名称 + */ + private String faultName; + + /** + * 台账ID + */ + @ExcelProperty(value = "台账ID") + private Long equipmentId; + + /** + * 设备名称/型号(显示用) + */ + private String equipmentName; + + /** + * 故障发生时间 + */ + @ExcelProperty(value = "故障发生时间") + private LocalDateTime faultTime; + + /** + * 故障类型 (发动机/液压系统/电器系统/底盘/其他) + */ + @ExcelProperty(value = "故障类型 ", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "jx_gzlx") + private String faultType; + + /** + * 故障描述 + */ + @ExcelProperty(value = "故障描述") + private String faultDescription; + + /** + * 故障严重程度 (轻微/一般/严重/停机) + */ + @ExcelProperty(value = "故障严重程度 ", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "jx_gzyzcd") + private String severity; + + /** + * 维修预期完成日期 + */ + @ExcelProperty(value = "维修预期完成日期") + private LocalDate repairStartTime; + + /** + * 状态 维修中 已恢复 关闭 + */ + @ExcelProperty(value = "状态 维修中 已恢复 关闭", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "jx_gzwxzt") + private String status; + + /** + * 故障照片、维修工单 + */ + @ExcelProperty(value = "故障照片、维修工单") + private String attachments; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String fileId; + + + + /** + * 创建者 + */ + @TableField(fill = FieldFill.INSERT) + private Long createBy; + + /** + * 创建者 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy") + @TableField(fill = FieldFill.INSERT) + private Long createByname; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjhHeadVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjhHeadVo.java new file mode 100644 index 00000000..2ecb573b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjhHeadVo.java @@ -0,0 +1,23 @@ +package org.dromara.mechanical.jxgl.domain.vo; + +import lombok.Data; + +import java.io.Serializable; + + +@Data +public class JxWhjhHeadVo implements Serializable { + //总计划数 + private Long zs = 0L; + + //未完成 + private Long wwc = 0L; + //已完成 + private Long ywc = 0L; + //逾期 + private Long yq = 0L; + + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjhVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjhVo.java new file mode 100644 index 00000000..08ac5388 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjhVo.java @@ -0,0 +1,165 @@ +package org.dromara.mechanical.jxgl.domain.vo; + +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.mechanical.jxgl.domain.JxWhjh; +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.time.LocalDate; +import java.util.Date; + + + +/** + * 机械维护计划视图对象 jx_whjh + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = JxWhjh.class) +public class JxWhjhVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 计划ID(主键) + */ + @ExcelProperty(value = "计划ID", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "主=键") + private Long id; + + /** + * 台账ID(关联设备台账) + */ + @ExcelProperty(value = "台账ID", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "关=联设备台账") + private Long equipmentId; + + /** + * 设备名称/型号(显示用) + */ + @ExcelProperty(value = "设备名称/型号", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "显=示用") + private String equipmentName; + + /** + * 计划类型 字典 + */ + @ExcelProperty(value = "计划类型 字典", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "jx_jhlx") + private String planType; + + /** + * 保养级别 字典 + */ + @ExcelProperty(value = "保养级别 字典", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "jx_byjb") + private String maintenanceLevel; + + /** + * 保养内容 + */ + @ExcelProperty(value = "保养内容") + private String maintenanceItems; + + /** + * 周期类型 字典 + */ + @ExcelProperty(value = "周期类型 字典", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "jx_zqlx") + private String cycleType; + + /** + * 周期值 + */ + @ExcelProperty(value = "周期值") + private BigDecimal cycleValue; + + /** + * 计划开始日期 + */ + @ExcelProperty(value = "计划开始日期") + private LocalDate expectedStartDate; + + /** + * 计划截止日期 + */ + @ExcelProperty(value = "计划截止日期") + private LocalDate expectedEndDate; + + /** + * 负责人员 + */ + @ExcelProperty(value = "负责人员") + private Long responsiblePerson; + + + /** + * 负责人员 + */ + @ExcelProperty(value = "负责人员") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "responsiblePerson") + private String responsiblePersonname; + + /** + * 维修计划名称 + */ + private String wxjhName; + + /** + * 状态 (未开始/进行中/已完成/逾期) + */ + @ExcelProperty(value = "状态 ", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "jx_whjhzt") + private String status; + + /** + * 提前几天提醒 + */ + @ExcelProperty(value = "提前几天提醒") + private Long remindBeforeDays; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String fileId; + + + + /** + * 创建者 + */ + @TableField(fill = FieldFill.INSERT) + private Long createBy; + + /** + * 创建者 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy") + @TableField(fill = FieldFill.INSERT) + private Long createByname; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjlHeadVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjlHeadVo.java new file mode 100644 index 00000000..24159744 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjlHeadVo.java @@ -0,0 +1,17 @@ +package org.dromara.mechanical.jxgl.domain.vo; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class JxWhjlHeadVo implements Serializable { + //总数 + private Long zs = 0L; + //正常 + private Long zc = 0L; + //异常 + private Long yc = 0L; + //需复检 + private Long xfc = 0L; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjlVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjlVo.java new file mode 100644 index 00000000..75cb3821 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/domain/vo/JxWhjlVo.java @@ -0,0 +1,161 @@ +package org.dromara.mechanical.jxgl.domain.vo; + +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import jakarta.validation.constraints.NotBlank; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.mechanical.jxgl.domain.JxWhjl; +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.time.LocalDate; +import java.util.Date; + + + +/** + * 机械维护记录视图对象 jx_whjl + * + * @author Lion Li + * @date 2025-12-01 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = JxWhjl.class) +public class JxWhjlVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 记录ID + */ + @ExcelProperty(value = "记录ID") + private Long id; + + /** + * 所属计划ID(可空,因为有些是临时保养) + */ + @ExcelProperty(value = "所属计划ID", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "可=空,因为有些是临时保养") + private Long whjhId; + + /** + * 台账ID + */ + @ExcelProperty(value = "台账ID") + private Long equipmentId; + + /** + * 设备名称/型号(显示用) + */ + private String equipmentName; + + + /** + * 实际保养日期 + */ + @ExcelProperty(value = "实际保养日期") + private LocalDate maintenanceDate; + + /** + * 当日/累计工时(用于判断周期) + */ + @ExcelProperty(value = "当日/累计工时", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "用=于判断周期") + private BigDecimal maintenanceHours; + + /** + * 实际保养内容(JSON) + */ + @ExcelProperty(value = "实际保养内容", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "J=SON") + private String maintenanceItems; + + /** + * 更换配件列表 + */ + @ExcelProperty(value = "更换配件列表") + private String partsReplaced; + + /** + * 使用耗材(润滑油、滤芯等) + */ + @ExcelProperty(value = "使用耗材", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "润=滑油、滤芯等") + private String materialsUsed; + + /** + * 执行人 + */ + @ExcelProperty(value = "执行人") + private Long maintainer; + + /** + * 执行人 + */ + @ExcelProperty(value = "执行人") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "maintainer") + private String maintainername; + + /** + * 保养结果(正常/异常/需复检) + */ + @ExcelProperty(value = "保养结果", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "正=常/异常/需复检") + private String maintenanceResult; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String fileId; + + /** + * 维修计划名称 + */ + private String wxjhName; + + /** + * 维修记录名称 + */ + private String wxjlName; + + + + /** + * 创建者 + */ + @TableField(fill = FieldFill.INSERT) + private Long createBy; + + /** + * 创建者 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "createBy") + @TableField(fill = FieldFill.INSERT) + private Long createByname; + + + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxGzwxJlMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxGzwxJlMapper.java new file mode 100644 index 00000000..c31756f5 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxGzwxJlMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mechanical.jxgl.mapper; + +import org.dromara.mechanical.jxgl.domain.JxGzwxJl; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxJlVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 机械故障维修记录Mapper接口 + * + * @author Lion Li + * @date 2025-12-01 + */ +public interface JxGzwxJlMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxGzwxMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxGzwxMapper.java new file mode 100644 index 00000000..51d42287 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxGzwxMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mechanical.jxgl.mapper; + +import org.dromara.mechanical.jxgl.domain.JxGzwx; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 机械故障维修Mapper接口 + * + * @author Lion Li + * @date 2025-12-01 + */ +public interface JxGzwxMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxWhjhMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxWhjhMapper.java new file mode 100644 index 00000000..c4f3cf0e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxWhjhMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mechanical.jxgl.mapper; + +import org.dromara.mechanical.jxgl.domain.JxWhjh; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjhVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 机械维护计划Mapper接口 + * + * @author Lion Li + * @date 2025-12-01 + */ +public interface JxWhjhMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxWhjlMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxWhjlMapper.java new file mode 100644 index 00000000..d1b9570c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/mapper/JxWhjlMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mechanical.jxgl.mapper; + +import org.dromara.mechanical.jxgl.domain.JxWhjl; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjlVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 机械维护记录Mapper接口 + * + * @author Lion Li + * @date 2025-12-01 + */ +public interface JxWhjlMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxGzwxJlService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxGzwxJlService.java new file mode 100644 index 00000000..a4b2634d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxGzwxJlService.java @@ -0,0 +1,73 @@ +package org.dromara.mechanical.jxgl.service; + +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxHeadVo; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxJlVo; +import org.dromara.mechanical.jxgl.domain.bo.JxGzwxJlBo; +import org.dromara.mechanical.jxgl.domain.JxGzwxJl; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 机械故障维修记录Service接口 + * + * @author Lion Li + * @date 2025-12-01 + */ +public interface IJxGzwxJlService extends IService{ + + /** + * 查询机械故障维修记录 + * + * @param id 主键 + * @return 机械故障维修记录 + */ + JxGzwxJlVo queryById(Long id); + + /** + * 分页查询机械故障维修记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械故障维修记录分页列表 + */ + TableDataInfo queryPageList(JxGzwxJlBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械故障维修记录列表 + * + * @param bo 查询条件 + * @return 机械故障维修记录列表 + */ + List queryList(JxGzwxJlBo bo); + + /** + * 新增机械故障维修记录 + * + * @param bo 机械故障维修记录 + * @return 是否新增成功 + */ + Boolean insertByBo(JxGzwxJlBo bo); + + /** + * 修改机械故障维修记录 + * + * @param bo 机械故障维修记录 + * @return 是否修改成功 + */ + Boolean updateByBo(JxGzwxJlBo bo); + + /** + * 校验并批量删除机械故障维修记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + JxGzwxHeadVo jxgzwx(); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxGzwxService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxGzwxService.java new file mode 100644 index 00000000..3fb209c0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxGzwxService.java @@ -0,0 +1,76 @@ +package org.dromara.mechanical.jxgl.service; + +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxHeadVo; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxJlVo; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxVo; +import org.dromara.mechanical.jxgl.domain.bo.JxGzwxBo; +import org.dromara.mechanical.jxgl.domain.JxGzwx; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 机械故障维修Service接口 + * + * @author Lion Li + * @date 2025-12-01 + */ +public interface IJxGzwxService extends IService{ + + /** + * 查询机械故障维修 + * + * @param faultId 主键 + * @return 机械故障维修 + */ + JxGzwxVo queryById(Long faultId); + + /** + * 分页查询机械故障维修列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械故障维修分页列表 + */ + TableDataInfo queryPageList(JxGzwxBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械故障维修列表 + * + * @param bo 查询条件 + * @return 机械故障维修列表 + */ + List queryList(JxGzwxBo bo); + + /** + * 新增机械故障维修 + * + * @param bo 机械故障维修 + * @return 是否新增成功 + */ + Boolean insertByBo(JxGzwxBo bo); + + /** + * 修改机械故障维修 + * + * @param bo 机械故障维修 + * @return 是否修改成功 + */ + Boolean updateByBo(JxGzwxBo bo); + + /** + * 校验并批量删除机械故障维修信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + JxGzwxHeadVo jxgzwx(); + + List getlistById(Long id); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxWhjhService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxWhjhService.java new file mode 100644 index 00000000..da2c0b0d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxWhjhService.java @@ -0,0 +1,78 @@ +package org.dromara.mechanical.jxgl.service; + +import org.dromara.mechanical.jxgl.domain.JxWhjl; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjhHeadVo; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjhVo; +import org.dromara.mechanical.jxgl.domain.bo.JxWhjhBo; +import org.dromara.mechanical.jxgl.domain.JxWhjh; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjlVo; + +import java.util.Collection; +import java.util.List; + +/** + * 机械维护计划Service接口 + * + * @author Lion Li + * @date 2025-12-01 + */ +public interface IJxWhjhService extends IService{ + + /** + * 查询机械维护计划 + * + * @param id 主键 + * @return 机械维护计划 + */ + JxWhjhVo queryById(Long id); + + /** + * 分页查询机械维护计划列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械维护计划分页列表 + */ + TableDataInfo queryPageList(JxWhjhBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械维护计划列表 + * + * @param bo 查询条件 + * @return 机械维护计划列表 + */ + List queryList(JxWhjhBo bo); + + /** + * 新增机械维护计划 + * + * @param bo 机械维护计划 + * @return 是否新增成功 + */ + Boolean insertByBo(JxWhjhBo bo); + + /** + * 修改机械维护计划 + * + * @param bo 机械维护计划 + * @return 是否修改成功 + */ + Boolean updateByBo(JxWhjhBo bo); + + /** + * 校验并批量删除机械维护计划信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + JxWhjhHeadVo jxwhHead(); + + List getlistById(Long id); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxWhjlService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxWhjlService.java new file mode 100644 index 00000000..6f2255da --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/IJxWhjlService.java @@ -0,0 +1,73 @@ +package org.dromara.mechanical.jxgl.service; + +import org.dromara.mechanical.jxgl.domain.vo.JxWhjlHeadVo; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjlVo; +import org.dromara.mechanical.jxgl.domain.bo.JxWhjlBo; +import org.dromara.mechanical.jxgl.domain.JxWhjl; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 机械维护记录Service接口 + * + * @author Lion Li + * @date 2025-12-01 + */ +public interface IJxWhjlService extends IService{ + + /** + * 查询机械维护记录 + * + * @param id 主键 + * @return 机械维护记录 + */ + JxWhjlVo queryById(Long id); + + /** + * 分页查询机械维护记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械维护记录分页列表 + */ + TableDataInfo queryPageList(JxWhjlBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械维护记录列表 + * + * @param bo 查询条件 + * @return 机械维护记录列表 + */ + List queryList(JxWhjlBo bo); + + /** + * 新增机械维护记录 + * + * @param bo 机械维护记录 + * @return 是否新增成功 + */ + Boolean insertByBo(JxWhjlBo bo); + + /** + * 修改机械维护记录 + * + * @param bo 机械维护记录 + * @return 是否修改成功 + */ + Boolean updateByBo(JxWhjlBo bo); + + /** + * 校验并批量删除机械维护记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + JxWhjlHeadVo jxwhHead(); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxGzwxJlServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxGzwxJlServiceImpl.java new file mode 100644 index 00000000..cf87c30f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxGzwxJlServiceImpl.java @@ -0,0 +1,192 @@ +package org.dromara.mechanical.jxgl.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.dromara.common.core.exception.ServiceException; +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.mechanical.jxgl.domain.JxGzwx; +import org.dromara.mechanical.jxgl.domain.JxWhjl; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxHeadVo; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjhVo; +import org.dromara.mechanical.jxgl.service.IJxGzwxService; +import org.dromara.system.service.ISysOssService; +import org.springframework.stereotype.Service; +import org.dromara.mechanical.jxgl.domain.bo.JxGzwxJlBo; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxJlVo; +import org.dromara.mechanical.jxgl.domain.JxGzwxJl; +import org.dromara.mechanical.jxgl.mapper.JxGzwxJlMapper; +import org.dromara.mechanical.jxgl.service.IJxGzwxJlService; + +import java.time.LocalDate; +import java.time.temporal.TemporalAdjusters; +import java.util.*; + +/** + * 机械故障维修记录Service业务层处理 + * + * @author Lion Li + * @date 2025-12-01 + */ +@RequiredArgsConstructor +@Service +public class JxGzwxJlServiceImpl extends ServiceImpl implements IJxGzwxJlService { + + private final JxGzwxJlMapper baseMapper; + + private final IJxGzwxService jxGzwxService; + private final ISysOssService sysOssService; + + /** + * 查询机械故障维修记录 + * + * @param id 主键 + * @return 机械故障维修记录 + */ + @Override + public JxGzwxJlVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询机械故障维修记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械故障维修记录分页列表 + */ + @Override + public TableDataInfo queryPageList(JxGzwxJlBo 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(JxGzwxJlBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(JxGzwxJlBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(JxGzwxJl::getId); + lqw.eq(bo.getFaultId() != null, JxGzwxJl::getFaultId, bo.getFaultId()); + lqw.ge(bo.getStartTime() != null, JxGzwxJl::getCreateTime, bo.getStartTime()); + lqw.le(bo.getEndTime() != null, JxGzwxJl::getCreateTime, bo.getEndTime()); + lqw.eq(bo.getRepairStartTime() != null, JxGzwxJl::getRepairStartTime, bo.getRepairStartTime()); + lqw.eq(bo.getRepairEndTime() != null, JxGzwxJl::getRepairEndTime, bo.getRepairEndTime()); + lqw.eq(bo.getRepairPerson() != null, JxGzwxJl::getRepairPerson, bo.getRepairPerson()); + lqw.eq(StringUtils.isNotBlank(bo.getRepairContent()), JxGzwxJl::getRepairContent, bo.getRepairContent()); + lqw.eq(StringUtils.isNotBlank(bo.getPartsUsed()), JxGzwxJl::getPartsUsed, bo.getPartsUsed()); + lqw.like(StringUtils.isNotBlank(bo.getFaultjlName()), JxGzwxJl::getFaultjlName, bo.getFaultjlName()); + lqw.eq(bo.getRepairCost() != null, JxGzwxJl::getRepairCost, bo.getRepairCost()); + lqw.eq(StringUtils.isNotBlank(bo.getFaultCause()), JxGzwxJl::getFaultCause, bo.getFaultCause()); + lqw.eq(StringUtils.isNotBlank(bo.getPreventiveActions()), JxGzwxJl::getPreventiveActions, bo.getPreventiveActions()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), JxGzwxJl::getStatus, bo.getStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getAttachments()), JxGzwxJl::getAttachments, bo.getAttachments()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), JxGzwxJl::getFileId, bo.getFileId()); + return lqw; + } + + /** + * 新增机械故障维修记录 + * + * @param bo 机械故障维修记录 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(JxGzwxJlBo bo) { + JxGzwxJl add = MapstructUtils.convert(bo, JxGzwxJl.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (bo != null){ + jxGzwxService.getBaseMapper().update(new UpdateWrapper().eq("fault_id", bo.getFaultId()).set("status",bo.getStatus())); + } + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改机械故障维修记录 + * + * @param bo 机械故障维修记录 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(JxGzwxJlBo bo) { + JxGzwxJl update = MapstructUtils.convert(bo, JxGzwxJl.class); + validEntityBeforeSave(update); + if (bo != null){ + jxGzwxService.getBaseMapper().update(new UpdateWrapper().eq("fault_id", bo.getFaultId()).set("status",bo.getStatus())); + } + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(JxGzwxJl entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除机械故障维修记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + + List deleteIds = new ArrayList<>(); + for (Long id : ids) { + JxGzwxJlVo vo = baseMapper.selectVoById(id); + if (vo != null){ + //删除附件 + if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){ + List list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList(); + deleteIds.addAll(list); + } + } + } + if (!deleteIds.isEmpty()) { + sysOssService.deleteWithValidByIds(deleteIds, false); + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public JxGzwxHeadVo jxgzwx() { + JxGzwxHeadVo jxGzwxHeadVo = new JxGzwxHeadVo(); + List jxGzwxes = this.baseMapper.selectList(new LambdaQueryWrapper().le(JxGzwxJl::getCreateTime, LocalDate.now().plusDays(1)).ge(JxGzwxJl::getCreateTime, LocalDate.now().minusDays(29))); + if (jxGzwxes != null && jxGzwxes.size() > 0) { + long wxz = jxGzwxes.stream().filter(jxGzwx -> "1".equals(jxGzwx.getStatus())).count(); + long hf = jxGzwxes.stream().filter(jxGzwx -> "2".equals(jxGzwx.getStatus())).count(); + + jxGzwxHeadVo.setDcl(wxz); + jxGzwxHeadVo.setZs(Long.valueOf(jxGzwxes.size())); + jxGzwxHeadVo.setYwc(hf); + } + return jxGzwxHeadVo; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxGzwxServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxGzwxServiceImpl.java new file mode 100644 index 00000000..7c3785b1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxGzwxServiceImpl.java @@ -0,0 +1,194 @@ +package org.dromara.mechanical.jxgl.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.mechanical.jxgl.domain.JxGzwxJl; +import org.dromara.mechanical.jxgl.domain.JxWhjh; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxHeadVo; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxJlVo; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjlVo; +import org.dromara.mechanical.jxgl.service.IJxGzwxJlService; +import org.dromara.system.service.impl.SysOssServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.dromara.mechanical.jxgl.domain.bo.JxGzwxBo; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxVo; +import org.dromara.mechanical.jxgl.domain.JxGzwx; +import org.dromara.mechanical.jxgl.mapper.JxGzwxMapper; +import org.dromara.mechanical.jxgl.service.IJxGzwxService; + +import java.time.LocalDate; +import java.time.temporal.TemporalAdjusters; +import java.util.*; + +/** + * 机械故障维修Service业务层处理 + * + * @author Lion Li + * @date 2025-12-01 + */ +@RequiredArgsConstructor +@Service +public class JxGzwxServiceImpl extends ServiceImpl implements IJxGzwxService { + + private final JxGzwxMapper baseMapper; + + @Lazy + @Autowired + private IJxGzwxJlService jxGzwxJlService; + + private final SysOssServiceImpl sysOssService; + + /** + * 查询机械故障维修 + * + * @param faultId 主键 + * @return 机械故障维修 + */ + @Override + public JxGzwxVo queryById(Long faultId){ + return baseMapper.selectVoById(faultId); + } + /** + * 分页查询机械故障维修列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械故障维修分页列表 + */ + @Override + public TableDataInfo queryPageList(JxGzwxBo 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(JxGzwxBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(JxGzwxBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(JxGzwx::getFaultId); + lqw.eq(bo.getEquipmentId() != null, JxGzwx::getEquipmentId, bo.getEquipmentId()); + lqw.eq(bo.getFaultTime() != null, JxGzwx::getFaultTime, bo.getFaultTime()); + lqw.gt(bo.getStartTime() != null, JxGzwx::getFaultTime, bo.getStartTime()); + lqw.le(bo.getEndTime() != null, JxGzwx::getFaultTime, bo.getEndTime()); + lqw.eq(StringUtils.isNotBlank(bo.getFaultType()), JxGzwx::getFaultType, bo.getFaultType()); + lqw.eq(StringUtils.isNotBlank(bo.getFaultDescription()), JxGzwx::getFaultDescription, bo.getFaultDescription()); + lqw.eq(StringUtils.isNotBlank(bo.getSeverity()), JxGzwx::getSeverity, bo.getSeverity()); + lqw.eq(bo.getRepairStartTime() != null, JxGzwx::getRepairStartTime, bo.getRepairStartTime()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), JxGzwx::getStatus, bo.getStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getAttachments()), JxGzwx::getAttachments, bo.getAttachments()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), JxGzwx::getFileId, bo.getFileId()); + return lqw; + } + + /** + * 新增机械故障维修 + * + * @param bo 机械故障维修 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(JxGzwxBo bo) { + JxGzwx add = MapstructUtils.convert(bo, JxGzwx.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setFaultId(add.getFaultId()); + } + return flag; + } + + /** + * 修改机械故障维修 + * + * @param bo 机械故障维修 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(JxGzwxBo bo) { + JxGzwx update = MapstructUtils.convert(bo, JxGzwx.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(JxGzwx entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除机械故障维修信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + + List deleteIds = new ArrayList<>(); + for (Long id : ids) { + JxGzwxVo vo = baseMapper.selectVoById(id); + if (vo != null){ + //删除附件 + if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){ + List list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList(); + deleteIds.addAll(list); + } + } + } + if (!deleteIds.isEmpty()) { + sysOssService.deleteWithValidByIds(deleteIds, false); + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public JxGzwxHeadVo jxgzwx() { + + JxGzwxHeadVo jxGzwxHeadVo = new JxGzwxHeadVo(); + List jxGzwxes = this.baseMapper.selectList(new LambdaQueryWrapper().le(JxGzwx::getCreateTime, LocalDate.now().plusDays(1)).ge(JxGzwx::getCreateTime, LocalDate.now().minusDays(29))); + if (jxGzwxes != null && jxGzwxes.size() > 0) { + long wxz = jxGzwxes.stream().filter(jxGzwx -> "1".equals(jxGzwx.getStatus())).count(); + long hf = jxGzwxes.stream().filter(jxGzwx -> "2".equals(jxGzwx.getStatus())).count(); + + jxGzwxHeadVo.setDcl(wxz); + jxGzwxHeadVo.setZs(Long.valueOf(jxGzwxes.size())); + jxGzwxHeadVo.setYwc(hf); + } + + + return jxGzwxHeadVo; + } + + @Override + public List getlistById(Long id) { + List jxGzwxJls = jxGzwxJlService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxGzwxJl::getFaultId, id)); + return MapstructUtils.convert(jxGzwxJls, JxGzwxJlVo.class); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxWhjhServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxWhjhServiceImpl.java new file mode 100644 index 00000000..fbf13b20 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxWhjhServiceImpl.java @@ -0,0 +1,226 @@ +package org.dromara.mechanical.jxgl.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.dromara.common.core.exception.ServiceException; +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.device.domain.DeviceInfo; +import org.dromara.device.domain.vo.DeviceInfoVo; +import org.dromara.device.service.IDeviceInfoService; +import org.dromara.mechanical.jxgl.domain.JxWhjl; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjhHeadVo; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjlVo; +import org.dromara.mechanical.jxgl.service.IJxWhjlService; +import org.dromara.system.service.impl.SysOssServiceImpl; +import org.dromara.xzd.settlement.domain.vo.XzdJsSjJungonVo; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.dromara.mechanical.jxgl.domain.bo.JxWhjhBo; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjhVo; +import org.dromara.mechanical.jxgl.domain.JxWhjh; +import org.dromara.mechanical.jxgl.mapper.JxWhjhMapper; +import org.dromara.mechanical.jxgl.service.IJxWhjhService; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.time.temporal.TemporalAdjusters; +import java.util.*; + +/** + * 机械维护计划Service业务层处理 + * + * @author Lion Li + * @date 2025-12-01 + */ +@RequiredArgsConstructor +@Service +public class JxWhjhServiceImpl extends ServiceImpl implements IJxWhjhService { + + private final JxWhjhMapper baseMapper; + + @Lazy + @Autowired + private IJxWhjlService jxWhjlService; + + private final IDeviceInfoService deviceInfoService; + + + + + private final SysOssServiceImpl sysOssService; + + /** + * 查询机械维护计划 + * + * @param id 主键 + * @return 机械维护计划 + */ + @Override + public JxWhjhVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询机械维护计划列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械维护计划分页列表 + */ + @Override + public TableDataInfo queryPageList(JxWhjhBo 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(JxWhjhBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(JxWhjhBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(JxWhjh::getId); + lqw.eq(bo.getEquipmentId() != null, JxWhjh::getEquipmentId, bo.getEquipmentId()); + lqw.like(StringUtils.isNotBlank(bo.getEquipmentName()), JxWhjh::getEquipmentName, bo.getEquipmentName()); + lqw.eq(StringUtils.isNotBlank(bo.getPlanType()), JxWhjh::getPlanType, bo.getPlanType()); + lqw.eq(StringUtils.isNotBlank(bo.getMaintenanceLevel()), JxWhjh::getMaintenanceLevel, bo.getMaintenanceLevel()); + lqw.eq(StringUtils.isNotBlank(bo.getMaintenanceItems()), JxWhjh::getMaintenanceItems, bo.getMaintenanceItems()); + lqw.eq(StringUtils.isNotBlank(bo.getCycleType()), JxWhjh::getCycleType, bo.getCycleType()); + lqw.eq(bo.getCycleValue() != null, JxWhjh::getCycleValue, bo.getCycleValue()); + lqw.eq(bo.getExpectedStartDate() != null, JxWhjh::getExpectedStartDate, bo.getExpectedStartDate()); + lqw.eq(bo.getExpectedEndDate() != null, JxWhjh::getExpectedEndDate, bo.getExpectedEndDate()); + lqw.eq(bo.getResponsiblePerson() != null, JxWhjh::getResponsiblePerson, bo.getResponsiblePerson()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), JxWhjh::getStatus, bo.getStatus()); + lqw.eq(bo.getRemindBeforeDays() != null, JxWhjh::getRemindBeforeDays, bo.getRemindBeforeDays()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), JxWhjh::getFileId, bo.getFileId()); + return lqw; + } + + /** + * 新增机械维护计划 + * + * @param bo 机械维护计划 + * @return 是否新增成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(JxWhjhBo bo) { + JxWhjh add = MapstructUtils.convert(bo, JxWhjh.class); + validEntityBeforeSave(add); + //反查数据判断是都被添加过 + JxWhjhVo jxWhjhVo = baseMapper.selectVoOne(new LambdaQueryWrapper().eq(JxWhjh::getEquipmentId, bo.getEquipmentId())); + if (jxWhjhVo != null) throw new ServiceException("该设备已添加到维护计划"); +// 修改设备状态 + deviceInfoService.getBaseMapper().update(new LambdaUpdateWrapper().set(DeviceInfo::getStatus,"2").eq(DeviceInfo::getId,bo.getEquipmentId())); + + + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改机械维护计划 + * + * @param bo 机械维护计划 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(JxWhjhBo bo) { + JxWhjh update = MapstructUtils.convert(bo, JxWhjh.class); + validEntityBeforeSave(update); + Long l = jxWhjlService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(JxWhjl::getWhjhId, bo.getId())); + if (l > 0) throw new ServiceException("该计划已添加保养记录,无法修改"); + +// //反查数据判断是都被添加过 +// JxWhjhVo jxWhjhVo = baseMapper.selectVoOne(new LambdaQueryWrapper().eq(JxWhjh::getEquipmentId, bo.getEquipmentId())); +// if (jxWhjhVo != null) throw new ServiceException("该设备已添加到维护计划"); +// +// // 修改设备状态 +// deviceInfoService.getBaseMapper().update(new LambdaUpdateWrapper().set(DeviceInfo::getStatus,"2").eq(DeviceInfo::getId,bo.getEquipmentId())); +// + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(JxWhjh entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除机械维护计划信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + List deleteIds = new ArrayList<>(); + for (Long id : ids) { + JxWhjhVo vo = baseMapper.selectVoById(id); +// 判断计划是否被引用 + Long l = jxWhjlService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(JxWhjl::getWhjhId, id)); + if (l > 0) throw new ServiceException("该计划被引用,请先删除计划下的记录"); + if (vo != null){ + //删除附件 + if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){ + List list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList(); + deleteIds.addAll(list); + } + } + } + if (!deleteIds.isEmpty()) { + sysOssService.deleteWithValidByIds(deleteIds, false); + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public JxWhjhHeadVo jxwhHead() { + JxWhjhHeadVo jxWhjhHeadVo = new JxWhjhHeadVo(); + List jxWhjhs = this.baseMapper.selectList(new LambdaQueryWrapper().le(JxWhjh::getCreateTime, LocalDate.now().plusDays(1)).ge(JxWhjh::getCreateTime, LocalDate.now().minusDays(29))); + if (jxWhjhs != null && jxWhjhs.size() > 0) { + long countwwc = jxWhjhs.stream().filter(jxwhjh -> "1".equals(jxwhjh.getStatus()) || "2".equals(jxwhjh.getStatus())).count(); + long countywc = jxWhjhs.stream().filter(jxwhjh -> "3".equals(jxwhjh.getStatus())).count(); + long countyq = jxWhjhs.stream().filter(jxwhjh -> "4".equals(jxwhjh.getStatus())).count(); + jxWhjhHeadVo.setWwc(countwwc); + jxWhjhHeadVo.setYq(countyq); + jxWhjhHeadVo.setYwc(countywc); + jxWhjhHeadVo.setZs(Long.valueOf(jxWhjhs.size())); + } + return jxWhjhHeadVo; + } + + @Override + public List getlistById(Long id) { + List jxWhjls = jxWhjlService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxWhjl::getWhjhId, id)); + + return MapstructUtils.convert(jxWhjls, JxWhjlVo.class); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxWhjlServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxWhjlServiceImpl.java new file mode 100644 index 00000000..e68d77c5 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxgl/service/impl/JxWhjlServiceImpl.java @@ -0,0 +1,212 @@ +package org.dromara.mechanical.jxgl.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.device.domain.DeviceInfo; +import org.dromara.device.service.IDeviceInfoService; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcgl; +import org.dromara.mechanical.jxgl.domain.JxWhjh; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjhVo; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjlHeadVo; +import org.dromara.mechanical.jxgl.service.IJxWhjhService; +import org.dromara.system.service.impl.SysOssServiceImpl; +import org.springframework.stereotype.Service; +import org.dromara.mechanical.jxgl.domain.bo.JxWhjlBo; +import org.dromara.mechanical.jxgl.domain.vo.JxWhjlVo; +import org.dromara.mechanical.jxgl.domain.JxWhjl; +import org.dromara.mechanical.jxgl.mapper.JxWhjlMapper; +import org.dromara.mechanical.jxgl.service.IJxWhjlService; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.time.temporal.TemporalAdjusters; +import java.util.*; + +/** + * 机械维护记录Service业务层处理 + * + * @author Lion Li + * @date 2025-12-01 + */ +@RequiredArgsConstructor +@Service +public class JxWhjlServiceImpl extends ServiceImpl implements IJxWhjlService { + + private final JxWhjlMapper baseMapper; + + private final IJxWhjhService jxWhjhService; + + private final SysOssServiceImpl sysOssService; + + private final IDeviceInfoService deviceInfoService; + + + /** + * 查询机械维护记录 + * + * @param id 主键 + * @return 机械维护记录 + */ + @Override + public JxWhjlVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询机械维护记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械维护记录分页列表 + */ + @Override + public TableDataInfo queryPageList(JxWhjlBo 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(JxWhjlBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(JxWhjlBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(JxWhjl::getId); + lqw.eq(bo.getWhjhId() != null, JxWhjl::getWhjhId, bo.getWhjhId()); + lqw.eq(bo.getEquipmentId() != null, JxWhjl::getEquipmentId, bo.getEquipmentId()); + lqw.eq(bo.getMaintenanceDate() != null, JxWhjl::getMaintenanceDate, bo.getMaintenanceDate()); + lqw.eq(bo.getMaintenanceHours() != null, JxWhjl::getMaintenanceHours, bo.getMaintenanceHours()); + lqw.eq(StringUtils.isNotBlank(bo.getMaintenanceItems()), JxWhjl::getMaintenanceItems, bo.getMaintenanceItems()); + lqw.eq(StringUtils.isNotBlank(bo.getEquipmentName()), JxWhjl::getEquipmentName, bo.getEquipmentName()); + lqw.eq(StringUtils.isNotBlank(bo.getPartsReplaced()), JxWhjl::getPartsReplaced, bo.getPartsReplaced()); + lqw.eq(StringUtils.isNotBlank(bo.getMaterialsUsed()), JxWhjl::getMaterialsUsed, bo.getMaterialsUsed()); + lqw.eq(bo.getMaintainer() != null, JxWhjl::getMaintainer, bo.getMaintainer()); + lqw.eq(StringUtils.isNotBlank(bo.getMaintenanceResult()), JxWhjl::getMaintenanceResult, bo.getMaintenanceResult()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), JxWhjl::getFileId, bo.getFileId()); + return lqw; + } + + /** + * 新增机械维护记录 + * + * @param bo 机械维护记录 + * @return 是否新增成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(JxWhjlBo bo) { + JxWhjl add = MapstructUtils.convert(bo, JxWhjl.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (bo != null){ + if ("1".equals(bo.getMaintenanceResult())){ + // 修改设备状态 + deviceInfoService.getBaseMapper().update(new LambdaUpdateWrapper().set(DeviceInfo::getStatus,"1").eq(DeviceInfo::getId,bo.getEquipmentId())); + + jxWhjhService.getBaseMapper().update(new UpdateWrapper().eq("id",bo.getWhjhId()).set("status","3")); + }else { + jxWhjhService.getBaseMapper().update(new UpdateWrapper().eq("id",bo.getWhjhId()).set("status","2")); + + } + + + } + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改机械维护记录 + * + * @param bo 机械维护记录 + * @return 是否修改成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(JxWhjlBo bo) { + JxWhjl update = MapstructUtils.convert(bo, JxWhjl.class); + validEntityBeforeSave(update); + if (update != null){ + if ("1".equals(update.getMaintenanceResult())){ + jxWhjhService.getBaseMapper().update(new UpdateWrapper().eq("id",bo.getWhjhId()).set("status","3")); + }else { + jxWhjhService.getBaseMapper().update(new UpdateWrapper().eq("id",bo.getWhjhId()).set("status","2")); + } + } + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(JxWhjl entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除机械维护记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + List deleteIds = new ArrayList<>(); + for (Long id : ids) { + JxWhjlVo vo = baseMapper.selectVoById(id); + if (vo != null){ + //删除附件 + if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){ + List list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList(); + deleteIds.addAll(list); + } + } + } + if (!deleteIds.isEmpty()) { + sysOssService.deleteWithValidByIds(deleteIds, false); + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public JxWhjlHeadVo jxwhHead() { + + JxWhjlHeadVo jxWhjlHeadVo = new JxWhjlHeadVo(); + List jxWhjls = this.baseMapper.selectList(new LambdaQueryWrapper().le(JxWhjl::getCreateTime, LocalDate.now().plusDays(1)).ge(JxWhjl::getCreateTime, LocalDate.now().minusDays(29))); + if (jxWhjls != null && jxWhjls.size() > 0) { + long zc = jxWhjls.stream().filter(jxwhjl -> "1".equals(jxwhjl.getMaintenanceResult())).count(); + long yc = jxWhjls.stream().filter(jxwhjl -> "2".equals(jxwhjl.getMaintenanceResult())).count(); + long fc = jxWhjls.stream().filter(jxwhjl -> "3".equals(jxwhjl.getMaintenanceResult())).count(); + jxWhjlHeadVo.setZs(Long.valueOf(jxWhjls.size())); + jxWhjlHeadVo.setZc(zc); + jxWhjlHeadVo.setYc(yc); + jxWhjlHeadVo.setXfc(fc); + } + return jxWhjlHeadVo; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/controller/JxSgxxjlbController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/controller/JxSgxxjlbController.java new file mode 100644 index 00000000..7bbcf848 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/controller/JxSgxxjlbController.java @@ -0,0 +1,137 @@ +package org.dromara.mechanical.jxsgjl.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.device.domain.bo.DeviceInfoBo; +import org.dromara.device.domain.vo.DeviceInfoVo; +import org.dromara.device.service.IDeviceInfoService; +import org.dromara.mechanical.jxsgjl.domain.vo.JxSgxxHead; +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.mechanical.jxsgjl.domain.vo.JxSgxxjlbVo; +import org.dromara.mechanical.jxsgjl.domain.bo.JxSgxxjlbBo; +import org.dromara.mechanical.jxsgjl.service.IJxSgxxjlbService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 机械事故信息记录 + * + * @author Lion Li + * @date 2025-12-04 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/jxsgjl/sgxxjlb") +public class JxSgxxjlbController extends BaseController { + + private final IJxSgxxjlbService jxSgxxjlbService; + + + + private final IDeviceInfoService deviceInfoService; + + + + + + /** + * 查询设备信息列表 + */ + @SaCheckPermission("jxsgjl:sgxxjlb:list") + @GetMapping("/getlist") + public TableDataInfo list(DeviceInfoBo bo, PageQuery pageQuery) { + return deviceInfoService.queryPageList(bo, pageQuery); + } + + + /** + * 查询机械事故信息记录列表 + */ + @SaCheckPermission("jxsgjl:sgxxjlb:list") + @GetMapping("/list") + public TableDataInfo list(JxSgxxjlbBo bo, PageQuery pageQuery) { + return jxSgxxjlbService.queryPageList(bo, pageQuery); + } + + /** + * 查询机械事故记录头部数据 + */ + @SaCheckPermission("jxsgjl:sgxxjlb:list") + @GetMapping("/getHeadData") + public R getHeadData() { + return R.ok(jxSgxxjlbService.getHeadData()); + } + + + /** + * 导出机械事故信息记录列表 + */ + @SaCheckPermission("jxsgjl:sgxxjlb:export") + @Log(title = "机械事故信息记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(JxSgxxjlbBo bo, HttpServletResponse response) { + List list = jxSgxxjlbService.queryList(bo); + ExcelUtil.exportExcel(list, "机械事故信息记录", JxSgxxjlbVo.class, response); + } + + /** + * 获取机械事故信息记录详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("jxsgjl:sgxxjlb:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(jxSgxxjlbService.queryById(id)); + } + + /** + * 新增机械事故信息记录 + */ + @SaCheckPermission("jxsgjl:sgxxjlb:add") + @Log(title = "机械事故信息记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody JxSgxxjlbBo bo) { + return toAjax(jxSgxxjlbService.insertByBo(bo)); + } + + /** + * 修改机械事故信息记录 + */ + @SaCheckPermission("jxsgjl:sgxxjlb:edit") + @Log(title = "机械事故信息记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody JxSgxxjlbBo bo) { + return toAjax(jxSgxxjlbService.updateByBo(bo)); + } + + /** + * 删除机械事故信息记录 + * + * @param ids 主键串 + */ + @SaCheckPermission("jxsgjl:sgxxjlb:remove") + @Log(title = "机械事故信息记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(jxSgxxjlbService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/JxSgxxjlb.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/JxSgxxjlb.java new file mode 100644 index 00000000..1f264b92 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/JxSgxxjlb.java @@ -0,0 +1,139 @@ +package org.dromara.mechanical.jxsgjl.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.math.BigDecimal; + +import java.io.Serial; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * 机械事故信息记录对象 jx_sgxxjlb + * + * @author Lion Li + * @date 2025-12-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("jx_sgxxjlb") +public class JxSgxxjlb extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 事故编号(如SGJL-20230620-001) + */ + private String accidentCode; + + /** + * 事故等级(下拉选择) + */ + private String accidentLevel; + + /** + * 事故类型(下拉选择) + */ + private String accidentType; + + /** + * 设备名称(下拉选择) + */ + private String equipmentName; + + /** + * 设备台账id + */ + private Long equipmentId; + + /** + * 发生时间 + */ + private LocalDateTime occurrenceTime; + + /** + * 发生地点 + */ + private String occurrencePlace; + + /** + * 事故描述(详细经过) + */ + private String accidentDescription; + + /** + * 直接损失金额(元) + */ + private BigDecimal directLoss; + + /** + * 间接损失金额(元) + */ + private BigDecimal indirectLoss; + + /** + * 事故原因分析 + */ + private String accidentCause; + + /** + * 人员伤亡情况(如有) + */ + private String casualtySituation; + + /** + * 应急处理措施 + */ + private String emergencyMeasures; + + /** + * 整改预防措施 + */ + private String rectificationMeasures; + + /** + * 责任人 + */ + private Long responsiblePerson; + + /** + * 处理结果 + */ + private String handleResult; + + /** + * 记录人 + */ + private Long recorder; + + /** + * 记录日期 + */ + private LocalDate recordDate; + + /** + * 审核状态 + */ + private String auditStatus; + + /** + * 照片文件id (多个文件逗号分隔) + */ + private String fileId; + + /** + * pdf文件id (多个文件逗号分隔) + */ + private String pdfId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/bo/JxSgxxjlbBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/bo/JxSgxxjlbBo.java new file mode 100644 index 00000000..1994501d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/bo/JxSgxxjlbBo.java @@ -0,0 +1,150 @@ +package org.dromara.mechanical.jxsgjl.domain.bo; + +import org.dromara.mechanical.jxsgjl.domain.JxSgxxjlb; +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.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * 机械事故信息记录业务对象 jx_sgxxjlb + * + * @author Lion Li + * @date 2025-12-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = JxSgxxjlb.class, reverseConvertGenerate = false) +public class JxSgxxjlbBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 事故编号(如SGJL-20230620-001) + */ + private String accidentCode; + + /** + * 事故等级(下拉选择) + */ + @NotBlank(message = "事故等级(下拉选择)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String accidentLevel; + + /** + * 事故类型(下拉选择) + */ + @NotBlank(message = "事故类型(下拉选择)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String accidentType; + + /** + * 设备名称(下拉选择) + */ + @NotBlank(message = "设备名称(下拉选择)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String equipmentName; + + /** + * 设备台账id + */ + private Long equipmentId; + + /** + * 发生时间 + */ + @NotNull(message = "发生时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDateTime occurrenceTime; + + /** + * 发生地点 + */ + @NotBlank(message = "发生地点不能为空", groups = { AddGroup.class, EditGroup.class }) + private String occurrencePlace; + + /** + * 事故描述(详细经过) + */ + @NotBlank(message = "事故描述(详细经过)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String accidentDescription; + + /** + * 直接损失金额(元) + */ + @NotNull(message = "直接损失金额(元)不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal directLoss; + + /** + * 间接损失金额(元) + */ + private BigDecimal indirectLoss; + + /** + * 事故原因分析 + */ + @NotBlank(message = "事故原因分析不能为空", groups = { AddGroup.class, EditGroup.class }) + private String accidentCause; + + /** + * 人员伤亡情况(如有) + */ + private String casualtySituation; + + /** + * 应急处理措施 + */ + @NotBlank(message = "应急处理措施不能为空", groups = { AddGroup.class, EditGroup.class }) + private String emergencyMeasures; + + /** + * 整改预防措施 + */ + @NotBlank(message = "整改预防措施不能为空", groups = { AddGroup.class, EditGroup.class }) + private String rectificationMeasures; + + /** + * 责任人 + */ + private Long responsiblePerson; + + /** + * 处理结果 + */ + private String handleResult; + + /** + * 记录人 + */ + @NotNull(message = "记录人不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long recorder; + + /** + * 记录日期 + */ + @NotNull(message = "记录日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate recordDate; + + /** + * 审核状态 + */ + private String auditStatus; + + /** + * 照片文件id (多个文件逗号分隔) + */ + private String fileId; + + /** + * pdf文件id (多个文件逗号分隔) + */ + private String pdfId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/vo/JxSgxxHead.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/vo/JxSgxxHead.java new file mode 100644 index 00000000..525d1c03 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/vo/JxSgxxHead.java @@ -0,0 +1,25 @@ +package org.dromara.mechanical.jxsgjl.domain.vo; + + +import lombok.Data; + +@Data +public class JxSgxxHead { + /** + * 总数 + */ + private Long zs = 0L; + /** + * 一般事故 + */ + private Long ybsg = 0L; + /** + * 重大事故 + */ + private Long zdsg = 0L; + /** + * 严重事故 + */ + private Long yzsg = 0L; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/vo/JxSgxxjlbVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/vo/JxSgxxjlbVo.java new file mode 100644 index 00000000..c7599806 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/domain/vo/JxSgxxjlbVo.java @@ -0,0 +1,169 @@ +package org.dromara.mechanical.jxsgjl.domain.vo; + +import java.math.BigDecimal; +import org.dromara.mechanical.jxsgjl.domain.JxSgxxjlb; +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.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Date; + + + +/** + * 机械事故信息记录视图对象 jx_sgxxjlb + * + * @author Lion Li + * @date 2025-12-04 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = JxSgxxjlb.class) +public class JxSgxxjlbVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 事故编号(如SGJL-20230620-001) + */ + @ExcelProperty(value = "事故编号") + private String accidentCode; + + /** + * 事故等级(下拉选择) + */ + @ExcelProperty(value = "事故等级") + private String accidentLevel; + + /** + * 事故类型(下拉选择) + */ + @ExcelProperty(value = "事故类型") + private String accidentType; + + /** + * 设备名称(下拉选择) + */ + @ExcelProperty(value = "设备名称") + private String equipmentName; + + /** + * 设备台账id + */ + @ExcelProperty(value = "设备台账id") + private Long equipmentId; + + /** + * 发生时间 + */ + @ExcelProperty(value = "发生时间") + private LocalDateTime occurrenceTime; + + /** + * 发生地点 + */ + @ExcelProperty(value = "发生地点") + private String occurrencePlace; + + /** + * 事故描述(详细经过) + */ + @ExcelProperty(value = "事故描述") + private String accidentDescription; + + /** + * 直接损失金额(元) + */ + @ExcelProperty(value = "直接损失金额") + private BigDecimal directLoss; + + /** + * 间接损失金额(元) + */ + @ExcelProperty(value = "间接损失金额") + private BigDecimal indirectLoss; + + /** + * 事故原因分析 + */ + @ExcelProperty(value = "事故原因分析") + private String accidentCause; + + /** + * 人员伤亡情况(如有) + */ + @ExcelProperty(value = "人员伤亡情况") + private String casualtySituation; + + /** + * 应急处理措施 + */ + @ExcelProperty(value = "应急处理措施") + private String emergencyMeasures; + + /** + * 整改预防措施 + */ + @ExcelProperty(value = "整改预防措施") + private String rectificationMeasures; + + /** + * 责任人 + */ + @ExcelProperty(value = "责任人") + private Long responsiblePerson; + + /** + * 处理结果 + */ + @ExcelProperty(value = "处理结果") + private String handleResult; + + /** + * 记录人 + */ + @ExcelProperty(value = "记录人") + private Long recorder; + + /** + * 记录日期 + */ + @ExcelProperty(value = "记录日期") + private LocalDate recordDate; + + /** + * 审核状态 + */ + @ExcelProperty(value = "审核状态") + private String auditStatus; + + /** + * 照片文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "照片文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String fileId; + + /** + * pdf文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "pdf文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String pdfId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/mapper/JxSgxxjlbMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/mapper/JxSgxxjlbMapper.java new file mode 100644 index 00000000..547d2c14 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/mapper/JxSgxxjlbMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mechanical.jxsgjl.mapper; + +import org.dromara.mechanical.jxsgjl.domain.JxSgxxjlb; +import org.dromara.mechanical.jxsgjl.domain.vo.JxSgxxjlbVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 机械事故信息记录Mapper接口 + * + * @author Lion Li + * @date 2025-12-04 + */ +public interface JxSgxxjlbMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/service/IJxSgxxjlbService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/service/IJxSgxxjlbService.java new file mode 100644 index 00000000..ff477a06 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/service/IJxSgxxjlbService.java @@ -0,0 +1,73 @@ +package org.dromara.mechanical.jxsgjl.service; + +import org.dromara.mechanical.jxsgjl.domain.vo.JxSgxxHead; +import org.dromara.mechanical.jxsgjl.domain.vo.JxSgxxjlbVo; +import org.dromara.mechanical.jxsgjl.domain.bo.JxSgxxjlbBo; +import org.dromara.mechanical.jxsgjl.domain.JxSgxxjlb; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 机械事故信息记录Service接口 + * + * @author Lion Li + * @date 2025-12-04 + */ +public interface IJxSgxxjlbService extends IService{ + + /** + * 查询机械事故信息记录 + * + * @param id 主键 + * @return 机械事故信息记录 + */ + JxSgxxjlbVo queryById(Long id); + + /** + * 分页查询机械事故信息记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械事故信息记录分页列表 + */ + TableDataInfo queryPageList(JxSgxxjlbBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械事故信息记录列表 + * + * @param bo 查询条件 + * @return 机械事故信息记录列表 + */ + List queryList(JxSgxxjlbBo bo); + + /** + * 新增机械事故信息记录 + * + * @param bo 机械事故信息记录 + * @return 是否新增成功 + */ + Boolean insertByBo(JxSgxxjlbBo bo); + + /** + * 修改机械事故信息记录 + * + * @param bo 机械事故信息记录 + * @return 是否修改成功 + */ + Boolean updateByBo(JxSgxxjlbBo bo); + + /** + * 校验并批量删除机械事故信息记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + JxSgxxHead getHeadData(); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/service/impl/JxSgxxjlbServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/service/impl/JxSgxxjlbServiceImpl.java new file mode 100644 index 00000000..c953c985 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxsgjl/service/impl/JxSgxxjlbServiceImpl.java @@ -0,0 +1,192 @@ +package org.dromara.mechanical.jxsgjl.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.utils.BatchNumberGenerator; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcgl; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxJlVo; +import org.dromara.mechanical.jxsgjl.domain.vo.JxSgxxHead; +import org.dromara.system.service.ISysOssService; +import org.springframework.stereotype.Service; +import org.dromara.mechanical.jxsgjl.domain.bo.JxSgxxjlbBo; +import org.dromara.mechanical.jxsgjl.domain.vo.JxSgxxjlbVo; +import org.dromara.mechanical.jxsgjl.domain.JxSgxxjlb; +import org.dromara.mechanical.jxsgjl.mapper.JxSgxxjlbMapper; +import org.dromara.mechanical.jxsgjl.service.IJxSgxxjlbService; + +import java.time.LocalDate; +import java.util.*; + +/** + * 机械事故信息记录Service业务层处理 + * + * @author Lion Li + * @date 2025-12-04 + */ +@RequiredArgsConstructor +@Service +public class JxSgxxjlbServiceImpl extends ServiceImpl implements IJxSgxxjlbService { + + private final JxSgxxjlbMapper baseMapper; + + private final ISysOssService sysOssService; + + + /** + * 查询机械事故信息记录 + * + * @param id 主键 + * @return 机械事故信息记录 + */ + @Override + public JxSgxxjlbVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询机械事故信息记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械事故信息记录分页列表 + */ + @Override + public TableDataInfo queryPageList(JxSgxxjlbBo 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(JxSgxxjlbBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(JxSgxxjlbBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(JxSgxxjlb::getId); + lqw.eq(StringUtils.isNotBlank(bo.getAccidentCode()), JxSgxxjlb::getAccidentCode, bo.getAccidentCode()); + lqw.eq(StringUtils.isNotBlank(bo.getAccidentLevel()), JxSgxxjlb::getAccidentLevel, bo.getAccidentLevel()); + lqw.eq(StringUtils.isNotBlank(bo.getAccidentType()), JxSgxxjlb::getAccidentType, bo.getAccidentType()); + lqw.like(StringUtils.isNotBlank(bo.getEquipmentName()), JxSgxxjlb::getEquipmentName, bo.getEquipmentName()); + lqw.eq(bo.getOccurrenceTime() != null, JxSgxxjlb::getOccurrenceTime, bo.getOccurrenceTime()); + lqw.eq(StringUtils.isNotBlank(bo.getOccurrencePlace()), JxSgxxjlb::getOccurrencePlace, bo.getOccurrencePlace()); + lqw.eq(StringUtils.isNotBlank(bo.getAccidentDescription()), JxSgxxjlb::getAccidentDescription, bo.getAccidentDescription()); + lqw.eq(bo.getDirectLoss() != null, JxSgxxjlb::getDirectLoss, bo.getDirectLoss()); + lqw.eq(bo.getIndirectLoss() != null, JxSgxxjlb::getIndirectLoss, bo.getIndirectLoss()); + lqw.eq(StringUtils.isNotBlank(bo.getAccidentCause()), JxSgxxjlb::getAccidentCause, bo.getAccidentCause()); + lqw.eq(StringUtils.isNotBlank(bo.getCasualtySituation()), JxSgxxjlb::getCasualtySituation, bo.getCasualtySituation()); + lqw.eq(StringUtils.isNotBlank(bo.getEmergencyMeasures()), JxSgxxjlb::getEmergencyMeasures, bo.getEmergencyMeasures()); + lqw.eq(StringUtils.isNotBlank(bo.getRectificationMeasures()), JxSgxxjlb::getRectificationMeasures, bo.getRectificationMeasures()); + lqw.eq(bo.getResponsiblePerson() != null, JxSgxxjlb::getResponsiblePerson, bo.getResponsiblePerson()); + lqw.eq(StringUtils.isNotBlank(bo.getHandleResult()), JxSgxxjlb::getHandleResult, bo.getHandleResult()); + lqw.eq(bo.getRecorder() != null, JxSgxxjlb::getRecorder, bo.getRecorder()); + lqw.eq(bo.getRecordDate() != null, JxSgxxjlb::getRecordDate, bo.getRecordDate()); + lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), JxSgxxjlb::getAuditStatus, bo.getAuditStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), JxSgxxjlb::getFileId, bo.getFileId()); + lqw.eq(StringUtils.isNotBlank(bo.getPdfId()), JxSgxxjlb::getPdfId, bo.getPdfId()); + return lqw; + } + + /** + * 新增机械事故信息记录 + * + * @param bo 机械事故信息记录 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(JxSgxxjlbBo bo) { + JxSgxxjlb add = MapstructUtils.convert(bo, JxSgxxjlb.class); + validEntityBeforeSave(add); + String banBen = BatchNumberGenerator.generateBatchNumber("JXAQSGJL-"); + add.setAccidentCode(banBen); + + + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改机械事故信息记录 + * + * @param bo 机械事故信息记录 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(JxSgxxjlbBo bo) { + JxSgxxjlb update = MapstructUtils.convert(bo, JxSgxxjlb.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(JxSgxxjlb entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除机械事故信息记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + + List deleteIds = new ArrayList<>(); + for (Long id : ids) { + JxSgxxjlbVo vo = baseMapper.selectVoById(id); + if (vo != null){ + //删除附件 + if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){ + List list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList(); + deleteIds.addAll(list); + } + } + } + if (!deleteIds.isEmpty()) { + sysOssService.deleteWithValidByIds(deleteIds, false); + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public JxSgxxHead getHeadData() { + JxSgxxHead jxSgxxHead = new JxSgxxHead(); + List jxSgxxjlbs = this.getBaseMapper().selectList(new LambdaQueryWrapper().le(JxSgxxjlb::getCreateTime, LocalDate.now().plusDays(1)).ge(JxSgxxjlb::getCreateTime, LocalDate.now().minusDays(29))); + if (jxSgxxjlbs != null && jxSgxxjlbs.size() > 0) { + long ybsg = jxSgxxjlbs.stream().filter(jxSgxxjlb -> jxSgxxjlb.getAccidentLevel().equals("1")).count(); + long yzsg = jxSgxxjlbs.stream().filter(jxSgxxjlb -> jxSgxxjlb.getAccidentLevel().equals("2")).count(); + long zdsg = jxSgxxjlbs.stream().filter(jxSgxxjlb -> jxSgxxjlb.getAccidentLevel().equals("3")).count(); + jxSgxxHead.setZs(Long.valueOf(jxSgxxjlbs.size())); + jxSgxxHead.setYbsg(ybsg); + jxSgxxHead.setYzsg(yzsg); + jxSgxxHead.setZdsg(zdsg); + } + return jxSgxxHead; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/controller/JxYhzgbhController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/controller/JxYhzgbhController.java new file mode 100644 index 00000000..f0b08b58 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/controller/JxYhzgbhController.java @@ -0,0 +1,153 @@ +package org.dromara.mechanical.jxzgbh.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.mechanical.jxzgbh.domain.JxFcxx; +import org.dromara.mechanical.jxzgbh.domain.bo.JxFcxxBo; +import org.dromara.mechanical.jxzgbh.domain.bo.JxZgxxBo; +import org.dromara.mechanical.jxzgbh.domain.vo.JxZgxxHeadVo; +import org.dromara.mechanical.jxzgbh.domain.vo.JxZgxxOrFcxxVo; +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.mechanical.jxzgbh.domain.vo.JxYhzgbhVo; +import org.dromara.mechanical.jxzgbh.domain.bo.JxYhzgbhBo; +import org.dromara.mechanical.jxzgbh.service.IJxYhzgbhService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 机械隐患整改与闭环 + * + * @author Lion Li + * @date 2025-12-03 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/jxzgbh/yhzgbh") +public class JxYhzgbhController extends BaseController { + + private final IJxYhzgbhService jxYhzgbhService; + + + /** + * 头部数据返回 + */ + @SaCheckPermission("jxzgbh:yhzgbh:list") + @GetMapping("/getListHead") + public R getListHead(JxYhzgbhBo bo, PageQuery pageQuery) { + return R.ok(jxYhzgbhService.getListHead(bo, pageQuery)); + } + + /** + * 整改接口 + */ + @SaCheckPermission("jxzgbh:yhzgbh:edit") + @PutMapping("/zgPutBo") + public R zgPutBo(@RequestBody JxZgxxBo bo) { + return toAjax(jxYhzgbhService.zgPutBo(bo)); + } + + + + /** + * 复查,整改接口详情查询 1整改 2 复查 + */ + + @SaCheckPermission("jxzgbh:yhzgbh:edit") + @GetMapping("/zgxxorfcxx/{type}/{id}") + public R zgxxorfcxx(@PathVariable String type, @PathVariable Long id) { + return R.ok(jxYhzgbhService.zgxxorfcxx(type,id)); + } + + + + /** + *复查 + */ + + @SaCheckPermission("jxzgbh:yhzgbh:edit") + @PutMapping("/fcPutBo") + public R fcPutBo(@RequestBody JxFcxxBo bo) { + return toAjax(jxYhzgbhService.fcPutBo(bo)); + } + + /** + * 查询机械隐患整改与闭环列表 + */ + @SaCheckPermission("jxzgbh:yhzgbh:list") + @GetMapping("/list") + public TableDataInfo list(JxYhzgbhBo bo, PageQuery pageQuery) { + return jxYhzgbhService.queryPageList(bo, pageQuery); + } + + /** + * 导出机械隐患整改与闭环列表 + */ + @SaCheckPermission("jxzgbh:yhzgbh:export") + @Log(title = "机械隐患整改与闭环", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(JxYhzgbhBo bo, HttpServletResponse response) { + List list = jxYhzgbhService.queryList(bo); + ExcelUtil.exportExcel(list, "机械隐患整改与闭环", JxYhzgbhVo.class, response); + } + + /** + * 获取机械隐患整改与闭环详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("jxzgbh:yhzgbh:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(jxYhzgbhService.queryById(id)); + } + + /** + * 新增机械隐患整改与闭环 + */ + @SaCheckPermission("jxzgbh:yhzgbh:add") + @Log(title = "机械隐患整改与闭环", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody JxYhzgbhBo bo) { + return toAjax(jxYhzgbhService.insertByBo(bo)); + } + + /** + * 修改机械隐患整改与闭环 + */ + @SaCheckPermission("jxzgbh:yhzgbh:edit") + @Log(title = "机械隐患整改与闭环", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody JxYhzgbhBo bo) { + return toAjax(jxYhzgbhService.updateByBo(bo)); + } + + /** + * 删除机械隐患整改与闭环 + * + * @param ids 主键串 + */ + @SaCheckPermission("jxzgbh:yhzgbh:remove") + @Log(title = "机械隐患整改与闭环", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(jxYhzgbhService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/JxFcxx.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/JxFcxx.java new file mode 100644 index 00000000..d92105f6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/JxFcxx.java @@ -0,0 +1,79 @@ +package org.dromara.mechanical.jxzgbh.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.time.LocalDate; + +/** + * 机械隐患复查信息对象 jx_fcxx + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("jx_fcxx") +public class JxFcxx extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 机械隐患ID + */ + private Long masterId; + + /** + * 复查人 + */ + private Long review; + + /** + * 复查日期 + */ + private LocalDate reviewDate; + + /** + * 复查状态 + */ + private String reviewOpinion; + + /** + * 最终闭环状态 + */ + private String reviewState; + + /** + * 不通过原因 + */ + private String notPassCause; + + /** + * 复查意见详情 + */ + private String reviewOpinionParticulars; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + + /** + * pdf文件id (多个文件逗号分隔) + */ + private String pdfId; + + private Integer sort; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/JxYhzgbh.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/JxYhzgbh.java new file mode 100644 index 00000000..5489fb06 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/JxYhzgbh.java @@ -0,0 +1,110 @@ +package org.dromara.mechanical.jxzgbh.domain; + +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.time.LocalDate; + +/** + * 机械隐患整改与闭环对象 jx_yhzgbh + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("jx_yhzgbh") +public class JxYhzgbh extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 隐患编号 + */ + private String inspectionOrderNo; + + /** + * 检查单编号 + */ + private String inspectionJcdNo; + + /** + * 检查人 + */ + private Long inspector; + + + + /** + * 最终闭环状态 + */ + private String reviewState; + + /** + * 整改状态 + */ + private String abarbeitungState; + + /** + * 机械安全检查记录表ID + */ + private Long masterId; + + /** + * 隐患等级 + */ + private String riskGrade; + + /** + * 隐患来源 + */ + private String yhly; + + /** + * 对应设备 + */ + private String equipmentName; + + /** + * 发现时间 + */ + private LocalDate discoverDate; + + /** + * 发现人 + */ + private Long discoverId; + + /** + * 整改人 + */ + private Long abarbeitung; + + /** + * 审核状态 + */ + private String auditStatus; + + /** + * 复查状态 + */ + private String reviewOpinion; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/JxZgxx.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/JxZgxx.java new file mode 100644 index 00000000..ef000fa9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/JxZgxx.java @@ -0,0 +1,82 @@ +package org.dromara.mechanical.jxzgbh.domain; + +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.time.LocalDate; + +/** + * 机械隐患整改信息对象 jx_zgxx + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("jx_zgxx") +public class JxZgxx extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 机械隐患ID + */ + private Long masterId; + + /** + * 整改责任人 + */ + private Long abarbeitung; + + /** + * 整改开始日期 + */ + private LocalDate abarbeitungKsdate; + + /** + * 整改结束日期 + */ + private LocalDate abarbeitungJsdate; + +// /** +// * 整改期限 +// */ +// private LocalDate abarbeitungDeadline; + + /** + * 整改措施 + */ + private String abarbeitungMeasure; + + /** + * 整改完成情况 + */ + private String abarbeitungAccomplish; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + /** + * pdf文件id (多个文件逗号分隔) + */ + private String pdfId; + + private Integer sort; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/bo/JxFcxxBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/bo/JxFcxxBo.java new file mode 100644 index 00000000..dc8d0c58 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/bo/JxFcxxBo.java @@ -0,0 +1,85 @@ +package org.dromara.mechanical.jxzgbh.domain.bo; + +import org.dromara.mechanical.jxzgbh.domain.JxFcxx; +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.time.LocalDate; + +/** + * 机械隐患复查信息业务对象 jx_fcxx + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = JxFcxx.class, reverseConvertGenerate = false) +public class JxFcxxBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 机械隐患ID + */ + @NotNull(message = "机械隐患ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long masterId; + + /** + * 复查人 + */ + @NotNull(message = "复查人不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long review; + + /** + * 复查日期 + */ + @NotNull(message = "复查日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate reviewDate; + + /** + * 复查意见 + */ + @NotBlank(message = "复查状态不能为空", groups = { AddGroup.class, EditGroup.class }) + private String reviewOpinion; + + /** + * 最终闭环状态 + */ + @NotBlank(message = "最终闭环状态不能为空", groups = { AddGroup.class, EditGroup.class }) + private String reviewState; + + /** + * 不通过原因 + */ + private String notPassCause; + + /** + * 复查意见详情 + */ + @NotBlank(message = "复查意见详情不能为空", groups = { AddGroup.class, EditGroup.class }) + private String reviewOpinionParticulars; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + /** + * pdf文件id (多个文件逗号分隔) + */ + private String pdfId; + + private Integer sort; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/bo/JxYhzgbhBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/bo/JxYhzgbhBo.java new file mode 100644 index 00000000..32490a12 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/bo/JxYhzgbhBo.java @@ -0,0 +1,113 @@ +package org.dromara.mechanical.jxzgbh.domain.bo; + +import org.dromara.mechanical.jxzgbh.domain.JxYhzgbh; +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.time.LocalDate; + +/** + * 机械隐患整改与闭环业务对象 jx_yhzgbh + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = JxYhzgbh.class, reverseConvertGenerate = false) +public class JxYhzgbhBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 隐患编号 + */ + private String inspectionOrderNo; + + /** + * 检查单编号 + */ + private String inspectionJcdNo; + + /** + * 检查人 + */ + private Long inspector; + + /** + * 复查状态 + */ + private String reviewOpinion; + + /** + * 整改人 + */ + private Long abarbeitung; + + /** + * 机械安全检查记录表ID + */ + @NotNull(message = "机械安全检查记录表ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long masterId; + + /** + * 隐患等级 + */ + @NotBlank(message = "隐患等级不能为空", groups = { AddGroup.class, EditGroup.class }) + private String riskGrade; + + /** + * 最终闭环状态 + */ + private String reviewState; + + /** + * 整改状态 + */ + private String abarbeitungState; + + /** + * 隐患来源 + */ + @NotBlank(message = "隐患来源不能为空", groups = { AddGroup.class, EditGroup.class }) + private String yhly; + + /** + * 对应设备 + */ + @NotBlank(message = "对应设备不能为空", groups = { AddGroup.class, EditGroup.class }) + private String equipmentName; + + /** + * 发现时间 + */ + @NotNull(message = "发现时间不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate discoverDate; + + /** + * 发现人 + */ + @NotNull(message = "发现人不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long discoverId; + + /** + * 审核状态 + */ + private String auditStatus; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/bo/JxZgxxBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/bo/JxZgxxBo.java new file mode 100644 index 00000000..07ce0959 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/bo/JxZgxxBo.java @@ -0,0 +1,86 @@ +package org.dromara.mechanical.jxzgbh.domain.bo; + +import org.dromara.mechanical.jxzgbh.domain.JxZgxx; +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.time.LocalDate; + +/** + * 机械隐患整改信息业务对象 jx_zgxx + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = JxZgxx.class, reverseConvertGenerate = false) +public class JxZgxxBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 机械隐患ID + */ + @NotNull(message = "机械隐患ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long masterId; + + /** + * 整改责任人 + */ + @NotNull(message = "整改责任人不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long abarbeitung; + + /** + * 整改开始日期 + */ + @NotNull(message = "整改开始日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate abarbeitungKsdate; + + /** + * 整改结束日期 + */ + @NotNull(message = "整改结束日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate abarbeitungJsdate; + +// /** +// * 整改期限 +// */ +// @NotNull(message = "整改期限不能为空", groups = { AddGroup.class, EditGroup.class }) +// private LocalDate abarbeitungDeadline; + + /** + * 整改措施 + */ + @NotBlank(message = "整改措施不能为空", groups = { AddGroup.class, EditGroup.class }) + private String abarbeitungMeasure; + + /** + * 整改完成情况 + */ + @NotBlank(message = "整改完成情况不能为空", groups = { AddGroup.class, EditGroup.class }) + private String abarbeitungAccomplish; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + /** + * pdf文件id (多个文件逗号分隔) + */ + private String pdfId; + + private Integer sort; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxFcxxVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxFcxxVo.java new file mode 100644 index 00000000..8eff49c5 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxFcxxVo.java @@ -0,0 +1,119 @@ +package org.dromara.mechanical.jxzgbh.domain.vo; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.mechanical.jxzgbh.domain.JxFcxx; +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.time.LocalDate; +import java.util.Date; + + + +/** + * 机械隐患复查信息视图对象 jx_fcxx + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = JxFcxx.class) +public class JxFcxxVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 机械隐患ID + */ + @ExcelProperty(value = "机械隐患ID") + private Long masterId; + + /** + * 复查人 + */ + @ExcelProperty(value = "复查人") + private Long review; + + /** + * 复查人 + */ + @ExcelProperty(value = "复查人") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "review") + private String reviewName; + + /** + * 复查日期 + */ + @ExcelProperty(value = "复查日期") + private LocalDate reviewDate; + + /** + * 复查意见 + */ + @ExcelProperty(value = "复查意见") + private String reviewOpinion; + + /** + * 最终闭环状态 + */ + @ExcelProperty(value = "最终闭环状态") + private String reviewState; + + /** + * 不通过原因 + */ + @ExcelProperty(value = "不通过原因") + private String notPassCause; + + /** + * 复查意见详情 + */ + @ExcelProperty(value = "复查意见详情") + private String reviewOpinionParticulars; + + /** + * 文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String fileId; + + /** + * pdf文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "pdf文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String pdfId; + + private Integer sort; + + + + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxYhzgbhVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxYhzgbhVo.java new file mode 100644 index 00000000..73f5ddcb --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxYhzgbhVo.java @@ -0,0 +1,168 @@ +package org.dromara.mechanical.jxzgbh.domain.vo; + +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq; +import org.dromara.mechanical.jxzgbh.domain.JxFcxx; +import org.dromara.mechanical.jxzgbh.domain.JxYhzgbh; +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 org.dromara.mechanical.jxzgbh.domain.JxZgxx; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; +import java.util.Date; +import java.util.List; + + +/** + * 机械隐患整改与闭环视图对象 jx_yhzgbh + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = JxYhzgbh.class) +public class JxYhzgbhVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 隐患编号 + */ + @ExcelProperty(value = "隐患编号") + private String inspectionOrderNo; + /** + * 检查单编号 + */ + @ExcelProperty(value = "检查单编号") + private String inspectionJcdNo; + + /** + * 检查人 + */ + @ExcelProperty(value = "检查人") + private Long inspector; + + /** + * 复查状态 + */ + private String reviewOpinion; + + /** + * 检查人 + */ + @ExcelProperty(value = "检查人") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "inspector") + private String inspectorName; + + + /** + * 机械安全检查记录表ID + */ + @ExcelProperty(value = "机械安全检查记录表ID") + private Long masterId; + + /** + * 隐患等级 + */ + @ExcelProperty(value = "隐患等级") + private String riskGrade; + + /** + * 隐患来源 + */ + @ExcelProperty(value = "隐患来源") + private String yhly; + + /** + * 对应设备 + */ + @ExcelProperty(value = "对应设备") + private String equipmentName; + + /** + * 最终闭环状态 + */ + private String reviewState; + + /** + * 整改状态 + */ + private String abarbeitungState; + + /** + * 发现时间 + */ + @ExcelProperty(value = "发现时间") + private LocalDate discoverDate; + + /** + * 发现人 + */ + @ExcelProperty(value = "发现人") + private Long discoverId; + + /** + * 发现人 + */ + @ExcelProperty(value = "发现人") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "discoverId") + private String discoverName; + + /** + * 整改人 + */ + private Long abarbeitung; + + + /** + * 整改人 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "discoverId") + private String abarbeitungName; + + /** + * 审核状态 + */ + @ExcelProperty(value = "审核状态") + private String auditStatus; + + /** + * 文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String fileId; + + + /** + * 整改信息 + */ + private List zgxxList; + /** + * 复查信息 + */ + private List fcxxList; + + + /** + * 问题详情 + */ + private List wtxqList; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxHeadVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxHeadVo.java new file mode 100644 index 00000000..2350137a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxHeadVo.java @@ -0,0 +1,30 @@ +package org.dromara.mechanical.jxzgbh.domain.vo; + + +import lombok.Data; + +@Data +public class JxZgxxHeadVo { + /** + * 总数 + */ + private Long zs = 0L; + + /** + * 已整改 + */ + private Long yzg = 0L; + + /** + * 未整改 + */ + private Long wzg = 0L; + + + /** + * 已闭环 + */ + private Long ybh = 0L; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxOrFcxxVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxOrFcxxVo.java new file mode 100644 index 00000000..36a92c59 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxOrFcxxVo.java @@ -0,0 +1,38 @@ +package org.dromara.mechanical.jxzgbh.domain.vo; + + +import lombok.Data; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq; +import org.dromara.mechanical.jxzgbh.domain.JxFcxx; +import org.dromara.mechanical.jxzgbh.domain.JxZgxx; + +import java.util.List; + +@Data +public class JxZgxxOrFcxxVo { + + /** + * 隐患整改与闭环 + */ + private JxYhzgbhVo yhzgbhVo; + + + /** + * 复查数据 + */ + private JxFcxx fcxxVo; + + /** + * 整改数据 + */ + private JxZgxx zgxxVo; + + + /** + * 问题详情 + */ + private List wtxqList; + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxVo.java new file mode 100644 index 00000000..1b176486 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/domain/vo/JxZgxxVo.java @@ -0,0 +1,108 @@ +package org.dromara.mechanical.jxzgbh.domain.vo; + +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.mechanical.jxzgbh.domain.JxZgxx; +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.time.LocalDate; +import java.util.Date; + + + +/** + * 机械隐患整改信息视图对象 jx_zgxx + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = JxZgxx.class) +public class JxZgxxVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 机械隐患ID + */ + @ExcelProperty(value = "机械隐患ID") + private Long masterId; + + /** + * 整改责任人 + */ + @ExcelProperty(value = "整改责任人") + private Long abarbeitung; + + + /** + * 整改责任人 + */ + @ExcelProperty(value = "整改责任人") + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "abarbeitung") + private String abarbeitungName; + + /** + * 整改开始日期 + */ + @ExcelProperty(value = "整改开始日期") + private LocalDate abarbeitungKsdate; + + /** + * 整改结束日期 + */ + @ExcelProperty(value = "整改结束日期") + private LocalDate abarbeitungJsdate; + +// /** +// * 整改期限 +// */ +// @ExcelProperty(value = "整改期限") +// private LocalDate abarbeitungDeadline; + + /** + * 整改措施 + */ + @ExcelProperty(value = "整改措施") + private String abarbeitungMeasure; + + /** + * 整改完成情况 + */ + @ExcelProperty(value = "整改完成情况") + private String abarbeitungAccomplish; + + /** + * 文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String fileId; + + + /** + * pdf文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "pdf文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String pdfId; + + private Integer sort; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/mapper/JxFcxxMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/mapper/JxFcxxMapper.java new file mode 100644 index 00000000..60e7d723 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/mapper/JxFcxxMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mechanical.jxzgbh.mapper; + +import org.dromara.mechanical.jxzgbh.domain.JxFcxx; +import org.dromara.mechanical.jxzgbh.domain.vo.JxFcxxVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 机械隐患复查信息Mapper接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface JxFcxxMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/mapper/JxYhzgbhMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/mapper/JxYhzgbhMapper.java new file mode 100644 index 00000000..d272693a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/mapper/JxYhzgbhMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mechanical.jxzgbh.mapper; + +import org.dromara.mechanical.jxzgbh.domain.JxYhzgbh; +import org.dromara.mechanical.jxzgbh.domain.vo.JxYhzgbhVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 机械隐患整改与闭环Mapper接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface JxYhzgbhMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/mapper/JxZgxxMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/mapper/JxZgxxMapper.java new file mode 100644 index 00000000..21b80769 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/mapper/JxZgxxMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mechanical.jxzgbh.mapper; + +import org.dromara.mechanical.jxzgbh.domain.JxZgxx; +import org.dromara.mechanical.jxzgbh.domain.vo.JxZgxxVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 机械隐患整改信息Mapper接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface JxZgxxMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/IJxFcxxService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/IJxFcxxService.java new file mode 100644 index 00000000..34e1aa86 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/IJxFcxxService.java @@ -0,0 +1,70 @@ +package org.dromara.mechanical.jxzgbh.service; + +import org.dromara.mechanical.jxzgbh.domain.vo.JxFcxxVo; +import org.dromara.mechanical.jxzgbh.domain.bo.JxFcxxBo; +import org.dromara.mechanical.jxzgbh.domain.JxFcxx; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 机械隐患复查信息Service接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface IJxFcxxService extends IService{ + + /** + * 查询机械隐患复查信息 + * + * @param id 主键 + * @return 机械隐患复查信息 + */ + JxFcxxVo queryById(Long id); + + /** + * 分页查询机械隐患复查信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械隐患复查信息分页列表 + */ + TableDataInfo queryPageList(JxFcxxBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械隐患复查信息列表 + * + * @param bo 查询条件 + * @return 机械隐患复查信息列表 + */ + List queryList(JxFcxxBo bo); + + /** + * 新增机械隐患复查信息 + * + * @param bo 机械隐患复查信息 + * @return 是否新增成功 + */ + Boolean insertByBo(JxFcxxBo bo); + + /** + * 修改机械隐患复查信息 + * + * @param bo 机械隐患复查信息 + * @return 是否修改成功 + */ + Boolean updateByBo(JxFcxxBo bo); + + /** + * 校验并批量删除机械隐患复查信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/IJxYhzgbhService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/IJxYhzgbhService.java new file mode 100644 index 00000000..209027ad --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/IJxYhzgbhService.java @@ -0,0 +1,84 @@ +package org.dromara.mechanical.jxzgbh.service; + +import org.dromara.mechanical.jxzgbh.domain.bo.JxFcxxBo; +import org.dromara.mechanical.jxzgbh.domain.bo.JxZgxxBo; +import org.dromara.mechanical.jxzgbh.domain.vo.JxYhzgbhVo; +import org.dromara.mechanical.jxzgbh.domain.bo.JxYhzgbhBo; +import org.dromara.mechanical.jxzgbh.domain.JxYhzgbh; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.mechanical.jxzgbh.domain.vo.JxZgxxHeadVo; +import org.dromara.mechanical.jxzgbh.domain.vo.JxZgxxOrFcxxVo; + +import java.util.Collection; +import java.util.List; + +/** + * 机械隐患整改与闭环Service接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface IJxYhzgbhService extends IService{ + + /** + * 查询机械隐患整改与闭环 + * + * @param id 主键 + * @return 机械隐患整改与闭环 + */ + JxYhzgbhVo queryById(Long id); + + /** + * 分页查询机械隐患整改与闭环列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械隐患整改与闭环分页列表 + */ + TableDataInfo queryPageList(JxYhzgbhBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械隐患整改与闭环列表 + * + * @param bo 查询条件 + * @return 机械隐患整改与闭环列表 + */ + List queryList(JxYhzgbhBo bo); + + /** + * 新增机械隐患整改与闭环 + * + * @param bo 机械隐患整改与闭环 + * @return 是否新增成功 + */ + Boolean insertByBo(JxYhzgbhBo bo); + + /** + * 修改机械隐患整改与闭环 + * + * @param bo 机械隐患整改与闭环 + * @return 是否修改成功 + */ + Boolean updateByBo(JxYhzgbhBo bo); + + /** + * 校验并批量删除机械隐患整改与闭环信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + + JxZgxxHeadVo getListHead(JxYhzgbhBo bo, PageQuery pageQuery); + + Boolean zgPutBo(JxZgxxBo bo); + + Boolean fcPutBo(JxFcxxBo bo); + + JxZgxxOrFcxxVo zgxxorfcxx(String type, Long id); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/IJxZgxxService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/IJxZgxxService.java new file mode 100644 index 00000000..a523fd70 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/IJxZgxxService.java @@ -0,0 +1,70 @@ +package org.dromara.mechanical.jxzgbh.service; + +import org.dromara.mechanical.jxzgbh.domain.vo.JxZgxxVo; +import org.dromara.mechanical.jxzgbh.domain.bo.JxZgxxBo; +import org.dromara.mechanical.jxzgbh.domain.JxZgxx; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 机械隐患整改信息Service接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface IJxZgxxService extends IService{ + + /** + * 查询机械隐患整改信息 + * + * @param id 主键 + * @return 机械隐患整改信息 + */ + JxZgxxVo queryById(Long id); + + /** + * 分页查询机械隐患整改信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械隐患整改信息分页列表 + */ + TableDataInfo queryPageList(JxZgxxBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的机械隐患整改信息列表 + * + * @param bo 查询条件 + * @return 机械隐患整改信息列表 + */ + List queryList(JxZgxxBo bo); + + /** + * 新增机械隐患整改信息 + * + * @param bo 机械隐患整改信息 + * @return 是否新增成功 + */ + Boolean insertByBo(JxZgxxBo bo); + + /** + * 修改机械隐患整改信息 + * + * @param bo 机械隐患整改信息 + * @return 是否修改成功 + */ + Boolean updateByBo(JxZgxxBo bo); + + /** + * 校验并批量删除机械隐患整改信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/impl/JxFcxxServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/impl/JxFcxxServiceImpl.java new file mode 100644 index 00000000..b677a5e3 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/impl/JxFcxxServiceImpl.java @@ -0,0 +1,138 @@ +package org.dromara.mechanical.jxzgbh.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.mechanical.jxzgbh.domain.bo.JxFcxxBo; +import org.dromara.mechanical.jxzgbh.domain.vo.JxFcxxVo; +import org.dromara.mechanical.jxzgbh.domain.JxFcxx; +import org.dromara.mechanical.jxzgbh.mapper.JxFcxxMapper; +import org.dromara.mechanical.jxzgbh.service.IJxFcxxService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 机械隐患复查信息Service业务层处理 + * + * @author Lion Li + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class JxFcxxServiceImpl extends ServiceImpl implements IJxFcxxService { + + private final JxFcxxMapper baseMapper; + + /** + * 查询机械隐患复查信息 + * + * @param id 主键 + * @return 机械隐患复查信息 + */ + @Override + public JxFcxxVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询机械隐患复查信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械隐患复查信息分页列表 + */ + @Override + public TableDataInfo queryPageList(JxFcxxBo 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(JxFcxxBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(JxFcxxBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(JxFcxx::getId); + lqw.eq(bo.getMasterId() != null, JxFcxx::getMasterId, bo.getMasterId()); + lqw.eq(bo.getReview() != null, JxFcxx::getReview, bo.getReview()); + lqw.eq(bo.getReviewDate() != null, JxFcxx::getReviewDate, bo.getReviewDate()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewOpinion()), JxFcxx::getReviewOpinion, bo.getReviewOpinion()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewState()), JxFcxx::getReviewState, bo.getReviewState()); + lqw.eq(StringUtils.isNotBlank(bo.getNotPassCause()), JxFcxx::getNotPassCause, bo.getNotPassCause()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewOpinionParticulars()), JxFcxx::getReviewOpinionParticulars, bo.getReviewOpinionParticulars()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), JxFcxx::getFileId, bo.getFileId()); + return lqw; + } + + /** + * 新增机械隐患复查信息 + * + * @param bo 机械隐患复查信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(JxFcxxBo bo) { + JxFcxx add = MapstructUtils.convert(bo, JxFcxx.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改机械隐患复查信息 + * + * @param bo 机械隐患复查信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(JxFcxxBo bo) { + JxFcxx update = MapstructUtils.convert(bo, JxFcxx.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(JxFcxx 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/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/impl/JxYhzgbhServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/impl/JxYhzgbhServiceImpl.java new file mode 100644 index 00000000..d9e4c3bc --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/impl/JxYhzgbhServiceImpl.java @@ -0,0 +1,286 @@ +package org.dromara.mechanical.jxzgbh.service.impl; + +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.mechanical.jxaqgl.domain.JxAqjcgl; +import org.dromara.mechanical.jxaqgl.domain.JxAqjcglWtxq; +import org.dromara.mechanical.jxaqgl.domain.MonthDateRange; +import org.dromara.mechanical.jxaqgl.service.IJxAqjcglService; +import org.dromara.mechanical.jxaqgl.service.IJxAqjcglWtxqService; +import org.dromara.mechanical.jxsgjl.domain.vo.JxSgxxjlbVo; +import org.dromara.mechanical.jxzgbh.domain.JxFcxx; +import org.dromara.mechanical.jxzgbh.domain.JxZgxx; +import org.dromara.mechanical.jxzgbh.domain.bo.JxFcxxBo; +import org.dromara.mechanical.jxzgbh.domain.bo.JxZgxxBo; +import org.dromara.mechanical.jxzgbh.domain.vo.*; +import org.dromara.mechanical.jxzgbh.service.IJxFcxxService; +import org.dromara.mechanical.jxzgbh.service.IJxZgxxService; +import org.dromara.system.service.ISysOssService; +import org.springframework.stereotype.Service; +import org.dromara.mechanical.jxzgbh.domain.bo.JxYhzgbhBo; +import org.dromara.mechanical.jxzgbh.domain.JxYhzgbh; +import org.dromara.mechanical.jxzgbh.mapper.JxYhzgbhMapper; +import org.dromara.mechanical.jxzgbh.service.IJxYhzgbhService; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.util.*; + +/** + * 机械隐患整改与闭环Service业务层处理 + * + * @author Lion Li + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class JxYhzgbhServiceImpl extends ServiceImpl implements IJxYhzgbhService { + + private final JxYhzgbhMapper baseMapper; + + private final IJxZgxxService jxZgxxService; + + private final IJxFcxxService jxFcxxService; + + private final IJxAqjcglWtxqService jxAqjcglWtxqService; + + private final IJxAqjcglService jxAqjcglService; + + private final ISysOssService sysOssService; + + + /** + * 查询机械隐患整改与闭环 + * + * @param id 主键 + * @return 机械隐患整改与闭环 + */ + @Override + public JxYhzgbhVo queryById(Long id){ + JxYhzgbhVo jxYhzgbhVo = baseMapper.selectVoById(id); + saveValue(jxYhzgbhVo); + return jxYhzgbhVo; + } + + private void saveValue(JxYhzgbhVo jxYhzgbhVo) { + if (jxYhzgbhVo != null){ + // 回填整改数据 + List jxZgxxes = jxZgxxService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxZgxx::getMasterId, jxYhzgbhVo.getId())); + if (jxZgxxes != null){ + jxYhzgbhVo.setZgxxList(MapstructUtils.convert(jxZgxxes, JxZgxxVo.class)); + } + // 回填复查数据 + List jxFcxxes = jxFcxxService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxFcxx::getMasterId, jxYhzgbhVo.getId())); + if (jxFcxxes != null){ + jxYhzgbhVo.setFcxxList(MapstructUtils.convert(jxFcxxes, JxFcxxVo.class)); + } +// 问题详情 + List jxAqjcglWtxqs = jxAqjcglWtxqService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxAqjcglWtxq::getMasterId, jxYhzgbhVo.getMasterId())); + if (jxAqjcglWtxqs != null){ + jxYhzgbhVo.setWtxqList(jxAqjcglWtxqs); + } + } + + } + + /** + * 分页查询机械隐患整改与闭环列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械隐患整改与闭环分页列表 + */ + @Override + public TableDataInfo queryPageList(JxYhzgbhBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + result.getRecords().forEach(this::saveValue); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的机械隐患整改与闭环列表 + * + * @param bo 查询条件 + * @return 机械隐患整改与闭环列表 + */ + @Override + public List queryList(JxYhzgbhBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(JxYhzgbhBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(JxYhzgbh::getId); + lqw.eq(StringUtils.isNotBlank(bo.getInspectionOrderNo()), JxYhzgbh::getInspectionOrderNo, bo.getInspectionOrderNo()); + lqw.eq(bo.getMasterId() != null, JxYhzgbh::getMasterId, bo.getMasterId()); + lqw.eq(StringUtils.isNotBlank(bo.getRiskGrade()), JxYhzgbh::getRiskGrade, bo.getRiskGrade()); + lqw.eq(StringUtils.isNotBlank(bo.getYhly()), JxYhzgbh::getYhly, bo.getYhly()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewOpinion()), JxYhzgbh::getReviewOpinion, bo.getReviewOpinion()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewState()), JxYhzgbh::getReviewState, bo.getReviewState()); + lqw.eq(StringUtils.isNotBlank(bo.getAbarbeitungState()), JxYhzgbh::getAbarbeitungState, bo.getAbarbeitungState()); + lqw.like(StringUtils.isNotBlank(bo.getEquipmentName()), JxYhzgbh::getEquipmentName, bo.getEquipmentName()); + lqw.eq(bo.getDiscoverDate() != null, JxYhzgbh::getDiscoverDate, bo.getDiscoverDate()); + lqw.eq(bo.getDiscoverId() != null, JxYhzgbh::getDiscoverId, bo.getDiscoverId()); + lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), JxYhzgbh::getAuditStatus, bo.getAuditStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), JxYhzgbh::getFileId, bo.getFileId()); + return lqw; + } + + /** + * 新增机械隐患整改与闭环 + * + * @param bo 机械隐患整改与闭环 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(JxYhzgbhBo bo) { + JxYhzgbh add = MapstructUtils.convert(bo, JxYhzgbh.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改机械隐患整改与闭环 + * + * @param bo 机械隐患整改与闭环 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(JxYhzgbhBo bo) { + JxYhzgbh update = MapstructUtils.convert(bo, JxYhzgbh.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(JxYhzgbh entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除机械隐患整改与闭环信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + + List deleteIds = new ArrayList<>(); + for (Long id : ids) { + JxYhzgbhVo vo = baseMapper.selectVoById(id); + if (vo != null){ + //删除附件 + if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){ + List list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList(); + deleteIds.addAll(list); + } + } + } + if (!deleteIds.isEmpty()) { + sysOssService.deleteWithValidByIds(deleteIds, false); + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public JxZgxxHeadVo getListHead(JxYhzgbhBo bo, PageQuery pageQuery) { + JxZgxxHeadVo jxZgxxHeadVo = new JxZgxxHeadVo(); + List jxYhzgbhs = this.getBaseMapper().selectList(new LambdaQueryWrapper().le(JxYhzgbh::getCreateTime, LocalDate.now().plusDays(1)).ge(JxYhzgbh::getCreateTime, LocalDate.now().minusDays(29))); + if ( jxYhzgbhs != null && jxYhzgbhs.size() > 0) { + jxZgxxHeadVo.setZs(Long.valueOf(jxYhzgbhs.size())); + jxZgxxHeadVo.setYzg(jxYhzgbhs.stream().filter(jxYhzgbh -> jxYhzgbh.getAbarbeitungState().equals("2")).count()); + jxZgxxHeadVo.setWzg(jxYhzgbhs.stream().filter(jxYhzgbh -> jxYhzgbh.getAbarbeitungState().equals("1")).count()); + jxZgxxHeadVo.setYbh(jxYhzgbhs.stream().filter(jxYhzgbh -> jxYhzgbh.getReviewState().equals("1")).count()); + } + return jxZgxxHeadVo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean zgPutBo(JxZgxxBo bo) { +// 安全检查记录 + if (bo.getMasterId() == null) throw new RuntimeException("主表id不能为空"); + JxYhzgbhVo jxYhzgbhVo = this.getBaseMapper().selectVoOne(new LambdaQueryWrapper().eq(JxYhzgbh::getId, bo.getMasterId())); + jxAqjcglService.getBaseMapper().update(new LambdaUpdateWrapper().eq(JxAqjcgl::getId, jxYhzgbhVo.getMasterId()).set(JxAqjcgl::getAbarbeitungState, "2")); + + Long l = jxZgxxService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(JxZgxx::getMasterId, bo.getMasterId())); + bo.setSort(Integer.parseInt(l+"") + 1); +// 将状态修改为已整改 + this.getBaseMapper().update(new LambdaUpdateWrapper().eq(JxYhzgbh::getId, bo.getMasterId()).set(JxYhzgbh::getAbarbeitungState,"2")); + return jxZgxxService.insertByBo(bo); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean fcPutBo(JxFcxxBo bo) { +// 不通过修改整改信息状态 + if (bo.getReviewOpinion().equals("2")) { + if (bo.getMasterId() == null) throw new RuntimeException("主表id不能为空"); + this.getBaseMapper().update(new LambdaUpdateWrapper().eq(JxYhzgbh::getId, bo.getMasterId()).set(JxYhzgbh::getAbarbeitungState,"1")); + // 安全检查记录 + JxYhzgbhVo jxYhzgbhVo = this.getBaseMapper().selectVoOne(new LambdaQueryWrapper().eq(JxYhzgbh::getId, bo.getMasterId())); + jxAqjcglService.getBaseMapper().update(new LambdaUpdateWrapper().eq(JxAqjcgl::getId, jxYhzgbhVo.getMasterId()).set(JxAqjcgl::getAbarbeitungState, "1")); + + } + this.getBaseMapper().update(new LambdaUpdateWrapper().eq(JxYhzgbh::getId, bo.getMasterId()).set(JxYhzgbh::getReviewOpinion,bo.getReviewOpinion())); + + Long l = jxFcxxService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(JxFcxx::getMasterId, bo.getMasterId())); + bo.setSort(Integer.parseInt(l+"") + 1); +// 修改闭环状态 + this.getBaseMapper().update(new LambdaUpdateWrapper().eq(JxYhzgbh::getId, bo.getMasterId()).set(JxYhzgbh::getReviewState,bo.getReviewState())); + return jxFcxxService.insertByBo(bo); + } + + @Override + public JxZgxxOrFcxxVo zgxxorfcxx(String type, Long id) { + JxZgxxOrFcxxVo jxZgxxOrFcxxVo = new JxZgxxOrFcxxVo(); + JxYhzgbhVo jxYhzgbhVo = this.queryById(id); + if (jxYhzgbhVo != null) { + jxZgxxOrFcxxVo.setYhzgbhVo(jxYhzgbhVo); + List jxAqjcglWtxqs = jxAqjcglWtxqService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxAqjcglWtxq::getMasterId, jxYhzgbhVo.getMasterId())); + if (jxAqjcglWtxqs != null) { + jxZgxxOrFcxxVo.getYhzgbhVo().setWtxqList(jxAqjcglWtxqs); + } + } +// 回填整改信息 + if ("2".equals(type)) { + List jxZgxxes = jxZgxxService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxZgxx::getMasterId, id).orderByDesc(JxZgxx::getSort)); + if (jxZgxxes != null && jxZgxxes.size() > 0) { + jxZgxxOrFcxxVo.setZgxxVo(jxZgxxes.get(0)); + } + } + // 回填复查信息 + if ("1".equals(type)) { + List jxFcxxes = jxFcxxService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(JxFcxx::getMasterId, id).orderByDesc(JxFcxx::getSort)); + if (jxFcxxes != null && jxFcxxes.size() > 0) { + jxZgxxOrFcxxVo.setFcxxVo(jxFcxxes.get(0)); + } + } + return jxZgxxOrFcxxVo; + } + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/impl/JxZgxxServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/impl/JxZgxxServiceImpl.java new file mode 100644 index 00000000..4b7b2f32 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/mechanical/jxzgbh/service/impl/JxZgxxServiceImpl.java @@ -0,0 +1,137 @@ +package org.dromara.mechanical.jxzgbh.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.mechanical.jxzgbh.domain.bo.JxZgxxBo; +import org.dromara.mechanical.jxzgbh.domain.vo.JxZgxxVo; +import org.dromara.mechanical.jxzgbh.domain.JxZgxx; +import org.dromara.mechanical.jxzgbh.mapper.JxZgxxMapper; +import org.dromara.mechanical.jxzgbh.service.IJxZgxxService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 机械隐患整改信息Service业务层处理 + * + * @author Lion Li + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class JxZgxxServiceImpl extends ServiceImpl implements IJxZgxxService { + + private final JxZgxxMapper baseMapper; + + /** + * 查询机械隐患整改信息 + * + * @param id 主键 + * @return 机械隐患整改信息 + */ + @Override + public JxZgxxVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询机械隐患整改信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 机械隐患整改信息分页列表 + */ + @Override + public TableDataInfo queryPageList(JxZgxxBo 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(JxZgxxBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(JxZgxxBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(JxZgxx::getId); + lqw.eq(bo.getMasterId() != null, JxZgxx::getMasterId, bo.getMasterId()); + lqw.eq(bo.getAbarbeitung() != null, JxZgxx::getAbarbeitung, bo.getAbarbeitung()); + lqw.eq(bo.getAbarbeitungKsdate() != null, JxZgxx::getAbarbeitungKsdate, bo.getAbarbeitungKsdate()); + lqw.eq(bo.getAbarbeitungJsdate() != null, JxZgxx::getAbarbeitungJsdate, bo.getAbarbeitungJsdate()); + lqw.eq(StringUtils.isNotBlank(bo.getAbarbeitungMeasure()), JxZgxx::getAbarbeitungMeasure, bo.getAbarbeitungMeasure()); + lqw.eq(StringUtils.isNotBlank(bo.getAbarbeitungAccomplish()), JxZgxx::getAbarbeitungAccomplish, bo.getAbarbeitungAccomplish()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), JxZgxx::getFileId, bo.getFileId()); + return lqw; + } + + /** + * 新增机械隐患整改信息 + * + * @param bo 机械隐患整改信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(JxZgxxBo bo) { + JxZgxx add = MapstructUtils.convert(bo, JxZgxx.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改机械隐患整改信息 + * + * @param bo 机械隐患整改信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(JxZgxxBo bo) { + JxZgxx update = MapstructUtils.convert(bo, JxZgxx.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(JxZgxx 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/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/message/controller/MsgConfigController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/message/controller/MsgConfigController.java index 373d5204..c4b08f44 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/message/controller/MsgConfigController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/message/controller/MsgConfigController.java @@ -1,37 +1,28 @@ package org.dromara.message.controller; -import java.util.List; -import java.util.Objects; - -import cn.hutool.core.bean.BeanUtil; -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.message.domain.bo.MsgConfigAddReq; -import org.dromara.message.domain.bo.MsgConfigEditReq; -import org.dromara.system.domain.bo.SysDeptBo; -import org.dromara.system.domain.vo.SysDeptVo; -import org.dromara.system.domain.vo.SysUserVo; -import org.dromara.system.service.ISysDeptService; -import org.dromara.system.service.ISysUserService; -import org.springframework.boot.actuate.beans.BeansEndpoint; -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 cn.hutool.core.bean.BeanUtil; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; 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.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; -import org.dromara.common.excel.utils.ExcelUtil; -import org.dromara.message.domain.vo.MsgConfigVo; -import org.dromara.message.domain.bo.MsgConfigBo; -import org.dromara.message.service.IMsgConfigService; +import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.message.domain.bo.MsgConfigAddReq; +import org.dromara.message.domain.bo.MsgConfigBo; +import org.dromara.message.domain.bo.MsgConfigEditReq; +import org.dromara.message.domain.vo.MsgConfigVo; +import org.dromara.message.service.IMsgConfigService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; /** * 消息配置 @@ -46,21 +37,6 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; public class MsgConfigController extends BaseController { private final IMsgConfigService msgConfigService; - private final ISysUserService userService; - private final ISysDeptService deptService; - - /** - * 获取当前用户所在上级部门ID - */ - @SaCheckPermission("message:config:allUsersOfTheDepartment") - @GetMapping("/allUsersOfTheDepartment") - public R allUsersOfTheDepartment() { - //获取当前用户的上级部门 - Long deptId = Objects.requireNonNull(LoginHelper.getLoginUser()).getDeptId(); - SysDeptBo bm = deptService.selectDeptByIdBo(deptId); - //从顶级往下推两个部门 - return R.ok(bm); - } /** * 查询消息配置列表 @@ -79,7 +55,7 @@ public class MsgConfigController extends BaseController { @SaCheckPermission("message:config:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") - @PathVariable Long id) { + @PathVariable Long id) { return R.ok(msgConfigService.queryById(id)); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/controller/OthYs7DeviceController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/controller/OthYs7DeviceController.java index f8ef5fdb..cdfedce0 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/controller/OthYs7DeviceController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/controller/OthYs7DeviceController.java @@ -9,6 +9,7 @@ import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.domain.R; +import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.validate.EditGroup; import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -18,9 +19,20 @@ import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; import org.dromara.manager.ys7manager.Ys7Manager; +import org.dromara.manager.ys7manager.dto.DeviceLocalVideoRequstDto; +import org.dromara.manager.ys7manager.vo.DeviceLocalVideoRecordsVo; import org.dromara.other.domain.dto.ys7device.*; +import org.dromara.other.domain.dto.ys7deviceimg.AddViolattionRecordReq; +import org.dromara.other.domain.dto.ys7deviceimg.OthYs7DeviceImgCaptureReq; +import org.dromara.other.domain.dto.ys7deviceimg.OthYs7DeviceImgQueryReq; +import org.dromara.other.domain.vo.ys7device.DateAndDeviceLocalVideoVo; import org.dromara.other.domain.vo.ys7device.OthYs7DeviceVo; +import org.dromara.other.domain.vo.ys7deviceimg.OthYs7DeviceImgVo; +import org.dromara.other.service.IOthYs7DeviceImgService; import org.dromara.other.service.IOthYs7DeviceService; +import org.dromara.safety.domain.vo.violationrecord.HseViolationRecordVo; +import org.dromara.safety.service.IHseViolationRecordService; +import org.springframework.context.annotation.Lazy; import org.springframework.http.HttpHeaders; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; @@ -47,6 +59,73 @@ public class OthYs7DeviceController extends BaseController { @Resource private Ys7Manager ys7Manager; + @Resource + private IOthYs7DeviceImgService othYs7DeviceImgService; + @Lazy + @Resource + private IHseViolationRecordService hseViolationRecordService; + + /** + * 获取违规记录详细信息 + * + * @param id 主键 + */ +// @SaCheckPermission("other:ys7Device:list") +// @GetMapping("/getViolationRecordInfo/{id}") +// public R getViolationRecordInfo(@NotNull(message = "主键不能为空") +// @PathVariable Long id) { +// return R.ok(hseViolationRecordService.queryById(id)); +// } + + + /** + * 萤石摄像头图片抓图 + */ + @SaCheckPermission("other:ys7Device:list") + @Log(title = "萤石摄像头图片", businessType = BusinessType.INSERT) + @PostMapping("/capture") + public R capture(@RequestBody OthYs7DeviceImgCaptureReq req) { + return toAjax(othYs7DeviceImgService.capturePic(req)); + } + /** + * 萤石摄像头图片识别 + */ +// @SaCheckPermission("other:ys7Device:list") +// @Log(title = "萤石摄像头图片", businessType = BusinessType.INSERT) +// @PostMapping("/discernImg") +// public R discernImg(@RequestBody OthYs7DeviceImgCaptureReq req) { +// return toAjax(othYs7DeviceImgService.discernImg(req)); +// } + + /** + * 下发工单 + */ +// @SaCheckPermission("other:ys7Device:list") +// @Log(title = "萤石摄像头图片", businessType = BusinessType.INSERT) +// @PostMapping("/addViolationRecord") +// public R addViolationRecord(@RequestBody AddViolattionRecordReq req) { +// return toAjax(othYs7DeviceImgService.addViolationRecord(req)); +// } + /** + * 查询萤石摄像头图片列表 + */ + @SaCheckPermission("other:ys7Device:list") + @GetMapping("/getImgList") + public TableDataInfo list(OthYs7DeviceImgQueryReq req, PageQuery pageQuery) { + return othYs7DeviceImgService.queryPageList(req, pageQuery); + } + /** + * 删除萤石摄像头图片 + * + * @param ids 主键串 + */ + @SaCheckPermission("other:ys7Device:remove") + @Log(title = "萤石摄像头图片", businessType = BusinessType.DELETE) + @DeleteMapping("/img/{ids}") + public R imgRemove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(othYs7DeviceImgService.deleteWithValidByIds(List.of(ids))); + } /** * 查询萤石摄像头列表 @@ -160,4 +239,50 @@ public class OthYs7DeviceController extends BaseController { return ResponseEntity.ok(JSONUtil.toJsonStr(result)); } + + /** + * 获取回放录像播放地址 + * @return + */ + @GetMapping("/getPlayBackUrl") + public R getPlayBackUrl(OthYs7DevicePlayBackUrlReq req){ + if (req.getDeviceSerial() == null){ + throw new ServiceException("设备序列号不能为空!!!"); + } + if (req.getStartTime() == null || req.getEndTime() == null){ + throw new ServiceException("开始时间和结束时间不能为空!!!"); + } + return R.ok(othYs7DeviceService.getPlayBackUrl(req)); + } + + /** + * 查询设备本地录像 + * @return + */ + @GetMapping("/getDeviceLocalVideo") + public R> getDeviceLocalVideo(OthYs7DevicePlayBackUrlReq req){ + if (req.getDeviceSerial() == null){ + throw new ServiceException("设备序列号不能为空!!!"); + } + if (req.getStartTime() == null || req.getEndTime() == null){ + throw new ServiceException("开始时间和结束时间不能为空!!!"); + } + return R.ok(othYs7DeviceService.getDeviceLocalVideo(req)); + } + + /** + * 查询范围日期和设备本地录像列表 + * @return + */ + @GetMapping("/getDateAndDeviceLocalVideo") + public R getDateAndDeviceLocalVideo(OthYs7DevicePlayBackUrlReq req){ + if (req.getDeviceSerial() == null){ + throw new ServiceException("设备序列号不能为空!!!"); + } + if (req.getStartTime() == null || req.getEndTime() == null){ + throw new ServiceException("开始时间和结束时间不能为空!!!"); + } + return R.ok(othYs7DeviceService.getDateAndDeviceLocalVideo(req)); + } + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/OthYs7DeviceImg.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/OthYs7DeviceImg.java index 4f193d10..d9085ca5 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/OthYs7DeviceImg.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/OthYs7DeviceImg.java @@ -72,6 +72,12 @@ public class OthYs7DeviceImg implements Serializable { */ private String recognizeUrl; + + /** + * 图片状态(0、未识别,1、已识别未违规,2、已识别有违规,3、已下发工单) + */ + private String imgStatus; + /** * 备注 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7device/OthYs7DevicePlayBackUrlReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7device/OthYs7DevicePlayBackUrlReq.java new file mode 100644 index 00000000..eaeda4a1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7device/OthYs7DevicePlayBackUrlReq.java @@ -0,0 +1,31 @@ +package org.dromara.other.domain.dto.ys7device; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author lilemy + * @date 2025/6/13 10:19 + */ +@Data +public class OthYs7DevicePlayBackUrlReq implements Serializable { + + /** + * 设备序列号 + */ + private String deviceSerial; + + /** + * 开始时间 + */ + private String startTime; + + /** + * 结束时间 + */ + private String endTime; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7deviceimg/AddViolattionRecordReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7deviceimg/AddViolattionRecordReq.java new file mode 100644 index 00000000..a64567ee --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7deviceimg/AddViolattionRecordReq.java @@ -0,0 +1,36 @@ +package org.dromara.other.domain.dto.ys7deviceimg; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author lilemy + * @date 2025-10-10 19:14 + */ +@Data +public class AddViolattionRecordReq implements Serializable { + + + /** + * 项目id + */ + @NotNull(message = "图片id不能为空") + private Long projectId; + + + /** + * 设备序列号 + */ + @NotBlank(message = "设备序列号不能为空") + private String deviceSerial; + /** + * 图片id + */ + @NotNull(message = "图片id不能为空") + private Long originalUrlId; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7deviceimg/OthYs7DeviceImgCaptureReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7deviceimg/OthYs7DeviceImgCaptureReq.java index 69bdb7e9..bf01a9b8 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7deviceimg/OthYs7DeviceImgCaptureReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/dto/ys7deviceimg/OthYs7DeviceImgCaptureReq.java @@ -21,4 +21,8 @@ public class OthYs7DeviceImgCaptureReq implements Serializable { */ @NotBlank(message = "设备序列号不能为空") private String deviceSerial; + /** + * 图片id + */ + private Long imgId; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/vo/ys7device/DateAndDeviceLocalVideoVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/vo/ys7device/DateAndDeviceLocalVideoVo.java new file mode 100644 index 00000000..e8e9e25f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/vo/ys7device/DateAndDeviceLocalVideoVo.java @@ -0,0 +1,29 @@ +package org.dromara.other.domain.vo.ys7device; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.manager.ys7manager.vo.DeviceLocalVideoRecordsVo; +import org.dromara.other.domain.OthYs7Device; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +/** + * 查询范围日期和设备本地录像列表 + */ +@Data +public class DateAndDeviceLocalVideoVo implements Serializable { + + private List dateList; + + private List deviceList; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/vo/ys7deviceimg/OthYs7DeviceImgVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/vo/ys7deviceimg/OthYs7DeviceImgVo.java index 9ebb39d6..772ce1ea 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/vo/ys7deviceimg/OthYs7DeviceImgVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/domain/vo/ys7deviceimg/OthYs7DeviceImgVo.java @@ -55,6 +55,11 @@ public class OthYs7DeviceImgVo implements Serializable { @ExcelProperty(value = "图片地址") private String url; + /** + * 识别结果图片地址 + */ + private String recognizeUrl; + /** * 识别算法模型 */ @@ -77,4 +82,9 @@ public class OthYs7DeviceImgVo implements Serializable { @ExcelProperty(value = "创建时间") private Date createTime; + /** + * 图片状态(0、未识别,1、已识别,2、已下发工单) + */ + private String imgStatus; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/IOthYs7DeviceImgService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/IOthYs7DeviceImgService.java index 70ffcc30..e49b07b0 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/IOthYs7DeviceImgService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/IOthYs7DeviceImgService.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.other.domain.OthYs7DeviceImg; +import org.dromara.other.domain.dto.ys7deviceimg.AddViolattionRecordReq; import org.dromara.other.domain.dto.ys7deviceimg.OthYs7DeviceImgCaptureReq; import org.dromara.other.domain.dto.ys7deviceimg.OthYs7DeviceImgCreateByCapture; import org.dromara.other.domain.dto.ys7deviceimg.OthYs7DeviceImgQueryReq; @@ -102,4 +103,25 @@ public interface IOthYs7DeviceImgService extends IService { * @return 是否抓拍成功 */ Boolean capturePic(OthYs7DeviceImgCaptureReq req); + + /** + * 手动抓拍(不需要识别) + * @param req + * @return + */ + int addHMCapturePic(OthYs7DeviceImgCaptureReq req); + + /** + * 识别抓拍图片 + * @param req + * @return + */ + int discernImg(OthYs7DeviceImgCaptureReq req); + + /** + * 手动下发安全工单 + * @param req + * @return + */ + int addViolationRecord(AddViolattionRecordReq req); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/IOthYs7DeviceService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/IOthYs7DeviceService.java index 5997d7a8..fbeb8637 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/IOthYs7DeviceService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/IOthYs7DeviceService.java @@ -5,9 +5,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.manager.ys7manager.vo.DeviceLocalVideoRecordsVo; import org.dromara.manager.ys7manager.vo.Ys7QueryDeviceResponseVo; import org.dromara.other.domain.OthYs7Device; import org.dromara.other.domain.dto.ys7device.*; +import org.dromara.other.domain.vo.ys7device.DateAndDeviceLocalVideoVo; import org.dromara.other.domain.vo.ys7device.OthYs7DeviceVo; import java.util.Collection; @@ -143,4 +145,24 @@ public interface IOthYs7DeviceService extends IService { */ void webhook(WebhookMessage receiveMessage); + /** + * 获取回放录像播放地址 + * @param req + * @return + */ + String getPlayBackUrl(OthYs7DevicePlayBackUrlReq req); + + /** + * 查询设备本地录像 + * @param req + * @return + */ + List getDeviceLocalVideo(OthYs7DevicePlayBackUrlReq req); + + /** + * 查询范围日期和设备本地录像列表 + * @param req + * @return + */ + DateAndDeviceLocalVideoVo getDateAndDeviceLocalVideo(OthYs7DevicePlayBackUrlReq req); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/impl/OthYs7DeviceImgServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/impl/OthYs7DeviceImgServiceImpl.java index ca5e65a7..96912960 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/impl/OthYs7DeviceImgServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/impl/OthYs7DeviceImgServiceImpl.java @@ -24,6 +24,7 @@ import org.dromara.manager.ys7manager.Ys7Manager; import org.dromara.other.constant.Ys7DeviceImgConstant; import org.dromara.other.domain.OthYs7Device; import org.dromara.other.domain.OthYs7DeviceImg; +import org.dromara.other.domain.dto.ys7deviceimg.AddViolattionRecordReq; import org.dromara.other.domain.dto.ys7deviceimg.OthYs7DeviceImgCaptureReq; import org.dromara.other.domain.dto.ys7deviceimg.OthYs7DeviceImgCreateByCapture; import org.dromara.other.domain.dto.ys7deviceimg.OthYs7DeviceImgQueryReq; @@ -31,14 +32,18 @@ import org.dromara.other.domain.vo.ys7deviceimg.OthYs7DeviceImgVo; import org.dromara.other.mapper.OthYs7DeviceImgMapper; import org.dromara.other.service.IOthYs7DeviceImgService; import org.dromara.other.service.IOthYs7DeviceService; +import org.dromara.safety.domain.HseRecognizeRecord; import org.dromara.safety.domain.HseViolationLevel; import org.dromara.safety.domain.dto.recognizerecord.HseRecognizeRecordCreateDto; +import org.dromara.safety.domain.dto.violationrecord.HseViolationRecordCreateDto; import org.dromara.safety.domain.enums.HseRecordCategoryEnum; import org.dromara.safety.service.IHseRecognizeRecordService; import org.dromara.safety.service.IHseViolationLevelService; +import org.dromara.safety.service.IHseViolationRecordService; import org.dromara.system.domain.vo.SysOssUploadVo; import org.dromara.system.service.ISysOssService; import org.springframework.beans.BeanUtils; +import org.springframework.context.annotation.Lazy; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -79,6 +84,10 @@ public class OthYs7DeviceImgServiceImpl extends ServiceImpl levelList = violationLevelService.lambdaQuery() + .eq(HseViolationLevel::getProjectId, img.getProjectId()) + .list(); + Map> level = new HashMap<>(); + if (CollUtil.isNotEmpty(levelList)) { + Map> levelMap = levelList.stream() + .collect(Collectors.groupingBy(HseViolationLevel::getProjectId)); + for (Map.Entry> entry : levelMap.entrySet()) { + List recognizerTypeEnums = entry.getValue().stream().map(l -> { + List levels = StringUtils.splitList(l.getViolationType()); + return RecognizerTypeEnum.listFromCodes(levels); + }).filter(CollUtil::isNotEmpty) + .flatMap(Collection::stream) + .distinct() + .toList(); + level.put(entry.getKey(), recognizerTypeEnums); + } + } + if (CollUtil.isEmpty(level)) { + log.error("未设置安全等级"); + } + // 将抓取的图片进行识别 + List recTypes = new ArrayList<>(); + if (CollUtil.isNotEmpty(level)) { + recTypes = level.get(img.getProjectId()); + } + if (CollUtil.isEmpty(recTypes)) { + log.error("项目:{},未设置安全等级", img.getProjectId()); + throw new ServiceException("项目未设置安全等级无法识别,请设置安全等级之后再进行识别"); + } + RecognizeVo recognizeVo = null; + try { + recognizeVo = recognizerManager.recognize(img.getUrl(), recTypes); + } catch (Exception e) { + log.error("图片识别异常", e); + } + if (recognizeVo != null && recognizeVo.getHasTarget().equals(RecognizerHasTargetEnum.YES.getValue())) { + // 记录识别信息 + HseRecognizeRecord record = new HseRecognizeRecord(); + record.setOriginalPicture(img.getUrl()); + record.setOriginalUrlId(img.getId()); + record.setCreateTime(new Date()); + List targets = recognizeVo.getTargets(); + img.setTargets(JSONUtil.toJsonStr(targets)); + img.setImgSize(JSONUtil.toJsonStr(recognizeVo.getOriginalImgSize())); + img.setIsRecognize(RecognizerHasTargetEnum.YES.getValue()); + List recTypeList = targets.stream().map(RecognizeTargetVo::getType).distinct().toList(); + img.setRecType(JSONUtil.toJsonStr(recTypeList)); + String targetUrl = null; + try { + RecognizeImageStreamResult imageStreamResult = RecognizerManager.drawImageToStream(img.getUrl(), targets); + InputStream inputStream = imageStreamResult.getInputStream(); + String contentType = imageStreamResult.getContentType(); + String originalFilename = extractFilename(img.getUrl()); + long length = imageStreamResult.getLength(); + String targetImgPath = Ys7DeviceImgConstant.getTargetImgOssPath(originalFilename, img.getDeviceSerial()); + SysOssUploadVo drawImageUploadVo = ossService.uploadFileUrlWithNoSave(inputStream, targetImgPath, contentType, length); + targetUrl = drawImageUploadVo.getUrl(); + if (StringUtils.isNotBlank(targetUrl)) { + img.setRecognizeUrl(targetUrl); + } + } catch (Exception e) { + log.error("图片绘制失败", e); + } + List codeList = targets.stream() + .map(RecognizeTargetVo::getType).distinct() + .map(RecognizerTypeEnum::fromValue).filter(Objects::nonNull) + .map(RecognizerTypeEnum::getCode).filter(Objects::nonNull) + .toList(); + String codeStr = String.join(",", codeList); + record.setViolationType(codeStr); + record.setNum(targets.size()); + record.setDeviceSerial(img.getDeviceSerial()); + record.setDeviceName(img.getDeviceName()); + record.setPicture(targetUrl); + record.setOriginalPicture(img.getUrl()); + record.setRecordCategory(HseRecordCategoryEnum.MONITOR.getValue()); + record.setProjectId(img.getProjectId()); + // 保存识别记录 + boolean result = recognizeRecordService.save(record); + if (!result) { + throw new ServiceException("保存识别记录失败"); + } + } + img.setImgStatus(recognizeVo.getHasTarget().equals(RecognizerHasTargetEnum.YES.getValue()) ? "2" : "1"); + img.setUpdateTime(new Date()); + + return baseMapper.updateById(img); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int addViolationRecord(AddViolattionRecordReq req) { + HseRecognizeRecord recognizeRecord = recognizeRecordService.getBaseMapper().selectOne(new LambdaQueryWrapper() + .eq(HseRecognizeRecord::getDeviceSerial, req.getDeviceSerial()) + .eq(HseRecognizeRecord::getProjectId, req.getProjectId()) + .eq(HseRecognizeRecord::getOriginalUrlId, req.getOriginalUrlId())); + if (recognizeRecord == null) { + throw new ServiceException("找不到识别记录!"); + } + List violationRecordList = new ArrayList<>(); + + String violationType = recognizeRecord.getViolationType(); + if (StringUtils.isNotBlank(violationType)) { + List list = StringUtils.splitList(violationType); + for (String s : list) { + if (recognizeRecord.getProjectId() != null) { + HseViolationRecordCreateDto violationRecord = new HseViolationRecordCreateDto(); + violationRecord.setProjectId(recognizeRecord.getProjectId()); + violationRecord.setRecognizeId(recognizeRecord.getId()); + violationRecord.setViolationType(s); + violationRecord.setViolationTime(recognizeRecord.getCreateTime()); + violationRecordList.add(violationRecord); + } + } + } + if (CollUtil.isNotEmpty(violationRecordList)) { + violationRecordService.insertByMonitor(violationRecordList); + } + OthYs7DeviceImg img = baseMapper.selectById(req.getOriginalUrlId()); + if (img != null) { + img.setImgStatus("3"); + return baseMapper.updateById(img); + } + return 1; + } + /** * 提取文件名 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/impl/OthYs7DeviceServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/impl/OthYs7DeviceServiceImpl.java index dd7ca865..ff26b69b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/impl/OthYs7DeviceServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/service/impl/OthYs7DeviceServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jakarta.annotation.Resource; @@ -16,15 +17,21 @@ import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.manager.ys7manager.Ys7Constant; import org.dromara.manager.ys7manager.Ys7Manager; +import org.dromara.manager.ys7manager.Ys7RequestUtils; +import org.dromara.manager.ys7manager.dto.DeviceLocalVideoRequstDto; +import org.dromara.manager.ys7manager.dto.DevicePlayBackUrlRequstDto; import org.dromara.manager.ys7manager.enums.DeviceOnOffLineEnum; +import org.dromara.manager.ys7manager.vo.DeviceLocalVideoRecordsVo; import org.dromara.manager.ys7manager.vo.Ys7QueryDeviceResponseVo; import org.dromara.other.domain.OthYs7Device; import org.dromara.other.domain.dto.ys7device.*; import org.dromara.other.domain.enums.OthDeviceStatusEnum; import org.dromara.other.domain.enums.OthVideoEncryptedEnum; +import org.dromara.other.domain.vo.ys7device.DateAndDeviceLocalVideoVo; import org.dromara.other.domain.vo.ys7device.OthYs7DeviceVo; import org.dromara.other.mapper.OthYs7DeviceMapper; import org.dromara.other.service.IOthYs7DeviceService; +import org.dromara.other.utils.DateRangeUtils; import org.dromara.project.domain.BusProject; import org.dromara.project.service.IBusProjectService; import org.springframework.beans.BeanUtils; @@ -433,6 +440,53 @@ public class OthYs7DeviceServiceImpl extends ServiceImpl getDeviceLocalVideo(OthYs7DevicePlayBackUrlReq req) { + String token = ys7Manager.getToken(); + DeviceLocalVideoRequstDto dto = new DeviceLocalVideoRequstDto(); + dto.setAccessToken(token); + dto.setDeviceSerial(req.getDeviceSerial()); + dto.setStartTime(req.getStartTime()); + dto.setEndTime(req.getEndTime()); + return Ys7RequestUtils.getDeviceLocalVideo(dto); + } + + /** + * 查询范围日期和设备本地录像列表 + * @param req + * @return + */ + @Override + public DateAndDeviceLocalVideoVo getDateAndDeviceLocalVideo(OthYs7DevicePlayBackUrlReq req) { + DateAndDeviceLocalVideoVo vo = new DateAndDeviceLocalVideoVo(); + List dateList = DateRangeUtils.getDatesBetweenStrings(req.getStartTime(), req.getEndTime()); + vo.setDateList(dateList); + if (CollectionUtils.isNotEmpty(dateList) && dateList.size() > 1) { + String first = dateList.getFirst(); + req.setStartTime(first+" 00:00:00"); + req.setEndTime(first+" 23:59:59"); + } + List deviceLocalVideo = getDeviceLocalVideo(req); + vo.setDeviceList(deviceLocalVideo); + return vo; + } + /** * 验证萤石摄像对象是否发生更改 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/utils/DateRangeUtils.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/utils/DateRangeUtils.java new file mode 100644 index 00000000..c4fce995 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/other/utils/DateRangeUtils.java @@ -0,0 +1,166 @@ +package org.dromara.other.utils; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.StrUtil; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.TimeZone; + +/** + * 日期范围工具类 + */ +public class DateRangeUtils { + + // 默认时区(东八区) + private static final TimeZone DEFAULT_TIME_ZONE = TimeZone.getTimeZone("GMT+8"); + + // 日期格式 + private static final String DATE_FORMAT = "yyyy-MM-dd"; + + // 完整日期时间格式 + private static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss"; + + /** + * 获取两个时间戳之间的所有日期(包含起止日期) + * @param startTimestamp 开始时间戳(秒级/毫秒级字符串或数字) + * @param endTimestamp 结束时间戳(秒级/毫秒级字符串或数字) + * @return 日期列表(格式:yyyy-MM-dd) + */ + public static List getDatesBetweenTimestamps(Object startTimestamp, Object endTimestamp) { + // 转换为毫秒级时间戳 + long start = convertToMilliseconds(startTimestamp); + long end = convertToMilliseconds(endTimestamp); + + return getDatesBetweenDates(new Date(start), new Date(end)); + } + + /** + * 获取两个日期之间的所有日期(包含起止日期) + * @param startDate 开始日期 + * @param endDate 结束日期 + * @return 日期列表(格式:yyyy-MM-dd) + */ + public static List getDatesBetweenDates(Date startDate, Date endDate) { + List dates = new ArrayList<>(); + Calendar calendar = Calendar.getInstance(DEFAULT_TIME_ZONE); + + // 设置开始日期 + calendar.setTime(startDate); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + + // 循环添加日期直到结束日期 + while (!calendar.getTime().after(endDate)) { + dates.add(DateUtil.format(calendar.getTime(), DATE_FORMAT)); + + // 日期加1天 + calendar.add(Calendar.DAY_OF_MONTH, 1); + } + + return dates; + } + + /** + * 获取两个日期字符串之间的所有日期 + * @param startDateStr 开始日期(yyyy-MM-dd 或 yyyy-MM-dd HH:mm:ss) + * @param endDateStr 结束日期(yyyy-MM-dd 或 yyyy-MM-dd HH:mm:ss) + * @return 日期列表 + */ + public static List getDatesBetweenStrings(String startDateStr, String endDateStr) { + Date startDate = parseDateString(startDateStr); + Date endDate = parseDateString(endDateStr); + + return getDatesBetweenDates(startDate, endDate); + } + + /** + * 将时间戳转换为日期(yyyy-MM-dd) + */ + public static String timestampToDate(Object timestamp) { + long time = convertToMilliseconds(timestamp); + return DateUtil.format(new Date(time), DATE_FORMAT); + } + + /** + * 解析日期字符串为Date对象 + */ + private static Date parseDateString(String dateStr) { + try { + if (dateStr.contains(" ")) { + SimpleDateFormat sdf = new SimpleDateFormat(DATETIME_FORMAT); + sdf.setTimeZone(DEFAULT_TIME_ZONE); + return sdf.parse(dateStr); + } else { + SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT); + sdf.setTimeZone(DEFAULT_TIME_ZONE); + return sdf.parse(dateStr); + } + } catch (ParseException e) { + throw new IllegalArgumentException("日期格式错误:" + dateStr); + } + } + + /** + * 将各种时间戳格式转换为毫秒级时间戳 + */ + private static long convertToMilliseconds(Object timestamp) { + if (timestamp == null) { + throw new IllegalArgumentException("时间戳不能为空"); + } + + String timestampStr = timestamp.toString().trim(); + if (StrUtil.isBlank(timestampStr)) { + throw new IllegalArgumentException("时间戳不能为空"); + } + + try { + long time = Long.parseLong(timestampStr); + + // 10位秒级时间戳转为13位毫秒级 + if (timestampStr.length() == 10) { + time *= 1000; + } + + return time; + } catch (NumberFormatException e) { + throw new IllegalArgumentException("时间戳格式错误:" + timestampStr); + } + } + + /** + * 获取指定日期的开始时间戳(当天00:00:00) + */ + public static long getStartOfDayTimestamp(Object timestamp) { + long time = convertToMilliseconds(timestamp); + Calendar calendar = Calendar.getInstance(DEFAULT_TIME_ZONE); + calendar.setTime(new Date(time)); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + + return calendar.getTimeInMillis() / 1000; // 返回秒级时间戳 + } + + /** + * 获取指定日期的结束时间戳(当天23:59:59) + */ + public static long getEndOfDayTimestamp(Object timestamp) { + long time = convertToMilliseconds(timestamp); + Calendar calendar = Calendar.getInstance(DEFAULT_TIME_ZONE); + calendar.setTime(new Date(time)); + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + calendar.set(Calendar.MILLISECOND, 999); + + return calendar.getTimeInMillis() / 1000; // 返回秒级时间戳 + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutConstructionValueController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutConstructionValueController.java index 49f40944..eebc97b8 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutConstructionValueController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutConstructionValueController.java @@ -8,7 +8,6 @@ import lombok.RequiredArgsConstructor; 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.excel.utils.ExcelUtil; import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; @@ -18,7 +17,8 @@ import org.dromara.common.web.core.BaseController; import org.dromara.out.domain.bo.OutConstructionValueBo; import org.dromara.out.domain.bo.OutConstructionValueFacilityReq; import org.dromara.out.domain.vo.OutConstructionAllValueVo; -import org.dromara.out.domain.vo.OutConstructionValueVo; +import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueTotalVo; +import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueVo; import org.dromara.out.service.IOutConstructionValueService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -49,14 +49,23 @@ public class OutConstructionValueController extends BaseController { } /** - * 导出施工产值列表 + * 查询施工产值合计列表 + */ + @SaCheckPermission("out:constructionValue:list") + @GetMapping("/totalList") + public R> totalList(OutConstructionValueBo bo) { + List list = outConstructionValueService.queryTotalList(bo); + return R.ok(list); + } + + /** + * 导出施工产值范围列表 */ @SaCheckPermission("out:constructionValue:export") @Log(title = "施工产值", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(OutConstructionValueBo bo, HttpServletResponse response) { - List list = outConstructionValueService.queryList(bo); - ExcelUtil.exportExcel(list, "施工产值", OutConstructionValueVo.class, response); + @PostMapping("/exportByProject") + public void exportByProject(OutConstructionValueBo bo, HttpServletResponse response) { + outConstructionValueService.exportExcel(bo, response); } /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutConstructionValueRangeController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutConstructionValueRangeController.java index dd525e75..8b965377 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutConstructionValueRangeController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutConstructionValueRangeController.java @@ -23,8 +23,8 @@ import org.dromara.out.domain.OutConstructionValue; import org.dromara.out.domain.OutConstructionValueRange; import org.dromara.out.domain.bo.OutConstructionValueRangeBo; import org.dromara.out.domain.vo.OutConstructionAllValueRangeVo; -import org.dromara.out.domain.vo.OutConstructionValueRangeVo; -import org.dromara.out.domain.vo.OutConstructionValueVo; +import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueVo; +import org.dromara.out.domain.vo.outconstructionvaluerange.OutConstructionValueRangeVo; import org.dromara.out.service.IOutConstructionValueRangeService; import org.dromara.out.service.IOutConstructionValueService; import org.springframework.beans.BeanUtils; @@ -114,6 +114,16 @@ public class OutConstructionValueRangeController extends BaseController { } } + /** + * 导出施工产值范围列表 + */ + @SaCheckPermission("out:constructionValueRange:export") + @Log(title = "施工产值范围", businessType = BusinessType.EXPORT) + @PostMapping("/exportByProject") + public void exportByProject(OutConstructionValueRangeBo bo, HttpServletResponse response) { + outConstructionValueRangeService.exportExcel(bo, response); + } + /** * 获取施工产值范围详细信息 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/bo/OutConstructionValueBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/bo/OutConstructionValueBo.java index adceed0f..a160cc15 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/bo/OutConstructionValueBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/bo/OutConstructionValueBo.java @@ -109,5 +109,9 @@ public class OutConstructionValueBo extends BaseEntity { */ private LocalDate endDate; + /** + * 项目类型 + */ + private String projectType; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueCategoryVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueCategoryVo.java new file mode 100644 index 00000000..98cec4b6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueCategoryVo.java @@ -0,0 +1,119 @@ +package org.dromara.out.domain.vo.outconstructionvalue; + +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDate; + +/** + * @author lilemy + * @date 2025-12-01 15:46 + */ +@Data +public class OutConstructionValueCategoryVo { + + /** + * 主键ID + */ + private Long id; + + /** + * 范围ID + */ + private Long rangeId; + + /** + * 项目ID + */ + private Long projectId; + + /** + * 方阵id + */ + private Long matrixId; + + /** + * 分项工程id + */ + private Long progressCategoryId; + + /** + * 分项工程名称 + */ + private String progressCategoryName; + + /** + * 计划详情id + */ + private Long detailId; + + /** + * 人工填报数量 + */ + private Integer artificialNum; + + /** + * 无人机识别数量 + */ + private Integer uavNum; + + /** + * 确认数量 + */ + private Integer confirmNum; + + /** + * 计划数量 + */ + private Integer planNum; + + /** + * 対乙产值 + */ + private BigDecimal outValue; + + /** + * 上报日期 + */ + private LocalDate reportDate; + + /** + * 计划日期 + */ + private LocalDate planDate; + + /** + * 对甲产值 + */ + private BigDecimal ownerValue; + + /** + * 方阵名称 + */ + private String matrixName; + + /** + * 类别名称 + */ + private String name; + + /** + * 计量方式(0无 1数量 2百分比) + */ + private String unitType; + + /** + * 计量单位 + */ + private String unit; + + /** + * 祖级列表 + */ + private String ancestors; + + /** + * 关联结构(1子项目 2方阵 3项目) + */ + private String relevancyStructure; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueMatrixVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueMatrixVo.java new file mode 100644 index 00000000..25f24a20 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueMatrixVo.java @@ -0,0 +1,88 @@ +package org.dromara.out.domain.vo.outconstructionvalue; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; + +import java.math.BigDecimal; + +/** + * @author lilemy + * @date 2025-12-01 10:09 + */ +@Data +@ExcelIgnoreUnannotated +public class OutConstructionValueMatrixVo { + + /** + * 项目名 + */ + @ExcelProperty(value = "项目") + private String projectName; + + /** + * 子项目名 + */ + @ExcelProperty(value = "子项") + private String subProjectName; + + /** + * 方阵名称 + */ + @ExcelProperty(value = "方阵") + private String matrixName; + + /** + * 分项工程名称 + */ + @ExcelProperty(value = "分部分项") + private String progressCategoryName; + + /** + * 计量方式(0无 1数量 2百分比) + */ + @ExcelProperty(value = "计量方式", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=无,1=数量,2=百分比") + private String unitType; + + /** + * 单位 + */ + @ExcelProperty(value = "单位") + private String unit; + + /** + * 数量 + */ + @ExcelProperty(value = "数量") + private BigDecimal number; + + /** + * 人工填报数量 + */ + private Integer artificialNum; + + /** + * 无人机识别数量 + */ + private Integer uavNum; + + /** + * 确认数量 + */ + private Integer confirmNum; + + /** + * 对甲产值 + */ + @ExcelProperty(value = "金额(对甲)") + private BigDecimal ownerValue; + + /** + * 产值 + */ + @ExcelProperty(value = "金额(对乙)") + private BigDecimal outValue; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueProjectVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueProjectVo.java new file mode 100644 index 00000000..23f53bd6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueProjectVo.java @@ -0,0 +1,76 @@ +package org.dromara.out.domain.vo.outconstructionvalue; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; + +import java.math.BigDecimal; + +/** + * @author lilemy + * @date 2025-12-01 10:08 + */ +@Data +@ExcelIgnoreUnannotated +public class OutConstructionValueProjectVo { + + /** + * 项目名 + */ + @ExcelProperty(value = "项目") + private String projectName; + + /** + * 分项工程名称 + */ + @ExcelProperty(value = "分部分项") + private String progressCategoryName; + + /** + * 计量方式(0无 1数量 2百分比) + */ + @ExcelProperty(value = "计量方式", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=无,1=数量,2=百分比") + private String unitType; + + /** + * 单位 + */ + @ExcelProperty(value = "单位") + private String unit; + + /** + * 数量 + */ + @ExcelProperty(value = "数量") + private BigDecimal number; + + /** + * 人工填报数量 + */ + private Integer artificialNum; + + /** + * 无人机识别数量 + */ + private Integer uavNum; + + /** + * 确认数量 + */ + private Integer confirmNum; + + /** + * 对甲产值 + */ + @ExcelProperty(value = "金额(对甲)") + private BigDecimal ownerValue; + + /** + * 产值 + */ + @ExcelProperty(value = "金额(对乙)") + private BigDecimal outValue; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueSubProjectVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueSubProjectVo.java new file mode 100644 index 00000000..9616edf7 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueSubProjectVo.java @@ -0,0 +1,82 @@ +package org.dromara.out.domain.vo.outconstructionvalue; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; + +import java.math.BigDecimal; + +/** + * @author lilemy + * @date 2025-12-01 10:08 + */ +@Data +@ExcelIgnoreUnannotated +public class OutConstructionValueSubProjectVo { + + /** + * 项目名 + */ + @ExcelProperty(value = "项目") + private String projectName; + + /** + * 子项目名 + */ + @ExcelProperty(value = "子项") + private String subProjectName; + + /** + * 分项工程名称 + */ + @ExcelProperty(value = "分部分项") + private String progressCategoryName; + + /** + * 计量方式(0无 1数量 2百分比) + */ + @ExcelProperty(value = "计量方式", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=无,1=数量,2=百分比") + private String unitType; + + /** + * 单位 + */ + @ExcelProperty(value = "单位") + private String unit; + + /** + * 数量 + */ + @ExcelProperty(value = "数量") + private BigDecimal number; + + /** + * 人工填报数量 + */ + private Integer artificialNum; + + /** + * 无人机识别数量 + */ + private Integer uavNum; + + /** + * 确认数量 + */ + private Integer confirmNum; + + /** + * 对甲产值 + */ + @ExcelProperty(value = "金额(对甲)") + private BigDecimal ownerValue; + + /** + * 产值 + */ + @ExcelProperty(value = "金额(对乙)") + private BigDecimal outValue; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueTotalVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueTotalVo.java new file mode 100644 index 00000000..70b25d58 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueTotalVo.java @@ -0,0 +1,73 @@ +package org.dromara.out.domain.vo.outconstructionvalue; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author lilemy + * @date 2025-12-03 11:24 + */ +@Data +public class OutConstructionValueTotalVo { + + /** + * 项目名 + */ + private String projectName; + + /** + * 子项目名 + */ + private String subProjectName; + + /** + * 方阵名称 + */ + private String matrixName; + + /** + * 分项工程名称 + */ + private String progressCategoryName; + + /** + * 计量方式(0无 1数量 2百分比) + */ + private String unitType; + + /** + * 单位 + */ + private String unit; + + /** + * 数量 + */ + private BigDecimal number; + + /** + * 人工填报数量 + */ + private Integer artificialNum; + + /** + * 无人机识别数量 + */ + private Integer uavNum; + + /** + * 确认数量 + */ + private Integer confirmNum; + + /** + * 对甲产值 + */ + private BigDecimal ownerValue; + + /** + * 产值 + */ + private BigDecimal outValue; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueVo.java similarity index 98% rename from xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueVo.java rename to xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueVo.java index bd9c2392..d4d55877 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvalue/OutConstructionValueVo.java @@ -1,4 +1,4 @@ -package org.dromara.out.domain.vo; +package org.dromara.out.domain.vo.outconstructionvalue; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeMatrixVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeMatrixVo.java new file mode 100644 index 00000000..0cf517b3 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeMatrixVo.java @@ -0,0 +1,73 @@ +package org.dromara.out.domain.vo.outconstructionvaluerange; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; + +import java.math.BigDecimal; + +/** + * @author lilemy + * @date 2025-12-01 11:31 + */ +@Data +@ExcelIgnoreUnannotated +public class OutConstructionValueRangeMatrixVo { + + /** + * 项目名 + */ + @ExcelProperty(value = "项目") + private String projectName; + + /** + * 子项目名 + */ + @ExcelProperty(value = "子项") + private String subProjectName; + + /** + * 方阵名称 + */ + @ExcelProperty(value = "方阵") + private String matrixName; + + /** + * 分项工程名称 + */ + @ExcelProperty(value = "分部分项") + private String progressCategoryName; + + /** + * 计量方式(0无 1数量 2百分比) + */ + @ExcelProperty(value = "计量方式", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=无,1=数量,2=百分比") + private String unitType; + + /** + * 单位 + */ + @ExcelProperty(value = "单位") + private String unit; + + /** + * 数量 + */ + @ExcelProperty(value = "数量") + private BigDecimal number; + + /** + * 对甲产值 + */ + @ExcelProperty(value = "金额(对甲)") + private BigDecimal ownerValue; + + /** + * 产值 + */ + @ExcelProperty(value = "金额(对乙)") + private BigDecimal outValue; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeProjectVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeProjectVo.java new file mode 100644 index 00000000..c559e578 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeProjectVo.java @@ -0,0 +1,61 @@ +package org.dromara.out.domain.vo.outconstructionvaluerange; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; + +import java.math.BigDecimal; + +/** + * @author lilemy + * @date 2025-12-01 11:30 + */ +@Data +@ExcelIgnoreUnannotated +public class OutConstructionValueRangeProjectVo { + + /** + * 项目名 + */ + @ExcelProperty(value = "项目") + private String projectName; + + /** + * 分项工程名称 + */ + @ExcelProperty(value = "分部分项") + private String progressCategoryName; + + /** + * 计量方式(0无 1数量 2百分比) + */ + @ExcelProperty(value = "计量方式", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=无,1=数量,2=百分比") + private String unitType; + + /** + * 单位 + */ + @ExcelProperty(value = "单位") + private String unit; + + /** + * 数量 + */ + @ExcelProperty(value = "数量") + private BigDecimal number; + + /** + * 对甲产值 + */ + @ExcelProperty(value = "金额(对甲)") + private BigDecimal ownerValue; + + /** + * 产值 + */ + @ExcelProperty(value = "金额(对乙)") + private BigDecimal outValue; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeSubProjectVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeSubProjectVo.java new file mode 100644 index 00000000..189e616e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeSubProjectVo.java @@ -0,0 +1,67 @@ +package org.dromara.out.domain.vo.outconstructionvaluerange; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; + +import java.math.BigDecimal; + +/** + * @author lilemy + * @date 2025-12-01 11:30 + */ +@Data +@ExcelIgnoreUnannotated +public class OutConstructionValueRangeSubProjectVo { + + /** + * 项目名 + */ + @ExcelProperty(value = "项目") + private String projectName; + + /** + * 子项目名 + */ + @ExcelProperty(value = "子项") + private String subProjectName; + + /** + * 分项工程名称 + */ + @ExcelProperty(value = "分部分项") + private String progressCategoryName; + + /** + * 计量方式(0无 1数量 2百分比) + */ + @ExcelProperty(value = "计量方式", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "0=无,1=数量,2=百分比") + private String unitType; + + /** + * 单位 + */ + @ExcelProperty(value = "单位") + private String unit; + + /** + * 数量 + */ + @ExcelProperty(value = "数量") + private BigDecimal number; + + /** + * 对甲产值 + */ + @ExcelProperty(value = "金额(对甲)") + private BigDecimal ownerValue; + + /** + * 产值 + */ + @ExcelProperty(value = "金额(对乙)") + private BigDecimal outValue; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueRangeVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeVo.java similarity index 93% rename from xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueRangeVo.java rename to xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeVo.java index a304b323..b9719c21 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionValueRangeVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/outconstructionvaluerange/OutConstructionValueRangeVo.java @@ -1,4 +1,4 @@ -package org.dromara.out.domain.vo; +package org.dromara.out.domain.vo.outconstructionvaluerange; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; @@ -7,6 +7,7 @@ import lombok.Data; import org.dromara.common.excel.annotation.ExcelDictFormat; import org.dromara.common.excel.convert.ExcelDictConvert; import org.dromara.out.domain.OutConstructionValueRange; +import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueVo; import java.io.Serial; import java.io.Serializable; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/mapper/OutConstructionValueMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/mapper/OutConstructionValueMapper.java index b92f97a1..1ddbcf2d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/mapper/OutConstructionValueMapper.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/mapper/OutConstructionValueMapper.java @@ -3,7 +3,7 @@ package org.dromara.out.mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.dromara.out.domain.OutConstructionValue; -import org.dromara.out.domain.vo.OutConstructionValueVo; +import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import java.math.BigDecimal; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/mapper/OutConstructionValueRangeMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/mapper/OutConstructionValueRangeMapper.java index 12ad8a56..930246db 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/mapper/OutConstructionValueRangeMapper.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/mapper/OutConstructionValueRangeMapper.java @@ -1,7 +1,7 @@ package org.dromara.out.mapper; import org.dromara.out.domain.OutConstructionValueRange; -import org.dromara.out.domain.vo.OutConstructionValueRangeVo; +import org.dromara.out.domain.vo.outconstructionvaluerange.OutConstructionValueRangeVo; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/IOutConstructionValueRangeService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/IOutConstructionValueRangeService.java index 721900d9..cfe97b2e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/IOutConstructionValueRangeService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/IOutConstructionValueRangeService.java @@ -1,12 +1,13 @@ package org.dromara.out.service; import com.baomidou.mybatisplus.extension.service.IService; +import jakarta.servlet.http.HttpServletResponse; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.out.domain.OutConstructionValueRange; import org.dromara.out.domain.bo.OutConstructionValueRangeBo; import org.dromara.out.domain.vo.OutConstructionAllValueRangeVo; -import org.dromara.out.domain.vo.OutConstructionValueRangeVo; +import org.dromara.out.domain.vo.outconstructionvaluerange.OutConstructionValueRangeVo; import java.util.Collection; import java.util.List; @@ -77,4 +78,12 @@ public interface IOutConstructionValueRangeService extends IService queryPageList(OutConstructionValueBo bo, PageQuery pageQuery); + /** + * 查询符合条件的施工产值列表 + * + * @param bo 查询条件 + * @return 施工产值列表 + */ + List queryTotalList(OutConstructionValueBo bo); + /** * 查询符合条件的施工产值列表 * @@ -110,4 +122,23 @@ public interface IOutConstructionValueService extends IService list); + + /** + * 导出数据 + * + * @param bo 查询条件 + * @param response 响应 + */ + void exportExcel(OutConstructionValueBo bo, HttpServletResponse response); + + /** + * 构建导出需要的数据 + * + * @param valueList 施工产值列表 + * @param valueCategoryList 进度类别列表 + * @param topList 顶层进度类别列表 + */ + void buildExportData(List valueList, + List valueCategoryList, + List topList); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueRangeServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueRangeServiceImpl.java index 31826829..9dcc7e13 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueRangeServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueRangeServiceImpl.java @@ -2,19 +2,27 @@ package org.dromara.out.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.domain.event.ProcessDeleteEvent; import org.dromara.common.core.domain.event.ProcessEvent; import org.dromara.common.core.domain.event.ProcessTaskEvent; import org.dromara.common.core.enums.BusinessStatusEnum; +import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.core.utils.file.FileUtils; +import org.dromara.common.excel.convert.ExcelBigNumberConvert; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.out.domain.OutConstructionValue; @@ -22,24 +30,35 @@ import org.dromara.out.domain.OutConstructionValueRange; import org.dromara.out.domain.bo.OutConstructionValueBo; import org.dromara.out.domain.bo.OutConstructionValueRangeBo; import org.dromara.out.domain.vo.OutConstructionAllValueRangeVo; -import org.dromara.out.domain.vo.OutConstructionValueRangeVo; +import org.dromara.out.domain.vo.outconstructionvalue.OutConstructionValueCategoryVo; +import org.dromara.out.domain.vo.outconstructionvaluerange.OutConstructionValueRangeMatrixVo; +import org.dromara.out.domain.vo.outconstructionvaluerange.OutConstructionValueRangeProjectVo; +import org.dromara.out.domain.vo.outconstructionvaluerange.OutConstructionValueRangeSubProjectVo; +import org.dromara.out.domain.vo.outconstructionvaluerange.OutConstructionValueRangeVo; import org.dromara.out.mapper.OutConstructionValueRangeMapper; import org.dromara.out.service.IOutConstructionValueRangeService; import org.dromara.out.service.IOutConstructionValueService; +import org.dromara.progress.domain.PgsProgressCategory; import org.dromara.progress.domain.PgsProgressPlanDetail; import org.dromara.progress.service.IPgsProgressPlanDetailService; +import org.dromara.project.domain.BusProject; +import org.dromara.project.service.IBusProjectService; import org.springframework.context.annotation.Lazy; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; -import java.time.format.DateTimeFormatter; +import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.DayOfWeek; import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; import java.time.temporal.WeekFields; import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; /** * 施工产值范围Service业务层处理 @@ -61,6 +80,9 @@ public class OutConstructionValueRangeServiceImpl extends ServiceImpl params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.orderByDesc(OutConstructionValueRange::getId); - lqw.eq(bo.getProjectId() != null, OutConstructionValueRange::getProjectId, bo.getProjectId()); + if (bo.getProjectId() != null) { + // 获取当前项目的子项目 + List projects = projectService.lambdaQuery() + .eq(BusProject::getPId, bo.getProjectId()) + .select(BusProject::getId) + .list(); + List list = new ArrayList<>(projects.stream().map(BusProject::getId).toList()); + list.add(bo.getProjectId()); + lqw.in(OutConstructionValueRange::getProjectId, list); + } // 日期范围过滤 if (bo.getStartDate() != null) { // 获取本周的星期一 @@ -219,6 +251,342 @@ public class OutConstructionValueRangeServiceImpl extends ServiceImpl projectList = projectService.lambdaQuery() + .eq(BusProject::getPId, projectId) + .list(); + projectList.add(project); + Map projectNameMap = projectList.stream() + .collect(Collectors.toMap(BusProject::getId, BusProject::getProjectName)); + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + List list = this.list(lqw); + if (CollUtil.isEmpty(list)) { + throw new ServiceException("无数据导出"); + } + // 根据周产值查询具体产值 + Set rangeIds = list.stream().map(OutConstructionValueRange::getId).collect(Collectors.toSet()); + List valueList = constructionValueService.lambdaQuery() + .in(OutConstructionValue::getRangeId, rangeIds) + .list(); + if (CollUtil.isEmpty(valueList)) { + throw new ServiceException("无数据导出"); + } + List valueCategoryList = new ArrayList<>(); + List topList = new ArrayList<>(); + constructionValueService.buildExportData(valueList, valueCategoryList, topList); + // 汇总数据 + List projectVoList = new ArrayList<>(); + List subProjectVoList = new ArrayList<>(); + List matrixVoList = new ArrayList<>(); + // 合计 + BigDecimal totalNumber = BigDecimal.ZERO; + BigDecimal totalOwnerValue = BigDecimal.ZERO; + BigDecimal totalOutValue = BigDecimal.ZERO; + + BigDecimal subTotalNumber = BigDecimal.ZERO; + BigDecimal subTotalOwnerValue = BigDecimal.ZERO; + BigDecimal subTotalOutValue = BigDecimal.ZERO; + + BigDecimal matrixTotalNumber = BigDecimal.ZERO; + BigDecimal matrixTotalOwnerValue = BigDecimal.ZERO; + BigDecimal matrixTotalOutValue = BigDecimal.ZERO; + // 根据名称+结构分类 + Map> topNameMap = + topList.stream().collect(Collectors.groupingBy(item -> item.getName() + "_" + item.getRelevancyStructure())); + for (Map.Entry> entry : topNameMap.entrySet()) { + String[] keys = entry.getKey().split("_"); + String name = keys[0]; + String structure = keys[1]; + List topNodes = entry.getValue(); + List topIds = topNodes.stream().map(PgsProgressCategory::getId).toList(); + // 找出全部子孙节点 + List children = findChildren(valueCategoryList, topIds); + // 子类按名称分组 + Map> childrenMap = + children.stream().collect(Collectors.groupingBy(OutConstructionValueCategoryVo::getName)); + for (Map.Entry> childrenEntry : childrenMap.entrySet()) { + String childName = childrenEntry.getKey(); + List childrenEntryValue = childrenEntry.getValue(); + // ======= 构建项目级数据 ======= + Summary summary = calculateSummary(childrenEntryValue); + OutConstructionValueRangeProjectVo projectVo = + buildProjectVo(project, name, childName, childrenEntryValue, summary); + projectVoList.add(projectVo); + totalNumber = totalNumber.add(summary.number); + totalOwnerValue = totalOwnerValue.add(summary.ownerValue); + totalOutValue = totalOutValue.add(summary.outValue); + // ======= 构建子项目级数据 ======= + if (structure.equals("1") || structure.equals("2")) { + Map> subMap = + childrenEntryValue.stream().collect(Collectors.groupingBy(OutConstructionValueCategoryVo::getProjectId)); + for (Map.Entry> subEntry : subMap.entrySet()) { + Summary subSummary = calculateSummary(subEntry.getValue()); + OutConstructionValueRangeSubProjectVo subVo = + buildSubProjectVo(project, name, childName, subEntry, projectNameMap, subSummary); + subProjectVoList.add(subVo); + subTotalNumber = subTotalNumber.add(subSummary.number); + subTotalOwnerValue = subTotalOwnerValue.add(subSummary.ownerValue); + subTotalOutValue = subTotalOutValue.add(subSummary.outValue); + } + } + // ======= 构建方阵级数据 ======= + if (structure.equals("2")) { + Map> matrixMap = + childrenEntryValue.stream().collect(Collectors.groupingBy(OutConstructionValueCategoryVo::getMatrixName)); + for (Map.Entry> matrixEntry : matrixMap.entrySet()) { + Summary matrixSummary = calculateSummary(matrixEntry.getValue()); + OutConstructionValueRangeMatrixVo matrixVo = + buildMatrixVo(project, name, childName, matrixEntry, projectNameMap, matrixSummary); + matrixVoList.add(matrixVo); + matrixTotalNumber = matrixTotalNumber.add(matrixSummary.number); + matrixTotalOwnerValue = matrixTotalOwnerValue.add(matrixSummary.ownerValue); + matrixTotalOutValue = matrixTotalOutValue.add(matrixSummary.outValue); + } + } + } + } + // 排序 + projectVoList.sort(Comparator.comparing(OutConstructionValueRangeProjectVo::getProgressCategoryName)); + subProjectVoList.sort(Comparator.comparing(OutConstructionValueRangeSubProjectVo::getSubProjectName) + .thenComparing(OutConstructionValueRangeSubProjectVo::getProgressCategoryName)); + matrixVoList.sort(Comparator.comparing(OutConstructionValueRangeMatrixVo::getSubProjectName) + .thenComparing(OutConstructionValueRangeMatrixVo::getMatrixName) + .thenComparing(OutConstructionValueRangeMatrixVo::getProgressCategoryName)); + // 填充合计 + OutConstructionValueRangeProjectVo rangeProjectVo = new OutConstructionValueRangeProjectVo(); + rangeProjectVo.setProjectName("合计"); + rangeProjectVo.setNumber(totalNumber); + rangeProjectVo.setOwnerValue(totalOwnerValue); + rangeProjectVo.setOutValue(totalOutValue); + projectVoList.add(rangeProjectVo); + OutConstructionValueRangeSubProjectVo rangeSubProjectVo = new OutConstructionValueRangeSubProjectVo(); + rangeSubProjectVo.setProjectName("合计"); + rangeSubProjectVo.setNumber(subTotalNumber); + rangeSubProjectVo.setOwnerValue(subTotalOwnerValue); + rangeSubProjectVo.setOutValue(subTotalOutValue); + subProjectVoList.add(rangeSubProjectVo); + OutConstructionValueRangeMatrixVo rangeMatrixVo = new OutConstructionValueRangeMatrixVo(); + rangeMatrixVo.setProjectName("合计"); + rangeMatrixVo.setNumber(matrixTotalNumber); + rangeMatrixVo.setOwnerValue(matrixTotalOwnerValue); + rangeMatrixVo.setOutValue(matrixTotalOutValue); + matrixVoList.add(rangeMatrixVo); + // 构建导出数据 + buildExportExcel(project.getProjectName(), response, projectVoList, subProjectVoList, matrixVoList); + } + + /** + * 查找子级 + * + * @param all 所有数据 + * @param topIds 顶级ID + * @return 子级 + */ + private List findChildren( + List all, + List topIds) { + return all.stream() + .filter(item -> { + String ancestors = item.getAncestors(); + if (ancestors == null) return false; + return topIds.stream().anyMatch(topId -> + ancestors.contains("," + topId + ",") || + ancestors.startsWith(topId + ",") || + ancestors.endsWith("," + topId) || + ancestors.equals(String.valueOf(topId)) + ); + }).toList(); + } + + /** + * 汇总静态类 + */ + static class Summary { + BigDecimal number; + BigDecimal ownerValue; + BigDecimal outValue; + } + + /** + * 计算汇总 + * + * @param list 数据 + * @return 汇总 + */ + private Summary calculateSummary(List list) { + Summary s = new Summary(); + s.number = BigDecimal.ZERO; + s.ownerValue = BigDecimal.ZERO; + s.outValue = BigDecimal.ZERO; + for (OutConstructionValueCategoryVo c : list) { + int num = (c.getConfirmNum() == null || c.getConfirmNum() == 0) + ? c.getArtificialNum() + c.getUavNum() + : c.getConfirmNum(); + + s.number = s.number.add(BigDecimal.valueOf(num)); + s.ownerValue = s.ownerValue.add(c.getOwnerValue()); + s.outValue = s.outValue.add(c.getOutValue()); + } + return s; + } + + /** + * 获取第一个非空的值 + * + * @param list 数据 + * @param getter 获取器 + * @return 值 + */ + private T getFirstNonNull(List list, + Function getter) { + return list.stream() + .map(getter) + .filter(Objects::nonNull) + .findFirst() + .orElse(null); + } + + /** + * 构建项目VO + * + * @param project 项目 + * @param name 名称 + * @param childName 子名称 + * @param list 数据 + * @param summary 合计 + * @return 项目VO + */ + private OutConstructionValueRangeProjectVo buildProjectVo(BusProject project, String name, String childName, + List list, Summary summary) { + OutConstructionValueRangeProjectVo vo = new OutConstructionValueRangeProjectVo(); + vo.setProjectName(project.getProjectName()); + vo.setProgressCategoryName(name + "/" + childName); + vo.setUnit(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnit)); + vo.setUnitType(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnitType)); + vo.setNumber(summary.number); + vo.setOwnerValue(summary.ownerValue); + vo.setOutValue(summary.outValue); + return vo; + } + + /** + * 构建子项VO + * + * @param project 项目 + * @param name 名称 + * @param childName 子名称 + * @param entry 数据 + * @param summary 合计 + * @return 子项VO + */ + private OutConstructionValueRangeSubProjectVo buildSubProjectVo(BusProject project, String name, String childName, + Map.Entry> entry, + Map projectNameMap, Summary summary) { + OutConstructionValueRangeSubProjectVo vo = new OutConstructionValueRangeSubProjectVo(); + vo.setProjectName(project.getProjectName()); + vo.setSubProjectName(projectNameMap.get(entry.getKey())); + vo.setProgressCategoryName(name + "/" + childName); + vo.setUnit(getFirstNonNull(entry.getValue(), OutConstructionValueCategoryVo::getUnit)); + vo.setUnitType(getFirstNonNull(entry.getValue(), OutConstructionValueCategoryVo::getUnitType)); + vo.setNumber(summary.number); + vo.setOwnerValue(summary.ownerValue); + vo.setOutValue(summary.outValue); + return vo; + } + + /** + * 构建方阵VO + * + * @param project 项目 + * @param name 名称 + * @param childName 子名称 + * @param entry 数据 + * @param projectNameMap 项目名称 + * @param summary 合计 + * @return 方阵VO + */ + private OutConstructionValueRangeMatrixVo buildMatrixVo(BusProject project, String name, String childName, + Map.Entry> entry, + Map projectNameMap, Summary summary) { + List list = entry.getValue(); + OutConstructionValueRangeMatrixVo vo = new OutConstructionValueRangeMatrixVo(); + vo.setProjectName(project.getProjectName()); + vo.setMatrixName(entry.getKey()); + vo.setProgressCategoryName(name + "/" + childName); + Long pid = list.stream() + .map(OutConstructionValueCategoryVo::getProjectId) + .filter(Objects::nonNull) + .findFirst().orElse(project.getId()); + vo.setSubProjectName(projectNameMap.getOrDefault(pid, project.getProjectName())); + vo.setUnit(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnit)); + vo.setUnitType(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnitType)); + vo.setNumber(summary.number); + vo.setOwnerValue(summary.ownerValue); + vo.setOutValue(summary.outValue); + return vo; + } + + /** + * 构建导出Excel + * + * @param projectName 项目名称 + * @param response 响应 + * @param projectVoList 项目VO + * @param subProjectVoList 子项VO + * @param matrixVoList 方阵VO + */ + private void buildExportExcel(String projectName, HttpServletResponse response, + List projectVoList, + List subProjectVoList, + List matrixVoList) { + String fileName = projectName + "-" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "-" + "施工产值.xlsx"; + FileUtils.setAttachmentResponseHeader(response, fileName); + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8"); + // 构建 ExcelWriter + try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()) + .autoCloseStream(false) + // 自动适配 + .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) + // 大数值自动转换 防止失真 + .registerConverter(new ExcelBigNumberConvert()) + .build()) { + // === Sheet1 === + WriteSheet sheet1 = EasyExcel.writerSheet(0, "按项目汇总") + .head(OutConstructionValueRangeProjectVo.class) + .build(); + excelWriter.write(projectVoList, sheet1); + // === Sheet2 === + WriteSheet sheet2 = EasyExcel.writerSheet(1, "按子项汇总") + .head(OutConstructionValueRangeSubProjectVo.class) + .build(); + excelWriter.write(subProjectVoList, sheet2); + // === Sheet3 === + WriteSheet sheet3 = EasyExcel.writerSheet(2, "按方阵汇总") + .head(OutConstructionValueRangeMatrixVo.class) + .build(); + excelWriter.write(matrixVoList, sheet3); + } catch (IOException e) { + log.error("施工产值Excel导出失败", e); + throw new ServiceException("导出Excel失败"); + } + } + /** * 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等) * 正常使用只需#processEvent.flowCode=='leave1' diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueServiceImpl.java index 81f29acc..0b86c31e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueServiceImpl.java @@ -1,16 +1,23 @@ package org.dromara.out.service.impl; import cn.hutool.core.collection.CollUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.ExcelWriter; +import com.alibaba.excel.write.metadata.WriteSheet; +import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.constant.HttpStatus; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.core.utils.file.FileUtils; +import org.dromara.common.excel.convert.ExcelBigNumberConvert; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.facility.domain.FacMatrix; @@ -20,7 +27,7 @@ import org.dromara.out.domain.OutConstructionValueRange; import org.dromara.out.domain.bo.OutConstructionValueBo; import org.dromara.out.domain.bo.OutConstructionValueFacilityReq; import org.dromara.out.domain.vo.OutConstructionAllValueVo; -import org.dromara.out.domain.vo.OutConstructionValueVo; +import org.dromara.out.domain.vo.outconstructionvalue.*; import org.dromara.out.mapper.OutConstructionValueMapper; import org.dromara.out.service.IOutConstructionValueRangeService; import org.dromara.out.service.IOutConstructionValueService; @@ -29,17 +36,24 @@ import org.dromara.progress.domain.PgsProgressPlanDetail; import org.dromara.progress.domain.dto.progressplandetail.PgsProgressPlanDetailCreateReq; import org.dromara.progress.domain.dto.progressplandetail.PgsProgressPlanDetailFinishedCreateReq; import org.dromara.progress.domain.dto.progressplandetail.PgsProgressPlanDetailRemoveReq; +import org.dromara.progress.domain.enums.PgsRelevancyStructureEnum; import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryVo; import org.dromara.progress.service.IPgsProgressCategoryService; import org.dromara.progress.service.IPgsProgressPlanDetailService; import org.dromara.project.domain.BusProject; import org.dromara.project.domain.vo.project.BusProjectVo; import org.dromara.project.service.IBusProjectService; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; +import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; /** * 施工产值Service业务层处理 @@ -65,6 +79,8 @@ public class OutConstructionValueServiceImpl extends ServiceImpl queryTotalList(OutConstructionValueBo bo) { + Long projectId = bo.getProjectId(); + if (projectId == null) { + throw new ServiceException("请选择项目"); + } + BusProject project = projectService.getById(projectId); + if (project == null) { + throw new ServiceException("项目不存在"); + } + // 获取子项目 + List projectList = projectService.lambdaQuery() + .eq(BusProject::getPId, projectId) + .list(); + projectList.add(project); + Map projectNameMap = projectList.stream() + .collect(Collectors.toMap(BusProject::getId, BusProject::getProjectName)); + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + List valueList = this.list(lqw); + if (CollUtil.isEmpty(valueList)) { + return Collections.emptyList(); + } + if (StringUtils.isNotBlank(bo.getProjectType())) { + List valueCategoryList = new ArrayList<>(); + List topList = new ArrayList<>(); + this.buildExportData(valueList, valueCategoryList, topList); + // 汇总数据 + List projectVoList = new ArrayList<>(); + List subProjectVoList = new ArrayList<>(); + List matrixVoList = new ArrayList<>(); + // 合计 + BigDecimal totalNumber = BigDecimal.ZERO; + Integer totalArtificialNum = 0; + Integer totalUavNum = 0; + Integer totalConfirmNum = 0; + BigDecimal totalOwnerValue = BigDecimal.ZERO; + BigDecimal totalOutValue = BigDecimal.ZERO; + + BigDecimal subTotalNumber = BigDecimal.ZERO; + Integer subTotalArtificialNum = 0; + Integer subTotalUavNum = 0; + Integer subTotalConfirmNum = 0; + BigDecimal subTotalOwnerValue = BigDecimal.ZERO; + BigDecimal subTotalOutValue = BigDecimal.ZERO; + + BigDecimal matrixTotalNumber = BigDecimal.ZERO; + Integer matrixTotalArtificialNum = 0; + Integer matrixTotalUavNum = 0; + Integer matrixTotalConfirmNum = 0; + BigDecimal matrixTotalOwnerValue = BigDecimal.ZERO; + BigDecimal matrixTotalOutValue = BigDecimal.ZERO; + // 根据名称+结构分类 + Map> topNameMap = + topList.stream().collect(Collectors.groupingBy(item -> item.getName() + "_" + item.getRelevancyStructure())); + for (Map.Entry> entry : topNameMap.entrySet()) { + String[] keys = entry.getKey().split("_"); + String name = keys[0]; + String structure = keys[1]; + List topNodes = entry.getValue(); + List topIds = topNodes.stream().map(PgsProgressCategory::getId).toList(); + // 找出全部子孙节点 + List children = findChildren(valueCategoryList, topIds); + // 子类按名称分组 + Map> childrenMap = + children.stream().collect(Collectors.groupingBy(OutConstructionValueCategoryVo::getName)); + for (Map.Entry> childrenEntry : childrenMap.entrySet()) { + String childName = childrenEntry.getKey(); + List childrenEntryValue = childrenEntry.getValue(); + // ======= 构建项目级数据 ======= + Summary summary = calculateSummary(childrenEntryValue); + OutConstructionValueProjectVo projectVo = + buildProjectVo(project, name, childName, childrenEntryValue, summary); + projectVoList.add(projectVo); + totalNumber = totalNumber.add(BigDecimal.valueOf(summary.number)); + totalArtificialNum += summary.artificialNum; + totalUavNum += summary.uavNum; + totalConfirmNum += summary.confirmNum; + totalOwnerValue = totalOwnerValue.add(summary.ownerValue); + totalOutValue = totalOutValue.add(summary.outValue); + // ======= 构建子项目级数据 ======= + if ((structure.equals("1") || structure.equals("2")) && bo.getProjectType().equals("1")) { + Map> subMap = + childrenEntryValue.stream().collect(Collectors.groupingBy(OutConstructionValueCategoryVo::getProjectId)); + for (Map.Entry> subEntry : subMap.entrySet()) { + Summary subSummary = calculateSummary(subEntry.getValue()); + OutConstructionValueSubProjectVo subVo = + buildSubProjectVo(project, name, childName, subEntry, projectNameMap, subSummary); + subProjectVoList.add(subVo); + subTotalNumber = subTotalNumber.add(BigDecimal.valueOf(subSummary.number)); + subTotalArtificialNum += subSummary.artificialNum; + subTotalUavNum += subSummary.uavNum; + subTotalConfirmNum += subSummary.confirmNum; + subTotalOwnerValue = subTotalOwnerValue.add(subSummary.ownerValue); + subTotalOutValue = subTotalOutValue.add(subSummary.outValue); + } + } + // ======= 构建方阵级数据 ======= + if (structure.equals("2") && bo.getProjectType().equals("2")) { + Map> matrixMap = + childrenEntryValue.stream().collect(Collectors.groupingBy(OutConstructionValueCategoryVo::getMatrixName)); + for (Map.Entry> matrixEntry : matrixMap.entrySet()) { + Summary matrixSummary = calculateSummary(matrixEntry.getValue()); + OutConstructionValueMatrixVo matrixVo = + buildMatrixVo(project, name, childName, matrixEntry, projectNameMap, matrixSummary); + matrixVoList.add(matrixVo); + matrixTotalNumber = matrixTotalNumber.add(BigDecimal.valueOf(matrixSummary.number)); + matrixTotalArtificialNum += matrixSummary.artificialNum; + matrixTotalUavNum += matrixSummary.uavNum; + matrixTotalConfirmNum += matrixSummary.confirmNum; + matrixTotalOwnerValue = matrixTotalOwnerValue.add(matrixSummary.ownerValue); + matrixTotalOutValue = matrixTotalOutValue.add(matrixSummary.outValue); + } + } + } + } + // 排序 + projectVoList.sort(Comparator.comparing(OutConstructionValueProjectVo::getProgressCategoryName)); + subProjectVoList.sort(Comparator.comparing(OutConstructionValueSubProjectVo::getSubProjectName) + .thenComparing(OutConstructionValueSubProjectVo::getProgressCategoryName)); + matrixVoList.sort(Comparator.comparing(OutConstructionValueMatrixVo::getSubProjectName) + .thenComparing(OutConstructionValueMatrixVo::getMatrixName) + .thenComparing(OutConstructionValueMatrixVo::getProgressCategoryName)); + // 填充合计 + OutConstructionValueProjectVo rangeProjectVo = new OutConstructionValueProjectVo(); + rangeProjectVo.setProjectName("合计"); + rangeProjectVo.setNumber(totalNumber); + rangeProjectVo.setArtificialNum(totalArtificialNum); + rangeProjectVo.setUavNum(totalUavNum); + rangeProjectVo.setConfirmNum(totalConfirmNum); + rangeProjectVo.setOwnerValue(totalOwnerValue); + rangeProjectVo.setOutValue(totalOutValue); + projectVoList.add(rangeProjectVo); + OutConstructionValueSubProjectVo rangeSubProjectVo = new OutConstructionValueSubProjectVo(); + rangeSubProjectVo.setProjectName("合计"); + rangeSubProjectVo.setNumber(subTotalNumber); + rangeSubProjectVo.setArtificialNum(subTotalArtificialNum); + rangeSubProjectVo.setUavNum(subTotalUavNum); + rangeSubProjectVo.setConfirmNum(subTotalConfirmNum); + rangeSubProjectVo.setOwnerValue(subTotalOwnerValue); + rangeSubProjectVo.setOutValue(subTotalOutValue); + subProjectVoList.add(rangeSubProjectVo); + OutConstructionValueMatrixVo rangeMatrixVo = new OutConstructionValueMatrixVo(); + rangeMatrixVo.setProjectName("合计"); + rangeMatrixVo.setNumber(matrixTotalNumber); + rangeMatrixVo.setArtificialNum(matrixTotalArtificialNum); + rangeMatrixVo.setUavNum(matrixTotalUavNum); + rangeMatrixVo.setConfirmNum(matrixTotalConfirmNum); + rangeMatrixVo.setOwnerValue(matrixTotalOwnerValue); + rangeMatrixVo.setOutValue(matrixTotalOutValue); + matrixVoList.add(rangeMatrixVo); + return switch (bo.getProjectType()) { + case "3" -> projectVoList.stream().map(p -> { + OutConstructionValueTotalVo vo = new OutConstructionValueTotalVo(); + BeanUtils.copyProperties(p, vo); + return vo; + }).toList(); + case "1" -> subProjectVoList.stream().map(p -> { + OutConstructionValueTotalVo vo = new OutConstructionValueTotalVo(); + BeanUtils.copyProperties(p, vo); + return vo; + }).toList(); + case "2" -> matrixVoList.stream().map(p -> { + OutConstructionValueTotalVo vo = new OutConstructionValueTotalVo(); + BeanUtils.copyProperties(p, vo); + return vo; + }).toList(); + case null, default -> Collections.emptyList(); + }; + } + return valueList.stream().map(p -> { + OutConstructionValueTotalVo vo = new OutConstructionValueTotalVo(); + BeanUtils.copyProperties(p, vo); + return vo; + }).toList(); + } + /** * 查询符合条件的施工产值列表 * @@ -135,13 +333,16 @@ public class OutConstructionValueServiceImpl extends ServiceImpl categoryLqw = new LambdaQueryWrapper<>(); categoryLqw.select(PgsProgressCategory::getId); - categoryLqw.eq(PgsProgressCategory::getUnitType, bo.getUnitType()); + categoryLqw.eq(StringUtils.isNotBlank(bo.getUnitType()), PgsProgressCategory::getUnitType, bo.getUnitType()); categoryLqw.eq(bo.getMatrixId() != null, PgsProgressCategory::getMatrixId, bo.getMatrixId()); - if (CollUtil.isNotEmpty(ids)) { - categoryLqw.in(PgsProgressCategory::getProjectId, ids); + categoryLqw.in(CollUtil.isNotEmpty(ids), PgsProgressCategory::getProjectId, ids); + if (StringUtils.isNotBlank(bo.getProjectType())) { + categoryLqw.in(bo.getProjectType().equals("1"), PgsProgressCategory::getRelevancyStructure, + PgsRelevancyStructureEnum.SUB_PROJECT.getValue(), PgsRelevancyStructureEnum.MATRIX.getValue()); + categoryLqw.eq(bo.getProjectType().equals("2"), PgsProgressCategory::getRelevancyStructure, PgsRelevancyStructureEnum.MATRIX.getValue()); } List progressCategories = pgsProgressCategoryService.list(categoryLqw); if (CollUtil.isNotEmpty(progressCategories)) { @@ -357,6 +558,420 @@ public class OutConstructionValueServiceImpl extends ServiceImpl projectList = projectService.lambdaQuery() + .eq(BusProject::getPId, projectId) + .list(); + projectList.add(project); + Map projectNameMap = projectList.stream() + .collect(Collectors.toMap(BusProject::getId, BusProject::getProjectName)); + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + List valueList = this.list(lqw); + if (CollUtil.isEmpty(valueList)) { + throw new ServiceException("无数据导出"); + } + List valueCategoryList = new ArrayList<>(); + List topList = new ArrayList<>(); + this.buildExportData(valueList, valueCategoryList, topList); + // 汇总数据 + List projectVoList = new ArrayList<>(); + List subProjectVoList = new ArrayList<>(); + List matrixVoList = new ArrayList<>(); + // 合计 + BigDecimal totalNumber = BigDecimal.ZERO; + BigDecimal totalOwnerValue = BigDecimal.ZERO; + BigDecimal totalOutValue = BigDecimal.ZERO; + + BigDecimal subTotalNumber = BigDecimal.ZERO; + BigDecimal subTotalOwnerValue = BigDecimal.ZERO; + BigDecimal subTotalOutValue = BigDecimal.ZERO; + + BigDecimal matrixTotalNumber = BigDecimal.ZERO; + BigDecimal matrixTotalOwnerValue = BigDecimal.ZERO; + BigDecimal matrixTotalOutValue = BigDecimal.ZERO; + // 根据名称+结构分类 + Map> topNameMap = + topList.stream().collect(Collectors.groupingBy(item -> item.getName() + "_" + item.getRelevancyStructure())); + for (Map.Entry> entry : topNameMap.entrySet()) { + String[] keys = entry.getKey().split("_"); + String name = keys[0]; + String structure = keys[1]; + List topNodes = entry.getValue(); + List topIds = topNodes.stream().map(PgsProgressCategory::getId).toList(); + // 找出全部子孙节点 + List children = findChildren(valueCategoryList, topIds); + // 子类按名称分组 + Map> childrenMap = + children.stream().collect(Collectors.groupingBy(OutConstructionValueCategoryVo::getName)); + for (Map.Entry> childrenEntry : childrenMap.entrySet()) { + String childName = childrenEntry.getKey(); + List childrenEntryValue = childrenEntry.getValue(); + // ======= 构建项目级数据 ======= + Summary summary = calculateSummary(childrenEntryValue); + OutConstructionValueProjectVo projectVo = + buildProjectVo(project, name, childName, childrenEntryValue, summary); + projectVoList.add(projectVo); + totalNumber = totalNumber.add(BigDecimal.valueOf(summary.number)); + totalOwnerValue = totalOwnerValue.add(summary.ownerValue); + totalOutValue = totalOutValue.add(summary.outValue); + // ======= 构建子项目级数据 ======= + if (structure.equals("1") || structure.equals("2")) { + Map> subMap = + childrenEntryValue.stream().collect(Collectors.groupingBy(OutConstructionValueCategoryVo::getProjectId)); + for (Map.Entry> subEntry : subMap.entrySet()) { + Summary subSummary = calculateSummary(subEntry.getValue()); + OutConstructionValueSubProjectVo subVo = + buildSubProjectVo(project, name, childName, subEntry, projectNameMap, subSummary); + subProjectVoList.add(subVo); + subTotalNumber = subTotalNumber.add(BigDecimal.valueOf(subSummary.number)); + subTotalOwnerValue = subTotalOwnerValue.add(subSummary.ownerValue); + subTotalOutValue = subTotalOutValue.add(subSummary.outValue); + } + } + // ======= 构建方阵级数据 ======= + if (structure.equals("2")) { + Map> matrixMap = + childrenEntryValue.stream().collect(Collectors.groupingBy(OutConstructionValueCategoryVo::getMatrixName)); + for (Map.Entry> matrixEntry : matrixMap.entrySet()) { + Summary matrixSummary = calculateSummary(matrixEntry.getValue()); + OutConstructionValueMatrixVo matrixVo = + buildMatrixVo(project, name, childName, matrixEntry, projectNameMap, matrixSummary); + matrixVoList.add(matrixVo); + matrixTotalNumber = matrixTotalNumber.add(BigDecimal.valueOf(matrixSummary.number)); + matrixTotalOwnerValue = matrixTotalOwnerValue.add(matrixSummary.ownerValue); + matrixTotalOutValue = matrixTotalOutValue.add(matrixSummary.outValue); + } + } + } + } + // 排序 + projectVoList.sort(Comparator.comparing(OutConstructionValueProjectVo::getProgressCategoryName)); + subProjectVoList.sort(Comparator.comparing(OutConstructionValueSubProjectVo::getSubProjectName) + .thenComparing(OutConstructionValueSubProjectVo::getProgressCategoryName)); + matrixVoList.sort(Comparator.comparing(OutConstructionValueMatrixVo::getSubProjectName) + .thenComparing(OutConstructionValueMatrixVo::getMatrixName) + .thenComparing(OutConstructionValueMatrixVo::getProgressCategoryName)); + // 填充合计 + OutConstructionValueProjectVo rangeProjectVo = new OutConstructionValueProjectVo(); + rangeProjectVo.setProjectName("合计"); + rangeProjectVo.setNumber(totalNumber); + rangeProjectVo.setOwnerValue(totalOwnerValue); + rangeProjectVo.setOutValue(totalOutValue); + projectVoList.add(rangeProjectVo); + OutConstructionValueSubProjectVo rangeSubProjectVo = new OutConstructionValueSubProjectVo(); + rangeSubProjectVo.setProjectName("合计"); + rangeSubProjectVo.setNumber(subTotalNumber); + rangeSubProjectVo.setOwnerValue(subTotalOwnerValue); + rangeSubProjectVo.setOutValue(subTotalOutValue); + subProjectVoList.add(rangeSubProjectVo); + OutConstructionValueMatrixVo rangeMatrixVo = new OutConstructionValueMatrixVo(); + rangeMatrixVo.setProjectName("合计"); + rangeMatrixVo.setNumber(matrixTotalNumber); + rangeMatrixVo.setOwnerValue(matrixTotalOwnerValue); + rangeMatrixVo.setOutValue(matrixTotalOutValue); + matrixVoList.add(rangeMatrixVo); + // 构建导出数据 + buildExportExcel(project.getProjectName(), response, projectVoList, subProjectVoList, matrixVoList); + } + + /** + * 构建导出需要的数据 + * + * @param valueList 施工产值列表 + * @param valueCategoryList 进度类别列表 + * @param topList 顶层进度类别列表 + */ + @Override + public void buildExportData(List valueList, + List valueCategoryList, + List topList) { + // 获取对应进度类别 + Set progressCategoryIds = valueList.stream() + .map(OutConstructionValue::getProgressCategoryId) + .collect(Collectors.toSet()); + List progressCategoryList = progressCategoryService.lambdaQuery() + .in(PgsProgressCategory::getId, progressCategoryIds) + .list(); + valueCategoryList.addAll( + valueList.stream().map(value -> { + OutConstructionValueCategoryVo vo = new OutConstructionValueCategoryVo(); + BeanUtils.copyProperties(value, vo); + PgsProgressCategory category = progressCategoryList.stream() + .filter(p -> p.getId().equals(value.getProgressCategoryId())) + .findFirst().orElse(null); + if (category != null) { + vo.setProjectId(category.getProjectId()); + vo.setMatrixName(category.getMatrixName()); + vo.setName(category.getName()); + vo.setUnitType(category.getUnitType()); + vo.setUnit(category.getUnit()); + vo.setAncestors(category.getAncestors()); + vo.setRelevancyStructure(category.getRelevancyStructure()); + } + return vo; + }).toList() + ); + // 顶级进度类别 + Set topProgressCategoryIds = progressCategoryList.stream() + .map(p -> { + String ancestors = p.getAncestors(); + if (StringUtils.isNotBlank(ancestors)) { + String[] split = ancestors.split(","); + return split.length > 1 ? split[1] : null; + } + return null; + }).filter(Objects::nonNull) + .map(Long::parseLong) + .collect(Collectors.toSet()); + List tops = progressCategoryService.listByIds(topProgressCategoryIds) + .stream() + .sorted(Comparator.comparing(PgsProgressCategory::getSort)) + .toList(); + topList.addAll(tops); + } + + /** + * 查找子级 + * + * @param all 所有数据 + * @param topIds 顶级ID + * @return 子级 + */ + private List findChildren( + List all, + List topIds) { + return all.stream() + .filter(item -> { + String ancestors = item.getAncestors(); + if (ancestors == null) return false; + return topIds.stream().anyMatch(topId -> + ancestors.contains("," + topId + ",") || + ancestors.startsWith(topId + ",") || + ancestors.endsWith("," + topId) || + ancestors.equals(String.valueOf(topId)) + ); + }).toList(); + } + + /** + * 汇总静态类 + */ + static class Summary { + Integer number; + Integer artificialNum; + Integer uavNum; + Integer confirmNum; + BigDecimal ownerValue; + BigDecimal outValue; + } + + /** + * 计算汇总 + * + * @param list 数据 + * @return 汇总 + */ + private Summary calculateSummary(List list) { + Summary s = new Summary(); + s.number = 0; + s.artificialNum = 0; + s.uavNum = 0; + s.confirmNum = 0; + s.ownerValue = BigDecimal.ZERO; + s.outValue = BigDecimal.ZERO; + for (OutConstructionValueCategoryVo c : list) { + int num = (c.getConfirmNum() == null || c.getConfirmNum() == 0) + ? c.getArtificialNum() + c.getUavNum() + : c.getConfirmNum(); + + s.number = s.number + num; + s.artificialNum = s.artificialNum + c.getArtificialNum(); + s.uavNum = s.uavNum + c.getUavNum(); + s.confirmNum = s.confirmNum + c.getConfirmNum(); + s.ownerValue = s.ownerValue.add(c.getOwnerValue()); + s.outValue = s.outValue.add(c.getOutValue()); + } + return s; + } + + /** + * 获取第一个非空的值 + * + * @param list 数据 + * @param getter 获取器 + * @return 值 + */ + private T getFirstNonNull(List list, + Function getter) { + return list.stream() + .map(getter) + .filter(Objects::nonNull) + .findFirst() + .orElse(null); + } + + /** + * 构建项目VO + * + * @param project 项目 + * @param name 名称 + * @param childName 子名称 + * @param list 数据 + * @param summary 合计 + * @return 项目VO + */ + private OutConstructionValueProjectVo buildProjectVo( + BusProject project, + String name, + String childName, + List list, + Summary summary) { + OutConstructionValueProjectVo vo = new OutConstructionValueProjectVo(); + vo.setProjectName(project.getProjectName()); + vo.setProgressCategoryName(name + "/" + childName); + vo.setUnit(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnit)); + vo.setUnitType(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnitType)); + vo.setNumber(BigDecimal.valueOf(summary.number)); + vo.setArtificialNum(summary.artificialNum); + vo.setUavNum(summary.uavNum); + vo.setConfirmNum(summary.confirmNum); + vo.setOwnerValue(summary.ownerValue); + vo.setOutValue(summary.outValue); + return vo; + } + + /** + * 构建子项VO + * + * @param project 项目 + * @param name 名称 + * @param childName 子名称 + * @param entry 数据 + * @param summary 合计 + * @return 子项VO + */ + private OutConstructionValueSubProjectVo buildSubProjectVo( + BusProject project, + String name, + String childName, + Map.Entry> entry, + Map projectNameMap, + Summary summary) { + OutConstructionValueSubProjectVo vo = new OutConstructionValueSubProjectVo(); + vo.setProjectName(project.getProjectName()); + vo.setSubProjectName(projectNameMap.get(entry.getKey())); + vo.setProgressCategoryName(name + "/" + childName); + vo.setUnit(getFirstNonNull(entry.getValue(), OutConstructionValueCategoryVo::getUnit)); + vo.setUnitType(getFirstNonNull(entry.getValue(), OutConstructionValueCategoryVo::getUnitType)); + vo.setNumber(BigDecimal.valueOf(summary.number)); + vo.setArtificialNum(summary.artificialNum); + vo.setUavNum(summary.uavNum); + vo.setConfirmNum(summary.confirmNum); + vo.setOwnerValue(summary.ownerValue); + vo.setOutValue(summary.outValue); + return vo; + } + + /** + * 构建方阵VO + * + * @param project 项目 + * @param name 名称 + * @param childName 子名称 + * @param entry 数据 + * @param projectNameMap 项目名称 + * @param summary 合计 + * @return 方阵VO + */ + private OutConstructionValueMatrixVo buildMatrixVo( + BusProject project, + String name, + String childName, + Map.Entry> entry, + Map projectNameMap, + Summary summary) { + List list = entry.getValue(); + OutConstructionValueMatrixVo vo = new OutConstructionValueMatrixVo(); + vo.setProjectName(project.getProjectName()); + vo.setMatrixName(entry.getKey()); + vo.setProgressCategoryName(name + "/" + childName); + Long pid = list.stream() + .map(OutConstructionValueCategoryVo::getProjectId) + .filter(Objects::nonNull) + .findFirst().orElse(project.getId()); + vo.setSubProjectName(projectNameMap.getOrDefault(pid, project.getProjectName())); + vo.setUnit(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnit)); + vo.setUnitType(getFirstNonNull(list, OutConstructionValueCategoryVo::getUnitType)); + vo.setNumber(BigDecimal.valueOf(summary.number)); + vo.setArtificialNum(summary.artificialNum); + vo.setUavNum(summary.uavNum); + vo.setConfirmNum(summary.confirmNum); + vo.setOwnerValue(summary.ownerValue); + vo.setOutValue(summary.outValue); + return vo; + } + + /** + * 构建导出Excel + * + * @param projectName 项目名称 + * @param response 响应 + * @param projectVoList 项目VO + * @param subProjectVoList 子项VO + * @param matrixVoList 方阵VO + */ + private void buildExportExcel(String projectName, HttpServletResponse response, + List projectVoList, + List subProjectVoList, + List matrixVoList) { + String fileName = projectName + "-" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")) + "-" + "施工产值.xlsx"; + FileUtils.setAttachmentResponseHeader(response, fileName); + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8"); + // 构建 ExcelWriter + try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()) + .autoCloseStream(false) + // 自动适配 + .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) + // 大数值自动转换 防止失真 + .registerConverter(new ExcelBigNumberConvert()) + .build()) { + // === Sheet1 === + WriteSheet sheet1 = EasyExcel.writerSheet(0, "按项目汇总") + .head(OutConstructionValueProjectVo.class) + .build(); + excelWriter.write(projectVoList, sheet1); + // === Sheet2 === + WriteSheet sheet2 = EasyExcel.writerSheet(1, "按子项汇总") + .head(OutConstructionValueSubProjectVo.class) + .build(); + excelWriter.write(subProjectVoList, sheet2); + // === Sheet3 === + WriteSheet sheet3 = EasyExcel.writerSheet(2, "按方阵汇总") + .head(OutConstructionValueMatrixVo.class) + .build(); + excelWriter.write(matrixVoList, sheet3); + } catch (IOException e) { + log.error("施工产值Excel导出失败", e); + throw new ServiceException("导出Excel失败"); + } + } + public void getName(OutConstructionValueVo vo) { //查询分部工程以及分项工程 PgsProgressCategoryVo pgsProgressCategoryVo = pgsProgressCategoryService.queryById(vo.getProgressCategoryId()); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutSettlementValueSubcontractServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutSettlementValueSubcontractServiceImpl.java index 9a216f35..9208edc5 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutSettlementValueSubcontractServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutSettlementValueSubcontractServiceImpl.java @@ -84,6 +84,7 @@ public class OutSettlementValueSubcontractServiceImpl extends ServiceImpl buildQueryWrapper(OutSettlementValueSubcontractBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(OutSettlementValueSubcontract::getId); lqw.eq(bo.getProjectId() != null, OutSettlementValueSubcontract::getProjectId, bo.getProjectId()); lqw.eq(StringUtils.isNotBlank(bo.getDocumentCode()), OutSettlementValueSubcontract::getDocumentCode, bo.getDocumentCode()); @@ -96,6 +97,8 @@ public class OutSettlementValueSubcontractServiceImpl extends ServiceImpl throw new ServiceException("不支持的设施类型", HttpStatus.BAD_REQUEST); } // 更新进度类别数量 + BigDecimal total = category.getTotal().add(BigDecimal.valueOf(number)); PgsProgressCategory updateCategory = new PgsProgressCategory(); updateCategory.setId(progressCategoryId); - updateCategory.setTotal(category.getTotal().add(BigDecimal.valueOf(number))); + updateCategory.setTotal(total); + updateCategory.setOwnerPrice(total.multiply(category.getOwnerPrice())); + updateCategory.setConstructionPrice(total.multiply(category.getConstructionPrice())); boolean update = this.updateById(updateCategory); if (!update) { throw new ServiceException("修改进度类别数量失败,数据库异常", HttpStatus.ERROR); @@ -2850,6 +2853,9 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl ids = voList.stream().map(PgsProgressCategoryEnterTemplateVo::getId).toList(); + if (CollUtil.isEmpty(ids)) { + throw new ServiceException("数据错误,无法从当前表格中获取到有效数据"); + } List categoryList = this.listByIds(ids); if (CollUtil.isEmpty(categoryList)) { throw new ServiceException("数据错误,当前项目无此数据"); @@ -2862,18 +2868,22 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl allProjectIds = projects.stream().map(BusProject::getId).toList(); + List tempList = new ArrayList<>(); List list = voList.stream().map(vo -> { PgsProgressCategory update = new PgsProgressCategory(); + PgsProgressCategoryImportTemp temp = new PgsProgressCategoryImportTemp(); Long id = vo.getId(); update.setId(id); + temp.setId(id); if (progressCategoryMap.containsKey(id)) { PgsProgressCategory old = progressCategoryMap.get(id); // 如果不是当前项目,或当前项目的子项目,则返回 null if (!allProjectIds.contains(old.getProjectId())) { return null; } + BigDecimal oldCompleted = old.getCompleted(); // 当已完成数据等于总数,返回 null - if (old.getCompleted().compareTo(old.getTotal()) >= 0) { + if (old.getTotal().compareTo(BigDecimal.ZERO) == 0 || oldCompleted.compareTo(old.getTotal()) >= 0) { return null; } // 如果完成数量小于等于0,则返回 null @@ -2882,9 +2892,17 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl id:{},name:{}", id, vo.getName()); @@ -2895,7 +2913,6 @@ public class PgsProgressCategoryServiceImpl extends ServiceImpl detailList = progressPlanDetailService.lambdaQuery() .in(PgsProgressPlanDetail::getProgressCategoryId, updateList) .list(); + if (CollUtil.isEmpty(detailList)) { + // 详情为空,直接创建新详情数据 + } return "导入成功,共更新" + list.size() + "条数据"; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanDetailServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanDetailServiceImpl.java index 3af2de33..0e03ffbf 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanDetailServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanDetailServiceImpl.java @@ -1146,12 +1146,12 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl recognizeAsync(Long bigPictureId, String fileUrl, String tifUrl, List projectIds) { // 调用识别算法 - RecognizeVo recognizeVo = null; + RecognizeVo recognizeVo; try { recognizeVo = recognizerManager.recognize(fileUrl); } catch (Exception e) { log.error("识别失败:{}", e.getMessage()); + return CompletableFuture.completedFuture(false); } if (recognizeVo == null) { return CompletableFuture.completedFuture(false); @@ -1277,18 +1278,20 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl countAttendanceMonthListByUserId(BusAttendanceMonthByUserIdReq req) { + return R.ok(busAttendanceService.countAttendanceMonthListByUserId(req)); + } + @GetMapping("/sub/list/month/byUserId") public R> subListAttendanceMonthListByUserId(BusAttendanceMonthByUserIdReq req) { return R.ok(busAttendanceService.subListAttendanceMonthListByUserId(req)); @@ -92,7 +99,7 @@ public class BusAttendanceController extends BaseController { @SaCheckPermission("project:attendance:query") @GetMapping("/{id}") public R getInfo(@NotNull(message = "主键不能为空") - @PathVariable Long id) { + @PathVariable Long id) { return R.ok(busAttendanceService.queryById(id)); } @@ -138,6 +145,7 @@ public class BusAttendanceController extends BaseController { public R> getClockDateForTwoWeekList(TwoWeekDto dto) { return R.ok(busAttendanceService.getClockDateForTwoWeekList(dto)); } + /** * 查询项目施工人员当天考勤状况 */ @@ -150,8 +158,8 @@ public class BusAttendanceController extends BaseController { * 查询当天出勤人员 */ @GetMapping("/list/attendanceUser") - public TableDataInfo getTodayAttendanceUser(TodayUserDto dto, PageQuery pageQuery) { - return busAttendanceService.getTodayAttendanceUser(dto,pageQuery); + public TableDataInfo getTodayAttendanceUser(TodayUserDto dto, PageQuery pageQuery) { + return busAttendanceService.getTodayAttendanceUser(dto, pageQuery); } /** @@ -211,8 +219,8 @@ public class BusAttendanceController extends BaseController { * 查询分包当天出勤人员 */ @GetMapping("/sub/list/attendanceUser") - public TableDataInfo getSubTodayAttendanceUser(SubTodayUserDto dto, PageQuery pageQuery) { - return busAttendanceService.getSubTodayAttendanceUser(dto,pageQuery); + public TableDataInfo getSubTodayAttendanceUser(SubTodayUserDto dto, PageQuery pageQuery) { + return busAttendanceService.getSubTodayAttendanceUser(dto, pageQuery); } /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusProjectTeamController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusProjectTeamController.java index 41fe02d4..aaf0229f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusProjectTeamController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/BusProjectTeamController.java @@ -24,6 +24,7 @@ import org.dromara.project.domain.dto.projectteam.BusProjectTeamQueryReq; import org.dromara.project.domain.dto.projectteam.BusProjectTeamUpdateReq; import org.dromara.project.domain.vo.BusProjectPunchrangeVo; import org.dromara.project.domain.vo.projectteam.BusProjectTeamAppVo; +import org.dromara.project.domain.vo.projectteam.BusProjectTeamCountVo; import org.dromara.project.domain.vo.projectteam.BusProjectTeamForemanVo; import org.dromara.project.domain.vo.projectteam.BusProjectTeamVo; import org.dromara.project.service.IBusProjectPunchrangeService; @@ -177,4 +178,18 @@ public class BusProjectTeamController extends BaseController { return R.ok(contractorService.queryList(req)); } + /** + * 查询分包单位下的班组列表 + */ + @GetMapping("/teamList") + public R> teamList(BusProjectTeamQueryReq req) { + return R.ok(busProjectTeamService.queryList(req)); + } + + + @GetMapping("/teamCount") + public R teamCount(BusProjectTeamQueryReq req) { + return R.ok(busProjectTeamService.teamCount(req)); + } + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusProjectTeamAppController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusProjectTeamAppController.java index 8b976f97..3bf54a6d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusProjectTeamAppController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/controller/app/BusProjectTeamAppController.java @@ -4,12 +4,17 @@ import jakarta.annotation.Resource; import jakarta.validation.constraints.NotNull; import org.dromara.common.core.domain.R; import org.dromara.common.web.core.BaseController; +import org.dromara.contractor.domain.dto.contractor.SubContractorQueryReq; +import org.dromara.contractor.domain.vo.contractor.SubContractorVo; +import org.dromara.contractor.service.ISubContractorService; import org.dromara.project.domain.dto.projectteam.BusProjectTeamQueryReq; import org.dromara.project.domain.vo.projectteam.BusProjectTeamAppVo; import org.dromara.project.domain.vo.projectteam.BusProjectTeamForemanVo; import org.dromara.project.domain.vo.projectteam.BusProjectTeamVo; import org.dromara.project.domain.vo.projectteam.TeamManageVo; import org.dromara.project.service.IBusProjectTeamService; +import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.service.ISysUserService; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -32,6 +37,12 @@ public class BusProjectTeamAppController extends BaseController { @Resource private IBusProjectTeamService projectTeamService; + @Resource + private ISysUserService userService; + + @Resource + private ISubContractorService contractorService; + /** * 根据id查询项目班组班组长信息列表 */ @@ -76,4 +87,21 @@ public class BusProjectTeamAppController extends BaseController { return R.ok(projectTeamService.getManager(teamId)); } + /** + * 查询分包单位列表 + */ + @GetMapping("/contractorList") + public R> contractorList(SubContractorQueryReq req) { + return R.ok(contractorService.queryList(req)); + } + + + /** + * 获取所有分包管理人员 + */ + @GetMapping("/listSubContractor") + public R> listSubContractor(Long projectId, Long contractorId) { + return R.ok(userService.selectUserListByAppUserType("2",projectId,contractorId)); + } + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusConstructionUserExit.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusConstructionUserExit.java index 0c83aa24..7a0c58cc 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusConstructionUserExit.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusConstructionUserExit.java @@ -72,5 +72,29 @@ public class BusConstructionUserExit implements Serializable { */ private String remark; + /** + * 工种 + */ + private String typeOfWork; + + /** + * 项目名称 + */ + private String projectName; + + /** + * 分包公司id + */ + private Long contractorId; + + /** + * 分包公司名称 + */ + private String contractorName; + + /** + * 班组名称 + */ + private String teamName; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusProject.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusProject.java index 52bde677..d7db496a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusProject.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/BusProject.java @@ -168,4 +168,9 @@ public class BusProject extends BaseEntity { */ private String position; + /** + * xzd项目id + */ + private Long xzdProjectId; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/AttendanceExportDto.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/AttendanceExportDto.java index 63a884d0..8eef9f38 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/AttendanceExportDto.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/attendance/AttendanceExportDto.java @@ -30,4 +30,10 @@ public class AttendanceExportDto { * 打卡月份 */ private String clockDate; + + + /** + * 人员Id + */ + private Long userId; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/project/BusProjectCreateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/project/BusProjectCreateReq.java index 8d83f563..fa973bb3 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/project/BusProjectCreateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/project/BusProjectCreateReq.java @@ -140,4 +140,9 @@ public class BusProjectCreateReq implements Serializable { * 所属部门列表 */ private List deptIds; + + /** + * xzd项目id + */ + private Long xzdProjectId; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/projectteam/BusProjectTeamQueryReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/projectteam/BusProjectTeamQueryReq.java index d10555ff..e07031e4 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/projectteam/BusProjectTeamQueryReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/dto/projectteam/BusProjectTeamQueryReq.java @@ -35,4 +35,9 @@ public class BusProjectTeamQueryReq implements Serializable { */ private String remark; + /** + * 分包公司Id + */ + private Long contractorId; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/BusAttendanceListByDay.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/BusAttendanceListByDay.java index 29ac1f47..4cf3d63a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/BusAttendanceListByDay.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/BusAttendanceListByDay.java @@ -33,6 +33,17 @@ public class BusAttendanceListByDay { */ private String clockStatus; + /** + * 人脸照 + */ + private String facePic; + + + private String url; + + + + public static BusAttendanceListByDay build(BusAttendance attendance) { if (attendance == null) { return null; @@ -41,6 +52,7 @@ public class BusAttendanceListByDay { attendanceListByDay.setClockType(attendance.getClockType()); attendanceListByDay.setClockTime(attendance.getClockTime()); attendanceListByDay.setClockStatus(attendance.getClockStatus()); + attendanceListByDay.setFacePic(attendance.getFacePic()); return attendanceListByDay; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/BusAttendanceMonthByUserIdCountVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/BusAttendanceMonthByUserIdCountVo.java new file mode 100644 index 00000000..322965b6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/BusAttendanceMonthByUserIdCountVo.java @@ -0,0 +1,34 @@ +package org.dromara.project.domain.vo.attendance; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; +import java.util.List; + +/** + * @author lilemy + * @date 2025/4/8 16:58 + */ +@Data +public class BusAttendanceMonthByUserIdCountVo implements Serializable { + + @Serial + private static final long serialVersionUID = -6172238396618801431L; + + /** + * 出勤天数 + */ + private Long full; + /** + * 迟到和早退次数 + */ + private Long half; + /** + * 请假次数 + */ + private Long leave; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/BusAttendanceMonthByUserIdVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/BusAttendanceMonthByUserIdVo.java index 05df4ab7..5b76244e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/BusAttendanceMonthByUserIdVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/attendance/BusAttendanceMonthByUserIdVo.java @@ -37,6 +37,11 @@ public class BusAttendanceMonthByUserIdVo implements Serializable { */ private String Status; + /** + * 当天打卡状态 + */ + private Integer week; + /** * 当天打卡记录 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/constructionuserexit/BusConstructionUserExitVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/constructionuserexit/BusConstructionUserExitVo.java index efff647d..e6648714 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/constructionuserexit/BusConstructionUserExitVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/constructionuserexit/BusConstructionUserExitVo.java @@ -96,5 +96,28 @@ public class BusConstructionUserExitVo implements Serializable { @ExcelProperty(value = "备注") private String remark; + /** + * 工种 + */ + private String typeOfWork; + /** + * 项目名称 + */ + private String projectName; + + /** + * 分包公司id + */ + private Long contractorId; + + /** + * 分包公司名称 + */ + private String contractorName; + + /** + * 班组名称 + */ + private String teamName; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/project/BusProjectVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/project/BusProjectVo.java index 8334204f..8c53f358 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/project/BusProjectVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/project/BusProjectVo.java @@ -223,4 +223,9 @@ public class BusProjectVo implements Serializable { */ private List roleVos; + /** + * xzd项目id + */ + private Long xzdProjectId; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteam/BusProjectTeamCountVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteam/BusProjectTeamCountVo.java new file mode 100644 index 00000000..313786dd --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteam/BusProjectTeamCountVo.java @@ -0,0 +1,45 @@ +package org.dromara.project.domain.vo.projectteam; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.project.domain.BusProjectTeam; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +/** + * 项目班组视图对象 bus_project_team + * + * @author lilemy + * @date 2025-03-07 + */ +@Data +public class BusProjectTeamCountVo { + + /** + * 总班组 + */ + private Integer total=0; + + /** + * 总人数 + */ + private Long peopleNumber=0L; + + /** + * 限制打卡组数 + */ + private Long limitNumber=0L; + + /** + * 出勤班组数 + */ + private Long attendanceNumber=0L; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteammember/BusProjectTeamMemberVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteammember/BusProjectTeamMemberVo.java index c576155a..98fd137a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteammember/BusProjectTeamMemberVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/domain/vo/projectteammember/BusProjectTeamMemberVo.java @@ -94,4 +94,16 @@ public class BusProjectTeamMemberVo implements Serializable { @Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "typeOfWork",other = "type_of_work") private String typeOfWorkName; + + /** + * 电话 + */ + private String phone; + + + /** + * 入场时间 + */ + private Date entryDate; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusAttendanceService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusAttendanceService.java index 09b5f68b..489f7aa3 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusAttendanceService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusAttendanceService.java @@ -44,6 +44,10 @@ public interface IBusAttendanceService extends IService{ */ List listAttendanceMonthListByUserId(BusAttendanceMonthByUserIdReq req); + /** + * 统计用户每月考勤 + */ + BusAttendanceMonthByUserIdCountVo countAttendanceMonthListByUserId(BusAttendanceMonthByUserIdReq req); List subListAttendanceMonthListByUserId(BusAttendanceMonthByUserIdReq req); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectTeamService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectTeamService.java index d686dd09..daef99f4 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectTeamService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/IBusProjectTeamService.java @@ -11,10 +11,7 @@ import org.dromara.project.domain.BusProjectTeam; import org.dromara.project.domain.dto.projectteam.BusProjectTeamCreateReq; import org.dromara.project.domain.dto.projectteam.BusProjectTeamQueryReq; import org.dromara.project.domain.dto.projectteam.BusProjectTeamUpdateReq; -import org.dromara.project.domain.vo.projectteam.BusProjectTeamAppVo; -import org.dromara.project.domain.vo.projectteam.BusProjectTeamForemanVo; -import org.dromara.project.domain.vo.projectteam.BusProjectTeamVo; -import org.dromara.project.domain.vo.projectteam.TeamManageVo; +import org.dromara.project.domain.vo.projectteam.*; import org.dromara.quality.domain.vo.qualityinspection.QltQualityInspectionVo; import org.springframework.web.bind.annotation.PathVariable; @@ -129,4 +126,7 @@ public interface IBusProjectTeamService extends IService { List getManager(Long teamId); List selectByPunchRangeIn(List punchRangeList); + + + BusProjectTeamCountVo teamCount(BusProjectTeamQueryReq req); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java index 3bf263af..1e5f4cd1 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusAttendanceServiceImpl.java @@ -62,6 +62,7 @@ import java.math.BigDecimal; import java.time.*; import java.time.format.DateTimeFormatter; import java.time.temporal.TemporalAdjusters; +import java.time.temporal.ValueRange; import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; @@ -179,10 +180,29 @@ public class BusAttendanceServiceImpl extends ServiceImpl> dateListMap = this.lambdaQuery() + List list = this.lambdaQuery() .eq(BusAttendance::getUserId, constructionUser.getSysUserId()) .between(BusAttendance::getClockDate, start, end) - .list() + .list(); + //转成Long + // 转换逻辑:将字符串解析为Long + List longList = list.stream() + .filter(attendance -> StringUtils.isNotBlank(attendance.getFacePic())) // 过滤空字符串 + .map(attendance -> { + try { + // 假设facePic是纯数字字符串(如"123456") + return Long.parseLong(attendance.getFacePic()); + } catch (NumberFormatException e) { + // 处理转换失败的情况(如非数字字符串) + // 可选:抛异常/返回null/忽略(此处示例返回null,后续可过滤) + return null; + } + }) + .filter(java.util.Objects::nonNull) // 过滤转换失败的null + .collect(Collectors.toList()); + List sysOssVos = ossService.listByIds(longList); + Map ossMap = sysOssVos.stream().collect(Collectors.toMap(SysOssVo::getOssId, SysOssVo::getUrl)); + Map> dateListMap = list .stream().collect(Collectors.groupingBy(BusAttendance::getClockDate)); // 遍历每天,计算考勤状态 List respList = new ArrayList<>(); @@ -190,6 +210,10 @@ public class BusAttendanceServiceImpl extends ServiceImpl attendanceListByDayList = new ArrayList<>(); String clockInStatus = null; String clockOutStatus = null; @@ -198,6 +222,12 @@ public class BusAttendanceServiceImpl extends ServiceImpl list = this.lambdaQuery() + .eq(BusAttendance::getUserId, constructionUser.getSysUserId()) + .between(BusAttendance::getClockDate, start, end) + .list(); + BusAttendanceMonthByUserIdCountVo vo = new BusAttendanceMonthByUserIdCountVo(); + long count = list.stream().filter(attendance -> ATTENDANCE_LIST.contains(attendance.getClockType())) + .map(BusAttendance::getClockDate).distinct().count(); + vo.setFull(count); + + long late = list.stream().filter(attendance -> LATE.getValue().equals(attendance.getClockStatus()) || LEAVEEARLY.getValue().equals(attendance.getClockStatus())).count(); + vo.setHalf(late); + long leave = list.stream().filter(attendance -> LEAVE.getValue().equals(attendance.getClockStatus())).count(); + vo.setLeave(leave); + return vo; + } + @Override public List subListAttendanceMonthListByUserId(BusAttendanceMonthByUserIdReq req) { Long userId = req.getUserId(); @@ -2006,6 +2077,7 @@ public class BusAttendanceServiceImpl extends ServiceImpl wrapper.between(SubConstructionUser::getLeaveDate, startTime, endTime).or() .isNull(SubConstructionUser::getLeaveDate)) .eq(dto.getTeamId() != null, SubConstructionUser::getTeamId, dto.getTeamId()) + .eq(dto.getUserId() != null, SubConstructionUser::getSysUserId, dto.getUserId()) .eq(StrUtil.isNotBlank(dto.getTypeOfWork()), SubConstructionUser::getTypeOfWork, dto.getTypeOfWork()) .like(StringUtils.isNotBlank(dto.getUserName()), SubConstructionUser::getUserName, dto.getUserName()) ); @@ -2298,7 +2370,13 @@ public class BusAttendanceServiceImpl extends ServiceImpl teamMemberIds = projectTeamMemberList.stream().map(BusProjectTeamMember::getMemberId) .distinct().toList(); - List userVos = userService.selectUserByIds(teamMemberIds, null); - Map userVoMap = userVos.stream().collect(Collectors.toMap(SysUserVo::getUserId, userVo -> userVo)); + List list = constructionUserService.lambdaQuery().in(SubConstructionUser::getSysUserId, teamMemberIds).list(); + Map constructionUserMap = list.stream().collect(Collectors.toMap(SubConstructionUser::getSysUserId, constructionUser -> constructionUser)); +// List userVos = userService.selectUserByIds(teamMemberIds, null); +// Map userVoMap = userVos.stream().collect(Collectors.toMap(SysUserVo::getUserId, userVo -> userVo)); // 填充信息 List projectTeamMemberVoList = projectTeamMemberList.stream().map(projectTeamMember -> { BusProjectTeamMemberVo projectTeamMemberVo = new BusProjectTeamMemberVo(); BeanUtils.copyProperties(projectTeamMember, projectTeamMemberVo); Long memberId = projectTeamMember.getMemberId(); String memberName = null; - if (userVoMap.containsKey(memberId)) { - memberName = userVoMap.get(memberId).getNickName(); + if (constructionUserMap.containsKey(memberId)) { + SubConstructionUser constructionUser = constructionUserMap.get(memberId); + memberName = constructionUser.getUserName(); + projectTeamMemberVo.setTypeOfWork(constructionUser.getTypeOfWork()); + projectTeamMemberVo.setPhone(constructionUser.getPhone()); + projectTeamMemberVo.setEntryDate(constructionUser.getEntryDate()); } projectTeamMemberVo.setMemberName(memberName); return projectTeamMemberVo; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectTeamServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectTeamServiceImpl.java index 344cc68b..6c7249d5 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectTeamServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/project/service/impl/BusProjectTeamServiceImpl.java @@ -19,20 +19,15 @@ import org.dromara.contractor.domain.SubConstructionUser; import org.dromara.contractor.domain.SubContractor; import org.dromara.contractor.service.ISubConstructionUserService; import org.dromara.contractor.service.ISubContractorService; -import org.dromara.project.domain.BusProject; -import org.dromara.project.domain.BusProjectPunchrange; -import org.dromara.project.domain.BusProjectTeam; -import org.dromara.project.domain.BusProjectTeamMember; +import org.dromara.project.domain.*; import org.dromara.project.domain.dto.projectteam.BusProjectTeamCreateReq; import org.dromara.project.domain.dto.projectteam.BusProjectTeamQueryReq; import org.dromara.project.domain.dto.projectteam.BusProjectTeamUpdateReq; +import org.dromara.project.domain.enums.BusAttendanceClockStatusEnum; import org.dromara.project.domain.enums.BusProjectTeamMemberPostEnum; import org.dromara.project.domain.vo.projectteam.*; import org.dromara.project.mapper.BusProjectTeamMapper; -import org.dromara.project.service.IBusProjectPunchrangeService; -import org.dromara.project.service.IBusProjectService; -import org.dromara.project.service.IBusProjectTeamMemberService; -import org.dromara.project.service.IBusProjectTeamService; +import org.dromara.project.service.*; import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.service.ISysUserService; import org.springframework.beans.BeanUtils; @@ -40,6 +35,7 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; @@ -74,6 +70,11 @@ public class BusProjectTeamServiceImpl extends ServiceImpl selectByPunchRangeIn(List punchRangeList) { return baseMapper.selectByPunchRangeIn(punchRangeList); } + + + @Override + public BusProjectTeamCountVo teamCount(BusProjectTeamQueryReq req) { + BusProjectTeamCountVo vo = new BusProjectTeamCountVo(); + List list = lambdaQuery().eq(BusProjectTeam::getProjectId, req.getProjectId()).list(); + vo.setTotal(list.size()); + List list1 = list.stream().map(BusProjectTeam::getId).toList(); + if(CollUtil.isNotEmpty(list1)){ + long count = constructionUserService.count(Wrappers.lambdaQuery() + .eq(SubConstructionUser::getProjectId, req.getProjectId()) + .in(SubConstructionUser::getTeamId, list1) + ); + vo.setPeopleNumber(count); + } + long count = list.stream().filter(projectTeam -> "0".equals(projectTeam.getIsClockIn())).count(); + vo.setLimitNumber(count); + + + List list2 = attendanceService.lambdaQuery() + .eq(BusAttendance::getProjectId, req.getProjectId()) + .eq(BusAttendance::getClockDate, LocalDate.now()) + .in(BusAttendance::getClockStatus, BusAttendanceClockStatusEnum.ATTENDANCE_LIST) + .list(); + List list11 = list2.stream().map(BusAttendance::getUserId).toList(); + if(CollUtil.isNotEmpty(list11)){ + long count1 = constructionUserService.count(Wrappers.lambdaQuery() + .eq(SubConstructionUser::getProjectId, req.getProjectId()) + .in(SubConstructionUser::getTeamId, list11) + ); + vo.setPeopleNumber(count1); + } + return vo; + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/QltQualityConstructionLog.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/QltQualityConstructionLog.java index dc0f3e94..76a4f904 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/QltQualityConstructionLog.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/QltQualityConstructionLog.java @@ -34,6 +34,11 @@ public class QltQualityConstructionLog extends BaseEntity { */ private Long projectId; + /** + * 类型 1-文字,2-文件 + */ + private String type; + /** * 标题 */ @@ -44,6 +49,11 @@ public class QltQualityConstructionLog extends BaseEntity { */ private LocalDate happenDate; + /** + * 结束日期 + */ + private LocalDate endDate; + /** * 生产情况 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/dto/qualityconstructionlog/QltQualityConstructionLogCreateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/dto/qualityconstructionlog/QltQualityConstructionLogCreateReq.java index aecdda4c..8c98031c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/dto/qualityconstructionlog/QltQualityConstructionLogCreateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/dto/qualityconstructionlog/QltQualityConstructionLogCreateReq.java @@ -21,11 +21,21 @@ public class QltQualityConstructionLogCreateReq implements Serializable { */ private Long projectId; + /** + * 类型 1-文字,2-文件 + */ + private String type; + /** * 发生日期 */ private LocalDate happenDate; + /** + * 结束日期 + */ + private LocalDate endDate; + /** * 生产情况 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/dto/qualityinspection/QltQualityInspectionUpdateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/dto/qualityinspection/QltQualityInspectionUpdateReq.java index ebb930f4..ae9882c6 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/dto/qualityinspection/QltQualityInspectionUpdateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/dto/qualityinspection/QltQualityInspectionUpdateReq.java @@ -57,6 +57,15 @@ public class QltQualityInspectionUpdateReq implements Serializable { */ private String inspectionImgFile; + /** + * 整改单位(1分包 2班组) + */ + private String rectificationUnit; + + /** + * 整改单位id + */ + private Long rectificationId; /** * 班组id diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/vo/qualityconstructionlog/QltQualityConstructionLogVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/vo/qualityconstructionlog/QltQualityConstructionLogVo.java index cb0b3bbd..235850f3 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/vo/qualityconstructionlog/QltQualityConstructionLogVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/domain/vo/qualityconstructionlog/QltQualityConstructionLogVo.java @@ -40,6 +40,11 @@ public class QltQualityConstructionLogVo implements Serializable { */ private Long projectId; + /** + * 类型 1-文字,2-文件 + */ + private String type; + /** * 项目名称 */ @@ -52,6 +57,12 @@ public class QltQualityConstructionLogVo implements Serializable { @ExcelProperty(value = "发生日期") private LocalDate happenDate; + + /** + * 结束日期 + */ + private LocalDate endDate; + /** * 生产情况 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/service/impl/QltQualityConstructionLogServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/service/impl/QltQualityConstructionLogServiceImpl.java index 8a57c237..85b34e1d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/service/impl/QltQualityConstructionLogServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/quality/service/impl/QltQualityConstructionLogServiceImpl.java @@ -224,6 +224,8 @@ public class QltQualityConstructionLogServiceImpl extends ServiceImpl { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/producer/RabbitProducer.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/producer/RabbitProducer.java new file mode 100644 index 00000000..13dcbe08 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/producer/RabbitProducer.java @@ -0,0 +1,51 @@ +package org.dromara.rabbitmq.producer; + +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.dromara.rabbitmq.config.RabbitProperties; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.stereotype.Component; + +/** + * @author lilemy + * @date 2025-12-05 11:40 + */ +@Slf4j +@Component +public class RabbitProducer { + + @Resource + private RabbitTemplate rabbitTemplate; + + @Resource + private RabbitProperties rabbitProperties; + + /** + * 发送消息 + * + * @param message 消息 + */ + public void send(String message) { + rabbitTemplate.convertAndSend(rabbitProperties.getExchangeName(), rabbitProperties.getRoutingKey(), message); + log.info("【生产者】Message send: {}", message); + } + + /** + * 发送延迟消息 + * + * @param message 消息 + * @param delayMs 延迟时间(毫秒) + */ + public void sendDelayMessage(String message, long delayMs) { + rabbitTemplate.convertAndSend( + rabbitProperties.getDelayExchangeName(), + rabbitProperties.getDelayRoutingKey(), + message, + message1 -> { + message1.getMessageProperties().setDelayLong(delayMs); + return message1; + } + ); + log.info("【生产者】Delay Message send: {} delay: {}ms", message, delayMs); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/service/IMqDelayTaskService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/service/IMqDelayTaskService.java new file mode 100644 index 00000000..5842da36 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/service/IMqDelayTaskService.java @@ -0,0 +1,27 @@ +package org.dromara.rabbitmq.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.rabbitmq.domain.MqDelayTask; + +/** + * 延迟任务Service接口 + * + * @author lilemy + * @date 2025-12-05 + */ +public interface IMqDelayTaskService extends IService { + + /** + * 添加延迟任务 + * + * @param task 延迟任务 + */ + void addDelayTask(MqDelayTask task); + + /** + * 执行任务 + * + * @param id 主键id + */ + void executeTask(Long id); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/service/impl/MqDelayTaskServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/service/impl/MqDelayTaskServiceImpl.java new file mode 100644 index 00000000..46d9f292 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/rabbitmq/service/impl/MqDelayTaskServiceImpl.java @@ -0,0 +1,115 @@ +package org.dromara.rabbitmq.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.annotation.Resource; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.rabbitmq.domain.MqDelayTask; +import org.dromara.rabbitmq.enums.MqDelayTaskTypeEnum; +import org.dromara.rabbitmq.mapper.MqDelayTaskMapper; +import org.dromara.rabbitmq.producer.RabbitProducer; +import org.dromara.rabbitmq.service.IMqDelayTaskService; +import org.dromara.safety.service.IHazardHiddenDangerRectifyService; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; + +import java.time.Duration; +import java.time.LocalDateTime; +import java.time.ZoneId; + +/** + * 延迟任务Service业务层处理 + * + * @author lilemy + * @date 2025-12-05 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class MqDelayTaskServiceImpl extends ServiceImpl + implements IMqDelayTaskService { + + @Resource + private RabbitProducer rabbitProducer; + + @Lazy + @Resource + private IHazardHiddenDangerRectifyService hazardHiddenDangerRectifyService; + + /** + * 添加延迟任务 + * + * @param task 延迟任务 + */ + @Override + public void addDelayTask(MqDelayTask task) { + String bizType = task.getBizType(); + Long bizId = task.getBizId(); + LocalDateTime executeTime = task.getExecuteTime(); + if (StringUtils.isBlank(bizType) || bizId == null || executeTime == null) { + throw new ServiceException("参数错误"); + } + // 保存延迟任务 + boolean save = this.save(task); + if (!save) { + throw new ServiceException("添加延迟任务失败"); + } + // 计算超时时间 + ZoneId zone = ZoneId.systemDefault(); + long diffMillis = Duration.between( + LocalDateTime.now().atZone(zone), + executeTime.atZone(zone) + ).toMillis(); + if (diffMillis <= 0) { + throw new ServiceException("延迟时间不能小于当前时间"); + } + // 添加延迟任务 + rabbitProducer.sendDelayMessage(String.valueOf(task.getId()), diffMillis); + } + + /** + * 执行任务 + * + * @param id 主键id + */ + @Override + public void executeTask(Long id) { + MqDelayTask task = this.getById(id); + if (task == null) { + return; + } + if (task.getStatus() == 1 || task.getStatus() == 2) { + return; + } + try { + // 执行中 + task.setStatus(1); + this.updateById(task); + // 业务逻辑:发送通知 + String bizType = task.getBizType(); + MqDelayTaskTypeEnum type = MqDelayTaskTypeEnum.getByType(bizType); + switch (type) { + case HIDDEN_DANGER -> hazardHiddenDangerRectifyService.sendTimeoutNotify(task.getBizId()); + case null, default -> { + } + } + // 成功 + task.setStatus(2); + this.updateById(task); + } catch (Exception e) { + log.error("执行任务失败:{}", e.getMessage(), e); + // 更新失败状态 + task.setRetryCount(task.getRetryCount() + 1); + task.setFailReason(e.getMessage()); + task.setStatus(3); + this.updateById(task); + // 重试机制 + if (task.getRetryCount() < task.getMaxRetry()) { + // 1分钟后重试 + rabbitProducer.sendDelayMessage(String.valueOf(id), 60 * 1000); + } + } + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetyPublicController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetyPublicController.java new file mode 100644 index 00000000..4e05b69f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetyPublicController.java @@ -0,0 +1,57 @@ +package org.dromara.safety.accident.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +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.excel.utils.ExcelUtil; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.contractor.domain.vo.contractor.SubContractorManagerVo; +import org.dromara.contractor.service.ISubContractorService; +import org.dromara.safety.accident.domain.bo.HseSafetySgdcBo; +import org.dromara.safety.accident.domain.vo.HseSafetySgdcVo; +import org.dromara.safety.accident.domain.vo.SgsbCountVo; +import org.dromara.safety.accident.service.IHseSafetySgdcService; +import org.dromara.system.domain.bo.SysUserBo; +import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.service.ISysUserService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 安全-事故调查 + * + * @author Lion Li + * @date 2025-12-05 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/accident/public") +public class HseSafetyPublicController extends BaseController { + + private final ISysUserService userService; + + + /** + * 获取用户列表 + */ + @GetMapping("/getUserList") + public TableDataInfo list(SysUserBo user, PageQuery pageQuery) { + return userService.selectPageUserList(user, pageQuery); + } + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgdanjlController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgdanjlController.java new file mode 100644 index 00000000..fef382ac --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgdanjlController.java @@ -0,0 +1,116 @@ +package org.dromara.safety.accident.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.safety.accident.domain.bo.HseSafetySgzgbhBo; +import org.dromara.safety.accident.domain.vo.HseSafetySgzgbhHeadVo; +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.safety.accident.domain.vo.HseSafetySgdanjlVo; +import org.dromara.safety.accident.domain.bo.HseSafetySgdanjlBo; +import org.dromara.safety.accident.service.IHseSafetySgdanjlService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 安全-事故档案记录 + * + * @author Lion Li + * @date 2025-12-05 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/accident/safetySgdanjl") +public class HseSafetySgdanjlController extends BaseController { + + private final IHseSafetySgdanjlService hseSafetySgdanjlService; + + /** + * 头部数据返回 + */ +// @SaCheckPermission("jxzgbh:yhzgbh:list") +// @GetMapping("/getListHead") +// public R getListHead(HseSafetySgzgbhBo bo) { +// return R.ok(hseSafetySgzgbhService.getListHead(bo)); +// } + + /** + * 查询安全-事故档案记录列表 + */ + @SaCheckPermission("accident:safetySgdanjl:list") + @GetMapping("/list") + public TableDataInfo list(HseSafetySgdanjlBo bo, PageQuery pageQuery) { + return hseSafetySgdanjlService.queryPageList(bo, pageQuery); + } + + /** + * 导出安全-事故档案记录列表 + */ + @SaCheckPermission("accident:safetySgdanjl:export") + @Log(title = "安全-事故档案记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HseSafetySgdanjlBo bo, HttpServletResponse response) { + List list = hseSafetySgdanjlService.queryList(bo); + ExcelUtil.exportExcel(list, "安全-事故档案记录", HseSafetySgdanjlVo.class, response); + } + + /** + * 获取安全-事故档案记录详细信息 + * + * @param id 主键 + */ +// @SaCheckPermission("accident:safetySgdanjl:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(hseSafetySgdanjlService.queryById(id)); + } + + /** + * 新增安全-事故档案记录 + */ + @SaCheckPermission("accident:safetySgdanjl:add") + @Log(title = "安全-事故档案记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody HseSafetySgdanjlBo bo) { + return toAjax(hseSafetySgdanjlService.insertByBo(bo)); + } + + /** + * 修改安全-事故档案记录 + */ + @SaCheckPermission("accident:safetySgdanjl:edit") + @Log(title = "安全-事故档案记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody HseSafetySgdanjlBo bo) { + return toAjax(hseSafetySgdanjlService.updateByBo(bo)); + } + + /** + * 删除安全-事故档案记录 + * + * @param ids 主键串 + */ + @SaCheckPermission("accident:safetySgdanjl:remove") + @Log(title = "安全-事故档案记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hseSafetySgdanjlService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgdcController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgdcController.java new file mode 100644 index 00000000..4d19e993 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgdcController.java @@ -0,0 +1,147 @@ +package org.dromara.safety.accident.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +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.excel.utils.ExcelUtil; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.contractor.domain.vo.contractor.SubContractorManagerVo; +import org.dromara.contractor.service.ISubContractorService; +import org.dromara.project.domain.vo.projectteam.BusProjectTeamForemanVo; +import org.dromara.project.service.IBusProjectTeamService; +import org.dromara.safety.accident.domain.bo.HseSafetySgdcBo; +import org.dromara.safety.accident.domain.vo.HseSafetySgdcVo; +import org.dromara.safety.accident.domain.vo.SgsbCountVo; +import org.dromara.safety.accident.service.IHseSafetySgdcService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 安全-事故调查 + * + * @author Lion Li + * @date 2025-12-05 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/accident/safetySgdc") +public class HseSafetySgdcController extends BaseController { + + private final IHseSafetySgdcService hseSafetySgdcService; + + private final IBusProjectTeamService busProjectTeamService; + + private final ISubContractorService contractorService; + + + /** + * 根据项目id查询项目班组班组长信息列表 + */ + @SaCheckPermission("accident:safetySgdc:edit") + @GetMapping("/listForeman/{projectId}") + public R> listForeman(@NotNull(message = "项目id不能为空") + @PathVariable Long projectId) { + return R.ok(busProjectTeamService.queryForemanListByProjectId(projectId)); + } + + + /** + * 根据项目id查询分包方管理人员信息列表 + */ + @SaCheckPermission("accident:safetySgdc:edit") + @GetMapping("/listManager/{projectId}") + public R> listManager(@NotNull(message = "项目id不能为空") + @PathVariable Long projectId) { + return R.ok(contractorService.queryManagerListByProjectId(projectId)); + } + + /** + * 查询安全-事故调查列表 + */ + @SaCheckPermission("accident:safetySgdc:list") + @GetMapping("/list") + public TableDataInfo list(HseSafetySgdcBo bo, PageQuery pageQuery) { + return hseSafetySgdcService.queryPageList(bo, pageQuery); + } + + /** + * 导出安全-事故调查列表 + */ + @SaCheckPermission("accident:safetySgdc:export") + @Log(title = "安全-事故调查", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HseSafetySgdcBo bo, HttpServletResponse response) { + List list = hseSafetySgdcService.queryList(bo); + ExcelUtil.exportExcel(list, "安全-事故调查", HseSafetySgdcVo.class, response); + } + + /** + * 获取安全-事故调查详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("accident:safetySgdc:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(hseSafetySgdcService.queryById(id)); + } + + /** + * 新增安全-事故调查 + */ + @SaCheckPermission("accident:safetySgdc:add") + @Log(title = "安全-事故调查", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody HseSafetySgdcBo bo) { + return toAjax(hseSafetySgdcService.insertByBo(bo)); + } + + /** + * 修改安全-事故调查 + */ + @SaCheckPermission("accident:safetySgdc:edit") + @Log(title = "安全-事故调查", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody HseSafetySgdcBo bo) { + return toAjax(hseSafetySgdcService.updateByBo(bo)); + } + + /** + * 删除安全-事故调查 + * + * @param ids 主键串 + */ + @SaCheckPermission("accident:safetySgdc:remove") + @Log(title = "安全-事故调查", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hseSafetySgdcService.deleteWithValidByIds(List.of(ids), true)); + } + + /** + * 统计数据 + */ + @SaCheckPermission("accident:safetySgdc:list") + @GetMapping("/getCountValue/{projectId}") + public R getCountValue(@PathVariable Long projectId) { + return R.ok(hseSafetySgdcService.getListCount(projectId)); + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgsbController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgsbController.java new file mode 100644 index 00000000..f8fc286b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgsbController.java @@ -0,0 +1,117 @@ +package org.dromara.safety.accident.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +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.excel.utils.ExcelUtil; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.safety.accident.domain.bo.HseSafetySgsbBo; +import org.dromara.safety.accident.domain.vo.HseSafetySgsbVo; +import org.dromara.safety.accident.domain.vo.SgsbCountVo; +import org.dromara.safety.accident.service.IHseSafetySgsbService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 安全-事故上报 + * + * @author Lion Li + * @date 2025-12-05 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/accident/safetySgsb") +public class HseSafetySgsbController extends BaseController { + + private final IHseSafetySgsbService hseSafetySgsbService; + + /** + * 查询安全-事故上报列表 + */ + @SaCheckPermission("accident:safetySgsb:list") + @GetMapping("/list") + public TableDataInfo list(HseSafetySgsbBo bo, PageQuery pageQuery) { + return hseSafetySgsbService.queryPageList(bo, pageQuery); + } + + /** + * 导出安全-事故上报列表 + */ + @SaCheckPermission("accident:safetySgsb:export") + @Log(title = "安全-事故上报", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HseSafetySgsbBo bo, HttpServletResponse response) { + List list = hseSafetySgsbService.queryList(bo); + ExcelUtil.exportExcel(list, "安全-事故上报", HseSafetySgsbVo.class, response); + } + + /** + * 获取安全-事故上报详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("accident:safetySgsb:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(hseSafetySgsbService.queryById(id)); + } + + /** + * 新增安全-事故上报 + */ + @SaCheckPermission("accident:safetySgsb:add") + @Log(title = "安全-事故上报", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody HseSafetySgsbBo bo) { + return toAjax(hseSafetySgsbService.insertByBo(bo)); + } + + /** + * 修改安全-事故上报 + */ + @SaCheckPermission("accident:safetySgsb:edit") + @Log(title = "安全-事故上报", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody HseSafetySgsbBo bo) { + return toAjax(hseSafetySgsbService.updateByBo(bo)); + } + + /** + * 删除安全-事故上报 + * + * @param ids 主键串 + */ + @SaCheckPermission("accident:safetySgsb:remove") + @Log(title = "安全-事故上报", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hseSafetySgsbService.deleteWithValidByIds(List.of(ids), true)); + } + + /** + * 获取统计数据 + */ + @GetMapping("/getCount/{projectId}") + @SaCheckPermission("accident:safetySgsb:list") + public R getCount(@PathVariable Long projectId) { + return R.ok(hseSafetySgsbService.getCount(projectId)); + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgzgbhController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgzgbhController.java new file mode 100644 index 00000000..77e4aac8 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/controller/HseSafetySgzgbhController.java @@ -0,0 +1,153 @@ +package org.dromara.safety.accident.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.mechanical.jxzgbh.domain.bo.JxYhzgbhBo; +import org.dromara.mechanical.jxzgbh.domain.vo.JxZgxxHeadVo; +import org.dromara.safety.accident.domain.bo.HseSafetyFcxxBo; +import org.dromara.safety.accident.domain.bo.HseSafetyZgxxBo; +import org.dromara.safety.accident.domain.vo.HseSafetySgzgbhHeadVo; +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.safety.accident.domain.vo.HseSafetySgzgbhVo; +import org.dromara.safety.accident.domain.bo.HseSafetySgzgbhBo; +import org.dromara.safety.accident.service.IHseSafetySgzgbhService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 安全-事故整改闭环 + * + * @author Lion Li + * @date 2025-12-05 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/accident/safetySgzgbh") +public class HseSafetySgzgbhController extends BaseController { + + private final IHseSafetySgzgbhService hseSafetySgzgbhService; + + /** + * 头部数据返回 + */ + @SaCheckPermission("accident:safetySgzgbh:list") + @GetMapping("/getListHead") + public R getListHead(HseSafetySgzgbhBo bo) { + return R.ok(hseSafetySgzgbhService.getListHead(bo)); + } + /** + * 查询安全-事故整改闭环列表 + */ + @SaCheckPermission("accident:safetySgzgbh:list") + @GetMapping("/list") + public TableDataInfo list(HseSafetySgzgbhBo bo, PageQuery pageQuery) { + return hseSafetySgzgbhService.queryPageList(bo, pageQuery); + } + /** + * 查询安全-事故整改闭环列表 + */ + @SaCheckPermission("accident:safetySgzgbh:add") + @GetMapping("/getNoPass") + public R getNoPass(HseSafetySgzgbhBo bo) { + String noPass = hseSafetySgzgbhService.getNoPass(bo); + return R.ok(noPass); + } + + /** + * 导出安全-事故整改闭环列表 + */ +// @SaCheckPermission("accident:safetySgzgbh:export") +// @Log(title = "安全-事故整改闭环", businessType = BusinessType.EXPORT) +// @PostMapping("/export") +// public void export(HseSafetySgzgbhBo bo, HttpServletResponse response) { +// List list = hseSafetySgzgbhService.queryList(bo); +// ExcelUtil.exportExcel(list, "安全-事故整改闭环", HseSafetySgzgbhVo.class, response); +// } + + /** + * 获取安全-事故整改闭环详细信息 + * + * @param id 主键 + */ +// @SaCheckPermission("accident:safetySgzgbh:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(hseSafetySgzgbhService.queryById(id)); + } + + /** + * 新增安全-事故整改闭环 + */ +// @SaCheckPermission("accident:safetySgzgbh:add") +// @Log(title = "安全-事故整改闭环", businessType = BusinessType.INSERT) +// @RepeatSubmit() +// @PostMapping() +// public R add(@Validated(AddGroup.class) @RequestBody HseSafetySgzgbhBo bo) { +// return toAjax(hseSafetySgzgbhService.insertByBo(bo)); +// } + + /** + * 新增整改信息 + * @param bo + * @return + */ + @SaCheckPermission("accident:safetySgzgbh:add") + @Log(title = "安全-事故整改闭环", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/addZGxx") + public R addZGxx(@Validated(AddGroup.class) @RequestBody HseSafetyZgxxBo bo) { + return toAjax(hseSafetySgzgbhService.addZGxx(bo)); + } + + /** + * 新增复查信息 + * @param bo + * @return + */ + @SaCheckPermission("accident:safetySgzgbh:add") + @Log(title = "安全-事故整改闭环", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/addFCxx") + public R addFCxx(@Validated(AddGroup.class) @RequestBody HseSafetyFcxxBo bo) { + return toAjax(hseSafetySgzgbhService.addFCxx(bo)); + } + + /** + * 修改安全-事故整改闭环 + */ +// @SaCheckPermission("accident:safetySgzgbh:edit") +// @Log(title = "安全-事故整改闭环", businessType = BusinessType.UPDATE) +// @RepeatSubmit() +// @PutMapping() +// public R edit(@Validated(EditGroup.class) @RequestBody HseSafetySgzgbhBo bo) { +// return toAjax(hseSafetySgzgbhService.updateByBo(bo)); +// } + + /** + * 删除安全-事故整改闭环 + * + * @param ids 主键串 + */ +// @SaCheckPermission("accident:safetySgzgbh:remove") +// @Log(title = "安全-事故整改闭环", businessType = BusinessType.DELETE) +// @DeleteMapping("/{ids}") +// public R remove(@NotEmpty(message = "主键不能为空") +// @PathVariable Long[] ids) { +// return toAjax(hseSafetySgzgbhService.deleteWithValidByIds(List.of(ids), true)); +// } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetyFcxx.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetyFcxx.java new file mode 100644 index 00000000..c515fd70 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetyFcxx.java @@ -0,0 +1,80 @@ +package org.dromara.safety.accident.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 安全事故复查信息对象 hse_safety_fcxx + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hse_safety_fcxx") +public class HseSafetyFcxx extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 安全事故整改与闭环ID + */ + private Long masterId; + + /** + * 整改ID + */ + private Long zgId; + + /** + * 复查人 + */ + private Long review; + + /** + * 复查日期 + */ + private LocalDate reviewDate; + + /** + * 复查状态 + */ + private String reviewState; + + /** + * 不通过原因 + */ + private String notPassCause; + + /** + * 复查意见详情 + */ + private String reviewOpinionParticulars; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + /** + * pdf文件(多个文件逗号分隔) + */ + private String pdfId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgdanjl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgdanjl.java new file mode 100644 index 00000000..47dc66f3 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgdanjl.java @@ -0,0 +1,123 @@ +package org.dromara.safety.accident.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +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; + +/** + * 安全-事故档案记录对象 hse_safety_sgdanjl + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hse_safety_sgdanjl") +public class HseSafetySgdanjl extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 档案编号 + */ + private String danbh; + + /** + * 关联项目 + */ + private String project; + + /** + * 事故编号 + */ + private String sgbh; + + /** + * 事发时间 + */ + private Date sfsj; + + /** + * 事发地点 + */ + private String sfdd; + + /** + * 事故类型 + */ + private String sglx; + + /** + * 事故等级 + */ + private String sgdj; + + /** + * 事故原因 + */ + private String sgyy; + + /** + * 事故详情 + */ + private String sgxq; + + /** + * 损失情况 + */ + private String ssqk; + + /** + * 调查详情 + */ + private String dcxq; + + /** + * 整改与复查详情 + */ + private String zgfcxq; + + /** + * 档案管理人 + */ + private String danglr; + + /** + * 档案保存期限 + */ + private String storageLife; + + /** + * 电子档案存储位置 + */ + private String dzdanccwz; + + /** + * 纸质档案存放位置 + */ + private String zzdancfwz; + + /** + * 档案备注 + */ + private String remarks; + + /** + * 审核状态 + */ + private String shzt; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgdc.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgdc.java new file mode 100644 index 00000000..7b7dcf3b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgdc.java @@ -0,0 +1,167 @@ +package org.dromara.safety.accident.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; +import java.util.Date; + +/** + * 安全-事故调查对象 hse_safety_sgdc + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hse_safety_sgdc") +public class HseSafetySgdc extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 事故关联项目ID + */ + private Long projectId; + + /** + * 调查编号 + */ + private String dcbh; + + /** + * 关联事故id + */ + private Long sgId; + + /** + * 调查小组 + */ + private String dcxz; + + /** + * 调查开始时间 + */ + private Date dckssj; + + /** + * 调查结束时间 + */ + private Date dcjssj; + + /** + * 事故详细经过 + */ + private String sgxxjg; + + /** + * 直接原因 + */ + private String zjjy; + + /** + * 间接原因 + */ + private String jjyy; + + /** + * 证据材料说明 + */ + private String zjcl; + + /** + * 责任部门 + */ + private Long zrbm; + + /** + * 主要负责人 + */ + private Long zyfzr; + + /** + * 次要负责人 + */ + private Long cyfzr; + + /** + * 责任划分 + */ + private String zrhf; + + /** + * 责任认定说明 + */ + private String zrrdsm; + + /** + * 整改措施内容 + */ + private String zgcsnr; + + /** + * 1班组长2分包人 + */ + private String zgfzrType; + + /** + * 整改负责人 + */ + private Long zgfzr; + + /** + * 整改优先级(暂时废弃) + */ + private String zgyxj; + + /** + * 整改时限 + */ + private Date zgsx; + + /** + * 复查人员 + */ + private Long fcry; + + /** + * 整改验收标准 + */ + private String zgysbz; + + /** + * 处理意见 + */ + private String clyj; + + /** + * 调查负责人 + */ + private Long dcfzr; + + /** + * 多文件逗号分隔 + */ + private String file; + + /** + * 审核状态 + */ + private String shzt; + + /** + * 保存状态0草稿1提交 + */ + private String bczt; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgsb.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgsb.java new file mode 100644 index 00000000..ccdd00eb --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgsb.java @@ -0,0 +1,129 @@ +package org.dromara.safety.accident.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 安全-事故上报对象 hse_safety_sgsb + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hse_safety_sgsb") +public class HseSafetySgsb extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 关联项目 + */ + private Long projectId; + + /** + * 事故编号 + */ + private String sgbh; + + /** + * 事发时间 + */ + private Date sfsj; + + /** + * 事发地点 + */ + private String sfdd; + + /** + * 事故类型(1高空坠落2触电3火灾4机械伤害5物体打击6其他) + */ + private String sglx; + + /** + * 事故等级(1一般2较大3重大4特别重大) + */ + private String sgdj; + + /** + * 死亡人数 + */ + private Long swrs; + + /** + * 重伤人数 + */ + private Long zsrs; + + /** + * 轻伤人数 + */ + private Long qsrs; + + /** + * 人员信息 + */ + private String ryxx; + + /** + * 初步估算(万元-角分) + */ + private BigDecimal cbgs; + + /** + * 事故原因 + */ + private String sgyy; + + /** + * 联系方式 + */ + private String lxfs; + + /** + * 上报渠道 + */ + private String sbqd; + + /** + * 接收人 + */ + private Long jsr; + + /** + * 紧急措施 + */ + private String jjcs; + + /** + * 文件id逗号分隔 + */ + private String file; + + /** + * 审核状态 + */ + private String shzt; + + /** + * 事故状态(已上报,待调查,待整改,已整改,,已闭环) + */ + private String sgzt; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgzgbh.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgzgbh.java new file mode 100644 index 00000000..b3e96557 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetySgzgbh.java @@ -0,0 +1,132 @@ +package org.dromara.safety.accident.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; +import java.util.Date; + +/** + * 安全-事故整改闭环对象 hse_safety_sgzgbh + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hse_safety_sgzgbh") +public class HseSafetySgzgbh extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 整改闭环编号 + */ + private String zgbhbh; + + /** + * 关联项目 + */ + private Long projectId; + + /** + * 事故id + */ + private Long sgId; + + /** + * 事故编号 + */ + private String sgbh; + + /** + * 事发时间 + */ + private Date sfsj; + + /** + * 事发地点 + */ + private String sfdd; + + /** + * 事故类型 + */ + private String sglx; + + /** + * 事故等级 + */ + private String sgdj; + + /** + * 事故原因 + */ + private String sgyy; + + /** + * 调查人 + */ + private Long jsr; + + /** + * 上报人 + */ + private Long sbr; + + /** + * 上报时间 + */ + private Date sbsj; + + /** + * 整改状态 + */ + private String zgStatus; + + /** + * 整改人 + */ + private Long zgr; + + /** + * 复查状态 + */ + private String fcStatus; + + /** + * 复查人 + */ + private Long fcr; + + /** + * 最终闭环状态 + */ + private String reviewStatus; + + /** + * 审核状态 + */ + private String shzt; + + /** + * 是否完成(0未逾期,1未逾期已完成,2已逾期未完成,3已逾期已完成) + */ + private String isFinish; + + /** + * 调查id + */ + private Long dcId; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetyZgxx.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetyZgxx.java new file mode 100644 index 00000000..f611ae5d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/HseSafetyZgxx.java @@ -0,0 +1,76 @@ +package org.dromara.safety.accident.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDate; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +import java.io.Serial; + +/** + * 安全事故整改信息对象 hse_safety_zgxx + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hse_safety_zgxx") +public class HseSafetyZgxx extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 安全事故整改与闭环ID + */ + private Long masterId; + + /** + * 整改责任人 + */ + private Long abarbeitung; + + /** + * 整改开始日期 + */ + private LocalDate abarbeitungKsdate; + + /** + * 整改结束日期 + */ + private LocalDate abarbeitungJsdate; + + /** + * 整改措施 + */ + private String abarbeitungMeasure; + + /** + * 整改完成情况 + */ + private String abarbeitungAccomplish; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + + /** + * pdf文件(多个文件逗号分隔) + */ + private String pdfId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetyFcxxBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetyFcxxBo.java new file mode 100644 index 00000000..b0f305a1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetyFcxxBo.java @@ -0,0 +1,87 @@ +package org.dromara.safety.accident.domain.bo; + +import org.dromara.safety.accident.domain.HseSafetyFcxx; +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.time.LocalDate; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 安全事故复查信息业务对象 hse_safety_fcxx + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HseSafetyFcxx.class, reverseConvertGenerate = false) +public class HseSafetyFcxxBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 安全事故整改与闭环ID + */ + @NotNull(message = "安全事故整改与闭环ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long masterId; + + /** + * 整改ID + */ +// @NotNull(message = "整改ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long zgId; + + /** + * 复查人 + */ + @NotNull(message = "复查人不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long review; + + /** + * 复查日期 + */ + @NotNull(message = "复查日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate reviewDate; + + + + /** + * 复查状态 + */ + @NotBlank(message = "复查状态不能为空", groups = { AddGroup.class, EditGroup.class }) + private String reviewState; + + /** + * 不通过原因 + */ + private String notPassCause; + + /** + * 复查意见详情 + */ + @NotBlank(message = "复查意见详情不能为空", groups = { AddGroup.class, EditGroup.class }) + private String reviewOpinionParticulars; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + /** + * pdf文件(多个文件逗号分隔) + */ + private String pdfId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgdanjlBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgdanjlBo.java new file mode 100644 index 00000000..7a079d5d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgdanjlBo.java @@ -0,0 +1,123 @@ +package org.dromara.safety.accident.domain.bo; + +import org.dromara.safety.accident.domain.HseSafetySgdanjl; +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 com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 安全-事故档案记录业务对象 hse_safety_sgdanjl + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HseSafetySgdanjl.class, reverseConvertGenerate = false) +public class HseSafetySgdanjlBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 档案编号 + */ + private String danbh; + + /** + * 关联项目 + */ + private String project; + + /** + * 事故编号 + */ + private String sgbh; + + /** + * 事发时间 + */ + private Date sfsj; + + /** + * 事发地点 + */ + private String sfdd; + + /** + * 事故类型 + */ + private String sglx; + + /** + * 事故等级 + */ + private String sgdj; + + /** + * 事故原因 + */ + private String sgyy; + + /** + * 事故详情 + */ + private String sgxq; + + + /** + * 损失情况 + */ + private String ssqk; + + /** + * 调查详情 + */ + private String dcxq; + + /** + * 整改与复查详情 + */ + private String zgfcxq; + + /** + * 档案管理人 + */ + private String danglr; + + /** + * 档案保存期限 + */ + private String storageLife; + + /** + * 电子档案存储位置 + */ + private String dzdanccwz; + + /** + * 纸质档案存放位置 + */ + private String zzdancfwz; + + /** + * 档案备注 + */ + private String remarks; + + /** + * 审核状态 + */ + private String shzt; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgdcBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgdcBo.java new file mode 100644 index 00000000..4b3aaec5 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgdcBo.java @@ -0,0 +1,165 @@ +package org.dromara.safety.accident.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.safety.accident.domain.HseSafetySgdc; + +import java.util.Date; + +/** + * 安全-事故调查业务对象 hse_safety_sgdc + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HseSafetySgdc.class, reverseConvertGenerate = false) +public class HseSafetySgdcBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 事故关联项目ID + */ + private Long projectId; + + /** + * 调查编号 + */ + private String dcbh; + + /** + * 关联事故id + */ + private Long sgId; + + /** + * 调查小组 + */ + private String dcxz; + + /** + * 调查开始时间 + */ + private Date dckssj; + + /** + * 调查结束时间 + */ + private Date dcjssj; + + /** + * 事故详细经过 + */ + private String sgxxjg; + + /** + * 直接原因 + */ + private String zjjy; + + /** + * 间接原因 + */ + private String jjyy; + + /** + * 证据材料说明 + */ + private String zjcl; + + /** + * 责任部门 + */ + private Long zrbm; + + /** + * 主要负责人 + */ + private Long zyfzr; + + /** + * 次要负责人 + */ + private Long cyfzr; + + /** + * 责任划分 + */ + private String zrhf; + + /** + * 责任认定说明 + */ + private String zrrdsm; + + /** + * 整改措施内容 + */ + private String zgcsnr; + + /** + * 1班组长2分包人 + */ + private String zgfzrType; + + /** + * 整改负责人 + */ + private Long zgfzr; + + /** + * 整改优先级(暂时废弃) + */ + private String zgyxj; + + /** + * 整改时限 + */ + private Date zgsx; + + /** + * 复查人员 + */ + private Long fcry; + + /** + * 整改验收标准 + */ + private String zgysbz; + + /** + * 处理意见 + */ + private String clyj; + + /** + * 调查负责人 + */ + private Long dcfzr; + + /** + * 多文件逗号分隔 + */ + private String file; + + /** + * 审核状态 + */ + private String shzt; + + /** + * 保存状态0草稿1提交 + */ + private String bczt; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgdcxqReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgdcxqReq.java new file mode 100644 index 00000000..bc1bee4b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgdcxqReq.java @@ -0,0 +1,72 @@ +package org.dromara.safety.accident.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.safety.accident.domain.HseSafetySgdc; + +import java.io.Serializable; +import java.util.Date; + +/** + * 档案-事故调查信息 + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +public class HseSafetySgdcxqReq implements Serializable { + + /** + * 事故详细经过 + */ + private String sgxxjg; + + /** + * 直接原因 + */ + private String zjjy; + + /** + * 间接原因 + */ + private String jjyy; + + /** + * 证据材料说明 + */ + private String zjcl; + + /** + * 责任部门 + */ + private Long zrbm; + private String zrbmName; + + /** + * 主要负责人 + */ + private Long zyfzr; + private String zyfzrName; + + /** + * 次要负责人 + */ + private Long cyfzr; + private String cyfzrName; + + /** + * 责任划分 + */ + private String zrhf; + + /** + * 责任认定说明 + */ + private String zrrdsm; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgsbBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgsbBo.java new file mode 100644 index 00000000..b93129ed --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgsbBo.java @@ -0,0 +1,127 @@ +package org.dromara.safety.accident.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.safety.accident.domain.HseSafetySgsb; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 安全-事故上报业务对象 hse_safety_sgsb + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HseSafetySgsb.class, reverseConvertGenerate = false) +public class HseSafetySgsbBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 关联项目 + */ + private Long projectId; + + /** + * 事故编号 + */ + private String sgbh; + + /** + * 事发时间 + */ + private Date sfsj; + + /** + * 事发地点 + */ + private String sfdd; + + /** + * 事故类型 + */ + private String sglx; + + /** + * 事故等级(1一般2较大3重大4特别重大) + */ + private String sgdj; + + /** + * 死亡人数 + */ + private Long swrs; + + /** + * 重伤人数 + */ + private Long zsrs; + + /** + * 轻伤人数 + */ + private Long qsrs; + + /** + * 人员信息 + */ + private String ryxx; + + /** + * 初步估算(万元-角分) + */ + private BigDecimal cbgs; + + /** + * 事故原因 + */ + private String sgyy; + + /** + * 联系方式 + */ + private String lxfs; + + /** + * 上报渠道 + */ + private String sbqd; + + /** + * 接收人 + */ + private Long jsr; + + /** + * 紧急措施 + */ + private String jjcs; + + /** + * 文件id逗号分隔 + */ + private String file; + + /** + * 审核状态 + */ + private String shzt; + + /** + * 事故状态(已上报,待调查,待整改,已整改,,已闭环) + */ + private String sgzt; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgssqkReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgssqkReq.java new file mode 100644 index 00000000..272d3b6c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgssqkReq.java @@ -0,0 +1,49 @@ +package org.dromara.safety.accident.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.safety.accident.domain.HseSafetySgsb; + +import java.io.Serializable; +import java.util.Date; + +/** + * 档案-损失情况信息 + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +public class HseSafetySgssqkReq implements Serializable { + + /** + * 死亡人数 + */ + private Long swrs; + + /** + * 重伤人数 + */ + private Long zsrs; + + /** + * 轻伤人数 + */ + private Long qsrs; + + /** + * 人员信息 + */ + private String ryxx; + + /** + * 初步估算(万元-角分) + */ + private Long cbgs; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgxqReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgxqReq.java new file mode 100644 index 00000000..1e8bef2d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgxqReq.java @@ -0,0 +1,40 @@ +package org.dromara.safety.accident.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.safety.accident.domain.HseSafetySgsb; + +import java.io.Serializable; +import java.util.Date; + +/** + * 档案-事故详情信息 + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +public class HseSafetySgxqReq implements Serializable { + + + /** + * 事发地点 + */ + private String sfdd; + + /** + * 事故原因 + */ + private String sgyy; + + /** + * 紧急措施 + */ + private String jjcs; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgzgbhBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgzgbhBo.java new file mode 100644 index 00000000..903f3c82 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgzgbhBo.java @@ -0,0 +1,131 @@ +package org.dromara.safety.accident.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.safety.accident.domain.HseSafetySgzgbh; + +import java.util.Date; + +/** + * 安全-事故整改闭环业务对象 hse_safety_sgzgbh + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HseSafetySgzgbh.class, reverseConvertGenerate = false) +public class HseSafetySgzgbhBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 整改闭环编号 + */ + private String zgbhbh; + + /** + * 关联项目 + */ + private Long projectId; + + + /** + * 事故id + */ + private Long sgId; + + /** + * 事故编号 + */ + private String sgbh; + + /** + * 事发时间 + */ + private Date sfsj; + + /** + * 事发地点 + */ + private String sfdd; + + /** + * 事故类型 + */ + private String sglx; + + /** + * 事故等级 + */ + private String sgdj; + + /** + * 事故原因 + */ + private String sgyy; + + /** + * 调查人 + */ + private Long jsr; + + /** + * 上报人 + */ + private Long sbr; + + /** + * 上报时间 + */ + private Date sbsj; + + /** + * 整改状态 + */ + private String zgStatus; + + /** + * 整改人 + */ + private Long zgr; + + /** + * 复查状态 + */ + private String fcStatus; + + /** + * 复查人 + */ + private Long fcr; + + /** + * 最终闭环状态 + */ + private String reviewStatus; + + /** + * 审核状态 + */ + private String shzt; + + /** + * 是否完成(0未逾期,1未逾期已完成,2已逾期未完成,3已逾期已完成) + */ + private String isFinish; + + /** + * 调查id + */ + private Long dcId; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgzgfcxqReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgzgfcxqReq.java new file mode 100644 index 00000000..3a502ab9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetySgzgfcxqReq.java @@ -0,0 +1,74 @@ +package org.dromara.safety.accident.domain.bo; + +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.safety.accident.domain.HseSafetySgzgbh; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * 档案-事故整改与复查信息 + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +public class HseSafetySgzgfcxqReq implements Serializable { + + /** + * 整改措施 + */ + private String abarbeitungMeasure; + /** + * 整改图片 + */ + private String zgFileId; + + private List zgFileUrls; + + /** + * 整改pdf文件 + */ + private String zgPdfId; + + private List zgPdfUrls; + + /** + * 复查状态 + */ + private String reviewState; + + /** + * 不通过原因 + */ + private String notPassCause; + + /** + * 复查意见详情 + */ + private String reviewOpinionParticulars; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fcFileId; + private List fcFileUrls; + + /** + * pdf文件(多个文件逗号分隔) + */ + private String fcPdfId; + private List fcPdfUrls; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetyZgxxBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetyZgxxBo.java new file mode 100644 index 00000000..92d9cccf --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/bo/HseSafetyZgxxBo.java @@ -0,0 +1,81 @@ +package org.dromara.safety.accident.domain.bo; + +import org.dromara.safety.accident.domain.HseSafetyZgxx; +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.time.LocalDate; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 安全事故整改信息业务对象 hse_safety_zgxx + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HseSafetyZgxx.class, reverseConvertGenerate = false) +public class HseSafetyZgxxBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 安全事故整改与闭环ID + */ + @NotNull(message = "安全事故整改与闭环ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long masterId; + + /** + * 整改责任人 + */ + @NotNull(message = "整改责任人不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long abarbeitung; + + /** + * 整改开始日期 + */ + @NotNull(message = "整改开始日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate abarbeitungKsdate; + + /** + * 整改结束日期 + */ + @NotNull(message = "整改结束日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate abarbeitungJsdate; + + /** + * 整改措施 + */ + @NotBlank(message = "整改措施不能为空", groups = { AddGroup.class, EditGroup.class }) + private String abarbeitungMeasure; + + /** + * 整改完成情况 + */ + @NotBlank(message = "整改完成情况不能为空", groups = { AddGroup.class, EditGroup.class }) + private String abarbeitungAccomplish; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + + /** + * pdf文件(多个文件逗号分隔) + */ + private String pdfId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetyFcxxVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetyFcxxVo.java new file mode 100644 index 00000000..afafe8bb --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetyFcxxVo.java @@ -0,0 +1,103 @@ +package org.dromara.safety.accident.domain.vo; + +import java.time.LocalDate; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.safety.accident.domain.HseSafetyFcxx; +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; + + +/** + * 安全事故复查信息视图对象 hse_safety_fcxx + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseSafetyFcxx.class) +public class HseSafetyFcxxVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 安全事故整改与闭环ID + */ + @ExcelProperty(value = "安全事故整改与闭环ID") + private Long masterId; + + /** + * 整改ID + */ + @ExcelProperty(value = "整改ID") + private Long zgId; + + /** + * 复查人 + */ + @ExcelProperty(value = "复查人") + private Long review; + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "review") + private String reviewName; + + /** + * 复查日期 + */ + @ExcelProperty(value = "复查日期") + private LocalDate reviewDate; + + /** + * 复查状态 + */ + @ExcelProperty(value = "复查状态") + private String reviewState; + + /** + * 不通过原因 + */ + @ExcelProperty(value = "不通过原因") + private String notPassCause; + + /** + * 复查意见详情 + */ + @ExcelProperty(value = "复查意见详情") + private String reviewOpinionParticulars; + + /** + * 文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String fileId; + private List fileUrls; + + /** + * pdf文件(多个文件逗号分隔) + */ + @ExcelProperty(value = "pdf文件", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String pdfId; + private List pdfUrls; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgdanjlVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgdanjlVo.java new file mode 100644 index 00000000..1d87e90d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgdanjlVo.java @@ -0,0 +1,148 @@ +package org.dromara.safety.accident.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.safety.accident.domain.HseSafetySgdanjl; +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; + + + +/** + * 安全-事故档案记录视图对象 hse_safety_sgdanjl + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseSafetySgdanjl.class) +public class HseSafetySgdanjlVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 档案编号 + */ + @ExcelProperty(value = "档案编号") + private String danbh; + + /** + * 关联项目 + */ + @ExcelProperty(value = "关联项目") + private String project; + + /** + * 事故编号 + */ + @ExcelProperty(value = "事故编号") + private String sgbh; + + /** + * 事发时间 + */ + @ExcelProperty(value = "事发时间") + private Date sfsj; + + /** + * 事发地点 + */ + @ExcelProperty(value = "事发地点") + private String sfdd; + + /** + * 事故类型 + */ + @ExcelProperty(value = "事故类型") + private String sglx; + + /** + * 事故等级 + */ + @ExcelProperty(value = "事故等级") + private String sgdj; + + /** + * 事故原因 + */ + @ExcelProperty(value = "事故原因") + private String sgyy; + + /** + * 事故详情 + */ + @ExcelProperty(value = "事故详情") + private String sgxq; + + + /** + * 损失情况 + */ + private String ssqk; + + /** + * 调查详情 + */ + @ExcelProperty(value = "调查详情") + private String dcxq; + + /** + * 整改与复查详情 + */ + @ExcelProperty(value = "整改与复查详情") + private String zgfcxq; + + /** + * 档案管理人 + */ + @ExcelProperty(value = "档案管理人") + private String danglr; + + /** + * 档案保存期限 + */ + @ExcelProperty(value = "档案保存期限") + private String storageLife; + + /** + * 电子档案存储位置 + */ + @ExcelProperty(value = "电子档案存储位置") + private String dzdanccwz; + + /** + * 纸质档案存放位置 + */ + @ExcelProperty(value = "纸质档案存放位置") + private String zzdancfwz; + + /** + * 档案备注 + */ + @ExcelProperty(value = "档案备注") + private String remarks; + + /** + * 审核状态 + */ + @ExcelProperty(value = "审核状态") + private String shzt; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgdcVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgdcVo.java new file mode 100644 index 00000000..3c94aaa5 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgdcVo.java @@ -0,0 +1,250 @@ +package org.dromara.safety.accident.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.safety.accident.domain.HseSafetySgdc; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 安全-事故调查视图对象 hse_safety_sgdc + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseSafetySgdc.class) +public class HseSafetySgdcVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 调查编号 + */ + @ExcelProperty(value = "调查编号") + private String dcbh; + + /** + * 关联事故id + */ + @ExcelProperty(value = "关联事故id") + private Long sgId; + + /** + * 事故关联项目ID + */ + private Long projectId; + + /** + * 事故编号 + */ + private String sgbh; + + /** + * 调查小组 + */ + @ExcelProperty(value = "调查小组") + private String dcxz; + + /** + * 调查开始时间 + */ + @ExcelProperty(value = "调查开始时间") + private Date dckssj; + + /** + * 调查结束时间 + */ + @ExcelProperty(value = "调查结束时间") + private Date dcjssj; + + /** + * 事故详细经过 + */ + @ExcelProperty(value = "事故详细经过") + private String sgxxjg; + + /** + * 直接原因 + */ + @ExcelProperty(value = "直接原因") + private String zjjy; + + /** + * 间接原因 + */ + @ExcelProperty(value = "间接原因") + private String jjyy; + + /** + * 证据材料说明 + */ + @ExcelProperty(value = "证据材料说明") + private String zjcl; + + /** + * 责任部门 + */ + @ExcelProperty(value = "责任部门") + private Long zrbm; + + /** + * 部门名称 + */ + private String bmmc; + + /** + * 主要负责人 + */ + @ExcelProperty(value = "主要负责人") + private Long zyfzr; + + /** + * 主要责任人名称 + */ + private String zyzrrmc; + + /** + * 次要负责人 + */ + @ExcelProperty(value = "次要负责人") + private Long cyfzr; + + /** + * 次要责任人名称 + */ + private String cyzrrmc; + + /** + * 责任划分 + */ + @ExcelProperty(value = "责任划分") + private String zrhf; + + /** + * 责任认定说明 + */ + @ExcelProperty(value = "责任认定说明") + private String zrrdsm; + + /** + * 整改措施内容 + */ + @ExcelProperty(value = "整改措施内容") + private String zgcsnr; + + /** + * 1班组长2分包人 + */ + @ExcelProperty(value = "1班组长2分包人") + private String zgfzrType; + + /** + * 整改负责人 + */ + @ExcelProperty(value = "整改负责人") + private Long zgfzr; + + /** + * 整改负责人名称 + */ + private String zgfzrmc; + + /** + * 整改优先级(暂时废弃) + */ + @ExcelProperty(value = "整改优先级(暂时废弃)") + private String zgyxj; + + /** + * 整改时限 + */ + @ExcelProperty(value = "整改时限") + private Date zgsx; + + /** + * 复查人员 + */ + @ExcelProperty(value = "复查人员") + private Long fcry; + + /** + * 复查人员名称 + */ + private String fcrymc; + + /** + * 整改验收标准 + */ + @ExcelProperty(value = "整改验收标准") + private String zgysbz; + + /** + * 处理意见 + */ + @ExcelProperty(value = "处理意见") + private String clyj; + + /** + * 调查负责人 + */ + @ExcelProperty(value = "调查负责人") + private Long dcfzr; + + /** + * 调查负责人名称 + */ + private String dcfzrmc; + + /** + * 多文件逗号分隔 + */ + @ExcelProperty(value = "多文件逗号分隔") + private String file; + + /** + * 审核状态 + */ + @ExcelProperty(value = "审核状态") + private String shzt; + + /** + * 保存状态0草稿1提交 + */ + private String bczt; + + /** + * 整改任务名称 + */ + private String zgrwmc; + + /** + * 整改状态 + */ + private String zgzt; + + /** + * 复查结果 + */ + private String fcjg; + + /** + * 事故状态 + */ + private String sgzt; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgsbVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgsbVo.java new file mode 100644 index 00000000..ec53cc11 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgsbVo.java @@ -0,0 +1,176 @@ +package org.dromara.safety.accident.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.safety.accident.domain.HseSafetySgsb; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + + + +/** + * 安全-事故上报视图对象 hse_safety_sgsb + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseSafetySgsb.class) +public class HseSafetySgsbVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 关联项目 + */ + @ExcelProperty(value = "关联项目") + private Long projectId; + @Translation(type = TransConstant.PROJECT_ID_TO_NAME, mapper = "projectId") + private String projectName; + + /** + * 事故编号 + */ + @ExcelProperty(value = "事故编号") + private String sgbh; + + /** + * 事发时间 + */ + @ExcelProperty(value = "事发时间") + private Date sfsj; + + /** + * 事发地点 + */ + @ExcelProperty(value = "事发地点") + private String sfdd; + + /** + * 事故类型 + */ + @ExcelProperty(value = "事故类型") + private String sglx; + + /** + * 事故等级(1一般2较大3重大4特别重大) + */ + @ExcelProperty(value = "事故等级") + private String sgdj; + + /** + * 死亡人数 + */ + @ExcelProperty(value = "死亡人数") + private Long swrs; + + /** + * 重伤人数 + */ + @ExcelProperty(value = "重伤人数") + private Long zsrs; + + /** + * 轻伤人数 + */ + @ExcelProperty(value = "轻伤人数") + private Long qsrs; + + /** + * 人员信息 + */ + @ExcelProperty(value = "人员信息") + private String ryxx; + + /** + * 初步估算(万元-角分) + */ + @ExcelProperty(value = "初步估算(万元-角分)") + private BigDecimal cbgs; + + /** + * 事故原因 + */ + @ExcelProperty(value = "事故原因") + private String sgyy; + + /** + * 联系方式 + */ + @ExcelProperty(value = "联系方式") + private String lxfs; + + /** + * 上报渠道 + */ + @ExcelProperty(value = "上报渠道") + private String sbqd; + + /** + * 接收人 + */ + @ExcelProperty(value = "接收人") + private Long jsr; + + /** + * 接收人名称 + */ + private String jsrmc; + + /** + * 紧急措施 + */ + @ExcelProperty(value = "紧急措施") + private String jjcs; + + /** + * 文件id逗号分隔 + */ + @ExcelProperty(value = "文件id逗号分隔") + private String file; + + /** + * 审核状态 + */ + @ExcelProperty(value = "审核状态") + private String shzt; + + /** + * 事故状态(待上报,已上报,待调查,待整改,已整改,需整改,已闭环) + */ + @ExcelProperty(value = "事故状态(已上报,待调查,待整改,已整改,,已闭环)") + private String sgzt; + + /** + * 创建人 + */ + private Long createBy; + + /** + * 创建人名称 + */ + private String createByName; + + /** + * 创建时间 + */ + private Date createTime; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgzgbhHeadVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgzgbhHeadVo.java new file mode 100644 index 00000000..d30313ac --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgzgbhHeadVo.java @@ -0,0 +1,30 @@ +package org.dromara.safety.accident.domain.vo; + + +import lombok.Data; + +@Data +public class HseSafetySgzgbhHeadVo { + /** + * 总数 + */ + private Long zs = 0L; + + /** + * 待整改 + */ + private Long dzg = 0L; + + /** + * 待验收 + */ + private Long dys = 0L; + + + /** + * 已闭环 + */ + private Long ybh = 0L; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgzgbhVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgzgbhVo.java new file mode 100644 index 00000000..b2269aaf --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetySgzgbhVo.java @@ -0,0 +1,167 @@ +package org.dromara.safety.accident.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.safety.accident.domain.HseSafetySgzgbh; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +/** + * 安全-事故整改闭环视图对象 hse_safety_sgzgbh + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseSafetySgzgbh.class) +public class HseSafetySgzgbhVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 整改闭环编号 + */ + @ExcelProperty(value = "整改闭环编号") + private String zgbhbh; + + /** + * 关联项目 + */ + @ExcelProperty(value = "关联项目") + private Long projectId; + + /** + * 事故id + */ + private Long sgId; + + /** + * 事故编号 + */ + @ExcelProperty(value = "事故编号") + private String sgbh; + + /** + * 事发时间 + */ + @ExcelProperty(value = "事发时间") + private Date sfsj; + + /** + * 事发地点 + */ + @ExcelProperty(value = "事发地点") + private String sfdd; + + /** + * 事故类型 + */ + @ExcelProperty(value = "事故类型") + private String sglx; + + /** + * 事故等级 + */ + @ExcelProperty(value = "事故等级") + private String sgdj; + + /** + * 事故原因 + */ + @ExcelProperty(value = "事故原因") + private String sgyy; + + /** + * 调查人 + */ + @ExcelProperty(value = "调查人") + private Long jsr; + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "jsr") + private String jsrName; + + /** + * 上报人 + */ + @ExcelProperty(value = "上报人") + private Long sbr; + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "sbr") + private String sbrName; + + /** + * 上报时间 + */ + @ExcelProperty(value = "上报时间") + private Date sbsj; + + /** + * 整改状态 + */ + @ExcelProperty(value = "整改状态") + private String zgStatus; + + /** + * 整改人 + */ + @ExcelProperty(value = "整改人") + private Long zgr; + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "zgr") + private String zgrName; + + /** + * 复查状态 + */ + @ExcelProperty(value = "复查状态") + private String fcStatus; + + /** + * 复查人 + */ + @ExcelProperty(value = "复查人") + private Long fcr; + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "fcr") + private String fcrName; + + /** + * 最终闭环状态 + */ + @ExcelProperty(value = "最终闭环状态") + private String reviewStatus; + + /** + * 审核状态 + */ + @ExcelProperty(value = "审核状态") + private String shzt; + + /** + * 是否完成(0未逾期,1未逾期已完成,2已逾期未完成,3已逾期已完成) + */ + private String isFinish; + + /** + * 整改与复查记录 + */ + private List zgxxVos; + + /** + * 调查id + */ + private Long dcId; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetyZgxxVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetyZgxxVo.java new file mode 100644 index 00000000..4cee5177 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/HseSafetyZgxxVo.java @@ -0,0 +1,103 @@ +package org.dromara.safety.accident.domain.vo; + +import java.time.LocalDate; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.safety.accident.domain.HseSafetyZgxx; +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; + + +/** + * 安全事故整改信息视图对象 hse_safety_zgxx + * + * @author Lion Li + * @date 2025-12-05 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseSafetyZgxx.class) +public class HseSafetyZgxxVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 安全事故整改与闭环ID + */ + @ExcelProperty(value = "安全事故整改与闭环ID") + private Long masterId; + + /** + * 整改责任人 + */ + @ExcelProperty(value = "整改责任人") + private Long abarbeitung; + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "abarbeitung") + private String abarbeitungName; + + /** + * 整改开始日期 + */ + @ExcelProperty(value = "整改开始日期") + private LocalDate abarbeitungKsdate; + + /** + * 整改结束日期 + */ + @ExcelProperty(value = "整改结束日期") + private LocalDate abarbeitungJsdate; + + /** + * 整改措施 + */ + @ExcelProperty(value = "整改措施") + private String abarbeitungMeasure; + + /** + * 整改完成情况 + */ + @ExcelProperty(value = "整改完成情况") + private String abarbeitungAccomplish; + + /** + * 文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String fileId; + private List fileUrls; + + + /** + * pdf文件(多个文件逗号分隔) + */ + @ExcelProperty(value = "pdf文件", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String pdfId; + private List pdfUrls; + + /** + * 关联复查信息 + */ + private HseSafetyFcxxVo fcxxVo; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/SgsbCountVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/SgsbCountVo.java new file mode 100644 index 00000000..055a756f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/domain/vo/SgsbCountVo.java @@ -0,0 +1,50 @@ +package org.dromara.safety.accident.domain.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class SgsbCountVo { + + /** + * 本月总上报事故 + */ + private Long bysbsg; + + /** + * 已闭环事故 + */ + private Long ybhsg; + /** + * 待整改事故 + */ + private Long dzgsg; + /** + * 已整改事故 + */ + private Long yzgsg; + + + + /** + * 待调查事故 + */ + private Long ddcsg; + + /** + * 调查中事故 + */ + private Long dczsg; + + /** + * 已完成调查 + */ + private Long ywcdc; + + /** + * 总调查事故 + */ + private Long zdcsg; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetyFcxxMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetyFcxxMapper.java new file mode 100644 index 00000000..18c1e547 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetyFcxxMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.accident.mapper; + +import org.dromara.safety.accident.domain.HseSafetyFcxx; +import org.dromara.safety.accident.domain.vo.HseSafetyFcxxVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 安全事故复查信息Mapper接口 + * + * @author Lion Li + * @date 2025-12-05 + */ +public interface HseSafetyFcxxMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgdanjlMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgdanjlMapper.java new file mode 100644 index 00000000..a8db1412 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgdanjlMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.accident.mapper; + +import org.dromara.safety.accident.domain.HseSafetySgdanjl; +import org.dromara.safety.accident.domain.vo.HseSafetySgdanjlVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 安全-事故档案记录Mapper接口 + * + * @author Lion Li + * @date 2025-12-05 + */ +public interface HseSafetySgdanjlMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgdcMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgdcMapper.java new file mode 100644 index 00000000..1ff03355 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgdcMapper.java @@ -0,0 +1,31 @@ +package org.dromara.safety.accident.mapper; + +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.safety.accident.domain.HseSafetySgdc; +import org.dromara.safety.accident.domain.HseSafetySgsb; +import org.dromara.safety.accident.domain.vo.HseSafetySgdcVo; + +import java.util.List; + +/** + * 安全-事故调查Mapper接口 + * + * @author Lion Li + * @date 2025-12-05 + */ +public interface HseSafetySgdcMapper extends BaseMapperPlus { + + @Select("select * from hse_safety_sgsb where id = #{id}") + HseSafetySgsb getSgsb(Long id); + + @Select("select * from hse_safety_sgsb") + List getSbList(); + + @Select("select * from hse_safety_sgsb where project_id = #{projectId}") + List getSgsbListByProjectId(Long projectId); + + @Update("update hse_safety_sgsb set sgzt = #{state} where id = #{id}") + boolean updateSgzt(Long id, String state); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgsbMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgsbMapper.java new file mode 100644 index 00000000..a5211b8d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgsbMapper.java @@ -0,0 +1,22 @@ +package org.dromara.safety.accident.mapper; + +import org.apache.ibatis.annotations.Select; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.safety.accident.domain.HseSafetySgsb; +import org.dromara.safety.accident.domain.HseSafetySgzgbh; +import org.dromara.safety.accident.domain.vo.HseSafetySgsbVo; + +import java.util.List; + +/** + * 安全-事故上报Mapper接口 + * + * @author Lion Li + * @date 2025-12-05 + */ +public interface HseSafetySgsbMapper extends BaseMapperPlus { + + @Select("select * from hse_safety_sgzgbh") + List getSgzgList(); + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgzgbhMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgzgbhMapper.java new file mode 100644 index 00000000..3d6dc8a6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetySgzgbhMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.accident.mapper; + +import org.dromara.safety.accident.domain.HseSafetySgzgbh; +import org.dromara.safety.accident.domain.vo.HseSafetySgzgbhVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 安全-事故整改闭环Mapper接口 + * + * @author Lion Li + * @date 2025-12-05 + */ +public interface HseSafetySgzgbhMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetyZgxxMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetyZgxxMapper.java new file mode 100644 index 00000000..9c422dd7 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/mapper/HseSafetyZgxxMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.accident.mapper; + +import org.dromara.safety.accident.domain.HseSafetyZgxx; +import org.dromara.safety.accident.domain.vo.HseSafetyZgxxVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 安全事故整改信息Mapper接口 + * + * @author Lion Li + * @date 2025-12-05 + */ +public interface HseSafetyZgxxMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/menu/SGStatusEnum.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/menu/SGStatusEnum.java new file mode 100644 index 00000000..bd0f25bf --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/menu/SGStatusEnum.java @@ -0,0 +1,93 @@ +package org.dromara.safety.accident.menu; + +import lombok.Getter; + +/** + * 消息类型枚举 + * + * @author may + */ +@Getter +public enum SGStatusEnum { + + //事故状态 主数据 + /** + * 已上报 + */ + REPORTED("1", "已上报"), + + /** + * 待调查 + */ + UNDER_INVESTIGATION("5", "待调查"), + /** + * 待整改 + */ + SG_TO_BE_RECTIFIED("9", "待整改"), + /** + * 已整改 + */ + SG_HAS_BEEN_RECTIFIED("14", "已整改"), + + /** + * 已闭环 + */ + SG_CLOSED_LOOP_OPERATION("19", "已闭环"), + + //整改状态 + /** + * 待整改 + */ + TO_BE_RECTIFIED("1", "待整改"), + + /** + * 整改中 + */ + UNDER_RECTIFICATION("2", "整改中"), + /** + * 已整改 + */ + HAS_BEEN_RECTIFIED("3", "已整改"), + + //复查状态 + /** + * 通过 + */ + PASS("1", "通过"), + /** + * 不通过 + */ + NO_PASS("2", "不通过"), + //闭环状态 + /** + * 已闭环 + */ + CLOSED_LOOP_OPERATION("2", "已闭环"), + /** + * 未闭环 + */ + OPEN_LOOP("1", "未闭环"), + + + //事故调查保存状态 + /** + * 草稿 + */ + DRAFT("0", "草稿"), + /** + * 提交 + */ + SUBMIT("1", "提交"); + + + private final String code; + + private final String desc; + + SGStatusEnum(String code, String desc) { + this.code = code; + this.desc = desc; + } + +} + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/menu/SGdjEnum.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/menu/SGdjEnum.java new file mode 100644 index 00000000..4a89433f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/menu/SGdjEnum.java @@ -0,0 +1,19 @@ +package org.dromara.safety.accident.menu; + +public enum SGdjEnum { + //事故等级(1一般2较大3重大4特别重大) + YB("1", "一般"), + JD("2", "较大"), + ZD("3", "重大"), + TBZD("4", "特别重大"); + + private final String code; + + private final String desc; + + SGdjEnum(String code, String desc) { + this.code = code; + this.desc = desc; + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/menu/SGlxEnum.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/menu/SGlxEnum.java new file mode 100644 index 00000000..a7738111 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/menu/SGlxEnum.java @@ -0,0 +1,29 @@ +package org.dromara.safety.accident.menu; + +import lombok.Getter; + +@Getter +public enum SGlxEnum { + //事故类型(1高空坠落2触电3火灾4机械伤害5物体打击6其他) + + GKZL("1", "高空坠落"), + + CD("2", "触电"), + + HZ("3", "火灾"), + + JXSH("4", "机械伤害"), + + WTDJ("5", "物体打击"), + + QT("6", "其他"); + + private final String code; + + private final String desc; + + SGlxEnum(String code, String desc) { + this.code = code; + this.desc = desc; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetyFcxxService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetyFcxxService.java new file mode 100644 index 00000000..c8ca83b9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetyFcxxService.java @@ -0,0 +1,77 @@ +package org.dromara.safety.accident.service; + +import org.dromara.safety.accident.domain.vo.HseSafetyFcxxVo; +import org.dromara.safety.accident.domain.bo.HseSafetyFcxxBo; +import org.dromara.safety.accident.domain.HseSafetyFcxx; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 安全事故复查信息Service接口 + * + * @author Lion Li + * @date 2025-12-05 + */ +public interface IHseSafetyFcxxService extends IService{ + + /** + * 查询安全事故复查信息 + * + * @param id 主键 + * @return 安全事故复查信息 + */ + HseSafetyFcxxVo queryById(Long id); + + /** + * 分页查询安全事故复查信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全事故复查信息分页列表 + */ + TableDataInfo queryPageList(HseSafetyFcxxBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的安全事故复查信息列表 + * + * @param bo 查询条件 + * @return 安全事故复查信息列表 + */ + List queryList(HseSafetyFcxxBo bo); + + /** + * 新增安全事故复查信息 + * + * @param bo 安全事故复查信息 + * @return 是否新增成功 + */ + Boolean insertByBo(HseSafetyFcxxBo bo); + + /** + * 修改安全事故复查信息 + * + * @param bo 安全事故复查信息 + * @return 是否修改成功 + */ + Boolean updateByBo(HseSafetyFcxxBo bo); + + /** + * 校验并批量删除安全事故复查信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 通过整改id获取对应的复查信息 + * @param id + * @return + */ + HseSafetyFcxxVo getInfoVoById(Long id); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgdanjlService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgdanjlService.java new file mode 100644 index 00000000..11d083d5 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgdanjlService.java @@ -0,0 +1,70 @@ +package org.dromara.safety.accident.service; + +import org.dromara.safety.accident.domain.vo.HseSafetySgdanjlVo; +import org.dromara.safety.accident.domain.bo.HseSafetySgdanjlBo; +import org.dromara.safety.accident.domain.HseSafetySgdanjl; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 安全-事故档案记录Service接口 + * + * @author Lion Li + * @date 2025-12-05 + */ +public interface IHseSafetySgdanjlService extends IService{ + + /** + * 查询安全-事故档案记录 + * + * @param id 主键 + * @return 安全-事故档案记录 + */ + HseSafetySgdanjlVo queryById(Long id); + + /** + * 分页查询安全-事故档案记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全-事故档案记录分页列表 + */ + TableDataInfo queryPageList(HseSafetySgdanjlBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的安全-事故档案记录列表 + * + * @param bo 查询条件 + * @return 安全-事故档案记录列表 + */ + List queryList(HseSafetySgdanjlBo bo); + + /** + * 新增安全-事故档案记录 + * + * @param bo 安全-事故档案记录 + * @return 是否新增成功 + */ + Boolean insertByBo(HseSafetySgdanjlBo bo); + + /** + * 修改安全-事故档案记录 + * + * @param bo 安全-事故档案记录 + * @return 是否修改成功 + */ + Boolean updateByBo(HseSafetySgdanjlBo bo); + + /** + * 校验并批量删除安全-事故档案记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgdcService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgdcService.java new file mode 100644 index 00000000..8225e782 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgdcService.java @@ -0,0 +1,77 @@ +package org.dromara.safety.accident.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.safety.accident.domain.HseSafetySgdc; +import org.dromara.safety.accident.domain.bo.HseSafetySgdcBo; +import org.dromara.safety.accident.domain.vo.HseSafetySgdcVo; +import org.dromara.safety.accident.domain.vo.SgsbCountVo; + +import java.util.Collection; +import java.util.List; + +/** + * 安全-事故调查Service接口 + * + * @author Lion Li + * @date 2025-12-05 + */ +public interface IHseSafetySgdcService extends IService{ + + /** + * 查询安全-事故调查 + * + * @param id 主键 + * @return 安全-事故调查 + */ + HseSafetySgdcVo queryById(Long id); + + /** + * 分页查询安全-事故调查列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全-事故调查分页列表 + */ + TableDataInfo queryPageList(HseSafetySgdcBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的安全-事故调查列表 + * + * @param bo 查询条件 + * @return 安全-事故调查列表 + */ + List queryList(HseSafetySgdcBo bo); + + /** + * 新增安全-事故调查 + * + * @param bo 安全-事故调查 + * @return 是否新增成功 + */ + Boolean insertByBo(HseSafetySgdcBo bo); + + /** + * 修改安全-事故调查 + * + * @param bo 安全-事故调查 + * @return 是否修改成功 + */ + Boolean updateByBo(HseSafetySgdcBo bo); + + /** + * 校验并批量删除安全-事故调查信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 统计数据 + * @return + */ + SgsbCountVo getListCount(Long projectId); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgsbService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgsbService.java new file mode 100644 index 00000000..ed332757 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgsbService.java @@ -0,0 +1,78 @@ +package org.dromara.safety.accident.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.safety.accident.domain.HseSafetySgsb; +import org.dromara.safety.accident.domain.bo.HseSafetySgsbBo; +import org.dromara.safety.accident.domain.vo.HseSafetySgsbVo; +import org.dromara.safety.accident.domain.vo.SgsbCountVo; + +import java.util.Collection; +import java.util.List; + +/** + * 安全-事故上报Service接口 + * + * @author Lion Li + * @date 2025-12-05 + */ +public interface IHseSafetySgsbService extends IService{ + + /** + * 查询安全-事故上报 + * + * @param id 主键 + * @return 安全-事故上报 + */ + HseSafetySgsbVo queryById(Long id); + + /** + * 分页查询安全-事故上报列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全-事故上报分页列表 + */ + TableDataInfo queryPageList(HseSafetySgsbBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的安全-事故上报列表 + * + * @param bo 查询条件 + * @return 安全-事故上报列表 + */ + List queryList(HseSafetySgsbBo bo); + + /** + * 新增安全-事故上报 + * + * @param bo 安全-事故上报 + * @return 是否新增成功 + */ + Boolean insertByBo(HseSafetySgsbBo bo); + + /** + * 修改安全-事故上报 + * + * @param bo 安全-事故上报 + * @return 是否修改成功 + */ + Boolean updateByBo(HseSafetySgsbBo bo); + + /** + * 校验并批量删除安全-事故上报信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 获取统计信息 + * @param projectId + * @return + */ + SgsbCountVo getCount(Long projectId); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgzgbhService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgzgbhService.java new file mode 100644 index 00000000..bcce77bd --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetySgzgbhService.java @@ -0,0 +1,103 @@ +package org.dromara.safety.accident.service; + +import org.dromara.mechanical.jxzgbh.domain.bo.JxYhzgbhBo; +import org.dromara.safety.accident.domain.bo.HseSafetyFcxxBo; +import org.dromara.safety.accident.domain.bo.HseSafetyZgxxBo; +import org.dromara.safety.accident.domain.vo.HseSafetySgzgbhHeadVo; +import org.dromara.safety.accident.domain.vo.HseSafetySgzgbhVo; +import org.dromara.safety.accident.domain.bo.HseSafetySgzgbhBo; +import org.dromara.safety.accident.domain.HseSafetySgzgbh; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 安全-事故整改闭环Service接口 + * + * @author Lion Li + * @date 2025-12-05 + */ +public interface IHseSafetySgzgbhService extends IService{ + + /** + * 查询安全-事故整改闭环 + * + * @param id 主键 + * @return 安全-事故整改闭环 + */ + HseSafetySgzgbhVo queryById(Long id); + + /** + * 分页查询安全-事故整改闭环列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全-事故整改闭环分页列表 + */ + TableDataInfo queryPageList(HseSafetySgzgbhBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的安全-事故整改闭环列表 + * + * @param bo 查询条件 + * @return 安全-事故整改闭环列表 + */ + List queryList(HseSafetySgzgbhBo bo); + + /** + * 新增安全-事故整改闭环 + * + * @param bo 安全-事故整改闭环 + * @return 是否新增成功 + */ + Boolean insertByBo(HseSafetySgzgbhBo bo); + + /** + * 修改安全-事故整改闭环 + * + * @param bo 安全-事故整改闭环 + * @return 是否修改成功 + */ + Boolean updateByBo(HseSafetySgzgbhBo bo); + + /** + * 校验并批量删除安全-事故整改闭环信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 新增整改信息 + * + * @param bo + * @return + */ + Boolean addZGxx(HseSafetyZgxxBo bo); + + /** + * 新增复查信息 + * @param bo + * @return + */ + Boolean addFCxx(HseSafetyFcxxBo bo); + + /** + * 查询头部信息 + * @param bo + * @return + */ + HseSafetySgzgbhHeadVo getListHead(HseSafetySgzgbhBo bo); + + /** + * 获取不通过原因 + * @param bo + * @return + */ + String getNoPass(HseSafetySgzgbhBo bo); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetyZgxxService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetyZgxxService.java new file mode 100644 index 00000000..95277a7f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/IHseSafetyZgxxService.java @@ -0,0 +1,77 @@ +package org.dromara.safety.accident.service; + +import org.dromara.safety.accident.domain.vo.HseSafetyZgxxVo; +import org.dromara.safety.accident.domain.bo.HseSafetyZgxxBo; +import org.dromara.safety.accident.domain.HseSafetyZgxx; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 安全事故整改信息Service接口 + * + * @author Lion Li + * @date 2025-12-05 + */ +public interface IHseSafetyZgxxService extends IService{ + + /** + * 查询安全事故整改信息 + * + * @param id 主键 + * @return 安全事故整改信息 + */ + HseSafetyZgxxVo queryById(Long id); + + /** + * 分页查询安全事故整改信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全事故整改信息分页列表 + */ + TableDataInfo queryPageList(HseSafetyZgxxBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的安全事故整改信息列表 + * + * @param bo 查询条件 + * @return 安全事故整改信息列表 + */ + List queryList(HseSafetyZgxxBo bo); + + /** + * 新增安全事故整改信息 + * + * @param bo 安全事故整改信息 + * @return 是否新增成功 + */ + Boolean insertByBo(HseSafetyZgxxBo bo); + + /** + * 修改安全事故整改信息 + * + * @param bo 安全事故整改信息 + * @return 是否修改成功 + */ + Boolean updateByBo(HseSafetyZgxxBo bo); + + /** + * 校验并批量删除安全事故整改信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 通过主数据id获取整改记录列表 + * @param id + * @return + */ + List getZGBGInfoVoByIdList(Long id); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetyFcxxServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetyFcxxServiceImpl.java new file mode 100644 index 00000000..aea8146a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetyFcxxServiceImpl.java @@ -0,0 +1,144 @@ +package org.dromara.safety.accident.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.safety.accident.domain.bo.HseSafetyFcxxBo; +import org.dromara.safety.accident.domain.vo.HseSafetyFcxxVo; +import org.dromara.safety.accident.domain.HseSafetyFcxx; +import org.dromara.safety.accident.mapper.HseSafetyFcxxMapper; +import org.dromara.safety.accident.service.IHseSafetyFcxxService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 安全事故复查信息Service业务层处理 + * + * @author Lion Li + * @date 2025-12-05 + */ +@RequiredArgsConstructor +@Service +public class HseSafetyFcxxServiceImpl extends ServiceImpl implements IHseSafetyFcxxService { + + private final HseSafetyFcxxMapper baseMapper; + + /** + * 查询安全事故复查信息 + * + * @param id 主键 + * @return 安全事故复查信息 + */ + @Override + public HseSafetyFcxxVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询安全事故复查信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全事故复查信息分页列表 + */ + @Override + public TableDataInfo queryPageList(HseSafetyFcxxBo 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(HseSafetyFcxxBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseSafetyFcxxBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HseSafetyFcxx::getId); + lqw.eq(bo.getMasterId() != null, HseSafetyFcxx::getMasterId, bo.getMasterId()); + lqw.eq(bo.getZgId() != null, HseSafetyFcxx::getZgId, bo.getZgId()); + lqw.eq(bo.getReview() != null, HseSafetyFcxx::getReview, bo.getReview()); + lqw.eq(bo.getReviewDate() != null, HseSafetyFcxx::getReviewDate, bo.getReviewDate()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewState()), HseSafetyFcxx::getReviewState, bo.getReviewState()); + lqw.eq(StringUtils.isNotBlank(bo.getNotPassCause()), HseSafetyFcxx::getNotPassCause, bo.getNotPassCause()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewOpinionParticulars()), HseSafetyFcxx::getReviewOpinionParticulars, bo.getReviewOpinionParticulars()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), HseSafetyFcxx::getFileId, bo.getFileId()); + lqw.eq(StringUtils.isNotBlank(bo.getPdfId()), HseSafetyFcxx::getPdfId, bo.getPdfId()); + return lqw; + } + + /** + * 新增安全事故复查信息 + * + * @param bo 安全事故复查信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HseSafetyFcxxBo bo) { + HseSafetyFcxx add = MapstructUtils.convert(bo, HseSafetyFcxx.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改安全事故复查信息 + * + * @param bo 安全事故复查信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HseSafetyFcxxBo bo) { + HseSafetyFcxx update = MapstructUtils.convert(bo, HseSafetyFcxx.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HseSafetyFcxx 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 HseSafetyFcxxVo getInfoVoById(Long id) { + return baseMapper.selectVoOne(new LambdaQueryWrapper().eq(HseSafetyFcxx::getZgId, id)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgdanjlServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgdanjlServiceImpl.java new file mode 100644 index 00000000..4f3420a8 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgdanjlServiceImpl.java @@ -0,0 +1,147 @@ +package org.dromara.safety.accident.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.safety.accident.domain.bo.HseSafetySgdanjlBo; +import org.dromara.safety.accident.domain.vo.HseSafetySgdanjlVo; +import org.dromara.safety.accident.domain.HseSafetySgdanjl; +import org.dromara.safety.accident.mapper.HseSafetySgdanjlMapper; +import org.dromara.safety.accident.service.IHseSafetySgdanjlService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 安全-事故档案记录Service业务层处理 + * + * @author Lion Li + * @date 2025-12-05 + */ +@RequiredArgsConstructor +@Service +public class HseSafetySgdanjlServiceImpl extends ServiceImpl implements IHseSafetySgdanjlService { + + private final HseSafetySgdanjlMapper baseMapper; + + /** + * 查询安全-事故档案记录 + * + * @param id 主键 + * @return 安全-事故档案记录 + */ + @Override + public HseSafetySgdanjlVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询安全-事故档案记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全-事故档案记录分页列表 + */ + @Override + public TableDataInfo queryPageList(HseSafetySgdanjlBo 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(HseSafetySgdanjlBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseSafetySgdanjlBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HseSafetySgdanjl::getId); + lqw.like(StringUtils.isNotBlank(bo.getDanbh()), HseSafetySgdanjl::getDanbh, bo.getDanbh()); + lqw.like(StringUtils.isNotBlank(bo.getProject()), HseSafetySgdanjl::getProject, bo.getProject()); + lqw.like(StringUtils.isNotBlank(bo.getSgbh()), HseSafetySgdanjl::getSgbh, bo.getSgbh()); + lqw.eq(bo.getSfsj() != null, HseSafetySgdanjl::getSfsj, bo.getSfsj()); + lqw.eq(StringUtils.isNotBlank(bo.getSfdd()), HseSafetySgdanjl::getSfdd, bo.getSfdd()); + lqw.eq(StringUtils.isNotBlank(bo.getSglx()), HseSafetySgdanjl::getSglx, bo.getSglx()); + lqw.eq(StringUtils.isNotBlank(bo.getSgdj()), HseSafetySgdanjl::getSgdj, bo.getSgdj()); + lqw.eq(StringUtils.isNotBlank(bo.getSgyy()), HseSafetySgdanjl::getSgyy, bo.getSgyy()); + lqw.eq(StringUtils.isNotBlank(bo.getSgxq()), HseSafetySgdanjl::getSgxq, bo.getSgxq()); + lqw.eq(StringUtils.isNotBlank(bo.getDcxq()), HseSafetySgdanjl::getDcxq, bo.getDcxq()); + lqw.eq(StringUtils.isNotBlank(bo.getZgfcxq()), HseSafetySgdanjl::getZgfcxq, bo.getZgfcxq()); + lqw.eq(StringUtils.isNotBlank(bo.getDanglr()), HseSafetySgdanjl::getDanglr, bo.getDanglr()); + lqw.eq(StringUtils.isNotBlank(bo.getStorageLife()), HseSafetySgdanjl::getStorageLife, bo.getStorageLife()); + lqw.eq(StringUtils.isNotBlank(bo.getDzdanccwz()), HseSafetySgdanjl::getDzdanccwz, bo.getDzdanccwz()); + lqw.eq(StringUtils.isNotBlank(bo.getZzdancfwz()), HseSafetySgdanjl::getZzdancfwz, bo.getZzdancfwz()); + lqw.eq(StringUtils.isNotBlank(bo.getRemarks()), HseSafetySgdanjl::getRemarks, bo.getRemarks()); + lqw.eq(StringUtils.isNotBlank(bo.getShzt()), HseSafetySgdanjl::getShzt, bo.getShzt()); + return lqw; + } + + /** + * 新增安全-事故档案记录 + * + * @param bo 安全-事故档案记录 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HseSafetySgdanjlBo bo) { + HseSafetySgdanjl add = MapstructUtils.convert(bo, HseSafetySgdanjl.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改安全-事故档案记录 + * + * @param bo 安全-事故档案记录 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HseSafetySgdanjlBo bo) { + HseSafetySgdanjl update = MapstructUtils.convert(bo, HseSafetySgdanjl.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HseSafetySgdanjl 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/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgdcServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgdcServiceImpl.java new file mode 100644 index 00000000..bce2b498 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgdcServiceImpl.java @@ -0,0 +1,401 @@ +package org.dromara.safety.accident.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.utils.BatchNumberGenerator; +import org.dromara.safety.accident.domain.HseSafetySgdc; +import org.dromara.safety.accident.domain.HseSafetySgsb; +import org.dromara.safety.accident.domain.HseSafetySgzgbh; +import org.dromara.safety.accident.domain.bo.HseSafetySgdcBo; +import org.dromara.safety.accident.domain.vo.HseSafetySgdcVo; +import org.dromara.safety.accident.domain.vo.SgsbCountVo; +import org.dromara.safety.accident.mapper.HseSafetySgdcMapper; +import org.dromara.safety.accident.menu.SGStatusEnum; +import org.dromara.safety.accident.service.IHseSafetySgdcService; +import org.dromara.system.domain.vo.SysDeptVo; +import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.service.impl.SysDeptServiceImpl; +import org.dromara.system.service.impl.SysUserServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 安全-事故调查Service业务层处理 + * + * @author Lion Li + * @date 2025-12-05 + */ +@RequiredArgsConstructor +@Service +public class HseSafetySgdcServiceImpl extends ServiceImpl implements IHseSafetySgdcService { + + private final HseSafetySgdcMapper baseMapper; + @Autowired + private SysDeptServiceImpl deptService; + @Autowired + private SysUserServiceImpl userService; + @Autowired + private HseSafetySgzgbhServiceImpl zgbhService; + + + /** + * 查询安全-事故调查 + * + * @param id 主键 + * @return 安全-事故调查 + */ + @Override + public HseSafetySgdcVo queryById(Long id){ + HseSafetySgdcVo hseSafetySgdcVo = baseMapper.selectVoById(id); + if (hseSafetySgdcVo == null) { + return null; + } + List hseSafetySgdcVo1 = List.of(hseSafetySgdcVo); + setValue(hseSafetySgdcVo1); + + //获取整改信息 + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(HseSafetySgzgbh::getDcId, id); + HseSafetySgzgbh one = zgbhService.getOne(lqw); + if (one != null){ + hseSafetySgdcVo.setZgrwmc(one.getZgbhbh()); + hseSafetySgdcVo.setZgzt(one.getZgStatus()); + hseSafetySgdcVo.setFcjg(one.getFcStatus()); + } + + return hseSafetySgdcVo1.getFirst(); + } + + /** + * 分页查询安全-事故调查列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全-事故调查分页列表 + */ + @Override + public TableDataInfo queryPageList(HseSafetySgdcBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + setValue(result.getRecords()); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的安全-事故调查列表 + * + * @param bo 查询条件 + * @return 安全-事故调查列表 + */ + @Override + public List queryList(HseSafetySgdcBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseSafetySgdcBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HseSafetySgdc::getId); + lqw.eq(StringUtils.isNotBlank(bo.getDcbh()), HseSafetySgdc::getDcbh, bo.getDcbh()); + lqw.eq(bo.getSgId() != null, HseSafetySgdc::getSgId, bo.getSgId()); + lqw.eq(StringUtils.isNotBlank(bo.getDcxz()), HseSafetySgdc::getDcxz, bo.getDcxz()); + lqw.eq(bo.getDckssj() != null, HseSafetySgdc::getDckssj, bo.getDckssj()); + lqw.eq(bo.getDcjssj() != null, HseSafetySgdc::getDcjssj, bo.getDcjssj()); + lqw.eq(StringUtils.isNotBlank(bo.getSgxxjg()), HseSafetySgdc::getSgxxjg, bo.getSgxxjg()); + lqw.eq(StringUtils.isNotBlank(bo.getZjjy()), HseSafetySgdc::getZjjy, bo.getZjjy()); + lqw.eq(StringUtils.isNotBlank(bo.getJjyy()), HseSafetySgdc::getJjyy, bo.getJjyy()); + lqw.eq(StringUtils.isNotBlank(bo.getZjcl()), HseSafetySgdc::getZjcl, bo.getZjcl()); + lqw.eq(bo.getZrbm() != null, HseSafetySgdc::getZrbm, bo.getZrbm()); + lqw.eq(bo.getZyfzr() != null, HseSafetySgdc::getZyfzr, bo.getZyfzr()); + lqw.eq(bo.getCyfzr() != null, HseSafetySgdc::getCyfzr, bo.getCyfzr()); + lqw.eq(StringUtils.isNotBlank(bo.getZrhf()), HseSafetySgdc::getZrhf, bo.getZrhf()); + lqw.eq(StringUtils.isNotBlank(bo.getZrrdsm()), HseSafetySgdc::getZrrdsm, bo.getZrrdsm()); + lqw.eq(StringUtils.isNotBlank(bo.getZgcsnr()), HseSafetySgdc::getZgcsnr, bo.getZgcsnr()); + lqw.eq(StringUtils.isNotBlank(bo.getZgfzrType()), HseSafetySgdc::getZgfzrType, bo.getZgfzrType()); + lqw.eq(bo.getZgfzr() != null, HseSafetySgdc::getZgfzr, bo.getZgfzr()); + lqw.eq(StringUtils.isNotBlank(bo.getZgyxj()), HseSafetySgdc::getZgyxj, bo.getZgyxj()); + lqw.eq(bo.getZgsx() != null, HseSafetySgdc::getZgsx, bo.getZgsx()); + lqw.eq(bo.getFcry() != null, HseSafetySgdc::getFcry, bo.getFcry()); + lqw.eq(StringUtils.isNotBlank(bo.getZgysbz()), HseSafetySgdc::getZgysbz, bo.getZgysbz()); + lqw.eq(StringUtils.isNotBlank(bo.getClyj()), HseSafetySgdc::getClyj, bo.getClyj()); + lqw.eq(bo.getDcfzr() != null, HseSafetySgdc::getDcfzr, bo.getDcfzr()); + lqw.eq(StringUtils.isNotBlank(bo.getFile()), HseSafetySgdc::getFile, bo.getFile()); + lqw.eq(StringUtils.isNotBlank(bo.getShzt()), HseSafetySgdc::getShzt, bo.getShzt()); + return lqw; + } + + /** + * 新增安全-事故调查 + * + * @param bo 安全-事故调查 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HseSafetySgdcBo bo) { + //检查是否已有数据 + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(HseSafetySgdc::getSgId, bo.getSgId()); + if (baseMapper.selectCount(lqw) > 0) { + throw new RuntimeException("该事故已提交过事故调查"); + } + + HseSafetySgdc add = MapstructUtils.convert(bo, HseSafetySgdc.class); + validEntityBeforeSave(add); + //生成调查编号 + add.setDcbh(BatchNumberGenerator.generateBatchNumber("SGDC-")); + add.setBczt("0"); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改安全-事故调查 + * + * @param bo 安全-事故调查 + * @return 是否修改成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HseSafetySgdcBo bo) { + HseSafetySgdc update = MapstructUtils.convert(bo, HseSafetySgdc.class); + validEntityBeforeSave(update); + //如果报错装填审核通过后向事故整改插入数据 这里放在新增 + if (bo.getBczt().equals("1")) { + addZgxx(update.getId()); + //同步修改上报中的事故状态 + HseSafetySgsb sgsb = baseMapper.getSgsb(update.getSgId()); + if (sgsb != null){ + //更新为待整改 + baseMapper.updateSgzt(sgsb.getId(), SGStatusEnum.TO_BE_RECTIFIED.getCode()); + } + } + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HseSafetySgdc entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除安全-事故调查信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + /** + * 装填数据 + */ + public void setValue(List vos){ +// List deptVos = new ArrayList<>(); +// if (!vos.isEmpty()) { +// //获取部门 +// deptVos = deptService.querListDept(); +// } + for (HseSafetySgdcVo vo : vos) { + //事故关联项目id + HseSafetySgsb hseSafetySgsbVo = baseMapper.getSgsb(vo.getSgId()); + if (hseSafetySgsbVo != null){ + vo.setProjectId(hseSafetySgsbVo.getProjectId()); + //事故编号 + if (hseSafetySgsbVo.getSgbh() != null){ + vo.setSgbh(hseSafetySgsbVo.getSgbh()); + } + } + //部门名称 + if (vo.getZrbm() != null){ +// for (SysDeptVo deptVo : deptVos) { +// if (vo.getZrbm().equals(deptVo.getDeptId())){ +// vo.setBmmc(deptVo.getDeptName()); +// } +// } + SysDeptVo sysDeptVo = deptService.selectDeptById(vo.getZrbm()); + if (sysDeptVo != null){ + vo.setBmmc(sysDeptVo.getDeptName()); + } + } + //主要负责人 + if (vo.getZyfzr() != null){ + SysUserVo sysUserVo = userService.queryById(vo.getZyfzr()); + if (sysUserVo != null){ + vo.setZyzrrmc(sysUserVo.getNickName()); + } + } + //次要负责人 + if (vo.getCyfzr() != null){ + SysUserVo sysUserVo = userService.queryById(vo.getCyfzr()); + if (sysUserVo != null){ + vo.setCyzrrmc(sysUserVo.getNickName()); + } + } + //整改负责人 + if (vo.getZgfzrType() != null) { +// if (vo.getZgfzrType().equals("1")) { +// //班组长 +// +// } else if (vo.getZgfzrType().equals("2")) { +// //分包人 +// +// } + SysUserVo sysUserVo = userService.queryById(vo.getZgfzr()); + if (sysUserVo != null){ + vo.setZgfzrmc(sysUserVo.getNickName()); + } + } + + //复查人员 + if (vo.getFcry() != null){ + SysUserVo sysUserVo = userService.queryById(vo.getFcry()); + if (sysUserVo != null){ + vo.setFcrymc(sysUserVo.getNickName()); + } + } + //调查负责人 + if (vo.getDcfzr() != null){ + SysUserVo sysUserVo = userService.queryById(vo.getDcfzr()); + if (sysUserVo != null){ + vo.setDcfzrmc(sysUserVo.getNickName()); + } + } + //事故状态 + if (vo.getSgId() != null){ + HseSafetySgsb sgsb = baseMapper.getSgsb(vo.getSgId()); + if (sgsb != null){ + vo.setSgzt(sgsb.getSgzt()); + } + } + } + + } + + /** + * 添加整改 + */ + public void addZgxx(Long id){ + if (id == null){ + throw new ServiceException("调查id不能为空"); + } + HseSafetySgzgbh sgzg = new HseSafetySgzgbh(); + //调查 + HseSafetySgdcVo sgdc = queryById(id); + if (sgdc == null){ + throw new ServiceException("找不到事故调查信息,请联系管理员"); + } + //事故id + sgzg.setSgId(sgdc.getSgId()); + //事故编号 + sgzg.setSgbh(sgdc.getSgbh()); + sgzg.setProjectId(sgdc.getProjectId()); + String banBen = BatchNumberGenerator.generateBatchNumber("ZGYBH-"); + sgzg.setZgbhbh(banBen); + //事发地点 需要查询 + HseSafetySgsb sgsb = baseMapper.getSgsb(sgdc.getSgId()); + if (sgsb == null){ + throw new ServiceException("找不到事故信息,请联系管理员"); + } + sgzg.setSfdd(sgsb.getSfdd()); + //事故类型 + sgzg.setSglx(sgsb.getSglx()); + //事故等级 + sgzg.setSgdj(sgsb.getSgdj()); + //事发时间 + sgzg.setSfsj(sgsb.getSfsj()); + //事故原因 + sgzg.setSgyy(sgsb.getSgyy()); + //调查人 + sgzg.setJsr(sgdc.getDcfzr()); + //上报人 + sgzg.setSbr(sgsb.getCreateBy()); + //上报时间 + sgzg.setSbsj(sgsb.getCreateTime()); + //整改状态 + sgzg.setZgStatus(SGStatusEnum.TO_BE_RECTIFIED.getCode()); + //整改人 + sgzg.setZgr(sgdc.getZgfzr()); + //复查人 + sgzg.setFcr(sgdc.getFcry()); + //是否预期 + sgzg.setIsFinish("0"); + //调查id + sgzg.setDcId(sgdc.getId()); + //添加 + zgbhService.save(sgzg); + } + + /** + * 统计数据 + */ + @Override + public SgsbCountVo getListCount(Long projectId){ + //初始化 + SgsbCountVo countVo = new SgsbCountVo(); + long ddcsg = 0; + long dczsg = 0; + long ywcdc = 0; + long zdcsg = 0; + + List sbList = baseMapper.getSgsbListByProjectId(projectId); + if (sbList != null && !sbList.isEmpty()){ + zdcsg = sbList.size(); + } + for (HseSafetySgsb sgsb : sbList) { + //待调查事故 上报后 审核后 待调查 + if (sgsb.getSgzt().equals(SGStatusEnum.UNDER_INVESTIGATION.getCode())){ + HseSafetySgdcVo sgdcVo = baseMapper.selectVoOne(new LambdaQueryWrapper().eq(HseSafetySgdc::getSgId, sgsb.getId())); + if (sgdcVo != null){ + //待调查事故 已生成调查事件但还未调查 + if (sgdcVo.getBczt() == null || sgdcVo.getBczt().equals(SGStatusEnum.DRAFT.getCode())){ + ddcsg++; + continue; + } + //调查中事故 已调查但提交状态为草稿 + if (SGStatusEnum.SUBMIT.getCode().equals(sgdcVo.getBczt())){ + dczsg++; + } + } + + }else if (sgsb.getSgzt().equals(SGStatusEnum.SG_TO_BE_RECTIFIED.getCode())){ + //待整改 + ywcdc++; + } + + + } + + countVo.setDdcsg(ddcsg); + countVo.setDczsg(dczsg); + countVo.setYwcdc(ywcdc); + countVo.setZdcsg(zdcsg); + + return countVo; + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgsbServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgsbServiceImpl.java new file mode 100644 index 00000000..096cfcdc --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgsbServiceImpl.java @@ -0,0 +1,320 @@ +package org.dromara.safety.accident.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.utils.BatchNumberGenerator; +import org.dromara.safety.accident.domain.HseSafetySgdc; +import org.dromara.safety.accident.domain.HseSafetySgsb; +import org.dromara.safety.accident.domain.HseSafetySgzgbh; +import org.dromara.safety.accident.domain.bo.HseSafetySgdcBo; +import org.dromara.safety.accident.domain.bo.HseSafetySgsbBo; +import org.dromara.safety.accident.domain.vo.HseSafetySgsbVo; +import org.dromara.safety.accident.domain.vo.HseSafetySgzgbhHeadVo; +import org.dromara.safety.accident.domain.vo.SgsbCountVo; +import org.dromara.safety.accident.mapper.HseSafetySgsbMapper; +import org.dromara.safety.accident.menu.SGStatusEnum; +import org.dromara.safety.accident.service.IHseSafetySgsbService; +import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.service.impl.SysUserServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDate; +import java.time.ZoneId; +import java.time.temporal.TemporalAdjusters; +import java.util.Collection; +import java.util.Date; +import java.util.List; +import java.util.Map; + +/** + * 安全-事故上报Service业务层处理 + * + * @author Lion Li + * @date 2025-12-05 + */ +@RequiredArgsConstructor +@Service +public class HseSafetySgsbServiceImpl extends ServiceImpl implements IHseSafetySgsbService { + + private final HseSafetySgsbMapper baseMapper; + @Autowired + private SysUserServiceImpl sysUserService; +// @Autowired +// private HseSafetyZgxxServiceImpl zgxxService; + @Autowired + private HseSafetySgdcServiceImpl sgdcService; +// @Autowired +// private IHseSafetySgzgbhService sgzgbhService; + + /** + * 查询安全-事故上报 + * + * @param id 主键 + * @return 安全-事故上报 + */ + @Override + public HseSafetySgsbVo queryById(Long id){ + HseSafetySgsbVo hseSafetySgsbVo = baseMapper.selectVoById(id); + if (hseSafetySgsbVo != null) { + List hseSafetySgsbVo1 = List.of(hseSafetySgsbVo); + setValue(hseSafetySgsbVo1); + return hseSafetySgsbVo1.getFirst(); + }else { + return null; + } + } + + /** + * 分页查询安全-事故上报列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全-事故上报分页列表 + */ + @Override + public TableDataInfo queryPageList(HseSafetySgsbBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + setValue(result.getRecords()); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的安全-事故上报列表 + * + * @param bo 查询条件 + * @return 安全-事故上报列表 + */ + @Override + public List queryList(HseSafetySgsbBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseSafetySgsbBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HseSafetySgsb::getId); + lqw.eq(bo.getProjectId() != null, HseSafetySgsb::getProjectId, bo.getProjectId()); + lqw.eq(StringUtils.isNotBlank(bo.getSgbh()), HseSafetySgsb::getSgbh, bo.getSgbh()); + lqw.eq(bo.getSfsj() != null, HseSafetySgsb::getSfsj, bo.getSfsj()); + lqw.eq(StringUtils.isNotBlank(bo.getSfdd()), HseSafetySgsb::getSfdd, bo.getSfdd()); + lqw.eq(StringUtils.isNotBlank(bo.getSglx()), HseSafetySgsb::getSglx, bo.getSglx()); + lqw.eq(StringUtils.isNotBlank(bo.getSgdj()), HseSafetySgsb::getSgdj, bo.getSgdj()); + lqw.eq(bo.getSwrs() != null, HseSafetySgsb::getSwrs, bo.getSwrs()); + lqw.eq(bo.getZsrs() != null, HseSafetySgsb::getZsrs, bo.getZsrs()); + lqw.eq(bo.getQsrs() != null, HseSafetySgsb::getQsrs, bo.getQsrs()); + lqw.eq(StringUtils.isNotBlank(bo.getRyxx()), HseSafetySgsb::getRyxx, bo.getRyxx()); + lqw.eq(bo.getCbgs() != null, HseSafetySgsb::getCbgs, bo.getCbgs()); + lqw.eq(StringUtils.isNotBlank(bo.getSgyy()), HseSafetySgsb::getSgyy, bo.getSgyy()); + lqw.eq(StringUtils.isNotBlank(bo.getLxfs()), HseSafetySgsb::getLxfs, bo.getLxfs()); + lqw.eq(StringUtils.isNotBlank(bo.getSbqd()), HseSafetySgsb::getSbqd, bo.getSbqd()); + lqw.eq(bo.getJsr() != null, HseSafetySgsb::getJsr, bo.getJsr()); + lqw.eq(StringUtils.isNotBlank(bo.getJjcs()), HseSafetySgsb::getJjcs, bo.getJjcs()); + lqw.eq(StringUtils.isNotBlank(bo.getFile()), HseSafetySgsb::getFile, bo.getFile()); + lqw.eq(StringUtils.isNotBlank(bo.getShzt()), HseSafetySgsb::getShzt, bo.getShzt()); + lqw.eq(StringUtils.isNotBlank(bo.getSgzt()), HseSafetySgsb::getSgzt, bo.getSgzt()); + return lqw; + } + + /** + * 新增安全-事故上报 + * + * @param bo 安全-事故上报 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HseSafetySgsbBo bo) { + HseSafetySgsb add = MapstructUtils.convert(bo, HseSafetySgsb.class); + add.setSgzt(SGStatusEnum.REPORTED.getCode()); + add.setSgbh(BatchNumberGenerator.generateBatchNumber("SGBH-")); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + addDcxx( bo.getId()); + return flag; + } + + /** + * 修改安全-事故上报 + * + * @param bo 安全-事故上报 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HseSafetySgsbBo bo) { + HseSafetySgsb update = MapstructUtils.convert(bo, HseSafetySgsb.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HseSafetySgsb 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 SgsbCountVo getCount(Long projectId){ + + SgsbCountVo sgzgbhHeadVo = new SgsbCountVo(); + List sgzgbhs = this.getBaseMapper().selectList(new LambdaQueryWrapper().eq(HseSafetySgsb::getProjectId, projectId).le(HseSafetySgsb::getCreateTime, LocalDate.now().plusDays(1)).ge(HseSafetySgsb::getCreateTime, LocalDate.now().minusDays(29))); + if (sgzgbhs != null && !sgzgbhs.isEmpty()) { + sgzgbhHeadVo.setBysbsg((long) sgzgbhs.size()); + sgzgbhHeadVo.setDdcsg(sgzgbhs.stream().filter(jxYhzgbh -> SGStatusEnum.UNDER_INVESTIGATION.getCode().equals(jxYhzgbh.getSgzt())).count()); + sgzgbhHeadVo.setDzgsg(sgzgbhs.stream().filter(jxYhzgbh -> SGStatusEnum.SG_TO_BE_RECTIFIED.getCode().equals(jxYhzgbh.getSgzt())).count()); + sgzgbhHeadVo.setYzgsg(sgzgbhs.stream().filter(jxYhzgbh -> SGStatusEnum.SG_HAS_BEEN_RECTIFIED.getCode().equals(jxYhzgbh.getSgzt())).count()); + sgzgbhHeadVo.setYbhsg(sgzgbhs.stream().filter(jxYhzgbh -> SGStatusEnum.SG_CLOSED_LOOP_OPERATION.getCode().equals(jxYhzgbh.getSgzt())).count()); + } + return sgzgbhHeadVo; +// //获取对应列表 +// LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); +// lambdaQueryWrapper.eq(HseSafetySgsb::getProjectId, projectId); +// List list = this.list(lambdaQueryWrapper); +// //获取整改对应列表 +// List zgxxes = baseMapper.getSgzgList(); +// //获取调查列表 +// List dcList = sgdcService.list(); +// //初始化统计信息 +// SgsbCountVo sgsbCountVo = new SgsbCountVo(); +// sgsbCountVo.setSgzgwcl(BigDecimal.ZERO); +// +// long sbsg = 0; +// long dclsg = 0; +// long ybhsg = 0; +// long zgwc = 0; +// //获取时间 +// Date firstDay = getFirstDayOfMonth(); +// Date lastDay = getLastDayOfMonth(); +// for (HseSafetySgsb hseSafetySgsb : list) { +// //本月上报事故 +// if (hseSafetySgsb.getCreateTime().after(firstDay) && hseSafetySgsb.getCreateTime().before(lastDay)){ +// sbsg++; +// //本月完成数量 +// for (HseSafetySgdc safetySgdc : dcList) { +// if (hseSafetySgsb.getId() == safetySgdc.getSgId()){ +// //事故找到 调查 调查寻找整改 +// for (HseSafetySgzgbh zgxx : zgxxes) { +// if (zgxx.getSgId() == safetySgdc.getId()){ +// //如果调查找到了整改 则查看状态 +// if (zgxx.getIsFinish().equals("1") || zgxx.getIsFinish().equals("3")){ +// zgwc++; +// break; +// } +// } +// } +// break; +// } +// } +// } +// //待处理事故 新增后为已上报 审核通过后向调查新增 状态为草稿 原数据状态改为待调查 +// if (hseSafetySgsb.getSgzt().equals(SGStatusEnum.REPORTED.getCode())){ +// dclsg++; +// } +// //已闭环事故 +// if (hseSafetySgsb.getSgzt().equals(SGStatusEnum.CLOSED_LOOP_OPERATION.getCode())){ +// ybhsg++; +// } +// } +// sgsbCountVo.setBysbsg(sbsg); +// sgsbCountVo.setDclsg(dclsg); +// sgsbCountVo.setYbhsg(ybhsg); +// +// BigDecimal wcl; +// if (sbsg == 0){ +// wcl = BigDecimal.ZERO; +// }else { +// wcl = new BigDecimal(zgwc).divide(new BigDecimal(sbsg), 2, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); +// } +// sgsbCountVo.setSgzgwcl(wcl); +// +// return sgsbCountVo; + } + + /** + * 装填信息 + */ + public void setValue(List vos){ + for (HseSafetySgsbVo vo : vos) { + if (vo.getJsr() != null){ + SysUserVo sysUserVo = sysUserService.selectUserById(vo.getJsr()); + if (sysUserVo != null){ + vo.setJsrmc(sysUserVo.getNickName()); + } + } + if (vo.getCreateBy() != null){ + SysUserVo sysUserVo = sysUserService.selectUserById(vo.getCreateBy()); + if (sysUserVo != null){ + vo.setCreateByName(sysUserVo.getNickName()); + } + } + } + } + + /** + * 获取本月第一天 + * @return 本月第一天的Date对象 + */ + public static Date getFirstDayOfMonth() { + LocalDate firstDay = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()); + return Date.from(firstDay.atStartOfDay(ZoneId.systemDefault()).toInstant()); + } + + /** + * 获取本月最后一天 + * @return 本月最后一天的Date对象 + */ + public static Date getLastDayOfMonth() { + LocalDate lastDay = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()); + return Date.from(lastDay.atTime(23, 59, 59).atZone(ZoneId.systemDefault()).toInstant()); + } + + /** + * 对调查进行新增一条数据 有审核后放在审核后进行 现在放在新增里 + */ + public void addDcxx(Long boId){ + HseSafetySgdcBo dcBo = new HseSafetySgdcBo(); + dcBo.setDcbh(BatchNumberGenerator.generateBatchNumber("SGDC-")); + dcBo.setSgId(boId); + dcBo.setBczt("0"); + sgdcService.insertByBo(dcBo); + //更新事故上报的状态 + HseSafetySgsb byId = getById(boId); + if (byId != null){ + byId.setSgzt(SGStatusEnum.UNDER_INVESTIGATION.getCode()); + updateById(byId); + } + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgzgbhServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgzgbhServiceImpl.java new file mode 100644 index 00000000..3a0f5ab5 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetySgzgbhServiceImpl.java @@ -0,0 +1,386 @@ +package org.dromara.safety.accident.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.toolkit.BeanUtils; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.annotation.Resource; +import org.dromara.common.core.domain.model.LoginUser; +import org.dromara.common.core.exception.ServiceException; +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.satoken.utils.LoginHelper; +import org.dromara.common.utils.BatchNumberGenerator; +import org.dromara.mechanical.jxzgbh.domain.JxYhzgbh; +import org.dromara.mechanical.jxzgbh.domain.vo.JxZgxxHeadVo; +import org.dromara.project.domain.vo.project.BusProjectVo; +import org.dromara.project.service.IBusProjectService; +import org.dromara.safety.accident.domain.HseSafetyFcxx; +import org.dromara.safety.accident.domain.HseSafetySgsb; +import org.dromara.safety.accident.domain.HseSafetyZgxx; +import org.dromara.safety.accident.domain.bo.*; +import org.dromara.safety.accident.domain.vo.*; +import org.dromara.safety.accident.menu.SGStatusEnum; +import org.dromara.safety.accident.service.*; +import org.dromara.system.domain.vo.SysDeptVo; +import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.service.ISysDeptService; +import org.dromara.system.service.ISysUserService; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.dromara.safety.accident.domain.HseSafetySgzgbh; +import org.dromara.safety.accident.mapper.HseSafetySgzgbhMapper; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 安全-事故整改闭环Service业务层处理 + * + * @author Lion Li + * @date 2025-12-05 + */ +@RequiredArgsConstructor +@Service +public class HseSafetySgzgbhServiceImpl extends ServiceImpl implements IHseSafetySgzgbhService { + + private final HseSafetySgzgbhMapper baseMapper; + @Resource + private IHseSafetyZgxxService zgxxService; + @Resource + private IHseSafetyFcxxService fcxxService; + @Lazy + @Resource + private IHseSafetySgsbService sgsbService; + @Lazy + @Resource + private IHseSafetySgdanjlService sgdanjlService; + @Lazy + @Resource + private IBusProjectService projectService; + @Lazy + @Resource + private IHseSafetySgdcService sgdcService; + @Lazy + @Resource + private ISysUserService userService; + @Lazy + @Resource + private ISysDeptService deptService; + + /** + * 查询安全-事故整改闭环 + * + * @param id 主键 + * @return 安全-事故整改闭环 + */ + @Override + public HseSafetySgzgbhVo queryById(Long id) { + HseSafetySgzgbhVo vo = baseMapper.selectVoById(id); + if (null != vo) { + List zgxxVos = zgxxService.getZGBGInfoVoByIdList(vo.getId()); + if (!zgxxVos.isEmpty()) { + vo.setZgxxVos(zgxxVos); + } + } + return vo; + } + + /** + * 分页查询安全-事故整改闭环列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全-事故整改闭环分页列表 + */ + @Override + public TableDataInfo queryPageList(HseSafetySgzgbhBo 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(HseSafetySgzgbhBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseSafetySgzgbhBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HseSafetySgzgbh::getId); + lqw.eq(StringUtils.isNotBlank(bo.getZgbhbh()), HseSafetySgzgbh::getZgbhbh, bo.getZgbhbh()); + lqw.eq(bo.getProjectId() != null, HseSafetySgzgbh::getProjectId, bo.getProjectId()); + lqw.eq(StringUtils.isNotBlank(bo.getSgbh()), HseSafetySgzgbh::getSgbh, bo.getSgbh()); + lqw.eq(bo.getSfsj() != null, HseSafetySgzgbh::getSfsj, bo.getSfsj()); + lqw.eq(StringUtils.isNotBlank(bo.getSfdd()), HseSafetySgzgbh::getSfdd, bo.getSfdd()); + lqw.eq(StringUtils.isNotBlank(bo.getSglx()), HseSafetySgzgbh::getSglx, bo.getSglx()); + lqw.eq(StringUtils.isNotBlank(bo.getSgdj()), HseSafetySgzgbh::getSgdj, bo.getSgdj()); + lqw.eq(StringUtils.isNotBlank(bo.getSgyy()), HseSafetySgzgbh::getSgyy, bo.getSgyy()); + lqw.eq(bo.getJsr() != null, HseSafetySgzgbh::getJsr, bo.getJsr()); + lqw.eq(bo.getSbr() != null, HseSafetySgzgbh::getSbr, bo.getSbr()); + lqw.eq(bo.getSbsj() != null, HseSafetySgzgbh::getSbsj, bo.getSbsj()); + lqw.eq(StringUtils.isNotBlank(bo.getZgStatus()), HseSafetySgzgbh::getZgStatus, bo.getZgStatus()); + lqw.eq(bo.getZgr() != null, HseSafetySgzgbh::getZgr, bo.getZgr()); + lqw.eq(StringUtils.isNotBlank(bo.getFcStatus()), HseSafetySgzgbh::getFcStatus, bo.getFcStatus()); + lqw.eq(bo.getFcr() != null, HseSafetySgzgbh::getFcr, bo.getFcr()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewStatus()), HseSafetySgzgbh::getReviewStatus, bo.getReviewStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getShzt()), HseSafetySgzgbh::getShzt, bo.getShzt()); + return lqw; + } + + /** + * 新增安全-事故整改闭环 + * + * @param bo 安全-事故整改闭环 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HseSafetySgzgbhBo bo) { + HseSafetySgzgbh add = MapstructUtils.convert(bo, HseSafetySgzgbh.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改安全-事故整改闭环 + * + * @param bo 安全-事故整改闭环 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HseSafetySgzgbhBo bo) { + HseSafetySgzgbh update = MapstructUtils.convert(bo, HseSafetySgzgbh.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HseSafetySgzgbh entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除安全-事故整改闭环信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + /** + * 新增整改信息 + * + * @param bo + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean addZGxx(HseSafetyZgxxBo bo) { + HseSafetySgzgbh sgzgbh = baseMapper.selectById(bo.getMasterId()); + if (sgzgbh == null) { + throw new ServiceException("找不到整改与闭环信息数据!!!"); + } + LoginUser loginUser = LoginHelper.getLoginUser(); + if (loginUser == null) { + throw new ServiceException("找不到当前登录人信息!!"); + } + if (!sgzgbh.getZgr().equals(loginUser.getUserId())){ + throw new ServiceException("当前登录人不是整改人不能进行整改填报!!"); + } + if (SGStatusEnum.CLOSED_LOOP_OPERATION.getCode().equals(sgzgbh.getReviewStatus())) { + throw new ServiceException("已闭环,不需要再新增整改信息"); + } + if (!SGStatusEnum.TO_BE_RECTIFIED.getCode().equals(sgzgbh.getZgStatus())) { + throw new ServiceException("已整改,不需要再新增整改信息"); + } + HseSafetySgsb hseSafetySgsb = sgsbService.getBaseMapper().selectById(sgzgbh.getSgId()); + if (hseSafetySgsb == null) { + throw new ServiceException("找不到事故信息"); + } + hseSafetySgsb.setSgzt(SGStatusEnum.SG_HAS_BEEN_RECTIFIED.getCode()); + sgsbService.getBaseMapper().updateById(hseSafetySgsb); + //保存整改信息 + Boolean b = zgxxService.insertByBo(bo); + //主数据修改整改状态 + sgzgbh.setZgStatus(SGStatusEnum.HAS_BEEN_RECTIFIED.getCode()); + baseMapper.updateById(sgzgbh); + return b; + } + + /** + * 新增复查信息 + * + * @param bo + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean addFCxx(HseSafetyFcxxBo bo) { + HseSafetySgzgbh sgzgbh = baseMapper.selectById(bo.getMasterId()); + if (sgzgbh == null) { + throw new ServiceException("找不到整改与闭环信息数据!!!"); + } + LoginUser loginUser = LoginHelper.getLoginUser(); + if (loginUser == null) { + throw new ServiceException("找不到当前登录人信息!!"); + } + if (!sgzgbh.getFcr().equals(loginUser.getUserId())){ + throw new ServiceException("当前登录人不是复查人不能进行复查填报!!"); + } + if (SGStatusEnum.CLOSED_LOOP_OPERATION.getCode().equals(sgzgbh.getReviewStatus())) { + throw new ServiceException("已闭环,不需要再新增复查信息"); + } + if (!SGStatusEnum.HAS_BEEN_RECTIFIED.getCode().equals(sgzgbh.getZgStatus())) { + throw new ServiceException("未整改,不能添加复查信息"); + } + HseSafetySgsb hseSafetySgsb = sgsbService.getBaseMapper().selectById(sgzgbh.getSgId()); + if (hseSafetySgsb == null) { + throw new ServiceException("归档失败,找不到事故信息,请联系管理员"); + } + HseSafetyZgxx zgxx = zgxxService.getBaseMapper().selectOne(new LambdaQueryWrapper().eq(HseSafetyZgxx::getMasterId, sgzgbh.getId()).orderByDesc(HseSafetyZgxx::getCreateTime).last("limit 1")); + if (zgxx == null) { + throw new ServiceException("找不到整改信息"); + } + bo.setZgId(zgxx.getId()); + Boolean b = fcxxService.insertByBo(bo); + //修改主数据整改状态合复查状态 + sgzgbh.setFcStatus(bo.getReviewState()); + if (SGStatusEnum.PASS.getCode().equals(bo.getReviewState())) { + sgzgbh.setReviewStatus(SGStatusEnum.CLOSED_LOOP_OPERATION.getCode()); + hseSafetySgsb.setSgzt(SGStatusEnum.SG_CLOSED_LOOP_OPERATION.getCode()); + //复查通过则生成档案信息数据 + HseSafetySgdanjlBo sgdanjlBo = new HseSafetySgdanjlBo(); + //填充基础数据 + String banBen = BatchNumberGenerator.generateBatchNumber("ANQSGDANJL-"); + sgdanjlBo.setDanbh(banBen); + BusProjectVo projectVo = projectService.selectById(hseSafetySgsb.getProjectId()); + if (projectVo != null) { + sgdanjlBo.setProject(projectVo.getProjectName()); + } + sgdanjlBo.setSgbh(hseSafetySgsb.getSgbh()); + sgdanjlBo.setSfsj(hseSafetySgsb.getSfsj()); + sgdanjlBo.setSfdd(hseSafetySgsb.getSfdd()); + sgdanjlBo.setSglx(hseSafetySgsb.getSglx()); + sgdanjlBo.setSgdj(hseSafetySgsb.getSgdj()); + sgdanjlBo.setSgyy(hseSafetySgsb.getSgyy()); + //事故详情填充 + HseSafetySgxqReq sgxqReq = BeanUtil.copyProperties(hseSafetySgsb, HseSafetySgxqReq.class); + sgdanjlBo.setSgxq(JSONUtil.toJsonStr(sgxqReq)); + //事故损失情况填充 + HseSafetySgssqkReq sgssqkReq = BeanUtil.copyProperties(hseSafetySgsb, HseSafetySgssqkReq.class); + sgdanjlBo.setSsqk(JSONUtil.toJsonStr(sgssqkReq)); + //事故调查详情填充 + HseSafetySgdcVo sgdcVo = sgdcService.queryById(sgzgbh.getDcId()); + if (sgdcVo == null) { + throw new ServiceException("归档失败,找不到事故调查信息,请联系管理员"); + } + HseSafetySgdcxqReq sgdcxqReq = BeanUtil.copyProperties(sgdcVo, HseSafetySgdcxqReq.class); + if (sgdcxqReq != null) { + if (sgdcxqReq.getZrbm() != null) { + sgdcxqReq.setZrbmName(deptService.selectDeptNameById(sgdcxqReq.getZrbm())); + } + if (sgdcxqReq.getZyfzr() != null) { + sgdcxqReq.setZyfzrName(userService.queryNameById(sgdcxqReq.getZyfzr())); + } + if (sgdcxqReq.getCyfzr() != null) { + sgdcxqReq.setCyfzrName(userService.queryNameById(sgdcxqReq.getCyfzr())); + } + } + sgdanjlBo.setDcxq(JSONUtil.toJsonStr(sgdcxqReq)); + //事故整改与复查信息填充 + HseSafetySgzgbhVo vo = queryById(sgzgbh.getId()); + if (vo == null) { + throw new ServiceException("归档失败,找不到事故整改与复查信息,请联系管理员"); + } + List reqs = new ArrayList<>(); + if (vo.getZgxxVos() != null) { + vo.getZgxxVos().forEach(v -> { + HseSafetySgzgfcxqReq req = new HseSafetySgzgfcxqReq(); + req.setAbarbeitungMeasure(v.getAbarbeitungMeasure()); + req.setZgFileId(v.getFileId()); + req.setZgFileUrls(v.getFileUrls()); + req.setZgPdfId(v.getPdfId()); + req.setZgPdfUrls(v.getPdfUrls()); + if (v.getFcxxVo() == null) { + throw new ServiceException("归档失败,找不到对应的复查记录,请联系管理员"); + } + req.setReviewState(v.getFcxxVo().getReviewState()); + req.setNotPassCause(v.getFcxxVo().getNotPassCause()); + req.setReviewOpinionParticulars(v.getFcxxVo().getReviewOpinionParticulars()); + req.setFcFileId(v.getFcxxVo().getFileId()); + req.setFcFileUrls(v.getFcxxVo().getFileUrls()); + req.setFcPdfId(v.getFcxxVo().getPdfId()); + req.setFcPdfUrls(v.getFcxxVo().getPdfUrls()); + reqs.add(req); + }); + } + sgdanjlBo.setZgfcxq(JSONUtil.toJsonStr(reqs)); + sgdanjlService.insertByBo(sgdanjlBo); + + } else { + hseSafetySgsb.setSgzt(SGStatusEnum.SG_TO_BE_RECTIFIED.getCode()); + sgzgbh.setZgStatus(SGStatusEnum.TO_BE_RECTIFIED.getCode()); + } + sgsbService.getBaseMapper().updateById(hseSafetySgsb); + baseMapper.updateById(sgzgbh); + return b; + } + + @Override + public HseSafetySgzgbhHeadVo getListHead(HseSafetySgzgbhBo bo) { + HseSafetySgzgbhHeadVo sgzgbhHeadVo = new HseSafetySgzgbhHeadVo(); + List sgzgbhs = this.getBaseMapper().selectList(new LambdaQueryWrapper().eq(HseSafetySgzgbh::getProjectId, bo.getProjectId()).le(HseSafetySgzgbh::getCreateTime, LocalDate.now().plusDays(1)).ge(HseSafetySgzgbh::getCreateTime, LocalDate.now().minusDays(29))); + if (sgzgbhs != null && !sgzgbhs.isEmpty()) { + sgzgbhHeadVo.setZs((long) sgzgbhs.size()); + sgzgbhHeadVo.setDzg(sgzgbhs.stream().filter(jxYhzgbh -> jxYhzgbh.getZgStatus().equals(SGStatusEnum.TO_BE_RECTIFIED.getCode())).count()); + sgzgbhHeadVo.setDys(sgzgbhs.stream().filter(jxYhzgbh -> SGStatusEnum.HAS_BEEN_RECTIFIED.getCode().equals(jxYhzgbh.getZgStatus()) && SGStatusEnum.OPEN_LOOP.getCode().equals(jxYhzgbh.getReviewStatus())).count()); + sgzgbhHeadVo.setYbh(sgzgbhs.stream().filter(jxYhzgbh -> SGStatusEnum.CLOSED_LOOP_OPERATION.getCode().equals(jxYhzgbh.getReviewStatus())).count()); + } + return sgzgbhHeadVo; + } + + @Override + public String getNoPass(HseSafetySgzgbhBo bo) { + HseSafetyZgxx zgxx = zgxxService.getBaseMapper().selectOne(new LambdaQueryWrapper().eq(HseSafetyZgxx::getMasterId, bo.getId()).orderByDesc(HseSafetyZgxx::getCreateTime).last("limit 1")); + if (zgxx == null) { + throw new ServiceException("找不到整改信息"); + } + HseSafetyFcxx fcxx = fcxxService.getBaseMapper().selectOne(new LambdaQueryWrapper().eq(HseSafetyFcxx::getZgId, zgxx.getId()).orderByDesc(HseSafetyFcxx::getCreateTime).last("limit 1")); + if (fcxx == null) { + throw new ServiceException("找不到复查信息"); + } + return fcxx.getNotPassCause(); + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetyZgxxServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetyZgxxServiceImpl.java new file mode 100644 index 00000000..09ae0dd9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/accident/service/impl/HseSafetyZgxxServiceImpl.java @@ -0,0 +1,198 @@ +package org.dromara.safety.accident.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.annotation.Resource; +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.safety.accident.domain.vo.HseSafetyFcxxVo; +import org.dromara.safety.accident.service.IHseSafetyFcxxService; +import org.dromara.system.domain.vo.SysOssVo; +import org.dromara.system.service.ISysOssService; +import org.jetbrains.annotations.NotNull; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.dromara.safety.accident.domain.bo.HseSafetyZgxxBo; +import org.dromara.safety.accident.domain.vo.HseSafetyZgxxVo; +import org.dromara.safety.accident.domain.HseSafetyZgxx; +import org.dromara.safety.accident.mapper.HseSafetyZgxxMapper; +import org.dromara.safety.accident.service.IHseSafetyZgxxService; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 安全事故整改信息Service业务层处理 + * + * @author Lion Li + * @date 2025-12-05 + */ +@RequiredArgsConstructor +@Service +public class HseSafetyZgxxServiceImpl extends ServiceImpl implements IHseSafetyZgxxService { + + private final HseSafetyZgxxMapper baseMapper; + + @Lazy + @Resource + private IHseSafetyFcxxService fcxxService; + @Resource + private ISysOssService ossService; + + /** + * 查询安全事故整改信息 + * + * @param id 主键 + * @return 安全事故整改信息 + */ + @Override + public HseSafetyZgxxVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询安全事故整改信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全事故整改信息分页列表 + */ + @Override + public TableDataInfo queryPageList(HseSafetyZgxxBo 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(HseSafetyZgxxBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseSafetyZgxxBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HseSafetyZgxx::getId); + lqw.eq(bo.getMasterId() != null, HseSafetyZgxx::getMasterId, bo.getMasterId()); + lqw.eq(bo.getAbarbeitung() != null, HseSafetyZgxx::getAbarbeitung, bo.getAbarbeitung()); + lqw.eq(bo.getAbarbeitungKsdate() != null, HseSafetyZgxx::getAbarbeitungKsdate, bo.getAbarbeitungKsdate()); + lqw.eq(bo.getAbarbeitungJsdate() != null, HseSafetyZgxx::getAbarbeitungJsdate, bo.getAbarbeitungJsdate()); + lqw.eq(StringUtils.isNotBlank(bo.getAbarbeitungMeasure()), HseSafetyZgxx::getAbarbeitungMeasure, bo.getAbarbeitungMeasure()); + lqw.eq(StringUtils.isNotBlank(bo.getAbarbeitungAccomplish()), HseSafetyZgxx::getAbarbeitungAccomplish, bo.getAbarbeitungAccomplish()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), HseSafetyZgxx::getFileId, bo.getFileId()); + lqw.eq(StringUtils.isNotBlank(bo.getPdfId()), HseSafetyZgxx::getPdfId, bo.getPdfId()); + return lqw; + } + + /** + * 新增安全事故整改信息 + * + * @param bo 安全事故整改信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HseSafetyZgxxBo bo) { + HseSafetyZgxx add = MapstructUtils.convert(bo, HseSafetyZgxx.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改安全事故整改信息 + * + * @param bo 安全事故整改信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HseSafetyZgxxBo bo) { + HseSafetyZgxx update = MapstructUtils.convert(bo, HseSafetyZgxx.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HseSafetyZgxx 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 List getZGBGInfoVoByIdList(Long id) { + List zgxxVos = baseMapper.selectVoList(new LambdaQueryWrapper().eq(HseSafetyZgxx::getMasterId, id)); + if (zgxxVos != null && !zgxxVos.isEmpty()) { + for (HseSafetyZgxxVo vo : zgxxVos) { + String[] filesStr = vo.getFileId().split(","); + if (filesStr.length > 0) { + List fileUrls = getUrls1(filesStr); + vo.setFileUrls(fileUrls); + } + String[] pdfsStr = vo.getPdfId().split(","); + if (pdfsStr.length > 0) { + List pdfUrls = getUrls1(pdfsStr); + vo.setPdfUrls(pdfUrls); + } + HseSafetyFcxxVo fcxxVo = fcxxService.getInfoVoById(vo.getId()); + if (fcxxVo != null) { + String[] filesStr1 = fcxxVo.getFileId().split(","); + if (filesStr1.length > 0) { + List fileUrls1 = getUrls1(filesStr1); + fcxxVo.setFileUrls(fileUrls1); + } + String[] pdfsStr1 = fcxxVo.getPdfId().split(","); + if (pdfsStr1.length > 0) { + List pdfUrls1 = getUrls1(pdfsStr1); + fcxxVo.setPdfUrls(pdfUrls1); + } + } + vo.setFcxxVo(fcxxVo); + } + } + return zgxxVos; + } + + @NotNull + private List getUrls1(String[] idStr) { + List pdfUrls1 = new ArrayList<>(); + for (String fileId : idStr) { + SysOssVo ossVo = ossService.getById(Long.parseLong(fileId)); + if (ossVo != null) { + pdfUrls1.add(ossVo.getUrl()); + } + } + return pdfUrls1; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardHiddenDangerController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardHiddenDangerController.java new file mode 100644 index 00000000..5b6efca6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardHiddenDangerController.java @@ -0,0 +1,212 @@ +package org.dromara.safety.controller; + +import java.util.List; + +import jakarta.annotation.Resource; +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.contractor.domain.SubContractor; +import org.dromara.contractor.service.ISubContractorService; +import org.dromara.project.domain.BusProjectTeam; +import org.dromara.project.domain.dto.projectteammember.BusProjectTeamMemberQueryReq; +import org.dromara.project.domain.vo.projectteammember.BusProjectTeamMemberVo; +import org.dromara.project.service.IBusProjectTeamMemberService; +import org.dromara.project.service.IBusProjectTeamService; +import org.dromara.safety.domain.bo.HazardRuleBo; +import org.dromara.safety.domain.dto.EvaluateDto; +import org.dromara.safety.domain.vo.HazardRuleVo; +import org.dromara.safety.domain.vo.HiddenDangerCountVo; +import org.dromara.safety.service.IHazardRuleService; +import org.dromara.system.domain.SysUser; +import org.dromara.system.service.ISysUserService; +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.safety.domain.vo.HazardHiddenDangerVo; +import org.dromara.safety.domain.bo.HazardHiddenDangerBo; +import org.dromara.safety.service.IHazardHiddenDangerService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 隐患信息 + * + * @author Lion Li + * @date 2025-12-03 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/safety/hiddenDanger") +public class HazardHiddenDangerController extends BaseController { + + private final IHazardHiddenDangerService hazardHiddenDangerService; + + private final IHazardRuleService hazardRuleService; + + private final ISubContractorService contractorService; + + private final ISysUserService userService; + + private final IBusProjectTeamService projectTeamService; + + private final IBusProjectTeamMemberService projectTeamMemberService; + + /** + * 查询隐患信息列表 + */ + @SaCheckPermission("safety:hiddenDanger:list") + @GetMapping("/list") + public TableDataInfo list(HazardHiddenDangerBo bo, PageQuery pageQuery) { + return hazardHiddenDangerService.queryPageList(bo, pageQuery); + } + + /** + * 导出隐患信息列表 + */ + @SaCheckPermission("safety:hiddenDanger:export") + @Log(title = "隐患信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HazardHiddenDangerBo bo, HttpServletResponse response) { + List list = hazardHiddenDangerService.queryList(bo); + ExcelUtil.exportExcel(list, "隐患信息", HazardHiddenDangerVo.class, response); + } + + /** + * 获取隐患信息详细信息 + * + * @param id 主键 + */ +// @SaCheckPermission("safety:hiddenDanger:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(hazardHiddenDangerService.queryById(id)); + } + + /** + * 新增隐患信息 + */ + @SaCheckPermission("safety:hiddenDanger:add") + @Log(title = "隐患信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody HazardHiddenDangerBo bo) { + return toAjax(hazardHiddenDangerService.insertByBo(bo)); + } + + /** + * 修改隐患信息 + */ + @SaCheckPermission("safety:hiddenDanger:edit") + @Log(title = "隐患信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody HazardHiddenDangerBo bo) { + return toAjax(hazardHiddenDangerService.updateByBo(bo)); + } + + /** + * 删除隐患信息 + * + * @param ids 主键串 + */ + @SaCheckPermission("safety:hiddenDanger:remove") + @Log(title = "隐患信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hazardHiddenDangerService.deleteWithValidByIds(List.of(ids), true)); + } + /** + * 隐患统计 + */ + @GetMapping("/dangerCount/{projectId}") + public R dangerCount(@PathVariable Long projectId) { + HiddenDangerCountVo count = hazardHiddenDangerService.dangerCount(projectId); + return R.ok(count); + } + + /** + * 隐患级别列表 + */ + @GetMapping("/levelList") + public R> export(HazardRuleBo bo) { + List list = hazardRuleService.queryList(bo); + return R.ok(list); + } + + /** + * 评估隐患 + */ + @SaCheckPermission("safety:hiddenDanger:evaluate") + @Log(title = "隐患信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/evaluate") + public R evaluate(@RequestBody EvaluateDto dto) { + return toAjax(hazardHiddenDangerService.evaluate(dto)); + } + + + /** + * 分包单位列表 + * @param projectId 项目ID + */ + @GetMapping("/contractorList") + public R> contractorList(Long projectId) { + List list = contractorService.lambdaQuery() + .select(SubContractor::getId, SubContractor::getName) + .eq(SubContractor::getProjectId, projectId) + .list(); + return R.ok(list); + } + + /** + * 分包人员列表 + * @param contractorId 分包ID + */ + @GetMapping("/contractorUserList") + public R> contractorUserList(Long contractorId) { + List sysUsers = userService.selectUserListByContractorId(contractorId); + return R.ok(sysUsers); + } + + /** + * 班组列表 + * @param projectId 项目ID + */ + @GetMapping("/teamList") + public R> teamList(Long projectId) { + List list = projectTeamService.lambdaQuery() + .select(BusProjectTeam::getId, BusProjectTeam::getTeamName) + .eq(BusProjectTeam::getProjectId, projectId) + .list(); + return R.ok(list); + } + + /** + * 班组长列表 + * @param teamId 班组ID + */ + @GetMapping("/teamUserList") + public R> teamUserList(Long teamId) { + BusProjectTeamMemberQueryReq req = new BusProjectTeamMemberQueryReq(); + req.setTeamId(teamId); + req.setPostId("1"); + List busProjectTeamMemberVos = projectTeamMemberService.queryList(req); + return R.ok(busProjectTeamMemberVos); + } + + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardHiddenDangerRectifyController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardHiddenDangerRectifyController.java new file mode 100644 index 00000000..0ffad25e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardHiddenDangerRectifyController.java @@ -0,0 +1,120 @@ +package org.dromara.safety.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.safety.domain.bo.HazardHiddenDangerBo; +import org.dromara.safety.domain.bo.HazardHiddenDangerRectifyBo; +import org.dromara.safety.domain.dto.hiddendangerrectify.HazardHiddenDangerRectifyRectificationReq; +import org.dromara.safety.domain.dto.hiddendangerrectify.HazardHiddenDangerRectifyReviewReq; +import org.dromara.safety.domain.vo.HazardHiddenDangerRectifyVo; +import org.dromara.safety.domain.vo.HazardHiddenDangerVo; +import org.dromara.safety.service.IHazardHiddenDangerRectifyService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 隐患整改情况 + * + * @author lilemy + * @date 2025-12-04 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/safety/hiddenDangerRectify") +public class HazardHiddenDangerRectifyController extends BaseController { + + private final IHazardHiddenDangerRectifyService hazardHiddenDangerRectifyService; + + /** + * 查询隐患整改情况列表 + */ + @SaCheckPermission("safety:hiddenDangerRectify:list") + @GetMapping("/list") + public TableDataInfo list(HazardHiddenDangerBo bo, PageQuery pageQuery) { + return hazardHiddenDangerRectifyService.queryPageList(bo, pageQuery); + } + + /** + * 导出隐患整改情况列表 + */ + @SaCheckPermission("safety:hiddenDangerRectify:export") + @Log(title = "隐患整改情况", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HazardHiddenDangerRectifyBo bo, HttpServletResponse response) { + List list = hazardHiddenDangerRectifyService.queryList(bo); + ExcelUtil.exportExcel(list, "隐患整改情况", HazardHiddenDangerRectifyVo.class, response); + } + + /** + * 获取隐患整改情况详细信息 + * + * @param hiddenDangerId 主键 + */ + @SaCheckPermission("safety:hiddenDangerRectify:query") + @GetMapping("/{hiddenDangerId}") + public R getInfo(@NotNull(message = "隐患主键不能为空") + @PathVariable Long hiddenDangerId) { + return R.ok(hazardHiddenDangerRectifyService.queryById(hiddenDangerId)); + } + + /** + * 新增隐患整改情况 + */ + @SaCheckPermission("safety:hiddenDangerRectify:add") + @Log(title = "隐患整改情况", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody HazardHiddenDangerRectifyBo bo) { + return toAjax(hazardHiddenDangerRectifyService.insertByBo(bo)); + } + + /** + * 隐患整改 + */ + @SaCheckPermission("safety:hiddenDangerRectify:edit") + @Log(title = "隐患整改情况", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/rectification") + public R rectification(@Validated @RequestBody HazardHiddenDangerRectifyRectificationReq req) { + return toAjax(hazardHiddenDangerRectifyService.rectification(req)); + } + + /** + * 隐患复查 + */ + @SaCheckPermission("safety:hiddenDangerRectify:edit") + @Log(title = "隐患整改情况", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping("/review") + public R review(@Validated @RequestBody HazardHiddenDangerRectifyReviewReq req) { + return toAjax(hazardHiddenDangerRectifyService.review(req)); + } + + /** + * 删除隐患整改情况 + * + * @param ids 主键串 + */ + @SaCheckPermission("safety:hiddenDangerRectify:remove") + @Log(title = "隐患整改情况", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hazardHiddenDangerRectifyService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardRuleController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardRuleController.java new file mode 100644 index 00000000..b109175d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HazardRuleController.java @@ -0,0 +1,106 @@ +package org.dromara.safety.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +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.excel.utils.ExcelUtil; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.safety.domain.bo.HazardRuleBo; +import org.dromara.safety.domain.vo.HazardRuleVo; +import org.dromara.safety.service.IHazardRuleService; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 隐患分级通知规则 + * + * @author lilemy + * @date 2025-12-03 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/safety/rule") +public class HazardRuleController extends BaseController { + + private final IHazardRuleService hazardRuleService; + + /** + * 查询隐患分级通知规则列表 + */ + @SaCheckPermission("safety:rule:list") + @GetMapping("/list") + public TableDataInfo list(HazardRuleBo bo, PageQuery pageQuery) { + return hazardRuleService.queryPageList(bo, pageQuery); + } + + /** + * 导出隐患分级通知规则列表 + */ + @SaCheckPermission("safety:rule:export") + @Log(title = "隐患分级通知规则", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HazardRuleBo bo, HttpServletResponse response) { + List list = hazardRuleService.queryList(bo); + ExcelUtil.exportExcel(list, "隐患分级通知规则", HazardRuleVo.class, response); + } + + /** + * 获取隐患分级通知规则详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("safety:rule:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(hazardRuleService.queryById(id)); + } + + /** + * 新增隐患分级通知规则 + */ + @SaCheckPermission("safety:rule:add") + @Log(title = "隐患分级通知规则", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody HazardRuleBo bo) { + return toAjax(hazardRuleService.insertByBo(bo)); + } + + /** + * 修改隐患分级通知规则 + */ + @SaCheckPermission("safety:rule:edit") + @Log(title = "隐患分级通知规则", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody HazardRuleBo bo) { + return toAjax(hazardRuleService.updateByBo(bo)); + } + + /** + * 删除隐患分级通知规则 + * + * @param ids 主键串 + */ + @SaCheckPermission("safety:rule:remove") + @Log(title = "隐患分级通知规则", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hazardRuleService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseDangerArchiveController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseDangerArchiveController.java new file mode 100644 index 00000000..39474a5f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseDangerArchiveController.java @@ -0,0 +1,128 @@ +package org.dromara.safety.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.safety.domain.vo.HseDangerArchiveCountVo; +import org.dromara.safety.domain.vo.HseSpecialPlanCountVo; +import org.dromara.safety.domain.vo.HseJsjdYuJkjcVo; +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.safety.domain.vo.HseDangerArchiveVo; +import org.dromara.safety.domain.bo.HseDangerArchiveBo; +import org.dromara.safety.service.IHseDangerArchiveService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 危大工程档案 + * + * @author Lion Li + * @date 2025-12-06 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/safety/dangerArchive") +public class HseDangerArchiveController extends BaseController { + + private final IHseDangerArchiveService hseDangerArchiveService; + + /** + * 查询危大工程档案列表 + */ + @SaCheckPermission("safety:dangerArchive:list") + @GetMapping("/list") + public TableDataInfo list(HseDangerArchiveBo bo, PageQuery pageQuery) { + return hseDangerArchiveService.queryPageList(bo, pageQuery); + } + + + /** + * 查询技术交底和过程监控文件 + * @param id 危大工程id + */ + @GetMapping("/getJsjdYGcjk/{id}") + public R list(@PathVariable Long id) { + return R.ok(hseDangerArchiveService.getJsjdYGcjk(id)); + } + + /** + * 导出危大工程档案列表 + */ + @SaCheckPermission("safety:dangerArchive:export") + @Log(title = "危大工程档案", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HseDangerArchiveBo bo, HttpServletResponse response) { + List list = hseDangerArchiveService.queryList(bo); + ExcelUtil.exportExcel(list, "危大工程档案", HseDangerArchiveVo.class, response); + } + + /** + * 获取危大工程档案详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("safety:dangerArchive:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(hseDangerArchiveService.queryById(id)); + } + + /** + * 新增危大工程档案 + */ + @SaCheckPermission("safety:dangerArchive:add") + @Log(title = "危大工程档案", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody HseDangerArchiveBo bo) { + return toAjax(hseDangerArchiveService.insertByBo(bo)); + } + + /** + * 修改危大工程档案 + */ + @SaCheckPermission("safety:dangerArchive:edit") + @Log(title = "危大工程档案", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody HseDangerArchiveBo bo) { + return toAjax(hseDangerArchiveService.updateByBo(bo)); + } + + /** + * 删除危大工程档案 + * + * @param ids 主键串 + */ + @SaCheckPermission("safety:dangerArchive:remove") + @Log(title = "危大工程档案", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hseDangerArchiveService.deleteWithValidByIds(List.of(ids), true)); + } + + + /** + * 统计 + */ + @GetMapping("/count/{projectId}") + public R count(@PathVariable Long projectId) { + return R.ok(hseDangerArchiveService.count(projectId)); + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseDangerousEngineeringController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseDangerousEngineeringController.java new file mode 100644 index 00000000..349b73f9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseDangerousEngineeringController.java @@ -0,0 +1,117 @@ +package org.dromara.safety.controller; + +import java.lang.annotation.Target; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonGetter; +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.safety.domain.vo.HseDangerousEngineeringVo; +import org.dromara.safety.domain.bo.HseDangerousEngineeringBo; +import org.dromara.safety.service.IHseDangerousEngineeringService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 危大工程信息 + * + * @author Lion Li + * @date 2025-12-06 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/safety/dangerousEngineering") +public class HseDangerousEngineeringController extends BaseController { + + private final IHseDangerousEngineeringService hseDangerousEngineeringService; + + /** + * 查询危大工程信息列表 + */ + @SaCheckPermission("safety:dangerousEngineering:list") + @GetMapping("/list") + public TableDataInfo list(HseDangerousEngineeringBo bo, PageQuery pageQuery) { + return hseDangerousEngineeringService.queryPageList(bo, pageQuery); + } + + /** + * 导出危大工程信息列表 + */ + @SaCheckPermission("safety:dangerousEngineering:export") + @Log(title = "危大工程信息", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HseDangerousEngineeringBo bo, HttpServletResponse response) { + List list = hseDangerousEngineeringService.queryList(bo); + ExcelUtil.exportExcel(list, "危大工程信息", HseDangerousEngineeringVo.class, response); + } + + /** + * 获取危大工程信息详细信息 + * + * @param id 主键 + */ +// @SaCheckPermission("safety:dangerousEngineering:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(hseDangerousEngineeringService.queryById(id)); + } + + /** + * 新增危大工程信息 + */ + @SaCheckPermission("safety:dangerousEngineering:add") + @Log(title = "危大工程信息", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody HseDangerousEngineeringBo bo) { + return toAjax(hseDangerousEngineeringService.insertByBo(bo)); + } + + /** + * 修改危大工程信息 + */ + @SaCheckPermission("safety:dangerousEngineering:edit") + @Log(title = "危大工程信息", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody HseDangerousEngineeringBo bo) { + return toAjax(hseDangerousEngineeringService.updateByBo(bo)); + } + + /** + * 删除危大工程信息 + * + * @param ids 主键串 + */ + @SaCheckPermission("safety:dangerousEngineering:remove") + @Log(title = "危大工程信息", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hseDangerousEngineeringService.deleteWithValidByIds(List.of(ids), true)); + } + + + /** + * 危大工程信息列表 + */ + @GetMapping("/engineeringList") + public R> engineerList(HseDangerousEngineeringBo bo) { + List list = hseDangerousEngineeringService.queryList(bo); + return R.ok(list); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseRewardsPunishmentsController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseRewardsPunishmentsController.java new file mode 100644 index 00000000..1f6b045a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseRewardsPunishmentsController.java @@ -0,0 +1,210 @@ +package org.dromara.safety.controller; + +import java.util.List; +import java.util.Map; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.contractor.domain.SubConstructionUser; +import org.dromara.contractor.domain.SubContractor; +import org.dromara.contractor.service.ISubConstructionUserService; +import org.dromara.contractor.service.ISubContractorService; +import org.dromara.project.domain.BusProjectTeam; +import org.dromara.project.service.IBusProjectTeamService; +import org.dromara.safety.domain.HseViolationRecord; +import org.dromara.safety.domain.dto.safetyinspection.HseSafetyInspectionQueryReq; +import org.dromara.safety.domain.dto.violationrecord.HseViolationRecordQueryReq; +import org.dromara.safety.domain.vo.HseRPCountVo; +import org.dromara.safety.domain.vo.safetyinspection.HseSafetyInspectionVo; +import org.dromara.safety.domain.vo.violationrecord.HseViolationRecordVo; +import org.dromara.safety.service.IHseSafetyInspectionService; +import org.dromara.safety.service.IHseViolationRecordService; +import org.dromara.system.domain.SysUser; +import org.dromara.system.service.ISysUserService; +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.safety.domain.vo.HseRewardsPunishmentsVo; +import org.dromara.safety.domain.bo.HseRewardsPunishmentsBo; +import org.dromara.safety.service.IHseRewardsPunishmentsService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 奖惩记录 + * + * @author Lion Li + * @date 2025-12-04 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/safety/rewardsPunishments") +public class HseRewardsPunishmentsController extends BaseController { + + private final IHseRewardsPunishmentsService hseRewardsPunishmentsService; + + private final ISubContractorService contractorService; + + private final IBusProjectTeamService projectTeamService; + + private final ISubConstructionUserService constructionUserService; + + private final IHseSafetyInspectionService safetyInspectionService; + + private final IHseViolationRecordService hseViolationRecordService; + /** + * 查询奖惩记录列表 + */ + @SaCheckPermission("safety:rewardsPunishments:list") + @GetMapping("/list") + public TableDataInfo list(HseRewardsPunishmentsBo bo, PageQuery pageQuery) { + return hseRewardsPunishmentsService.queryPageList(bo, pageQuery); + } + + /** + * 导出奖惩记录列表 + */ + @SaCheckPermission("safety:rewardsPunishments:export") + @Log(title = "奖惩记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HseRewardsPunishmentsBo bo, HttpServletResponse response) { + List list = hseRewardsPunishmentsService.queryList(bo); + ExcelUtil.exportExcel(list, "奖惩记录", HseRewardsPunishmentsVo.class, response); + } + + /** + * 获取奖惩记录详细信息 + * + * @param id 主键 + */ +// @SaCheckPermission("safety:rewardsPunishments:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(hseRewardsPunishmentsService.queryById(id)); + } + + /** + * 新增奖惩记录 + */ + @SaCheckPermission("safety:rewardsPunishments:add") + @Log(title = "奖惩记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody HseRewardsPunishmentsBo bo) { + return toAjax(hseRewardsPunishmentsService.insertByBo(bo)); + } + + /** + * 修改奖惩记录 + */ + @SaCheckPermission("safety:rewardsPunishments:edit") + @Log(title = "奖惩记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody HseRewardsPunishmentsBo bo) { + return toAjax(hseRewardsPunishmentsService.updateByBo(bo)); + } + + /** + * 删除奖惩记录 + * + * @param ids 主键串 + */ + @SaCheckPermission("safety:rewardsPunishments:remove") + @Log(title = "奖惩记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hseRewardsPunishmentsService.deleteWithValidByIds(List.of(ids), true)); + } + + /** + * 金额统计 + */ + @GetMapping("/amountCount/{projectId}") + public R amountCount(@PathVariable Long projectId) { + return R.ok(hseRewardsPunishmentsService.amountCount(projectId)); + } + + /** + * 类型统计 + */ + @GetMapping("/typeCount/{projectId}") + public R> typeCount(@PathVariable Long projectId) { + return R.ok(hseRewardsPunishmentsService.typeCount(projectId)); + } + + + /** + * 分包单位列表 + * @param projectId 项目ID + */ + @GetMapping("/contractorList") + public R> contractorList(Long projectId) { + List list = contractorService.lambdaQuery() + .select(SubContractor::getId, SubContractor::getName) + .eq(SubContractor::getProjectId, projectId) + .list(); + return R.ok(list); + } + + /** + * 班组列表 + * @param projectId 项目ID + */ + @GetMapping("/teamList") + public R> teamList(Long projectId) { + List list = projectTeamService.lambdaQuery() + .select(BusProjectTeam::getId, BusProjectTeam::getTeamName) + .eq(BusProjectTeam::getProjectId, projectId) + .list(); + return R.ok(list); + } + + /** + * 施工人员列表 + * @param projectId 项目ID + */ + @GetMapping("/constructUserList") + public R> constructUserList(Long projectId) { + List list = constructionUserService.lambdaQuery() + .select(SubConstructionUser::getSysUserId, SubConstructionUser::getUserName) + .eq(SubConstructionUser::getProjectId, projectId) + .isNotNull(SubConstructionUser::getTeamId) + .eq(SubConstructionUser::getUserRole, "0") + .list(); + return R.ok(list); + } + + + /** + * 查询安全工单列表 + */ + @GetMapping("/safetyInspectionList") + public TableDataInfo safetyInspectionList(HseSafetyInspectionQueryReq req, PageQuery pageQuery) { + req.setCheckCorrectorNull(true); + return safetyInspectionService.queryPageListWeb(req, pageQuery); + } + + /** + * 查询AI工单列表 + */ + @GetMapping("/aiList") + public TableDataInfo aiList(HseViolationRecordQueryReq req, PageQuery pageQuery) { + req.setCheckCorrectorNull(true); + return hseViolationRecordService.queryPageList(req, pageQuery); + } + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseRpObjectController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseRpObjectController.java new file mode 100644 index 00000000..a249a26d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseRpObjectController.java @@ -0,0 +1,117 @@ +package org.dromara.safety.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.safety.domain.vo.HseRpPersonVo; +import org.dromara.safety.domain.bo.HseRpObjectBo; +import org.dromara.safety.service.IHseRpObjectService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 奖惩对象 + * + * @author Lion Li + * @date 2025-12-04 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/safety/rpPerson") +public class HseRpObjectController extends BaseController { + + private final IHseRpObjectService hseRpPersonService; + + /** + * 查询奖惩对象列表 + */ + @SaCheckPermission("safety:rpPerson:list") + @GetMapping("/list") + public TableDataInfo list(HseRpObjectBo bo, PageQuery pageQuery) { + return hseRpPersonService.queryPageList(bo, pageQuery); + } + + /** + * 导出奖惩对象列表 + */ + @SaCheckPermission("safety:rpPerson:export") + @Log(title = "奖惩对象", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HseRpObjectBo bo, HttpServletResponse response) { + List list = hseRpPersonService.queryList(bo); + ExcelUtil.exportExcel(list, "奖惩对象", HseRpPersonVo.class, response); + } + + /** + * 获取奖惩对象详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("safety:rpPerson:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(hseRpPersonService.queryById(id)); + } + + /** + * 新增奖惩对象 + */ + @SaCheckPermission("safety:rpPerson:add") + @Log(title = "奖惩对象", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody HseRpObjectBo bo) { + return toAjax(hseRpPersonService.insertByBo(bo)); + } + + /** + * 修改奖惩对象 + */ + @SaCheckPermission("safety:rpPerson:edit") + @Log(title = "奖惩对象", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody HseRpObjectBo bo) { + return toAjax(hseRpPersonService.updateByBo(bo)); + } + + /** + * 删除奖惩对象 + * + * @param ids 主键串 + */ + @SaCheckPermission("safety:rpPerson:remove") + @Log(title = "奖惩对象", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hseRpPersonService.deleteWithValidByIds(List.of(ids), true)); + } + + /** + * 奖惩对象列表 + */ + @GetMapping("/objectList/{rpId}") + public R> objectList(@PathVariable Long rpId) { + HseRpObjectBo bo = new HseRpObjectBo(); + bo.setRpId(rpId); + List list = hseRpPersonService.queryList(bo); + return R.ok(list); + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseSpecialPlanController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseSpecialPlanController.java new file mode 100644 index 00000000..ec8be4fa --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/controller/HseSpecialPlanController.java @@ -0,0 +1,125 @@ +package org.dromara.safety.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.safety.domain.vo.HseSpecialPlanCountVo; +import org.dromara.safety.domain.vo.HseSpecialPlanFileVo; +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.safety.domain.vo.HseSpecialPlanVo; +import org.dromara.safety.domain.bo.HseSpecialPlanBo; +import org.dromara.safety.service.IHseSpecialPlanService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 危大工程专项施工方案 + * + * @author Lion Li + * @date 2025-12-06 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/safety/specialPlan") +public class HseSpecialPlanController extends BaseController { + + private final IHseSpecialPlanService hseSpecialPlanService; + + /** + * 查询危大工程专项施工方案列表 + */ + @SaCheckPermission("safety:specialPlan:list") + @GetMapping("/list") + public TableDataInfo list(HseSpecialPlanBo bo, PageQuery pageQuery) { + return hseSpecialPlanService.queryPageList(bo, pageQuery); + } + + /** + * 导出危大工程专项施工方案列表 + */ + @SaCheckPermission("safety:specialPlan:export") + @Log(title = "危大工程专项施工方案", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HseSpecialPlanBo bo, HttpServletResponse response) { + List list = hseSpecialPlanService.queryList(bo); + ExcelUtil.exportExcel(list, "危大工程专项施工方案", HseSpecialPlanVo.class, response); + } + + /** + * 获取危大工程专项施工方案详细信息 + * + * @param id 主键 + */ +// @SaCheckPermission("safety:specialPlan:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(hseSpecialPlanService.queryById(id)); + } + + /** + * 新增危大工程专项施工方案 + */ + @SaCheckPermission("safety:specialPlan:add") + @Log(title = "危大工程专项施工方案", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody HseSpecialPlanBo bo) { + return toAjax(hseSpecialPlanService.insertByBo(bo)); + } + + /** + * 修改危大工程专项施工方案 + */ + @SaCheckPermission("safety:specialPlan:edit") + @Log(title = "危大工程专项施工方案", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody HseSpecialPlanBo bo) { + return toAjax(hseSpecialPlanService.updateByBo(bo)); + } + + /** + * 删除危大工程专项施工方案 + * + * @param ids 主键串 + */ + @SaCheckPermission("safety:specialPlan:remove") + @Log(title = "危大工程专项施工方案", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hseSpecialPlanService.deleteWithValidByIds(List.of(ids), true)); + } + + + /** + * 统计 + */ + @GetMapping("/count/{projectId}") + public R count(@PathVariable Long projectId) { + return R.ok(hseSpecialPlanService.count(projectId)); + } + + + /** + * 获取档案 + */ + @GetMapping("/getFile/{deId}") + public R getFile(@PathVariable Long deId) { + return R.ok(hseSpecialPlanService.getFile(deId)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDanger.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDanger.java new file mode 100644 index 00000000..84faaec2 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDanger.java @@ -0,0 +1,153 @@ +package org.dromara.safety.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; +import java.time.LocalDateTime; + +/** + * 隐患信息对象 hazard_hidden_danger + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hazard_hidden_danger") +public class HazardHiddenDanger extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + // 待评估 + public static final String EVALUATE = "1"; + // 待整改 + public static final String RECTIFY = "2"; + // 待复查 + public static final String REVIEW = "3"; + // 已闭环 + public static final String CLOSED = "4"; + + /** + * id + */ + @TableId(value = "id") + private Long id; + + /** + * 项目ID + */ + private Long projectId; + + /** + * 隐患编号 + */ + private String dangerCode; + + /** + * 隐患名称 + */ + private String dangerName; + + /** + * 隐患类型 + */ + private String dangerType; + + /** + * 隐患描述 + */ + private String dangerDes; + + /** + * 隐患附件 + */ + private String dangerFile; + + + /** + * 上报位置 + */ + private String reportLocation; + + /** + * 上报人 + */ + private Long reporter; + + /** + * 上报人电话 + */ + private String reporterPhone; + + /** + * 上报时间 + */ + private LocalDateTime reportTime; + + /** + * 隐患等级ID + */ + private Long dangerLevelId; + + /** + * 评估人 + */ + private Long evaluator; + + /** + * 评估时间 + */ + private LocalDateTime evaluateTime; + + /** + * 评估依据 + */ + private String evaluateBasis; + + /** + * 评估意见 + */ + private String reporterOpinion; + + /** + * 评估附件 + */ + private String reporterFile; + + /** + * 整改时间 + */ + private LocalDateTime rectifyTime; + + /** + * 整改单位 1-班组 2-分包 + */ + private String rectifyUnit; + + /** + * 整改单位ID + */ + private Long rectifyUnitId; + + /** + * 整改负责人Id + */ + private Long rectifyUserId; + + /** + * 状态(1-待评估,2-待整改,3-待复查,4-已闭环) + */ + private String status; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDangerRectify.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDangerRectify.java new file mode 100644 index 00000000..b2182d77 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardHiddenDangerRectify.java @@ -0,0 +1,97 @@ +package org.dromara.safety.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; +import java.time.LocalDateTime; + +/** + * 隐患整改情况对象 hazard_hidden_danger_rectify + * + * @author lilemy + * @date 2025-12-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hazard_hidden_danger_rectify") +public class HazardHiddenDangerRectify extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id") + private Long id; + + /** + * 关联隐患ID + */ + private Long hiddenDangerId; + + /** + * 整改期限 + */ + private LocalDateTime rectifyDeadline; + + /** + * 整改次数 + */ + private Integer rectifyCount; + + /** + * 整改人ID + */ + private Long rectifyUserId; + + /** + * 整改说明 + */ + private String rectifyDesc; + + /** + * 整改附件 + */ + private String rectifyFiles; + + /** + * 完成整改时间 + */ + private LocalDateTime rectifyTime; + + /** + * 复查人ID + */ + private Long reviewUserId; + + /** + * 复查说明 + */ + private String reviewDesc; + + /** + * 复查附件 + */ + private String reviewFiles; + + /** + * 复查时间 + */ + private LocalDateTime reviewTime; + + /** + * 复查状态(0待复查 1复查通过 2复查不通过) + */ + private String reviewStatus; + + /** + * 备注 + */ + private String remark; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardRule.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardRule.java new file mode 100644 index 00000000..ca376f35 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardRule.java @@ -0,0 +1,77 @@ +package org.dromara.safety.domain; + +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; + +/** + * 隐患分级通知规则对象 hazard_rule + * + * @author lilemy + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hazard_rule") +public class HazardRule extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "id") + private Long id; + + /** + * 项目id + */ + private Long projectId; + + /** + * 隐患级别 + */ + private String hazardLevel; + + /** + * 隐患权重 + */ + private Integer hazardWeight; + + /** + * 响应时限数值 + */ + private Integer responseTime; + + /** + * 响应时效单位 + */ + private String responseUnit; + + /** + * 通知方式 + */ + private String notifyMethod; + + /** + * 超时处理方式 + */ + private String timeoutAction; + + /** + * 额外设置 + */ + private String extraSetting; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardRuleNotifyObject.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardRuleNotifyObject.java new file mode 100644 index 00000000..ac379709 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HazardRuleNotifyObject.java @@ -0,0 +1,40 @@ +package org.dromara.safety.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 隐患规则通知对象对象 hazard_rule_notify_object + * + * @author lilemy + * @date 2025-12-03 + */ +@Data +@TableName("hazard_rule_notify_object") +public class HazardRuleNotifyObject implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 规则ID + */ + @TableId(type = IdType.INPUT) + private Long ruleId; + + /** + * 通知ID + */ + private Long notifyId; + + /** + * 通知类型 + */ + private String notifyType; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseDangerArchive.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseDangerArchive.java new file mode 100644 index 00000000..787d12a4 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseDangerArchive.java @@ -0,0 +1,132 @@ +package org.dromara.safety.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.time.LocalDate; + +/** + * 危大工程档案对象 hse_danger_archive + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hse_danger_archive") +public class HseDangerArchive extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(value = "id") + private Long id; + + /** + * 项目Id + */ + private Long projectId; + + /** + * 档案编号(自动生成/手动输入) + */ + private String archiveNo; + + /** + * 危大工程ID + */ + private Long deId; + + /** + * 危大工程名称 + */ + private String deName; + + /** + * 档案类别(多个类别用逗号分隔,如:方案,论证) + */ + private String archiveCategory; + + /** + * 归档日期 + */ + private LocalDate archiveDate; + + /** + * 归档人 + */ + private String archiver; + + /** + * 归档单位 + */ + private String archiveUnit; + + /** + * 危险等级 + */ + private String riskLevel; + + /** + * 施工单位 + */ + private String constructionUnit; + + /** + * 标段 + */ + private String section; + + /** + * 档案关键字(多个用逗号分隔) + */ + private String archiveKeywords; + + /** + * 方案定稿文件路径 + */ + private String finalPlanFile; + + /** + * 专家论证资料文件路径 + */ + private String expertArgumentFile; + + /** + * 技术交底资料文件路径 + */ + private String technicalFile; + + /** + * 旁站监理记录文件路径 + */ + private String supervisionRecordFile; + + /** + * 监控日志文件路径 + */ + private String monitoringLogFile; + + /** + * 验收确认书文件路径 + */ + private String acceptanceCertificateFile; + + /** + * 施工影像/附件文件路径 + */ + private String constructionMediaFile; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseDangerousEngineering.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseDangerousEngineering.java new file mode 100644 index 00000000..1f6c7a79 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseDangerousEngineering.java @@ -0,0 +1,113 @@ +package org.dromara.safety.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +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; + +/** + * 危大工程信息对象 hse_dangerous_engineering + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hse_dangerous_engineering") +public class HseDangerousEngineering extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(value = "id") + private Long id; + + /** + * 项目Id + */ + private Long projectId; + + /** + * 危大工程名称 + */ + private String deName; + + /** + * 风险等级 + */ + private String riskLevel; + + /** + * 作业内容 + */ + private String workType; + + /** + * 施工开始时间 + */ + private Date startTime; + + /** + * 预计完成时间 + */ + private Date endTime; + + /** + * 作业地点 + */ + private String workPlace; + + /** + * 分包单位Id + */ + private Long subcontractorId; + + /** + * 分包单位名 + */ + private String subcontractor; + + /** + * 班组Id + */ + private Long teamId; + + /** + * 班组名 + */ + private String teamName; + + /** + * 项目经理 + */ + private String projectManager; + + /** + * 现场负责人(紧急联系人) + */ + private String siteManager; + + /** + * 紧急联系电话 + */ + private String emergencyPhone; + + /** + * 建设单位 + */ + private String constructionUnit; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseRecognizeRecord.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseRecognizeRecord.java index a9293c11..492a2b06 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseRecognizeRecord.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseRecognizeRecord.java @@ -52,6 +52,11 @@ public class HseRecognizeRecord implements Serializable { */ private String violationType; + /** + * 原始图片id + */ + private Long originalUrlId; + /** * 原始图片 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseRewardsPunishments.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseRewardsPunishments.java new file mode 100644 index 00000000..c2d031f4 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseRewardsPunishments.java @@ -0,0 +1,92 @@ +package org.dromara.safety.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.math.BigDecimal; + +import java.io.Serial; + +/** + * 奖惩记录对象 hse_rewards_punishments + * + * @author Lion Li + * @date 2025-12-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hse_rewards_punishments") +public class HseRewardsPunishments extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(value = "id") + private Long id; + + /** + * 奖惩编号(如RP001) + */ + private String rpCode; + + /** + * 项目ID + */ + private Long projectId; + + /** + * 类型:1-奖励,2-惩罚 + */ + private String type; + + /** + * 分类(如AI工单、其他、安全工单等) + */ + private String category; + + /** + * 金额(元) + */ + private BigDecimal amount; + + /** + * 关联工单id + */ + private Long relatedWorkId; + + /** + * 发起人 + */ + private Long submitter; + + /** + * 奖惩对象类型(1-分包 2-班组 3-人) + */ + private String recipientType; + + /** + * 审核状态 + */ + private String status; + + /** + * 奖惩原因 + */ + private String reason; + + /** + * 附件 + */ + private String file; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseRpObject.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseRpObject.java new file mode 100644 index 00000000..8a8c71eb --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseRpObject.java @@ -0,0 +1,52 @@ +package org.dromara.safety.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.math.BigDecimal; + +import java.io.Serial; + +/** + * 奖惩对象对象 hse_rp_person + * + * @author Lion Li + * @date 2025-12-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hse_rp_object") +public class HseRpObject extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(value = "id") + private Long id; + + /** + * 关联奖惩记录ID(rewards_punishments.id) + */ + private Long rpId; + + /** + * 对象id + */ + private Long objectId; + + /** + * 对象名称(人员姓名或班组名称) + */ + private String objectName; + + /** + * 个人/班组金额 + */ + private BigDecimal amount; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseSafetyLog.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseSafetyLog.java index 6a83f706..c7ca1206 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseSafetyLog.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseSafetyLog.java @@ -33,11 +33,21 @@ public class HseSafetyLog extends BaseEntity { */ private Long projectId; + /** + * 类型 1-文字,2-文件 + */ + private String type; + /** * 发生日期 */ private String dateOfOccurrence; + /** + * 结束日期 + */ + private String endDate; + /** * 最高气温 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseSpecialPlan.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseSpecialPlan.java new file mode 100644 index 00000000..d34f15b2 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/HseSpecialPlan.java @@ -0,0 +1,203 @@ +package org.dromara.safety.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * 危大工程专项施工方案对象 hse_special_plan + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hse_special_plan") +public class HseSpecialPlan extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @TableId(value = "id") + private Long id; + + /** + * 项目id + */ + private Long projectId; + + /** + * 方案编号(自动生成/手动输入) + */ + private String planNo; + + /** + * 危大工程ID + */ + private Long deId; + + /** + * 危大工程名称 + */ + private String deName; + + /** + * 方案名称 + */ + private String planName; + + /** + * 方案类别 + */ + private String planCategory; + + /** + * 编制单位 + */ + private String compileUnit; + + /** + * 编制人 + */ + private String compiler; + + /** + * 审核人 + */ + private String reviewer; + + /** + * 批准人 + */ + private String approve; + + /** + * 施工流程与步骤 + */ + private String constructionProcess; + + /** + * 施工参数 + */ + private String constructionParams; + + /** + * 施工人员资质 + */ + private String personnelQualification; + + /** + * 施工附件 + */ + private String constructionFile; + + /** + * 是否需专家论证(1=是,0=否) + */ + private Long needExpertArgument; + + /** + * 专家结论附件路径 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String expertFile; + + /** + * 论证结论 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String argumentConclusion; + + /** + * 论证日期 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private LocalDate argumentDate; + + /** + * 专家组负责人(姓名+单位) + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String expertLeader; + + /** + * 是否需旁站监理(1=是,0=否) + */ + private Long needSupervision; + + /** + * 旁站监理单位 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String supervisionUnit; + + /** + * 旁站监理人 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String supervisor; + + /** + * 旁站实际开始时间 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private LocalDateTime supervisionStartTime; + + /** + * 旁站实际结束时间 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private LocalDateTime supervisionEndTime; + + /** + * 旁站记录附件路径 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String supervisionFile; + + /** + * 应急预案是否涉及(1=是,0=否) + */ + private Long involveEmergencyPlan; + + /** + * 关联应急预案编号 + */ + @TableField(updateStrategy = FieldStrategy.ALWAYS) + private String emergencyPlanNo; + + /** + * 方案初审/复核记录 + */ + private String reviewRecord; + + /** + * 备案时间 + */ + private LocalDateTime recordTime; + + /** + * 备案单位 + */ + private String recordUnit; + + /** + * 备案文件号 + */ + private String recordFileNo; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardHiddenDangerBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardHiddenDangerBo.java new file mode 100644 index 00000000..11a51589 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardHiddenDangerBo.java @@ -0,0 +1,142 @@ +package org.dromara.safety.domain.bo; + +import org.dromara.safety.domain.HazardHiddenDanger; +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.time.LocalDateTime; + +/** + * 隐患信息业务对象 hazard_hidden_danger + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HazardHiddenDanger.class, reverseConvertGenerate = false) +public class HazardHiddenDangerBo extends BaseEntity { + + /** + * ID + */ + @NotNull(message = "ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 隐患编号 + */ + private String dangerCode; + + /** + * 隐患类型 + */ + private String dangerType; + + /** + * 隐患名称 + */ + private String dangerName; + + /** + * 隐患描述 + */ + private String dangerDes; + + /** + * 隐患附件 + */ + private String dangerFile; + + /** + * 上报位置 + */ + private String reportLocation; + + /** + * 上报人 + */ + private Long reporter; + + /** + * 上报人电话 + */ + private String reporterPhone; + + /** + * 上报时间 + */ + private LocalDateTime reportTime; + + /** + * 隐患等级ID + */ + private Long dangerLevelId; + + /** + * 评估人 + */ + private Long evaluator; + + /** + * 评估时间 + */ + private LocalDateTime evaluateTime; + + /** + * 评估依据 + */ + private String evaluateBasis; + + /** + * 评估意见 + */ + private String reporterOpinion; + + /** + * 评估附件 + */ + private String reporterFile; + + /** + * 整改时间 + */ + private LocalDateTime rectifyTime; + + /** + * 整改单位 1-班组 2-分包 + */ + private String rectifyUnit; + + /** + * 整改单位ID + */ + private Long rectifyUnitId; + + /** + * 整改负责人Id + */ + private Long rectifyUserId; + + /** + * 状态(1-待评估,2-待整改,3-待复查,4-已闭环) + */ + private String status; + + /** + * 备注 + */ + private String remark; + + + /** + * 项目ID + */ + private Long projectId; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardHiddenDangerRectifyBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardHiddenDangerRectifyBo.java new file mode 100644 index 00000000..e4375f58 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardHiddenDangerRectifyBo.java @@ -0,0 +1,93 @@ +package org.dromara.safety.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.safety.domain.HazardHiddenDangerRectify; + +import java.io.Serial; +import java.time.LocalDateTime; + +/** + * 隐患整改情况业务对象 hazard_hidden_danger_rectify + * + * @author lilemy + * @date 2025-12-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HazardHiddenDangerRectify.class, reverseConvertGenerate = false) +public class HazardHiddenDangerRectifyBo extends BaseEntity { + + @Serial + private static final long serialVersionUID = -211811062254843066L; + + /** + * 主键 + */ + @NotNull(message = "主键不能为空", groups = {EditGroup.class}) + private Long id; + + /** + * 关联隐患ID + */ + @NotNull(message = "关联隐患ID不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long hiddenDangerId; + + /** + * 整改人ID + */ + @NotNull(message = "整改人ID不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long rectifyUserId; + + /** + * 整改说明 + */ + private String rectifyDesc; + + /** + * 整改附件 + */ + private String rectifyFiles; + + /** + * 完成整改时间 + */ + private LocalDateTime rectifyTime; + + /** + * 复查人ID + */ + private Long reviewUserId; + + /** + * 复查说明 + */ + private String reviewDesc; + + /** + * 复查附件 + */ + private String reviewFiles; + + /** + * 复查时间 + */ + private LocalDateTime reviewTime; + + /** + * 复查状态(0待复查 1复查通过 2复查不通过) + */ + private String reviewStatus; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardRuleBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardRuleBo.java new file mode 100644 index 00000000..1ac99ebe --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardRuleBo.java @@ -0,0 +1,94 @@ +package org.dromara.safety.domain.bo; + +import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.safety.domain.HazardRule; + +import java.io.Serial; +import java.util.List; + +/** + * 隐患分级通知规则业务对象 hazard_rule + * + * @author lilemy + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HazardRule.class, reverseConvertGenerate = false) +public class HazardRuleBo extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1523915364119852788L; + + /** + * 主键 + */ + @NotNull(message = "主键不能为空", groups = {EditGroup.class}) + private Long id; + + /** + * 项目id + */ + @NotNull(message = "项目id不能为空", groups = {AddGroup.class, EditGroup.class}) + private Long projectId; + + /** + * 隐患级别 + */ + @NotBlank(message = "隐患级别不能为空", groups = {AddGroup.class, EditGroup.class}) + private String hazardLevel; + + /** + * 隐患权重 + */ + @NotNull(message = "隐患权重不能为空", groups = {AddGroup.class, EditGroup.class}) + private Integer hazardWeight; + + /** + * 响应时限数值 + */ + @NotNull(message = "响应时限数值不能为空", groups = {AddGroup.class, EditGroup.class}) + private Integer responseTime; + + /** + * 响应时效单位 + */ + @NotBlank(message = "响应时效单位不能为空", groups = {AddGroup.class, EditGroup.class}) + private String responseUnit; + + /** + * 通知方式 + */ + @NotBlank(message = "通知方式不能为空", groups = {AddGroup.class, EditGroup.class}) + private String notifyMethod; + + /** + * 超时处理方式 + */ + @NotBlank(message = "超时处理方式不能为空", groups = {AddGroup.class, EditGroup.class}) + private String timeoutAction; + + /** + * 额外设置 + */ + private String extraSetting; + + /** + * 备注 + */ + private String remark; + + /** + * 通知对象 + */ + @NotNull(message = "通知对象不能为空", groups = {AddGroup.class, EditGroup.class}) + private List notifyObjects; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardRuleNotifyObjectBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardRuleNotifyObjectBo.java new file mode 100644 index 00000000..6b607f13 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HazardRuleNotifyObjectBo.java @@ -0,0 +1,28 @@ +package org.dromara.safety.domain.bo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 隐患规则通知对象业务对象 hazard_rule_notify_object + * + * @author lilemy + * @date 2025-12-03 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class HazardRuleNotifyObjectBo { + + /** + * 通知ID + */ + private Long notifyId; + + /** + * 通知类型 + */ + private String notifyType; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseDangerArchiveBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseDangerArchiveBo.java new file mode 100644 index 00000000..8144d32f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseDangerArchiveBo.java @@ -0,0 +1,132 @@ +package org.dromara.safety.domain.bo; + +import org.dromara.safety.domain.HseDangerArchive; +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.time.LocalDate; + +/** + * 危大工程档案业务对象 hse_danger_archive + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HseDangerArchive.class, reverseConvertGenerate = false) +public class HseDangerArchiveBo extends BaseEntity { + + /** + * ID + */ + @NotNull(message = "ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 项目Id + */ + private Long projectId; + + /** + * 档案编号(自动生成/手动输入) + */ + private String archiveNo; + + /** + * 危大工程ID + */ + private Long deId; + + /** + * 危大工程名称 + */ + private String deName; + + /** + * 档案类别(多个类别用逗号分隔,如:方案,论证) + */ + private String archiveCategory; + + /** + * 归档日期 + */ + private LocalDate archiveDate; + + /** + * 归档人 + */ + private String archiver; + + /** + * 归档单位 + */ + private String archiveUnit; + + /** + * 危险等级 + */ + private String riskLevel; + + /** + * 施工单位 + */ + private String constructionUnit; + + /** + * 标段 + */ + private String section; + + /** + * 档案关键字(多个用逗号分隔) + */ + private String archiveKeywords; + + /** + * 方案定稿文件路径 + */ + private String finalPlanFile; + + /** + * 专家论证资料文件路径 + */ + private String expertArgumentFile; + + /** + * 技术交底资料文件路径 + */ + private String technicalFile; + + /** + * 旁站监理记录文件路径 + */ + private String supervisionRecordFile; + + /** + * 监控日志文件路径 + */ + private String monitoringLogFile; + + /** + * 验收确认书文件路径 + */ + private String acceptanceCertificateFile; + + /** + * 施工影像/附件文件路径 + */ + private String constructionMediaFile; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseDangerousEngineeringBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseDangerousEngineeringBo.java new file mode 100644 index 00000000..7d252892 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseDangerousEngineeringBo.java @@ -0,0 +1,114 @@ +package org.dromara.safety.domain.bo; + +import org.dromara.safety.domain.HseDangerousEngineering; +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.time.LocalDate; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; + +/** + * 危大工程信息业务对象 hse_dangerous_engineering + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HseDangerousEngineering.class, reverseConvertGenerate = false) +public class HseDangerousEngineeringBo extends BaseEntity { + + /** + * ID + */ + @NotNull(message = "ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 项目Id + */ + private Long projectId; + + /** + * 危大工程名称 + */ + private String deName; + + /** + * 风险等级 + */ + private String riskLevel; + + /** + * 作业内容 + */ + private String workType; + + /** + * 施工开始时间 + */ + private LocalDate startTime; + + /** + * 预计完成时间 + */ + private LocalDate endTime; + + /** + * 作业地点 + */ + private String workPlace; + + /** + * 分包单位Id + */ + private Long subcontractorId; + + /** + * 分包单位名 + */ + private String subcontractor; + + /** + * 班组Id + */ + private Long teamId; + + /** + * 班组名 + */ + private String teamName; + + /** + * 项目经理 + */ + private String projectManager; + + /** + * 现场负责人(紧急联系人) + */ + private String siteManager; + + /** + * 紧急联系电话 + */ + private String emergencyPhone; + + /** + * 建设单位 + */ + private String constructionUnit; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseRewardsPunishmentsBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseRewardsPunishmentsBo.java new file mode 100644 index 00000000..0ed4e43e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseRewardsPunishmentsBo.java @@ -0,0 +1,110 @@ +package org.dromara.safety.domain.bo; + +import org.dromara.safety.domain.HseRewardsPunishments; +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.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; + +/** + * 奖惩记录业务对象 hse_rewards_punishments + * + * @author Lion Li + * @date 2025-12-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HseRewardsPunishments.class, reverseConvertGenerate = false) +public class HseRewardsPunishmentsBo extends BaseEntity { + + /** + * ID + */ + @NotNull(message = "ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 奖惩编号(如RP001) + */ + private String rpCode; + + private Long projectId; + + /** + * 类型:1-奖励,2-惩罚 + */ + private String type; + + /** + * 分类(如AI工单、其他、安全工单等) + */ + private String category; + + /** + * 金额(元) + */ + private BigDecimal amount; + + /** + * 关联工单id + */ + private Long relatedWorkId; + + /** + * 发起人 + */ + @NotNull(message = "发起人不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long submitter; + + /** + * 奖惩对象类型(1-分包 2-班组 3-人) + */ + private String recipientType; + + /** + * 审核状态 + */ + private String status; + + /** + * 奖惩原因 + */ + private String reason; + + /** + * 附件 + */ + private String file; + + /** + * 备注 + */ + private String remark; + + + /** + * 开始时间 + */ + private LocalDateTime startTime; + + /** + * 结束时间 + */ + private LocalDateTime endTime; + + + + /** + * 对象信息 + */ + private List rpObjects; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseRpObjectBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseRpObjectBo.java new file mode 100644 index 00000000..dd24b0a4 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseRpObjectBo.java @@ -0,0 +1,50 @@ +package org.dromara.safety.domain.bo; + +import org.dromara.safety.domain.HseRpObject; +import org.dromara.common.mybatis.core.domain.BaseEntity; +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.math.BigDecimal; + +/** + * 奖惩对象业务对象 hse_rp_person + * + * @author Lion Li + * @date 2025-12-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HseRpObject.class, reverseConvertGenerate = false) +public class HseRpObjectBo extends BaseEntity { + + /** + * ID + */ + @NotNull(message = "ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 关联奖惩记录ID(rewards_punishments.id) + */ + private Long rpId; + + /** + * 对象id + */ + private Long objectId; + + /** + * 对象名称(人员姓名或班组名称) + */ + private String objectName; + + /** + * 个人/班组金额 + */ + private BigDecimal amount; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseSpecialPlanBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseSpecialPlanBo.java new file mode 100644 index 00000000..ad92de45 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/bo/HseSpecialPlanBo.java @@ -0,0 +1,196 @@ +package org.dromara.safety.domain.bo; + +import org.dromara.safety.domain.HseSpecialPlan; +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.time.LocalDate; +import java.time.LocalDateTime; + +/** + * 危大工程专项施工方案业务对象 hse_special_plan + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HseSpecialPlan.class, reverseConvertGenerate = false) +public class HseSpecialPlanBo extends BaseEntity { + + /** + * ID + */ + @NotNull(message = "ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 项目id + */ + private Long projectId; + + /** + * 方案编号(自动生成/手动输入) + */ + private String planNo; + + /** + * 危大工程ID + */ + private Long deId; + + /** + * 危大工程名称 + */ + private String deName; + + /** + * 方案名称 + */ + private String planName; + + /** + * 方案类别 + */ + private String planCategory; + + /** + * 编制单位 + */ + private String compileUnit; + + /** + * 编制人 + */ + private String compiler; + + /** + * 审核人 + */ + private String reviewer; + + /** + * 批准人 + */ + private String approve; + + /** + * 施工流程与步骤 + */ + private String constructionProcess; + + /** + * 施工参数 + */ + private String constructionParams; + + /** + * 施工人员资质 + */ + private String personnelQualification; + + /** + * 施工附件 + */ + private String constructionFile; + + /** + * 是否需专家论证(1=是,0=否) + */ + @NotNull(message = "是否需专家论证(1=是,0=否)不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long needExpertArgument; + + /** + * 专家结论附件路径 + */ + private String expertFile; + + /** + * 论证结论 + */ + private String argumentConclusion; + + /** + * 论证日期 + */ + private LocalDate argumentDate; + + /** + * 专家组负责人(姓名+单位) + */ + private String expertLeader; + + /** + * 是否需旁站监理(1=是,0=否) + */ + @NotNull(message = "是否需旁站监理(1=是,0=否)不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long needSupervision; + + /** + * 旁站监理单位 + */ + private String supervisionUnit; + + /** + * 旁站监理人 + */ + private String supervisor; + + /** + * 旁站实际开始时间 + */ + private LocalDateTime supervisionStartTime; + + /** + * 旁站实际结束时间 + */ + private LocalDateTime supervisionEndTime; + + /** + * 旁站记录附件路径 + */ + private String supervisionFile; + + /** + * 应急预案是否涉及(1=是,0=否) + */ + @NotNull(message = "应急预案是否涉及(1=是,0=否)不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long involveEmergencyPlan; + + /** + * 关联应急预案编号 + */ + private String emergencyPlanNo; + + /** + * 方案初审/复核记录 + */ + private String reviewRecord; + + /** + * 备案时间 + */ + private LocalDateTime recordTime; + + /** + * 备案单位 + */ + private String recordUnit; + + /** + * 备案文件号 + */ + private String recordFileNo; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/EvaluateDto.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/EvaluateDto.java new file mode 100644 index 00000000..2789c26f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/EvaluateDto.java @@ -0,0 +1,69 @@ +package org.dromara.safety.domain.dto; + +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.safety.domain.HazardHiddenDanger; + +import java.time.LocalDateTime; + +/** + * 隐患信息业务对象 hazard_hidden_danger + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@AutoMapper(target = HazardHiddenDanger.class, reverseConvertGenerate = false) +public class EvaluateDto { + + /** + * ID + */ + private Long id; + + /** + * 隐患等级ID + */ + private Long dangerLevelId; + + /** + * 评估人 + */ + private Long evaluator; + + /** + * 评估时间 + */ + private LocalDateTime evaluateTime; + + /** + * 评估依据 + */ + private String evaluateBasis; + + /** + * 评估意见 + */ + private String reporterOpinion; + + /** + * 评估附件 + */ + private String reporterFile; + + /** + * 整改单位 1-班组 2-分包 + */ + private String rectifyUnit; + + /** + * 整改单位ID + */ + private Long rectifyUnitId; + + /** + * 整改负责人Id + */ + private Long rectifyUserId; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/hiddendangerrectify/HazardHiddenDangerRectifyRectificationReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/hiddendangerrectify/HazardHiddenDangerRectifyRectificationReq.java new file mode 100644 index 00000000..9cb431b7 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/hiddendangerrectify/HazardHiddenDangerRectifyRectificationReq.java @@ -0,0 +1,36 @@ +package org.dromara.safety.domain.dto.hiddendangerrectify; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author lilemy + * @date 2025-12-04 14:58 + */ +@Data +public class HazardHiddenDangerRectifyRectificationReq implements Serializable { + + @Serial + private static final long serialVersionUID = 3378774493193429015L; + + /** + * 主键 + */ + @NotNull(message = "主键不能为空") + private Long id; + + /** + * 整改说明 + */ + @NotBlank(message = "整改说明不能为空") + private String rectifyDesc; + + /** + * 整改附件 + */ + private String rectifyFiles; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/hiddendangerrectify/HazardHiddenDangerRectifyReviewReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/hiddendangerrectify/HazardHiddenDangerRectifyReviewReq.java new file mode 100644 index 00000000..ae7d8842 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/hiddendangerrectify/HazardHiddenDangerRectifyReviewReq.java @@ -0,0 +1,53 @@ +package org.dromara.safety.domain.dto.hiddendangerrectify; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author lilemy + * @date 2025-12-04 15:07 + */ +@Data +public class HazardHiddenDangerRectifyReviewReq implements Serializable { + + @Serial + private static final long serialVersionUID = 6999133950832111753L; + + /** + * 主键 + */ + @NotNull(message = "请选择要复查的整改") + private Long id; + + /** + * 整改人ID + */ + private Long rectifyUserId; + + /** + * 复查说明 + */ + @NotBlank(message = "请填写复查说明") + private String reviewDesc; + + /** + * 复查附件 + */ + private String reviewFiles; + + /** + * 复查状态(0待复查 1复查通过 2复查不通过) + */ + @NotBlank(message = "请选择复查状态") + private String reviewStatus; + + /** + * 整改期限 + */ + private LocalDateTime rectificationDeadline; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/recognizerecord/HseRecognizeRecordCreateDto.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/recognizerecord/HseRecognizeRecordCreateDto.java index d4ee694c..2a708c80 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/recognizerecord/HseRecognizeRecordCreateDto.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/recognizerecord/HseRecognizeRecordCreateDto.java @@ -37,6 +37,11 @@ public class HseRecognizeRecordCreateDto { */ private String recordCategory; + /** + * 原始图片id + */ + private Long originalUrlId; + /** * 原始图片 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/safetyinspection/HseSafetyInspectionQueryReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/safetyinspection/HseSafetyInspectionQueryReq.java index e3b17f29..c0c9c62b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/safetyinspection/HseSafetyInspectionQueryReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/safetyinspection/HseSafetyInspectionQueryReq.java @@ -62,4 +62,7 @@ public class HseSafetyInspectionQueryReq implements Serializable { private Long createBy; + + + private Boolean checkCorrectorNull=false; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/safetyinspection/HseSafetyInspectionUpdateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/safetyinspection/HseSafetyInspectionUpdateReq.java index d2288bfa..a8880e22 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/safetyinspection/HseSafetyInspectionUpdateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/safetyinspection/HseSafetyInspectionUpdateReq.java @@ -49,6 +49,16 @@ public class HseSafetyInspectionUpdateReq implements Serializable { */ private String inspectionResult; + /** + * 整改单位(1分包 2班组) + */ + private String rectificationUnit; + + /** + * 整改单位id + */ + private Long rectificationId; + /** * 整改班组id */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/safetylog/HseSafetyLogCreateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/safetylog/HseSafetyLogCreateReq.java index 00f75912..82cd8054 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/safetylog/HseSafetyLogCreateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/safetylog/HseSafetyLogCreateReq.java @@ -23,12 +23,22 @@ public class HseSafetyLogCreateReq implements Serializable { @NotNull(message = "项目id不能为空") private Long projectId; + /** + * 类型 1-文字,2-文件 + */ + private String type; + /** * 发生日期 */ @NotBlank(message = "发生日期不能为空") private String dateOfOccurrence; + /** + * 结束日期 + */ + private String endDate; + /** * 最高气温 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/violationrecord/HseViolationRecordQueryReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/violationrecord/HseViolationRecordQueryReq.java index 5df372d0..d4e8c1af 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/violationrecord/HseViolationRecordQueryReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/dto/violationrecord/HseViolationRecordQueryReq.java @@ -48,4 +48,6 @@ public class HseViolationRecordQueryReq implements Serializable { private String status; + private Boolean checkCorrectorNull=false; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerRectifyVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerRectifyVo.java new file mode 100644 index 00000000..70f07dc6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerRectifyVo.java @@ -0,0 +1,141 @@ +package org.dromara.safety.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.safety.domain.HazardHiddenDangerRectify; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; + + +/** + * 隐患整改情况视图对象 hazard_hidden_danger_rectify + * + * @author lilemy + * @date 2025-12-04 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HazardHiddenDangerRectify.class) +public class HazardHiddenDangerRectifyVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ExcelProperty(value = "主键") + private Long id; + + /** + * 关联隐患ID + */ + @ExcelProperty(value = "关联隐患ID") + private Long hiddenDangerId; + + /** + * 整改期限 + */ + @ExcelProperty(value = "整改期限") + private LocalDateTime rectifyDeadline; + + /** + * 整改次数 + */ + @ExcelProperty(value = "整改次数") + private Integer rectifyCount; + + /** + * 整改人ID + */ + @ExcelProperty(value = "整改人ID") + private Long rectifyUserId; + + /** + * 整改人名字 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "rectifyUserId") + private String rectifyUserName; + + /** + * 整改说明 + */ + @ExcelProperty(value = "整改说明") + private String rectifyDesc; + + /** + * 整改附件 + */ + @ExcelProperty(value = "整改附件") + private String rectifyFiles; + + /** + * 整改附件Url + */ + @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "rectifyFiles") + private String rectifyFilesUrl; + + /** + * 完成整改时间 + */ + @ExcelProperty(value = "完成整改时间") + private LocalDateTime rectifyTime; + + /** + * 复查人ID + */ + @ExcelProperty(value = "复查人ID") + private Long reviewUserId; + + /** + * 复查人名字 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "reviewUserId") + private String reviewUserName; + + /** + * 复查说明 + */ + @ExcelProperty(value = "复查说明") + private String reviewDesc; + + /** + * 复查附件 + */ + @ExcelProperty(value = "复查附件") + private String reviewFiles; + + /** + * 复查附件Url + */ + @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "reviewFiles") + private String reviewFilesUrl; + + /** + * 复查时间 + */ + @ExcelProperty(value = "复查时间") + private LocalDateTime reviewTime; + + /** + * 复查状态(0待复查 1复查通过 2复查不通过) + */ + @ExcelProperty(value = "复查状态(0待复查 1复查通过 2复查不通过)", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "hazard_review_status") + private String reviewStatus; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerVo.java new file mode 100644 index 00000000..725a41a3 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardHiddenDangerVo.java @@ -0,0 +1,206 @@ +package org.dromara.safety.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.safety.domain.HazardHiddenDanger; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDateTime; +import java.util.List; + + +/** + * 隐患信息视图对象 hazard_hidden_danger + * + * @author Lion Li + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HazardHiddenDanger.class) +public class HazardHiddenDangerVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 项目ID + */ + private Long projectId; + + /** + * 隐患编号 + */ + @ExcelProperty(value = "隐患编号") + private String dangerCode; + + /** + * 隐患名称 + */ + @ExcelProperty(value = "隐患名称") + private String dangerName; + + /** + * 上报位置 + */ + @ExcelProperty(value = "上报位置") + private String reportLocation; + + /** + * 上报人 + */ + @ExcelProperty(value = "上报人") + private Long reporter; + + /** + * 上报人名字 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "reporter") + private String reporterName; + + /** + * 上报人电话 + */ + private String reporterPhone; + + /** + * 上报时间 + */ + @ExcelProperty(value = "上报时间") + private LocalDateTime reportTime; + + /** + * 隐患等级ID + */ + @ExcelProperty(value = "隐患等级ID") + private Long dangerLevelId; + + /** + * 隐患类型 + */ + private String dangerType; + + /** + * 隐患描述 + */ + private String dangerDes; + + /** + * 隐患附件 + */ + private String dangerFile; + + /** + * 隐患附件地址 + */ + @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "dangerFile") + private String dangerFileUrl; + + /** + * 评估人 + */ + @ExcelProperty(value = "评估人") + private Long evaluator; + + /** + * 评估人名字 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "evaluator") + private String evaluatorName; + + /** + * 评估时间 + */ + @ExcelProperty(value = "评估时间") + private LocalDateTime evaluateTime; + + /** + * 评估依据 + */ + @ExcelProperty(value = "评估依据") + private String evaluateBasis; + + /** + * 评估意见 + */ + @ExcelProperty(value = "评估意见") + private String reporterOpinion; + + /** + * 评估附件 + */ + @ExcelProperty(value = "评估附件") + private String reporterFile; + + /** + * 评估附件地址 + */ + @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "reporterFile") + private String reporterFileUrl; + + /** + * 整改时间 + */ + @ExcelProperty(value = "整改时间") + private LocalDateTime rectifyTime; + + /** + * 整改单位 1-班组 2-分包 + */ + @ExcelProperty(value = "整改单位 1-班组 2-分包") + private String rectifyUnit; + + /** + * 整改单位ID + */ + @ExcelProperty(value = "整改单位ID") + private Long rectifyUnitId; + + /** + * 整改负责人Id + */ + @ExcelProperty(value = "整改负责人Id") + private Long rectifyUserId; + + /** + * 整改负责人名字 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "rectifyUserId") + private String rectifyUserName; + + /** + * 状态(1-待评估,2-待整改,3-待复查,4-已闭环) + */ + @ExcelProperty(value = "状态", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1=-待评估,2-待整改,3-待复查,4-已闭环") + private String status; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 最新整改次数 + */ + private Integer latestRectifyTimes; + + /** + * 整改信息列表 + */ + private List rectifyList; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardRuleNotifyObjectVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardRuleNotifyObjectVo.java new file mode 100644 index 00000000..d6694a3e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardRuleNotifyObjectVo.java @@ -0,0 +1,50 @@ +package org.dromara.safety.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.safety.domain.HazardRuleNotifyObject; + +import java.io.Serial; +import java.io.Serializable; + + +/** + * 隐患规则通知对象视图对象 hazard_rule_notify_object + * + * @author lilemy + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HazardRuleNotifyObject.class) +public class HazardRuleNotifyObjectVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 规则ID + */ + @ExcelProperty(value = "规则ID") + private Long ruleId; + + /** + * 通知ID + */ + @ExcelProperty(value = "通知ID") + private Long notifyId; + + /** + * 通知名称 + */ + private String notifyName; + + /** + * 通知类型 + */ + @ExcelProperty(value = "通知类型") + private String notifyType; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardRuleVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardRuleVo.java new file mode 100644 index 00000000..72997c46 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HazardRuleVo.java @@ -0,0 +1,98 @@ +package org.dromara.safety.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.safety.domain.HazardRule; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + + +/** + * 隐患分级通知规则视图对象 hazard_rule + * + * @author lilemy + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HazardRule.class) +public class HazardRuleVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @ExcelProperty(value = "主键") + private Long id; + + /** + * 项目id + */ + @ExcelProperty(value = "项目id") + private Long projectId; + + /** + * 隐患级别 + */ + @ExcelProperty(value = "隐患级别") + private String hazardLevel; + + /** + * 隐患权重 + */ + @ExcelProperty(value = "隐患权重") + private Integer hazardWeight; + + /** + * 响应时限数值 + */ + @ExcelProperty(value = "响应时限数值") + private Integer responseTime; + + /** + * 响应时效单位 + */ + @ExcelProperty(value = "响应时效单位", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "time_unit") + private String responseUnit; + + /** + * 通知方式 + */ + @ExcelProperty(value = "通知方式", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "notify_method") + private String notifyMethod; + + /** + * 超时处理方式 + */ + @ExcelProperty(value = "超时处理方式", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "hazard_timeout_action") + private String timeoutAction; + + /** + * 额外设置 + */ + @ExcelProperty(value = "额外设置") + private String extraSetting; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 通知对象 + */ + List notifyObjects; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HiddenDangerCountVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HiddenDangerCountVo.java new file mode 100644 index 00000000..049c3dff --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HiddenDangerCountVo.java @@ -0,0 +1,33 @@ +package org.dromara.safety.domain.vo; + + +import lombok.Data; + +@Data +public class HiddenDangerCountVo { + + /** + * 总数量 + */ + private Integer total; + /** + * 待评估数量 + */ + private Long waitEvaluate; + /** + * 待整改数量 + */ + private Long waitRectify; + /** + * 待复查数量 + */ + private Long waitReview; + /** + * 已闭环数量 + */ + private Long closed; + /** + * 逾期数量 + */ + private Long overdue; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseDangerArchiveCountVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseDangerArchiveCountVo.java new file mode 100644 index 00000000..edcd40b3 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseDangerArchiveCountVo.java @@ -0,0 +1,43 @@ +package org.dromara.safety.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.safety.domain.HseDangerArchive; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; + + +/** + * 危大工程档案视图对象 hse_danger_archive + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +public class HseDangerArchiveCountVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + + /** + * 总工程数 + */ + private Integer total; + + /** + * 重大风险数 + */ + private Long majorRisk; + /** + * 归档数 + */ + private Integer archive; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseDangerArchiveVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseDangerArchiveVo.java new file mode 100644 index 00000000..a76fc7a1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseDangerArchiveVo.java @@ -0,0 +1,162 @@ +package org.dromara.safety.domain.vo; + +import org.dromara.safety.domain.HseDangerArchive; +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.time.LocalDate; +import java.util.Date; + + + +/** + * 危大工程档案视图对象 hse_danger_archive + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseDangerArchive.class) +public class HseDangerArchiveVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ExcelProperty(value = "ID") + private Long id; + + /** + * 项目Id + */ + @ExcelProperty(value = "项目Id") + private Long projectId; + + /** + * 档案编号(自动生成/手动输入) + */ + @ExcelProperty(value = "档案编号", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "自=动生成/手动输入") + private String archiveNo; + + /** + * 危大工程ID + */ + @ExcelProperty(value = "危大工程ID") + private Long deId; + + /** + * 危大工程名称 + */ + @ExcelProperty(value = "危大工程名称") + private String deName; + + /** + * 档案类别(多个类别用逗号分隔,如:方案,论证) + */ + @ExcelProperty(value = "档案类别", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个类别用逗号分隔,如:方案,论证") + private String archiveCategory; + + /** + * 归档日期 + */ + @ExcelProperty(value = "归档日期") + private LocalDate archiveDate; + + /** + * 归档人 + */ + @ExcelProperty(value = "归档人") + private String archiver; + + /** + * 归档单位 + */ + @ExcelProperty(value = "归档单位") + private String archiveUnit; + + /** + * 危险等级 + */ + @ExcelProperty(value = "危险等级") + private String riskLevel; + + /** + * 施工单位 + */ + @ExcelProperty(value = "施工单位") + private String constructionUnit; + + /** + * 标段 + */ + @ExcelProperty(value = "标段") + private String section; + + /** + * 档案关键字(多个用逗号分隔) + */ + @ExcelProperty(value = "档案关键字", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个用逗号分隔") + private String archiveKeywords; + + /** + * 方案定稿文件路径 + */ + @ExcelProperty(value = "方案定稿文件路径") + private String finalPlanFile; + + /** + * 专家论证资料文件路径 + */ + @ExcelProperty(value = "专家论证资料文件路径") + private String expertArgumentFile; + + /** + * 技术交底资料文件路径 + */ + @ExcelProperty(value = "技术交底资料文件路径") + private String technicalFile; + + /** + * 旁站监理记录文件路径 + */ + @ExcelProperty(value = "旁站监理记录文件路径") + private String supervisionRecordFile; + + /** + * 监控日志文件路径 + */ + @ExcelProperty(value = "监控日志文件路径") + private String monitoringLogFile; + + /** + * 验收确认书文件路径 + */ + @ExcelProperty(value = "验收确认书文件路径") + private String acceptanceCertificateFile; + + /** + * 施工影像/附件文件路径 + */ + @ExcelProperty(value = "施工影像/附件文件路径") + private String constructionMediaFile; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseDangerousEngineeringVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseDangerousEngineeringVo.java new file mode 100644 index 00000000..87b8bfb2 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseDangerousEngineeringVo.java @@ -0,0 +1,143 @@ +package org.dromara.safety.domain.vo; + +import java.time.LocalDate; +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.safety.domain.HseDangerousEngineering; +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; + + + +/** + * 危大工程信息视图对象 hse_dangerous_engineering + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseDangerousEngineering.class) +public class HseDangerousEngineeringVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ExcelProperty(value = "ID") + private Long id; + + /** + * 项目Id + */ + @ExcelProperty(value = "项目Id") + private Long projectId; + + /** + * 危大工程名称 + */ + @ExcelProperty(value = "危大工程名称") + private String deName; + + /** + * 风险等级 + */ + @ExcelProperty(value = "风险等级") + private String riskLevel; + + + @Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "riskLevel",other = "danger_risk_level") + private String riskLevelName; + + /** + * 作业内容 + */ + @ExcelProperty(value = "作业内容") + private String workType; + + /** + * 施工开始时间 + */ + @ExcelProperty(value = "施工开始时间") + private LocalDate startTime; + + /** + * 预计完成时间 + */ + @ExcelProperty(value = "预计完成时间") + private LocalDate endTime; + + /** + * 作业地点 + */ + @ExcelProperty(value = "作业地点") + private String workPlace; + + /** + * 分包单位Id + */ + @ExcelProperty(value = "分包单位Id") + private Long subcontractorId; + + /** + * 分包单位名 + */ + @ExcelProperty(value = "分包单位名") + private String subcontractor; + + /** + * 班组Id + */ + @ExcelProperty(value = "班组Id") + private Long teamId; + + /** + * 班组名 + */ + @ExcelProperty(value = "班组名") + private String teamName; + + /** + * 项目经理 + */ + @ExcelProperty(value = "项目经理") + private String projectManager; + + /** + * 现场负责人(紧急联系人) + */ + @ExcelProperty(value = "现场负责人(紧急联系人)") + private String siteManager; + + /** + * 紧急联系电话 + */ + @ExcelProperty(value = "紧急联系电话") + private String emergencyPhone; + + /** + * 建设单位 + */ + @ExcelProperty(value = "建设单位") + private String constructionUnit; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseJsjdYuJkjcVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseJsjdYuJkjcVo.java new file mode 100644 index 00000000..3678827f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseJsjdYuJkjcVo.java @@ -0,0 +1,24 @@ +package org.dromara.safety.domain.vo; + + +import lombok.Data; + +@Data +public class HseJsjdYuJkjcVo { + /** + * 技术交底文件 + */ + private String jsjdFile; + + + /** + * 过程监控文件 + */ + private String gcjkFile; + + + /** + * 过程旁站监听文件 + */ + private String pzjtFile; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseRPCountVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseRPCountVo.java new file mode 100644 index 00000000..b73954b7 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseRPCountVo.java @@ -0,0 +1,56 @@ +package org.dromara.safety.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.safety.domain.HseRewardsPunishments; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + + +/** + * 奖惩记录视图对象 hse_rewards_punishments + * + * @author Lion Li + * @date 2025-12-04 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseRewardsPunishments.class) +public class HseRPCountVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 总数 + */ + private Integer total; + + /** + * 待审批数量 + */ + private Long waitApproval; + + /** + * 奖励金额 + */ + private BigDecimal reward; + + /** + * 惩罚金额 + */ + private BigDecimal penalty; + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseRewardsPunishmentsVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseRewardsPunishmentsVo.java new file mode 100644 index 00000000..f35f8792 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseRewardsPunishmentsVo.java @@ -0,0 +1,134 @@ +package org.dromara.safety.domain.vo; + +import java.math.BigDecimal; + +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.safety.domain.HseRewardsPunishments; +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; + + +/** + * 奖惩记录视图对象 hse_rewards_punishments + * + * @author Lion Li + * @date 2025-12-04 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseRewardsPunishments.class) +public class HseRewardsPunishmentsVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ExcelProperty(value = "ID") + private Long id; + + /** + * 奖惩编号(如RP001) + */ + @ExcelProperty(value = "奖惩编号", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "如=RP001") + private String rpCode; + + private Long projectId; + + /** + * 类型:1-奖励,2-惩罚 + */ + @ExcelProperty(value = "类型:1-奖励,2-惩罚") + private String type; + + /** + * 分类(如AI工单、其他、安全工单等) + */ + @ExcelProperty(value = "分类", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "如=AI工单、其他、安全工单等") + private String category; + + /** + * 金额(元) + */ + @ExcelProperty(value = "金额", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "元=") + private BigDecimal amount; + + /** + * 关联工单id + */ + @ExcelProperty(value = "关联工单id") + private Long relatedWorkId; + + /** + * 发起人 + */ + @ExcelProperty(value = "发起人") + private Long submitter; + + /** + * 发起人名称 + */ + @Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "submitter") + private String submitterName; + + /** + * 奖惩对象类型(1-分包 2-班组 3-人) + */ + @ExcelProperty(value = "奖惩对象类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1=-分包,2=-班组,3=-人") + private String recipientType; + + /** + * 审核状态 + */ + @ExcelProperty(value = "审核状态") + private String status; + + /** + * 奖惩原因 + */ + @ExcelProperty(value = "奖惩原因") + private String reason; + + /** + * 附件 + */ + @ExcelProperty(value = "附件") + private String file; + + /** + * 附件url + */ + @Translation(type = TransConstant.OSS_ID_TO_URL, mapper = "file") + private String fileUrl; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 奖惩对象列表 + */ + private List rpObjects; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseRpPersonVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseRpPersonVo.java new file mode 100644 index 00000000..7e85b31e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseRpPersonVo.java @@ -0,0 +1,63 @@ +package org.dromara.safety.domain.vo; + +import java.math.BigDecimal; +import org.dromara.safety.domain.HseRpObject; +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; + + +/** + * 奖惩对象视图对象 hse_rp_person + * + * @author Lion Li + * @date 2025-12-04 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseRpObject.class) +public class HseRpPersonVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ExcelProperty(value = "ID") + private Long id; + + /** + * 关联奖惩记录ID(rewards_punishments.id) + */ + @ExcelProperty(value = "关联奖惩记录ID", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "r=ewards_punishments.id") + private Long rpId; + + /** + * 对象id + */ + @ExcelProperty(value = "对象id") + private Long objectId; + + /** + * 对象名称(人员姓名或班组名称) + */ + @ExcelProperty(value = "对象名称", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "人=员姓名或班组名称") + private String objectName; + + /** + * 个人/班组金额 + */ + @ExcelProperty(value = "个人/班组金额") + private BigDecimal amount; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseSpecialPlanCountVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseSpecialPlanCountVo.java new file mode 100644 index 00000000..45b8366a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseSpecialPlanCountVo.java @@ -0,0 +1,47 @@ +package org.dromara.safety.domain.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import org.dromara.safety.domain.HseSpecialPlan; + +import java.io.Serial; +import java.io.Serializable; +import java.time.LocalDate; +import java.time.LocalDateTime; + + +/** + * 危大工程专项施工方案视图对象 hse_special_plan + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +public class HseSpecialPlanCountVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + + /** + * 总数 + */ + private Integer total; + + /** + * 需专家论证 + */ + private Long needExpertArgumentNum; + + /** + * 需旁站监理 + */ + private Long needSupervisionNum; + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseSpecialPlanFileVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseSpecialPlanFileVo.java new file mode 100644 index 00000000..8dd5e8ea --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseSpecialPlanFileVo.java @@ -0,0 +1,30 @@ +package org.dromara.safety.domain.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + + +/** + * 危大工程专项施工方案视图对象 hse_special_plan + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +public class HseSpecialPlanFileVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 专家结论附件路径 + */ + private String expertFile; + + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseSpecialPlanVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseSpecialPlanVo.java new file mode 100644 index 00000000..2a7730ae --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/HseSpecialPlanVo.java @@ -0,0 +1,237 @@ +package org.dromara.safety.domain.vo; + +import org.dromara.safety.domain.HseSpecialPlan; +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.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Date; + + + +/** + * 危大工程专项施工方案视图对象 hse_special_plan + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseSpecialPlan.class) +public class HseSpecialPlanVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * ID + */ + @ExcelProperty(value = "ID") + private Long id; + + /** + * 项目id + */ + @ExcelProperty(value = "项目id") + private Long projectId; + + /** + * 方案编号(自动生成/手动输入) + */ + @ExcelProperty(value = "方案编号", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "自=动生成/手动输入") + private String planNo; + + /** + * 危大工程ID + */ + @ExcelProperty(value = "危大工程ID") + private Long deId; + + /** + * 危大工程名称 + */ + @ExcelProperty(value = "危大工程名称") + private String deName; + + /** + * 方案名称 + */ + @ExcelProperty(value = "方案名称") + private String planName; + + /** + * 方案类别 + */ + @ExcelProperty(value = "方案类别") + private String planCategory; + + /** + * 编制单位 + */ + @ExcelProperty(value = "编制单位") + private String compileUnit; + + /** + * 编制人 + */ + @ExcelProperty(value = "编制人") + private String compiler; + + /** + * 审核人 + */ + @ExcelProperty(value = "审核人") + private String reviewer; + + /** + * 批准人 + */ + @ExcelProperty(value = "批准人") + private String approve; + + /** + * 施工流程与步骤 + */ + @ExcelProperty(value = "施工流程与步骤") + private String constructionProcess; + + /** + * 施工参数 + */ + @ExcelProperty(value = "施工参数") + private String constructionParams; + + /** + * 施工人员资质 + */ + @ExcelProperty(value = "施工人员资质") + private String personnelQualification; + + /** + * 施工附件 + */ + @ExcelProperty(value = "施工附件") + private String constructionFile; + + /** + * 是否需专家论证(1=是,0=否) + */ + @ExcelProperty(value = "是否需专家论证", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1==是,0=否") + private Long needExpertArgument; + + /** + * 专家结论附件路径 + */ + @ExcelProperty(value = "专家结论附件路径") + private String expertFile; + + /** + * 论证结论 + */ + @ExcelProperty(value = "论证结论") + private String argumentConclusion; + + /** + * 论证日期 + */ + @ExcelProperty(value = "论证日期") + private LocalDate argumentDate; + + /** + * 专家组负责人(姓名+单位) + */ + @ExcelProperty(value = "专家组负责人", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "姓=名+单位") + private String expertLeader; + + /** + * 是否需旁站监理(1=是,0=否) + */ + @ExcelProperty(value = "是否需旁站监理", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1==是,0=否") + private Long needSupervision; + + /** + * 旁站监理单位 + */ + @ExcelProperty(value = "旁站监理单位") + private String supervisionUnit; + + /** + * 旁站监理人 + */ + @ExcelProperty(value = "旁站监理人") + private String supervisor; + + /** + * 旁站实际开始时间 + */ + @ExcelProperty(value = "旁站实际开始时间") + private LocalDateTime supervisionStartTime; + + /** + * 旁站实际结束时间 + */ + @ExcelProperty(value = "旁站实际结束时间") + private LocalDateTime supervisionEndTime; + + /** + * 旁站记录附件路径 + */ + @ExcelProperty(value = "旁站记录附件路径") + private String supervisionFile; + + /** + * 应急预案是否涉及(1=是,0=否) + */ + @ExcelProperty(value = "应急预案是否涉及", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1==是,0=否") + private Long involveEmergencyPlan; + + /** + * 关联应急预案编号 + */ + @ExcelProperty(value = "关联应急预案编号") + private String emergencyPlanNo; + + /** + * 方案初审/复核记录 + */ + @ExcelProperty(value = "方案初审/复核记录") + private String reviewRecord; + + /** + * 备案时间 + */ + @ExcelProperty(value = "备案时间") + private LocalDateTime recordTime; + + /** + * 备案单位 + */ + @ExcelProperty(value = "备案单位") + private String recordUnit; + + /** + * 备案文件号 + */ + @ExcelProperty(value = "备案文件号") + private String recordFileNo; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/RectifyTimesVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/RectifyTimesVo.java new file mode 100644 index 00000000..04478be2 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/RectifyTimesVo.java @@ -0,0 +1,17 @@ +package org.dromara.safety.domain.vo; + +import lombok.Data; + +@Data +public class RectifyTimesVo { + + /** + * 隐患ID + */ + private Long hiddenDangerId; + + /** + * 最新整改次数 + */ + private Integer latestRectifyTimes; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/recognizerecord/HseRecognizeRecordVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/recognizerecord/HseRecognizeRecordVo.java index 2117722e..f2efedca 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/recognizerecord/HseRecognizeRecordVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/recognizerecord/HseRecognizeRecordVo.java @@ -66,6 +66,11 @@ public class HseRecognizeRecordVo implements Serializable { @ExcelDictFormat(dictType = "violation_level_type") private String violationType; + /** + * 原始图片id + */ + private Long originalUrlId; + /** * 原始图片 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/safetylog/HseSafetyLogVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/safetylog/HseSafetyLogVo.java index f83b8c6b..0b8d2542 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/safetylog/HseSafetyLogVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/domain/vo/safetylog/HseSafetyLogVo.java @@ -41,12 +41,24 @@ public class HseSafetyLogVo implements Serializable { @ExcelProperty(value = "项目id") private Long projectId; + + /** + * 类型 1-文字,2-文件 + */ + private String type; + /** * 发生日期 */ @ExcelProperty(value = "发生日期") private String dateOfOccurrence; + /** + * 结束日期 + */ + private String endDate; + + /** * 最高气温 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/enums/AqEnums.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/enums/AqEnums.java new file mode 100644 index 00000000..dba42a50 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/enums/AqEnums.java @@ -0,0 +1,28 @@ +package org.dromara.safety.enums; + +public enum AqEnums { + + AQJDZT_S("是否交底", "1"), + AQJDZT_F("是否交底", "0"), + AQWXJX_S("是否存在危险迹象", "1"), + AQWXJX_F("是否存在危险迹象", "0"); + + + + private final String TypeName; + + private final String TypeValue; + + + public String getTypeName() { + return TypeName; + } + public String getTypeValue() { + return TypeValue; + } + + AqEnums(String TypeName, String TypeValue) { + this.TypeName = TypeName; + this.TypeValue = TypeValue; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/controller/HseGcjkController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/controller/HseGcjkController.java new file mode 100644 index 00000000..b5eeef0f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/controller/HseGcjkController.java @@ -0,0 +1,133 @@ +package org.dromara.safety.gcjkjl.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.safety.gcjkjl.domain.vo.JkjcHeadVo; +import org.dromara.safety.jsjd.domain.bo.HseJsjdBo; +import org.dromara.safety.jsjd.domain.vo.HseJsjdVo; +import org.dromara.safety.jsjd.service.IHseJsjdService; +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.safety.gcjkjl.domain.vo.HseGcjkVo; +import org.dromara.safety.gcjkjl.domain.bo.HseGcjkBo; +import org.dromara.safety.gcjkjl.service.IHseGcjkService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 安全-过程监控记录 + * + * @author Lion Li + * @date 2025-12-06 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/gcjkjl/gcjk") +public class HseGcjkController extends BaseController { + + private final IHseGcjkService hseGcjkService; + + private final IHseJsjdService hseJsjdService; + + + + /** + * 查询安全技术交底列表 + */ + @SaCheckPermission("gcjkjl:gcjk:list") + @GetMapping("/getlist") + public TableDataInfo list(HseJsjdBo bo, PageQuery pageQuery) { + return hseJsjdService.queryPageList(bo, pageQuery); + } + + /** + * 查询安全-过程监控记录列表 + */ + @SaCheckPermission("gcjkjl:gcjk:list") + @GetMapping("/list") + public TableDataInfo list(HseGcjkBo bo, PageQuery pageQuery) { + return hseGcjkService.queryPageList(bo, pageQuery); + } + + + /** + * 查询安全-过程监控记录头部数据 + */ + @SaCheckPermission("gcjkjl:gcjk:list") + @GetMapping("/listHead") + public R list(HseGcjkBo bo) { + return R.ok(hseGcjkService.listHead(bo)); + } + + + /** + * 导出安全-过程监控记录列表 + */ + @SaCheckPermission("gcjkjl:gcjk:export") + @Log(title = "安全-过程监控记录", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HseGcjkBo bo, HttpServletResponse response) { + List list = hseGcjkService.queryList(bo); + ExcelUtil.exportExcel(list, "安全-过程监控记录", HseGcjkVo.class, response); + } + + /** + * 获取安全-过程监控记录详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("gcjkjl:gcjk:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(hseGcjkService.queryById(id)); + } + + /** + * 新增安全-过程监控记录 + */ + @SaCheckPermission("gcjkjl:gcjk:add") + @Log(title = "安全-过程监控记录", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody HseGcjkBo bo) { + return toAjax(hseGcjkService.insertByBo(bo)); + } + + /** + * 修改安全-过程监控记录 + */ + @SaCheckPermission("gcjkjl:gcjk:edit") + @Log(title = "安全-过程监控记录", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody HseGcjkBo bo) { + return toAjax(hseGcjkService.updateByBo(bo)); + } + + /** + * 删除安全-过程监控记录 + * + * @param ids 主键串 + */ + @SaCheckPermission("gcjkjl:gcjk:remove") + @Log(title = "安全-过程监控记录", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hseGcjkService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/HseGcjk.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/HseGcjk.java new file mode 100644 index 00000000..9972fd7b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/HseGcjk.java @@ -0,0 +1,202 @@ +package org.dromara.safety.gcjkjl.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + * 安全-过程监控记录对象 hse_gcjk + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hse_gcjk") +public class HseGcjk extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 监控编号 + */ + private String monitorNo; + + /** + * 项目ID + */ + private Long projectId; + + /** + * 危大工程ID + */ + private Long masterId; + + /** + * 危大工程名称 + */ + private String deName; + + + /** + * 监控名称 + */ + private String monitorName; + + /** + * 监控内容 + */ + private String monitorContent; + + /** + * 监控频次 + */ + private String monitorFrequency; + + /** + * 监控责任人姓名 + */ + private String monitorResponsiblePerson; + + /** + * 过程记录日期 + */ + private LocalDate recordDate; + + /** + * 是否存在危险迹象(1:是,0:否) + */ + private String hasHazardSign; + + /** + * 施工状态描述 + */ + private String constructionStatus; + + /** + * 关键工序完成情况 + */ + private String keyProcessProgress; + + /** + * 是否旁站(1:是,0:否) + */ + private String isOnSiteSupervision; + + + + /** + * 整改期限 + */ + private LocalDate abarbeitungQx; + + /** + * 整改人 + */ + private String abarbeitungRen; + + /** + * 整改要求 + */ + private String abarbeitungYq; + + + /** + * 旁站记录内容 + */ + private String supervisionJl; + + + /** + * 旁站结束时间 + */ + private LocalDateTime supervisionJs; + + /** + * 旁站结束时间 + */ + private LocalDateTime supervisionKs; + + /** + * 问题描述 + */ + private String problemDescription; + + + /** + * 旁站文件 + */ + private String supervisionFile; + + + /** + * 旁站人 + */ + private String supervisionRen; + + /** + * 旁站单位 + */ + private String supervisionDw; + + + + + + + + + + + + + + + + + + + + + + + /** + * 验收意见 + */ + private String inspectionOpinion; + + /** + * 验收人姓名 + */ + private String inspector; + + /** + * 验收时间 + */ + private LocalDateTime inspectionTime; + + /** + * 审核标志 + */ + private String auditStatus; + + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/bo/HseGcjkBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/bo/HseGcjkBo.java new file mode 100644 index 00000000..e8875169 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/bo/HseGcjkBo.java @@ -0,0 +1,195 @@ +package org.dromara.safety.gcjkjl.domain.bo; + +import org.dromara.safety.gcjkjl.domain.HseGcjk; +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.time.LocalDate; +import java.time.LocalDateTime; + +/** + * 安全-过程监控记录业务对象 hse_gcjk + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HseGcjk.class, reverseConvertGenerate = false) +public class HseGcjkBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 监控编号 + */ +// @NotBlank(message = "监控编号不能为空", groups = { AddGroup.class, EditGroup.class }) + private String monitorNo; + + /** + * 危大工程ID + */ + @NotNull(message = "危大工程ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long masterId; + + /** + * 项目ID + */ + @NotNull(message = "项目ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long projectId; + + /** + * 危大工程名称 + */ + private String deName; + + + /** + * 监控名称 + */ + private String monitorName; + + /** + * 监控内容 + */ + @NotBlank(message = "监控内容不能为空", groups = { AddGroup.class, EditGroup.class }) + private String monitorContent; + + /** + * 监控频次 + */ + @NotBlank(message = "监控频次不能为空", groups = { AddGroup.class, EditGroup.class }) + private String monitorFrequency; + + /** + * 监控责任人姓名 + */ + @NotBlank(message = "监控责任人姓名不能为空", groups = { AddGroup.class, EditGroup.class }) + private String monitorResponsiblePerson; + + /** + * 过程记录日期 + */ + @NotNull(message = "过程记录日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate recordDate; + + /** + * 是否存在危险迹象(1:是,0:否) + */ + @NotNull(message = "是否存在危险迹象(1:是,0:否)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String hasHazardSign; + + /** + * 施工状态描述 + */ + @NotBlank(message = "施工状态描述不能为空", groups = { AddGroup.class, EditGroup.class }) + private String constructionStatus; + + /** + * 关键工序完成情况 + */ + private String keyProcessProgress; + + /** + * 是否旁站(1:是,0:否) + */ + @NotNull(message = "是否旁站(1:是,0:否)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String isOnSiteSupervision; + + /** + * 验收意见 + */ + private String inspectionOpinion; + + /** + * 验收人姓名 + */ + private String inspector; + + /** + * 验收时间 + */ + private LocalDateTime inspectionTime; + + /** + * 审核标志 + */ + private String auditStatus; + + + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + + + /** + * 整改期限 + */ + private LocalDate abarbeitungQx; + + /** + * 整改人 + */ + private String abarbeitungRen; + + /** + * 整改要求 + */ + private String abarbeitungYq; + + + /** + * 旁站记录内容 + */ + private String supervisionJl; + + + /** + * 旁站结束时间 + */ + private LocalDateTime supervisionJs; + + /** + * 旁站结束时间 + */ + private LocalDateTime supervisionKs; + + /** + * 问题描述 + */ + private String problemDescription; + + + /** + * 旁站文件 + */ + private String supervisionFile; + + + /** + * 旁站人 + */ + private String supervisionRen; + + /** + * 旁站单位 + */ + private String supervisionDw; + + + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/vo/HseGcjkVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/vo/HseGcjkVo.java new file mode 100644 index 00000000..3c4ed72c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/vo/HseGcjkVo.java @@ -0,0 +1,215 @@ +package org.dromara.safety.gcjkjl.domain.vo; + +import jakarta.validation.constraints.NotNull; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.safety.gcjkjl.domain.HseGcjk; +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.time.LocalDate; +import java.time.LocalDateTime; +import java.util.Date; + + + +/** + * 安全-过程监控记录视图对象 hse_gcjk + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseGcjk.class) +public class HseGcjkVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 监控编号 + */ + @ExcelProperty(value = "监控编号") + private String monitorNo; + + /** + * 项目ID + */ + private Long projectId; + + /** + * 危大工程ID + */ + @ExcelProperty(value = "危大工程ID") + private Long masterId; + + /** + * 危大工程名称 + */ + @ExcelProperty(value = "危大工程名称") + private String deName; + + /** + * 监控内容 + */ + @ExcelProperty(value = "监控内容") + private String monitorContent; + + /** + * 监控频次 + */ + @ExcelProperty(value = "监控频次") + private String monitorFrequency; + + + /** + * 监控名称 + */ + private String monitorName; + + /** + * 监控责任人姓名 + */ + @ExcelProperty(value = "监控责任人姓名") + private String monitorResponsiblePerson; + + /** + * 过程记录日期 + */ + @ExcelProperty(value = "过程记录日期") + private LocalDate recordDate; + + /** + * 是否存在危险迹象(1:是,0:否) + */ + @ExcelProperty(value = "是否存在危险迹象", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1=:是,0:否") + private String hasHazardSign; + + /** + * 施工状态描述 + */ + @ExcelProperty(value = "施工状态描述") + private String constructionStatus; + + /** + * 关键工序完成情况 + */ + @ExcelProperty(value = "关键工序完成情况") + private String keyProcessProgress; + + /** + * 是否旁站(1:是,0:否) + */ + @ExcelProperty(value = "是否旁站", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "1=:是,0:否") + private String isOnSiteSupervision; + + /** + * 验收意见 + */ + @ExcelProperty(value = "验收意见") + private String inspectionOpinion; + + /** + * 验收人姓名 + */ + @ExcelProperty(value = "验收人姓名") + private String inspector; + + /** + * 验收时间 + */ + @ExcelProperty(value = "验收时间") + private LocalDateTime inspectionTime; + + /** + * 审核标志 + */ + @ExcelProperty(value = "审核标志") + private String auditStatus; + + + + /** + * 文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String fileId; + + + + + /** + * 整改期限 + */ + private LocalDate abarbeitungQx; + + /** + * 整改人 + */ + private String abarbeitungRen; + + /** + * 整改要求 + */ + private String abarbeitungYq; + + + /** + * 旁站记录内容 + */ + private String supervisionJl; + + + /** + * 旁站结束时间 + */ + private LocalDateTime supervisionJs; + + /** + * 旁站结束时间 + */ + private LocalDateTime supervisionKs; + + /** + * 问题描述 + */ + private String problemDescription; + + + /** + * 旁站文件 + */ + private String supervisionFile; + + + /** + * 旁站人 + */ + private String supervisionRen; + + /** + * 旁站单位 + */ + private String supervisionDw; + + + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/vo/JkjcHeadVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/vo/JkjcHeadVo.java new file mode 100644 index 00000000..70b0910b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/domain/vo/JkjcHeadVo.java @@ -0,0 +1,23 @@ +package org.dromara.safety.gcjkjl.domain.vo; + + +import lombok.Data; + +@Data +public class JkjcHeadVo { + + /** + * 监控总数 + */ + private Long zs = 0L; + + /** + *存在危险迹象 + */ + private Long czwxjx = 0L; + + /** + * 不存在危险迹象 + */ + private Long bczwxjx = 0L; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/mapper/HseGcjkMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/mapper/HseGcjkMapper.java new file mode 100644 index 00000000..55b08e0a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/mapper/HseGcjkMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.gcjkjl.mapper; + +import org.dromara.safety.gcjkjl.domain.HseGcjk; +import org.dromara.safety.gcjkjl.domain.vo.HseGcjkVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 安全-过程监控记录Mapper接口 + * + * @author Lion Li + * @date 2025-12-06 + */ +public interface HseGcjkMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/service/IHseGcjkService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/service/IHseGcjkService.java new file mode 100644 index 00000000..0a8e5c9a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/service/IHseGcjkService.java @@ -0,0 +1,74 @@ +package org.dromara.safety.gcjkjl.service; + +import org.dromara.safety.gcjkjl.domain.vo.HseGcjkVo; +import org.dromara.safety.gcjkjl.domain.bo.HseGcjkBo; +import org.dromara.safety.gcjkjl.domain.HseGcjk; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.safety.gcjkjl.domain.vo.JkjcHeadVo; + +import java.util.Collection; +import java.util.List; + +/** + * 安全-过程监控记录Service接口 + * + * @author Lion Li + * @date 2025-12-06 + */ +public interface IHseGcjkService extends IService{ + + /** + * 查询安全-过程监控记录 + * + * @param id 主键 + * @return 安全-过程监控记录 + */ + HseGcjkVo queryById(Long id); + + /** + * 分页查询安全-过程监控记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全-过程监控记录分页列表 + */ + TableDataInfo queryPageList(HseGcjkBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的安全-过程监控记录列表 + * + * @param bo 查询条件 + * @return 安全-过程监控记录列表 + */ + List queryList(HseGcjkBo bo); + + /** + * 新增安全-过程监控记录 + * + * @param bo 安全-过程监控记录 + * @return 是否新增成功 + */ + Boolean insertByBo(HseGcjkBo bo); + + /** + * 修改安全-过程监控记录 + * + * @param bo 安全-过程监控记录 + * @return 是否修改成功 + */ + Boolean updateByBo(HseGcjkBo bo); + + /** + * 校验并批量删除安全-过程监控记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + JkjcHeadVo listHead(HseGcjkBo bo); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/service/impl/HseGcjkServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/service/impl/HseGcjkServiceImpl.java new file mode 100644 index 00000000..1719be90 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/gcjkjl/service/impl/HseGcjkServiceImpl.java @@ -0,0 +1,188 @@ +package org.dromara.safety.gcjkjl.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.utils.BatchNumberGenerator; +import org.dromara.safety.enums.AqEnums; +import org.dromara.safety.gcjkjl.domain.vo.JkjcHeadVo; +import org.dromara.safety.jsjd.domain.vo.HseJsjdVo; +import org.dromara.system.service.ISysOssService; +import org.springframework.stereotype.Service; +import org.dromara.safety.gcjkjl.domain.bo.HseGcjkBo; +import org.dromara.safety.gcjkjl.domain.vo.HseGcjkVo; +import org.dromara.safety.gcjkjl.domain.HseGcjk; +import org.dromara.safety.gcjkjl.mapper.HseGcjkMapper; +import org.dromara.safety.gcjkjl.service.IHseGcjkService; + +import java.util.*; + +/** + * 安全-过程监控记录Service业务层处理 + * + * @author Lion Li + * @date 2025-12-06 + */ +@RequiredArgsConstructor +@Service +public class HseGcjkServiceImpl extends ServiceImpl implements IHseGcjkService { + + private final HseGcjkMapper baseMapper; + + private final ISysOssService sysOssService; + + + /** + * 查询安全-过程监控记录 + * + * @param id 主键 + * @return 安全-过程监控记录 + */ + @Override + public HseGcjkVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询安全-过程监控记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全-过程监控记录分页列表 + */ + @Override + public TableDataInfo queryPageList(HseGcjkBo 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(HseGcjkBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseGcjkBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HseGcjk::getId); + lqw.eq(StringUtils.isNotBlank(bo.getMonitorNo()), HseGcjk::getMonitorNo, bo.getMonitorNo()); + lqw.eq(bo.getMasterId() != null, HseGcjk::getMasterId, bo.getMasterId()); + lqw.eq(bo.getProjectId() != null, HseGcjk::getProjectId, bo.getProjectId()); + lqw.like(StringUtils.isNotBlank(bo.getDeName()), HseGcjk::getDeName, bo.getDeName()); + lqw.eq(StringUtils.isNotBlank(bo.getMonitorContent()), HseGcjk::getMonitorContent, bo.getMonitorContent()); + lqw.eq(StringUtils.isNotBlank(bo.getMonitorFrequency()), HseGcjk::getMonitorFrequency, bo.getMonitorFrequency()); + lqw.eq(StringUtils.isNotBlank(bo.getMonitorResponsiblePerson()), HseGcjk::getMonitorResponsiblePerson, bo.getMonitorResponsiblePerson()); + lqw.eq(bo.getRecordDate() != null, HseGcjk::getRecordDate, bo.getRecordDate()); + lqw.eq(bo.getHasHazardSign() != null, HseGcjk::getHasHazardSign, bo.getHasHazardSign()); + lqw.eq(StringUtils.isNotBlank(bo.getConstructionStatus()), HseGcjk::getConstructionStatus, bo.getConstructionStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getKeyProcessProgress()), HseGcjk::getKeyProcessProgress, bo.getKeyProcessProgress()); + lqw.eq(bo.getIsOnSiteSupervision() != null, HseGcjk::getIsOnSiteSupervision, bo.getIsOnSiteSupervision()); + lqw.eq(StringUtils.isNotBlank(bo.getInspectionOpinion()), HseGcjk::getInspectionOpinion, bo.getInspectionOpinion()); + lqw.eq(StringUtils.isNotBlank(bo.getInspector()), HseGcjk::getInspector, bo.getInspector()); + lqw.eq(bo.getInspectionTime() != null, HseGcjk::getInspectionTime, bo.getInspectionTime()); + lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), HseGcjk::getAuditStatus, bo.getAuditStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), HseGcjk::getFileId, bo.getFileId()); + return lqw; + } + + /** + * 新增安全-过程监控记录 + * + * @param bo 安全-过程监控记录 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HseGcjkBo bo) { + HseGcjk add = MapstructUtils.convert(bo, HseGcjk.class); + validEntityBeforeSave(add); + String banBen = BatchNumberGenerator.generateBatchNumber("ANGCJC-"); + add.setMonitorNo(banBen); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改安全-过程监控记录 + * + * @param bo 安全-过程监控记录 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HseGcjkBo bo) { + HseGcjk update = MapstructUtils.convert(bo, HseGcjk.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HseGcjk entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除安全-过程监控记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + + + List deleteIds = new ArrayList<>(); + for (Long id : ids) { + HseGcjkVo vo = baseMapper.selectVoById(id); + if (vo != null){ + //删除附件 + if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){ + List list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList(); + deleteIds.addAll(list); + } + } + } + if (!deleteIds.isEmpty()) { + sysOssService.deleteWithValidByIds(deleteIds, false); + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public JkjcHeadVo listHead(HseGcjkBo bo) { + JkjcHeadVo jkjcHeadVo = new JkjcHeadVo(); + if (bo.getProjectId() == null) throw new RuntimeException("项目不能为空"); + List hseGcjks = baseMapper.selectList(new LambdaQueryWrapper().eq(HseGcjk::getProjectId, bo.getProjectId())); + if (hseGcjks != null && hseGcjks.size() > 0) { + jkjcHeadVo.setZs(Long.valueOf(hseGcjks.size())); + jkjcHeadVo.setBczwxjx(hseGcjks.stream().filter(hseGcjk -> hseGcjk.getHasHazardSign().equals(AqEnums.AQWXJX_F.getTypeValue())).count()); + jkjcHeadVo.setCzwxjx(hseGcjks.stream().filter(hseGcjk -> hseGcjk.getHasHazardSign().equals(AqEnums.AQWXJX_S.getTypeValue())).count()); + + } + + + + return jkjcHeadVo; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/controller/HseJsjdController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/controller/HseJsjdController.java new file mode 100644 index 00000000..012020ef --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/controller/HseJsjdController.java @@ -0,0 +1,131 @@ +package org.dromara.safety.jsjd.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.safety.domain.bo.HseSpecialPlanBo; +import org.dromara.safety.domain.vo.HseSpecialPlanVo; +import org.dromara.safety.jsjd.domain.vo.JsjgHeadVo; +import org.dromara.safety.service.IHseSpecialPlanService; +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.safety.jsjd.domain.vo.HseJsjdVo; +import org.dromara.safety.jsjd.domain.bo.HseJsjdBo; +import org.dromara.safety.jsjd.service.IHseJsjdService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 安全技术交底 + * + * @author Lion Li + * @date 2025-12-06 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/jsjd/jsjd") +public class HseJsjdController extends BaseController { + + private final IHseJsjdService hseJsjdService; + + + private final IHseSpecialPlanService hseSpecialPlanService; + + /** + * 查询危大工程专项施工方案列表 + */ + @SaCheckPermission("jsjd:jsjd:list") + @GetMapping("/getlist") + public TableDataInfo list(HseSpecialPlanBo bo, PageQuery pageQuery) { + return hseSpecialPlanService.queryPageList(bo, pageQuery); + } + + /** + * 查询安全技术交底列表 + */ + @SaCheckPermission("jsjd:jsjd:list") + @GetMapping("/list") + public TableDataInfo list(HseJsjdBo bo, PageQuery pageQuery) { + return hseJsjdService.queryPageList(bo, pageQuery); + } + + + /** + * 查询安全技术交底头部数据 + */ + @SaCheckPermission("jsjd:jsjd:list") + @GetMapping("/listHead") + public R list(HseJsjdBo bo) { + return R.ok(hseJsjdService.listHead(bo)); + } + + /** + * 导出安全技术交底列表 + */ + @SaCheckPermission("jsjd:jsjd:export") + @Log(title = "安全技术交底", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(HseJsjdBo bo, HttpServletResponse response) { + List list = hseJsjdService.queryList(bo); + ExcelUtil.exportExcel(list, "安全技术交底", HseJsjdVo.class, response); + } + + /** + * 获取安全技术交底详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("jsjd:jsjd:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(hseJsjdService.queryById(id)); + } + + /** + * 新增安全技术交底 + */ + @SaCheckPermission("jsjd:jsjd:add") + @Log(title = "安全技术交底", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody HseJsjdBo bo) { + return toAjax(hseJsjdService.insertByBo(bo)); + } + + /** + * 修改安全技术交底 + */ + @SaCheckPermission("jsjd:jsjd:edit") + @Log(title = "安全技术交底", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody HseJsjdBo bo) { + return toAjax(hseJsjdService.updateByBo(bo)); + } + + /** + * 删除安全技术交底 + * + * @param ids 主键串 + */ + @SaCheckPermission("jsjd:jsjd:remove") + @Log(title = "安全技术交底", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(hseJsjdService.deleteWithValidByIds(List.of(ids), true)); + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/HseJsjd.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/HseJsjd.java new file mode 100644 index 00000000..7ba4ea2b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/HseJsjd.java @@ -0,0 +1,113 @@ +package org.dromara.safety.jsjd.domain; + +import org.dromara.common.mybatis.core.domain.BaseEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.time.LocalDate; + +/** + * 安全技术交底对象 hse_jsjd + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("hse_jsjd") +public class HseJsjd extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + + /** + * 交底编号 + */ + private String disclosureNo; + + /** + * 危大工程ID + */ + private Long masterId; + + /** + * 危大工程名称 + */ + private String deName; + + /** + * 交底名称 + */ + private String disclosureName; + + /** + * 项目id + */ + private Long projectId; + + /** + * 交底方式 + */ + private String disclosureMethod; + + /** + * 交底日期 + */ + private LocalDate disclosureDate; + + /** + * 交底地点 + */ + private String disclosurePlace; + + /** + * 交底人 + */ + private String disclosurePerson; + + /** + * 交底对象(多个) + */ + private String disclosureObjects; + + /** + * 关键风险提示 + */ + private String keyRiskTips; + + /** + * 安全注意事项 + */ + private String safetyNotes; + + /** + * 交底状态 + */ + private String presentationState; + + /** + * 审核标志 + */ + private String auditStatus; + + /** + * 应急措施说明 + */ + private String outburstExplain; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/bo/HseJsjdBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/bo/HseJsjdBo.java new file mode 100644 index 00000000..b1bd6d15 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/bo/HseJsjdBo.java @@ -0,0 +1,126 @@ +package org.dromara.safety.jsjd.domain.bo; + +import org.dromara.safety.jsjd.domain.HseJsjd; +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.time.LocalDate; + +/** + * 安全技术交底业务对象 hse_jsjd + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = HseJsjd.class, reverseConvertGenerate = false) +public class HseJsjdBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 交底编号 + */ + private String disclosureNo; + + + /** + * 交底名称 + */ + private String disclosureName; + + /** + * 危大工程ID + */ + @NotNull(message = "专项方案管理ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long masterId; + + /** + * 危大工程名称 + */ + private String deName; + + /** + * 项目id + */ + @NotNull(message = "项目id不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long projectId; + + /** + * 交底方式 + */ + @NotBlank(message = "交底方式不能为空", groups = { AddGroup.class, EditGroup.class }) + private String disclosureMethod; + + /** + * 交底日期 + */ + @NotNull(message = "交底日期不能为空", groups = { AddGroup.class, EditGroup.class }) + private LocalDate disclosureDate; + + /** + * 交底地点 + */ + @NotBlank(message = "交底地点不能为空", groups = { AddGroup.class, EditGroup.class }) + private String disclosurePlace; + + /** + * 交底人 + */ + @NotNull(message = "交底人不能为空", groups = { AddGroup.class, EditGroup.class }) + private String disclosurePerson; + + /** + * 交底对象(多个) + */ + @NotBlank(message = "交底对象(多个)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String disclosureObjects; + + /** + * 关键风险提示 + */ + @NotBlank(message = "关键风险提示不能为空", groups = { AddGroup.class, EditGroup.class }) + private String keyRiskTips; + + /** + * 安全注意事项 + */ + @NotBlank(message = "安全注意事项不能为空", groups = { AddGroup.class, EditGroup.class }) + private String safetyNotes; + + /** + * 交底状态 + */ + @NotBlank(message = "交底状态不能为空", groups = { AddGroup.class, EditGroup.class }) + private String presentationState; + + /** + * 审核标志 + */ + private String auditStatus; + + /** + * 应急措施说明 + */ + @NotBlank(message = "应急措施说明不能为空", groups = { AddGroup.class, EditGroup.class }) + private String outburstExplain; + + /** + * 文件id (多个文件逗号分隔) + */ + private String fileId; + + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/vo/HseJsjdVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/vo/HseJsjdVo.java new file mode 100644 index 00000000..a2098573 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/vo/HseJsjdVo.java @@ -0,0 +1,139 @@ +package org.dromara.safety.jsjd.domain.vo; + +import org.dromara.common.translation.annotation.Translation; +import org.dromara.common.translation.constant.TransConstant; +import org.dromara.safety.jsjd.domain.HseJsjd; +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.time.LocalDate; +import java.util.Date; + + + +/** + * 安全技术交底视图对象 hse_jsjd + * + * @author Lion Li + * @date 2025-12-06 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = HseJsjd.class) +public class HseJsjdVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 交底编号 + */ + @ExcelProperty(value = "交底编号") + private String disclosureNo; + + /** + * 交底名称 + */ + private String disclosureName; + /** + * 危大工程ID + */ + @ExcelProperty(value = "专项方案管理ID") + private Long masterId; + + /** + * 危大工程名称 + */ + private String deName; + + /** + * 项目id + */ + @ExcelProperty(value = "项目id") + private Long projectId; + + /** + * 交底方式 + */ + @ExcelProperty(value = "交底方式") + private String disclosureMethod; + + /** + * 交底日期 + */ + @ExcelProperty(value = "交底日期") + private LocalDate disclosureDate; + + /** + * 交底地点 + */ + @ExcelProperty(value = "交底地点") + private String disclosurePlace; + + /** + * 交底人 + */ + @ExcelProperty(value = "交底人") + private String disclosurePerson; + + + + /** + * 交底对象(多个) + */ + @ExcelProperty(value = "交底对象(多个)") + private String disclosureObjects; + + /** + * 关键风险提示 + */ + @ExcelProperty(value = "关键风险提示") + private String keyRiskTips; + + /** + * 安全注意事项 + */ + @ExcelProperty(value = "安全注意事项") + private String safetyNotes; + + /** + * 交底状态 + */ + @ExcelProperty(value = "交底状态") + private String presentationState; + + /** + * 审核标志 + */ + @ExcelProperty(value = "审核标志") + private String auditStatus; + + /** + * 应急措施说明 + */ + @ExcelProperty(value = "应急措施说明") + private String outburstExplain; + + /** + * 文件id (多个文件逗号分隔) + */ + @ExcelProperty(value = "文件id ", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "多=个文件逗号分隔") + private String fileId; + + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/vo/JsjgHeadVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/vo/JsjgHeadVo.java new file mode 100644 index 00000000..a506887b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/domain/vo/JsjgHeadVo.java @@ -0,0 +1,33 @@ +package org.dromara.safety.jsjd.domain.vo; + + +import lombok.Data; + +@Data +public class JsjgHeadVo { + + /** + * 危大工程总数 + */ + private Long wczs = 0L; + + /** + * 技术交底 总数 + */ + private Long jdzs = 0L; + + /** + * 技术交底 已完成 + */ + private Long jdywc = 0L; + + /** + * 技术交底 未完成 + */ + private Long jdwwc = 0L; + + + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/mapper/HseJsjdMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/mapper/HseJsjdMapper.java new file mode 100644 index 00000000..437fe986 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/mapper/HseJsjdMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.jsjd.mapper; + +import org.dromara.safety.jsjd.domain.HseJsjd; +import org.dromara.safety.jsjd.domain.vo.HseJsjdVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 安全技术交底Mapper接口 + * + * @author Lion Li + * @date 2025-12-06 + */ +public interface HseJsjdMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/service/IHseJsjdService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/service/IHseJsjdService.java new file mode 100644 index 00000000..57c87e1e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/service/IHseJsjdService.java @@ -0,0 +1,74 @@ +package org.dromara.safety.jsjd.service; + +import org.dromara.safety.jsjd.domain.vo.HseJsjdVo; +import org.dromara.safety.jsjd.domain.bo.HseJsjdBo; +import org.dromara.safety.jsjd.domain.HseJsjd; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.safety.jsjd.domain.vo.JsjgHeadVo; + +import java.util.Collection; +import java.util.List; + +/** + * 安全技术交底Service接口 + * + * @author Lion Li + * @date 2025-12-06 + */ +public interface IHseJsjdService extends IService{ + + /** + * 查询安全技术交底 + * + * @param id 主键 + * @return 安全技术交底 + */ + HseJsjdVo queryById(Long id); + + /** + * 分页查询安全技术交底列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全技术交底分页列表 + */ + TableDataInfo queryPageList(HseJsjdBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的安全技术交底列表 + * + * @param bo 查询条件 + * @return 安全技术交底列表 + */ + List queryList(HseJsjdBo bo); + + /** + * 新增安全技术交底 + * + * @param bo 安全技术交底 + * @return 是否新增成功 + */ + Boolean insertByBo(HseJsjdBo bo); + + /** + * 修改安全技术交底 + * + * @param bo 安全技术交底 + * @return 是否修改成功 + */ + Boolean updateByBo(HseJsjdBo bo); + + /** + * 校验并批量删除安全技术交底信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + JsjgHeadVo listHead(HseJsjdBo bo); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/service/impl/HseJsjdServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/service/impl/HseJsjdServiceImpl.java new file mode 100644 index 00000000..dd5982d0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/jsjd/service/impl/HseJsjdServiceImpl.java @@ -0,0 +1,189 @@ +package org.dromara.safety.jsjd.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.utils.BatchNumberGenerator; +import org.dromara.mechanical.jxgl.domain.vo.JxGzwxJlVo; +import org.dromara.safety.domain.HseSpecialPlan; +import org.dromara.safety.enums.AqEnums; +import org.dromara.safety.jsjd.domain.vo.JsjgHeadVo; +import org.dromara.safety.service.IHseSpecialPlanService; +import org.dromara.system.service.ISysOssService; +import org.springframework.stereotype.Service; +import org.dromara.safety.jsjd.domain.bo.HseJsjdBo; +import org.dromara.safety.jsjd.domain.vo.HseJsjdVo; +import org.dromara.safety.jsjd.domain.HseJsjd; +import org.dromara.safety.jsjd.mapper.HseJsjdMapper; +import org.dromara.safety.jsjd.service.IHseJsjdService; + +import java.util.*; + +/** + * 安全技术交底Service业务层处理 + * + * @author Lion Li + * @date 2025-12-06 + */ +@RequiredArgsConstructor +@Service +public class HseJsjdServiceImpl extends ServiceImpl implements IHseJsjdService { + + private final HseJsjdMapper baseMapper; + + private final ISysOssService sysOssService; + + private final IHseSpecialPlanService hseSpecialPlanService; + + + /** + * 查询安全技术交底 + * + * @param id 主键 + * @return 安全技术交底 + */ + @Override + public HseJsjdVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询安全技术交底列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 安全技术交底分页列表 + */ + @Override + public TableDataInfo queryPageList(HseJsjdBo 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(HseJsjdBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseJsjdBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HseJsjd::getId); + lqw.eq(StringUtils.isNotBlank(bo.getDisclosureNo()), HseJsjd::getDisclosureNo, bo.getDisclosureNo()); + lqw.eq(bo.getMasterId() != null, HseJsjd::getMasterId, bo.getMasterId()); + lqw.eq(bo.getDeName() != null, HseJsjd::getDeName, bo.getDeName()); + lqw.eq(bo.getProjectId() != null, HseJsjd::getProjectId, bo.getProjectId()); + lqw.eq(StringUtils.isNotBlank(bo.getDisclosureMethod()), HseJsjd::getDisclosureMethod, bo.getDisclosureMethod()); + lqw.eq(bo.getDisclosureDate() != null, HseJsjd::getDisclosureDate, bo.getDisclosureDate()); + lqw.eq(StringUtils.isNotBlank(bo.getDisclosurePlace()), HseJsjd::getDisclosurePlace, bo.getDisclosurePlace()); + lqw.eq(bo.getDisclosurePerson() != null, HseJsjd::getDisclosurePerson, bo.getDisclosurePerson()); + lqw.eq(StringUtils.isNotBlank(bo.getDisclosureObjects()), HseJsjd::getDisclosureObjects, bo.getDisclosureObjects()); + lqw.eq(StringUtils.isNotBlank(bo.getKeyRiskTips()), HseJsjd::getKeyRiskTips, bo.getKeyRiskTips()); + lqw.eq(StringUtils.isNotBlank(bo.getSafetyNotes()), HseJsjd::getSafetyNotes, bo.getSafetyNotes()); + lqw.eq(StringUtils.isNotBlank(bo.getPresentationState()), HseJsjd::getPresentationState, bo.getPresentationState()); + lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), HseJsjd::getAuditStatus, bo.getAuditStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getOutburstExplain()), HseJsjd::getOutburstExplain, bo.getOutburstExplain()); + lqw.eq(StringUtils.isNotBlank(bo.getFileId()), HseJsjd::getFileId, bo.getFileId()); + return lqw; + } + + /** + * 新增安全技术交底 + * + * @param bo 安全技术交底 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HseJsjdBo bo) { + HseJsjd add = MapstructUtils.convert(bo, HseJsjd.class); + validEntityBeforeSave(add); + String banBen = BatchNumberGenerator.generateBatchNumber("AQJSJD-"); + HseJsjdVo hseJsjdVo = baseMapper.selectVoOne(new LambdaQueryWrapper().eq(HseJsjd::getMasterId, bo.getMasterId())); + if (hseJsjdVo != null) throw new RuntimeException("该专项方案已被添加 "); + add.setDisclosureNo(banBen); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改安全技术交底 + * + * @param bo 安全技术交底 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HseJsjdBo bo) { + HseJsjd update = MapstructUtils.convert(bo, HseJsjd.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HseJsjd entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除安全技术交底信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + + + List deleteIds = new ArrayList<>(); + for (Long id : ids) { + HseJsjdVo vo = baseMapper.selectVoById(id); + if (vo != null){ + //删除附件 + if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){ + List list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList(); + deleteIds.addAll(list); + } + } + } + if (!deleteIds.isEmpty()) { + sysOssService.deleteWithValidByIds(deleteIds, false); + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public JsjgHeadVo listHead(HseJsjdBo bo) { + JsjgHeadVo jsjgHeadVo = new JsjgHeadVo(); + if (bo.getProjectId() == null) throw new RuntimeException("项目不能为空"); + Long l = hseSpecialPlanService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(HseSpecialPlan::getProjectId, bo.getProjectId())); + List hseJsjds = baseMapper.selectList(new LambdaQueryWrapper().eq(HseJsjd::getProjectId, bo.getProjectId())); + jsjgHeadVo.setWczs(l); + jsjgHeadVo.setJdzs(Long.valueOf(hseJsjds.size())); + jsjgHeadVo.setJdwwc(hseJsjds.stream().filter(hseJsjd -> hseJsjd.getPresentationState().equals(AqEnums.AQJDZT_F.getTypeValue())).count()); + jsjgHeadVo.setJdywc(hseJsjds.stream().filter(hseJsjd -> hseJsjd.getPresentationState().equals(AqEnums.AQJDZT_S.getTypeValue())).count()); + + return jsjgHeadVo; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardHiddenDangerMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardHiddenDangerMapper.java new file mode 100644 index 00000000..43046734 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardHiddenDangerMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.mapper; + +import org.dromara.safety.domain.HazardHiddenDanger; +import org.dromara.safety.domain.vo.HazardHiddenDangerVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 隐患信息Mapper接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface HazardHiddenDangerMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardHiddenDangerRectifyMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardHiddenDangerRectifyMapper.java new file mode 100644 index 00000000..6a71a8cf --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardHiddenDangerRectifyMapper.java @@ -0,0 +1,26 @@ +package org.dromara.safety.mapper; + +import org.apache.ibatis.annotations.Param; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.safety.domain.HazardHiddenDangerRectify; +import org.dromara.safety.domain.vo.HazardHiddenDangerRectifyVo; +import org.dromara.safety.domain.vo.RectifyTimesVo; + +import java.util.List; + +/** + * 隐患整改情况Mapper接口 + * + * @author lilemy + * @date 2025-12-04 + */ +public interface HazardHiddenDangerRectifyMapper extends BaseMapperPlus { + + /** + * 获取最近一次整改时间 + * + * @param ids 隐患ID + * @return 最近一次整改时间 + */ + List getLatestRectifyTimes(@Param("ids") List ids); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardRuleMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardRuleMapper.java new file mode 100644 index 00000000..a87e87c0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardRuleMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.mapper; + +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.safety.domain.HazardRule; +import org.dromara.safety.domain.vo.HazardRuleVo; + +/** + * 隐患分级通知规则Mapper接口 + * + * @author lilemy + * @date 2025-12-03 + */ +public interface HazardRuleMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardRuleNotifyObjectMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardRuleNotifyObjectMapper.java new file mode 100644 index 00000000..8442da31 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HazardRuleNotifyObjectMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.mapper; + +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.safety.domain.HazardRuleNotifyObject; +import org.dromara.safety.domain.vo.HazardRuleNotifyObjectVo; + +/** + * 隐患规则通知对象Mapper接口 + * + * @author lilemy + * @date 2025-12-03 + */ +public interface HazardRuleNotifyObjectMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseDangerArchiveMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseDangerArchiveMapper.java new file mode 100644 index 00000000..2e73bbd8 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseDangerArchiveMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.mapper; + +import org.dromara.safety.domain.HseDangerArchive; +import org.dromara.safety.domain.vo.HseDangerArchiveVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 危大工程档案Mapper接口 + * + * @author Lion Li + * @date 2025-12-06 + */ +public interface HseDangerArchiveMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseDangerousEngineeringMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseDangerousEngineeringMapper.java new file mode 100644 index 00000000..5f797930 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseDangerousEngineeringMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.mapper; + +import org.dromara.safety.domain.HseDangerousEngineering; +import org.dromara.safety.domain.vo.HseDangerousEngineeringVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 危大工程信息Mapper接口 + * + * @author Lion Li + * @date 2025-12-06 + */ +public interface HseDangerousEngineeringMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseRewardsPunishmentsMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseRewardsPunishmentsMapper.java new file mode 100644 index 00000000..30de9cf5 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseRewardsPunishmentsMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.mapper; + +import org.dromara.safety.domain.HseRewardsPunishments; +import org.dromara.safety.domain.vo.HseRewardsPunishmentsVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 奖惩记录Mapper接口 + * + * @author Lion Li + * @date 2025-12-04 + */ +public interface HseRewardsPunishmentsMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseRpObjectMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseRpObjectMapper.java new file mode 100644 index 00000000..535e811d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseRpObjectMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.mapper; + +import org.dromara.safety.domain.HseRpObject; +import org.dromara.safety.domain.vo.HseRpPersonVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 奖惩对象Mapper接口 + * + * @author Lion Li + * @date 2025-12-04 + */ +public interface HseRpObjectMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseSpecialPlanMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseSpecialPlanMapper.java new file mode 100644 index 00000000..4d3479f6 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseSpecialPlanMapper.java @@ -0,0 +1,15 @@ +package org.dromara.safety.mapper; + +import org.dromara.safety.domain.HseSpecialPlan; +import org.dromara.safety.domain.vo.HseSpecialPlanVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 危大工程专项施工方案Mapper接口 + * + * @author Lion Li + * @date 2025-12-06 + */ +public interface HseSpecialPlanMapper extends BaseMapperPlus { + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseViolationRecordMapper.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseViolationRecordMapper.java index 4f1d71f6..44e5e13c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseViolationRecordMapper.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/mapper/HseViolationRecordMapper.java @@ -9,6 +9,8 @@ import org.dromara.safety.domain.HseViolationRecord; import org.dromara.safety.domain.vo.violationrecord.HseViolationRecordVo; import org.dromara.system.domain.SysUser; +import java.util.List; + /** * 违规记录Mapper接口 * @@ -18,4 +20,8 @@ import org.dromara.system.domain.SysUser; public interface HseViolationRecordMapper extends BaseMapperPlus { Page selectPageList(@Param("page") Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper); + + List selectLatestList( @Param(Constants.WRAPPER) Wrapper queryWrapper); + + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerRectifyService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerRectifyService.java new file mode 100644 index 00000000..96adfbe0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerRectifyService.java @@ -0,0 +1,97 @@ +package org.dromara.safety.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.safety.domain.HazardHiddenDangerRectify; +import org.dromara.safety.domain.bo.HazardHiddenDangerBo; +import org.dromara.safety.domain.bo.HazardHiddenDangerRectifyBo; +import org.dromara.safety.domain.dto.hiddendangerrectify.HazardHiddenDangerRectifyRectificationReq; +import org.dromara.safety.domain.dto.hiddendangerrectify.HazardHiddenDangerRectifyReviewReq; +import org.dromara.safety.domain.vo.HazardHiddenDangerRectifyVo; +import org.dromara.safety.domain.vo.HazardHiddenDangerVo; + +import java.util.Collection; +import java.util.List; + +/** + * 隐患整改情况Service接口 + * + * @author lilemy + * @date 2025-12-04 + */ +public interface IHazardHiddenDangerRectifyService extends IService { + + /** + * 查询隐患整改情况 + * + * @param id 主键 + * @return 隐患整改情况 + */ + HazardHiddenDangerVo queryById(Long id); + + /** + * 分页查询隐患整改情况列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 隐患整改情况分页列表 + */ + TableDataInfo queryPageList(HazardHiddenDangerBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的隐患整改情况列表 + * + * @param bo 查询条件 + * @return 隐患整改情况列表 + */ + List queryList(HazardHiddenDangerRectifyBo bo); + + /** + * 新增隐患整改情况 + * + * @param bo 隐患整改情况 + * @return 是否新增成功 + */ + Boolean insertByBo(HazardHiddenDangerRectifyBo bo); + + /** + * 修改隐患整改情况 + * + * @param bo 隐患整改情况 + * @return 是否修改成功 + */ + Boolean updateByBo(HazardHiddenDangerRectifyBo bo); + + /** + * 隐患整改 + * + * @param req 隐患整改参数 + * @return 是否整改成功 + */ + Boolean rectification(HazardHiddenDangerRectifyRectificationReq req); + + /** + * 隐患复查 + * + * @param req 隐患复查参数 + * @return 是否审核成功 + */ + Boolean review(HazardHiddenDangerRectifyReviewReq req); + + /** + * 校验并批量删除隐患整改情况信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 发送超时通知 + * + * @param bizId 业务id + */ + void sendTimeoutNotify(Long bizId); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerService.java new file mode 100644 index 00000000..9798746e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardHiddenDangerService.java @@ -0,0 +1,107 @@ +package org.dromara.safety.service; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.safety.domain.HazardHiddenDanger; +import org.dromara.safety.domain.bo.HazardHiddenDangerBo; +import org.dromara.safety.domain.dto.EvaluateDto; +import org.dromara.safety.domain.vo.HazardHiddenDangerVo; +import org.dromara.safety.domain.vo.HiddenDangerCountVo; + +import java.util.Collection; +import java.util.List; + +/** + * 隐患信息Service接口 + * + * @author Lion Li + * @date 2025-12-03 + */ +public interface IHazardHiddenDangerService extends IService { + + /** + * 查询隐患信息 + * + * @param id 主键 + * @return 隐患信息 + */ + HazardHiddenDangerVo queryById(Long id); + + /** + * 分页查询隐患信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 隐患信息分页列表 + */ + TableDataInfo queryPageList(HazardHiddenDangerBo bo, PageQuery pageQuery); + + /** + * 分页查询隐患信息列表 + * + * @param lqw 查询条件 + * @param pageQuery 分页参数 + * @return 隐患信息分页列表 + */ + TableDataInfo queryPageList(LambdaQueryWrapper lqw, PageQuery pageQuery); + + /** + * 查询符合条件的隐患信息列表 + * + * @param bo 查询条件 + * @return 隐患信息列表 + */ + List queryList(HazardHiddenDangerBo bo); + + /** + * 构建查询条件 + * + * @param bo 查询条件 + * @return 查询条件 + */ + LambdaQueryWrapper buildQueryWrapper(HazardHiddenDangerBo bo); + + /** + * 新增隐患信息 + * + * @param bo 隐患信息 + * @return 是否新增成功 + */ + Boolean insertByBo(HazardHiddenDangerBo bo); + + /** + * 修改隐患信息 + * + * @param bo 隐患信息 + * @return 是否修改成功 + */ + Boolean updateByBo(HazardHiddenDangerBo bo); + + /** + * 校验并批量删除隐患信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + + /** + * 隐患统计 + * + * @param projectId 项目ID + * @return 隐患统计信息 + */ + HiddenDangerCountVo dangerCount(Long projectId); + + /** + * 评估隐患 + * + * @param dto 评估信息 + * @return 是否评估成功 + */ + Boolean evaluate(EvaluateDto dto); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardRuleNotifyObjectService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardRuleNotifyObjectService.java new file mode 100644 index 00000000..da32ace9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardRuleNotifyObjectService.java @@ -0,0 +1,50 @@ +package org.dromara.safety.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.safety.domain.HazardRuleNotifyObject; +import org.dromara.safety.domain.vo.HazardRuleNotifyObjectVo; +import org.dromara.safety.domain.vo.HazardRuleVo; + +import java.util.List; +import java.util.Set; + +/** + * 隐患规则通知对象Service接口 + * + * @author lilemy + * @date 2025-12-03 + */ +public interface IHazardRuleNotifyObjectService extends IService { + + /** + * 根据规则查询通知对象 + * + * @param ruleId 规则id + * @return 通知对象 + */ + List queryVoByRule(Long ruleId); + + /** + * 根据对象列表查询对象列表 + * + * @param objectList 对象列表 + * @return 对象列表 + */ + List queryVo(List objectList); + + /** + * 根据规则查询所有通知对象id + * + * @param ruleId 规则id + * @param projectId 项目id + * @return 通知对象id + */ + Set queryNotifyObjectIds(Long ruleId, Long projectId); + + /** + * 补充数据 + * + * @param voList 规则列表 + */ + void supplementDataByRule(List voList); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardRuleService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardRuleService.java new file mode 100644 index 00000000..6ead1996 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHazardRuleService.java @@ -0,0 +1,70 @@ +package org.dromara.safety.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.safety.domain.HazardRule; +import org.dromara.safety.domain.bo.HazardRuleBo; +import org.dromara.safety.domain.vo.HazardRuleVo; + +import java.util.Collection; +import java.util.List; + +/** + * 隐患分级通知规则Service接口 + * + * @author lilemy + * @date 2025-12-03 + */ +public interface IHazardRuleService extends IService { + + /** + * 查询隐患分级通知规则 + * + * @param id 主键 + * @return 隐患分级通知规则 + */ + HazardRuleVo queryById(Long id); + + /** + * 分页查询隐患分级通知规则列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 隐患分级通知规则分页列表 + */ + TableDataInfo queryPageList(HazardRuleBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的隐患分级通知规则列表 + * + * @param bo 查询条件 + * @return 隐患分级通知规则列表 + */ + List queryList(HazardRuleBo bo); + + /** + * 新增隐患分级通知规则 + * + * @param bo 隐患分级通知规则 + * @return 是否新增成功 + */ + Boolean insertByBo(HazardRuleBo bo); + + /** + * 修改隐患分级通知规则 + * + * @param bo 隐患分级通知规则 + * @return 是否修改成功 + */ + Boolean updateByBo(HazardRuleBo bo); + + /** + * 校验并批量删除隐患分级通知规则信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseDangerArchiveService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseDangerArchiveService.java new file mode 100644 index 00000000..3c79fde7 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseDangerArchiveService.java @@ -0,0 +1,83 @@ +package org.dromara.safety.service; + +import org.dromara.safety.domain.vo.HseDangerArchiveCountVo; +import org.dromara.safety.domain.vo.HseDangerArchiveVo; +import org.dromara.safety.domain.bo.HseDangerArchiveBo; +import org.dromara.safety.domain.HseDangerArchive; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.dromara.safety.domain.vo.HseJsjdYuJkjcVo; + +import org.springframework.web.bind.annotation.PathVariable; + +import java.util.Collection; +import java.util.List; + +/** + * 危大工程档案Service接口 + * + * @author Lion Li + * @date 2025-12-06 + */ +public interface IHseDangerArchiveService extends IService{ + + /** + * 查询危大工程档案 + * + * @param id 主键 + * @return 危大工程档案 + */ + HseDangerArchiveVo queryById(Long id); + + /** + * 分页查询危大工程档案列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 危大工程档案分页列表 + */ + TableDataInfo queryPageList(HseDangerArchiveBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的危大工程档案列表 + * + * @param bo 查询条件 + * @return 危大工程档案列表 + */ + List queryList(HseDangerArchiveBo bo); + + /** + * 新增危大工程档案 + * + * @param bo 危大工程档案 + * @return 是否新增成功 + */ + Boolean insertByBo(HseDangerArchiveBo bo); + + /** + * 修改危大工程档案 + * + * @param bo 危大工程档案 + * @return 是否修改成功 + */ + Boolean updateByBo(HseDangerArchiveBo bo); + + /** + * 校验并批量删除危大工程档案信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + + /** + * 统计 + */ + HseDangerArchiveCountVo count( Long projectId); + + HseJsjdYuJkjcVo getJsjdYGcjk(Long id); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseDangerousEngineeringService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseDangerousEngineeringService.java new file mode 100644 index 00000000..74be781e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseDangerousEngineeringService.java @@ -0,0 +1,70 @@ +package org.dromara.safety.service; + +import org.dromara.safety.domain.vo.HseDangerousEngineeringVo; +import org.dromara.safety.domain.bo.HseDangerousEngineeringBo; +import org.dromara.safety.domain.HseDangerousEngineering; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 危大工程信息Service接口 + * + * @author Lion Li + * @date 2025-12-06 + */ +public interface IHseDangerousEngineeringService extends IService{ + + /** + * 查询危大工程信息 + * + * @param id 主键 + * @return 危大工程信息 + */ + HseDangerousEngineeringVo queryById(Long id); + + /** + * 分页查询危大工程信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 危大工程信息分页列表 + */ + TableDataInfo queryPageList(HseDangerousEngineeringBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的危大工程信息列表 + * + * @param bo 查询条件 + * @return 危大工程信息列表 + */ + List queryList(HseDangerousEngineeringBo bo); + + /** + * 新增危大工程信息 + * + * @param bo 危大工程信息 + * @return 是否新增成功 + */ + Boolean insertByBo(HseDangerousEngineeringBo bo); + + /** + * 修改危大工程信息 + * + * @param bo 危大工程信息 + * @return 是否修改成功 + */ + Boolean updateByBo(HseDangerousEngineeringBo bo); + + /** + * 校验并批量删除危大工程信息信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseRewardsPunishmentsService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseRewardsPunishmentsService.java new file mode 100644 index 00000000..e44ce68d --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseRewardsPunishmentsService.java @@ -0,0 +1,90 @@ +package org.dromara.safety.service; + +import org.dromara.safety.domain.vo.HseRPCountVo; +import org.dromara.safety.domain.vo.HseRewardsPunishmentsVo; +import org.dromara.safety.domain.bo.HseRewardsPunishmentsBo; +import org.dromara.safety.domain.HseRewardsPunishments; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.web.bind.annotation.PathVariable; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +/** + * 奖惩记录Service接口 + * + * @author Lion Li + * @date 2025-12-04 + */ +public interface IHseRewardsPunishmentsService extends IService{ + + /** + * 查询奖惩记录 + * + * @param id 主键 + * @return 奖惩记录 + */ + HseRewardsPunishmentsVo queryById(Long id); + + /** + * 分页查询奖惩记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 奖惩记录分页列表 + */ + TableDataInfo queryPageList(HseRewardsPunishmentsBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的奖惩记录列表 + * + * @param bo 查询条件 + * @return 奖惩记录列表 + */ + List queryList(HseRewardsPunishmentsBo bo); + + /** + * 新增奖惩记录 + * + * @param bo 奖惩记录 + * @return 是否新增成功 + */ + Boolean insertByBo(HseRewardsPunishmentsBo bo); + + /** + * 修改奖惩记录 + * + * @param bo 奖惩记录 + * @return 是否修改成功 + */ + Boolean updateByBo(HseRewardsPunishmentsBo bo); + + /** + * 校验并批量删除奖惩记录信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + + /** + * 金额统计 + * + * @param projectId 项目ID + */ + HseRPCountVo amountCount( Long projectId); + + + /** + * 类型统计 + * + * @param projectId 项目ID + */ + Map typeCount(Long projectId); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseRpObjectService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseRpObjectService.java new file mode 100644 index 00000000..8a33fa92 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseRpObjectService.java @@ -0,0 +1,70 @@ +package org.dromara.safety.service; + +import org.dromara.safety.domain.vo.HseRpPersonVo; +import org.dromara.safety.domain.bo.HseRpObjectBo; +import org.dromara.safety.domain.HseRpObject; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.Collection; +import java.util.List; + +/** + * 奖惩对象Service接口 + * + * @author Lion Li + * @date 2025-12-04 + */ +public interface IHseRpObjectService extends IService{ + + /** + * 查询奖惩对象 + * + * @param id 主键 + * @return 奖惩对象 + */ + HseRpPersonVo queryById(Long id); + + /** + * 分页查询奖惩对象列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 奖惩对象分页列表 + */ + TableDataInfo queryPageList(HseRpObjectBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的奖惩对象列表 + * + * @param bo 查询条件 + * @return 奖惩对象列表 + */ + List queryList(HseRpObjectBo bo); + + /** + * 新增奖惩对象 + * + * @param bo 奖惩对象 + * @return 是否新增成功 + */ + Boolean insertByBo(HseRpObjectBo bo); + + /** + * 修改奖惩对象 + * + * @param bo 奖惩对象 + * @return 是否修改成功 + */ + Boolean updateByBo(HseRpObjectBo bo); + + /** + * 校验并批量删除奖惩对象信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseSpecialPlanService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseSpecialPlanService.java new file mode 100644 index 00000000..bde39c1b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/IHseSpecialPlanService.java @@ -0,0 +1,85 @@ +package org.dromara.safety.service; + +import org.dromara.safety.domain.vo.HseSpecialPlanCountVo; +import org.dromara.safety.domain.vo.HseSpecialPlanFileVo; +import org.dromara.safety.domain.vo.HseSpecialPlanVo; +import org.dromara.safety.domain.bo.HseSpecialPlanBo; +import org.dromara.safety.domain.HseSpecialPlan; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import com.baomidou.mybatisplus.extension.service.IService; +import org.springframework.web.bind.annotation.PathVariable; + +import java.util.Collection; +import java.util.List; + +/** + * 危大工程专项施工方案Service接口 + * + * @author Lion Li + * @date 2025-12-06 + */ +public interface IHseSpecialPlanService extends IService{ + + /** + * 查询危大工程专项施工方案 + * + * @param id 主键 + * @return 危大工程专项施工方案 + */ + HseSpecialPlanVo queryById(Long id); + + /** + * 分页查询危大工程专项施工方案列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 危大工程专项施工方案分页列表 + */ + TableDataInfo queryPageList(HseSpecialPlanBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的危大工程专项施工方案列表 + * + * @param bo 查询条件 + * @return 危大工程专项施工方案列表 + */ + List queryList(HseSpecialPlanBo bo); + + /** + * 新增危大工程专项施工方案 + * + * @param bo 危大工程专项施工方案 + * @return 是否新增成功 + */ + Boolean insertByBo(HseSpecialPlanBo bo); + + /** + * 修改危大工程专项施工方案 + * + * @param bo 危大工程专项施工方案 + * @return 是否修改成功 + */ + Boolean updateByBo(HseSpecialPlanBo bo); + + /** + * 校验并批量删除危大工程专项施工方案信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 统计 + */ + HseSpecialPlanCountVo count(Long projectId); + + /** + * 获取档案 + */ + HseSpecialPlanFileVo getFile(Long deId); + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerRectifyServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerRectifyServiceImpl.java new file mode 100644 index 00000000..f8249a9c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerRectifyServiceImpl.java @@ -0,0 +1,393 @@ +package org.dromara.safety.service.impl; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.common.sse.dto.SseMessageDto; +import org.dromara.common.sse.utils.SseMessageUtils; +import org.dromara.rabbitmq.domain.MqDelayTask; +import org.dromara.rabbitmq.enums.MqDelayTaskTypeEnum; +import org.dromara.rabbitmq.service.IMqDelayTaskService; +import org.dromara.safety.domain.HazardHiddenDanger; +import org.dromara.safety.domain.HazardHiddenDangerRectify; +import org.dromara.safety.domain.HazardRule; +import org.dromara.safety.domain.bo.HazardHiddenDangerBo; +import org.dromara.safety.domain.bo.HazardHiddenDangerRectifyBo; +import org.dromara.safety.domain.dto.hiddendangerrectify.HazardHiddenDangerRectifyRectificationReq; +import org.dromara.safety.domain.dto.hiddendangerrectify.HazardHiddenDangerRectifyReviewReq; +import org.dromara.safety.domain.enums.HseSafetyInspectionReviewTypeEnum; +import org.dromara.safety.domain.vo.HazardHiddenDangerRectifyVo; +import org.dromara.safety.domain.vo.HazardHiddenDangerVo; +import org.dromara.safety.domain.vo.RectifyTimesVo; +import org.dromara.safety.mapper.HazardHiddenDangerRectifyMapper; +import org.dromara.safety.service.IHazardHiddenDangerRectifyService; +import org.dromara.safety.service.IHazardHiddenDangerService; +import org.dromara.safety.service.IHazardRuleNotifyObjectService; +import org.dromara.safety.service.IHazardRuleService; +import org.dromara.websocket.ChatServerHandler; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * 隐患整改情况Service业务层处理 + * + * @author lilemy + * @date 2025-12-04 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class HazardHiddenDangerRectifyServiceImpl extends ServiceImpl + implements IHazardHiddenDangerRectifyService { + + private final IHazardHiddenDangerService hazardHiddenDangerService; + + private final ChatServerHandler chatServerHandler; + + private final IHazardRuleNotifyObjectService hazardRuleNotifyObjectService; + + private final IHazardRuleService hazardRuleService; + + private final IMqDelayTaskService mqDelayTaskService; + + /** + * 查询隐患整改情况 + * + * @param id 主键 + * @return 隐患整改情况 + */ + @Override + public HazardHiddenDangerVo queryById(Long id) { + HazardHiddenDangerVo dangerVo = hazardHiddenDangerService.queryById(id); + if (dangerVo == null) { + throw new ServiceException("未找到该数据"); + } + List dangerRectifyVos = baseMapper.selectVoList(new LambdaQueryWrapper<>(HazardHiddenDangerRectify.class) + .eq(HazardHiddenDangerRectify::getHiddenDangerId, id) + .orderByAsc(HazardHiddenDangerRectify::getRectifyCount)); + dangerVo.setRectifyList(dangerRectifyVos); + return dangerVo; + } + + /** + * 分页查询隐患整改情况列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 隐患整改情况分页列表 + */ + @Override + public TableDataInfo queryPageList(HazardHiddenDangerBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = hazardHiddenDangerService.buildQueryWrapper(bo); + lqw.ne(HazardHiddenDanger::getStatus, HazardHiddenDanger.EVALUATE); + TableDataInfo result = hazardHiddenDangerService.queryPageList(lqw, pageQuery); + List rows = result.getRows(); + if (CollUtil.isNotEmpty(rows)) { + List ids = rows.stream().map(HazardHiddenDangerVo::getId).toList(); + List rectifyTimes = baseMapper.getLatestRectifyTimes(ids); + rows.forEach(row -> rectifyTimes.stream() + .filter(rectifyTimesVo -> rectifyTimesVo.getHiddenDangerId().equals(row.getId())) + .findFirst() + .ifPresent(rectifyTime -> row.setLatestRectifyTimes(rectifyTime.getLatestRectifyTimes()))); + } + return TableDataInfo.build(rows); + } + + /** + * 查询符合条件的隐患整改情况列表 + * + * @param bo 查询条件 + * @return 隐患整改情况列表 + */ + @Override + public List queryList(HazardHiddenDangerRectifyBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HazardHiddenDangerRectifyBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HazardHiddenDangerRectify::getId); + lqw.eq(bo.getHiddenDangerId() != null, HazardHiddenDangerRectify::getHiddenDangerId, bo.getHiddenDangerId()); + lqw.eq(bo.getRectifyUserId() != null, HazardHiddenDangerRectify::getRectifyUserId, bo.getRectifyUserId()); + lqw.eq(StringUtils.isNotBlank(bo.getRectifyDesc()), HazardHiddenDangerRectify::getRectifyDesc, bo.getRectifyDesc()); + lqw.eq(StringUtils.isNotBlank(bo.getRectifyFiles()), HazardHiddenDangerRectify::getRectifyFiles, bo.getRectifyFiles()); + lqw.eq(bo.getRectifyTime() != null, HazardHiddenDangerRectify::getRectifyTime, bo.getRectifyTime()); + lqw.eq(bo.getReviewUserId() != null, HazardHiddenDangerRectify::getReviewUserId, bo.getReviewUserId()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewDesc()), HazardHiddenDangerRectify::getReviewDesc, bo.getReviewDesc()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewFiles()), HazardHiddenDangerRectify::getReviewFiles, bo.getReviewFiles()); + lqw.eq(bo.getReviewTime() != null, HazardHiddenDangerRectify::getReviewTime, bo.getReviewTime()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewStatus()), HazardHiddenDangerRectify::getReviewStatus, bo.getReviewStatus()); + return lqw; + } + + /** + * 新增隐患整改情况 + * + * @param bo 隐患整改情况 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HazardHiddenDangerRectifyBo bo) { + HazardHiddenDangerRectify add = MapstructUtils.convert(bo, HazardHiddenDangerRectify.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改隐患整改情况 + * + * @param bo 隐患整改情况 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HazardHiddenDangerRectifyBo bo) { + HazardHiddenDangerRectify update = MapstructUtils.convert(bo, HazardHiddenDangerRectify.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 隐患整改 + * + * @param req 隐患整改参数 + * @return 是否整改成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean rectification(HazardHiddenDangerRectifyRectificationReq req) { + + Long id = req.getId(); + HazardHiddenDanger hiddenDanger = hazardHiddenDangerService.getById(id); + if (hiddenDanger == null) { + throw new ServiceException("未找到该数据"); + } + HazardHiddenDangerRectify oldRectify = this.lambdaQuery() + .eq(HazardHiddenDangerRectify::getHiddenDangerId, id) + .orderByDesc(HazardHiddenDangerRectify::getRectifyCount) + .last("limit 1") + .one(); + // todo 待完善 +/* Long userId = LoginHelper.getUserId(); + if (!oldRectify.getRectifyUserId().equals(userId)) { + throw new ServiceException("您没有权限修改该数据"); + }*/ + if (!oldRectify.getReviewStatus().equals(HseSafetyInspectionReviewTypeEnum.NOT_REVIEW.getValue())) { + throw new ServiceException("该数据已审核,请勿重复操作"); + } + HazardHiddenDangerRectify rectify = new HazardHiddenDangerRectify(); + rectify.setId(oldRectify.getId()); + rectify.setRectifyDesc(req.getRectifyDesc()); + rectify.setRectifyFiles(req.getRectifyFiles()); + rectify.setRectifyTime(LocalDateTime.now()); + boolean update = this.updateById(rectify); + if (!update) { + throw new ServiceException("数据修改失败"); + } + // 修改隐患状态 + hiddenDanger.setStatus(HazardHiddenDanger.REVIEW); + boolean update1 = hazardHiddenDangerService.updateById(hiddenDanger); + if (!update1) { + throw new ServiceException("数据修改失败"); + } + return true; + } + + /** + * 隐患复查 + * + * @param req 隐患复查参数 + * @return 是否审核成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean review(HazardHiddenDangerRectifyReviewReq req) { + Long id = req.getId(); + String reviewStatus = req.getReviewStatus(); + Long rectifyUserId = req.getRectifyUserId(); + if (!reviewStatus.equals(HseSafetyInspectionReviewTypeEnum.PASS.getValue()) + && !reviewStatus.equals(HseSafetyInspectionReviewTypeEnum.UNPASS.getValue())) { + throw new ServiceException("请选择复查状态"); + } + HazardHiddenDanger hiddenDanger = hazardHiddenDangerService.getById(id); + if (hiddenDanger == null) { + throw new ServiceException("未找到该数据"); + } + HazardHiddenDangerRectify oldRectify = this.lambdaQuery() + .eq(HazardHiddenDangerRectify::getHiddenDangerId, id) + .orderByDesc(HazardHiddenDangerRectify::getRectifyCount) + .last("limit 1") + .one(); + Long rectifyId = oldRectify.getId(); + Long userId = LoginHelper.getUserId(); + // todo 待完善 +/* if (!oldRectify.getReviewUserId().equals(userId)) { + throw new ServiceException("您没有权限审核该数据"); + }*/ + LocalDateTime now = LocalDateTime.now(); + HazardHiddenDangerRectify rectify = new HazardHiddenDangerRectify(); + String reviewDesc = req.getReviewDesc(); + String reviewFiles = req.getReviewFiles(); + BeanUtils.copyProperties(req, rectify); + rectify.setId(rectifyId); + rectify.setReviewDesc(reviewDesc); + rectify.setReviewFiles(reviewFiles); + rectify.setReviewStatus(reviewStatus); + rectify.setReviewTime(now); + synchronized (("hd_" + id).intern()) { + boolean update = this.updateById(rectify); + if (!update) { + throw new ServiceException("数据修改失败"); + } + // 修改隐患状态 + if (reviewStatus.equals(HseSafetyInspectionReviewTypeEnum.PASS.getValue())) { + // 修改状态 + hiddenDanger.setStatus(HazardHiddenDanger.CLOSED); + } else { + LocalDateTime rectificationDeadline = req.getRectificationDeadline(); + if (rectificationDeadline == null) { + throw new ServiceException("请选择整改期限"); + } + if (rectificationDeadline.isBefore(now)) { + throw new ServiceException("整改期限不能小于当前时间"); + } + // 修改状态 + hiddenDanger.setStatus(HazardHiddenDanger.RECTIFY); + // 设置新的整改期限 + hiddenDanger.setRectifyTime(rectificationDeadline); + // 生成新的整改 + HazardHiddenDangerRectify newRectify = new HazardHiddenDangerRectify(); + newRectify.setHiddenDangerId(id); + newRectify.setRectifyCount(oldRectify.getRectifyCount() + 1); + newRectify.setReviewUserId(rectify.getReviewUserId()); + newRectify.setRectifyUserId(rectifyUserId != null ? rectifyUserId : oldRectify.getRectifyUserId()); + newRectify.setRectifyDeadline(rectificationDeadline); + boolean save = this.save(newRectify); + if (!save) { + throw new ServiceException("数据保存失败"); + } + } + boolean update1 = hazardHiddenDangerService.updateById(hiddenDanger); + if (!update1) { + throw new ServiceException("数据修改失败"); + } + return true; + } + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HazardHiddenDangerRectify entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除隐患整改情况信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + /** + * 发送超时通知 + * + * @param bizId 业务id + */ + @Override + public void sendTimeoutNotify(Long bizId) { + HazardHiddenDanger hiddenDanger = hazardHiddenDangerService.getById(bizId); + if (hiddenDanger == null) { + throw new ServiceException("未找到该数据"); + } + if (!HazardHiddenDanger.RECTIFY.equals(hiddenDanger.getStatus())) { + return; + } + // 隐患等级 + HazardRule rule = hazardRuleService.getById(hiddenDanger.getDangerLevelId()); + String notifyMethod = rule.getNotifyMethod(); + if (notifyMethod.equals("1")) { + // 通知领导 + } else { + // 发送消息 + String dangerCode = hiddenDanger.getDangerCode(); + Long rectifyUserId = hiddenDanger.getRectifyUserId(); + Long projectId = hiddenDanger.getProjectId(); + String titleRectify = "您的安全隐患工单[" + dangerCode + "]已超时,请及时处理!"; + try { + chatServerHandler.sendSystemMessageToUser(rectifyUserId, titleRectify, "2"); + SseMessageUtils.sendMessage(rectifyUserId, titleRectify); + } catch (Exception e) { + log.error("异步发送系统消息失败,用户ID: {}, 消息: {}", rectifyUserId, titleRectify, e); + } + // 发送给需要通知的对象 + Set userIds = hazardRuleNotifyObjectService.queryNotifyObjectIds(hiddenDanger.getDangerLevelId(), projectId); + SseMessageDto sseDto = new SseMessageDto(); + String title = "安全隐患工单[" + dangerCode + "]未进行整改,请及时关注!"; + for (Long userId : userIds) { + try { + chatServerHandler.sendSystemMessageToUser(userId, title, "2"); + } catch (Exception e) { + log.error("异步发送系统消息失败,用户ID: {}, 消息: {}", userId, title, e); + } + } + sseDto.setUserIds(userIds.stream().toList()); + sseDto.setMessage(title); + sseDto.setRoute(""); + sseDto.setProjectId(projectId); + sseDto.setIsRecord(true); + SseMessageUtils.publishMessage(sseDto); + // 重复整改 + if (notifyMethod.equals("2")) { + // 获取通知时间 + LocalDateTime executeTime = LocalDateTime.now(); + String responseUnit = rule.getResponseUnit(); + switch (responseUnit) { + case "3" -> executeTime = executeTime.plusDays(rule.getResponseTime()); + case "2" -> executeTime = executeTime.plusHours(rule.getResponseTime()); + case "1" -> executeTime = executeTime.plusMinutes(rule.getResponseTime()); + } + // 发送整改期限数据到消息队列 + MqDelayTask task = new MqDelayTask(); + task.setBizType(MqDelayTaskTypeEnum.HIDDEN_DANGER.getType()); + task.setBizId(bizId); + task.setExecuteTime(executeTime); + try { + mqDelayTaskService.addDelayTask(task); + } catch (Exception e) { + log.error("添加延迟任务失败,延迟任务: {}", task, e); + throw new ServiceException("添加延迟任务失败"); + } + } + } + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerServiceImpl.java new file mode 100644 index 00000000..4152b2c0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardHiddenDangerServiceImpl.java @@ -0,0 +1,306 @@ +package org.dromara.safety.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.sse.dto.SseMessageDto; +import org.dromara.common.sse.utils.SseMessageUtils; +import org.dromara.rabbitmq.domain.MqDelayTask; +import org.dromara.rabbitmq.enums.MqDelayTaskTypeEnum; +import org.dromara.rabbitmq.service.IMqDelayTaskService; +import org.dromara.safety.domain.HazardHiddenDanger; +import org.dromara.safety.domain.HazardHiddenDangerRectify; +import org.dromara.safety.domain.HazardRule; +import org.dromara.safety.domain.bo.HazardHiddenDangerBo; +import org.dromara.safety.domain.dto.EvaluateDto; +import org.dromara.safety.domain.vo.HazardHiddenDangerRectifyVo; +import org.dromara.safety.domain.vo.HazardHiddenDangerVo; +import org.dromara.safety.domain.vo.HiddenDangerCountVo; +import org.dromara.safety.mapper.HazardHiddenDangerMapper; +import org.dromara.safety.mapper.HazardHiddenDangerRectifyMapper; +import org.dromara.safety.service.IHazardHiddenDangerService; +import org.dromara.safety.service.IHazardRuleNotifyObjectService; +import org.dromara.safety.service.IHazardRuleService; +import org.dromara.websocket.ChatServerHandler; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.CompletableFuture; + +/** + * 隐患信息Service业务层处理 + * + * @author Lion Li + * @date 2025-12-03 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class HazardHiddenDangerServiceImpl extends ServiceImpl + implements IHazardHiddenDangerService { + + private final HazardHiddenDangerMapper baseMapper; + + private final IHazardRuleService hazardRuleService; + + private final HazardHiddenDangerRectifyMapper hazardHiddenDangerRectifyMapper; + + private final IHazardRuleNotifyObjectService hazardRuleNotifyObjectService; + + private final ChatServerHandler chatServerHandler; + + private final IMqDelayTaskService mqDelayTaskService; + + /** + * 查询隐患信息 + * + * @param id 主键 + * @return 隐患信息 + */ + @Override + public HazardHiddenDangerVo queryById(Long id) { + HazardHiddenDangerVo dangerVo = baseMapper.selectVoById(id); + if (dangerVo == null) { + throw new ServiceException("未找到该数据"); + } + List dangerRectifyVos = hazardHiddenDangerRectifyMapper.selectVoList(new LambdaQueryWrapper<>(HazardHiddenDangerRectify.class) + .eq(HazardHiddenDangerRectify::getHiddenDangerId, id) + .orderByAsc(HazardHiddenDangerRectify::getRectifyCount)); + dangerVo.setRectifyList(dangerRectifyVos); + return dangerVo; + } + + /** + * 分页查询隐患信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 隐患信息分页列表 + */ + @Override + public TableDataInfo queryPageList(HazardHiddenDangerBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 分页查询隐患信息列表 + * + * @param lqw 查询条件 + * @param pageQuery 分页参数 + * @return 隐患信息分页列表 + */ + @Override + public TableDataInfo queryPageList(LambdaQueryWrapper lqw, PageQuery pageQuery) { + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的隐患信息列表 + * + * @param bo 查询条件 + * @return 隐患信息列表 + */ + @Override + public List queryList(HazardHiddenDangerBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + /** + * 构建查询条件 + * + * @param bo 查询条件 + * @return 查询条件 + */ + @Override + public LambdaQueryWrapper buildQueryWrapper(HazardHiddenDangerBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HazardHiddenDanger::getId); + lqw.eq(bo.getProjectId() != null, HazardHiddenDanger::getProjectId, bo.getProjectId()); + lqw.eq(StringUtils.isNotBlank(bo.getDangerType()), HazardHiddenDanger::getDangerType, bo.getDangerType()); + lqw.eq(StringUtils.isNotBlank(bo.getDangerCode()), HazardHiddenDanger::getDangerCode, bo.getDangerCode()); + lqw.like(StringUtils.isNotBlank(bo.getDangerName()), HazardHiddenDanger::getDangerName, bo.getDangerName()); + lqw.eq(StringUtils.isNotBlank(bo.getReportLocation()), HazardHiddenDanger::getReportLocation, bo.getReportLocation()); + lqw.eq(bo.getReporter() != null, HazardHiddenDanger::getReporter, bo.getReporter()); + lqw.eq(bo.getReportTime() != null, HazardHiddenDanger::getReportTime, bo.getReportTime()); + lqw.eq(bo.getDangerLevelId() != null, HazardHiddenDanger::getDangerLevelId, bo.getDangerLevelId()); + lqw.eq(bo.getEvaluator() != null, HazardHiddenDanger::getEvaluator, bo.getEvaluator()); + lqw.eq(bo.getEvaluateTime() != null, HazardHiddenDanger::getEvaluateTime, bo.getEvaluateTime()); + lqw.eq(StringUtils.isNotBlank(bo.getEvaluateBasis()), HazardHiddenDanger::getEvaluateBasis, bo.getEvaluateBasis()); + lqw.eq(StringUtils.isNotBlank(bo.getReporterOpinion()), HazardHiddenDanger::getReporterOpinion, bo.getReporterOpinion()); + lqw.eq(StringUtils.isNotBlank(bo.getReporterFile()), HazardHiddenDanger::getReporterFile, bo.getReporterFile()); + lqw.eq(bo.getRectifyTime() != null, HazardHiddenDanger::getRectifyTime, bo.getRectifyTime()); + lqw.eq(StringUtils.isNotBlank(bo.getRectifyUnit()), HazardHiddenDanger::getRectifyUnit, bo.getRectifyUnit()); + lqw.eq(bo.getRectifyUnitId() != null, HazardHiddenDanger::getRectifyUnitId, bo.getRectifyUnitId()); + lqw.eq(bo.getRectifyUserId() != null, HazardHiddenDanger::getRectifyUserId, bo.getRectifyUserId()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), HazardHiddenDanger::getStatus, bo.getStatus()); + return lqw; + } + + /** + * 新增隐患信息 + * + * @param bo 隐患信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HazardHiddenDangerBo bo) { + HazardHiddenDanger add = MapstructUtils.convert(bo, HazardHiddenDanger.class); + validEntityBeforeSave(add); + Snowflake snowflake = IdUtil.getSnowflake(1, 1); + long id = snowflake.nextId(); + add.setDangerCode("YH-" + id); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改隐患信息 + * + * @param bo 隐患信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HazardHiddenDangerBo bo) { + HazardHiddenDanger update = MapstructUtils.convert(bo, HazardHiddenDanger.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HazardHiddenDanger 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 HiddenDangerCountVo dangerCount(Long projectId) { + List list = lambdaQuery().eq(HazardHiddenDanger::getProjectId, projectId).list(); + HiddenDangerCountVo count = new HiddenDangerCountVo(); + count.setTotal(list.size()); + count.setWaitEvaluate(list.stream().filter(item -> item.getStatus().equals(HazardHiddenDanger.EVALUATE)).count()); + count.setWaitRectify(list.stream().filter(item -> item.getStatus().equals(HazardHiddenDanger.RECTIFY)).count()); + count.setWaitReview(list.stream().filter(item -> item.getStatus().equals(HazardHiddenDanger.REVIEW)).count()); + count.setClosed(list.stream().filter(item -> item.getStatus().equals(HazardHiddenDanger.CLOSED)).count()); + count.setOverdue(list.stream().filter(item -> item.getRectifyTime() != null && item.getRectifyTime().isBefore(LocalDateTime.now()) + && item.getStatus().equals(HazardHiddenDanger.RECTIFY)).count()); + return count; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean evaluate(EvaluateDto dto) { + HazardHiddenDanger hazardHiddenDanger = baseMapper.selectById(dto.getId()); + BeanUtil.copyProperties(dto, hazardHiddenDanger); + HazardRule byId = hazardRuleService.getById(hazardHiddenDanger.getDangerLevelId()); + String responseUnit = byId.getResponseUnit(); + hazardHiddenDanger.setStatus(HazardHiddenDanger.RECTIFY); + LocalDateTime now = LocalDateTime.now(); + if (responseUnit.equals("3")) { + hazardHiddenDanger.setRectifyTime(now.plusDays(byId.getResponseTime())); + } else if (responseUnit.equals("2")) { + hazardHiddenDanger.setRectifyTime(now.plusHours(byId.getResponseTime())); + } else if (responseUnit.equals("1")) { + hazardHiddenDanger.setRectifyTime(now.plusMinutes(byId.getResponseTime())); + } + LocalDateTime rectifyTime = hazardHiddenDanger.getRectifyTime(); + if (rectifyTime.isBefore(LocalDateTime.now())) { + throw new ServiceException("整改期限不能小于当前时间"); + } + // 修改数据 + if (baseMapper.updateById(hazardHiddenDanger) <= 0) { + throw new ServiceException("数据修改失败"); + } + // 添加整改任务 + Long rectifyUserId = hazardHiddenDanger.getRectifyUserId(); + HazardHiddenDangerRectify rectify = new HazardHiddenDangerRectify(); + rectify.setHiddenDangerId(dto.getId()); + rectify.setRectifyDeadline(rectifyTime); + rectify.setRectifyUserId(rectifyUserId); + rectify.setReviewUserId(hazardHiddenDanger.getEvaluator()); + rectify.setRectifyCount(1); + if (hazardHiddenDangerRectifyMapper.insert(rectify) <= 0) { + throw new ServiceException("数据保存失败"); + } + Long projectId = hazardHiddenDanger.getProjectId(); + String dangerCode = hazardHiddenDanger.getDangerCode(); + // 通知对应人员 + CompletableFuture.runAsync(() -> { + // 发送给整改人员 + String titleRectify = "您有新的安全隐患工单[" + dangerCode + "]需要整改,请及时处理!"; + try { + chatServerHandler.sendSystemMessageToUser(rectifyUserId, titleRectify, "2"); + SseMessageUtils.sendMessage(rectifyUserId, titleRectify); + } catch (Exception e) { + log.error("异步发送系统消息失败,用户ID: {}, 消息: {}", rectifyUserId, titleRectify, e); + } + // 发送给需要通知的对象 + Set userIds = hazardRuleNotifyObjectService.queryNotifyObjectIds(hazardHiddenDanger.getDangerLevelId(), projectId); + SseMessageDto sseDto = new SseMessageDto(); + String title = "您有新的安全隐患工单[" + dangerCode + "],请及时查看!"; + for (Long userId : userIds) { + try { + chatServerHandler.sendSystemMessageToUser(userId, title, "2"); + } catch (Exception e) { + log.error("异步发送系统消息失败,用户ID: {}, 消息: {}", userId, title, e); + } + } + sseDto.setUserIds(userIds.stream().toList()); + sseDto.setMessage(title); + sseDto.setRoute(""); + sseDto.setProjectId(projectId); + sseDto.setIsRecord(true); + SseMessageUtils.publishMessage(sseDto); + // 发送整改期限数据到消息队列 + MqDelayTask task = new MqDelayTask(); + task.setBizType(MqDelayTaskTypeEnum.HIDDEN_DANGER.getType()); + task.setBizId(dto.getId()); + task.setExecuteTime(rectifyTime); + try { + mqDelayTaskService.addDelayTask(task); + } catch (Exception e) { + log.error("添加延迟任务失败,延迟任务: {}", task, e); + } + }); + return true; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardRuleNotifyObjectServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardRuleNotifyObjectServiceImpl.java new file mode 100644 index 00000000..f5baf6ef --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardRuleNotifyObjectServiceImpl.java @@ -0,0 +1,205 @@ +package org.dromara.safety.service.impl; + +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; +import org.dromara.safety.domain.HazardRuleNotifyObject; +import org.dromara.safety.domain.vo.HazardRuleNotifyObjectVo; +import org.dromara.safety.domain.vo.HazardRuleVo; +import org.dromara.safety.mapper.HazardRuleNotifyObjectMapper; +import org.dromara.safety.service.IHazardRuleNotifyObjectService; +import org.dromara.system.domain.SysUser; +import org.dromara.system.domain.vo.SysDeptVo; +import org.dromara.system.domain.vo.SysPostVo; +import org.dromara.system.domain.vo.SysRoleVo; +import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.service.ISysDeptService; +import org.dromara.system.service.ISysPostService; +import org.dromara.system.service.ISysRoleService; +import org.dromara.system.service.ISysUserService; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 隐患规则通知对象Service业务层处理 + * + * @author lilemy + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class HazardRuleNotifyObjectServiceImpl extends ServiceImpl + implements IHazardRuleNotifyObjectService { + + private final ISysUserService userService; + + private final ISysRoleService roleService; + + private final ISysDeptService deptService; + + private final ISysPostService postService; + + /** + * 根据规则查询通知对象 + * + * @param ruleId 规则id + * @return 通知对象 + */ + @Override + public List queryVoByRule(Long ruleId) { + List objectList = this.lambdaQuery() + .eq(HazardRuleNotifyObject::getRuleId, ruleId) + .list(); + return this.queryVo(objectList); + } + + /** + * 根据对象列表查询对象列表 + * + * @param objectList 对象列表 + * @return 对象列表 + */ + @Override + public List queryVo(List objectList) { + List voList = new ArrayList<>(); + Map> map = objectList.stream() + .collect(Collectors.groupingBy(HazardRuleNotifyObject::getNotifyType)); + for (Map.Entry> entry : map.entrySet()) { + String key = entry.getKey(); + List value = entry.getValue(); + List ids = value.stream() + .map(HazardRuleNotifyObject::getNotifyId) + .toList(); + switch (key) { + case "1" -> { + List userVos = userService.selectUserByIds(ids, null); + Map userNameMap = userVos.stream() + .collect(Collectors.toMap(SysUserVo::getUserId, SysUserVo::getNickName, (k, v) -> k)); + List vos = value.stream().map(v -> { + HazardRuleNotifyObjectVo vo = new HazardRuleNotifyObjectVo(); + vo.setRuleId(v.getRuleId()); + vo.setNotifyId(v.getNotifyId()); + vo.setNotifyName(userNameMap.getOrDefault(v.getNotifyId(), "")); + vo.setNotifyType(key); + return vo; + }).toList(); + voList.addAll(vos); + } + case "2" -> { + List roleVos = roleService.selectRoleByIds(ids); + Map roleNameMap = roleVos.stream() + .collect(Collectors.toMap(SysRoleVo::getRoleId, SysRoleVo::getRoleName, (k, v) -> k)); + List vos = value.stream().map(v -> { + HazardRuleNotifyObjectVo vo = new HazardRuleNotifyObjectVo(); + vo.setRuleId(v.getRuleId()); + vo.setNotifyId(v.getNotifyId()); + vo.setNotifyName(roleNameMap.getOrDefault(v.getNotifyId(), "")); + vo.setNotifyType(key); + return vo; + }).toList(); + voList.addAll(vos); + } + case "3" -> { + List deptVos = deptService.selectDeptByIds(ids); + Map deptNameMap = deptVos.stream() + .collect(Collectors.toMap(SysDeptVo::getDeptId, SysDeptVo::getDeptName, (k, v) -> k)); + List vos = value.stream().map(v -> { + HazardRuleNotifyObjectVo vo = new HazardRuleNotifyObjectVo(); + vo.setRuleId(v.getRuleId()); + vo.setNotifyId(v.getNotifyId()); + vo.setNotifyName(deptNameMap.getOrDefault(v.getNotifyId(), "")); + vo.setNotifyType(key); + return vo; + }).toList(); + voList.addAll(vos); + } + case "4" -> { + List postVos = postService.selectPostByIds(ids); + Map postNameMap = postVos.stream() + .collect(Collectors.toMap(SysPostVo::getPostId, SysPostVo::getPostName, (k, v) -> k)); + List vos = value.stream().map(v -> { + HazardRuleNotifyObjectVo vo = new HazardRuleNotifyObjectVo(); + vo.setRuleId(v.getRuleId()); + vo.setNotifyId(v.getNotifyId()); + vo.setNotifyName(postNameMap.getOrDefault(v.getNotifyId(), "")); + vo.setNotifyType(key); + return vo; + }).toList(); + voList.addAll(vos); + } + } + } + return voList; + } + + /** + * 根据规则查询所有通知对象id + * + * @param ruleId 规则id + * @param projectId 项目id + * @return 通知对象id + */ + @Override + public Set queryNotifyObjectIds(Long ruleId, Long projectId) { + List objectList = this.lambdaQuery() + .eq(HazardRuleNotifyObject::getRuleId, ruleId) + .list(); + if (CollUtil.isEmpty(objectList)) { + return Collections.emptySet(); + } + Set userIds = new HashSet<>(); + Map> map = objectList.stream() + .collect(Collectors.groupingBy(HazardRuleNotifyObject::getNotifyType)); + for (Map.Entry> entry : map.entrySet()) { + String key = entry.getKey(); + List value = entry.getValue(); + List ids = value.stream() + .map(HazardRuleNotifyObject::getNotifyId) + .toList(); + switch (key) { + case "1" -> userIds.addAll(ids); + case "2" -> { + List userVos = userService.selectUserByRoleIdsAndProjectId(ids, projectId); + Set userSet = userVos.stream().map(SysUser::getUserId).collect(Collectors.toSet()); + userIds.addAll(userSet); + } + case "3" -> { + List userVos = userService.selectUserListByDeptList(ids); + Set userSet = userVos.stream().map(SysUserVo::getUserId).collect(Collectors.toSet()); + userIds.addAll(userSet); + } + case "4" -> { + List userVos = userService.selectUserListByPostList(ids); + Set userSet = userVos.stream().map(SysUserVo::getUserId).collect(Collectors.toSet()); + userIds.addAll(userSet); + } + } + } + return userIds; + } + + /** + * 补充数据 + * + * @param voList 规则列表 + */ + @Override + public void supplementDataByRule(List voList) { + if (CollUtil.isEmpty(voList)) { + return; + } + List ruleIds = voList.stream().map(HazardRuleVo::getId).toList(); + List objectList = this.lambdaQuery() + .in(HazardRuleNotifyObject::getRuleId, ruleIds) + .list(); + List objectVos = this.queryVo(objectList); + Map> map = objectVos.stream() + .collect(Collectors.groupingBy(HazardRuleNotifyObjectVo::getRuleId)); + for (HazardRuleVo vo : voList) { + List vos = map.get(vo.getId()); + vo.setNotifyObjects(vos); + } + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardRuleServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardRuleServiceImpl.java new file mode 100644 index 00000000..e6d118b0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HazardRuleServiceImpl.java @@ -0,0 +1,221 @@ +package org.dromara.safety.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.annotation.Resource; +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.constant.HttpStatus; +import org.dromara.common.core.exception.ServiceException; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.safety.domain.HazardHiddenDanger; +import org.dromara.safety.domain.HazardRule; +import org.dromara.safety.domain.HazardRuleNotifyObject; +import org.dromara.safety.domain.bo.HazardRuleBo; +import org.dromara.safety.domain.bo.HazardRuleNotifyObjectBo; +import org.dromara.safety.domain.vo.HazardRuleNotifyObjectVo; +import org.dromara.safety.domain.vo.HazardRuleVo; +import org.dromara.safety.mapper.HazardRuleMapper; +import org.dromara.safety.service.IHazardHiddenDangerService; +import org.dromara.safety.service.IHazardRuleNotifyObjectService; +import org.dromara.safety.service.IHazardRuleService; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Collection; +import java.util.List; + +/** + * 隐患分级通知规则Service业务层处理 + * + * @author lilemy + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class HazardRuleServiceImpl extends ServiceImpl + implements IHazardRuleService { + + private final IHazardRuleNotifyObjectService hazardRuleNotifyObjectService; + + @Lazy + @Resource + private IHazardHiddenDangerService hazardHiddenDangerService; + + /** + * 查询隐患分级通知规则 + * + * @param id 主键 + * @return 隐患分级通知规则 + */ + @Override + public HazardRuleVo queryById(Long id) { + HazardRuleVo hazardRuleVo = baseMapper.selectVoById(id); + List objectVos = hazardRuleNotifyObjectService.queryVoByRule(id); + hazardRuleVo.setNotifyObjects(objectVos); + return hazardRuleVo; + } + + /** + * 分页查询隐患分级通知规则列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 隐患分级通知规则分页列表 + */ + @Override + public TableDataInfo queryPageList(HazardRuleBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + hazardRuleNotifyObjectService.supplementDataByRule(result.getRecords()); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的隐患分级通知规则列表 + * + * @param bo 查询条件 + * @return 隐患分级通知规则列表 + */ + @Override + public List queryList(HazardRuleBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HazardRuleBo bo) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HazardRule::getId); + lqw.eq(bo.getProjectId() != null, HazardRule::getProjectId, bo.getProjectId()); + lqw.like(StringUtils.isNotBlank(bo.getHazardLevel()), HazardRule::getHazardLevel, bo.getHazardLevel()); + lqw.eq(bo.getHazardWeight() != null, HazardRule::getHazardWeight, bo.getHazardWeight()); + lqw.eq(bo.getResponseTime() != null, HazardRule::getResponseTime, bo.getResponseTime()); + lqw.eq(StringUtils.isNotBlank(bo.getResponseUnit()), HazardRule::getResponseUnit, bo.getResponseUnit()); + lqw.eq(StringUtils.isNotBlank(bo.getNotifyMethod()), HazardRule::getNotifyMethod, bo.getNotifyMethod()); + lqw.eq(StringUtils.isNotBlank(bo.getTimeoutAction()), HazardRule::getTimeoutAction, bo.getTimeoutAction()); + lqw.eq(StringUtils.isNotBlank(bo.getExtraSetting()), HazardRule::getExtraSetting, bo.getExtraSetting()); + return lqw; + } + + /** + * 新增隐患分级通知规则 + * + * @param bo 隐患分级通知规则 + * @return 是否新增成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HazardRuleBo bo) { + HazardRule add = MapstructUtils.convert(bo, HazardRule.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + List notifyObjects = bo.getNotifyObjects(); + List objectList = notifyObjects.stream().map(item -> { + HazardRuleNotifyObject notifyObject = new HazardRuleNotifyObject(); + notifyObject.setRuleId(add.getId()); + notifyObject.setNotifyId(item.getNotifyId()); + notifyObject.setNotifyType(item.getNotifyType()); + return notifyObject; + }).toList(); + boolean b = hazardRuleNotifyObjectService.saveBatch(objectList); + if (!b) { + throw new ServiceException("数据库操作失败", HttpStatus.ERROR); + } + } + return flag; + } + + /** + * 修改隐患分级通知规则 + * + * @param bo 隐患分级通知规则 + * @return 是否修改成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(HazardRuleBo bo) { + HazardRule oldRule = this.getById(bo.getId()); + if (oldRule == null) { + throw new ServiceException("数据不存在", HttpStatus.ERROR); + } + HazardRule update = MapstructUtils.convert(bo, HazardRule.class); + validEntityBeforeSave(update); + boolean b = baseMapper.updateById(update) > 0; + if (b) { + // 旧通知对象 + boolean remove = hazardRuleNotifyObjectService.remove(new LambdaQueryWrapper() + .eq(HazardRuleNotifyObject::getRuleId, bo.getId())); + if (!remove) { + throw new ServiceException("数据库操作失败", HttpStatus.ERROR); + } + // 新通知对象 + List notifyObjects = bo.getNotifyObjects(); + List objectList = notifyObjects.stream().map(item -> { + HazardRuleNotifyObject notifyObject = new HazardRuleNotifyObject(); + notifyObject.setRuleId(bo.getId()); + notifyObject.setNotifyId(item.getNotifyId()); + notifyObject.setNotifyType(item.getNotifyType()); + return notifyObject; + }).toList(); + boolean b1 = hazardRuleNotifyObjectService.saveBatch(objectList); + if (!b1) { + throw new ServiceException("数据库操作失败", HttpStatus.ERROR); + } + } + return b; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HazardRule entity) { + //TODO 做一些数据校验,如唯一约束 + Long id = entity.getId(); + Long projectId = entity.getProjectId(); + Integer hazardWeight = entity.getHazardWeight(); + String hazardLevel = entity.getHazardLevel(); + Long count = this.lambdaQuery() + .ne(id != null, HazardRule::getId, id) + .eq(HazardRule::getHazardWeight, hazardWeight) + .eq(HazardRule::getProjectId, projectId) + .count(); + if (count > 0) { + throw new ServiceException("权重已存在", HttpStatus.ERROR); + } + Long count1 = this.lambdaQuery() + .ne(id != null, HazardRule::getId, id) + .eq(HazardRule::getHazardLevel, hazardLevel) + .eq(HazardRule::getProjectId, projectId) + .count(); + if (count1 > 0) { + throw new ServiceException("等级已存在", HttpStatus.ERROR); + } + } + + /** + * 校验并批量删除隐患分级通知规则信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + if (hazardHiddenDangerService.lambdaQuery() + .in(HazardHiddenDanger::getDangerLevelId, ids) + .count() > 0) { + throw new ServiceException("请先删除该等级下的隐患信息", HttpStatus.ERROR); + } + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseDangerArchiveServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseDangerArchiveServiceImpl.java new file mode 100644 index 00000000..d65c69af --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseDangerArchiveServiceImpl.java @@ -0,0 +1,223 @@ +package org.dromara.safety.service.impl; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.dromara.common.core.exception.ServiceException; +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.safety.domain.HseDangerousEngineering; +import org.dromara.safety.domain.vo.HseDangerArchiveCountVo; +import org.dromara.safety.service.IHseDangerousEngineeringService; +import org.dromara.safety.domain.vo.HseJsjdYuJkjcVo; +import org.dromara.safety.gcjkjl.domain.HseGcjk; +import org.dromara.safety.gcjkjl.service.IHseGcjkService; +import org.dromara.safety.jsjd.domain.HseJsjd; +import org.dromara.safety.jsjd.service.IHseJsjdService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.dromara.safety.domain.bo.HseDangerArchiveBo; +import org.dromara.safety.domain.vo.HseDangerArchiveVo; +import org.dromara.safety.domain.HseDangerArchive; +import org.dromara.safety.mapper.HseDangerArchiveMapper; +import org.dromara.safety.service.IHseDangerArchiveService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 危大工程档案Service业务层处理 + * + * @author Lion Li + * @date 2025-12-06 + */ +@RequiredArgsConstructor +@Service +public class HseDangerArchiveServiceImpl extends ServiceImpl implements IHseDangerArchiveService { + + private final HseDangerArchiveMapper baseMapper; + + private final IHseDangerousEngineeringService hseDangerousEngineeringService; + + @Autowired + @Lazy + private IHseGcjkService hseGcjkService; + + @Autowired + @Lazy + private final IHseJsjdService hseJsjdService; + + /** + * 查询危大工程档案 + * + * @param id 主键 + * @return 危大工程档案 + */ + @Override + public HseDangerArchiveVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询危大工程档案列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 危大工程档案分页列表 + */ + @Override + public TableDataInfo queryPageList(HseDangerArchiveBo 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(HseDangerArchiveBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseDangerArchiveBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HseDangerArchive::getId); + lqw.eq(bo.getProjectId() != null, HseDangerArchive::getProjectId, bo.getProjectId()); + lqw.eq(StringUtils.isNotBlank(bo.getArchiveNo()), HseDangerArchive::getArchiveNo, bo.getArchiveNo()); + lqw.eq(bo.getDeId() != null, HseDangerArchive::getDeId, bo.getDeId()); + lqw.like(StringUtils.isNotBlank(bo.getDeName()), HseDangerArchive::getDeName, bo.getDeName()); + lqw.eq(StringUtils.isNotBlank(bo.getArchiveCategory()), HseDangerArchive::getArchiveCategory, bo.getArchiveCategory()); + lqw.eq(bo.getArchiveDate() != null, HseDangerArchive::getArchiveDate, bo.getArchiveDate()); + lqw.eq(StringUtils.isNotBlank(bo.getArchiver()), HseDangerArchive::getArchiver, bo.getArchiver()); + lqw.eq(StringUtils.isNotBlank(bo.getArchiveUnit()), HseDangerArchive::getArchiveUnit, bo.getArchiveUnit()); + lqw.eq(StringUtils.isNotBlank(bo.getRiskLevel()), HseDangerArchive::getRiskLevel, bo.getRiskLevel()); + lqw.eq(StringUtils.isNotBlank(bo.getConstructionUnit()), HseDangerArchive::getConstructionUnit, bo.getConstructionUnit()); + lqw.eq(StringUtils.isNotBlank(bo.getSection()), HseDangerArchive::getSection, bo.getSection()); + lqw.eq(StringUtils.isNotBlank(bo.getArchiveKeywords()), HseDangerArchive::getArchiveKeywords, bo.getArchiveKeywords()); + lqw.eq(StringUtils.isNotBlank(bo.getFinalPlanFile()), HseDangerArchive::getFinalPlanFile, bo.getFinalPlanFile()); + lqw.eq(StringUtils.isNotBlank(bo.getExpertArgumentFile()), HseDangerArchive::getExpertArgumentFile, bo.getExpertArgumentFile()); + lqw.eq(StringUtils.isNotBlank(bo.getTechnicalFile()), HseDangerArchive::getTechnicalFile, bo.getTechnicalFile()); + lqw.eq(StringUtils.isNotBlank(bo.getSupervisionRecordFile()), HseDangerArchive::getSupervisionRecordFile, bo.getSupervisionRecordFile()); + lqw.eq(StringUtils.isNotBlank(bo.getMonitoringLogFile()), HseDangerArchive::getMonitoringLogFile, bo.getMonitoringLogFile()); + lqw.eq(StringUtils.isNotBlank(bo.getAcceptanceCertificateFile()), HseDangerArchive::getAcceptanceCertificateFile, bo.getAcceptanceCertificateFile()); + lqw.eq(StringUtils.isNotBlank(bo.getConstructionMediaFile()), HseDangerArchive::getConstructionMediaFile, bo.getConstructionMediaFile()); + return lqw; + } + + /** + * 新增危大工程档案 + * + * @param bo 危大工程档案 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HseDangerArchiveBo bo) { + HseDangerArchive add = MapstructUtils.convert(bo, HseDangerArchive.class); + validEntityBeforeSave(add); + Snowflake snowflake = IdUtil.getSnowflake(1, 1); + long id = snowflake.nextId(); + add.setArchiveNo("DA-"+id); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改危大工程档案 + * + * @param bo 危大工程档案 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HseDangerArchiveBo bo) { + HseDangerArchive update = MapstructUtils.convert(bo, HseDangerArchive.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HseDangerArchive entity){ + boolean exists = lambdaQuery().eq(HseDangerArchive::getDeId, entity.getDeId()) + .ne(entity.getId() != null, HseDangerArchive::getId, entity.getId()) + .exists(); + if (exists) { + throw new ServiceException("该工程已归档"); + } + } + + /** + * 校验并批量删除危大工程档案信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public HseDangerArchiveCountVo count(Long projectId) { + HseDangerArchiveCountVo hseDangerArchiveCountVo = new HseDangerArchiveCountVo(); + List list = hseDangerousEngineeringService.lambdaQuery() + .eq(HseDangerousEngineering::getProjectId, projectId) + .list(); + hseDangerArchiveCountVo.setTotal(list.size()); + hseDangerArchiveCountVo.setMajorRisk(list.stream().filter(item -> "4".equals(item.getRiskLevel())).count()); + List list1 = lambdaQuery().eq(HseDangerArchive::getProjectId, projectId).list(); + hseDangerArchiveCountVo.setArchive(list1.size()); + return hseDangerArchiveCountVo; + } + + @Override + public HseJsjdYuJkjcVo getJsjdYGcjk(Long id) { + HseJsjdYuJkjcVo hseJsjdYuJkjcVo = new HseJsjdYuJkjcVo(); + if (id == null) throw new RuntimeException("危大工程不能为空"); + //技术交底 + HseJsjd hseGcjk = hseJsjdService.getBaseMapper().selectOne(new LambdaQueryWrapper().eq(org.dromara.safety.jsjd.domain.HseJsjd::getMasterId, id)); + if (hseGcjk != null){ + hseJsjdYuJkjcVo.setJsjdFile(hseGcjk.getFileId()); + } + + //过程监控 + List hseJsjds = hseGcjkService.getBaseMapper().selectList(new LambdaQueryWrapper().eq(HseGcjk::getMasterId, id)); + if (hseJsjds != null && hseJsjds.size() != 0){ + StringBuffer stringBuffer = new StringBuffer(); + StringBuffer sb = new StringBuffer(); + hseJsjds.forEach(hseJsjd -> { + if (hseJsjd.getIsOnSiteSupervision().equals("1") && hseJsjd.getSupervisionJl() != null) { + sb.append(hseJsjd.getSupervisionJl()).append(","); + } + if (hseJsjd.getFileId() != null) { + stringBuffer.append(hseJsjd.getFileId()).append(","); + } + }); + hseJsjdYuJkjcVo.setGcjkFile(stringBuffer.toString()); + hseJsjdYuJkjcVo.setPzjtFile(sb.toString()); + } + + return hseJsjdYuJkjcVo; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseDangerousEngineeringServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseDangerousEngineeringServiceImpl.java new file mode 100644 index 00000000..a87afeed --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseDangerousEngineeringServiceImpl.java @@ -0,0 +1,146 @@ +package org.dromara.safety.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.safety.domain.bo.HseDangerousEngineeringBo; +import org.dromara.safety.domain.vo.HseDangerousEngineeringVo; +import org.dromara.safety.domain.HseDangerousEngineering; +import org.dromara.safety.mapper.HseDangerousEngineeringMapper; +import org.dromara.safety.service.IHseDangerousEngineeringService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 危大工程信息Service业务层处理 + * + * @author Lion Li + * @date 2025-12-06 + */ +@RequiredArgsConstructor +@Service +public class HseDangerousEngineeringServiceImpl extends ServiceImpl + implements IHseDangerousEngineeringService { + + private final HseDangerousEngineeringMapper baseMapper; + + /** + * 查询危大工程信息 + * + * @param id 主键 + * @return 危大工程信息 + */ + @Override + public HseDangerousEngineeringVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询危大工程信息列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 危大工程信息分页列表 + */ + @Override + public TableDataInfo queryPageList(HseDangerousEngineeringBo 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(HseDangerousEngineeringBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseDangerousEngineeringBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HseDangerousEngineering::getId); + lqw.eq(bo.getProjectId() != null, HseDangerousEngineering::getProjectId, bo.getProjectId()); + lqw.like(StringUtils.isNotBlank(bo.getDeName()), HseDangerousEngineering::getDeName, bo.getDeName()); + lqw.eq(StringUtils.isNotBlank(bo.getRiskLevel()), HseDangerousEngineering::getRiskLevel, bo.getRiskLevel()); + lqw.eq(StringUtils.isNotBlank(bo.getWorkType()), HseDangerousEngineering::getWorkType, bo.getWorkType()); + lqw.eq(bo.getStartTime() != null, HseDangerousEngineering::getStartTime, bo.getStartTime()); + lqw.eq(bo.getEndTime() != null, HseDangerousEngineering::getEndTime, bo.getEndTime()); + lqw.eq(StringUtils.isNotBlank(bo.getWorkPlace()), HseDangerousEngineering::getWorkPlace, bo.getWorkPlace()); + lqw.eq(bo.getSubcontractorId() != null, HseDangerousEngineering::getSubcontractorId, bo.getSubcontractorId()); + lqw.eq(StringUtils.isNotBlank(bo.getSubcontractor()), HseDangerousEngineering::getSubcontractor, bo.getSubcontractor()); + lqw.eq(bo.getTeamId() != null, HseDangerousEngineering::getTeamId, bo.getTeamId()); + lqw.like(StringUtils.isNotBlank(bo.getTeamName()), HseDangerousEngineering::getTeamName, bo.getTeamName()); + lqw.eq(StringUtils.isNotBlank(bo.getProjectManager()), HseDangerousEngineering::getProjectManager, bo.getProjectManager()); + lqw.eq(StringUtils.isNotBlank(bo.getSiteManager()), HseDangerousEngineering::getSiteManager, bo.getSiteManager()); + lqw.eq(StringUtils.isNotBlank(bo.getEmergencyPhone()), HseDangerousEngineering::getEmergencyPhone, bo.getEmergencyPhone()); + lqw.eq(StringUtils.isNotBlank(bo.getConstructionUnit()), HseDangerousEngineering::getConstructionUnit, bo.getConstructionUnit()); + return lqw; + } + + /** + * 新增危大工程信息 + * + * @param bo 危大工程信息 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HseDangerousEngineeringBo bo) { + HseDangerousEngineering add = MapstructUtils.convert(bo, HseDangerousEngineering.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改危大工程信息 + * + * @param bo 危大工程信息 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HseDangerousEngineeringBo bo) { + HseDangerousEngineering update = MapstructUtils.convert(bo, HseDangerousEngineering.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HseDangerousEngineering 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/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseQuestionUserAnswerServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseQuestionUserAnswerServiceImpl.java index 77bc7338..285421b8 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseQuestionUserAnswerServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseQuestionUserAnswerServiceImpl.java @@ -215,7 +215,7 @@ public class HseQuestionUserAnswerServiceImpl extends ServiceImpl idCardList = tempList.stream().map(HseQuestionUserAnswerUploadTemp::getUserIdCard) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseRewardsPunishmentsServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseRewardsPunishmentsServiceImpl.java new file mode 100644 index 00000000..711e3880 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseRewardsPunishmentsServiceImpl.java @@ -0,0 +1,282 @@ +package org.dromara.safety.service.impl; + +import cn.hutool.core.convert.Convert; +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.domain.event.ProcessDeleteEvent; +import org.dromara.common.core.domain.event.ProcessEvent; +import org.dromara.common.core.domain.event.ProcessTaskEvent; +import org.dromara.common.core.enums.BusinessStatusEnum; +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.design.domain.DesScheme; +import org.dromara.safety.domain.HseRpObject; +import org.dromara.safety.domain.bo.HseRpObjectBo; +import org.dromara.safety.domain.vo.HseRPCountVo; +import org.dromara.safety.domain.vo.HseRpPersonVo; +import org.dromara.safety.service.IHseRpObjectService; +import org.dromara.system.domain.vo.SysDictDataVo; +import org.dromara.system.service.ISysDictTypeService; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Service; +import org.dromara.safety.domain.bo.HseRewardsPunishmentsBo; +import org.dromara.safety.domain.vo.HseRewardsPunishmentsVo; +import org.dromara.safety.domain.HseRewardsPunishments; +import org.dromara.safety.mapper.HseRewardsPunishmentsMapper; +import org.dromara.safety.service.IHseRewardsPunishmentsService; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * 奖惩记录Service业务层处理 + * + * @author Lion Li + * @date 2025-12-04 + */ +@RequiredArgsConstructor +@Service +@Slf4j +public class HseRewardsPunishmentsServiceImpl extends ServiceImpl implements IHseRewardsPunishmentsService { + + private final HseRewardsPunishmentsMapper baseMapper; + + private final IHseRpObjectService rpObjectService; + + private final ISysDictTypeService dictTypeService; + /** + * 查询奖惩记录 + * + * @param id 主键 + * @return 奖惩记录 + */ + @Override + public HseRewardsPunishmentsVo queryById(Long id){ + HseRewardsPunishmentsVo hseRewardsPunishmentsVo = baseMapper.selectVoById(id); + HseRpObjectBo hseRpObjectBo = new HseRpObjectBo(); + hseRpObjectBo.setRpId(id); + List hseRpPersonVos = rpObjectService.queryList(hseRpObjectBo); + hseRewardsPunishmentsVo.setRpObjects(hseRpPersonVos); + return hseRewardsPunishmentsVo; + } + + /** + * 分页查询奖惩记录列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 奖惩记录分页列表 + */ + @Override + public TableDataInfo queryPageList(HseRewardsPunishmentsBo 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(HseRewardsPunishmentsBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseRewardsPunishmentsBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HseRewardsPunishments::getId); + lqw.eq(bo.getProjectId()!=null, HseRewardsPunishments::getProjectId, bo.getProjectId()); + lqw.eq(StringUtils.isNotBlank(bo.getRpCode()), HseRewardsPunishments::getRpCode, bo.getRpCode()); + lqw.eq(StringUtils.isNotBlank(bo.getType()), HseRewardsPunishments::getType, bo.getType()); + lqw.eq(StringUtils.isNotBlank(bo.getCategory()), HseRewardsPunishments::getCategory, bo.getCategory()); + lqw.eq(bo.getAmount() != null, HseRewardsPunishments::getAmount, bo.getAmount()); + lqw.eq(bo.getRelatedWorkId() != null, HseRewardsPunishments::getRelatedWorkId, bo.getRelatedWorkId()); + lqw.eq(bo.getSubmitter() != null, HseRewardsPunishments::getSubmitter, bo.getSubmitter()); + lqw.eq(StringUtils.isNotBlank(bo.getRecipientType()), HseRewardsPunishments::getRecipientType, bo.getRecipientType()); + lqw.eq(StringUtils.isNotBlank(bo.getStatus()), HseRewardsPunishments::getStatus, bo.getStatus()); + lqw.eq(StringUtils.isNotBlank(bo.getReason()), HseRewardsPunishments::getReason, bo.getReason()); + lqw.eq(StringUtils.isNotBlank(bo.getFile()), HseRewardsPunishments::getFile, bo.getFile()); + lqw.between(bo.getStartTime()!=null && bo.getEndTime()!=null, HseRewardsPunishments::getCreateTime, bo.getStartTime(), bo.getEndTime()); + return lqw; + } + + /** + * 新增奖惩记录 + * + * @param bo 奖惩记录 + * @return 是否新增成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(HseRewardsPunishmentsBo bo) { + HseRewardsPunishments add = MapstructUtils.convert(bo, HseRewardsPunishments.class); + validEntityBeforeSave(add); + Snowflake snowflake = IdUtil.getSnowflake(1, 1); + long id = snowflake.nextId(); + add.setRpCode("JC-" + id); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + List hseRpObjects = new ArrayList<>(); + for (HseRpObjectBo item : bo.getRpObjects()) { + HseRpObject hseRpObject = new HseRpObject(); + hseRpObject.setRpId(add.getId()); + hseRpObject.setObjectId(item.getObjectId()); + hseRpObject.setObjectName(item.getObjectName()); + hseRpObject.setAmount(item.getAmount()); + hseRpObjects.add(hseRpObject); + } + if (!hseRpObjects.isEmpty()) { + rpObjectService.saveBatch(hseRpObjects); + } + return flag; + } + + /** + * 修改奖惩记录 + * + * @param bo 奖惩记录 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HseRewardsPunishmentsBo bo) { + HseRewardsPunishments update = MapstructUtils.convert(bo, HseRewardsPunishments.class); + validEntityBeforeSave(update); + rpObjectService.lambdaUpdate().eq(HseRpObject::getRpId, update.getId()).remove(); + List hseRpObjects = new ArrayList<>(); + for (HseRpObjectBo item : bo.getRpObjects()) { + HseRpObject hseRpObject = new HseRpObject(); + hseRpObject.setRpId(update.getId()); + hseRpObject.setObjectId(item.getObjectId()); + hseRpObject.setObjectName(item.getObjectName()); + hseRpObject.setAmount(item.getAmount()); + hseRpObjects.add(hseRpObject); + } + if (!hseRpObjects.isEmpty()) { + rpObjectService.saveBatch(hseRpObjects); + } + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HseRewardsPunishments 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 HseRPCountVo amountCount(Long projectId) { + List list = lambdaQuery().eq(HseRewardsPunishments::getProjectId, projectId).list(); + HseRPCountVo hseRPCountVo = new HseRPCountVo(); + hseRPCountVo.setTotal(list.size()); + hseRPCountVo.setWaitApproval(list.stream().filter(item -> BusinessStatusEnum.WAITING.getStatus().equals(item.getStatus())).count()); + hseRPCountVo.setReward(list.stream().filter(item -> "1".equals(item.getType())).map(HseRewardsPunishments::getAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO)); + hseRPCountVo.setPenalty(list.stream().filter(item -> "2".equals(item.getType())).map(HseRewardsPunishments::getAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO)); + return hseRPCountVo; + } + + @Override + public Map typeCount(Long projectId) { + List list = lambdaQuery().eq(HseRewardsPunishments::getProjectId, projectId).list(); + + // 按category分组并统计数量 + Map categoryCountMap = list.stream() + // 过滤空分类(可选,根据业务需求决定是否保留null分类) + .filter(item -> item.getCategory() != null && !item.getCategory().trim().isEmpty()) + // 分组字段:category,统计方式:计数 + .collect(Collectors.groupingBy( + HseRewardsPunishments::getCategory, // 分组依据 + Collectors.counting() // 统计每个分组的数量 + )); + + List workOrderCategory = dictTypeService.selectDictDataByType("work_order_category"); + Map linkedHashMap = new LinkedHashMap<>(); + for (SysDictDataVo item : workOrderCategory) { + linkedHashMap.put(item.getDictLabel(), categoryCountMap.getOrDefault(item.getDictValue(), 0L)); + } + return linkedHashMap; + } + + /** + * 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等) + * 正常使用只需#processEvent.flowCode=='leave1' + * 示例为了方便则使用startsWith匹配了全部示例key + * + * @param processEvent 参数 + */ + @org.springframework.context.event.EventListener(condition = "#processEvent.flowCode.endsWith('RewardsPunishments')") + public void processHandler(ProcessEvent processEvent) { + log.info("设计方案审核任务执行了{}", processEvent.toString()); + HseRewardsPunishments rewardsPunishments = this.getById(Convert.toLong(processEvent.getBusinessId())); + rewardsPunishments.setStatus(processEvent.getStatus()); + if (processEvent.getSubmit()) { + rewardsPunishments.setStatus(BusinessStatusEnum.WAITING.getStatus()); + } + this.updateById(rewardsPunishments); + + } + + /** + * 执行任务创建监听 + * 示例:也可通过 @EventListener(condition = "#processTaskEvent.flowCode=='leave1'")进行判断 + * 在方法中判断流程节点key + * if ("xxx".equals(processTaskEvent.getNodeCode())) { + * //执行业务逻辑 + * } + * + * @param processTaskEvent 参数 + */ + @org.springframework.context.event.EventListener(condition = "#processTaskEvent.flowCode.endsWith('completeScheme')") + public void processTaskHandler(ProcessTaskEvent processTaskEvent) { + log.info("设计方案审核任务创建了{}", processTaskEvent.toString()); + } + + /** + * 监听删除流程事件 + * 正常使用只需#processDeleteEvent.flowCode=='leave1' + * 示例为了方便则使用startsWith匹配了全部示例key + * + * @param processDeleteEvent 参数 + */ + @EventListener(condition = "#processDeleteEvent.flowCode.endsWith('completeScheme')") + public void processDeleteHandler(ProcessDeleteEvent processDeleteEvent) { + log.info("监听删除流程事件,设计方案审核任务执行了{}", processDeleteEvent.toString()); + } + + + + + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseRpObjectServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseRpObjectServiceImpl.java new file mode 100644 index 00000000..a44a754b --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseRpObjectServiceImpl.java @@ -0,0 +1,134 @@ +package org.dromara.safety.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +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.safety.domain.bo.HseRpObjectBo; +import org.dromara.safety.domain.vo.HseRpPersonVo; +import org.dromara.safety.domain.HseRpObject; +import org.dromara.safety.mapper.HseRpObjectMapper; +import org.dromara.safety.service.IHseRpObjectService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 奖惩对象Service业务层处理 + * + * @author Lion Li + * @date 2025-12-04 + */ +@RequiredArgsConstructor +@Service +public class HseRpObjectServiceImpl extends ServiceImpl implements IHseRpObjectService { + + private final HseRpObjectMapper baseMapper; + + /** + * 查询奖惩对象 + * + * @param id 主键 + * @return 奖惩对象 + */ + @Override + public HseRpPersonVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询奖惩对象列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 奖惩对象分页列表 + */ + @Override + public TableDataInfo queryPageList(HseRpObjectBo 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(HseRpObjectBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseRpObjectBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HseRpObject::getId); + lqw.eq(bo.getRpId() != null, HseRpObject::getRpId, bo.getRpId()); + lqw.eq(bo.getObjectId() != null, HseRpObject::getObjectId, bo.getObjectId()); + lqw.like(StringUtils.isNotBlank(bo.getObjectName()), HseRpObject::getObjectName, bo.getObjectName()); + lqw.eq(bo.getAmount() != null, HseRpObject::getAmount, bo.getAmount()); + return lqw; + } + + /** + * 新增奖惩对象 + * + * @param bo 奖惩对象 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HseRpObjectBo bo) { + HseRpObject add = MapstructUtils.convert(bo, HseRpObject.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改奖惩对象 + * + * @param bo 奖惩对象 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HseRpObjectBo bo) { + HseRpObject update = MapstructUtils.convert(bo, HseRpObject.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HseRpObject 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/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSafetyInspectionServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSafetyInspectionServiceImpl.java index 440fade3..5fc7b752 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSafetyInspectionServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseSafetyInspectionServiceImpl.java @@ -198,7 +198,7 @@ public class HseSafetyInspectionServiceImpl extends ServiceImpl topList = teamMeetings.stream() - .sorted(Comparator.comparing(HseTeamMeeting::getCreateTime).reversed()) + .sorted(Comparator.comparing(HseTeamMeeting::getMeetingDate).reversed()) .limit(Optional.ofNullable(req.getPageSize()).orElse(20)) .toList(); List teamIds = topList.stream().map(HseTeamMeeting::getTeamId).toList(); @@ -224,6 +224,7 @@ public class HseSafetyInspectionServiceImpl extends ServiceImpl passList = safetyInspectionList.stream() + .sorted(Comparator.comparing(HseSafetyInspection::getCheckTime).reversed()) .filter(q -> "1".equals(q.getIsReply())) .filter(q -> !q.getStatus().equals(HseSafetyInspectionStatusEnum.INFORM.getValue())) .toList(); @@ -234,6 +235,7 @@ public class HseSafetyInspectionServiceImpl extends ServiceImpl inspections = safetyInspectionList.stream() // .filter(q -> "2".equals(q.getIsReply())) + .sorted(Comparator.comparing(HseSafetyInspection::getCheckTime).reversed()) .toList() .stream().map(p -> { HseSafetyInspectionGis gis = new HseSafetyInspectionGis(); @@ -393,6 +395,7 @@ public class HseSafetyInspectionServiceImpl extends ServiceImpl + implements IHseSpecialPlanService { + + private final HseSpecialPlanMapper baseMapper; + + + /** + * 查询危大工程专项施工方案 + * + * @param id 主键 + * @return 危大工程专项施工方案 + */ + @Override + public HseSpecialPlanVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 分页查询危大工程专项施工方案列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 危大工程专项施工方案分页列表 + */ + @Override + public TableDataInfo queryPageList(HseSpecialPlanBo 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(HseSpecialPlanBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(HseSpecialPlanBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.orderByDesc(HseSpecialPlan::getId); + lqw.eq(bo.getProjectId() != null, HseSpecialPlan::getProjectId, bo.getProjectId()); + lqw.eq(StringUtils.isNotBlank(bo.getPlanNo()), HseSpecialPlan::getPlanNo, bo.getPlanNo()); + lqw.eq(bo.getDeId() != null, HseSpecialPlan::getDeId, bo.getDeId()); + lqw.like(StringUtils.isNotBlank(bo.getDeName()), HseSpecialPlan::getDeName, bo.getDeName()); + lqw.like(StringUtils.isNotBlank(bo.getPlanName()), HseSpecialPlan::getPlanName, bo.getPlanName()); + lqw.eq(StringUtils.isNotBlank(bo.getPlanCategory()), HseSpecialPlan::getPlanCategory, bo.getPlanCategory()); + lqw.eq(StringUtils.isNotBlank(bo.getCompileUnit()), HseSpecialPlan::getCompileUnit, bo.getCompileUnit()); + lqw.eq(StringUtils.isNotBlank(bo.getCompiler()), HseSpecialPlan::getCompiler, bo.getCompiler()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewer()), HseSpecialPlan::getReviewer, bo.getReviewer()); + lqw.eq(StringUtils.isNotBlank(bo.getApprove()), HseSpecialPlan::getApprove, bo.getApprove()); + lqw.eq(StringUtils.isNotBlank(bo.getConstructionProcess()), HseSpecialPlan::getConstructionProcess, bo.getConstructionProcess()); + lqw.eq(StringUtils.isNotBlank(bo.getConstructionParams()), HseSpecialPlan::getConstructionParams, bo.getConstructionParams()); + lqw.eq(StringUtils.isNotBlank(bo.getPersonnelQualification()), HseSpecialPlan::getPersonnelQualification, bo.getPersonnelQualification()); + lqw.eq(StringUtils.isNotBlank(bo.getConstructionFile()), HseSpecialPlan::getConstructionFile, bo.getConstructionFile()); + lqw.eq(bo.getNeedExpertArgument() != null, HseSpecialPlan::getNeedExpertArgument, bo.getNeedExpertArgument()); + lqw.eq(StringUtils.isNotBlank(bo.getExpertFile()), HseSpecialPlan::getExpertFile, bo.getExpertFile()); + lqw.eq(StringUtils.isNotBlank(bo.getArgumentConclusion()), HseSpecialPlan::getArgumentConclusion, bo.getArgumentConclusion()); + lqw.eq(bo.getArgumentDate() != null, HseSpecialPlan::getArgumentDate, bo.getArgumentDate()); + lqw.eq(StringUtils.isNotBlank(bo.getExpertLeader()), HseSpecialPlan::getExpertLeader, bo.getExpertLeader()); + lqw.eq(bo.getNeedSupervision() != null, HseSpecialPlan::getNeedSupervision, bo.getNeedSupervision()); + lqw.eq(StringUtils.isNotBlank(bo.getSupervisionUnit()), HseSpecialPlan::getSupervisionUnit, bo.getSupervisionUnit()); + lqw.eq(StringUtils.isNotBlank(bo.getSupervisor()), HseSpecialPlan::getSupervisor, bo.getSupervisor()); + lqw.eq(bo.getSupervisionStartTime() != null, HseSpecialPlan::getSupervisionStartTime, bo.getSupervisionStartTime()); + lqw.eq(bo.getSupervisionEndTime() != null, HseSpecialPlan::getSupervisionEndTime, bo.getSupervisionEndTime()); + lqw.eq(StringUtils.isNotBlank(bo.getSupervisionFile()), HseSpecialPlan::getSupervisionFile, bo.getSupervisionFile()); + lqw.eq(bo.getInvolveEmergencyPlan() != null, HseSpecialPlan::getInvolveEmergencyPlan, bo.getInvolveEmergencyPlan()); + lqw.eq(StringUtils.isNotBlank(bo.getEmergencyPlanNo()), HseSpecialPlan::getEmergencyPlanNo, bo.getEmergencyPlanNo()); + lqw.eq(StringUtils.isNotBlank(bo.getReviewRecord()), HseSpecialPlan::getReviewRecord, bo.getReviewRecord()); + lqw.eq(bo.getRecordTime() != null, HseSpecialPlan::getRecordTime, bo.getRecordTime()); + lqw.eq(StringUtils.isNotBlank(bo.getRecordUnit()), HseSpecialPlan::getRecordUnit, bo.getRecordUnit()); + lqw.eq(StringUtils.isNotBlank(bo.getRecordFileNo()), HseSpecialPlan::getRecordFileNo, bo.getRecordFileNo()); + return lqw; + } + + /** + * 新增危大工程专项施工方案 + * + * @param bo 危大工程专项施工方案 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(HseSpecialPlanBo bo) { + HseSpecialPlan add = MapstructUtils.convert(bo, HseSpecialPlan.class); + validEntityBeforeSave(add); + Snowflake snowflake = IdUtil.getSnowflake(1, 1); + long id = snowflake.nextId(); + add.setPlanNo("FA-" + id); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改危大工程专项施工方案 + * + * @param bo 危大工程专项施工方案 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(HseSpecialPlanBo bo) { + HseSpecialPlan update = MapstructUtils.convert(bo, HseSpecialPlan.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(HseSpecialPlan entity){ + boolean exists = lambdaQuery().eq(HseSpecialPlan::getDeId, entity.getDeId()) + .ne(entity.getId() != null, HseSpecialPlan::getId, entity.getId()).exists(); + if (exists) { + throw new ServiceException("该工程已有方案"); + } + } + + /** + * 校验并批量删除危大工程专项施工方案信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } + + @Override + public HseSpecialPlanCountVo count(Long projectId) { + List list = lambdaQuery().eq(HseSpecialPlan::getProjectId, projectId).list(); + HseSpecialPlanCountVo vo = new HseSpecialPlanCountVo(); + vo.setTotal(list.size()); + vo.setNeedExpertArgumentNum(list.stream().filter(item -> item.getNeedExpertArgument() == 1).count()); + vo.setNeedSupervisionNum(list.stream().filter(item -> item.getNeedSupervision() == 1).count()); + return vo; + } + + @Override + public HseSpecialPlanFileVo getFile(Long deId) { + HseSpecialPlan one = lambdaQuery().eq(HseSpecialPlan::getDeId, deId).last("limit 1").one(); + HseSpecialPlanFileVo hseSpecialPlanFileVo = new HseSpecialPlanFileVo(); + if(one != null) { + hseSpecialPlanFileVo.setExpertFile(one.getExpertFile()); + } + return hseSpecialPlanFileVo; + } +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseViolationRecordServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseViolationRecordServiceImpl.java index faad7f7c..05fedc0a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseViolationRecordServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/safety/service/impl/HseViolationRecordServiceImpl.java @@ -21,10 +21,7 @@ import org.dromara.common.sse.dto.SseMessageDto; import org.dromara.common.sse.utils.SseMessageUtils; import org.dromara.project.domain.BusProjectTeamMember; import org.dromara.project.service.IBusProjectTeamMemberService; -import org.dromara.safety.domain.HseRecognizeRecord; -import org.dromara.safety.domain.HseViolationLevel; -import org.dromara.safety.domain.HseViolationLevelRole; -import org.dromara.safety.domain.HseViolationRecord; +import org.dromara.safety.domain.*; import org.dromara.safety.domain.dto.violationrecord.*; import org.dromara.safety.domain.enums.HseSafetyInspectionReviewTypeEnum; import org.dromara.safety.domain.enums.HseSafetyInspectionStatusEnum; @@ -343,6 +340,7 @@ public class HseViolationRecordServiceImpl extends ServiceImpl selectLatestList(HseViolationRecordQueryReq req) { +// LambdaQueryWrapper lqw = this.buildQueryWrapper(req); +// lqw.isNotNull(HseViolationRecord::getJobKey); +// lqw.isNotNull(HseViolationRecord::get); +// baseMapper.selectLatestList(req); +// } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysRole.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysRole.java index 3a7726bb..e5d32aff 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysRole.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysRole.java @@ -41,6 +41,11 @@ public class SysRole extends TenantEntity { */ private String roleKey; + /** + * 角色标识 + */ + private String roleIdentity; + /** * 角色排序 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysRoleBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysRoleBo.java index f3f4ef0e..428b6fa9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysRoleBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysRoleBo.java @@ -47,6 +47,11 @@ public class SysRoleBo extends BaseEntity { @Size(min = 0, max = 100, message = "权限字符长度不能超过{max}个字符") private String roleKey; + /** + * 角色身份 + */ + private String roleIdentity; + /** * 显示顺序 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/ProjectRolesItem.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/ProjectRolesItem.java index 5d8be2a9..5cd3ded1 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/ProjectRolesItem.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/ProjectRolesItem.java @@ -17,4 +17,5 @@ public class ProjectRolesItem { private String dataScope; private String status; private String isSpecial; + private String roleIdentity; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysRoleVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysRoleVo.java index 580a9229..20152355 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysRoleVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysRoleVo.java @@ -126,4 +126,9 @@ public class SysRoleVo implements Serializable { * 角色类型 1-web 2-app */ private String roleSource; + + /** + * 角色身份 + */ + private String roleIdentity; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java index 1f8536f1..3ccc3cb2 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysUserVo.java @@ -12,6 +12,7 @@ import org.dromara.system.domain.SysUser; import java.io.Serial; import java.io.Serializable; +import java.math.BigDecimal; import java.util.Date; import java.util.List; @@ -166,4 +167,45 @@ public class SysUserVo implements Serializable { * 打卡(0启用打卡 1禁止打卡) */ private String clock; + + /** + * 区域 + */ + private String qy; + + /** + * 在线状态 + */ + private String zxzt; + + /** + * 最后定位时间 + */ + private Date zhdwsj; + + /** + * 经度 + */ + private BigDecimal jd; + + /** + * 纬度 + */ + private BigDecimal wd; + + /** + * 工种 + */ + private String gz; + + /** + * 班组 + */ + private String bz; + + /** + * 头像地址 + */ + private String avatarUrl; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java index 82e1b0ee..2d4eaac2 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDeptService.java @@ -1,7 +1,6 @@ package org.dromara.system.service; import cn.hutool.core.lang.tree.Tree; -import org.dromara.system.domain.SysDept; import org.dromara.system.domain.bo.SysDeptBo; import org.dromara.system.domain.vo.SysDeptVo; @@ -60,13 +59,6 @@ public interface ISysDeptService { */ SysDeptVo selectDeptById(Long deptId); - /** - * 根据部门ID获取到顶级部门 - * - * @return 部门信息 - */ - SysDeptBo selectDeptByIdBo(Long deptId); - /** * 根据部门ID查询所属项目ID列表 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysRoleService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysRoleService.java index e791823b..eb9c647b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysRoleService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysRoleService.java @@ -223,4 +223,6 @@ public interface ISysRoleService { List selectRoleIdsByName(String roleName); List selectUserIdsByRoleId(Long roleId); + + void deleteRoleByUserIdAndProjectId(Long userId,Long projectId); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java index c91f9c1f..b0e3e3ed 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysUserService.java @@ -248,6 +248,14 @@ public interface ISysUserService { */ List selectUserListByDept(Long deptId); + /** + * 通过部门id列表查询当前部门所有用户 + * + * @param deptIds 部门id列表 + * @return 列表 + */ + List selectUserListByDeptList(List deptIds); + /** * 通过岗位id列表查询岗位所有用户 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java index 2153b337..0b0ebd47 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDeptServiceImpl.java @@ -35,7 +35,6 @@ import org.dromara.system.mapper.SysPostMapper; import org.dromara.system.mapper.SysRoleMapper; import org.dromara.system.mapper.SysUserMapper; import org.dromara.system.service.ISysDeptService; -import org.dromara.system.service.ISysRoleService; import org.springframework.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.cache.annotation.Caching; @@ -60,8 +59,6 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService { private final SysUserMapper userMapper; private final SysPostMapper postMapper; - private final ISysRoleService roleService; - /** * 查询部门管理数据 * @@ -220,16 +217,6 @@ public class SysDeptServiceImpl implements ISysDeptService, DeptService { return dept; } - /** - * 根据部门ID获取到顶级部门 - * - * @return 部门信息 - */ - @Override - public SysDeptBo selectDeptByIdBo(Long deptId) { - return null; - } - /** * 根据部门ID查询所属项目ID列表 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java index c2d7b418..fce6fc34 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysRoleServiceImpl.java @@ -665,4 +665,12 @@ public class SysRoleServiceImpl implements ISysRoleService, RoleService { public List selectUserIdsByRoleId(Long roleId) { return userRoleMapper.selectUserIdsByRoleId(roleId); } + + @Override + public void deleteRoleByUserIdAndProjectId(Long userId, Long projectId) { + userRoleMapper.delete(Wrappers.lambdaQuery(SysUserRole.class) + .eq(SysUserRole::getUserId, userId) + .eq(SysUserRole::getProjectId, projectId) + ); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index d540863a..1a3059b8 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -839,6 +839,23 @@ public class SysUserServiceImpl implements ISysUserService, UserService { return baseMapper.selectVoList(lqw); } + /** + * 通过部门id列表查询当前部门所有用户 + * + * @param deptIds 部门id列表 + * @return 列表 + */ + @Override + public List selectUserListByDeptList(List deptIds) { + if (CollUtil.isEmpty(deptIds)) { + return List.of(); + } + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.in(SysUser::getDeptId, deptIds); + lqw.orderByAsc(SysUser::getUserId); + return baseMapper.selectVoList(lqw); + } + /** * 通过岗位id列表查询岗位所有用户 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/ChatServerHandler.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/ChatServerHandler.java index 131e39d7..c760d780 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/ChatServerHandler.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/websocket/ChatServerHandler.java @@ -122,16 +122,9 @@ public class ChatServerHandler extends SimpleChannelInboundHandler userIds = new ArrayList<>(); -// //类型转换 -// for (String s : onlineUserList) { -// userIds.add(Long.parseLong(s)); -// } -// List userDTOS = sysUserService.selectListByIds(userIds); //构建各个聊天房间未读 数量 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); @@ -139,12 +132,6 @@ public class ChatServerHandler extends SimpleChannelInboundHandler chatGroups = chatGroupService.list(queryWrapper); boolean isHaveSystemRoom = false; -// //考勤 -// boolean isHaveAttendanceRoom = false; -// //安全 -// boolean isHaveSafeRoom = false; -// //质量 -// boolean isHaveQualityRoom = false; if (chatGroups != null && !chatGroups.isEmpty()) { HashMap roomCounts = new HashMap<>(); for (ChatGroup chatGroup : chatGroups) { @@ -162,15 +149,6 @@ public class ChatServerHandler extends SimpleChannelInboundHandler ONLINE_SESSIONS = new ConcurrentHashMap<>(); + + + // 3. 静态代码块:项目启动时执行(初始化资源、打印启动日志) + static { + // 此处可添加启动时的初始化逻辑(如加载配置、连接外部资源等) + log.info("✅ 人员定位WebSocket 服务端已随项目启动初始化!端点路径:/websocket/rydw"); + } + + private static final String[] TIME_SLOTS = {"06:00", "08:00", "10:00", "12:00", "14:00", "16:00", "18:00"}; + + /** + * 客户端连接时触发(无需手动启动,有客户端连接时自动调用) + */ + @OnOpen + public void onOpen(Session session) { + // 存储新会话 + ONLINE_SESSIONS.put(session.getId(), session); + log.info("📌 客户端连接成功!会话ID:{},当前在线数:{}", session.getId(), ONLINE_SESSIONS.size()); + // 2. 异步获取并推送初始化数据(避免阻塞连接) + CompletableFuture.runAsync(() -> { + /* 解析消息 暂定json字符串 + { + "type": "1", 1表示心跳包 + "projectId":"", 项目id + "fbdwId":"", 分包单位id + "bzId":"", 班组id + "msg": "" + } + */ + try { + //初始化 + Map map; + //连接成功过后 获取当前项目下所有成员最新坐标 + Map> params = session.getRequestParameterMap(); + //项目id + String projectId = null; + List subscriptionIds = params.get("projectId"); + if (subscriptionIds != null && !subscriptionIds.isEmpty()) { + projectId = subscriptionIds.getFirst(); + } + //分包单位id + List fbdwIds = params.get("fbdwId"); + String fbdwId =null; + if (fbdwIds != null && !fbdwIds.isEmpty()) { + fbdwId = fbdwIds.getFirst(); + } + //班组id + String bzId = null; + List bzIds = params.get("bzId"); + if (bzIds != null && !bzIds.isEmpty()) { + bzId = bzIds.getFirst(); + } + map = getData(projectId, fbdwId, bzId); + + session.getBasicRemote().sendText(JSON.toJSONString(map)); + } catch (Exception e) { + log.error("会话[{}]初始化数据处理失败", session.getId(), e); + } + }); + } + + /** + * 接收客户端消息 + */ + @OnMessage + public void onMessage(String message, Session session) { + log.info("📥 收到会话[{}]消息:{}", session.getId(), message); + // 可选:回复客户端(示例) + try { + /* 解析消息 暂定json字符串 + { + "type": "1", 1表示心跳包 + "projectId":"", 项目id + "fbdwId":"", 分包单位id + "bzId":"", 班组id + "msg": "" + } + */ + JSONObject jsonObject = JSON.parseObject(message); + if (jsonObject.get("type").equals("1")){ + if (jsonObject.get("projectId") != null){ + //分包单位id + String fbdwId = null; + if (jsonObject.get("fbdwId") != null) { + fbdwId = jsonObject.get("fbdwId").toString(); + } + //班组id + String bzId = null; + if (jsonObject.get("bzId") != null) { + bzId = jsonObject.get("bzId").toString(); + } + Map objectMap = getData(jsonObject.get("projectId").toString(), fbdwId, bzId); + session.getBasicRemote().sendText(JSON.toJSONString(objectMap)); + } + } +// session.getBasicRemote().sendText("服务端已收到消息:" + message); + } catch (IOException e) { + log.error("📤 回复会话[{}]失败:{}", session.getId(), e.getMessage()); + } + } + + /** + * 客户端断开连接 + */ + @OnClose + public void onClose(Session session, CloseReason reason) { + ONLINE_SESSIONS.remove(session.getId()); + log.info("🔌 客户端断开连接!会话ID:{},原因:{},当前在线数:{}", + session.getId(), reason.getReasonPhrase(), ONLINE_SESSIONS.size()); + } + + /** + * 连接异常 + */ + @OnError + public void onError(Session session, Throwable error) { + log.error("⚠️ 会话[{}]异常:{}", session.getId(), error.getMessage(), error); + } + + // ------------------------------ 工具方法(可选,供其他服务调用) ------------------------------ + /** + * 向所有在线客户端发送消息(项目启动后,其他服务可直接调用) + */ + public static void sendToAll(String message) { + if (ONLINE_SESSIONS.isEmpty()) { + log.warn("⚠️ 无在线客户端,无需发送消息"); + return; + } + ONLINE_SESSIONS.values().forEach(session -> { + if (session.isOpen()) { + try { + session.getBasicRemote().sendText(message); + } catch (IOException e) { + log.error("📤 向会话[{}]发送消息失败:{}", session.getId(), e.getMessage()); + } + } + }); + } + + /** + * 获取当前在线数(供外部查询) + */ + public static int getOnlineCount() { + return ONLINE_SESSIONS.size(); + } + + /** + * 获取数据 用于首次和心跳 + */ + public Map getData(String projectId,String fbdwId,String bzId){ + Map map = new HashMap<>(); + if (projectId != null && !projectId.isEmpty()){ + // 获取当天结束时间 + LocalDate today = LocalDate.now(); + LocalDateTime endOfDay = LocalDateTime.of(today, LocalTime.MAX); // 23:59:59.999999999 + long expireAt = endOfDay.atZone(ZoneId.systemDefault()).toEpochSecond(); + // 计算剩余秒数 + long now = System.currentTimeMillis() / 1000; + long expireSeconds = expireAt - now; + //拿到项目下所有人员 + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SubConstructionUser::getProjectId, projectId); + queryWrapper.eq(StringUtils.isNotBlank(fbdwId), SubConstructionUser::getContractorId, fbdwId); + queryWrapper.eq(StringUtils.isNotBlank(bzId), SubConstructionUser::getTeamId, bzId); + List persons = subConstructionUserService.list(queryWrapper); + //获取此项目打卡范围 + LambdaQueryWrapper busProjectPunchrangeLambdaQueryWrapper = new LambdaQueryWrapper<>(); + busProjectPunchrangeLambdaQueryWrapper.eq(BusProjectPunchrange::getProjectId, projectId); + List busProjectPunchranges = busProjectPunchrangeService.list(busProjectPunchrangeLambdaQueryWrapper); + //获取班组列表 + List bzList = busProjectTeamService.list(); + //通过打卡范围构建下方统计数据 + List> allValue = new ArrayList<>(); + //初始化柱状图数据 + zztcsh(allValue, busProjectPunchranges, persons, expireSeconds); + + //初始化 + List gpsList = new ArrayList<>(); +// int zrys = 0; + int ycry = 0; + Integer dwcs = 0; + int zgry = 0; + + if (persons != null && !persons.isEmpty()){ + + //循环考勤人员信息列表 + for (SubConstructionUser constructionUser : persons) { + //从redis拿到缓存最新坐标 优化:直接获取值 没有为null + GpsEquipmentSonBo one = RedisUtils.getCacheObject("rydw_userId_:" + constructionUser.getSysUserId()); +// boolean existsObject = RedisUtils.isExistsObject("rydw_userId_:" + constructionUser.getSysUserId()); + if (one == null){ + continue; + } + //这里可优化 坐标上报时存入名称 +// GpsEquipmentSon one = gpsEquipmentSonService.getById(bo.getId()); + + if (one != null){ + //获取人员 + SysUserVo sysUserVo = sysUserService.selectUserById(constructionUser.getSysUserId()); + sysUserVo.setJd(one.getLocLongitude()); + sysUserVo.setWd(one.getLocLatitude()); + sysUserVo.setZhdwsj(one.getCreateTime()); + sysUserVo.setAvatarUrl(one.getAvatar()); + sysUserVo.setGz(constructionUser.getTypeOfWork()); + //获取班组 这里做优化 先查询获取全部 然后循环找到数据 + if (constructionUser.getTeamId() != null && bzList != null && !bzList.isEmpty()) { + for (BusProjectTeam team : bzList) { + if (constructionUser.getTeamId().equals(team.getId())){ + sysUserVo.setBz(team.getTeamName()); + break; + } + } +// BusProjectTeamVo teamVo = busProjectTeamService.queryById(constructionUser.getTeamId()); +// if (teamVo != null) { +// sysUserVo.setBz(teamVo.getTeamName()); +// } + } + boolean isFind = false; + //循环打卡范围 判断是否是异常状态 + for (BusProjectPunchrange busProjectPunchrange : busProjectPunchranges) { + //转换范围 + List coordinates = List.of(busProjectPunchrange.getPunchRange()); + List matchingRange = JSTUtil.findMatchingRange(one.getLocLatitude().toString(), one.getLocLongitude().toString(), coordinates); + //如果范围外为 空 + if (matchingRange != null && !matchingRange.isEmpty() && !isFind) { + sysUserVo.setQy(busProjectPunchrange.getPunchName()); + isFind = true; + + //判断在线状态 如果在线 范围外 则为异常 目前从聊天服务获取 + if (ChatServerHandler.getOnlineUserList().contains(constructionUser.getSysUserId().toString())) { + sysUserVo.setZxzt("在线"); + //坐标在范围内在岗 + zgry++; + //定义Key + String key = busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName(); + //给坐标柱状图赋值 + setZztData(key,allValue,one,busProjectPunchrange,constructionUser,expireSeconds); + } + //找到打卡范围后 赋值后 跳出循环 + break; + } + } + //进一步判断状态 + if (sysUserVo.getZxzt() == null || sysUserVo.getZxzt().isEmpty()){ + if (ChatServerHandler.getOnlineUserList().contains(constructionUser.getSysUserId().toString()) && !isFind){ + sysUserVo.setZxzt("异常"); + //统计异常数 + ycry++; + }else if (!ChatServerHandler.getOnlineUserList().contains(constructionUser.getSysUserId().toString())){ + sysUserVo.setZxzt("离线"); + } + } + + //人员级GPS坐标列表 + gpsList.add(sysUserVo); + } + } + } + + //在岗人员 + map.put("zgry",zgry); + + //异常人员 + map.put("ycry",ycry); + + //总人员数 + map.put("zrys",zgry + ycry); + + //地图实时坐标 + map.put("gpsList", gpsList); + + //柱状图数据 + map.put("zztsj",allValue); + + //饼状图数据 区域时间段人数Map list人员列表 busProjectPunchranges打卡范围列表 + map.put("bztsj",getPieData(allValue, persons, busProjectPunchranges)); + + //定位次数 + if (RedisUtils.isExistsObject("rydw_cs")){ + dwcs = RedisUtils.getCacheObject("rydw_cs"); + } + map.put("dwcs",dwcs); + } + return map; + } + + /** + * 柱状图数据初始化 + */ + public void zztcsh(List> allValue, List busProjectPunchranges, + List persons, long expireSeconds) { + for (BusProjectPunchrange busProjectPunchrange : busProjectPunchranges) { + Map map2 = new HashMap<>(); + + for (String timeSlot : TIME_SLOTS) { + String redisKey = busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":" + timeSlot; + boolean existsObject = RedisUtils.isExistsObject(redisKey); + + if (!existsObject) { + RedisUtils.setCacheObject(redisKey, 0, Duration.ofSeconds(expireSeconds)); + map2.put(timeSlot, 0); + } else { + int count = 0; + String timeSlotKey = "rydw_tj_" + busProjectPunchrange.getId() + "_" + timeSlot + "_"; + int timeSlotKeyLength = timeSlotKey.length(); + + for (SubConstructionUser person : persons) { + if (RedisUtils.isExistsObject(timeSlotKey + person.getSysUserId())) { + count++; + } + } + map2.put(timeSlot, count); + } + } + + Map map1 = new HashMap<>(); + map1.put(busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName(), map2); + allValue.add(map1); + } + } + + /** + * 柱状图 数据 + */ + public void setZztData(String key, List> allValue, GpsEquipmentSonBo one, + BusProjectPunchrange busProjectPunchrange, SubConstructionUser constructionUser, long expireSeconds) { + + // 先找到对应的map,避免在循环内部多次判断 + Map timeSlotMap = null; + for (Map mapMap : allValue) { + if (mapMap.containsKey(key)) { + timeSlotMap = mapMap.get(key); + break; + } + } + + if (timeSlotMap == null) return; + + LocalDateTime dateTime = one.getCreateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); + int hour = dateTime.getHour(); + + // 使用映射表减少if-else判断 + Map hourToTimeSlot = new HashMap<>(); + hourToTimeSlot.put(6, "06:00"); + hourToTimeSlot.put(8, "08:00"); + hourToTimeSlot.put(10, "10:00"); + hourToTimeSlot.put(12, "12:00"); + hourToTimeSlot.put(14, "14:00"); + hourToTimeSlot.put(16, "16:00"); + hourToTimeSlot.put(18, "18:00"); + + for (Map.Entry entry : hourToTimeSlot.entrySet()) { + int startHour = entry.getKey(); + if (hour >= startHour && hour < startHour + 2) { + String timeSlot = entry.getValue(); + String redisCheckKey = "rydw_tj_" + busProjectPunchrange.getId() + "_" + timeSlot + "_" + constructionUser.getSysUserId(); + + if (!RedisUtils.isExistsObject(redisCheckKey)) { + // 原子性更新,避免并发问题 + synchronized (this) { + if (!RedisUtils.isExistsObject(redisCheckKey)) { + int currentCount = (int) timeSlotMap.get(timeSlot); + timeSlotMap.put(timeSlot, currentCount + 1); + + String redisCountKey = busProjectPunchrange.getId() + ":" + busProjectPunchrange.getPunchName() + ":" + timeSlot; + RedisUtils.setCacheObject(redisCountKey, currentCount + 1, Duration.ofSeconds(expireSeconds)); + RedisUtils.setCacheObject(redisCheckKey, 1, Duration.ofSeconds(expireSeconds)); + } + } + } + break; // 找到对应时段后退出循环 + } + } + } + + /** + * 统计饼状图 数据 + */ + public List> getPieData(List> value, + List persons, + List dkfw) { + + // 使用Set去重,提高查找效率 + Set userRangeSet = new HashSet<>(); + + // 预构建打卡范围ID到名称的映射 + Map rangeIdToName = new HashMap<>(); + for (BusProjectPunchrange fw : dkfw) { + rangeIdToName.put(fw.getId().toString(), fw.getPunchName()); + } + + // 遍历所有数据 + for (Map mapMap : value) { + for (Map.Entry entry : mapMap.entrySet()) { + String fwIdMc = entry.getKey(); + String[] split = fwIdMc.split(":"); + if (split.length < 2) continue; + + String fwId = split[0]; + String fwName = rangeIdToName.get(fwId); + if (fwName == null) continue; + + Map timeMap = entry.getValue(); + for (String timeSlot : timeMap.keySet()) { + // 批量构建redis key + List redisKeys = new ArrayList<>(); + for (SubConstructionUser person : persons) { + redisKeys.add("rydw_tj_" + fwId + "_" + timeSlot + "_" + person.getSysUserId()); + } + + // 批量查询redis(假设RedisUtils支持批量操作) + // 如果RedisUtils不支持批量,可以批量获取以减少网络开销 + for (int i = 0; i < redisKeys.size(); i++) { + if (RedisUtils.isExistsObject(redisKeys.get(i))) { + String uniqueKey = fwId + "_" + persons.get(i).getSysUserId(); + userRangeSet.add(uniqueKey); + } + } + } + } + } + + // 统计结果 + Map countMap = new HashMap<>(); + for (String userRangeKey : userRangeSet) { + String[] parts = userRangeKey.split("_"); + if (parts.length < 2) continue; + + String fwId = parts[0]; + String fwName = rangeIdToName.get(fwId); + if (fwName != null) { + String rangeKey = fwId + ":" + fwName; + countMap.put(rangeKey, countMap.getOrDefault(rangeKey, 0) + 1); + } + } + + // 测试数据 +// countMap.put("1000000:测试数据", 8); + + return new ArrayList<>(countMap.entrySet()); + } + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/biddingManagement/biaoqianlixiang/service/impl/XzdBidPreProjectServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/biddingManagement/biaoqianlixiang/service/impl/XzdBidPreProjectServiceImpl.java index 50b9f74d..fe0ddb5a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/biddingManagement/biaoqianlixiang/service/impl/XzdBidPreProjectServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/biddingManagement/biaoqianlixiang/service/impl/XzdBidPreProjectServiceImpl.java @@ -1,7 +1,10 @@ package org.dromara.xzd.biddingManagement.biaoqianlixiang.service.impl; import cn.hutool.core.bean.BeanUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.domain.event.ProcessDeleteEvent; import org.dromara.common.core.domain.event.ProcessEvent; @@ -9,19 +12,20 @@ import org.dromara.common.core.domain.event.ProcessTaskEvent; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import lombok.RequiredArgsConstructor; import org.dromara.common.utils.BatchNumberGenerator; import org.dromara.system.service.impl.SysOssServiceImpl; +import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.XzdBidPreProject; import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.XzdBqlxProjectInfo; -import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.XzdProjectRiskAssessment; +import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.bo.XzdBidPreProjectBo; import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.bo.XzdBqlxProjectInfoBo; import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.dto.BiddingManagementDto; import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.dto.QuerBiddingManagementDto; import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.vo.QuerListXzdBidPreVo; import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.vo.QueryListXzdVo; +import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.vo.XzdBidPreProjectVo; import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.vo.XzdBqlxProjectInfoVo; +import org.dromara.xzd.biddingManagement.biaoqianlixiang.mapper.XzdBidPreProjectMapper; +import org.dromara.xzd.biddingManagement.biaoqianlixiang.service.IXzdBidPreProjectService; import org.dromara.xzd.biddingManagement.biaoqianlixiang.service.IXzdBqlxProjectInfoService; import org.dromara.xzd.biddingManagement.biddingDocument.domain.XzdBiddingFileEstimate; import org.dromara.xzd.biddingManagement.biddingDocument.service.IXzdBiddingFileEstimateService; @@ -41,15 +45,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; -import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.bo.XzdBidPreProjectBo; -import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.vo.XzdBidPreProjectVo; -import org.dromara.xzd.biddingManagement.biaoqianlixiang.domain.XzdBidPreProject; -import org.dromara.xzd.biddingManagement.biaoqianlixiang.mapper.XzdBidPreProjectMapper; -import org.dromara.xzd.biddingManagement.biaoqianlixiang.service.IXzdBidPreProjectService; import org.springframework.transaction.annotation.Transactional; -import java.time.LocalDate; -import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -69,7 +66,6 @@ public class XzdBidPreProjectServiceImpl extends ServiceImpl(XzdBqlxProjectInfo.class).eq(XzdBqlxProjectInfo::getBidPreProjectId, id)); XzdBqlxProjectInfoVo res = new XzdBqlxProjectInfoVo(); - if (xzdBqlxProjectInfo != null){ + if (xzdBqlxProjectInfo != null) { BeanUtils.copyProperties(xzdBqlxProjectInfo, res); } querListXzdBidPreVo.setXzdBqlxProjectInfoVo(res); @@ -141,12 +135,12 @@ public class XzdBidPreProjectServiceImpl extends ServiceImpl list = baseMapper.queryPageListBy(bo,pageQuery.getPageSize()); - Integer res = baseMapper.queryPageListByNum(bo,pageQuery.getPageSize()); + List list = baseMapper.queryPageListBy(bo, pageQuery.getPageSize()); + Integer res = baseMapper.queryPageListByNum(bo, pageQuery.getPageSize()); queryListXzdVo.setList(list); @@ -203,19 +197,19 @@ public class XzdBidPreProjectServiceImpl extends ServiceImpl ids, Boolean isValid) { - if(isValid){ + if (isValid) { } for (Long id : ids) { @@ -285,7 +278,7 @@ public class XzdBidPreProjectServiceImpl extends ServiceImpl 0) throw new ServiceException("招标文件审估已引用,不允许删除"); //投标文件 - l = xzdBiddingDocumentService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(XzdBiddingDocument::getProjectName, id)); + l = xzdBiddingDocumentService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(XzdBiddingDocument::getProjectName, id)); if (l > 0) throw new ServiceException("投标文件已引用,不允许删除"); //投标保证金缴纳 @@ -305,23 +298,22 @@ public class XzdBidPreProjectServiceImpl extends ServiceImpl 0) throw new ServiceException("招标代理服务费支付申请已引用,不允许删除"); // 删除附件 - if (!StringUtils.isEmpty(xzdBidPreProjectVo.getFileId())){ - List collect = Arrays.stream(xzdBidPreProjectVo.getFileId().split(",")).map(item -> { - return Long.parseLong(item); - }).collect(Collectors.toList()); + if (!StringUtils.isEmpty(xzdBidPreProjectVo.getFileId())) { + List collect = Arrays.stream(xzdBidPreProjectVo.getFileId().split(",")).map(Long::parseLong).collect(Collectors.toList()); sysOssService.deleteWithValidByIds(collect, false); } // 删除项目信息 HashMap objectObjectHashMap = new HashMap<>(); - objectObjectHashMap.put("bid_pre_project_id",id); + objectObjectHashMap.put("bid_pre_project_id", id); iXzdBqlxProjectInfoService.removeByMap(objectObjectHashMap); } return baseMapper.deleteByIds(ids) > 0; } + /** * 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等) * 正常使用只需#processEvent.flowCode=='leave1' @@ -329,7 +321,7 @@ public class XzdBidPreProjectServiceImpl extends ServiceImpl queryPageList(XzdBxBxsqBo bo, PageQuery pageQuery) { //暂时定为只能看见自己的报销 - if (bo.getBxr() == null && !LoginHelper.isSuperAdmin()) { +/* if (bo.getBxr() == null && !LoginHelper.isSuperAdmin()) { bo.setBxr(LoginHelper.getUserId()); - } + }*/ LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + Page result = baseMapper.selectPage(pageQuery.build(), lqw); setValue(result.getRecords()); return TableDataInfo.build(result); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongxinxi/service/impl/XzdSubcontractServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongxinxi/service/impl/XzdSubcontractServiceImpl.java index fb038f18..2893fada 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongxinxi/service/impl/XzdSubcontractServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/fenbaohetongxinxi/service/impl/XzdSubcontractServiceImpl.java @@ -19,6 +19,7 @@ import org.dromara.common.utils.BatchNumberGenerator; import org.dromara.system.service.impl.SysOssServiceImpl; import org.dromara.xzd.comprehensive.domain.XzdHtglHtbgqd; import org.dromara.xzd.comprehensive.service.IXzdHtglHtbgqdService; +import org.dromara.xzd.contractManagement.caigouhetongbiangeng.domain.XzdPurchaseContractAlteration; import org.dromara.xzd.contractManagement.fenbaohetongbiangg.domain.XzdSubcontractChange; import org.dromara.xzd.contractManagement.fenbaohetongbiangg.domain.vo.XzdSubcontractChangeVo; import org.dromara.xzd.contractManagement.fenbaohetongbiangg.service.IXzdSubcontractChangeService; @@ -201,11 +202,11 @@ public class XzdSubcontractServiceImpl extends ServiceImpl().eq(XzdSubcontractChange::getContractCode, item.getId())); + Long l = xzdSubcontractChangeService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(XzdSubcontractChange::getContractCode, item.getId()).eq(XzdSubcontractChange::getAuditStatus, BusinessStatusEnum.FINISH.getStatus())); if (l > 0) { item.setJdzt(ZxdEnum.HETONGZTBG.getTypeValue()); } - Long l1 = xzdSubcontractTerminationService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(XzdSubcontractTermination::getContractNumber, item.getId())); + Long l1 = xzdSubcontractTerminationService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(XzdSubcontractTermination::getContractNumber, item.getId()).eq(XzdSubcontractTermination::getAuditStatus, BusinessStatusEnum.FINISH.getStatus())); if (l1 > 0) { item.setJdzt(ZxdEnum.HETONGZTZZ.getTypeValue()); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/jixiehetongxinxi/service/impl/XzdContractMachineryServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/jixiehetongxinxi/service/impl/XzdContractMachineryServiceImpl.java index 2e430223..e983e34f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/jixiehetongxinxi/service/impl/XzdContractMachineryServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/jixiehetongxinxi/service/impl/XzdContractMachineryServiceImpl.java @@ -7,6 +7,7 @@ import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.domain.event.ProcessDeleteEvent; import org.dromara.common.core.domain.event.ProcessEvent; import org.dromara.common.core.domain.event.ProcessTaskEvent; +import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.service.XzdContractMachineryService; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.SpringUtils; @@ -19,6 +20,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.dromara.common.utils.BatchNumberGenerator; import org.dromara.system.service.impl.SysOssServiceImpl; +import org.dromara.xzd.contractManagement.caigouhetongbiangeng.domain.XzdPurchaseContractAlteration; import org.dromara.xzd.contractManagement.fenbaohetongbiangg.domain.XzdSubcontractChange; import org.dromara.xzd.contractManagement.fenbaohetongzhongzhi.domain.XzdSubcontractTermination; import org.dromara.xzd.contractManagement.jixiehetongbiang.domain.XzdMachineryContractAlteration; @@ -168,11 +170,11 @@ public class XzdContractMachineryServiceImpl extends ServiceImpl().eq(XzdMachineryContractAlteration::getContractInformationId, item.getId())); + Long l = xzdMachineryContractAlterationService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(XzdMachineryContractAlteration::getContractInformationId, item.getId()).eq(XzdMachineryContractAlteration::getAuditStatus, BusinessStatusEnum.FINISH.getStatus())); if (l > 0) { item.setJdzt(ZxdEnum.HETONGZTBG.getTypeValue()); } - Long l1 = xzdMachineryContractSuspendService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(XzdMachineryContractSuspend::getContractInformationId, item.getId())); + Long l1 = xzdMachineryContractSuspendService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(XzdMachineryContractSuspend::getContractInformationId, item.getId()).eq(XzdMachineryContractSuspend::getAuditStatus, BusinessStatusEnum.FINISH.getStatus())); if (l1 > 0) { item.setJdzt(ZxdEnum.HETONGZTZZ.getTypeValue()); } @@ -331,6 +333,16 @@ public class XzdContractMachineryServiceImpl extends ServiceImpl().eq(XzdBusinessChange::getContractChangeId, update.getId())); + if (bo.getSealInfo() != null && !bo.getSealInfo().isEmpty()){ + for (XzdBusinessChange sealInfo : bo.getSealInfo()) { + sealInfo.setContractChangeId(update.getId()); + sealInfo.setType("13"); + } + xzdBusinessChangeService.saveBatch(bo.getSealInfo()); + } /** * 扣款与奖励项 */ @@ -364,7 +376,6 @@ public class XzdContractMachineryServiceImpl extends ServiceImpl 0; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/purchaseManagement/service/impl/XzdPurchaseContractInformationServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/purchaseManagement/service/impl/XzdPurchaseContractInformationServiceImpl.java index 7171e7bb..a8116902 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/purchaseManagement/service/impl/XzdPurchaseContractInformationServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/contractManagement/purchaseManagement/service/impl/XzdPurchaseContractInformationServiceImpl.java @@ -10,6 +10,7 @@ import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.event.ProcessDeleteEvent; import org.dromara.common.core.domain.event.ProcessEvent; import org.dromara.common.core.domain.event.ProcessTaskEvent; +import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.service.XzdPurchaseContractInformationService; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.SpringUtils; @@ -539,11 +540,11 @@ public class XzdPurchaseContractInformationServiceImpl extends ServiceImpl().eq(XzdPurchaseContractAlteration::getContractInformationId, item.getId())); + Long l = xzdPurchaseContractAlterationService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(XzdPurchaseContractAlteration::getContractInformationId, item.getId()).eq(XzdPurchaseContractAlteration::getAuditStatus, BusinessStatusEnum.FINISH.getStatus())); if (l > 0) { item.setJdzt(ZxdEnum.HETONGZTBG.getTypeValue()); } - Long l1 = xzdPurchaseContractSuspendService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(XzdPurchaseContractSuspend::getContractInformationId, item.getId())); + Long l1 = xzdPurchaseContractSuspendService.getBaseMapper().selectCount(new LambdaQueryWrapper().eq(XzdPurchaseContractSuspend::getContractInformationId, item.getId()).eq(XzdPurchaseContractSuspend::getAuditStatus, BusinessStatusEnum.FINISH.getStatus())); if (l1 > 0) { item.setJdzt(ZxdEnum.HETONGZTZZ.getTypeValue()); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/XzdProject.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/XzdProject.java index 4a219413..21e9f8e2 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/XzdProject.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/XzdProject.java @@ -235,5 +235,9 @@ public class XzdProject extends BaseEntity { */ private String auditStatus; + /** + * 所属公司 + */ + private Long ssgs; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/XzdProjectManagerApproval.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/XzdProjectManagerApproval.java index 3c4cdb96..e181eb16 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/XzdProjectManagerApproval.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/XzdProjectManagerApproval.java @@ -129,5 +129,9 @@ public class XzdProjectManagerApproval extends BaseEntity { */ private String auditStatus; + /** + * 所属公司 + */ + private Long ssgs; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/XzdSupplierInfo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/XzdSupplierInfo.java index b448c632..fa12e3b9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/XzdSupplierInfo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/XzdSupplierInfo.java @@ -245,5 +245,9 @@ public class XzdSupplierInfo extends BaseEntity { */ private String email; + /** + * 所属公司 + */ + private Long ssgs; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdProjectBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdProjectBo.java index a0488bb9..4c29d796 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdProjectBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdProjectBo.java @@ -339,4 +339,9 @@ public class XzdProjectBo extends BaseEntity { private String selfId; + /** + * 所属公司 + */ + private Long ssgs; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdProjectManagerApprovalBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdProjectManagerApprovalBo.java index 6f78f2d7..5e4b994f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdProjectManagerApprovalBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdProjectManagerApprovalBo.java @@ -129,5 +129,9 @@ public class XzdProjectManagerApprovalBo extends BaseEntity { */ private String auditStatus; + /** + * 所属公司 + */ + private Long ssgs; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdSupplierInfoBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdSupplierInfoBo.java index 1e5b180f..25bbf21e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdSupplierInfoBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/bo/XzdSupplierInfoBo.java @@ -361,4 +361,9 @@ public class XzdSupplierInfoBo extends BaseEntity { private Integer offset; + /** + * 所属公司 + */ + private Long ssgs; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdProjectManagerApprovalVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdProjectManagerApprovalVo.java index 8e506c67..a2d6545c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdProjectManagerApprovalVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdProjectManagerApprovalVo.java @@ -150,5 +150,9 @@ public class XzdProjectManagerApprovalVo implements Serializable { @ExcelProperty(value = "审核状态") private String auditStatus; + /** + * 所属公司 + */ + private Long ssgs; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdProjectVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdProjectVo.java index 265ba3bd..39255598 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdProjectVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdProjectVo.java @@ -5,7 +5,6 @@ import com.alibaba.excel.annotation.ExcelProperty; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import org.dromara.common.translation.annotation.Translation; -import org.dromara.common.translation.annotation.TranslationType; import org.dromara.common.translation.constant.TransConstant; import org.dromara.xzd.domain.XzdProject; @@ -395,4 +394,9 @@ public class XzdProjectVo implements Serializable { */ private String gd; + /** + * 所属公司 + */ + private Long ssgs; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdSupplierInfoVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdSupplierInfoVo.java index d481766a..0d077f0f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdSupplierInfoVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/domain/vo/XzdSupplierInfoVo.java @@ -444,4 +444,9 @@ public class XzdSupplierInfoVo implements Serializable { */ private List contracts; + /** + * 所属公司 + */ + private Long ssgs; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdProjectManagerApprovalServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdProjectManagerApprovalServiceImpl.java index 444a17b8..d4b8b9d2 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdProjectManagerApprovalServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdProjectManagerApprovalServiceImpl.java @@ -18,12 +18,14 @@ import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.utils.BatchNumberGenerator; +import org.dromara.system.domain.vo.SysDeptVo; +import org.dromara.system.service.impl.SysDeptServiceImpl; import org.dromara.system.service.impl.SysOssServiceImpl; import org.dromara.xzd.domain.XzdProjectManagerApproval; import org.dromara.xzd.domain.bo.XzdProjectManagerApprovalBo; import org.dromara.xzd.domain.vo.XzdProjectManagerApprovalVo; -import org.dromara.xzd.domain.vo.XzdProjectVo; import org.dromara.xzd.mapper.XzdProjectManagerApprovalMapper; import org.dromara.xzd.service.IXzdProjectManagerApprovalService; import org.springframework.beans.factory.annotation.Autowired; @@ -48,6 +50,8 @@ public class XzdProjectManagerApprovalServiceImpl extends ServiceImpl queryPageList(XzdProjectManagerApprovalBo bo, PageQuery pageQuery) { + // 获取当前用户部门 + Long deptId = LoginHelper.getDeptId(); + SysDeptVo deptVo = iSysDeptService.selectDeptById(deptId); + if (LoginHelper.isSuperAdmin()) { + bo.setSsgs(deptVo.getDeptId()); + }else { + String ancestors = deptVo.getAncestors(); + List ids = StringUtils.splitTo(ancestors, Convert::toLong); + if (ids.size() == 2) { + bo.setSsgs(deptVo.getDeptId()); + }else { + bo.setSsgs(iSysDeptService.selectDeptById(ids.get(2)).getDeptId()); + } + } LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); return TableDataInfo.build(result); @@ -89,6 +107,7 @@ public class XzdProjectManagerApprovalServiceImpl extends ServiceImpl buildQueryWrapper(XzdProjectManagerApprovalBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(XzdProjectManagerApproval::getSsgs, bo.getSsgs()); lqw.eq(bo.getId() != null, XzdProjectManagerApproval::getId, bo.getId()); lqw.eq(bo.getCityCode() != null, XzdProjectManagerApproval::getCityCode, bo.getCityCode()); lqw.orderByDesc(XzdProjectManagerApproval::getId); @@ -115,6 +134,20 @@ public class XzdProjectManagerApprovalServiceImpl extends ServiceImpl ids = StringUtils.splitTo(ancestors, Convert::toLong); + if (ids.size() == 2) { + add.setSsgs(deptVo.getDeptId()); + }else { + add.setSsgs(iSysDeptService.selectDeptById(ids.get(2)).getDeptId()); + } + } boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); @@ -135,22 +168,22 @@ public class XzdProjectManagerApprovalServiceImpl extends ServiceImpl oldFileId = Arrays.stream(old.getFileId().split(",")).map(Long::valueOf).toList(); - List nowFileId = Arrays.stream(bo.getFileId().split(",")).map(Long::valueOf).toList(); - for (Long l : oldFileId) { - if (!nowFileId.contains(l)) { - sysOssService.deleteWithValidByIds(List.of(l), false); - } - } - } - }else { - if (old.getFileId()!= null && !old.getFileId().isEmpty()){ - List deleteIds = Arrays.stream(old.getFileId().split(",")).map(Long::valueOf).toList(); - sysOssService.deleteWithValidByIds(deleteIds, false); - } - } +// if (bo.getFileId() != null && !bo.getFileId().isEmpty()){ +// if (old.getFileId() != null && !old.getFileId().isEmpty()) { +// List oldFileId = Arrays.stream(old.getFileId().split(",")).map(Long::valueOf).toList(); +// List nowFileId = Arrays.stream(bo.getFileId().split(",")).map(Long::valueOf).toList(); +// for (Long l : oldFileId) { +// if (!nowFileId.contains(l)) { +// sysOssService.deleteWithValidByIds(List.of(l), false); +// } +// } +// } +// }else { +// if (old.getFileId()!= null && !old.getFileId().isEmpty()){ +// List deleteIds = Arrays.stream(old.getFileId().split(",")).map(Long::valueOf).toList(); +// sysOssService.deleteWithValidByIds(deleteIds, false); +// } +// } XzdProjectManagerApproval update = MapstructUtils.convert(bo, XzdProjectManagerApproval.class); validEntityBeforeSave(update); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdProjectServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdProjectServiceImpl.java index 1d8fef39..daf11e86 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdProjectServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/service/impl/XzdProjectServiceImpl.java @@ -5,22 +5,26 @@ import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.event.ProcessDeleteEvent; import org.dromara.common.core.domain.event.ProcessEvent; import org.dromara.common.core.domain.event.ProcessTaskEvent; +import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.service.XzdProjectService; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.utils.BatchNumberGenerator; +import org.dromara.project.domain.dto.project.BusProjectCreateReq; +import org.dromara.project.service.IBusProjectService; import org.dromara.system.domain.vo.SysDeptVo; import org.dromara.system.domain.vo.SysUserVo; -import org.dromara.system.service.ISysDeptService; +import org.dromara.system.service.impl.SysDeptServiceImpl; import org.dromara.system.service.impl.SysOssServiceImpl; import org.dromara.system.service.impl.SysUserServiceImpl; import org.dromara.xzd.domain.*; @@ -50,6 +54,9 @@ public class XzdProjectServiceImpl extends ServiceImpl queryPageList(XzdProjectBo bo, PageQuery pageQuery) { - if(pageQuery.getPageNum() != null && pageQuery.getPageSize() != null) { + if (pageQuery.getPageNum() != null && pageQuery.getPageSize() != null) { bo.setPageNum(pageQuery.getPageNum()); bo.setPageSize(pageQuery.getPageSize()); - }else { + } else { bo.setPageNum(1); bo.setPageSize(10); } + // 获取当前用户部门 + Long deptId = LoginHelper.getDeptId(); + SysDeptVo deptVo = iSysDeptService.selectDeptById(deptId); + if (LoginHelper.isSuperAdmin()) { + bo.setSsgs(deptVo.getDeptId()); + } else { + String ancestors = deptVo.getAncestors(); + List ids = StringUtils.splitTo(ancestors, Convert::toLong); + if (ids.size() == 2) { + bo.setSsgs(deptVo.getDeptId()); + } else { + bo.setSsgs(iSysDeptService.selectDeptById(ids.get(2)).getDeptId()); + } + } int i = (bo.getPageNum() - 1) * bo.getPageSize(); bo.setOffset(i); @@ -183,21 +204,35 @@ public class XzdProjectServiceImpl extends ServiceImpl ids = StringUtils.splitTo(ancestors, Convert::toLong); + if (ids.size() == 2) { + add.setSsgs(deptVo.getDeptId()); + } else { + add.setSsgs(iSysDeptService.selectDeptById(ids.get(2)).getDeptId()); + } + } boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); - }else { + } else { return false; } //项目概况处理 - if (bo.getXmgk() != null){ + if (bo.getXmgk() != null) { bo.getXmgk().setXzdProjectId(add.getId()); xzdProjectProfileService.insertByBo(bo.getXmgk()); } //项目人员处理 - if (bo.getXmry() != null && !bo.getXmry().isEmpty()){ + if (bo.getXmry() != null && !bo.getXmry().isEmpty()) { for (XzdProjectPersonnelBo personnelBo : bo.getXmry()) { personnelBo.setXzdProjectId(add.getId()); xzdProjectPersonnelService.insertByBo(personnelBo); @@ -205,19 +240,19 @@ public class XzdProjectServiceImpl extends ServiceImpl 0; - if (!b){ + if (!b) { return false; } //项目概况处理 - if (bo.getXmgk() != null){ + if (bo.getXmgk() != null) { xzdProjectProfileService.updateByBo(bo.getXmgk()); } //项目人员处理 - if (bo.getXmry() != null && !bo.getXmry().isEmpty()){ + if (bo.getXmry() != null && !bo.getXmry().isEmpty()) { // 获取原有记录的ID列表 if (oldValue.getXmry() != null && !oldValue.getXmry().isEmpty()) { @@ -295,9 +330,9 @@ public class XzdProjectServiceImpl extends ServiceImpl now = new ArrayList<>(); for (XzdProjectWarehousesBo boValue : bo.getXmck()) { - if (boValue.getId() == null){ + if (boValue.getId() == null) { boValue.setXzdProjectId(update.getId()); } XzdProjectWarehouses temp = new XzdProjectWarehouses(); @@ -345,9 +380,9 @@ public class XzdProjectServiceImpl extends ServiceImpl now = new ArrayList<>(); for (XzdProjectInternalAccountsBo boValue : bo.getNbzj()) { - if (boValue.getId() == null){ + if (boValue.getId() == null) { boValue.setXzdProjectId(update.getId()); } XzdProjectInternalAccounts temp = new XzdProjectInternalAccounts(); @@ -384,9 +419,9 @@ public class XzdProjectServiceImpl extends ServiceImpl now = new ArrayList<>(); for (XzdProjectParticipatingUnitsBo boValue : bo.getCjdw()) { - if (boValue.getId() == null){ + if (boValue.getId() == null) { boValue.setXzdProjectId(update.getId()); } XzdProjectParticipatingUnits temp = new XzdProjectParticipatingUnits(); @@ -423,9 +458,9 @@ public class XzdProjectServiceImpl extends ServiceImpl ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } @@ -521,7 +556,7 @@ public class XzdProjectServiceImpl extends ServiceImpl profileLambdaQueryWrapper = new LambdaQueryWrapper<>(); @@ -599,7 +634,7 @@ public class XzdProjectServiceImpl extends ServiceImpl ids = StringUtils.splitTo(ancestors, Convert::toLong); + if (ids.size() == 2) { + bo.setSsgs(deptVo.getDeptId()); + }else { + bo.setSsgs(iSysDeptService.selectDeptById(ids.get(2)).getDeptId()); + } + } + Integer i = (bo.getPageNum() - 1) * bo.getPageSize(); bo.setOffset(i); @@ -216,6 +235,21 @@ public class XzdSupplierInfoServiceImpl extends ServiceImpl ids = StringUtils.splitTo(ancestors, Convert::toLong); + if (ids.size() == 2) { + add.setSsgs(deptVo.getDeptId()); + }else { + add.setSsgs(iSysDeptService.selectDeptById(ids.get(2)).getDeptId()); + } + } + boolean flag = baseMapper.insert(add) > 0; if (!flag) { return false; diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/spykp/spdj/service/impl/XzdSpykpSpdjServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/spykp/spdj/service/impl/XzdSpykpSpdjServiceImpl.java index e342089c..a8567b7f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/spykp/spdj/service/impl/XzdSpykpSpdjServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/xzd/spykp/spdj/service/impl/XzdSpykpSpdjServiceImpl.java @@ -118,6 +118,7 @@ public class XzdSpykpSpdjServiceImpl extends ServiceImpl + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/complaintBox/BusComplaintBoxMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/complaintBox/BusComplaintBoxMapper.xml new file mode 100644 index 00000000..d6798ea1 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/complaintBox/BusComplaintBoxMapper.xml @@ -0,0 +1,82 @@ + + + + + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/complaintBox/BusComplaintBoxMessageLoggingMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/complaintBox/BusComplaintBoxMessageLoggingMapper.xml new file mode 100644 index 00000000..4fa66cef --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/complaintBox/BusComplaintBoxMessageLoggingMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/device/DeviceAccessRecordMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/device/DeviceAccessRecordMapper.xml new file mode 100644 index 00000000..9e9926f4 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/device/DeviceAccessRecordMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/device/DeviceInfoMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/device/DeviceInfoMapper.xml new file mode 100644 index 00000000..c9288975 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/device/DeviceInfoMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/device/DeviceTypeMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/device/DeviceTypeMapper.xml new file mode 100644 index 00000000..b80f47e9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/device/DeviceTypeMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/rabbitmq/MqDelayTaskMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/rabbitmq/MqDelayTaskMapper.xml new file mode 100644 index 00000000..8a474e61 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/rabbitmq/MqDelayTaskMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardHiddenDangerMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardHiddenDangerMapper.xml new file mode 100644 index 00000000..1a71bf1a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardHiddenDangerMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardHiddenDangerRectifyMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardHiddenDangerRectifyMapper.xml new file mode 100644 index 00000000..948a34e8 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardHiddenDangerRectifyMapper.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardRuleMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardRuleMapper.xml new file mode 100644 index 00000000..fc02f467 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardRuleMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardRuleNotifyObjectMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardRuleNotifyObjectMapper.xml new file mode 100644 index 00000000..b3fa5193 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HazardRuleNotifyObjectMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseDangerArchiveMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseDangerArchiveMapper.xml new file mode 100644 index 00000000..006725b3 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseDangerArchiveMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseDangerousEngineeringMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseDangerousEngineeringMapper.xml new file mode 100644 index 00000000..ec175d4a --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseDangerousEngineeringMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseRewardsPunishmentsMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseRewardsPunishmentsMapper.xml new file mode 100644 index 00000000..4c0cd5ce --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseRewardsPunishmentsMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseRpObjectMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseRpObjectMapper.xml new file mode 100644 index 00000000..b1cbab21 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseRpObjectMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseSpecialPlanMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseSpecialPlanMapper.xml new file mode 100644 index 00000000..ffb53668 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseSpecialPlanMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseViolationRecordMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseViolationRecordMapper.xml index d9fa99b3..ef8609b2 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseViolationRecordMapper.xml +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/HseViolationRecordMapper.xml @@ -18,4 +18,19 @@ ${ew.getCustomSqlSegment} + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetyFcxxMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetyFcxxMapper.xml new file mode 100644 index 00000000..e04c74b0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetyFcxxMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgdanjlMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgdanjlMapper.xml new file mode 100644 index 00000000..0df5f5d0 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgdanjlMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgdcMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgdcMapper.xml new file mode 100644 index 00000000..472c7e31 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgdcMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgsbMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgsbMapper.xml new file mode 100644 index 00000000..aad26344 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgsbMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgzgbhMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgzgbhMapper.xml new file mode 100644 index 00000000..33a71e64 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetySgzgbhMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetyZgxxMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetyZgxxMapper.xml new file mode 100644 index 00000000..5c49f80e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/safety/accident/HseSafetyZgxxMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml index 9e019a89..045c96d6 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml @@ -21,7 +21,8 @@ r.create_time, r.remark, r.is_special, - r.role_source + r.role_source, + r.role_identity from sys_role r left join sys_user_role sur on sur.role_id = r.role_id left join sys_user u on u.user_id = sur.user_id diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/XzdProjectMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/XzdProjectMapper.xml index 6a9c8aa4..ac32584b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/XzdProjectMapper.xml +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/XzdProjectMapper.xml @@ -58,6 +58,10 @@ + + AND project.ssgs = #{ssgs} + + AND project.project_number LIKE CONCAT('%',#{projectNumber},'%') diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/XzdSupplierInfoMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/XzdSupplierInfoMapper.xml index e518752c..9bbe459c 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/XzdSupplierInfoMapper.xml +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/xzd/XzdSupplierInfoMapper.xml @@ -39,6 +39,10 @@ LEFT JOIN xzd_supplier_open_bank as bank ON yhxx.open_bank = bank.open_bank and yhxx.branch_name = bank.branch_name + + AND info.ssgs = #{bo.ssgs} + + AND info.unified_social_credit_code = #{bo.unifiedSocialCreditCode} @@ -99,6 +103,10 @@ AND info.district_county = #{bo.districtCounty} + + AND info.creator_dept = #{bo.createDept} + + ORDER BY info.create_time DESC diff --git a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java index 22864fc2..6ade9119 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java @@ -276,10 +276,10 @@ public class FlwTaskServiceImpl implements IFlwTaskService { public TableDataInfo pageByTaskWait(FlowTaskBo flowTaskBo, PageQuery pageQuery) { QueryWrapper queryWrapper = buildQueryWrapper(flowTaskBo); List definitionIds = new ArrayList<>(); - if (!"0".equals(flowTaskBo.getProjectId())){ + if (!"0".equals(flowTaskBo.getProjectId())) { List flowDefinitions = flowDefinitionMapper.selectList(new LambdaQueryWrapper() .select(FlowDefinition::getId) - .like(FlowDefinition::getFlowCode, flowTaskBo.getProjectId())); + .like(StringUtils.isNotBlank(flowTaskBo.getProjectId()), FlowDefinition::getFlowCode, flowTaskBo.getProjectId())); if (flowDefinitions != null && !flowDefinitions.isEmpty()) { flowDefinitions.forEach(flowDefinition -> { definitionIds.add(flowDefinition.getId()); @@ -292,7 +292,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey()); queryWrapper.in("t.processed_by", LoginHelper.getUserIdStr()); queryWrapper.in("t.flow_status", BusinessStatusEnum.WAITING.getStatus()); - Page page = this.getFlowTaskDefinitionIdsVoPage(pageQuery,definitionIds, queryWrapper); + Page page = this.getFlowTaskDefinitionIdsVoPage(pageQuery, definitionIds, queryWrapper); return TableDataInfo.build(page); } @@ -306,7 +306,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { public TableDataInfo pageByTaskFinish(FlowTaskBo flowTaskBo, PageQuery pageQuery) { QueryWrapper queryWrapper = buildQueryWrapper(flowTaskBo); List definitionIds = new ArrayList<>(); - if (!"0".equals(flowTaskBo.getProjectId())){ + if (!"0".equals(flowTaskBo.getProjectId())) { List flowDefinitions = flowDefinitionMapper.selectList(new LambdaQueryWrapper() .select(FlowDefinition::getId) .like(FlowDefinition::getFlowCode, flowTaskBo.getProjectId())); @@ -322,7 +322,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { queryWrapper.eq("t.node_type", NodeType.BETWEEN.getKey()); queryWrapper.in("t.approver", LoginHelper.getUserIdStr()); queryWrapper.orderByDesc("t.create_time").orderByDesc("t.update_time"); - Page page = flwTaskMapper.getListFinishDefinitionIdsTask(pageQuery.build(),definitionIds, queryWrapper); + Page page = flwTaskMapper.getListFinishDefinitionIdsTask(pageQuery.build(), definitionIds, queryWrapper); return TableDataInfo.build(page); } @@ -356,8 +356,9 @@ public class FlwTaskServiceImpl implements IFlwTaskService { } return page; } + private Page getFlowTaskDefinitionIdsVoPage(PageQuery pageQuery, List definitionIds, QueryWrapper queryWrapper) { - Page page = flwTaskMapper.getListRunTaskDefinitionIds(pageQuery.build(),definitionIds, queryWrapper); + Page page = flwTaskMapper.getListRunTaskDefinitionIds(pageQuery.build(), definitionIds, queryWrapper); List records = page.getRecords(); if (CollUtil.isNotEmpty(records)) { List taskIds = StreamUtils.toList(records, FlowTaskVo::getId); @@ -396,7 +397,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { public TableDataInfo pageByTaskCopy(FlowTaskBo flowTaskBo, PageQuery pageQuery) { QueryWrapper queryWrapper = buildQueryWrapper(flowTaskBo); List definitionIds = new ArrayList<>(); - if (!"0".equals(flowTaskBo.getProjectId())){ + if (!"0".equals(flowTaskBo.getProjectId())) { List flowDefinitions = flowDefinitionMapper.selectList(new LambdaQueryWrapper() .select(FlowDefinition::getId) .like(FlowDefinition::getFlowCode, flowTaskBo.getProjectId())); @@ -409,9 +410,9 @@ public class FlwTaskServiceImpl implements IFlwTaskService { return null; } } - queryWrapper.eq(StringUtils.isNotBlank(flowTaskBo.getIsRead()),"t.is_read", flowTaskBo.getIsRead()); + queryWrapper.eq(StringUtils.isNotBlank(flowTaskBo.getIsRead()), "t.is_read", flowTaskBo.getIsRead()); queryWrapper.in("t.processed_by", LoginHelper.getUserIdStr()); - Page page = flwTaskMapper.getTaskCopyDefinitionIdsByPage(pageQuery.build(),definitionIds, queryWrapper); + Page page = flwTaskMapper.getTaskCopyDefinitionIdsByPage(pageQuery.build(), definitionIds, queryWrapper); return TableDataInfo.build(page); } @@ -598,7 +599,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService { for (FlowNode flowNode : nextFlowNodes) { buildNextTaskList.stream().filter(t -> t.getNodeCode().equals(flowNode.getNodeCode())).findFirst().ifPresent(t -> { if (CollUtil.isNotEmpty(t.getPermissionList())) { - List users = flwTaskAssigneeService.fetchUsersByStorageIds(String.join(StringUtils.SEPARATOR, t.getPermissionList()),null); + List users = flwTaskAssigneeService.fetchUsersByStorageIds(String.join(StringUtils.SEPARATOR, t.getPermissionList()), null); if (CollUtil.isNotEmpty(users)) { flowNode.setPermissionFlag(StreamUtils.join(users, e -> String.valueOf(e.getUserId()))); } diff --git a/xinnengyuan/script/sql/xinnengyuan.sql b/xinnengyuan/script/sql/xinnengyuan.sql index 0d6c75df..2c28c315 100644 --- a/xinnengyuan/script/sql/xinnengyuan.sql +++ b/xinnengyuan/script/sql/xinnengyuan.sql @@ -1974,3 +1974,148 @@ CREATE TABLE `gps_safety_user_record` PRIMARY KEY (`id`) USING BTREE, INDEX `idx_user_id` (`user_id` ASC) USING BTREE comment '用户id' ) comment '安全员轨迹信息'; + + +CREATE TABLE hazard_rule +( + `id` bigint not null auto_increment comment '主键', + `project_id` bigint not null comment '项目id', + `hazard_level` varchar(64) not null comment '隐患级别', + `hazard_weight` int not null comment '隐患权重', + `response_time` int not null comment '响应时限数值', + `response_unit` varchar(20) not null comment '响应时效单位', + `notify_method` varchar(20) not null comment '通知方式', + `timeout_action` varchar(50) not null comment '超时处理方式', + `extra_setting` varchar(20) not null comment '额外设置', + `remark` varchar(512) null comment '备注', + `create_by` bigint null comment '创建者', + `update_by` bigint null comment '更新者', + `create_dept` bigint null comment '创建部门', + `create_time` datetime default CURRENT_TIMESTAMP null comment '创建时间', + `update_time` datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间', + PRIMARY KEY (`id`) USING BTREE, + index `idx_project_id` (`project_id` asc) using btree comment '项目ID' +) comment '隐患分级通知规则'; + +CREATE TABLE hazard_rule_notify_object +( + rule_id BIGINT NOT NULL COMMENT '规则ID', + notify_id BIGINT NOT NULL COMMENT '通知ID', + notify_type VARCHAR(20) NOT NULL COMMENT '通知类型', + index `idx_rule_id` (`rule_id` asc) using btree comment '规则ID' +) comment '隐患规则通知对象'; + +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1996139632219136001, '隐患分级通知规则', '1996118434672001025', '1', 'rule', 'safety/rule/index', 1, 0, 'C', + '0', '0', 'safety:rule:list', '#', 103, 1, sysdate(), null, null, '隐患分级通知规则菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1996139632219136002, '隐患分级通知规则查询', 1996139632219136001, '1', '#', '', 1, 0, 'F', '0', '0', + 'safety:rule:query', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1996139632219136003, '隐患分级通知规则新增', 1996139632219136001, '2', '#', '', 1, 0, 'F', '0', '0', + 'safety:rule:add', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1996139632219136004, '隐患分级通知规则修改', 1996139632219136001, '3', '#', '', 1, 0, 'F', '0', '0', + 'safety:rule:edit', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1996139632219136005, '隐患分级通知规则删除', 1996139632219136001, '4', '#', '', 1, 0, 'F', '0', '0', + 'safety:rule:remove', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1996139632219136006, '隐患分级通知规则导出', 1996139632219136001, '5', '#', '', 1, 0, 'F', '0', '0', + 'safety:rule:export', '#', 103, 1, sysdate(), null, null, ''); + + +-- 隐患整改情况表 +DROP TABLE IF EXISTS hazard_hidden_danger_rectify; +create table hazard_hidden_danger_rectify +( + id bigint not null auto_increment comment '主键', + hidden_danger_id bigint not null comment '关联隐患ID', + rectify_count int not null comment '整改次数', + + rectify_deadline datetime not null comment '整改期限', + rectify_user_id bigint not null comment '整改人ID', + rectify_desc text null comment '整改说明', + rectify_files varchar(1024) null comment '整改附件', + rectify_time datetime null comment '完成整改时间', + + review_user_id bigint null comment '复查人ID', + review_desc text null comment '复查说明', + review_files varchar(1024) null comment '复查附件', + review_time datetime null comment '复查时间', + + review_status char default '0' not null comment '复查状态(1待复查 2复查通过 3复查不通过)', + `remark` varchar(512) null comment '备注', + `create_by` bigint null comment '创建者', + `update_by` bigint null comment '更新者', + `create_dept` bigint null comment '创建部门', + `create_time` datetime default CURRENT_TIMESTAMP null comment '创建时间', + `update_time` datetime default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment '更新时间', + PRIMARY KEY (`id`) USING BTREE, + index `idx_hidden_danger_id` (`hidden_danger_id` asc) using btree comment '关联隐患ID' +) comment '隐患整改情况'; + +-- 索引 + +create index idx_rectify_times + on hazard_hidden_danger_rectify (hidden_danger_id, rectify_count); + + +-- 菜单 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1996413868087308290, '隐患整改情况', '1996118434672001025', '1', 'hiddenDangerRectify', + 'safety/hiddenDangerRectify/index', 1, 0, 'C', '0', '0', 'safety:hiddenDangerRectify:list', '#', 103, 1, + sysdate(), null, null, '隐患整改情况菜单'); + +-- 按钮 SQL +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1996413868087308291, '隐患整改情况查询', 1996413868087308290, '1', '#', '', 1, 0, 'F', '0', '0', + 'safety:hiddenDangerRectify:query', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1996413868087308292, '隐患整改情况新增', 1996413868087308290, '2', '#', '', 1, 0, 'F', '0', '0', + 'safety:hiddenDangerRectify:add', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1996413868087308293, '隐患整改情况修改', 1996413868087308290, '3', '#', '', 1, 0, 'F', '0', '0', + 'safety:hiddenDangerRectify:edit', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1996413868087308294, '隐患整改情况删除', 1996413868087308290, '4', '#', '', 1, 0, 'F', '0', '0', + 'safety:hiddenDangerRectify:remove', '#', 103, 1, sysdate(), null, null, ''); + +insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, + status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark) +values (1996413868087308295, '隐患整改情况导出', 1996413868087308290, '5', '#', '', 1, 0, 'F', '0', '0', + 'safety:hiddenDangerRectify:export', '#', 103, 1, sysdate(), null, null, ''); + +DROP TABLE IF EXISTS mq_delay_task; +CREATE TABLE `mq_delay_task` +( + `id` BIGINT PRIMARY KEY COMMENT '主键', + `biz_type` VARCHAR(64) NOT NULL COMMENT '业务类型', + `biz_id` BIGINT NOT NULL COMMENT '业务ID', + `execute_time` DATETIME NOT NULL COMMENT '执行的时间点', + `status` TINYINT NOT NULL DEFAULT 0 COMMENT '任务状态 0未执行 1执行中 2执行成功 3执行失败', + `retry_count` INT NOT NULL DEFAULT 0 COMMENT '重试次数', + `max_retry` INT NOT NULL DEFAULT 3 COMMENT '最大重试次数', + `fail_reason` VARCHAR(1024) NULL COMMENT '失败原因' +) comment '延迟任务表';