From 3c0a849df75039debfd5017d4d717d6f8dec7640 Mon Sep 17 00:00:00 2001 From: tzy Date: Tue, 30 Dec 2025 21:00:03 +0800 Subject: [PATCH] jindie xiangguangognneng --- .../Add SQL Server Query Integration.md | 36 ++ .../导出Excel:BOM与工艺分离实现方案.md | 73 +++ ruoyi-admin/pom.xml | 13 +- .../main/java/com/ruoyi/RuoYiApplication.java | 7 + .../src/main/resources/application-dev.yml | 26 +- .../src/main/resources/application-prod.yml | 10 +- .../src/main/resources/application.yml | 2 + ruoyi-system/pom.xml | 5 + .../controller/BomDetailsController.java | 86 ++- .../controller/DeviceSpec100rController.java | 106 ++++ .../controller/DeviceSpec125rController.java | 106 ++++ .../controller/DeviceSpec150rController.java | 106 ++++ .../controller/DeviceSpec30dController.java | 106 ++++ .../controller/DeviceSpec30sController.java | 106 ++++ .../controller/DeviceSpec40rController.java | 106 ++++ .../controller/DeviceSpec40sController.java | 106 ++++ .../controller/DeviceSpec60rController.java | 106 ++++ .../controller/DeviceSpec80rController.java | 106 ++++ .../controller/EleMaterialsController.java | 44 +- .../controller/FigureSaveController.java | 11 +- .../KingdeeWorkCenterDataController.java | 182 ++++-- .../controller/MssqlQueryController.java | 37 ++ .../controller/PlanOrderController.java | 3 + .../controller/ProcessOrderProController.java | 472 +++++++++++++-- .../controller/ProcessRouteController.java | 108 ++-- .../ruoyi/system/domain/DeviceSpec100r.java | 173 ++++++ .../ruoyi/system/domain/DeviceSpec125r.java | 197 +++++++ .../ruoyi/system/domain/DeviceSpec150r.java | 213 +++++++ .../ruoyi/system/domain/DeviceSpec30d.java | 129 +++++ .../ruoyi/system/domain/DeviceSpec30s.java | 109 ++++ .../ruoyi/system/domain/DeviceSpec35r.java | 9 +- .../ruoyi/system/domain/DeviceSpec40r.java | 157 +++++ .../ruoyi/system/domain/DeviceSpec40s.java | 169 ++++++ .../ruoyi/system/domain/DeviceSpec60r.java | 157 +++++ .../ruoyi/system/domain/DeviceSpec80r.java | 161 ++++++ .../com/ruoyi/system/domain/FigureSave.java | 8 + .../system/domain/bo/DeviceSpec100rBo.java | 246 ++++++++ .../system/domain/bo/DeviceSpec125rBo.java | 282 +++++++++ .../system/domain/bo/DeviceSpec150rBo.java | 306 ++++++++++ .../system/domain/bo/DeviceSpec30dBo.java | 179 ++++++ .../system/domain/bo/DeviceSpec30sBo.java | 149 +++++ .../system/domain/bo/DeviceSpec35rBo.java | 11 + .../system/domain/bo/DeviceSpec40rBo.java | 222 +++++++ .../system/domain/bo/DeviceSpec40sBo.java | 240 ++++++++ .../system/domain/bo/DeviceSpec60rBo.java | 221 +++++++ .../system/domain/bo/DeviceSpec80rBo.java | 228 ++++++++ .../ruoyi/system/domain/bo/FigureSaveBo.java | 43 +- .../domain/bo/KingdeeWorkCenterDataBo.java | 25 +- .../system/domain/bo/SysConfigIniBo.java | 9 - .../ruoyi/system/domain/dto/ChengBeDTO.java | 50 ++ .../system/domain/dto/PlanPrcessNumDTO.java | 2 + .../dto/excuteDrawing/RigidChainModelDTO.java | 32 ++ .../system/domain/vo/DeviceSpec100rVo.java | 246 ++++++++ .../system/domain/vo/DeviceSpec125rVo.java | 282 +++++++++ .../system/domain/vo/DeviceSpec150rVo.java | 306 ++++++++++ .../system/domain/vo/DeviceSpec30dVo.java | 180 ++++++ .../system/domain/vo/DeviceSpec30sVo.java | 150 +++++ .../system/domain/vo/DeviceSpec35rVo.java | 10 + .../system/domain/vo/DeviceSpec40rVo.java | 222 +++++++ .../system/domain/vo/DeviceSpec40sVo.java | 240 ++++++++ .../system/domain/vo/DeviceSpec60rVo.java | 224 ++++++++ .../system/domain/vo/DeviceSpec80rVo.java | 228 ++++++++ .../domain/vo/ElectricalMaterialBomVO.java | 2 +- .../ruoyi/system/domain/vo/FigureSaveVo.java | 11 + .../domain/vo/KingdeeWorkCenterDataVo.java | 23 +- .../system/domain/vo/ProcessOrderProVo.java | 4 + .../system/jdmain/rouplan/FSubEntity.java | 5 + .../system/jdmain/rouplan/FidEntryIdDTO.java | 27 + .../ruoyi/system/jdmain/rouplan/Model.java | 1 - .../system/mapper/DeviceSpec100rMapper.java | 15 + .../system/mapper/DeviceSpec125rMapper.java | 15 + .../system/mapper/DeviceSpec150rMapper.java | 15 + .../system/mapper/DeviceSpec30dMapper.java | 15 + .../system/mapper/DeviceSpec30sMapper.java | 15 + .../system/mapper/DeviceSpec40rMapper.java | 15 + .../system/mapper/DeviceSpec40sMapper.java | 15 + .../system/mapper/DeviceSpec60rMapper.java | 15 + .../system/mapper/DeviceSpec80rMapper.java | 15 + .../java/com/ruoyi/system/runner/JdUtil.java | 225 +++++++- .../system/runner/updatePcessPlanConver.java | 44 +- .../service/IDeviceSpec100rService.java | 49 ++ .../service/IDeviceSpec125rService.java | 49 ++ .../service/IDeviceSpec150rService.java | 49 ++ .../system/service/IDeviceSpec30dService.java | 49 ++ .../system/service/IDeviceSpec30sService.java | 49 ++ .../system/service/IDeviceSpec40rService.java | 49 ++ .../system/service/IDeviceSpec40sService.java | 49 ++ .../system/service/IDeviceSpec60rService.java | 49 ++ .../system/service/IDeviceSpec80rService.java | 49 ++ .../service/IProcessOrderProService.java | 6 +- .../system/service/IProcessRouteService.java | 4 + .../service/IProductionOrderService.java | 4 + .../system/service/MssqlQueryService.java | 139 +++++ .../impl/DeviceSpec100rServiceImpl.java | 144 +++++ .../impl/DeviceSpec125rServiceImpl.java | 150 +++++ .../impl/DeviceSpec150rServiceImpl.java | 154 +++++ .../impl/DeviceSpec30dServiceImpl.java | 133 +++++ .../impl/DeviceSpec30sServiceImpl.java | 127 ++++ .../impl/DeviceSpec40rServiceImpl.java | 140 +++++ .../impl/DeviceSpec40sServiceImpl.java | 143 +++++ .../impl/DeviceSpec60rServiceImpl.java | 139 +++++ .../impl/DeviceSpec80rServiceImpl.java | 140 +++++ .../service/impl/EleMaterialsServiceImpl.java | 45 +- .../impl/ProcessOrderProServiceImpl.java | 540 ++++++++++++++++-- .../service/impl/ProcessRouteServiceImpl.java | 92 ++- .../impl/ProductionOrderServiceImpl.java | 22 + .../main/resources/jpg/安全库存数据模板.xlsx | Bin 0 -> 13637 bytes .../src/main/resources/jpg/工段数据模板.xlsx | Bin 0 -> 12680 bytes .../main/resources/jpg/延期工段数据模板.xlsx | Bin 0 -> 13314 bytes .../mapper/system/DeviceSpec100rMapper.xml | 52 ++ .../mapper/system/DeviceSpec125rMapper.xml | 58 ++ .../mapper/system/DeviceSpec150rMapper.xml | 62 ++ .../mapper/system/DeviceSpec30dMapper.xml | 41 ++ .../mapper/system/DeviceSpec30sMapper.xml | 36 ++ .../mapper/system/DeviceSpec35rMapper.xml | 2 + .../mapper/system/DeviceSpec40rMapper.xml | 48 ++ .../mapper/system/DeviceSpec40sMapper.xml | 51 ++ .../mapper/system/DeviceSpec60rMapper.xml | 48 ++ .../mapper/system/DeviceSpec80rMapper.xml | 49 ++ .../mapper/system/FigureSaveMapper.xml | 2 + 120 files changed, 11024 insertions(+), 349 deletions(-) create mode 100644 .trae/documents/Add SQL Server Query Integration.md create mode 100644 .trae/documents/导出Excel:BOM与工艺分离实现方案.md create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec100rController.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec125rController.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec150rController.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec30dController.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec30sController.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec40rController.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec40sController.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec60rController.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec80rController.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/controller/MssqlQueryController.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec100r.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec125r.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec150r.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec30d.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec30s.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec40r.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec40s.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec60r.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec80r.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec100rBo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec125rBo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec150rBo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec30dBo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec30sBo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec40rBo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec40sBo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec60rBo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec80rBo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/ChengBeDTO.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/excuteDrawing/RigidChainModelDTO.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec100rVo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec125rVo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec150rVo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec30dVo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec30sVo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec40rVo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec40sVo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec60rVo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec80rVo.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/jdmain/rouplan/FidEntryIdDTO.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec100rMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec125rMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec150rMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec30dMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec30sMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec40rMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec40sMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec60rMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec80rMapper.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec100rService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec125rService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec150rService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec30dService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec30sService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec40rService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec40sService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec60rService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec80rService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/MssqlQueryService.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec100rServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec125rServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec150rServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec30dServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec30sServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec40rServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec40sServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec60rServiceImpl.java create mode 100644 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec80rServiceImpl.java create mode 100644 ruoyi-system/src/main/resources/jpg/安全库存数据模板.xlsx create mode 100644 ruoyi-system/src/main/resources/jpg/工段数据模板.xlsx create mode 100644 ruoyi-system/src/main/resources/jpg/延期工段数据模板.xlsx create mode 100644 ruoyi-system/src/main/resources/mapper/system/DeviceSpec100rMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/system/DeviceSpec125rMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/system/DeviceSpec150rMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/system/DeviceSpec30dMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/system/DeviceSpec30sMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/system/DeviceSpec40rMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/system/DeviceSpec40sMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/system/DeviceSpec60rMapper.xml create mode 100644 ruoyi-system/src/main/resources/mapper/system/DeviceSpec80rMapper.xml diff --git a/.trae/documents/Add SQL Server Query Integration.md b/.trae/documents/Add SQL Server Query Integration.md new file mode 100644 index 0000000..0dff9f6 --- /dev/null +++ b/.trae/documents/Add SQL Server Query Integration.md @@ -0,0 +1,36 @@ +## 配置示例(建议) +- 新增独立数据源前缀:`spring.datasource.mssql`(与主库区分) +- Spring Boot 标准键名使用短横线:`driver-class-name` +- SQL Server URL 推荐:`jdbc:sqlserver://主机:端口;databaseName=库名;encrypt=false;trustServerCertificate=true` +- 不要使用 MySQL 专用参数(如 `rewriteBatchedStatements`) + +示例: +``` +spring: + datasource: + mssql: + driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver + url: jdbc:sqlserver://localhost:1433;databaseName=tempdb;encrypt=false;trustServerCertificate=true + username: SA + password: root + hikari: + maximum-pool-size: 10 + connection-timeout: 30000 + read-only: true +``` + +说明: +- `DatabaseName` 可写为 `databaseName`(微软驱动两者等效,统一小写更常见) +- `SelectMethod=cursor` 是旧驱动参数,通常不需要;保留仅在游标大结果集特殊场景 +- `rewriteBatchedStatements` 是 MySQL 参数,不适用于 SQL Server,需去掉 +- 生产环境请勿使用 `SA/root`,改为只读账号并限制权限 + +## 集成方式 +- 若项目已用动态数据源:注册名为 `mssql` 的数据源,查询处使用 `@DS("mssql")` +- 若项目未用动态数据源:为上述 `spring.datasource.mssql` 创建 `DataSource` + `JdbcTemplate` Bean,Service 里使用模板执行参数化 SQL + +## 验证步骤 +- 启动后编写一条简单查询(TOP 10)验证连通 +- 确认连接池参数和超时生效;异常时输出清晰日志 + +确认后我按你选择的“动态数据源/JdbcTemplate”方式,补全配置、注册 Bean,并提供示例查询接口与 Service。 \ No newline at end of file diff --git a/.trae/documents/导出Excel:BOM与工艺分离实现方案.md b/.trae/documents/导出Excel:BOM与工艺分离实现方案.md new file mode 100644 index 0000000..8805e2d --- /dev/null +++ b/.trae/documents/导出Excel:BOM与工艺分离实现方案.md @@ -0,0 +1,73 @@ +## 目标 +- 在同一个 Sheet 中导出两块数据: + - 区域A:材料BOM(每物料1条) + - 区域B:工艺路线(每工序1条,完整展示所有步骤) +- 保持原始物料顺序;工艺按 `processNo` 升序。 + +## 布局设计(同一Sheet) +- 区域A(上方):占位名 `KingdeeBomData` + - 列建议: + - 生产令号 `routeDescription` + - 物料编码 `materialCode` + - 名称 `materialName` + - 材质 `material` + - 单重KG `discWeight` + - 材料BOM物料编码 `rawMaterialCode` + - 材料BOM物料名称 `rawMaterialName` + - BOM材质 `bomMaterial` + - 材料单重KG `bomDanZhong` + - 用量 `discUsage` + - 单位 `bomUnit` +- 区域B(下方,留若干空行与A区分):占位名 `ProcessRouteExcelDTO` + - 列建议: + - 生产令号 `routeDescription` + - 物料编码 `materialCode` + - 名称 `materialName` + - 材质 `material` + - 单重KG `discWeight` + - 工序号 `processNo` + - 工作中心 `workCenter` + - 工序名称 `processName` + - 工序说明 `processDescription` + - 工序控制 `processControl` + - 活动时长 `activityDuration` + - 活动单位 `activityUnit` + - 单台数量 `unitQuantity` + - 本批数量 `batchQuantity` + +## 数据生成逻辑 +- BOM区(每物料1条): + - 取最新版本:`readGetTheLatestVersion(materialCode)` + - 取 `getMaterialUseXByVer(version)` 的第一条(或按你后续指定规则汇总)作为该物料的BOM条目 +- 工艺区(每工序1条): + - 取 `getRouteGuDing(materialCode)` 全量,按 `processNo` 升序展开;不写入任何BOM字段 +- 两区均附带物料基础字段(生产令号、编码、名称、材质、单重、数量等) + +## 控制器改造要点(exportRoute2) +1. 遍历 `routeList`(保序): + - 构建 `kingdeeBomRows`(List>) + - 构建 `excelDTOList`(工艺 ProcessRouteExcelDTO 列表) +2. 动态映射: + - `DynamicDataMapping.createOneDataList("KingdeeBomData", kingdeeBomRows)` + - `DynamicDataMapping.createOneDataList("ProcessRouteExcelDTO", evoRouteDataList)` +3. 模板:在同一Sheet中放置两个表格块,分别绑定以上占位名 + +## 排序与顺序 +- 物料:沿用 `routeList` 的顺序 +- 工艺:`processNo` 升序,`null` 置后 + +## 边界情况 +- 无工艺:B区为空,但A区仍输出该物料的BOM +- 无BOM:A区不输出该物料;B区正常输出工艺 +- 版本查询失败:A区跳过该物料或显示“未查询到”标记 + +## 验证 +- 用两种物料进行导出测试:一个多工序、一个单工序;核对两区行数与内容 +- 对比你提供的示例Excel,确认列头、顺序与格式 + +## 请你确认/提供 +- 同一Sheet模板文件或示意图:两块区域位置与占位名是否采用 `KingdeeBomData` 和 `ProcessRouteExcelDTO` +- BOM“一条数据”的取值方式:直接取第一条还是需要汇总(若后续会出现多子项) +- 是否需要在两区之间加入分隔行/标题行的样式要求 + +确认后我将按该方案更新导出逻辑并给你可下载的Excel。 \ No newline at end of file diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index f52b9a9..77c9c48 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -100,11 +100,18 @@ + + com.microsoft.sqlserver + mssql-jdbc + 6.4.0.jre8 + - - - + + com.aliyun + dingtalk + 2.2.41 + diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java index a2a8bed..a69305a 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java @@ -1,5 +1,6 @@ package com.ruoyi; +import org.apache.poi.openxml4j.util.ZipSecureFile; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -20,7 +21,13 @@ import org.springframework.cache.annotation.EnableCaching; @MapperScan("com.ruoyi.**.mapper") @EnableCaching public class RuoYiApplication { + static { + // 全局放宽,启动时执行一次即可 + ZipSecureFile.setMaxFileCount(100000); + ZipSecureFile.setMinInflateRatio(0.005); + } public static void main(String[] args) { + System.setProperty("spring.devtools.restart.enabled", "false"); SpringApplication application = new SpringApplication(RuoYiApplication.class); application.setApplicationStartup(new BufferingApplicationStartup(2048)); diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index 367c8f0..74e4414 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -62,26 +62,12 @@ spring: url: jdbc:mysql://192.168.5.121:3306/item_retrieval_salve?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true username: root password: root -# oracle: -# type: ${spring.datasource.type} -# driverClassName: oracle.jdbc.OracleDriver -# url: jdbc:oracle:thin:@//localhost:1521/XE -# username: ROOT -# password: root -# hikari: -# connectionTestQuery: SELECT 1 FROM DUAL -# 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 + sqlserver: + type: com.zaxxer.hikari.HikariDataSource + driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver + url: jdbc:sqlserver://192.168.5.8:1433;databaseName=AIS20241010133631;encrypt=false;trustServerCertificate=true + username: sa + password: 1a! hikari: # 最大连接池数量 maxPoolSize: 20 diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml index bcb390f..7708ec3 100644 --- a/ruoyi-admin/src/main/resources/application-prod.yml +++ b/ruoyi-admin/src/main/resources/application-prod.yml @@ -52,7 +52,7 @@ spring: driverClassName: com.mysql.cj.jdbc.Driver # jdbc 所有参数配置参考 https://lionli.blog.csdn.net/article/details/122018562 # rewriteBatchedStatements=true 批处理优化 大幅提升批量插入更新删除性能(对数据库有性能损耗 使用批量操作应考虑性能问题) - #url: jdbc:mysql://localhost:3306/item_retrieval-evo?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true + # url: jdbc:mysql://localhost:3306/item_retrieval-evo?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true url: jdbc:mysql://192.168.5.121:3306/item_retrieval-evo?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true username: root password: root @@ -61,10 +61,16 @@ spring: lazy: true type: com.zaxxer.hikari.HikariDataSource driverClassName: com.mysql.cj.jdbc.Driver - # url: jdbc:mysql://localhost:3306/item_retrieval_salve?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true + #url: jdbc:mysql://localhost:3306/item_retrieval_salve?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true url: jdbc:mysql://192.168.5.121:3306/item_retrieval_salve?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true username: root password: root + sqlserver: + type: com.zaxxer.hikari.HikariDataSource + driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver + url: jdbc:sqlserver://192.168.5.8:1433;databaseName=AIS20241010133631;encrypt=false;trustServerCertificate=true + username: sa + password: 1a! # oracle: # type: ${spring.datasource.type} # driverClassName: oracle.jdbc.OracleDriver diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index a1afa3b..0d28e11 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -289,3 +289,5 @@ management: show-details: ALWAYS logfile: external-file: ./logs/sys-console.log +dingtalk: + diff --git a/ruoyi-system/pom.xml b/ruoyi-system/pom.xml index 19a7e60..40ef57e 100644 --- a/ruoyi-system/pom.xml +++ b/ruoyi-system/pom.xml @@ -121,6 +121,11 @@ org.assertj assertj-core + + com.microsoft.sqlserver + mssql-jdbc + 12.4.2.jre8 + diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/BomDetailsController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/BomDetailsController.java index cf7ade0..7d19383 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controller/BomDetailsController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/BomDetailsController.java @@ -21,6 +21,7 @@ import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.validate.AddGroup; import com.ruoyi.common.core.validate.EditGroup; import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.dto.*; import com.ruoyi.common.utils.JdUtils; import com.ruoyi.common.utils.poi.ExcelUtil; @@ -212,7 +213,7 @@ public class BomDetailsController extends BaseController { */ @Log(title = "明细导入", businessType = BusinessType.IMPORT) - @SaCheckPermission("system:details:import") + @SaCheckPermission("system:details:importData") @PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public R importData(@RequestPart("file") MultipartFile file) throws Exception { List bomDetailsVos = ExcelUtil.importExcel(file.getInputStream(), BomDetailsVo.class); @@ -1778,8 +1779,10 @@ public class BomDetailsController extends BaseController { // 创建SubHeadEntity对象,并加入Model JsonObject subHeadEntity = new JsonObject(); model.add("SubHeadEntity", subHeadEntity); - - subHeadEntity.addProperty("FErpClsID", states); + if (bomDetails1.getWareHouse().contains("伊特")){ + subHeadEntity.addProperty("FErpClsID", "2"); + } + subHeadEntity.addProperty("FErpClsID", "1"); subHeadEntity.addProperty("FFeatureItem", "1"); // 创建FCategoryID对象,并加入SubHeadEntity @@ -2076,7 +2079,7 @@ public class BomDetailsController extends BaseController { // 创建FBOMUnitId对象,并加入SubHeadEntity5 JsonObject fBOMUnitId = new JsonObject(); - switch (bomDetails1.getWareHouse()) { + switch (bomDetails1.getRemarks()) { case "把": fBaseUnitId.addProperty("FNumber", "002"); break; @@ -2185,30 +2188,57 @@ public class BomDetailsController extends BaseController { @Log(title = "导入电气bom", businessType = BusinessType.IMPORT) @SaCheckPermission("system:details:importElectricalBom") @PostMapping(value = "/importElectricalBom", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) - public void importElectricalBom(@RequestPart("file") MultipartFile file) throws Exception { - List electricalMaterialBomVOS = ExcelUtil.importExcel(file.getInputStream(), ElectricalMaterialBomVO.class); - List list = new ArrayList<>(); - for (ElectricalMaterialBomVO bomVO : electricalMaterialBomVOS) { - BomDetails bomDetails = new BomDetails(); - bomDetails.setTotalWeight(bomVO.getProductionOrderNo()); - bomDetails.setFNumber(bomVO.getParentDrawingNo()); - bomDetails.setFName(bomVO.getParentPart()); - bomDetails.setPartNumber(bomVO.getDrawingNo()); - bomDetails.setName(bomVO.getDrawingName()); - bomDetails.setMaterial(bomVO.getModel());// - bomDetails.setWareHouse(bomVO.getBrand()); - bomDetails.setStats("外购"); - String quantity = bomVO.getQuantity().toString(); - bomDetails.setQuantity(quantity); - bomDetails.setRemarks(bomVO.getUnit()); - bomDetails.setUpdateTime(new Date()); - bomDetails.setBomType("1");//0 是生产bom 1 是电气bom - list.add(bomDetails); - } - List bomDetailsVos1 = BeanUtil.copyToList(list, BomDetailsVo.class); - List bomDetails = saveBomDetails(bomDetailsVos1); - bomDetailsMapper.insertBatch(bomDetails); + public R> importElectricalBom(@RequestPart("file") MultipartFile file) { + Map resp = new HashMap<>(); + try { + if (file == null || file.isEmpty() || StringUtils.isEmpty(file.getOriginalFilename())) { + return R.fail("请选择有效的Excel文件"); + } + String filename = file.getOriginalFilename(); + String suffix = filename.substring(filename.lastIndexOf('.') + 1).toLowerCase(); + if (!("xls".equals(suffix) || "xlsx".equals(suffix))) { + return R.fail("仅支持Excel文件(xls/xlsx)"); + } + List rows = ExcelUtil.importExcel(file.getInputStream(), ElectricalMaterialBomVO.class); + int total = rows != null ? rows.size() : 0; + List list = new ArrayList<>(); + if (rows != null) { + for (ElectricalMaterialBomVO bomVO : rows) { + BomDetails bomDetails = new BomDetails(); + bomDetails.setTotalWeight(bomVO.getProductionOrderNo()); + bomDetails.setFNumber(bomVO.getParentDrawingNo()); + bomDetails.setFName(bomVO.getParentPart()); + bomDetails.setPartNumber(bomVO.getDrawingNo()); + bomDetails.setName(bomVO.getDrawingName()); + bomDetails.setMaterial(bomVO.getModel()); + bomDetails.setWareHouse(bomVO.getBrand()); + bomDetails.setStats("外购"); + bomDetails.setQuantity(bomVO.getQuantity() == null ? null : bomVO.getQuantity().toString()); + bomDetails.setRemarks(bomVO.getUnit()); + bomDetails.setUpdateTime(new Date()); + bomDetails.setQuantity(String.valueOf(bomVO.getQuantity())); + bomDetails.setDenominator(1.0); + bomDetails.setBomType("1"); + list.add(bomDetails); + } + } + + List vos = BeanUtil.copyToList(list, BomDetailsVo.class); + List toInsert = saveBomDetails(vos); + boolean saved = false; + if (!toInsert.isEmpty()) { + saved = bomDetailsMapper.insertBatch(toInsert); + } + + resp.put("totalRows", total); + resp.put("parsedRows", list.size()); + resp.put("savedRows", saved); + resp.put("message", "导入完成"); + return R.ok(resp); + } catch (Exception e) { + return R.fail("导入失败: " + e.getMessage()); + } } // 保存到 BomDetails 表中 @@ -2232,7 +2262,7 @@ public class BomDetailsController extends BaseController { } return materialsToAdd; } - @Log(title = "推送工艺工序") + @Log(title = "查看BOM上传日志") @SaCheckPermission("system:route:viewGetBomUploadStatus") @PostMapping("/viewGetBomUploadStatus") public R viewGetBomUploadStatus(@RequestParam String rooteProdet) { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec100rController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec100rController.java new file mode 100644 index 0000000..2e8522a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec100rController.java @@ -0,0 +1,106 @@ +package com.ruoyi.system.controller; + +import java.util.List; +import java.util.Arrays; + +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.domain.vo.DeviceSpec100rVo; +import com.ruoyi.system.domain.bo.DeviceSpec100rBo; +import com.ruoyi.system.service.IDeviceSpec100rService; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 100R设备规格参数 + * + * @author ruoyi + * @date 2025-12-03 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/spec100r") +public class DeviceSpec100rController extends BaseController { + + private final IDeviceSpec100rService iDeviceSpec100rService; + + /** + * 查询100R设备规格参数列表 + */ + @SaCheckPermission("system:spec100r:list") + @GetMapping("/list") + public TableDataInfo list(DeviceSpec100rBo bo, PageQuery pageQuery) { + return iDeviceSpec100rService.queryPageList(bo, pageQuery); + } + + /** + * 导出100R设备规格参数列表 + */ + @SaCheckPermission("system:spec100r:export") + @Log(title = "100R设备规格参数", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(DeviceSpec100rBo bo, HttpServletResponse response) { + List list = iDeviceSpec100rService.queryList(bo); + ExcelUtil.exportExcel(list, "100R设备规格参数", DeviceSpec100rVo.class, response); + } + + /** + * 获取100R设备规格参数详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:spec100r:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(iDeviceSpec100rService.queryById(id)); + } + + /** + * 新增100R设备规格参数 + */ + @SaCheckPermission("system:spec100r:add") + @Log(title = "100R设备规格参数", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody DeviceSpec100rBo bo) { + return toAjax(iDeviceSpec100rService.insertByBo(bo)); + } + + /** + * 修改100R设备规格参数 + */ + @SaCheckPermission("system:spec100r:edit") + @Log(title = "100R设备规格参数", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody DeviceSpec100rBo bo) { + return toAjax(iDeviceSpec100rService.updateByBo(bo)); + } + + /** + * 删除100R设备规格参数 + * + * @param ids 主键串 + */ + @SaCheckPermission("system:spec100r:remove") + @Log(title = "100R设备规格参数", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(iDeviceSpec100rService.deleteWithValidByIds(Arrays.asList(ids), true)); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec125rController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec125rController.java new file mode 100644 index 0000000..80a16d5 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec125rController.java @@ -0,0 +1,106 @@ +package com.ruoyi.system.controller; + +import java.util.List; +import java.util.Arrays; + +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.domain.vo.DeviceSpec125rVo; +import com.ruoyi.system.domain.bo.DeviceSpec125rBo; +import com.ruoyi.system.service.IDeviceSpec125rService; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 125R设备规格参数 + * + * @author ruoyi + * @date 2025-12-06 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/spec125r") +public class DeviceSpec125rController extends BaseController { + + private final IDeviceSpec125rService iDeviceSpec125rService; + + /** + * 查询125R设备规格参数列表 + */ + @SaCheckPermission("system:spec125r:list") + @GetMapping("/list") + public TableDataInfo list(DeviceSpec125rBo bo, PageQuery pageQuery) { + return iDeviceSpec125rService.queryPageList(bo, pageQuery); + } + + /** + * 导出125R设备规格参数列表 + */ + @SaCheckPermission("system:spec125r:export") + @Log(title = "125R设备规格参数", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(DeviceSpec125rBo bo, HttpServletResponse response) { + List list = iDeviceSpec125rService.queryList(bo); + ExcelUtil.exportExcel(list, "125R设备规格参数", DeviceSpec125rVo.class, response); + } + + /** + * 获取125R设备规格参数详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:spec125r:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(iDeviceSpec125rService.queryById(id)); + } + + /** + * 新增125R设备规格参数 + */ + @SaCheckPermission("system:spec125r:add") + @Log(title = "125R设备规格参数", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody DeviceSpec125rBo bo) { + return toAjax(iDeviceSpec125rService.insertByBo(bo)); + } + + /** + * 修改125R设备规格参数 + */ + @SaCheckPermission("system:spec125r:edit") + @Log(title = "125R设备规格参数", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody DeviceSpec125rBo bo) { + return toAjax(iDeviceSpec125rService.updateByBo(bo)); + } + + /** + * 删除125R设备规格参数 + * + * @param ids 主键串 + */ + @SaCheckPermission("system:spec125r:remove") + @Log(title = "125R设备规格参数", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(iDeviceSpec125rService.deleteWithValidByIds(Arrays.asList(ids), true)); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec150rController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec150rController.java new file mode 100644 index 0000000..461aca4 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec150rController.java @@ -0,0 +1,106 @@ +package com.ruoyi.system.controller; + +import java.util.List; +import java.util.Arrays; + +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.domain.vo.DeviceSpec150rVo; +import com.ruoyi.system.domain.bo.DeviceSpec150rBo; +import com.ruoyi.system.service.IDeviceSpec150rService; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 150R设备规格参数 + * + * @author ruoyi + * @date 2025-12-06 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/spec150r") +public class DeviceSpec150rController extends BaseController { + + private final IDeviceSpec150rService iDeviceSpec150rService; + + /** + * 查询150R设备规格参数列表 + */ + @SaCheckPermission("system:spec150r:list") + @GetMapping("/list") + public TableDataInfo list(DeviceSpec150rBo bo, PageQuery pageQuery) { + return iDeviceSpec150rService.queryPageList(bo, pageQuery); + } + + /** + * 导出150R设备规格参数列表 + */ + @SaCheckPermission("system:spec150r:export") + @Log(title = "150R设备规格参数", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(DeviceSpec150rBo bo, HttpServletResponse response) { + List list = iDeviceSpec150rService.queryList(bo); + ExcelUtil.exportExcel(list, "150R设备规格参数", DeviceSpec150rVo.class, response); + } + + /** + * 获取150R设备规格参数详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:spec150r:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(iDeviceSpec150rService.queryById(id)); + } + + /** + * 新增150R设备规格参数 + */ + @SaCheckPermission("system:spec150r:add") + @Log(title = "150R设备规格参数", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody DeviceSpec150rBo bo) { + return toAjax(iDeviceSpec150rService.insertByBo(bo)); + } + + /** + * 修改150R设备规格参数 + */ + @SaCheckPermission("system:spec150r:edit") + @Log(title = "150R设备规格参数", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody DeviceSpec150rBo bo) { + return toAjax(iDeviceSpec150rService.updateByBo(bo)); + } + + /** + * 删除150R设备规格参数 + * + * @param ids 主键串 + */ + @SaCheckPermission("system:spec150r:remove") + @Log(title = "150R设备规格参数", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(iDeviceSpec150rService.deleteWithValidByIds(Arrays.asList(ids), true)); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec30dController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec30dController.java new file mode 100644 index 0000000..4fe5886 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec30dController.java @@ -0,0 +1,106 @@ +package com.ruoyi.system.controller; + +import java.util.List; +import java.util.Arrays; + +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.domain.vo.DeviceSpec30dVo; +import com.ruoyi.system.domain.bo.DeviceSpec30dBo; +import com.ruoyi.system.service.IDeviceSpec30dService; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 30D设备规格参数 + * + * @author ruoyi + * @date 2025-12-03 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/spec30d") +public class DeviceSpec30dController extends BaseController { + + private final IDeviceSpec30dService iDeviceSpec30dService; + + /** + * 查询device_spec_30D 列表 + */ + @SaCheckPermission("system:spec30d:list") + @GetMapping("/list") + public TableDataInfo list(DeviceSpec30dBo bo, PageQuery pageQuery) { + return iDeviceSpec30dService.queryPageList(bo, pageQuery); + } + + /** + * 导出device_spec_30D 列表 + */ + @SaCheckPermission("system:spec30d:export") + @Log(title = "device_spec_30D ", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(DeviceSpec30dBo bo, HttpServletResponse response) { + List list = iDeviceSpec30dService.queryList(bo); + ExcelUtil.exportExcel(list, "device_spec_30D ", DeviceSpec30dVo.class, response); + } + + /** + * 获取device_spec_30D 详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:spec30d:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(iDeviceSpec30dService.queryById(id)); + } + + /** + * 新增device_spec_30D + */ + @SaCheckPermission("system:spec30d:add") + @Log(title = "device_spec_30D ", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody DeviceSpec30dBo bo) { + return toAjax(iDeviceSpec30dService.insertByBo(bo)); + } + + /** + * 修改device_spec_30D + */ + @SaCheckPermission("system:spec30d:edit") + @Log(title = "device_spec_30D ", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody DeviceSpec30dBo bo) { + return toAjax(iDeviceSpec30dService.updateByBo(bo)); + } + + /** + * 删除device_spec_30D + * + * @param ids 主键串 + */ + @SaCheckPermission("system:spec30d:remove") + @Log(title = "device_spec_30D ", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(iDeviceSpec30dService.deleteWithValidByIds(Arrays.asList(ids), true)); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec30sController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec30sController.java new file mode 100644 index 0000000..51d4914 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec30sController.java @@ -0,0 +1,106 @@ +package com.ruoyi.system.controller; + +import java.util.List; +import java.util.Arrays; + +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.domain.vo.DeviceSpec30sVo; +import com.ruoyi.system.domain.bo.DeviceSpec30sBo; +import com.ruoyi.system.service.IDeviceSpec30sService; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 30S设备规格参数 + * + * @author ruoyi + * @date 2025-12-03 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/spec30s") +public class DeviceSpec30sController extends BaseController { + + private final IDeviceSpec30sService iDeviceSpec30sService; + + /** + * 查询30S设备规格参数列表 + */ + @SaCheckPermission("system:spec30s:list") + @GetMapping("/list") + public TableDataInfo list(DeviceSpec30sBo bo, PageQuery pageQuery) { + return iDeviceSpec30sService.queryPageList(bo, pageQuery); + } + + /** + * 导出30S设备规格参数列表 + */ + @SaCheckPermission("system:spec30s:export") + @Log(title = "30S设备规格参数", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(DeviceSpec30sBo bo, HttpServletResponse response) { + List list = iDeviceSpec30sService.queryList(bo); + ExcelUtil.exportExcel(list, "30S设备规格参数", DeviceSpec30sVo.class, response); + } + + /** + * 获取30S设备规格参数详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:spec30s:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(iDeviceSpec30sService.queryById(id)); + } + + /** + * 新增30S设备规格参数 + */ + @SaCheckPermission("system:spec30s:add") + @Log(title = "30S设备规格参数", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody DeviceSpec30sBo bo) { + return toAjax(iDeviceSpec30sService.insertByBo(bo)); + } + + /** + * 修改30S设备规格参数 + */ + @SaCheckPermission("system:spec30s:edit") + @Log(title = "30S设备规格参数", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody DeviceSpec30sBo bo) { + return toAjax(iDeviceSpec30sService.updateByBo(bo)); + } + + /** + * 删除30S设备规格参数 + * + * @param ids 主键串 + */ + @SaCheckPermission("system:spec30s:remove") + @Log(title = "30S设备规格参数", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(iDeviceSpec30sService.deleteWithValidByIds(Arrays.asList(ids), true)); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec40rController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec40rController.java new file mode 100644 index 0000000..7d27a0d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec40rController.java @@ -0,0 +1,106 @@ +package com.ruoyi.system.controller; + +import java.util.List; +import java.util.Arrays; + +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.domain.vo.DeviceSpec40rVo; +import com.ruoyi.system.domain.bo.DeviceSpec40rBo; +import com.ruoyi.system.service.IDeviceSpec40rService; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 40R设备规格参数 + * + * @author ruoyi + * @date 2025-12-03 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/spec40r") +public class DeviceSpec40rController extends BaseController { + + private final IDeviceSpec40rService iDeviceSpec40rService; + + /** + * 查询40R设备规格参数列表 + */ + @SaCheckPermission("system:spec40r:list") + @GetMapping("/list") + public TableDataInfo list(DeviceSpec40rBo bo, PageQuery pageQuery) { + return iDeviceSpec40rService.queryPageList(bo, pageQuery); + } + + /** + * 导出40R设备规格参数列表 + */ + @SaCheckPermission("system:spec40r:export") + @Log(title = "40R设备规格参数", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(DeviceSpec40rBo bo, HttpServletResponse response) { + List list = iDeviceSpec40rService.queryList(bo); + ExcelUtil.exportExcel(list, "40R设备规格参数", DeviceSpec40rVo.class, response); + } + + /** + * 获取40R设备规格参数详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:spec40r:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(iDeviceSpec40rService.queryById(id)); + } + + /** + * 新增40R设备规格参数 + */ + @SaCheckPermission("system:spec40r:add") + @Log(title = "40R设备规格参数", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody DeviceSpec40rBo bo) { + return toAjax(iDeviceSpec40rService.insertByBo(bo)); + } + + /** + * 修改40R设备规格参数 + */ + @SaCheckPermission("system:spec40r:edit") + @Log(title = "40R设备规格参数", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody DeviceSpec40rBo bo) { + return toAjax(iDeviceSpec40rService.updateByBo(bo)); + } + + /** + * 删除40R设备规格参数 + * + * @param ids 主键串 + */ + @SaCheckPermission("system:spec40r:remove") + @Log(title = "40R设备规格参数", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(iDeviceSpec40rService.deleteWithValidByIds(Arrays.asList(ids), true)); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec40sController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec40sController.java new file mode 100644 index 0000000..57aa60a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec40sController.java @@ -0,0 +1,106 @@ +package com.ruoyi.system.controller; + +import java.util.List; +import java.util.Arrays; + +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.domain.vo.DeviceSpec40sVo; +import com.ruoyi.system.domain.bo.DeviceSpec40sBo; +import com.ruoyi.system.service.IDeviceSpec40sService; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 40S设备规格参数 + * + * @author ruoyi + * @date 2025-12-03 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/spec40s") +public class DeviceSpec40sController extends BaseController { + + private final IDeviceSpec40sService iDeviceSpec40sService; + + /** + * 查询40S设备规格参数列表 + */ + @SaCheckPermission("system:spec40s:list") + @GetMapping("/list") + public TableDataInfo list(DeviceSpec40sBo bo, PageQuery pageQuery) { + return iDeviceSpec40sService.queryPageList(bo, pageQuery); + } + + /** + * 导出40S设备规格参数列表 + */ + @SaCheckPermission("system:spec40s:export") + @Log(title = "40S设备规格参数", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(DeviceSpec40sBo bo, HttpServletResponse response) { + List list = iDeviceSpec40sService.queryList(bo); + ExcelUtil.exportExcel(list, "40S设备规格参数", DeviceSpec40sVo.class, response); + } + + /** + * 获取40S设备规格参数详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:spec40s:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(iDeviceSpec40sService.queryById(id)); + } + + /** + * 新增40S设备规格参数 + */ + @SaCheckPermission("system:spec40s:add") + @Log(title = "40S设备规格参数", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody DeviceSpec40sBo bo) { + return toAjax(iDeviceSpec40sService.insertByBo(bo)); + } + + /** + * 修改40S设备规格参数 + */ + @SaCheckPermission("system:spec40s:edit") + @Log(title = "40S设备规格参数", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody DeviceSpec40sBo bo) { + return toAjax(iDeviceSpec40sService.updateByBo(bo)); + } + + /** + * 删除40S设备规格参数 + * + * @param ids 主键串 + */ + @SaCheckPermission("system:spec40s:remove") + @Log(title = "40S设备规格参数", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(iDeviceSpec40sService.deleteWithValidByIds(Arrays.asList(ids), true)); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec60rController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec60rController.java new file mode 100644 index 0000000..a464c05 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec60rController.java @@ -0,0 +1,106 @@ +package com.ruoyi.system.controller; + +import java.util.List; +import java.util.Arrays; + +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.domain.vo.DeviceSpec60rVo; +import com.ruoyi.system.domain.bo.DeviceSpec60rBo; +import com.ruoyi.system.service.IDeviceSpec60rService; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 60R设备规格参数 + * + * @author ruoyi + * @date 2025-12-03 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/spec60r") +public class DeviceSpec60rController extends BaseController { + + private final IDeviceSpec60rService iDeviceSpec60rService; + + /** + * 查询60R设备规格参数列表 + */ + @SaCheckPermission("system:spec60r:list") + @GetMapping("/list") + public TableDataInfo list(DeviceSpec60rBo bo, PageQuery pageQuery) { + return iDeviceSpec60rService.queryPageList(bo, pageQuery); + } + + /** + * 导出60R设备规格参数列表 + */ + @SaCheckPermission("system:spec60r:export") + @Log(title = "60R设备规格参数", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(DeviceSpec60rBo bo, HttpServletResponse response) { + List list = iDeviceSpec60rService.queryList(bo); + ExcelUtil.exportExcel(list, "60R设备规格参数", DeviceSpec60rVo.class, response); + } + + /** + * 获取60R设备规格参数详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:spec60r:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(iDeviceSpec60rService.queryById(id)); + } + + /** + * 新增60R设备规格参数 + */ + @SaCheckPermission("system:spec60r:add") + @Log(title = "60R设备规格参数", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody DeviceSpec60rBo bo) { + return toAjax(iDeviceSpec60rService.insertByBo(bo)); + } + + /** + * 修改60R设备规格参数 + */ + @SaCheckPermission("system:spec60r:edit") + @Log(title = "60R设备规格参数", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody DeviceSpec60rBo bo) { + return toAjax(iDeviceSpec60rService.updateByBo(bo)); + } + + /** + * 删除60R设备规格参数 + * + * @param ids 主键串 + */ + @SaCheckPermission("system:spec60r:remove") + @Log(title = "60R设备规格参数", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(iDeviceSpec60rService.deleteWithValidByIds(Arrays.asList(ids), true)); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec80rController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec80rController.java new file mode 100644 index 0000000..4a9123d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/DeviceSpec80rController.java @@ -0,0 +1,106 @@ +package com.ruoyi.system.controller; + +import java.util.List; +import java.util.Arrays; + +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.system.domain.vo.DeviceSpec80rVo; +import com.ruoyi.system.domain.bo.DeviceSpec80rBo; +import com.ruoyi.system.service.IDeviceSpec80rService; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 80R设备规格参数 + * + * @author ruoyi + * @date 2025-12-03 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/system/spec80r") +public class DeviceSpec80rController extends BaseController { + + private final IDeviceSpec80rService iDeviceSpec80rService; + + /** + * 查询80R设备规格参数列表 + */ + @SaCheckPermission("system:spec80r:list") + @GetMapping("/list") + public TableDataInfo list(DeviceSpec80rBo bo, PageQuery pageQuery) { + return iDeviceSpec80rService.queryPageList(bo, pageQuery); + } + + /** + * 导出80R设备规格参数列表 + */ + @SaCheckPermission("system:spec80r:export") + @Log(title = "80R设备规格参数", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(DeviceSpec80rBo bo, HttpServletResponse response) { + List list = iDeviceSpec80rService.queryList(bo); + ExcelUtil.exportExcel(list, "80R设备规格参数", DeviceSpec80rVo.class, response); + } + + /** + * 获取80R设备规格参数详细信息 + * + * @param id 主键 + */ + @SaCheckPermission("system:spec80r:query") + @GetMapping("/{id}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long id) { + return R.ok(iDeviceSpec80rService.queryById(id)); + } + + /** + * 新增80R设备规格参数 + */ + @SaCheckPermission("system:spec80r:add") + @Log(title = "80R设备规格参数", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody DeviceSpec80rBo bo) { + return toAjax(iDeviceSpec80rService.insertByBo(bo)); + } + + /** + * 修改80R设备规格参数 + */ + @SaCheckPermission("system:spec80r:edit") + @Log(title = "80R设备规格参数", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody DeviceSpec80rBo bo) { + return toAjax(iDeviceSpec80rService.updateByBo(bo)); + } + + /** + * 删除80R设备规格参数 + * + * @param ids 主键串 + */ + @SaCheckPermission("system:spec80r:remove") + @Log(title = "80R设备规格参数", businessType = BusinessType.DELETE) + @DeleteMapping("/{ids}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] ids) { + return toAjax(iDeviceSpec80rService.deleteWithValidByIds(Arrays.asList(ids), true)); + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/EleMaterialsController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/EleMaterialsController.java index 889746c..408d1a8 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controller/EleMaterialsController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/EleMaterialsController.java @@ -1,14 +1,17 @@ package com.ruoyi.system.controller; -import java.util.ArrayList; -import java.util.List; -import java.util.Arrays; +import java.io.File; +import java.math.BigDecimal; +import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.Future; import java.util.concurrent.ExecutionException; +import java.util.stream.Collectors; +import cn.hutool.core.date.DateUtil; +import com.alibaba.excel.EasyExcel; import com.alibaba.fastjson.JSONObject; import com.kingdee.bos.webapi.entity.SuccessEntity; import com.ruoyi.common.core.domain.PageQuery; @@ -17,14 +20,17 @@ import com.ruoyi.common.excel.ExcelResult; import com.ruoyi.common.utils.JdUtils; import com.ruoyi.system.domain.EleMaterials; import com.ruoyi.system.domain.ImMaterial; +import com.ruoyi.system.domain.PartCost; import com.ruoyi.system.domain.dto.*; import com.ruoyi.system.domain.vo.ExcelVo; import com.ruoyi.system.mapper.ImMaterialMapper; +import com.ruoyi.system.mapper.PartCostMapper; import com.ruoyi.system.runner.JdUtil; import lombok.RequiredArgsConstructor; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.MediaType; @@ -58,6 +64,7 @@ public class EleMaterialsController extends BaseController { private final IEleMaterialsService iEleMaterialsService; private final ImMaterialMapper materialMapper; private static final Logger log = LoggerFactory.getLogger(EleMaterialsController.class); + private final PartCostMapper partCostMapper; /** * 查询电器物料管理列表 @@ -540,4 +547,35 @@ public class EleMaterialsController extends BaseController { return R.ok("更新成功"); } + + + @Log(title = "获取金蝶成本价", businessType = BusinessType.IMPORT) + @SaCheckPermission("system:materials:importDataTime") + @PostMapping(value = "/importMAMA", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) + public R importMAMA(@RequestParam("file") MultipartFile file) throws Exception { + String originalFilename = file.getOriginalFilename(); + log.info("读取文件名: " + originalFilename); + ExcelResult result = ExcelUtil.importExcelSheet1(file.getInputStream(), ChengBeDTO.class, true); + List list = result.getList(); + List costList = partCostMapper.selectList(); + Map costMap = costList.stream() + .collect(Collectors.toMap(PartCost::getMaterialCode, PartCost::getCostPrice, (a, b) -> a)); + List chengBeDTOS = new ArrayList<>(list.size()); + for (ChengBeDTO dto : list) { + BigDecimal price = costMap.get(dto.getDrawingNo()); + if (price != null) { + dto.setCostUnitPrice(price); + } + chengBeDTOS.add(dto); + } + String ts = DateUtil.format(new Date(), "yyyyMMddHHmmss"); + String fileName = "成本数据_" + ts + ".xlsx"; + String filePath = FileUtils.getTempDirectoryPath() + File.separator + fileName; + EasyExcel.write(filePath, ChengBeDTO.class) + .sheet("成本数据") + .doWrite(chengBeDTOS); + log.info("成本数据已写入本地Excel: {}", filePath); + return R.ok("更新成功"); + } + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/FigureSaveController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/FigureSaveController.java index 7606d62..20e9ded 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controller/FigureSaveController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/FigureSaveController.java @@ -87,10 +87,13 @@ public class FigureSaveController extends BaseController { @SaCheckPermission("system:save:edit") @Log(title = "外购件临时", businessType = BusinessType.UPDATE) @RepeatSubmit() - @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody FigureSaveBo bo) { - return toAjax(iFigureSaveService.updateByBo(bo)); - } + @PutMapping() + public R edit(@RequestBody @Validated FigureSaveBo bo) { + if (bo.getId() == null) { + return toAjax(iFigureSaveService.insertByBo(bo)); + } + return toAjax(iFigureSaveService.updateByBo(bo)); + } /** * 删除外购件临时 diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/KingdeeWorkCenterDataController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/KingdeeWorkCenterDataController.java index 8b08b54..8f78421 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controller/KingdeeWorkCenterDataController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/KingdeeWorkCenterDataController.java @@ -2,6 +2,7 @@ package com.ruoyi.system.controller; import java.io.File; import java.io.UnsupportedEncodingException; +import java.math.BigDecimal; import java.time.LocalDate; import java.time.temporal.ChronoUnit; import java.time.format.DateTimeFormatter; @@ -22,16 +23,13 @@ import com.ruoyi.common.utils.HttpRequestUtil; import com.ruoyi.common.utils.WxRobotUtil; import com.ruoyi.common.poi.ExcelTemplateProc; import com.ruoyi.common.poi.DynamicDataMapping; -import com.ruoyi.system.domain.ProcessRoute; import com.ruoyi.system.domain.SafetyStock; import com.ruoyi.system.domain.WlStockData; import com.ruoyi.system.domain.dto.*; import com.ruoyi.system.domain.vo.WlStockDataVo; import com.ruoyi.system.mapper.WlStockDataMapper; import com.ruoyi.system.runner.JdUtil; -import com.ruoyi.system.service.IProcessRouteService; -import com.ruoyi.system.service.ISafetyStockService; -import com.ruoyi.system.service.IWeComService; +import com.ruoyi.system.service.*; import com.xxl.job.core.handler.annotation.XxlJob; import lombok.RequiredArgsConstructor; @@ -59,8 +57,6 @@ import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.system.domain.vo.KingdeeWorkCenterDataVo; import com.ruoyi.system.domain.bo.KingdeeWorkCenterDataBo; -import com.ruoyi.system.service.IKingdeeWorkCenterDataService; -import java.util.stream.Collectors; import com.ruoyi.common.core.page.TableDataInfo; import org.springframework.util.StringUtils; @@ -85,11 +81,20 @@ public class KingdeeWorkCenterDataController extends BaseController { private final WlStockDataMapper baseMapper; private final ISafetyStockService iSafetyStockService; private final IWeComService iWeComService; + private final MssqlQueryService mssqlQueryService; @Autowired IProcessRouteService iProcessRouteService; private static final String QUALITY_KANBAN_URL = "http://192.168.5.8/K3Cloud/DataBoard/QualityKanBan/index.html#/"; + /** + * 获取金蝶生产看板数据 (SQL Server直连) + */ + @GetMapping("/produceData") + public R> produceData(@RequestParam(required = false) String workCenter) { + return R.ok(mssqlQueryService.getKingdeeProduceData(workCenter)); + } + /** * 查询金蝶工段数据列表 */ @@ -158,7 +163,7 @@ public class KingdeeWorkCenterDataController extends BaseController { /** * 获取金蝶相关工段数据 */ - @SaCheckPermission("system:workCenterData:remove") + @SaCheckPermission("system:workCenterData:getKingdeeWorkCenterData") @Log(title = "金蝶工段数据提前2天", businessType = BusinessType.DELETE) @PostMapping("/getKingdeeWorkCenterData") public R> getKingdeeWorkCenterData(@RequestParam(value = "workCenter") String workCenter) { @@ -208,9 +213,9 @@ public class KingdeeWorkCenterDataController extends BaseController { data.setMoOrderNo(item.getString("MoOrderNo")); data.setMaterialNumber(item.getString("FMaterialNumber")); data.setMaterialName(item.getString("FMaterialName")); - data.setOperQty(item.getLong("FOperQty")); - data.setTransInQty(item.getLong("FTransInQty")); - data.setTransOutQty(item.getLong("FTransOutQty")); + data.setOperQty(item.getBigDecimal("FOperQty")); + data.setTransInQty(item.getBigDecimal("FTransInQty")); + data.setTransOutQty(item.getBigDecimal("FTransOutQty")); data.setMaterialStatus(item.getString("FMaterialStatus")); data.setOperNumber(item.getString("FOperNumber")); data.setProcessName(item.getString("FProcessName")); @@ -240,7 +245,7 @@ public class KingdeeWorkCenterDataController extends BaseController { } @Log(title = "获取金蝶工段数据模板2") - @SaCheckPermission("system:route:sendMsg") + @SaCheckPermission("system:route:getMassage") @PostMapping("/sendMsg") public R getMassage(@RequestParam String workCenter) { String robotId = "4d2f037d-0cee-493a-a4ff-1758f67b8069"; @@ -305,8 +310,7 @@ public class KingdeeWorkCenterDataController extends BaseController { parameter.addProperty("FWorkCenterName", "委外中心"); Object[] parameters = new Object[]{parameter.toString()}; String execute = client.execute( - "Ljint.Kingdee.YiTe.KanBan.WebApi.ProduceWebApi.ExecuteService,Ljint.Kingdee.YiTe.KanBan.WebApi", - parameters); + "Ljint.Kingdee.YiTe.KanBan.WebApi.ProduceWebApi.ExecuteService,Ljint.Kingdee.YiTe.KanBan.WebApi", parameters); // 解析响应 JSONObject response = JSONObject.parseObject(execute); @@ -406,10 +410,18 @@ public class KingdeeWorkCenterDataController extends BaseController { DateUtil.format(new Date(), "yyyyMMddHHmmss")); String filePath = FileUtils.getTempDirectoryPath() + File.separator + fileName; - // 使用EasyExcel写入数据 - EasyExcel.write(filePath, KingdeeWorkCenterDataVo.class) - .sheet("工段数据") - .doWrite(BeanUtil.copyToList(dataList, KingdeeWorkCenterDataVo.class)); + // 使用模板+动态数据映射写入数据 + String templatePath = "jpg/工段数据模板.xlsx"; + Map staticDataMap = new HashMap<>(); + staticDataMap.put("workCenter", workCenter); + staticDataMap.put("generatedAt", currentTime); + + List dynamicDataMappingList = new ArrayList<>(); + List voList = BeanUtil.copyToList(dataList, KingdeeWorkCenterDataVo.class); + List> workCenterData = convertWorkCenterToMapList(voList, workCenter); + dynamicDataMappingList.addAll(DynamicDataMapping.createOneDataList("WorkCenterData", workCenterData)); + + ExcelTemplateProc.doExportExcelByTemplateProc(templatePath, filePath, staticDataMap, dynamicDataMappingList); // 发送Excel文件 File excelFile = new File(filePath); @@ -444,12 +456,12 @@ public class KingdeeWorkCenterDataController extends BaseController { @PostMapping("/getKingdeeDelayData") public R> getKingdeeDelayData(@RequestParam(value = "workCenter") String workCenter) { try { - K3CloudApi client = new K3CloudApi(); + /* K3CloudApi client = new K3CloudApi(); JsonObject parameter = new JsonObject(); List kingdeeWorkCenterDataVos = new ArrayList<>(); parameter.addProperty("FWorkCenterName", workCenter); Object[] parameters = new Object[]{parameter.toString()}; - String execute = client.execute("Ljint.Kingdee.YiTe.KanBan.WebApi.ProduceWebApi.ExecuteService,Ljint.Kingdee.YiTe.KanBan.WebApi121303", parameters); + String execute = client.execute("Ljint.Kingdee.YiTe.KanBan.WebApi.ProduceWebApi.ExecuteService,Ljint.Kingdee.YiTe.KanBan.WebApi", parameters); log.info("金蝶接口:" + workCenter + "===> 返回数据: {}", execute); // 解析响应 @@ -457,24 +469,22 @@ public class KingdeeWorkCenterDataController extends BaseController { if (!"true".equals(response.getString("IsSuccess"))) { String errorMsg = response.getString("Message"); return R.fail("获取工段数据失败:" + errorMsg); - } + }*/ // 获取明天的日期字符串 (格式: yyyy-MM-dd) String yesterday = DateUtil.format(DateUtil.yesterday(), "yyyy-MM-dd"); - // 获取数据数组 + /* // 获取数据数组 JSONArray dataArray = response.getJSONArray("data"); if (dataArray == null || dataArray.isEmpty()) { return R.ok("无数据"); } - - for (int i = 0; i < dataArray.size(); i++) { - JSONArray queryList = dataArray.getJSONObject(i).getJSONArray("QueryList"); - for (int j = 0; j < queryList.size(); j++) { - JSONObject item = queryList.getJSONObject(j); - +*/ + List kingdeeProduceData = mssqlQueryService.getKingdeeProduceData(workCenter); + List kingdeeWorkCenterDataVos = new ArrayList<>(); + for (KingdeeWorkCenterDataBo kingnum : kingdeeProduceData) { // 获取计划结束时间并转换为日期格式进行比较 - String planFinishTime = item.getString("FOperPlanFinishTime2"); - String delayDaysStr = item.getString("FDelayDays"); + String planFinishTime = kingnum.getOperPlanFinishTime2(); + String delayDaysStr = kingnum.getDelayDays(); Long delayDays = null; if (delayDaysStr != null && !delayDaysStr.isEmpty()) { try { @@ -485,34 +495,20 @@ public class KingdeeWorkCenterDataController extends BaseController { } if (delayDays != null && delayDays > 0) { // 只处理延期天数大于0的工单 - long transOutQty = item.getLong("FTransOutQty"); + BigDecimal transOutQty = kingnum.getTransOutQty(); // 转入 - long transInQty = item.getLong("FTransInQty"); + BigDecimal transInQty = kingnum.getTransInQty(); //转出小于转入数量 - if (transOutQty < transInQty) { - // 转换为实体对象 - KingdeeWorkCenterDataBo data = new KingdeeWorkCenterDataBo(); - data.setWorkCenter(workCenter); - data.setMoBillNo(item.getString("MoBillNo")); - data.setMoOrderNo(item.getString("MoOrderNo")); - data.setMaterialNumber(item.getString("FMaterialNumber")); - data.setMaterialName(item.getString("FMaterialName")); - data.setOperQty(item.getLong("FOperQty")); - data.setTransInQty(transInQty); - data.setTransOutQty(transOutQty); - data.setOperNumber(item.getString("FOperNumber")); - data.setProcessName(item.getString("FProcessName")); - data.setOperPlanStartTime(item.getString("FOperPlanStartTime2")); - data.setOperPlanFinishTime(planFinishTime); - data.setDelayDays(item.getString("FDelayDays")); - kingdeeWorkCenterDataVos.add(data); - Boolean b = iKingdeeWorkCenterDataService.insertByBo(data); + if (transOutQty.compareTo( transInQty)<0) { + + kingdeeWorkCenterDataVos.add(kingnum); + Boolean b = iKingdeeWorkCenterDataService.insertByBo(kingnum); if (!b) { return R.fail("保存工段数据失败"); } } } - } + } if (kingdeeWorkCenterDataVos.isEmpty()) { @@ -546,7 +542,6 @@ public class KingdeeWorkCenterDataController extends BaseController { for (String workCenter : workCenters) { try { R> result = getKingdeeDelayData(workCenter); - List data = result.getData(); if (R.isError(result) || CollUtil.isEmpty(result.getData())) { markdownMsg.append("- ").append(workCenter).append(":无数据\n"); continue; @@ -561,10 +556,18 @@ public class KingdeeWorkCenterDataController extends BaseController { DateUtil.format(new Date(), "yyyyMMddHHmmss")); String filePath = FileUtils.getTempDirectoryPath() + File.separator + fileName; - // 使用EasyExcel写入数据 - EasyExcel.write(filePath, KingdeeWorkCenterDataVo.class) - .sheet("工段数据") - .doWrite(BeanUtil.copyToList(dataList, KingdeeWorkCenterDataVo.class)); + // 使用模板+动态数据映射写入延期数据 + String templatePath = "jpg/延期工段数据模板.xlsx"; + Map staticDataMap = new HashMap<>(); + staticDataMap.put("workCenter", workCenter); + staticDataMap.put("generatedAt", currentTime); + + List dynamicDataMappingList = new ArrayList<>(); + List voList = BeanUtil.copyToList(dataList, KingdeeWorkCenterDataVo.class); + List> workCenterData = convertWorkCenterToMapList(voList, workCenter); + dynamicDataMappingList.addAll(DynamicDataMapping.createOneDataList("WorkCenterData", workCenterData)); + + ExcelTemplateProc.doExportExcelByTemplateProc(templatePath, filePath, staticDataMap, dynamicDataMappingList); // 发送Excel文件 File excelFile = new File(filePath); @@ -648,10 +651,17 @@ public class KingdeeWorkCenterDataController extends BaseController { String fileName = String.format("%s安全预警数据_%s.xlsx", "企标", DateUtil.format(new Date(), "yyyyMMddHHmmss")); String filePath = FileUtils.getTempDirectoryPath() + File.separator + fileName; - // 使用EasyExcel写入数据 - EasyExcel.write(filePath, WlStockDataVo.class) - .sheet("工段数据") - .doWrite(BeanUtil.copyToList(safetyStocks, WlStockDataVo.class)); + // 使用模板+动态数据映射写入安全库存数据 + String templatePath = "jpg/安全库存数据模板.xlsx"; + Map staticDataMap = new HashMap<>(); + staticDataMap.put("generatedAt", DateUtil.format(new Date(), "yyyy年MM月dd日 HH:mm:ss")); + + List dynamicDataMappingList = new ArrayList<>(); + List voList = BeanUtil.copyToList(safetyStocks, WlStockDataVo.class); + List> safetyData = convertSafetyStockToMapList(voList); + dynamicDataMappingList.addAll(DynamicDataMapping.createOneDataList("SafetyStockData", safetyData)); + + ExcelTemplateProc.doExportExcelByTemplateProc(templatePath, filePath, staticDataMap, dynamicDataMappingList); // 发送Excel文件 File excelFile = new File(filePath); @@ -673,6 +683,57 @@ public class KingdeeWorkCenterDataController extends BaseController { } } + private List> convertWorkCenterToMapList(List data, String workCenter) { + List> list = new ArrayList<>(); + for (KingdeeWorkCenterDataVo vo : data) { + Map map = new HashMap<>(); + map.put("workCenter", workCenter); + map.put("id", vo.getId()); + map.put("moBillNo", vo.getMoBillNo()); + map.put("moOrderNo", vo.getMoOrderNo()); + map.put("materialNumber", vo.getMaterialNumber()); + map.put("materialName", vo.getMaterialName()); + map.put("operQty", vo.getOperQty()); + map.put("transInQty", vo.getTransInQty()); + map.put("transOutQty", vo.getTransOutQty()); + map.put("materialStatus", vo.getMaterialStatus()); + map.put("operNumber", vo.getOperNumber()); + map.put("processName", vo.getProcessName()); + map.put("operPlanStartTime", vo.getOperPlanStartTime2()); + map.put("operPlanFinishTime", vo.getOperPlanFinishTime2()); + map.put("FReportQty", vo.getFReportQty()); + map.put("FScrapQty", vo.getFScrapQty()); + map.put("delayDays", vo.getDelayDays()); + list.add(map); + } + return list; + } + + private List> convertSafetyStockToMapList(List data) { + List> list = new ArrayList<>(); + for (WlStockDataVo vo : data) { + Map map = new HashMap<>(); + map.put("id", vo.getId()); + map.put("materialCode", vo.getMaterialCode()); + map.put("materialName", vo.getMaterialName()); + map.put("documentType", vo.getDocumentType()); + map.put("requiredStock", vo.getRequiredStock()); + map.put("currentStock", vo.getCurrentStock()); + map.put("availableStock", vo.getAvailableStock()); + map.put("secAvbqty", vo.getSecAvbqty()); + map.put("productionQty", vo.getProductionQty()); + map.put("purchaseQty", vo.getPurchaseQty()); + map.put("secQty", vo.getSecQty()); + map.put("maxsafetyStock", vo.getMaxsafetyStock()); + map.put("minsafetyStock", vo.getMinsafetyStock()); + map.put("safeStatus", vo.getSafeStatus()); + map.put("wlMaterial", vo.getWlMaterial()); + map.put("triggerTime", vo.getTriggerTime()); + list.add(map); + } + return list; + } + private List processMaterialGroups(List originalStocks) { if (CollUtil.isEmpty(originalStocks)) { return new ArrayList<>(); @@ -875,8 +936,7 @@ public class KingdeeWorkCenterDataController extends BaseController { msg.append("- 采购申请单:").append(purchaseRequestList.size()).append("条\n"); // 生成Excel文件使用采购模板 - String fileName = String.format("采购订单和申请数据_%s.xlsx", - DateUtil.format(new Date(), "yyyyMMddHHmmss")); + String fileName = String.format("采购订单和申请数据_%s.xlsx",DateUtil.format(new Date(), "yyyyMMddHHmmss")); String filePath = FileUtils.getTempDirectoryPath() + File.separator + fileName; // 准备模板数据 diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/MssqlQueryController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/MssqlQueryController.java new file mode 100644 index 0000000..4b2815f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/MssqlQueryController.java @@ -0,0 +1,37 @@ +package com.ruoyi.system.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.system.service.MssqlQueryService; +import org.springframework.web.bind.annotation.*; + +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/system/mssql") +public class MssqlQueryController { + + private final MssqlQueryService mssqlQueryService; + + public MssqlQueryController(MssqlQueryService mssqlQueryService) { + this.mssqlQueryService = mssqlQueryService; + } + + @SaCheckPermission("system:mssql:query") + @PostMapping("/query") + public R>> query(@RequestBody String sql) { + String s = sql == null ? "" : sql.trim(); + String up = s.toUpperCase(); + if (!up.startsWith("SELECT") || up.contains(";") || up.contains("UPDATE") || up.contains("DELETE") || up.contains("INSERT") || up.contains("DROP")) { + return R.fail("仅支持只读的 SELECT 查询,且禁止分号和写操作关键字"); + } + try { + List> rows = mssqlQueryService.queryForList(s); + return R.ok(rows); + } catch (Exception e) { + return R.fail("查询失败: " + e.getMessage()); + } + } +} + diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/PlanOrderController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/PlanOrderController.java index 6adc488..18f63aa 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controller/PlanOrderController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/PlanOrderController.java @@ -1,3 +1,6 @@ + + + package com.ruoyi.system.controller; import java.util.List; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/ProcessOrderProController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/ProcessOrderProController.java index e8ad875..8c3f83f 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controller/ProcessOrderProController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/ProcessOrderProController.java @@ -5,10 +5,8 @@ import java.math.BigDecimal; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.*; - -import cn.hutool.json.JSONUtil; import com.alibaba.excel.EasyExcel; -import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.fasterxml.jackson.core.JsonProcessingException; import com.ruoyi.common.excel.DefaultExcelListener; import com.ruoyi.common.exception.ServiceException; @@ -18,26 +16,23 @@ import com.ruoyi.common.utils.file.SmbUtil; import com.ruoyi.common.poi.ExcelTemplateProc; import com.ruoyi.common.poi.DynamicDataMapping; import com.ruoyi.system.domain.*; -import com.ruoyi.system.domain.bo.FigureSaveBo; import com.ruoyi.system.domain.dto.MaterialUseDTO; import com.ruoyi.system.domain.dto.ProcessRouteDTO; import com.ruoyi.system.domain.dto.ProcessRouteExcelDTO; -import com.ruoyi.system.domain.dto.ProcessRoutePushResultDTO; +import com.ruoyi.system.domain.dto.excuteDrawing.RigidChainModelDTO; import com.ruoyi.system.domain.vo.*; import com.ruoyi.system.domain.vo.BomDataVO; import com.ruoyi.system.mapper.ProcessOrderProMapper; +import com.ruoyi.system.mapper.SafetyStockMapper; import com.ruoyi.system.runner.JdUtil; import com.ruoyi.system.service.*; -import com.ruoyi.system.service.impl.ProductionOrderServiceImpl; import lombok.RequiredArgsConstructor; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; - import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; - import cn.dev33.satoken.annotation.SaCheckPermission; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -56,10 +51,10 @@ import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.system.domain.bo.ProcessOrderProBo; import com.ruoyi.common.core.page.TableDataInfo; import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; /** - * 项目令号 - * + * 生产项目 * @author tzy * @date 2024-10-22 */ @@ -74,7 +69,9 @@ public class ProcessOrderProController extends BaseController { private final IMrpResultCheckService iMrpResultCheckService; private final ProcessOrderProMapper processOrderProMapper; private final IImMaterialService imMaterialService; - private final ISafetyStockService iSafetyStockService; + private final ISafetyStockService safetyStockService; + private final IProcessRouteService processRouteService; + private final SafetyStockMapper stockMapper; private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy年MM月dd日"); /** @@ -86,7 +83,7 @@ public class ProcessOrderProController extends BaseController { return iProcessOrderProService.queryPageList(bo, pageQuery); } - @SaCheckPermission("system:orderPro:list") + @SaCheckPermission("system:orderPro:processlist") @GetMapping("/processlist") public List processList(ProcessOrderProBo bo) { @@ -196,16 +193,16 @@ public class ProcessOrderProController extends BaseController { iProcessOrderProService.batchUpdateProjectTimeRanges(); } - @SaCheckPermission("system:plan:add") + @SaCheckPermission("system:orderPro:addProduct") @Log(title = "排产计划", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping("/addProduct") - public R addProduct(@Validated(AddGroup.class) @RequestBody FigureSaveBo bo, @RequestBody ProcessOrderProBo orderPro) { - iProcessOrderProService.addProduct(bo, orderPro); + public R addProduct(@Validated(AddGroup.class) @RequestBody RigidChainModelDTO orderPro) { + iProcessOrderProService.addProduct(orderPro); return R.ok(); } - @SaCheckPermission("system:plan:add") + @SaCheckPermission("system:orderPro:executDrawing") @Log(title = "执行出图", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping("/executDrawing") @@ -214,36 +211,46 @@ public class ProcessOrderProController extends BaseController { return R.ok(s); } + @GetMapping("/executDrawing/progress/{id}") + public SseEmitter executDrawingProgress(@PathVariable Long id) { + return iProcessOrderProService.startDrawingSse(id); + } + /** * 上传dwg图纸 * - * @param id * @param filePath * @return */ + @SaCheckPermission("system:orderPro:uploadDwg") + @Log(title = "上传dwg图纸", businessType = BusinessType.INSERT) @PostMapping("/uploadDwg") @ResponseBody - public R uploadContractPDF(@RequestParam("id") Integer id, @RequestParam("file") MultipartFile filePath) { + public R uploadContractPDF(@RequestParam("ids") List ids, @RequestParam("file") MultipartFile filePath) { String originalFilename = filePath.getOriginalFilename(); if (StringUtils.isEmpty(originalFilename)) { return R.fail("获取文件名称错误!!"); } - //校验文件后缀 jpg jpeg pdf 格式的文件不允许上传 - String suffix = originalFilename.substring(originalFilename.lastIndexOf(".") + 1); - if (!"dwg".equals(suffix)) { + String suffix = originalFilename.substring(originalFilename.lastIndexOf('.') + 1); + if (!"dwg".equalsIgnoreCase(suffix)) { return R.fail("禁止非法文件上传!!"); } - - String reslut = iProcessOrderProService.uploadContractPDF(id, originalFilename, filePath); - - return R.ok(reslut); + List results = new ArrayList<>(); + for (Long id : ids) { + if (id == null) { + results.add("ID为空,已跳过"); + continue; + } + String res = iProcessOrderProService.uploadContractPDF(id.intValue(), originalFilename, filePath); + results.add("ID=" + id + ":" + res); + } + return R.ok(StringUtils.join(results, ",")); } /** * 下载PDF并生成zip包 */ - - @SaCheckPermission("system:processOrderPro:uploadPDF") + @SaCheckPermission("system:orderPro:uploadPDF") @Log(title = "下载PDF", businessType = BusinessType.UPDATE) @CrossOrigin(origins = "*", allowedHeaders = "*", exposedHeaders = {"Content-Disposition", "Content-Length"}) @GetMapping("/uploadPDF") @@ -303,7 +310,7 @@ public class ProcessOrderProController extends BaseController { /** * 下载ZIP包 */ - @SaCheckPermission("system:processOrderPro:downloadZip") + @SaCheckPermission("system:orderPro:downloadZip") @Log(title = "下载ZIP包", businessType = BusinessType.OTHER) @GetMapping("/downloadZip/{id}") public void downloadZip(@PathVariable Long id, HttpServletResponse response) { @@ -364,7 +371,7 @@ public class ProcessOrderProController extends BaseController { return iMrpResultCheckService.getMRPResults(id); } - @SaCheckPermission("system:orderPro:geMRPResults") + @SaCheckPermission("system:orderPro:getRouteLog") @Log(title = "获取工艺上传结果", businessType = BusinessType.OTHER) @PostMapping("/getRouteLog/{id}") public R getRouteLog(@PathVariable Long id) throws JsonProcessingException { @@ -372,7 +379,7 @@ public class ProcessOrderProController extends BaseController { } - @SaCheckPermission("system:route:exportRoute") + @SaCheckPermission("system:orderPro:exportRoute") @Log(title = "下载工艺生产表", businessType = BusinessType.EXPORT) @PostMapping("/exportRoute") public void exportRoute(@RequestParam("id") Long id, HttpServletResponse response) { @@ -452,7 +459,7 @@ public class ProcessOrderProController extends BaseController { || materialCode.startsWith("009001") || materialCode.startsWith("009081") || (remark != null && remark.contains("外购"))) { // 过滤安全库存:如果属于安全库存,则进入工艺数据列表 - Boolean isSafeStock = iSafetyStockService.isSafeCode(materialCode.trim()); + Boolean isSafeStock = safetyStockService.isSafeCode(materialCode.trim()); if (isSafeStock) { // 属于安全库存,添加到工艺数据列表 processDataList.add(item); @@ -1139,9 +1146,9 @@ public class ProcessOrderProController extends BaseController { } - @SaCheckPermission("system:route:exportRoute") + @SaCheckPermission("system:orderPro:exportRoute2") @Log(title = "下载工艺生产表2", businessType = BusinessType.EXPORT) - @PostMapping("/exportRoute2") + @GetMapping ("/exportRoute2") public void exportRoute2(@RequestParam("id") Long id, HttpServletResponse response) { try { ProcessOrderPro orderPro = processOrderProMapper.selectById(id); @@ -1164,7 +1171,26 @@ public class ProcessOrderProController extends BaseController { List routes = new ArrayList<>(); List> kingdeeBomRows = new ArrayList<>(); for (ProcessRoute base : routeList) { + + String materialCode = base.getMaterialCode(); + //如果项目零号是CP 跳过安全库存物料 + LambdaQueryWrapper wr = new LambdaQueryWrapper<>(); + wr.eq(SafetyStock::getMaterialCode, materialCode); + SafetyStock safetyStock = stockMapper.selectOne(wr); + if (safetyStock != null && base.getRouteDescription().startsWith("CP")) { + ProcessRoute item = new ProcessRoute(); + item.setRouteDescription(base.getRouteDescription()); + item.setMaterialCode(base.getMaterialCode()); + item.setMaterialName(base.getMaterialName()); + item.setMaterial(base.getMaterial()); + item.setDiscWeight(base.getDiscWeight()); + item.setUnitQuantity(base.getUnitQuantity()); + item.setBatchQuantity(base.getBatchQuantity()); + routes.add(item); + continue; + } + if (StringUtils.isBlank(materialCode)) { ProcessRoute item = new ProcessRoute(); item.setRouteDescription(base.getRouteDescription()); @@ -1296,9 +1322,10 @@ public class ProcessOrderProController extends BaseController { // 电气外包分类条件:物料编码开头空格/特定前缀 或 备注包含"外购" if (materialCode.startsWith(" ") || materialCode.startsWith("009301") || materialCode.startsWith("009999") || materialCode.startsWith("017003") || materialCode.startsWith("017002") - || materialCode.startsWith("009001") || materialCode.startsWith("009081") || (remark != null && remark.contains("外购"))) { + || materialCode.startsWith("009001") || materialCode.startsWith("009081") + || (remark != null && remark.contains("外购"))) { // 过滤安全库存:如果属于安全库存,则进入工艺数据列表 - Boolean isSafeStock = iSafetyStockService.isSafeCode(materialCode.trim()); + Boolean isSafeStock = safetyStockService.isSafeCode(materialCode.trim()); if (isSafeStock) { // 属于安全库存,添加到工艺数据列表 processDataList.add(item); @@ -1638,5 +1665,380 @@ public class ProcessOrderProController extends BaseController { return mapList; } + @SaCheckPermission("system:orderPro:exportRoute3") + @Log(title = "下载工艺生产表3", businessType = BusinessType.EXPORT) + @GetMapping ("/exportRoute3") + public void exportRoute3(@RequestParam("id") Long id, HttpServletResponse response) { + try { + ProcessOrderPro orderPro = processOrderProMapper.selectById(id); + // 下载Excel文件 + SmbUtil.downloadExcelFiles(orderPro.getProductionOrderNo()); + // 构建文件路径 + String excelName = "D:\\file\\" + orderPro.getProductionOrderNo() + "汇总表.xlsx"; + String rawDataFile = "D:\\file\\RawDataTable.xlsx"; + File file = new File(excelName); + if (!file.exists()) { + throw new ServiceException("项目 " + orderPro.getProductionOrderNo() + " 未出图"); + } + // 1. 读取第一个sheet的数据list - 使用POI直接读取以保留空格 + List allDataList = readExcelWithPOI(excelName,orderPro.getProductionOrderNo()); + List routeList = readExcelPOIRoute(excelName,orderPro.getProductionOrderNo()); + List routes = new ArrayList<>(); + List> kingdeeBomRows = new ArrayList<>(); + for (ProcessRoute base : routeList) { + String processDescription = base.getRouteDescription(); + String materialCode = base.getMaterialCode(); + String materialName = base.getMaterialName(); + //如果项目零号是CP 跳过安全库存物料 + LambdaQueryWrapper wr = new LambdaQueryWrapper<>(); + wr.eq(SafetyStock::getMaterialCode, materialCode); + SafetyStock safetyStock = stockMapper.selectOne(wr); + if (safetyStock != null && base.getRouteDescription().startsWith("CP")) { + ProcessRoute item = new ProcessRoute(); + item.setRouteDescription(base.getRouteDescription()); + item.setMaterialCode(base.getMaterialCode()); + item.setMaterialName(base.getMaterialName()); + item.setMaterial(base.getMaterial()); + item.setDiscWeight(base.getDiscWeight()); + item.setUnitQuantity(base.getUnitQuantity()); + item.setBatchQuantity(base.getBatchQuantity()); + routes.add(item); + continue; + } + + if (StringUtils.isBlank(materialCode)) { + ProcessRoute item = new ProcessRoute(); + item.setRouteDescription(base.getRouteDescription()); + item.setMaterialCode(base.getMaterialCode()); + item.setMaterialName(base.getMaterialName()); + item.setMaterial(base.getMaterial()); + item.setDiscWeight(base.getDiscWeight()); + item.setUnitQuantity(base.getUnitQuantity()); + item.setBatchQuantity(base.getBatchQuantity()); + routes.add(item); + continue; + } + + //List routeGuDing = JdUtil.getRouteGuDing(materialCode);processRouteService + List bomItems = processRouteService.getProcessMaterialList(materialCode, materialName, processDescription); + List routeGuDing = processRouteService.getProcessRoutesByOrder(processDescription, materialCode); + if (routeGuDing != null && !routeGuDing.isEmpty()) { + routeGuDing.stream().forEach(r -> { + ProcessRoute item = new ProcessRoute(); + item.setRouteDescription(base.getRouteDescription()); + item.setMaterialCode(base.getMaterialCode()); + item.setMaterialName(base.getMaterialName()); + item.setMaterial(base.getMaterial()); + item.setDiscWeight(base.getDiscWeight()); + item.setUnitQuantity(base.getUnitQuantity()); + item.setBatchQuantity(base.getBatchQuantity()); + // 不写入BOM字段,保持纯工艺数据行 + item.setProcessNo(r.getProcessNo()); + item.setWorkCenter(r.getWorkCenter()); + item.setProcessName(r.getProcessName()); + item.setProcessDescription(r.getProcessDescription()); + item.setProcessControl(r.getProcessControl()); + item.setActivityDuration(r.getActivityDuration()); + item.setActivityUnit(r.getActivityUnit()); + routes.add(item); + }); + } else { + ProcessRoute item = new ProcessRoute(); + item.setRouteDescription(base.getRouteDescription()); + item.setMaterialCode(base.getMaterialCode()); + item.setMaterialName(base.getMaterialName()); + item.setMaterial(base.getMaterial()); + item.setDiscWeight(base.getDiscWeight()); + item.setUnitQuantity(base.getUnitQuantity()); + item.setBatchQuantity(base.getBatchQuantity()); + // 不写入BOM字段,保持纯工艺数据行 + routes.add(item); + } + if (bomItems != null && !bomItems.isEmpty()) { + if ("总装部件".equals(Objects.toString(base.getMaterial(), "").trim())) { + + } else { + for (MaterialBom b : bomItems) { + Map bomMap = new HashMap<>(); + bomMap.put("routeDescription", base.getRouteDescription()); + bomMap.put("materialCode", base.getMaterialCode()); + bomMap.put("materialName", base.getMaterialName()); + bomMap.put("material", base.getMaterial()); + bomMap.put("discWeight", base.getDiscWeight()); + bomMap.put("rawMaterialCode", b.getMaterialCode()); + bomMap.put("rawMaterialName", b.getMaterialName()); + bomMap.put("bomMaterial", b.getMaterialType()); + bomMap.put("bomDanZhong", null); + if ("根".equals(b.getUnit())) { + if (b.getQuantity() != null && b.getQuantity().contains("/")) { + String[] arr = b.getQuantity().split("/"); + bomMap.put("discUsage", Double.parseDouble(arr[0]) / Double.parseDouble(arr[1])); + } else { + bomMap.put("discUsage", null); + } + } else if ("mm".equals(b.getUnit())) { + b.setUnit("m"); + bomMap.put("discUsage", b.getQuantity()); + } else { + bomMap.put("discUsage", b.getQuantity()); + } + + + bomMap.put("bomUnit", b.getUnit()); + kingdeeBomRows.add(bomMap); + } + } + } + } + // 用生成的 routes 替换原始 routeList,保持原序展开后的结构用于后续导出 + routeList = routes; + // 2. 读取原始表数据 + List rawDataList = readRawDataTable(rawDataFile); + + // 3. 数据分类处理 + List vmiList = new ArrayList<>(); // 009开头 + List elecOutList = new ArrayList<>(); // 两个空格和017开头 + List supplierList = new ArrayList<>(); // 甲供件 + List evoProductsList = new ArrayList<>(); // 伊特 + List processDataList = new ArrayList<>(); // 工艺数据(剩余数据) + + // 分类逻辑 + for (ProductionOrderVo item : allDataList) { + String materialCode = item.getDrawingNo(); + String remark = item.getRemark(); // 使用备注字段 + + // 009开头的加入VMI表 + if (materialCode != null) { + String drawingNo = item.getDrawingNo(); + String drawingName = item.getDrawingName(); + if (drawingName != null) { + ImMaterial material = imMaterialService.selectByCodeAndName(drawingNo, drawingName); + if (material != null) { + //判断是否是VMI物料 + if ("true".equals(material.getClassificationName())) { + // 检查是否已存在相同的DrawingNo + boolean found = false; + for (VMIDataVO existingVmi : vmiList) { + if (drawingNo.equals(existingVmi.getDrawingNo())) { + // 将数量和批次数量相加 + Integer currentQuantity = existingVmi.getQuantity() != null ? existingVmi.getQuantity() : 0; + Integer itemQuantity = item.getQuantity() != null ? item.getQuantity().intValue() : 0; + existingVmi.setQuantity(currentQuantity + itemQuantity); + + Integer currentBatchQuantity = existingVmi.getBatchQuantity() != null ? existingVmi.getBatchQuantity() : 0; + Integer itemBatchQuantity = item.getBatchQuantity() != null ? Integer.parseInt(item.getBatchQuantity()) : 0; + existingVmi.setBatchQuantity(currentBatchQuantity + itemBatchQuantity); + found = true; + break; + } + } + + // 如果没有找到相同的DrawingNo,则添加新的VMI数据 + if (!found) { + VMIDataVO vmiData = convertToVMIDataVO(item); + vmiList.add(vmiData); + } + continue; // 已分类,跳过后续检查 + } + } + } + + // 电气外包分类条件:物料编码开头空格/特定前缀 或 备注包含"外购" + if (materialCode.startsWith(" ") + || materialCode.startsWith("009301") || materialCode.startsWith("009999") || materialCode.startsWith("017003") || materialCode.startsWith("017002") + || materialCode.startsWith("009001") || materialCode.startsWith("009081") + || (remark != null && remark.contains("外购"))) { + // 过滤安全库存:如果属于安全库存,则进入工艺数据列表 + Boolean isSafeStock = safetyStockService.isSafeCode(materialCode.trim()); + if (isSafeStock) { + // 属于安全库存,添加到工艺数据列表 + processDataList.add(item); + continue; // 已分类,跳过后续检查 + } else { + // 不属于安全库存,检查是否已存在相同的DrawingNo + boolean found = false; + for (ElecOutDataVO existingElec : elecOutList) { + if (item.getDrawingNo() != null && item.getDrawingNo().equals(existingElec.getDrawingNo())) { + // 将数量和批次数量相加 + Double currentQuantity = existingElec.getQuantity() != null ? existingElec.getQuantity() : 0.0; + Double itemQuantity = item.getQuantity() != null ? item.getQuantity() : 0.0; + Double newQuantity = currentQuantity + itemQuantity; + existingElec.setQuantity(newQuantity); + + // 批次数量相加(String类型) + String currentBatchQuantity = existingElec.getBatchQuantity() != null ? (existingElec.getBatchQuantity()).toString() : "0"; + String itemBatchQuantity = item.getBatchQuantity() != null ? item.getBatchQuantity() : "0"; + try { + Integer currentBatch = Integer.valueOf(currentBatchQuantity); + Integer itemBatch = Integer.valueOf(itemBatchQuantity); + String newBatchQuantity = String.valueOf(currentBatch + itemBatch); + existingElec.setBatchQuantity(Integer.valueOf(newBatchQuantity)); + } catch (NumberFormatException e) { + // 如果转换失败,保持原值 + existingElec.setBatchQuantity(Integer.valueOf(currentBatchQuantity)); + } + found = true; + break; + } + } + + // 如果没有找到相同的DrawingNo,则添加新的电气外包数据 + if (!found) { + ElecOutDataVO elecData = convertToElecOutDataVO(item); + elecOutList.add(elecData); + } + continue; // 已分类,跳过后续检查 + } + } + + // 备注是甲供件的 + if (remark != null && remark.contains("甲供件")) { + SupProvidDataVO supplierData = convertToSupProvidDataVO(item); + supplierList.add(supplierData); + continue; // 已分类,跳过后续检查 + } + + // 备注是伊特 + if (remark != null && remark.contains("伊特")) { + EVOProductsDataVO evoData = convertToEVOProductsDataVO(item); + evoProductsList.add(evoData); + continue; // 已分类,跳过后续检查 + } + } + + // 检查是否已存在相同的DrawingNo + boolean found = false; + for (ProductionOrderVo existingProcess : processDataList) { + if (item.getDrawingNo() != null && item.getDrawingNo().equals(existingProcess.getDrawingNo())) { + // 将数量和批次数量相加 + Double currentQuantity = existingProcess.getQuantity() != null ? existingProcess.getQuantity() : 0.0; + Double itemQuantity = item.getQuantity() != null ? item.getQuantity() : 0.0; + Double newQuantity = currentQuantity + itemQuantity; + existingProcess.setQuantity(newQuantity); + + // 批次数量相加(String类型) + String currentBatchQuantity = existingProcess.getBatchQuantity() != null ? existingProcess.getBatchQuantity() : "0"; + String itemBatchQuantity = item.getBatchQuantity() != null ? item.getBatchQuantity() : "0"; + try { + Integer currentBatch = Integer.valueOf(currentBatchQuantity); + Integer itemBatch = Integer.valueOf(itemBatchQuantity); + String newBatchQuantity = String.valueOf(currentBatch + itemBatch); + existingProcess.setBatchQuantity(newBatchQuantity); + } catch (NumberFormatException e) { + // 如果转换失败,保持原值 + existingProcess.setBatchQuantity(currentBatchQuantity); + } + found = true; + break; + } + } + + // 如果没有找到相同的DrawingNo,则添加新的工艺数据 + if (!found) { + processDataList.add(item); + } + + } + + // 使用Excel模板文件 + String templatePath = "jpg/生产及工艺计划模版.xlsx"; + String outputPath = "D:/file/" + orderPro.getProductionOrderNo() + "生产及工艺计划表.xlsx"; + + // 准备模板数据 + Map staticDataMap = new HashMap<>(); + staticDataMap.put("productionOrderNo", orderPro.getProductionOrderNo()); + staticDataMap.put("productionName", orderPro.getProductionName()); + + // 准备动态数据映射 + List dynamicDataMappingList = new ArrayList<>(); + + // 添加生产订单数据 + if (!allDataList.isEmpty()) { + List> productionDataList = convertProductionOrderToMapList(allDataList, orderPro.getProductionOrderNo()); + dynamicDataMappingList.addAll(DynamicDataMapping.createOneDataList("ProductionOrder", productionDataList)); + } + + // 添加工艺数据(第七个sheet:工艺及生产计划表) + if (!processDataList.isEmpty()) { + List> processDataMapList = convertProductionOrderToMapList(processDataList, orderPro.getProductionOrderNo()); + + dynamicDataMappingList.addAll(DynamicDataMapping.createOneDataList("ProcessData", processDataMapList)); + } + + // 添加VMI数据 + if (!vmiList.isEmpty()) { + List> vmiDataList = convertVMIDataToMapList(vmiList); + dynamicDataMappingList.addAll(DynamicDataMapping.createOneDataList("VMIDataVO", vmiDataList)); + } + + // 添加电气外购数据 + if (!elecOutList.isEmpty()) { + List> elecDataList = convertElecOutDataToMapList(elecOutList); + dynamicDataMappingList.addAll(DynamicDataMapping.createOneDataList("ElecOutDataVO", elecDataList)); + } + + // 添加BOM数据 + if (!rawDataList.isEmpty()) { + List> bomDataList = convertBomDataToMapList(rawDataList); + dynamicDataMappingList.addAll(DynamicDataMapping.createOneDataList("BomDataVO", bomDataList)); + } + + // 添加甲供件数据 + if (!supplierList.isEmpty()) { + List> supplierDataList = convertSupProvidDataToMapList(supplierList); + dynamicDataMappingList.addAll(DynamicDataMapping.createOneDataList("SupProvidDataVO", supplierDataList)); + } + + // 添加伊特产品数据 + if (!evoProductsList.isEmpty()) { + List> evoDataList = convertEVOProductsDataToMapList(evoProductsList); + dynamicDataMappingList.addAll(DynamicDataMapping.createOneDataList("EVOProductsDataVO", evoDataList)); + } + if (!kingdeeBomRows.isEmpty()) { + List> bomDataList2 = convertKingdeeBomToMapList(kingdeeBomRows); + // 合并到 RouteBomData 中统一按物料分组导出(方案A) + } + // 添加伊特产品数据 + if (!routeList.isEmpty()) { + // 合并到 RouteBomData 中统一按物料分组导出(方案A) + } + + // 方案A:合并工艺与BOM为单一数据集并按物料分组 + if (!routeList.isEmpty() || !kingdeeBomRows.isEmpty()) { + List> routeBomDataList = convertRouteBomToMapList(routeList, kingdeeBomRows); + dynamicDataMappingList.addAll(DynamicDataMapping.createOneDataList("RouteBomData", routeBomDataList)); + } + + // 使用模板导出Excel + ExcelTemplateProc.doExportExcelByTemplateProc(templatePath, outputPath, staticDataMap, dynamicDataMappingList); + + // 设置响应头 + response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + response.setCharacterEncoding("utf-8"); + String fileName = URLEncoder.encode(orderPro.getProductionOrderNo() + "_分类BOM表", "UTF-8") + .replaceAll("\\+", "%20"); + response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); + + // 将生成的文件写入响应 + File outputFile = new File(outputPath); + if (outputFile.exists()) { + try (FileInputStream fis = new FileInputStream(outputFile); + OutputStream os = response.getOutputStream()) { + byte[] buffer = new byte[8192]; + int length; + while ((length = fis.read(buffer)) > 0) { + os.write(buffer, 0, length); + } + os.flush(); + } + // 删除临时文件 + outputFile.delete(); + } + + } catch (Exception e) { + log.error("导出分类BOM表失败", e); + throw new RuntimeException("导出失败: " + e.getMessage()); + } + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/controller/ProcessRouteController.java b/ruoyi-system/src/main/java/com/ruoyi/system/controller/ProcessRouteController.java index bb0fff5..3dba7a8 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/controller/ProcessRouteController.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/controller/ProcessRouteController.java @@ -73,6 +73,7 @@ public class ProcessRouteController extends BaseController { MaterialBomMapper materialBomMapper; private final IBomDetailsService iBomDetailsService; private final ProcessOrderProMapper proMapper; + private Long generateUniqueParentId(Long originalId) { return originalId + 1000; } @@ -221,10 +222,11 @@ public class ProcessRouteController extends BaseController { child.setXuEndTime(processRouteVo.getXuEndTime()); return child; } + /** * 导出工艺路线列表 */ - @SaCheckPermission("system:route:export") + @SaCheckPermission("system:route:export2") @Log(title = "工艺路线", businessType = BusinessType.EXPORT) @PostMapping("/export2") public void export2(ProcessRouteBo bo, HttpServletResponse response) { @@ -270,6 +272,7 @@ public class ProcessRouteController extends BaseController { throw new RuntimeException("导出Excel异常: " + e.getMessage(), e); } } + @SaCheckPermission("system:route:export") @Log(title = "工艺路线", businessType = BusinessType.EXPORT) @PostMapping("/export") @@ -289,7 +292,7 @@ public class ProcessRouteController extends BaseController { if (file.exists()) { // 读取Excel的sheet6 从第三行开始 读取到第4列 无数据的跳过 DefaultExcelListener listener = new DefaultExcelListener<>(true); - EasyExcel.read(ExcelName, ProcessRoute.class,listener) + EasyExcel.read(ExcelName, ProcessRoute.class, listener) .sheet(6) .headRowNumber(3) .doRead(); @@ -316,7 +319,7 @@ public class ProcessRouteController extends BaseController { .build()) { // 写入到第七个 sheet(index=6),并命名为“工艺路线” - WriteSheet writeSheet = EasyExcel.writerSheet( "已有工艺路线") + WriteSheet writeSheet = EasyExcel.writerSheet("已有工艺路线") .head(ProcessRoute.class) .needHead(true) .build(); @@ -331,8 +334,6 @@ public class ProcessRouteController extends BaseController { } - - /** * 获取工艺路线详细信息 * @@ -355,7 +356,8 @@ public class ProcessRouteController extends BaseController { return toAjax(iProcessRouteService.insertByBo(bo)); } - /**导出 + /** + * 导出 * 修改工艺路线 */ @SaCheckPermission("system:route:edit") @@ -378,8 +380,8 @@ public class ProcessRouteController extends BaseController { return toAjax(iProcessRouteService.deleteWithValidByIds(Arrays.asList(ids), true)); } - @Log(title = "明细导入", businessType = BusinessType.IMPORT) - @SaCheckPermission("system:route:import") + @Log(title = "生产工艺计划表导入", businessType = BusinessType.IMPORT) + @SaCheckPermission("system:route:importRoute") @PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public R importData(@RequestParam("file") MultipartFile file) throws Exception { String originalFilename = file.getOriginalFilename(); @@ -392,16 +394,16 @@ public class ProcessRouteController extends BaseController { ExcelResult result1 = ExcelUtil.importExcelSheet1(file.getInputStream(), ProductionOrderVo.class, true); List list = result1.getList(); String productionOrderNo = list1.get(0).getRouteDescription(); - List bomDetails = iBomDetailsService.selectByProjectNumber(list1.get(0).getRouteDescription()); + List bomDetails = iBomDetailsService.selectByProjectNumber(list1.get(0).getRouteDescription()); List route = iProcessRouteService.selectByProjectNumber(list1.get(0).getRouteDescription()); - if (list1.isEmpty()){ - return R.fail("项目 "+productionOrderNo+"工艺生产计划表为空,请检查此表或将sheet移动至第七个!"); + if (list1.isEmpty()) { + return R.fail("项目 " + productionOrderNo + "工艺生产计划表为空,请检查此表或将sheet移动至第七个!"); } - if (!bomDetails.isEmpty()){ - return R.fail("项目 "+productionOrderNo+"已导入过BOM,请先清空再上传"); + if (!bomDetails.isEmpty()) { + return R.fail("项目 " + productionOrderNo + "已导入过BOM,请先清空再上传"); } - if (!route.isEmpty()){ - return R.fail("项目 "+productionOrderNo+"已导入过工艺 ,请先清空再上传"); + if (!route.isEmpty()) { + return R.fail("项目 " + productionOrderNo + "已导入过工艺 ,请先清空再上传"); } if (iProcessRouteService.saveData(list1, list)) { return R.ok("上传物料成功"); @@ -433,8 +435,7 @@ public class ProcessRouteController extends BaseController { /** * 查询工艺表中所有的需要做工艺的物料 * - * @return - * RequestBody List routeVoList + * @return RequestBody List routeVoList */ public List getProcessRouteList(@RequestParam String rooteProdet) { List list = iProcessRouteService.pushRawMater(rooteProdet); @@ -451,36 +452,36 @@ public class ProcessRouteController extends BaseController { @Log(title = "推送工艺工序") @SaCheckPermission("system:route:pushRouteBom") @PostMapping("/pushRouteBom") - public R pushRouteBom(@RequestParam String rooteProdet,@RequestParam String groupName) { - return iProcessRouteService.pushRouteBom(rooteProdet,groupName); + public R pushRouteBom(@RequestParam String rooteProdet, @RequestParam String groupName) { + return iProcessRouteService.pushRouteBom(rooteProdet, groupName); } /** * 查询项目列表 */ @Log(title = "获取所有的项目令号") - @SaCheckPermission("system:route:getRawBom") + @SaCheckPermission("system:route:getDistinctProjectCodes") @GetMapping("/getDistinctProjectCodes") public ResponseEntity> getDistinctProjectCodes(String query) { return ResponseEntity.ok(iProcessRouteService.getDistinctProjectCodes(query)); } @Log(title = "获取工序列表") - @SaCheckPermission("system:route:getRawBom") + @SaCheckPermission("system:route:getProcessInfoList") @GetMapping("/getProcessInfoList") public ResponseEntity> getProcessInfoList(String query) { return ResponseEntity.ok(iProcessRouteService.getProcessInfoList(query)); } @Log(title = "根据生产令号获取生产编号==》获取计划编号") - @SaCheckPermission("system:route:getRawBom") + @SaCheckPermission("system:route:getSelecPlanRouteList") @PostMapping("/getSelecPlanRouteList") public List getSelecPlanRouteList(@RequestParam String rooteProdet) { return iProcessRouteService.getSelecPlanRouteList(rooteProdet); } - @Log(title = "生成这个项目的pdf") - @SaCheckPermission("system:route:getRawBom") + @Log(title = "生成项目图纸PDF") + @SaCheckPermission("system:route:generatePDFs") @GetMapping("/generatePDFs") public void generatePDFs(String rooteProdet, HttpServletResponse response) throws IOException { // 调用服务层方法生成 ZIP 文件并获取其路径 @@ -513,6 +514,7 @@ public class ProcessRouteController extends BaseController { public List updateProcessPlan(@RequestParam String rooteProdet) throws Exception { return iProcessRouteService.updateProcessPlan(rooteProdet); } + /** * 更新生产订单的时间 */ @@ -544,10 +546,9 @@ public class ProcessRouteController extends BaseController { } @Log(title = "获取材料bom列表") - @SaCheckPermission("system:route:getRawBom") + @SaCheckPermission("system:route:getBomInfo") @PostMapping("/getBomInfo") - public ResponseEntity> getProcessMaterialList( - @RequestParam(value = "materialCode") String materialCode, + public ResponseEntity> getProcessMaterialList( @RequestParam(value = "materialCode") String materialCode, @RequestParam(value = "materialName") String materialName, @RequestParam(value = "productionOrderNo") String productionOrderNo) { @@ -578,12 +579,12 @@ public class ProcessRouteController extends BaseController { @Log(title = "导入时间", businessType = BusinessType.IMPORT) - @SaCheckPermission("system:route:importDataTime") + @SaCheckPermission("system:route:importDataTime123") @PostMapping(value = "/importDataTime123", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public R importDataTime123(@RequestParam("file") MultipartFile file) throws Exception { DefaultExcelListener listener = new DefaultExcelListener<>(true); - EasyExcel.read(file.getInputStream(), PcRigidChainVo.class,listener) .excelType(ExcelTypeEnum.XLS).sheet(1).headRowNumber(4).doRead(); + EasyExcel.read(file.getInputStream(), PcRigidChainVo.class, listener).excelType(ExcelTypeEnum.XLS).sheet(1).headRowNumber(4).doRead(); List list1 = listener.getExcelResult().getList(); for (PcRigidChainVo pcRigidChainVO : list1) { @@ -594,9 +595,8 @@ public class ProcessRouteController extends BaseController { } - @Log(title = "获取金蝶工艺路线") - @SaCheckPermission("system:route:getSelectProcessRoute") + @SaCheckPermission("system:route:getSelectProcessRout1e") @PostMapping("/getSelectProcessRout1e") public List getSelectProcessRoute1(@RequestParam String materilCode) { return iProcessRouteService.getSelectProcessRoute(materilCode); @@ -620,9 +620,10 @@ public class ProcessRouteController extends BaseController { }); } + private void processMaterAndRoute(JDMaterialAndRoute materialAndRoute, List bomDetailsList, List routeList, List materialBoms, String productionOrderNo) { // 处理工序列表 - materialAndRoute.getPlannedProcessVos().forEach(processRouteDTO -> { + materialAndRoute.getPlannedProcessVos().forEach(processRouteDTO -> { ProcessRoute processRoute = createProcessRoute1(processRouteDTO, materialAndRoute, productionOrderNo); routeList.add(processRoute); }); @@ -649,7 +650,7 @@ public class ProcessRouteController extends BaseController { materialBom.setUnit(materialUsageDTO.getChildUnit()); materialBom.setMaterialType(materialUsageDTO.getCaizhi()); //保留四位小数 - materialBom.setQuantity(String.valueOf(BigDecimal.valueOf(materialUsageDTO.getFenzi()).divide(new BigDecimal(materialUsageDTO.getFenmu()),4, RoundingMode.HALF_UP))); + materialBom.setQuantity(String.valueOf(BigDecimal.valueOf(materialUsageDTO.getFenzi()).divide(new BigDecimal(materialUsageDTO.getFenmu()), 4, RoundingMode.HALF_UP))); return materialBom; } @@ -705,7 +706,7 @@ public class ProcessRouteController extends BaseController { processRoute.setRawMaterialCode(materialUsageDTO.getMaterialCode()); processRoute.setRawMaterialName(materialUsageDTO.getMaterialName()); processRoute.setBomUnit(materialUsageDTO.getChildUnit()); - if (materialUsageDTO.getChildUnit().equals("根")) { + if (materialUsageDTO.getChildUnit().equals("根")) { processRoute.setDiscUsage(String.valueOf(Double.valueOf(materialUsageDTO.getFenmu()))); } else { processRoute.setDiscUsage(String.valueOf((double) (materialUsageDTO.getFenzi() / materialUsageDTO.getFenmu()))); @@ -810,9 +811,9 @@ public class ProcessRouteController extends BaseController { //子项分母 bomDetails.setDenominator(materialUsageDTO.getFDenominator()); bomDetails.setName(materialUsageDTO.getMaterialName()); - if (materialUsageDTO.getItemType().equals("1")){ + if (materialUsageDTO.getItemType().equals("1")) { bomDetails.setStats("外购"); - }else{ + } else { bomDetails.setStats("自制"); } @@ -821,7 +822,7 @@ public class ProcessRouteController extends BaseController { } private MaterialBom creatBomMaterial(MaterialUsageDTO materialUsageDTO, CombinedDTO combinedDTO, - String productionOrderNo) { + String productionOrderNo) { MaterialBom materialBom = new MaterialBom(); materialBom.setProjectNumber(productionOrderNo); materialBom.setParentMaterialCode(combinedDTO.getMaterialCode()); @@ -865,7 +866,7 @@ public class ProcessRouteController extends BaseController { .headRowNumber(3) .doRead(); List list = listener.getExcelResult().getList(); - List list1 = iProcessRouteService.getProcessRouteGD(list,rooteProdet); + List list1 = iProcessRouteService.getProcessRouteGD(list, rooteProdet); List bomDetailsList = new ArrayList<>(); List routeList = new ArrayList<>(); @@ -875,13 +876,38 @@ public class ProcessRouteController extends BaseController { processMaterAndRoute(materialAndRoute, bomDetailsList, routeList, materialBoms, rooteProdet); } - bomDetailsMapper.insertBatch(bomDetailsList); - baseMapper.insertBatch(routeList); - materialBomMapper.insertBatch(materialBoms); + bomDetailsMapper.insertBatch(bomDetailsList); + baseMapper.insertBatch(routeList); + materialBomMapper.insertBatch(materialBoms); } } catch (Exception e) { throw new RuntimeException(e); } } + + + /** + * 更新生产订单仓库字段 + */ + @SaCheckPermission("system:route:updateProductionOrders") + @Log(title = "获取全部工艺路线和物料清单", businessType = BusinessType.OTHER) + @PostMapping("/updateProductionOrders") + public R updateProductionOrders(@RequestParam("rooteProdet") String rooteProdet,@RequestParam("cangKuNum")String cangKuNum) throws Exception { + //判断此项目是否有 + List list = iProcessRouteService.updateProductionOrders(rooteProdet,cangKuNum); + return R.ok(list); + } + + /** + * 更新采购申请仓库字段 + */ + @SaCheckPermission("system:route:updateProductionOrders") + @Log(title = "获取全部工艺路线和物料清单", businessType = BusinessType.OTHER) + @PostMapping("/updateCgOrders") + public R updateCgOrders(@RequestParam("rooteProdet") String rooteProdet,@RequestParam("cangKuNum")String cangKuNum) { + //判断此项目是否有 + List list = iProcessRouteService.updateCgOrders(rooteProdet,cangKuNum); + return R.ok(list); + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec100r.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec100r.java new file mode 100644 index 0000000..a7c10ce --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec100r.java @@ -0,0 +1,173 @@ +package com.ruoyi.system.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * 100R设备规格参数对象 device_spec_100r + * + * @author ruoyi + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("device_spec_100r") +public class DeviceSpec100r extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + /** + * 行程变量 + */ + private String travelLength; + /** + * 类型 + */ + private String itemType; + /** + * 轴向 + */ + private String axialType; + /** + * 箱体 + */ + private String boxType; + /** + * 行程 + */ + private Long V1; + /** + * 设备总长 + */ + private Long V2; + /** + * 地脚位置1 + */ + private Long V3; + /** + * 地脚位置1 + */ + private Long V4; + /** + * 箱体装配长度 + */ + private Long V5; + /** + * 箱体地脚位置1 + */ + private Long V6; + /** + * 箱体地脚位置1 + */ + private Long V7; + /** + * 铝箱长度1 + */ + private Long V8; + /** + * 铝箱1重量 + */ + private BigDecimal G1; + /** + * 铝箱长度2 + */ + private Long V9; + /** + * 铝箱2重量 + */ + private BigDecimal G2; + /** + * 导向条长度1 + */ + private Long V10; + /** + * 导向条1单重 + */ + private BigDecimal G5; + /** + * 导向条长度1数量 + */ + private Long V11; + /** + * 导向条长度2 + */ + private Long V12; + /** + * 导向条2单重 + */ + private BigDecimal G6; + /** + * 导向条2数量 + */ + private Long V13; + /** + * 导向条长度3 + */ + private Long V14; + /** + * 导向条3单重 + */ + private BigDecimal G7; + /** + * 导向条3数量 + */ + private Long V15; + /** + * 外链板 + */ + private Long V41; + /** + * 内链板 + */ + private Long V42; + /** + * 连接板 + */ + private Long V43; + /** + * 滚轮轴 + */ + private Long V44; + /** + * 隔套 + */ + private Long V45; + /** + * 隔垫 + */ + private Long V46; + /** + * 滚轮 + */ + private Long V47; + /** + * 垫圈 + */ + private Long V48; + /** + * 挡圈 + */ + private Long V49; + /** + * 滚轮隔套 + */ + private Long V50; + /** + * 内链板组件 + */ + private Long V51; + /** + * 内链板组件 + */ + private Long V52; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec125r.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec125r.java new file mode 100644 index 0000000..a15995f --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec125r.java @@ -0,0 +1,197 @@ +package com.ruoyi.system.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * 125R设备规格参数对象 device_spec_125r + * + * @author ruoyi + * @date 2025-12-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("device_spec_125r") +public class DeviceSpec125r extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + /** + * 行程 + */ + private String travelLength; + /** + * 类型 + */ + private String itemType; + /** + * 轴向 + */ + private String axialType; + /** + * 箱体 + */ + private String boxType; + /** + * v1 + */ + private Long v1; + /** + * v2 + */ + private Long v2; + /** + * v3 + */ + private Long v3; + /** + * v4 + */ + private Long v4; + /** + * v5 + */ + private Long v5; + /** + * v6 + */ + private Long v6; + /** + * v7 + */ + private Long v7; + /** + * v8 + */ + private Long v8; + /** + * g1 + */ + private BigDecimal g1; + /** + * v9 + */ + private Long v9; + /** + * g2 + */ + private BigDecimal g2; + /** + * g3 + */ + private BigDecimal g3; + /** + * g4 + */ + private BigDecimal g4; + /** + * v10 + */ + private Long v10; + /** + * g5 + */ + private BigDecimal g5; + /** + * v11 + */ + private Long v11; + /** + * v12 + */ + private Long v12; + /** + * g6 + */ + private BigDecimal g6; + /** + * v13 + */ + private Long v13; + /** + * v14 + */ + private Long v14; + /** + * g7 + */ + private BigDecimal g7; + /** + * v15 + */ + private Long v15; + /** + * v16 + */ + private Long v16; + /** + * v17 + */ + private Long v17; + /** + * v18 + */ + private Long v18; + /** + * v19 + */ + private Long v19; + /** + * v20 + */ + private Long v20; + /** + * v41 + */ + private Long v41; + /** + * v42 + */ + private Long v42; + /** + * v43 + */ + private Long v43; + /** + * v44 + */ + private Long v44; + /** + * v45 + */ + private Long v45; + /** + * v46 + */ + private Long v46; + /** + * v47 + */ + private Long v47; + /** + * v48 + */ + private Long v48; + /** + * v49 + */ + private Long v49; + /** + * v50 + */ + private Long v50; + /** + * v51 + */ + private Long v51; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec150r.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec150r.java new file mode 100644 index 0000000..d5e3f84 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec150r.java @@ -0,0 +1,213 @@ +package com.ruoyi.system.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * 150R设备规格参数对象 device_spec_150r + * + * @author ruoyi + * @date 2025-12-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("device_spec_150r") +public class DeviceSpec150r extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + /** + * 行程 + */ + private String travelLength; + /** + * 类型 + */ + private String itemType; + /** + * 轴向 + */ + private String axialType; + /** + * 箱体 + */ + private String boxType; + /** + * v1 + */ + private Long v1; + /** + * v2 + */ + private Long v2; + /** + * v3 + */ + private Long v3; + /** + * v4 + */ + private Long v4; + /** + * v21 + */ + private Long v21; + /** + * v22 + */ + private Long v22; + /** + * v23 + */ + private Long v23; + /** + * v24 + */ + private Long v24; + /** + * v5 + */ + private Long v5; + /** + * v6 + */ + private Long v6; + /** + * v7 + */ + private Long v7; + /** + * v8 + */ + private Long v8; + /** + * g1 + */ + private BigDecimal g1; + /** + * v9 + */ + private Long v9; + /** + * g2 + */ + private BigDecimal g2; + /** + * g3 + */ + private BigDecimal g3; + /** + * g4 + */ + private BigDecimal g4; + /** + * v10 + */ + private Long v10; + /** + * g5 + */ + private BigDecimal g5; + /** + * v11 + */ + private Long v11; + /** + * v12 + */ + private Long v12; + /** + * g6 + */ + private BigDecimal g6; + /** + * v13 + */ + private Long v13; + /** + * v14 + */ + private Long v14; + /** + * g7 + */ + private BigDecimal g7; + /** + * v15 + */ + private Long v15; + /** + * v16 + */ + private Long v16; + /** + * v17 + */ + private Long v17; + /** + * v18 + */ + private Long v18; + /** + * v19 + */ + private Long v19; + /** + * v20 + */ + private Long v20; + /** + * v41 + */ + private Long v41; + /** + * v42 + */ + private Long v42; + /** + * v43 + */ + private Long v43; + /** + * v44 + */ + private Long v44; + /** + * v45 + */ + private Long v45; + /** + * v46 + */ + private Long v46; + /** + * v47 + */ + private Long v47; + /** + * v48 + */ + private Long v48; + /** + * v49 + */ + private Long v49; + /** + * v50 + */ + private Long v50; + /** + * v51 + */ + private Long v51; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec30d.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec30d.java new file mode 100644 index 0000000..fe0efc8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec30d.java @@ -0,0 +1,129 @@ +package com.ruoyi.system.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * device_spec_30D 对象 device_spec_30d + * + * @author ruoyi + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("device_spec_30d") +public class DeviceSpec30d extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + /** + * 行程变量 + */ + private String travelLength; + /** + * 类型 + */ + private String itemType; + /** + * 轴向 + */ + private String axialType; + /** + * 箱体 + */ + private String boxType; + /** + * v1 + */ + private Long v1; + /** + * v2 + */ + private Long v2; + /** + * v3 + */ + private Long v3; + /** + * v5 + */ + private Long v5; + /** + * v6 + */ + private Long v6; + /** + * v8 + */ + private Long v8; + /** + * g1 + */ + private BigDecimal g1; + /** + * v10 + */ + private Long v10; + /** + * g5 + */ + private BigDecimal g5; + /** + * g8 + */ + private BigDecimal g8; + /** + * v12 + */ + private Long v12; + /** + * g6 + */ + private BigDecimal g6; + /** + * g9 + */ + private BigDecimal g9; + /** + * v41 + */ + private Long v41; + /** + * v42 + */ + private Long v42; + /** + * v43 + */ + private Long v43; + /** + * v44 + */ + private Long v44; + /** + * v45 + */ + private Long v45; + /** + * v46 + */ + private Long v46; + /** + * v47 + */ + private Long v47; + /** + * v48 + */ + private Long v48; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec30s.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec30s.java new file mode 100644 index 0000000..2cfe070 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec30s.java @@ -0,0 +1,109 @@ +package com.ruoyi.system.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * 30S设备规格参数对象 device_spec_30s + * + * @author ruoyi + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("device_spec_30s") +public class DeviceSpec30s extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + /** + * 行程变量 + */ + private String travelLength; + /** + * 类型 + */ + private String itemType; + /** + * 轴向 + */ + private String axialType; + /** + * 箱体 + */ + private String boxType; + /** + * v1 + */ + private Long v1; + /** + * v2 + */ + private Long v2; + /** + * v3 + */ + private Long v3; + /** + * v5 + */ + private Long v5; + /** + * v8 + */ + private Long v8; + /** + * g1 + */ + private BigDecimal g1; + /** + * v10 + */ + private Long v10; + /** + * g5 + */ + private BigDecimal g5; + /** + * v12 + */ + private Long v12; + /** + * g6 + */ + private BigDecimal g6; + /** + * v41 + */ + private Long v41; + /** + * v42 + */ + private Long v42; + /** + * v43 + */ + private Long v43; + /** + * v44 + */ + private Long v44; + /** + * v45 + */ + private Long v45; + /** + * v46 + */ + private Long v46; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec35r.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec35r.java index 2866ee0..fff0e28 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec35r.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec35r.java @@ -125,5 +125,12 @@ public class DeviceSpec35r extends BaseEntity { * 35E链板 */ private Long V46; - + /** + * + */ + private Long V47; + /** + * + */ + private Long V48; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec40r.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec40r.java new file mode 100644 index 0000000..090d424 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec40r.java @@ -0,0 +1,157 @@ +package com.ruoyi.system.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * 40R设备规格参数对象 device_spec_40r + * + * @author ruoyi + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("device_spec_40r") +public class DeviceSpec40r extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + /** + * 行程变量 + */ + private String travelLength; + /** + * 类型 + */ + private String itemType; + /** + * 轴向 + */ + private String axialType; + /** + * 箱体 + */ + private String boxType; + /** + * 行程 + */ + private Long V1; + /** + * 设备总长 + */ + private Long V2; + /** + * 地脚位置1 + */ + private Long V3; + /** + * 箱体装配长度 + */ + private Long V5; + /** + * 箱体地脚位置1 + */ + private Long V6; + /** + * 铝箱长度1 + */ + private Long V8; + /** + * 铝箱1重量 + */ + private BigDecimal G1; + /** + * 铝箱长度2 + */ + private Long V9; + /** + * 铝箱2重量 + */ + private BigDecimal G2; + /** + * 导向条长度1 + */ + private Long V10; + /** + * 导向条1单重 + */ + private BigDecimal G5; + /** + * 导向条长度1数量 + */ + private Long V11; + /** + * 导向条长度2 + */ + private Long V12; + /** + * 导向条2单重 + */ + private BigDecimal G6; + /** + * 导向条2数量 + */ + private Long V13; + /** + * 导向条长度3 + */ + private Long V14; + /** + * 导向条3单重 + */ + private BigDecimal G7; + /** + * 导向条3数量 + */ + private Long V15; + /** + * 外链板 + */ + private Long V41; + /** + * 内链板 + */ + private Long V42; + /** + * 连接板 + */ + private Long V43; + /** + * 滚轮轴 + */ + private Long V44; + /** + * 隔套 + */ + private Long V45; + /** + * 隔垫 + */ + private Long V46; + /** + * 滚轮 + */ + private Long V47; + /** + * 卡簧 + */ + private Long V48; + /** + * 链套轴 + */ + private Long V49; + /** + * 链套 + */ + private Long V50; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec40s.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec40s.java new file mode 100644 index 0000000..c5203ac --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec40s.java @@ -0,0 +1,169 @@ +package com.ruoyi.system.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * 40S设备规格参数对象 device_spec_40s + * + * @author ruoyi + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("device_spec_40s") +public class DeviceSpec40s extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 主键ID + */ + @TableId(value = "id") + private Long id; + /** + * 行程变量 + */ + private String travelLength; + /** + * 类型 + */ + private String itemType; + /** + * 轴向 + */ + private String axialType; + /** + * 箱体 + */ + private String boxType; + /** + * 行程 + */ + private Long V1; + /** + * 设备总长 + */ + private Long V2; + /** + * P40SI设备总仓 + */ + private Long V22; + /** + * 地脚位置1 + */ + private Long V3; + /** + * P40SI地脚位置 + */ + private Long V23; + /** + * 箱体装配长度 + */ + private Long V5; + /** + * 箱体地脚位置1 + */ + private Long V6; + /** + * 铝箱长度1 + */ + private Long V8; + /** + * 铝箱1重量 + */ + private BigDecimal G1; + /** + * 铝箱长度2 + */ + private Long V9; + /** + * 铝箱2重量 + */ + private BigDecimal G2; + /** + * 导向条长度1 + */ + private Long V10; + /** + * 导向条1单重 + */ + private BigDecimal G5; + /** + * 导向条长度1数量 + */ + private Long V11; + /** + * 导向条长度2 + */ + private Long V12; + /** + * 导向条2单重 + */ + private BigDecimal G6; + /** + * 导向条2数量 + */ + private Long V13; + /** + * 导向条长度3 + */ + private Long V14; + /** + * 导向条3单重 + */ + private BigDecimal G7; + /** + * 导向条3数量 + */ + private Long V15; + /** + * 外链板 + */ + private Long V41; + /** + * 内链板 + */ + private Long V42; + /** + * 连接板 + */ + private Long V43; + /** + * 滚轮轴 + */ + private Long V44; + /** + * 隔套 + */ + private Long V45; + /** + * 隔垫 + */ + private Long V46; + /** + * 滚轮 + */ + private Long V47; + /** + * 垫圈 + */ + private Long V48; + /** + * 挡圈 + */ + private Long V49; + /** + * 滚轮隔套 + */ + private Long V50; + /** + * 内链板组件 + */ + private Long V51; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec60r.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec60r.java new file mode 100644 index 0000000..7f409a7 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec60r.java @@ -0,0 +1,157 @@ +package com.ruoyi.system.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * 60R设备规格参数对象 device_spec_60r + * + * @author ruoyi + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("device_spec_60r") +public class DeviceSpec60r extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + /** + * 行程变量 + */ + private String travelLength; + /** + * 类型 + */ + private String itemType; + /** + * 轴向 + */ + private String axialType; + /** + * 箱体 + */ + private String boxType; + /** + * v1 + */ + private Long v1; + /** + * v2 + */ + private Long v2; + /** + * v3 + */ + private Long v3; + /** + * v5 + */ + private Long v5; + /** + * v6 + */ + private Long v6; + /** + * v8 + */ + private Long v8; + /** + * g1 + */ + private BigDecimal g1; + /** + * v9 + */ + private Long v9; + /** + * g2 + */ + private BigDecimal g2; + /** + * v10 + */ + private Long v10; + /** + * g5 + */ + private BigDecimal g5; + /** + * v11 + */ + private Long v11; + /** + * v12 + */ + private Long v12; + /** + * g6 + */ + private BigDecimal g6; + /** + * v13 + */ + private Long v13; + /** + * v14 + */ + private Long v14; + /** + * g7 + */ + private BigDecimal g7; + /** + * v15 + */ + private Long v15; + /** + * v41 + */ + private Long v41; + /** + * v42 + */ + private Long v42; + /** + * v43 + */ + private Long v43; + /** + * v44 + */ + private Long v44; + /** + * v45 + */ + private Long v45; + /** + * v46 + */ + private Long v46; + /** + * v47 + */ + private Long v47; + /** + * v48 + */ + private Long v48; + /** + * v49 + */ + private Long v49; + /** + * v50 + */ + private Long v50; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec80r.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec80r.java new file mode 100644 index 0000000..80e3277 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/DeviceSpec80r.java @@ -0,0 +1,161 @@ +package com.ruoyi.system.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.ruoyi.common.core.domain.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; + +/** + * 80R设备规格参数对象 device_spec_80r + * + * @author ruoyi + * @date 2025-12-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("device_spec_80r") +public class DeviceSpec80r extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * id + */ + @TableId(value = "id") + private Long id; + /** + * 行程变量 + */ + private String travelLength; + /** + * 类型 + */ + private String itemType; + /** + * 轴向 + */ + private String axialType; + /** + * 箱体 + */ + private String boxType; + /** + * v1 + */ + private Long v1; + /** + * v2 + */ + private Long v2; + /** + * v3 + */ + private Long v3; + /** + * v5 + */ + private Long v5; + /** + * v6 + */ + private Long v6; + /** + * v8 + */ + private Long v8; + /** + * g1 + */ + private BigDecimal g1; + /** + * v9 + */ + private Long v9; + /** + * g2 + */ + private BigDecimal g2; + /** + * v10 + */ + private Long v10; + /** + * g5 + */ + private BigDecimal g5; + /** + * v11 + */ + private Long v11; + /** + * v12 + */ + private Long v12; + /** + * g6 + */ + private BigDecimal g6; + /** + * v13 + */ + private Long v13; + /** + * v14 + */ + private Long v14; + /** + * g7 + */ + private BigDecimal g7; + /** + * v15 + */ + private Long v15; + /** + * v41 + */ + private Long v41; + /** + * v42 + */ + private Long v42; + /** + * v43 + */ + private Long v43; + /** + * v44 + */ + private Long v44; + /** + * v45 + */ + private Long v45; + /** + * v46 + */ + private Long v46; + /** + * v47 + */ + private Long v47; + /** + * v48 + */ + private Long v48; + /** + * v49 + */ + private Long v49; + /** + * v50 + */ + private Long v50; + /** + * v51 + */ + private Long v51; + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/FigureSave.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/FigureSave.java index 4efccb4..a3ed058 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/FigureSave.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/FigureSave.java @@ -57,4 +57,12 @@ public class FigureSave extends BaseEntity { * 关联项目表 */ private Long pid; + /** + * 轴向 + */ + private String axialType; + /** + * 箱体类型 + */ + private String boxType; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec100rBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec100rBo.java new file mode 100644 index 0000000..98d53b6 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec100rBo.java @@ -0,0 +1,246 @@ +package com.ruoyi.system.domain.bo; + +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.math.BigDecimal; + +/** + * 100R设备规格参数业务对象 device_spec_100r + * + * @author ruoyi + * @date 2025-12-03 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class DeviceSpec100rBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 行程变量 + */ + @NotBlank(message = "行程变量不能为空", groups = { AddGroup.class, EditGroup.class }) + private String travelLength; + + /** + * 类型 + */ + @NotBlank(message = "类型不能为空", groups = { AddGroup.class, EditGroup.class }) + private String itemType; + + /** + * 轴向 + */ + @NotBlank(message = "轴向不能为空", groups = { AddGroup.class, EditGroup.class }) + private String axialType; + + /** + * 箱体 + */ + @NotBlank(message = "箱体不能为空", groups = { AddGroup.class, EditGroup.class }) + private String boxType; + + /** + * 行程 + */ + @NotNull(message = "行程不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V1; + + /** + * 设备总长 + */ + @NotNull(message = "设备总长不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V2; + + /** + * 地脚位置1 + */ + @NotNull(message = "地脚位置1不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V3; + + /** + * 地脚位置1 + */ + @NotNull(message = "地脚位置1不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V4; + + /** + * 箱体装配长度 + */ + @NotNull(message = "箱体装配长度不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V5; + + /** + * 箱体地脚位置1 + */ + @NotNull(message = "箱体地脚位置1不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V6; + + /** + * 箱体地脚位置1 + */ + @NotNull(message = "箱体地脚位置1不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V7; + + /** + * 铝箱长度1 + */ + @NotNull(message = "铝箱长度1不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V8; + + /** + * 铝箱1重量 + */ + @NotNull(message = "铝箱1重量不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal G1; + + /** + * 铝箱长度2 + */ + @NotNull(message = "铝箱长度2不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V9; + + /** + * 铝箱2重量 + */ + @NotNull(message = "铝箱2重量不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal G2; + + /** + * 导向条长度1 + */ + @NotNull(message = "导向条长度1不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V10; + + /** + * 导向条1单重 + */ + @NotNull(message = "导向条1单重不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal G5; + + /** + * 导向条长度1数量 + */ + @NotNull(message = "导向条长度1数量不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V11; + + /** + * 导向条长度2 + */ + @NotNull(message = "导向条长度2不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V12; + + /** + * 导向条2单重 + */ + @NotNull(message = "导向条2单重不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal G6; + + /** + * 导向条2数量 + */ + @NotNull(message = "导向条2数量不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V13; + + /** + * 导向条长度3 + */ + @NotNull(message = "导向条长度3不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V14; + + /** + * 导向条3单重 + */ + @NotNull(message = "导向条3单重不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal G7; + + /** + * 导向条3数量 + */ + @NotNull(message = "导向条3数量不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V15; + + /** + * 外链板 + */ + @NotNull(message = "外链板不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V41; + + /** + * 内链板 + */ + @NotNull(message = "内链板不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V42; + + /** + * 连接板 + */ + @NotNull(message = "连接板不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V43; + + /** + * 滚轮轴 + */ + @NotNull(message = "滚轮轴不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V44; + + /** + * 隔套 + */ + @NotNull(message = "隔套不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V45; + + /** + * 隔垫 + */ + @NotNull(message = "隔垫不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V46; + + /** + * 滚轮 + */ + @NotNull(message = "滚轮不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V47; + + /** + * 垫圈 + */ + @NotNull(message = "垫圈不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V48; + + /** + * 挡圈 + */ + @NotNull(message = "挡圈不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V49; + + /** + * 滚轮隔套 + */ + @NotNull(message = "滚轮隔套不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V50; + + /** + * 内链板组件 + */ + @NotNull(message = "内链板组件不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V51; + + /** + * 内链板组件 + */ + @NotNull(message = "内链板组件不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V52; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec125rBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec125rBo.java new file mode 100644 index 0000000..f73fc12 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec125rBo.java @@ -0,0 +1,282 @@ +package com.ruoyi.system.domain.bo; + +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.math.BigDecimal; + +/** + * 125R设备规格参数业务对象 device_spec_125r + * + * @author ruoyi + * @date 2025-12-06 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class DeviceSpec125rBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 行程 + */ + @NotBlank(message = "行程不能为空", groups = { AddGroup.class, EditGroup.class }) + private String travelLength; + + /** + * 类型 + */ + @NotBlank(message = "类型不能为空", groups = { AddGroup.class, EditGroup.class }) + private String itemType; + + /** + * 轴向 + */ + @NotBlank(message = "轴向不能为空", groups = { AddGroup.class, EditGroup.class }) + private String axialType; + + /** + * 箱体 + */ + @NotBlank(message = "箱体不能为空", groups = { AddGroup.class, EditGroup.class }) + private String boxType; + + /** + * v1 + */ + @NotNull(message = "v1不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v1; + + /** + * v2 + */ + @NotNull(message = "v2不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v2; + + /** + * v3 + */ + @NotNull(message = "v3不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v3; + + /** + * v4 + */ + @NotNull(message = "v4不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v4; + + /** + * v5 + */ + @NotNull(message = "v5不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v5; + + /** + * v6 + */ + @NotNull(message = "v6不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v6; + + /** + * v7 + */ + @NotNull(message = "v7不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v7; + + /** + * v8 + */ + @NotNull(message = "v8不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v8; + + /** + * g1 + */ + @NotNull(message = "g1不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g1; + + /** + * v9 + */ + @NotNull(message = "v9不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v9; + + /** + * g2 + */ + @NotNull(message = "g2不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g2; + + /** + * g3 + */ + @NotNull(message = "g3不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g3; + + /** + * g4 + */ + @NotNull(message = "g4不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g4; + + /** + * v10 + */ + @NotNull(message = "v10不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v10; + + /** + * g5 + */ + @NotNull(message = "g5不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g5; + + /** + * v11 + */ + @NotNull(message = "v11不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v11; + + /** + * v12 + */ + @NotNull(message = "v12不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v12; + + /** + * g6 + */ + @NotNull(message = "g6不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g6; + + /** + * v13 + */ + @NotNull(message = "v13不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v13; + + /** + * v14 + */ + @NotNull(message = "v14不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v14; + + /** + * g7 + */ + @NotNull(message = "g7不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g7; + + /** + * v15 + */ + @NotNull(message = "v15不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v15; + + /** + * v16 + */ + @NotNull(message = "v16不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v16; + + /** + * v17 + */ + @NotNull(message = "v17不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v17; + + /** + * v18 + */ + @NotNull(message = "v18不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v18; + + /** + * v19 + */ + @NotNull(message = "v19不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v19; + + /** + * v20 + */ + @NotNull(message = "v20不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v20; + + /** + * v41 + */ + @NotNull(message = "v41不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v41; + + /** + * v42 + */ + @NotNull(message = "v42不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v42; + + /** + * v43 + */ + @NotNull(message = "v43不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v43; + + /** + * v44 + */ + @NotNull(message = "v44不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v44; + + /** + * v45 + */ + @NotNull(message = "v45不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v45; + + /** + * v46 + */ + @NotNull(message = "v46不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v46; + + /** + * v47 + */ + @NotNull(message = "v47不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v47; + + /** + * v48 + */ + @NotNull(message = "v48不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v48; + + /** + * v49 + */ + @NotNull(message = "v49不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v49; + + /** + * v50 + */ + @NotNull(message = "v50不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v50; + + /** + * v51 + */ + @NotNull(message = "v51不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v51; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec150rBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec150rBo.java new file mode 100644 index 0000000..82ed377 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec150rBo.java @@ -0,0 +1,306 @@ +package com.ruoyi.system.domain.bo; + +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.math.BigDecimal; + +/** + * 150R设备规格参数业务对象 device_spec_150r + * + * @author ruoyi + * @date 2025-12-06 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class DeviceSpec150rBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 行程 + */ + @NotBlank(message = "行程不能为空", groups = { AddGroup.class, EditGroup.class }) + private String travelLength; + + /** + * 类型 + */ + @NotBlank(message = "类型不能为空", groups = { AddGroup.class, EditGroup.class }) + private String itemType; + + /** + * 轴向 + */ + @NotBlank(message = "轴向不能为空", groups = { AddGroup.class, EditGroup.class }) + private String axialType; + + /** + * 箱体 + */ + @NotBlank(message = "箱体不能为空", groups = { AddGroup.class, EditGroup.class }) + private String boxType; + + /** + * v1 + */ + @NotNull(message = "v1不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v1; + + /** + * v2 + */ + @NotNull(message = "v2不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v2; + + /** + * v3 + */ + @NotNull(message = "v3不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v3; + + /** + * v4 + */ + @NotNull(message = "v4不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v4; + + /** + * v21 + */ + @NotNull(message = "v21不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v21; + + /** + * v22 + */ + @NotNull(message = "v22不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v22; + + /** + * v23 + */ + @NotNull(message = "v23不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v23; + + /** + * v24 + */ + @NotNull(message = "v24不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v24; + + /** + * v5 + */ + @NotNull(message = "v5不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v5; + + /** + * v6 + */ + @NotNull(message = "v6不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v6; + + /** + * v7 + */ + @NotNull(message = "v7不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v7; + + /** + * v8 + */ + @NotNull(message = "v8不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v8; + + /** + * g1 + */ + @NotNull(message = "g1不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g1; + + /** + * v9 + */ + @NotNull(message = "v9不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v9; + + /** + * g2 + */ + @NotNull(message = "g2不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g2; + + /** + * g3 + */ + @NotNull(message = "g3不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g3; + + /** + * g4 + */ + @NotNull(message = "g4不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g4; + + /** + * v10 + */ + @NotNull(message = "v10不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v10; + + /** + * g5 + */ + @NotNull(message = "g5不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g5; + + /** + * v11 + */ + @NotNull(message = "v11不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v11; + + /** + * v12 + */ + @NotNull(message = "v12不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v12; + + /** + * g6 + */ + @NotNull(message = "g6不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g6; + + /** + * v13 + */ + @NotNull(message = "v13不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v13; + + /** + * v14 + */ + @NotNull(message = "v14不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v14; + + /** + * g7 + */ + @NotNull(message = "g7不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g7; + + /** + * v15 + */ + @NotNull(message = "v15不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v15; + + /** + * v16 + */ + @NotNull(message = "v16不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v16; + + /** + * v17 + */ + @NotNull(message = "v17不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v17; + + /** + * v18 + */ + @NotNull(message = "v18不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v18; + + /** + * v19 + */ + @NotNull(message = "v19不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v19; + + /** + * v20 + */ + @NotNull(message = "v20不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v20; + + /** + * v41 + */ + @NotNull(message = "v41不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v41; + + /** + * v42 + */ + @NotNull(message = "v42不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v42; + + /** + * v43 + */ + @NotNull(message = "v43不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v43; + + /** + * v44 + */ + @NotNull(message = "v44不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v44; + + /** + * v45 + */ + @NotNull(message = "v45不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v45; + + /** + * v46 + */ + @NotNull(message = "v46不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v46; + + /** + * v47 + */ + @NotNull(message = "v47不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v47; + + /** + * v48 + */ + @NotNull(message = "v48不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v48; + + /** + * v49 + */ + @NotNull(message = "v49不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v49; + + /** + * v50 + */ + @NotNull(message = "v50不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v50; + + /** + * v51 + */ + @NotNull(message = "v51不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v51; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec30dBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec30dBo.java new file mode 100644 index 0000000..a0f634d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec30dBo.java @@ -0,0 +1,179 @@ +package com.ruoyi.system.domain.bo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.math.BigDecimal; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +/** + * device_spec_30D 业务对象 device_spec_30d + * + * @author ruoyi + * @date 2025-12-03 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class DeviceSpec30dBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 行程变量 + */ + @NotBlank(message = "行程变量不能为空", groups = { AddGroup.class, EditGroup.class }) + private String travelLength; + + /** + * 类型 + */ + @NotBlank(message = "类型不能为空", groups = { AddGroup.class, EditGroup.class }) + private String itemType; + + /** + * 轴向 + */ + @NotBlank(message = "轴向不能为空", groups = { AddGroup.class, EditGroup.class }) + private String axialType; + + /** + * 箱体 + */ + @NotBlank(message = "箱体不能为空", groups = { AddGroup.class, EditGroup.class }) + private String boxType; + + /** + * v1 + */ + @NotNull(message = "v1不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v1; + + /** + * v2 + */ + @NotNull(message = "v2不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v2; + + /** + * v3 + */ + @NotNull(message = "v3不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v3; + + /** + * v5 + */ + @NotNull(message = "v5不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v5; + + /** + * v6 + */ + @NotNull(message = "v6不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v6; + + /** + * v8 + */ + @NotNull(message = "v8不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v8; + + /** + * g1 + */ + @NotNull(message = "g1不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g1; + + /** + * v10 + */ + @NotNull(message = "v10不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v10; + + /** + * g5 + */ + @NotNull(message = "g5不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g5; + + /** + * g8 + */ + @NotNull(message = "g8不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g8; + + /** + * v12 + */ + @NotNull(message = "v12不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v12; + + /** + * g6 + */ + @NotNull(message = "g6不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g6; + + /** + * g9 + */ + @NotNull(message = "g9不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g9; + + /** + * v41 + */ + @NotNull(message = "v41不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v41; + + /** + * v42 + */ + @NotNull(message = "v42不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v42; + + /** + * v43 + */ + @NotNull(message = "v43不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v43; + + /** + * v44 + */ + @NotNull(message = "v44不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v44; + + /** + * v45 + */ + @NotNull(message = "v45不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v45; + + /** + * v46 + */ + @NotNull(message = "v46不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v46; + + /** + * v47 + */ + @NotNull(message = "v47不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v47; + + /** + * v48 + */ + @NotNull(message = "v48不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v48; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec30sBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec30sBo.java new file mode 100644 index 0000000..331db77 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec30sBo.java @@ -0,0 +1,149 @@ +package com.ruoyi.system.domain.bo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.math.BigDecimal; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +/** + * 30S设备规格参数业务对象 device_spec_30s + * + * @author ruoyi + * @date 2025-12-03 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class DeviceSpec30sBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 行程变量 + */ + @NotBlank(message = "行程变量不能为空", groups = { AddGroup.class, EditGroup.class }) + private String travelLength; + + /** + * 类型 + */ + @NotBlank(message = "类型不能为空", groups = { AddGroup.class, EditGroup.class }) + private String itemType; + + /** + * 轴向 + */ + @NotBlank(message = "轴向不能为空", groups = { AddGroup.class, EditGroup.class }) + private String axialType; + + /** + * 箱体 + */ + @NotBlank(message = "箱体不能为空", groups = { AddGroup.class, EditGroup.class }) + private String boxType; + + /** + * v1 + */ + @NotNull(message = "v1不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v1; + + /** + * v2 + */ + @NotNull(message = "v2不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v2; + + /** + * v3 + */ + @NotNull(message = "v3不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v3; + + /** + * v5 + */ + @NotNull(message = "v5不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v5; + + /** + * v8 + */ + @NotNull(message = "v8不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v8; + + /** + * g1 + */ + @NotNull(message = "g1不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g1; + + /** + * v10 + */ + @NotNull(message = "v10不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v10; + + /** + * g5 + */ + @NotNull(message = "g5不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g5; + + /** + * v12 + */ + @NotNull(message = "v12不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v12; + + /** + * g6 + */ + @NotNull(message = "g6不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g6; + + /** + * v41 + */ + @NotNull(message = "v41不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v41; + + /** + * v42 + */ + @NotNull(message = "v42不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v42; + + /** + * v43 + */ + @NotNull(message = "v43不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v43; + + /** + * v44 + */ + @NotNull(message = "v44不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v44; + + /** + * v45 + */ + @NotNull(message = "v45不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v45; + + /** + * v46 + */ + @NotNull(message = "v46不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v46; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec35rBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec35rBo.java index 4d1bd82..e697ec7 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec35rBo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec35rBo.java @@ -175,6 +175,17 @@ public class DeviceSpec35rBo extends BaseEntity { */ @NotNull(message = "35E链板不能为空", groups = { AddGroup.class, EditGroup.class }) private Long V46; + /** + * + */ + @NotNull(message = "V47不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V47; + + /** + * + */ + @NotNull(message = "V48不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V48; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec40rBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec40rBo.java new file mode 100644 index 0000000..f8b3228 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec40rBo.java @@ -0,0 +1,222 @@ +package com.ruoyi.system.domain.bo; + +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.math.BigDecimal; + +/** + * 40R设备规格参数业务对象 device_spec_40r + * + * @author ruoyi + * @date 2025-12-03 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class DeviceSpec40rBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 行程变量 + */ + @NotBlank(message = "行程变量不能为空", groups = { AddGroup.class, EditGroup.class }) + private String travelLength; + + /** + * 类型 + */ + @NotBlank(message = "类型不能为空", groups = { AddGroup.class, EditGroup.class }) + private String itemType; + + /** + * 轴向 + */ + @NotBlank(message = "轴向不能为空", groups = { AddGroup.class, EditGroup.class }) + private String axialType; + + /** + * 箱体 + */ + @NotBlank(message = "箱体不能为空", groups = { AddGroup.class, EditGroup.class }) + private String boxType; + + /** + * 行程 + */ + @NotNull(message = "行程不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V1; + + /** + * 设备总长 + */ + @NotNull(message = "设备总长不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V2; + + /** + * 地脚位置1 + */ + @NotNull(message = "地脚位置1不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V3; + + /** + * 箱体装配长度 + */ + @NotNull(message = "箱体装配长度不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V5; + + /** + * 箱体地脚位置1 + */ + @NotNull(message = "箱体地脚位置1不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V6; + + /** + * 铝箱长度1 + */ + @NotNull(message = "铝箱长度1不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V8; + + /** + * 铝箱1重量 + */ + @NotNull(message = "铝箱1重量不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal G1; + + /** + * 铝箱长度2 + */ + @NotNull(message = "铝箱长度2不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V9; + + /** + * 铝箱2重量 + */ + @NotNull(message = "铝箱2重量不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal G2; + + /** + * 导向条长度1 + */ + @NotNull(message = "导向条长度1不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V10; + + /** + * 导向条1单重 + */ + @NotNull(message = "导向条1单重不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal G5; + + /** + * 导向条长度1数量 + */ + @NotNull(message = "导向条长度1数量不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V11; + + /** + * 导向条长度2 + */ + @NotNull(message = "导向条长度2不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V12; + + /** + * 导向条2单重 + */ + @NotNull(message = "导向条2单重不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal G6; + + /** + * 导向条2数量 + */ + @NotNull(message = "导向条2数量不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V13; + + /** + * 导向条长度3 + */ + @NotNull(message = "导向条长度3不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V14; + + /** + * 导向条3单重 + */ + @NotNull(message = "导向条3单重不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal G7; + + /** + * 导向条3数量 + */ + @NotNull(message = "导向条3数量不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V15; + + /** + * 外链板 + */ + @NotNull(message = "外链板不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V41; + + /** + * 内链板 + */ + @NotNull(message = "内链板不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V42; + + /** + * 连接板 + */ + @NotNull(message = "连接板不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V43; + + /** + * 滚轮轴 + */ + @NotNull(message = "滚轮轴不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V44; + + /** + * 隔套 + */ + @NotNull(message = "隔套不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V45; + + /** + * 隔垫 + */ + @NotNull(message = "隔垫不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V46; + + /** + * 滚轮 + */ + @NotNull(message = "滚轮不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V47; + + /** + * 卡簧 + */ + @NotNull(message = "卡簧不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V48; + + /** + * 链套轴 + */ + @NotNull(message = "链套轴不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V49; + + /** + * 链套 + */ + @NotNull(message = "链套不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V50; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec40sBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec40sBo.java new file mode 100644 index 0000000..7ae5b85 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec40sBo.java @@ -0,0 +1,240 @@ +package com.ruoyi.system.domain.bo; + +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.math.BigDecimal; + +/** + * 40S设备规格参数业务对象 device_spec_40s + * + * @author ruoyi + * @date 2025-12-03 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class DeviceSpec40sBo extends BaseEntity { + + /** + * 主键ID + */ + @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 行程变量 + */ + @NotBlank(message = "行程变量不能为空", groups = { AddGroup.class, EditGroup.class }) + private String travelLength; + + /** + * 类型 + */ + @NotBlank(message = "类型不能为空", groups = { AddGroup.class, EditGroup.class }) + private String itemType; + + /** + * 轴向 + */ + @NotBlank(message = "轴向不能为空", groups = { AddGroup.class, EditGroup.class }) + private String axialType; + + /** + * 箱体 + */ + @NotBlank(message = "箱体不能为空", groups = { AddGroup.class, EditGroup.class }) + private String boxType; + + /** + * 行程 + */ + @NotNull(message = "行程不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V1; + + /** + * 设备总长 + */ + @NotNull(message = "设备总长不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V2; + + /** + * P40SI设备总仓 + */ + @NotNull(message = "P40SI设备总仓不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V22; + + /** + * 地脚位置1 + */ + @NotNull(message = "地脚位置1不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V3; + + /** + * P40SI地脚位置 + */ + @NotNull(message = "P40SI地脚位置不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V23; + + /** + * 箱体装配长度 + */ + @NotNull(message = "箱体装配长度不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V5; + + /** + * 箱体地脚位置1 + */ + @NotNull(message = "箱体地脚位置1不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V6; + + /** + * 铝箱长度1 + */ + @NotNull(message = "铝箱长度1不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V8; + + /** + * 铝箱1重量 + */ + @NotNull(message = "铝箱1重量不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal G1; + + /** + * 铝箱长度2 + */ + @NotNull(message = "铝箱长度2不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V9; + + /** + * 铝箱2重量 + */ + @NotNull(message = "铝箱2重量不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal G2; + + /** + * 导向条长度1 + */ + @NotNull(message = "导向条长度1不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V10; + + /** + * 导向条1单重 + */ + @NotNull(message = "导向条1单重不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal G5; + + /** + * 导向条长度1数量 + */ + @NotNull(message = "导向条长度1数量不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V11; + + /** + * 导向条长度2 + */ + @NotNull(message = "导向条长度2不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V12; + + /** + * 导向条2单重 + */ + @NotNull(message = "导向条2单重不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal G6; + + /** + * 导向条2数量 + */ + @NotNull(message = "导向条2数量不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V13; + + /** + * 导向条长度3 + */ + @NotNull(message = "导向条长度3不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V14; + + /** + * 导向条3单重 + */ + @NotNull(message = "导向条3单重不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal G7; + + /** + * 导向条3数量 + */ + @NotNull(message = "导向条3数量不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V15; + + /** + * 外链板 + */ + @NotNull(message = "外链板不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V41; + + /** + * 内链板 + */ + @NotNull(message = "内链板不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V42; + + /** + * 连接板 + */ + @NotNull(message = "连接板不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V43; + + /** + * 滚轮轴 + */ + @NotNull(message = "滚轮轴不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V44; + + /** + * 隔套 + */ + @NotNull(message = "隔套不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V45; + + /** + * 隔垫 + */ + @NotNull(message = "隔垫不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V46; + + /** + * 滚轮 + */ + @NotNull(message = "滚轮不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V47; + + /** + * 垫圈 + */ + @NotNull(message = "垫圈不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V48; + + /** + * 挡圈 + */ + @NotNull(message = "挡圈不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V49; + + /** + * 滚轮隔套 + */ + @NotNull(message = "滚轮隔套不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V50; + + /** + * 内链板组件 + */ + @NotNull(message = "内链板组件不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long V51; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec60rBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec60rBo.java new file mode 100644 index 0000000..11fad18 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec60rBo.java @@ -0,0 +1,221 @@ +package com.ruoyi.system.domain.bo; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.math.BigDecimal; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +/** + * 60R设备规格参数业务对象 device_spec_60r + * + * @author ruoyi + * @date 2025-12-03 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class DeviceSpec60rBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 行程变量 + */ + @NotBlank(message = "行程变量不能为空", groups = { AddGroup.class, EditGroup.class }) + private String travelLength; + + /** + * 类型 + */ + @NotBlank(message = "类型不能为空", groups = { AddGroup.class, EditGroup.class }) + private String itemType; + + /** + * 轴向 + */ + @NotBlank(message = "轴向不能为空", groups = { AddGroup.class, EditGroup.class }) + private String axialType; + + /** + * 箱体 + */ + @NotBlank(message = "箱体不能为空", groups = { AddGroup.class, EditGroup.class }) + private String boxType; + + /** + * v1 + */ + @NotNull(message = "v1不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v1; + + /** + * v2 + */ + @NotNull(message = "v2不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v2; + + /** + * v3 + */ + @NotNull(message = "v3不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v3; + + /** + * v5 + */ + @NotNull(message = "v5不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v5; + + /** + * v6 + */ + @NotNull(message = "v6不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v6; + + /** + * v8 + */ + @NotNull(message = "v8不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v8; + + /** + * g1 + */ + @NotNull(message = "g1不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g1; + + /** + * v9 + */ + @NotNull(message = "v9不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v9; + + /** + * g2 + */ + @NotNull(message = "g2不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g2; + + /** + * v10 + */ + @NotNull(message = "v10不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v10; + + /** + * g5 + */ + @NotNull(message = "g5不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g5; + + /** + * v11 + */ + @NotNull(message = "v11不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v11; + + /** + * v12 + */ + @NotNull(message = "v12不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v12; + + /** + * g6 + */ + @NotNull(message = "g6不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g6; + + /** + * v13 + */ + @NotNull(message = "v13不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v13; + + /** + * v14 + */ + @NotNull(message = "v14不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v14; + + /** + * g7 + */ + @NotNull(message = "g7不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g7; + + /** + * v15 + */ + @NotNull(message = "v15不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v15; + + /** + * v41 + */ + @NotNull(message = "v41不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v41; + + /** + * v42 + */ + @NotNull(message = "v42不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v42; + + /** + * v43 + */ + @NotNull(message = "v43不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v43; + + /** + * v44 + */ + @NotNull(message = "v44不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v44; + + /** + * v45 + */ + @NotNull(message = "v45不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v45; + + /** + * v46 + */ + @NotNull(message = "v46不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v46; + + /** + * v47 + */ + @NotNull(message = "v47不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v47; + + /** + * v48 + */ + @NotNull(message = "v48不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v48; + + /** + * v49 + */ + @NotNull(message = "v49不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v49; + + /** + * v50 + */ + @NotNull(message = "v50不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v50; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec80rBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec80rBo.java new file mode 100644 index 0000000..44e70b9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/DeviceSpec80rBo.java @@ -0,0 +1,228 @@ +package com.ruoyi.system.domain.bo; + +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.math.BigDecimal; + +/** + * 80R设备规格参数业务对象 device_spec_80r + * + * @author ruoyi + * @date 2025-12-03 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class DeviceSpec80rBo extends BaseEntity { + + /** + * id + */ + @NotNull(message = "id不能为空", groups = { EditGroup.class }) + private Long id; + + /** + * 行程变量 + */ + @NotBlank(message = "行程变量不能为空", groups = { AddGroup.class, EditGroup.class }) + private String travelLength; + + /** + * 类型 + */ + @NotBlank(message = "类型不能为空", groups = { AddGroup.class, EditGroup.class }) + private String itemType; + + /** + * 轴向 + */ + @NotBlank(message = "轴向不能为空", groups = { AddGroup.class, EditGroup.class }) + private String axialType; + + /** + * 箱体 + */ + @NotBlank(message = "箱体不能为空", groups = { AddGroup.class, EditGroup.class }) + private String boxType; + + /** + * v1 + */ + @NotNull(message = "v1不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v1; + + /** + * v2 + */ + @NotNull(message = "v2不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v2; + + /** + * v3 + */ + @NotNull(message = "v3不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v3; + + /** + * v5 + */ + @NotNull(message = "v5不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v5; + + /** + * v6 + */ + @NotNull(message = "v6不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v6; + + /** + * v8 + */ + @NotNull(message = "v8不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v8; + + /** + * g1 + */ + @NotNull(message = "g1不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g1; + + /** + * v9 + */ + @NotNull(message = "v9不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v9; + + /** + * g2 + */ + @NotNull(message = "g2不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g2; + + /** + * v10 + */ + @NotNull(message = "v10不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v10; + + /** + * g5 + */ + @NotNull(message = "g5不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g5; + + /** + * v11 + */ + @NotNull(message = "v11不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v11; + + /** + * v12 + */ + @NotNull(message = "v12不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v12; + + /** + * g6 + */ + @NotNull(message = "g6不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g6; + + /** + * v13 + */ + @NotNull(message = "v13不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v13; + + /** + * v14 + */ + @NotNull(message = "v14不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v14; + + /** + * g7 + */ + @NotNull(message = "g7不能为空", groups = { AddGroup.class, EditGroup.class }) + private BigDecimal g7; + + /** + * v15 + */ + @NotNull(message = "v15不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v15; + + /** + * v41 + */ + @NotNull(message = "v41不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v41; + + /** + * v42 + */ + @NotNull(message = "v42不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v42; + + /** + * v43 + */ + @NotNull(message = "v43不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v43; + + /** + * v44 + */ + @NotNull(message = "v44不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v44; + + /** + * v45 + */ + @NotNull(message = "v45不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v45; + + /** + * v46 + */ + @NotNull(message = "v46不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v46; + + /** + * v47 + */ + @NotNull(message = "v47不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v47; + + /** + * v48 + */ + @NotNull(message = "v48不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v48; + + /** + * v49 + */ + @NotNull(message = "v49不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v49; + + /** + * v50 + */ + @NotNull(message = "v50不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v50; + + /** + * v51 + */ + @NotNull(message = "v51不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long v51; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/FigureSaveBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/FigureSaveBo.java index c2916f9..9973f35 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/FigureSaveBo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/FigureSaveBo.java @@ -1,31 +1,35 @@ package com.ruoyi.system.domain.bo; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableId; import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.core.validate.AddGroup; import com.ruoyi.common.core.validate.EditGroup; import lombok.Data; import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; /** * 外购件临时业务对象 figure_save * - * @author tzy - * @date 2024-05-28 + * @author ruoyi + * @date 2025-12-04 */ @Data @EqualsAndHashCode(callSuper = true) public class FigureSaveBo extends BaseEntity { - - @TableId(value = "id", type = IdType.AUTO) + /** + * + */ private Long id; + /** + * 关联项目表 + */ + @NotNull(message = "关联项目表不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long pid; + /** * 产品名称 */ @@ -44,6 +48,12 @@ public class FigureSaveBo extends BaseEntity { @NotBlank(message = "产品型号不能为空", groups = { AddGroup.class, EditGroup.class }) private String figureNumber; + /** + * 图纸路径 + */ + @NotBlank(message = "图纸路径不能为空", groups = { AddGroup.class, EditGroup.class }) + private String drawPath; + /** * 数量 */ @@ -58,16 +68,17 @@ public class FigureSaveBo extends BaseEntity { /** * 类型 */ - @NotBlank(message = "类型不能为空", groups = { AddGroup.class, EditGroup.class }) private String productType; - /** - * 图纸路径 - */ - private String drawPath; /** - * 关联项目表 + * 轴向 */ - @NotNull(message = "关联项目表不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long pid; + private String axialType; + + /** + * 箱体 + */ + private String boxType; + + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/KingdeeWorkCenterDataBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/KingdeeWorkCenterDataBo.java index 35e4886..0d88d9d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/KingdeeWorkCenterDataBo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/KingdeeWorkCenterDataBo.java @@ -6,6 +6,7 @@ import com.ruoyi.common.core.validate.EditGroup; import lombok.Data; import lombok.EqualsAndHashCode; import javax.validation.constraints.*; +import java.math.BigDecimal; /** @@ -53,19 +54,19 @@ public class KingdeeWorkCenterDataBo extends BaseEntity { * 生产数量 */ @NotNull(message = "生产数量不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long operQty; + private BigDecimal operQty; /** * 转入数量 */ @NotNull(message = "转入数量不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long transInQty; + private BigDecimal transInQty; /** * 转出数量 */ @NotNull(message = "转出数量不能为空", groups = { AddGroup.class, EditGroup.class }) - private Long transOutQty; + private BigDecimal transOutQty; /** * 物料状态 @@ -97,6 +98,16 @@ public class KingdeeWorkCenterDataBo extends BaseEntity { @NotBlank(message = "计划完成时间不能为空", groups = { AddGroup.class, EditGroup.class }) private String operPlanFinishTime; + /** + * 计划开始时间2 (YYYY-MM-DD) + */ + private String operPlanStartTime2; + + /** + * 计划完成时间2 (YYYY-MM-DD) + */ + private String operPlanFinishTime2; + /** * 延迟天数 */ @@ -109,5 +120,13 @@ public class KingdeeWorkCenterDataBo extends BaseEntity { */ @NotBlank(message = "工作中心不能为空", groups = { AddGroup.class, EditGroup.class }) private String workCenter; + /** + * 汇报数量 + */ + private BigDecimal FReportQty; + /** + * 工废数量 + */ + private BigDecimal FScrapQty; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysConfigIniBo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysConfigIniBo.java index 3439d63..6eb197e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysConfigIniBo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/bo/SysConfigIniBo.java @@ -22,25 +22,21 @@ public class SysConfigIniBo extends BaseEntity { /** * 主键id */ - @NotNull(message = "主键id不能为空", groups = { EditGroup.class }) private Long id; /** * dir */ - @NotBlank(message = "dir不能为空", groups = { AddGroup.class, EditGroup.class }) private String dir; /** * 路径 */ - @NotBlank(message = "路径不能为空", groups = { AddGroup.class, EditGroup.class }) private String url; /** * 项目图纸路径 */ - @NotBlank(message = "项目图纸路径不能为空", groups = { AddGroup.class, EditGroup.class }) private String productDir; /** @@ -58,31 +54,26 @@ public class SysConfigIniBo extends BaseEntity { /** * 备注 */ - @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) private String remark; /** * 备用字段1 */ - @NotBlank(message = "备用字段1不能为空", groups = { AddGroup.class, EditGroup.class }) private String sparedOne; /** * 备用字段2 */ - @NotBlank(message = "备用字段2不能为空", groups = { AddGroup.class, EditGroup.class }) private String sparedTwo; /** * 备用字段3 */ - @NotNull(message = "备用字段3不能为空", groups = { AddGroup.class, EditGroup.class }) private Long sparedThree; /** * 备用字段4 */ - @NotNull(message = "备用字段4不能为空", groups = { AddGroup.class, EditGroup.class }) private Long sparedFour; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/ChengBeDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/ChengBeDTO.java new file mode 100644 index 0000000..5a2844d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/ChengBeDTO.java @@ -0,0 +1,50 @@ +package com.ruoyi.system.domain.dto; + +import com.alibaba.excel.annotation.ExcelProperty; +import lombok.Data; + +import java.math.BigDecimal; + + +@Data +public class ChengBeDTO { + /** 序号 */ + @ExcelProperty(value = "序号") + private String seqNo; + + /** 图号 */ + @ExcelProperty(value = "图号") + private String drawingNo; + + /** 名称 */ + @ExcelProperty(value = "名称") + private String name; + + /** 单台数量 */ + @ExcelProperty(value = "单台数量") + private BigDecimal qtyPerUnit; + + /** 材料 */ + @ExcelProperty(value = "材料") + private String material; + + /** 规格型号 */ + @ExcelProperty(value = "规格型号") + private String specification; + + /** 单重 */ + @ExcelProperty(value = "单重") + private BigDecimal unitWeight; + + /** 本批数量 */ + @ExcelProperty(value = "本批数量") + private BigDecimal batchQty; + + /** 成本单价 */ + @ExcelProperty(value = "成本单价") + private BigDecimal costUnitPrice; + + /** 备注 */ + @ExcelProperty(value = "备注") + private String remark; +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/PlanPrcessNumDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/PlanPrcessNumDTO.java index e0b5351..b9d6e06 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/PlanPrcessNumDTO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/PlanPrcessNumDTO.java @@ -33,4 +33,6 @@ public class PlanPrcessNumDTO { private Date FOperPlanFinishTime; @JsonProperty("FMONumber") private String FMONumber; + @JsonProperty("F_HBYT_RKCK.FName") + private String FRKCKFName; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/excuteDrawing/RigidChainModelDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/excuteDrawing/RigidChainModelDTO.java new file mode 100644 index 0000000..584c7b9 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/excuteDrawing/RigidChainModelDTO.java @@ -0,0 +1,32 @@ +package com.ruoyi.system.domain.dto.excuteDrawing; + +import lombok.Data; + + +@Data +public class RigidChainModelDTO { + private Long id; + + private Long pid; + //生产令号 + private String productionCode; + //类型 + private String productType; + //变量 + private String journey; + //轴向 + private String axialType; + //箱体 + private String boxType; + //数量 + private Integer figureNum; + //文件类型 + private String selectedFileType; + //文件路径 + private String drawPath; + + private String figureNumber; + private String productName; + private String figureName; +} + diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec100rVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec100rVo.java new file mode 100644 index 0000000..09a68dd --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec100rVo.java @@ -0,0 +1,246 @@ +package com.ruoyi.system.domain.vo; + +import java.math.BigDecimal; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.annotation.ExcelDictFormat; +import com.ruoyi.common.convert.ExcelDictConvert; +import lombok.Data; + + +/** + * 100R设备规格参数视图对象 device_spec_100r + * + * @author ruoyi + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +public class DeviceSpec100rVo { + + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 行程变量 + */ + @ExcelProperty(value = "行程变量") + private String travelLength; + + /** + * 类型 + */ + @ExcelProperty(value = "类型") + private String itemType; + + /** + * 轴向 + */ + @ExcelProperty(value = "轴向") + private String axialType; + + /** + * 箱体 + */ + @ExcelProperty(value = "箱体") + private String boxType; + + /** + * 行程 + */ + @ExcelProperty(value = "行程") + private Long V1; + + /** + * 设备总长 + */ + @ExcelProperty(value = "设备总长") + private Long V2; + + /** + * 地脚位置1 + */ + @ExcelProperty(value = "地脚位置1") + private Long V3; + + /** + * 地脚位置1 + */ + @ExcelProperty(value = "地脚位置1") + private Long V4; + + /** + * 箱体装配长度 + */ + @ExcelProperty(value = "箱体装配长度") + private Long V5; + + /** + * 箱体地脚位置1 + */ + @ExcelProperty(value = "箱体地脚位置1") + private Long V6; + + /** + * 箱体地脚位置1 + */ + @ExcelProperty(value = "箱体地脚位置1") + private Long V7; + + /** + * 铝箱长度1 + */ + @ExcelProperty(value = "铝箱长度1") + private Long V8; + + /** + * 铝箱1重量 + */ + @ExcelProperty(value = "铝箱1重量") + private BigDecimal G1; + + /** + * 铝箱长度2 + */ + @ExcelProperty(value = "铝箱长度2") + private Long V9; + + /** + * 铝箱2重量 + */ + @ExcelProperty(value = "铝箱2重量") + private BigDecimal G2; + + /** + * 导向条长度1 + */ + @ExcelProperty(value = "导向条长度1") + private Long V10; + + /** + * 导向条1单重 + */ + @ExcelProperty(value = "导向条1单重") + private BigDecimal G5; + + /** + * 导向条长度1数量 + */ + @ExcelProperty(value = "导向条长度1数量") + private Long V11; + + /** + * 导向条长度2 + */ + @ExcelProperty(value = "导向条长度2") + private Long V12; + + /** + * 导向条2单重 + */ + @ExcelProperty(value = "导向条2单重") + private BigDecimal G6; + + /** + * 导向条2数量 + */ + @ExcelProperty(value = "导向条2数量") + private Long V13; + + /** + * 导向条长度3 + */ + @ExcelProperty(value = "导向条长度3") + private Long V14; + + /** + * 导向条3单重 + */ + @ExcelProperty(value = "导向条3单重") + private BigDecimal G7; + + /** + * 导向条3数量 + */ + @ExcelProperty(value = "导向条3数量") + private Long V15; + + /** + * 外链板 + */ + @ExcelProperty(value = "外链板") + private Long V41; + + /** + * 内链板 + */ + @ExcelProperty(value = "内链板") + private Long V42; + + /** + * 连接板 + */ + @ExcelProperty(value = "连接板") + private Long V43; + + /** + * 滚轮轴 + */ + @ExcelProperty(value = "滚轮轴") + private Long V44; + + /** + * 隔套 + */ + @ExcelProperty(value = "隔套") + private Long V45; + + /** + * 隔垫 + */ + @ExcelProperty(value = "隔垫") + private Long V46; + + /** + * 滚轮 + */ + @ExcelProperty(value = "滚轮") + private Long V47; + + /** + * 垫圈 + */ + @ExcelProperty(value = "垫圈") + private Long V48; + + /** + * 挡圈 + */ + @ExcelProperty(value = "挡圈") + private Long V49; + + /** + * 滚轮隔套 + */ + @ExcelProperty(value = "滚轮隔套") + private Long V50; + + /** + * 内链板组件 + */ + @ExcelProperty(value = "内链板组件") + private Long V51; + + /** + * 内链板组件 + */ + @ExcelProperty(value = "内链板组件") + private Long V52; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec125rVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec125rVo.java new file mode 100644 index 0000000..4b76072 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec125rVo.java @@ -0,0 +1,282 @@ +package com.ruoyi.system.domain.vo; + +import java.math.BigDecimal; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.annotation.ExcelDictFormat; +import com.ruoyi.common.convert.ExcelDictConvert; +import lombok.Data; + + +/** + * 125R设备规格参数视图对象 device_spec_125r + * + * @author ruoyi + * @date 2025-12-06 + */ +@Data +@ExcelIgnoreUnannotated +public class DeviceSpec125rVo { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 行程 + */ + @ExcelProperty(value = "行程") + private String travelLength; + + /** + * 类型 + */ + @ExcelProperty(value = "类型") + private String itemType; + + /** + * 轴向 + */ + @ExcelProperty(value = "轴向") + private String axialType; + + /** + * 箱体 + */ + @ExcelProperty(value = "箱体") + private String boxType; + + /** + * v1 + */ + @ExcelProperty(value = "v1") + private Long v1; + + /** + * v2 + */ + @ExcelProperty(value = "v2") + private Long v2; + + /** + * v3 + */ + @ExcelProperty(value = "v3") + private Long v3; + + /** + * v4 + */ + @ExcelProperty(value = "v4") + private Long v4; + + /** + * v5 + */ + @ExcelProperty(value = "v5") + private Long v5; + + /** + * v6 + */ + @ExcelProperty(value = "v6") + private Long v6; + + /** + * v7 + */ + @ExcelProperty(value = "v7") + private Long v7; + + /** + * v8 + */ + @ExcelProperty(value = "v8") + private Long v8; + + /** + * g1 + */ + @ExcelProperty(value = "g1") + private BigDecimal g1; + + /** + * v9 + */ + @ExcelProperty(value = "v9") + private Long v9; + + /** + * g2 + */ + @ExcelProperty(value = "g2") + private BigDecimal g2; + + /** + * g3 + */ + @ExcelProperty(value = "g3") + private BigDecimal g3; + + /** + * g4 + */ + @ExcelProperty(value = "g4") + private BigDecimal g4; + + /** + * v10 + */ + @ExcelProperty(value = "v10") + private Long v10; + + /** + * g5 + */ + @ExcelProperty(value = "g5") + private BigDecimal g5; + + /** + * v11 + */ + @ExcelProperty(value = "v11") + private Long v11; + + /** + * v12 + */ + @ExcelProperty(value = "v12") + private Long v12; + + /** + * g6 + */ + @ExcelProperty(value = "g6") + private BigDecimal g6; + + /** + * v13 + */ + @ExcelProperty(value = "v13") + private Long v13; + + /** + * v14 + */ + @ExcelProperty(value = "v14") + private Long v14; + + /** + * g7 + */ + @ExcelProperty(value = "g7") + private BigDecimal g7; + + /** + * v15 + */ + @ExcelProperty(value = "v15") + private Long v15; + + /** + * v16 + */ + @ExcelProperty(value = "v16") + private Long v16; + + /** + * v17 + */ + @ExcelProperty(value = "v17") + private Long v17; + + /** + * v18 + */ + @ExcelProperty(value = "v18") + private Long v18; + + /** + * v19 + */ + @ExcelProperty(value = "v19") + private Long v19; + + /** + * v20 + */ + @ExcelProperty(value = "v20") + private Long v20; + + /** + * v41 + */ + @ExcelProperty(value = "v41") + private Long v41; + + /** + * v42 + */ + @ExcelProperty(value = "v42") + private Long v42; + + /** + * v43 + */ + @ExcelProperty(value = "v43") + private Long v43; + + /** + * v44 + */ + @ExcelProperty(value = "v44") + private Long v44; + + /** + * v45 + */ + @ExcelProperty(value = "v45") + private Long v45; + + /** + * v46 + */ + @ExcelProperty(value = "v46") + private Long v46; + + /** + * v47 + */ + @ExcelProperty(value = "v47") + private Long v47; + + /** + * v48 + */ + @ExcelProperty(value = "v48") + private Long v48; + + /** + * v49 + */ + @ExcelProperty(value = "v49") + private Long v49; + + /** + * v50 + */ + @ExcelProperty(value = "v50") + private Long v50; + + /** + * v51 + */ + @ExcelProperty(value = "v51") + private Long v51; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec150rVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec150rVo.java new file mode 100644 index 0000000..5bb9598 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec150rVo.java @@ -0,0 +1,306 @@ +package com.ruoyi.system.domain.vo; + +import java.math.BigDecimal; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.annotation.ExcelDictFormat; +import com.ruoyi.common.convert.ExcelDictConvert; +import lombok.Data; + + +/** + * 150R设备规格参数视图对象 device_spec_150r + * + * @author ruoyi + * @date 2025-12-06 + */ +@Data +@ExcelIgnoreUnannotated +public class DeviceSpec150rVo { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 行程 + */ + @ExcelProperty(value = "行程") + private String travelLength; + + /** + * 类型 + */ + @ExcelProperty(value = "类型") + private String itemType; + + /** + * 轴向 + */ + @ExcelProperty(value = "轴向") + private String axialType; + + /** + * 箱体 + */ + @ExcelProperty(value = "箱体") + private String boxType; + + /** + * v1 + */ + @ExcelProperty(value = "v1") + private Long v1; + + /** + * v2 + */ + @ExcelProperty(value = "v2") + private Long v2; + + /** + * v3 + */ + @ExcelProperty(value = "v3") + private Long v3; + + /** + * v4 + */ + @ExcelProperty(value = "v4") + private Long v4; + + /** + * v21 + */ + @ExcelProperty(value = "v21") + private Long v21; + + /** + * v22 + */ + @ExcelProperty(value = "v22") + private Long v22; + + /** + * v23 + */ + @ExcelProperty(value = "v23") + private Long v23; + + /** + * v24 + */ + @ExcelProperty(value = "v24") + private Long v24; + + /** + * v5 + */ + @ExcelProperty(value = "v5") + private Long v5; + + /** + * v6 + */ + @ExcelProperty(value = "v6") + private Long v6; + + /** + * v7 + */ + @ExcelProperty(value = "v7") + private Long v7; + + /** + * v8 + */ + @ExcelProperty(value = "v8") + private Long v8; + + /** + * g1 + */ + @ExcelProperty(value = "g1") + private BigDecimal g1; + + /** + * v9 + */ + @ExcelProperty(value = "v9") + private Long v9; + + /** + * g2 + */ + @ExcelProperty(value = "g2") + private BigDecimal g2; + + /** + * g3 + */ + @ExcelProperty(value = "g3") + private BigDecimal g3; + + /** + * g4 + */ + @ExcelProperty(value = "g4") + private BigDecimal g4; + + /** + * v10 + */ + @ExcelProperty(value = "v10") + private Long v10; + + /** + * g5 + */ + @ExcelProperty(value = "g5") + private BigDecimal g5; + + /** + * v11 + */ + @ExcelProperty(value = "v11") + private Long v11; + + /** + * v12 + */ + @ExcelProperty(value = "v12") + private Long v12; + + /** + * g6 + */ + @ExcelProperty(value = "g6") + private BigDecimal g6; + + /** + * v13 + */ + @ExcelProperty(value = "v13") + private Long v13; + + /** + * v14 + */ + @ExcelProperty(value = "v14") + private Long v14; + + /** + * g7 + */ + @ExcelProperty(value = "g7") + private BigDecimal g7; + + /** + * v15 + */ + @ExcelProperty(value = "v15") + private Long v15; + + /** + * v16 + */ + @ExcelProperty(value = "v16") + private Long v16; + + /** + * v17 + */ + @ExcelProperty(value = "v17") + private Long v17; + + /** + * v18 + */ + @ExcelProperty(value = "v18") + private Long v18; + + /** + * v19 + */ + @ExcelProperty(value = "v19") + private Long v19; + + /** + * v20 + */ + @ExcelProperty(value = "v20") + private Long v20; + + /** + * v41 + */ + @ExcelProperty(value = "v41") + private Long v41; + + /** + * v42 + */ + @ExcelProperty(value = "v42") + private Long v42; + + /** + * v43 + */ + @ExcelProperty(value = "v43") + private Long v43; + + /** + * v44 + */ + @ExcelProperty(value = "v44") + private Long v44; + + /** + * v45 + */ + @ExcelProperty(value = "v45") + private Long v45; + + /** + * v46 + */ + @ExcelProperty(value = "v46") + private Long v46; + + /** + * v47 + */ + @ExcelProperty(value = "v47") + private Long v47; + + /** + * v48 + */ + @ExcelProperty(value = "v48") + private Long v48; + + /** + * v49 + */ + @ExcelProperty(value = "v49") + private Long v49; + + /** + * v50 + */ + @ExcelProperty(value = "v50") + private Long v50; + + /** + * v51 + */ + @ExcelProperty(value = "v51") + private Long v51; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec30dVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec30dVo.java new file mode 100644 index 0000000..b931f61 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec30dVo.java @@ -0,0 +1,180 @@ +package com.ruoyi.system.domain.vo; + +import java.math.BigDecimal; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.annotation.ExcelDictFormat; +import com.ruoyi.common.convert.ExcelDictConvert; +import lombok.Data; + + +/** + * device_spec_30D 视图对象 device_spec_30d + * + * @author ruoyi + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +public class DeviceSpec30dVo { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 行程变量 + */ + @ExcelProperty(value = "行程变量") + private String travelLength; + + /** + * 类型 + */ + @ExcelProperty(value = "类型") + private String itemType; + + /** + * 轴向 + */ + @ExcelProperty(value = "轴向") + private String axialType; + + /** + * 箱体 + */ + @ExcelProperty(value = "箱体") + private String boxType; + + /** + * v1 + */ + @ExcelProperty(value = "v1") + private Long v1; + + /** + * v2 + */ + @ExcelProperty(value = "v2") + private Long v2; + + /** + * v3 + */ + @ExcelProperty(value = "v3") + private Long v3; + + /** + * v5 + */ + @ExcelProperty(value = "v5") + private Long v5; + + /** + * v6 + */ + @ExcelProperty(value = "v6") + private Long v6; + + /** + * v8 + */ + @ExcelProperty(value = "v8") + private Long v8; + + /** + * g1 + */ + @ExcelProperty(value = "g1") + private BigDecimal g1; + + /** + * v10 + */ + @ExcelProperty(value = "v10") + private Long v10; + + /** + * g5 + */ + @ExcelProperty(value = "g5") + private BigDecimal g5; + + /** + * g8 + */ + @ExcelProperty(value = "g8") + private BigDecimal g8; + + /** + * v12 + */ + @ExcelProperty(value = "v12") + private Long v12; + + /** + * g6 + */ + @ExcelProperty(value = "g6") + private BigDecimal g6; + + /** + * g9 + */ + @ExcelProperty(value = "g9") + private BigDecimal g9; + + /** + * v41 + */ + @ExcelProperty(value = "v41") + private Long v41; + + /** + * v42 + */ + @ExcelProperty(value = "v42") + private Long v42; + + /** + * v43 + */ + @ExcelProperty(value = "v43") + private Long v43; + + /** + * v44 + */ + @ExcelProperty(value = "v44") + private Long v44; + + /** + * v45 + */ + @ExcelProperty(value = "v45") + private Long v45; + + /** + * v46 + */ + @ExcelProperty(value = "v46") + private Long v46; + + /** + * v47 + */ + @ExcelProperty(value = "v47") + private Long v47; + + /** + * v48 + */ + @ExcelProperty(value = "v48") + private Long v48; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec30sVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec30sVo.java new file mode 100644 index 0000000..e7f6100 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec30sVo.java @@ -0,0 +1,150 @@ +package com.ruoyi.system.domain.vo; + +import java.math.BigDecimal; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.annotation.ExcelDictFormat; +import com.ruoyi.common.convert.ExcelDictConvert; +import lombok.Data; + + +/** + * 30S设备规格参数视图对象 device_spec_30s + * + * @author ruoyi + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +public class DeviceSpec30sVo { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 行程变量 + */ + @ExcelProperty(value = "行程变量") + private String travelLength; + + /** + * 类型 + */ + @ExcelProperty(value = "类型") + private String itemType; + + /** + * 轴向 + */ + @ExcelProperty(value = "轴向") + private String axialType; + + /** + * 箱体 + */ + @ExcelProperty(value = "箱体") + private String boxType; + + /** + * v1 + */ + @ExcelProperty(value = "v1") + private Long v1; + + /** + * v2 + */ + @ExcelProperty(value = "v2") + private Long v2; + + /** + * v3 + */ + @ExcelProperty(value = "v3") + private Long v3; + + /** + * v5 + */ + @ExcelProperty(value = "v5") + private Long v5; + + /** + * v8 + */ + @ExcelProperty(value = "v8") + private Long v8; + + /** + * g1 + */ + @ExcelProperty(value = "g1") + private BigDecimal g1; + + /** + * v10 + */ + @ExcelProperty(value = "v10") + private Long v10; + + /** + * g5 + */ + @ExcelProperty(value = "g5") + private BigDecimal g5; + + /** + * v12 + */ + @ExcelProperty(value = "v12") + private Long v12; + + /** + * g6 + */ + @ExcelProperty(value = "g6") + private BigDecimal g6; + + /** + * v41 + */ + @ExcelProperty(value = "v41") + private Long v41; + + /** + * v42 + */ + @ExcelProperty(value = "v42") + private Long v42; + + /** + * v43 + */ + @ExcelProperty(value = "v43") + private Long v43; + + /** + * v44 + */ + @ExcelProperty(value = "v44") + private Long v44; + + /** + * v45 + */ + @ExcelProperty(value = "v45") + private Long v45; + + /** + * v46 + */ + @ExcelProperty(value = "v46") + private Long v46; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec35rVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec35rVo.java index 86766b6..ae57eff 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec35rVo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec35rVo.java @@ -176,5 +176,15 @@ public class DeviceSpec35rVo { @ExcelProperty(value = "35E链板") private Long V46; + /** + * + */ + @ExcelProperty(value = "V47") + private Long V47; + /** + * + */ + @ExcelProperty(value = "V48") + private Long V48; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec40rVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec40rVo.java new file mode 100644 index 0000000..99a18fd --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec40rVo.java @@ -0,0 +1,222 @@ +package com.ruoyi.system.domain.vo; + +import java.math.BigDecimal; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.annotation.ExcelDictFormat; +import com.ruoyi.common.convert.ExcelDictConvert; +import lombok.Data; + + +/** + * 40R设备规格参数视图对象 device_spec_40r + * + * @author ruoyi + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +public class DeviceSpec40rVo { + + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 行程变量 + */ + @ExcelProperty(value = "行程变量") + private String travelLength; + + /** + * 类型 + */ + @ExcelProperty(value = "类型") + private String itemType; + + /** + * 轴向 + */ + @ExcelProperty(value = "轴向") + private String axialType; + + /** + * 箱体 + */ + @ExcelProperty(value = "箱体") + private String boxType; + + /** + * 行程 + */ + @ExcelProperty(value = "行程") + private Long V1; + + /** + * 设备总长 + */ + @ExcelProperty(value = "设备总长") + private Long V2; + + /** + * 地脚位置1 + */ + @ExcelProperty(value = "地脚位置1") + private Long V3; + + /** + * 箱体装配长度 + */ + @ExcelProperty(value = "箱体装配长度") + private Long V5; + + /** + * 箱体地脚位置1 + */ + @ExcelProperty(value = "箱体地脚位置1") + private Long V6; + + /** + * 铝箱长度1 + */ + @ExcelProperty(value = "铝箱长度1") + private Long V8; + + /** + * 铝箱1重量 + */ + @ExcelProperty(value = "铝箱1重量") + private BigDecimal G1; + + /** + * 铝箱长度2 + */ + @ExcelProperty(value = "铝箱长度2") + private Long V9; + + /** + * 铝箱2重量 + */ + @ExcelProperty(value = "铝箱2重量") + private BigDecimal G2; + + /** + * 导向条长度1 + */ + @ExcelProperty(value = "导向条长度1") + private Long V10; + + /** + * 导向条1单重 + */ + @ExcelProperty(value = "导向条1单重") + private BigDecimal G5; + + /** + * 导向条长度1数量 + */ + @ExcelProperty(value = "导向条长度1数量") + private Long V11; + + /** + * 导向条长度2 + */ + @ExcelProperty(value = "导向条长度2") + private Long V12; + + /** + * 导向条2单重 + */ + @ExcelProperty(value = "导向条2单重") + private BigDecimal G6; + + /** + * 导向条2数量 + */ + @ExcelProperty(value = "导向条2数量") + private Long V13; + + /** + * 导向条长度3 + */ + @ExcelProperty(value = "导向条长度3") + private Long V14; + + /** + * 导向条3单重 + */ + @ExcelProperty(value = "导向条3单重") + private BigDecimal G7; + + /** + * 导向条3数量 + */ + @ExcelProperty(value = "导向条3数量") + private Long V15; + + /** + * 外链板 + */ + @ExcelProperty(value = "外链板") + private Long V41; + + /** + * 内链板 + */ + @ExcelProperty(value = "内链板") + private Long V42; + + /** + * 连接板 + */ + @ExcelProperty(value = "连接板") + private Long V43; + + /** + * 滚轮轴 + */ + @ExcelProperty(value = "滚轮轴") + private Long V44; + + /** + * 隔套 + */ + @ExcelProperty(value = "隔套") + private Long V45; + + /** + * 隔垫 + */ + @ExcelProperty(value = "隔垫") + private Long V46; + + /** + * 滚轮 + */ + @ExcelProperty(value = "滚轮") + private Long V47; + + /** + * 卡簧 + */ + @ExcelProperty(value = "卡簧") + private Long V48; + + /** + * 链套轴 + */ + @ExcelProperty(value = "链套轴") + private Long V49; + + /** + * 链套 + */ + @ExcelProperty(value = "链套") + private Long V50; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec40sVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec40sVo.java new file mode 100644 index 0000000..ad788aa --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec40sVo.java @@ -0,0 +1,240 @@ +package com.ruoyi.system.domain.vo; + +import java.math.BigDecimal; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.annotation.ExcelDictFormat; +import com.ruoyi.common.convert.ExcelDictConvert; +import lombok.Data; + + +/** + * 40S设备规格参数视图对象 device_spec_40s + * + * @author ruoyi + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +public class DeviceSpec40sVo { + + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long id; + + /** + * 行程变量 + */ + @ExcelProperty(value = "行程变量") + private String travelLength; + + /** + * 类型 + */ + @ExcelProperty(value = "类型") + private String itemType; + + /** + * 轴向 + */ + @ExcelProperty(value = "轴向") + private String axialType; + + /** + * 箱体 + */ + @ExcelProperty(value = "箱体") + private String boxType; + + /** + * 行程 + */ + @ExcelProperty(value = "行程") + private Long V1; + + /** + * 设备总长 + */ + @ExcelProperty(value = "设备总长") + private Long V2; + + /** + * P40SI设备总仓 + */ + @ExcelProperty(value = "P40SI设备总仓") + private Long V22; + + /** + * 地脚位置1 + */ + @ExcelProperty(value = "地脚位置1") + private Long V3; + + /** + * P40SI地脚位置 + */ + @ExcelProperty(value = "P40SI地脚位置") + private Long V23; + + /** + * 箱体装配长度 + */ + @ExcelProperty(value = "箱体装配长度") + private Long V5; + + /** + * 箱体地脚位置1 + */ + @ExcelProperty(value = "箱体地脚位置1") + private Long V6; + + /** + * 铝箱长度1 + */ + @ExcelProperty(value = "铝箱长度1") + private Long V8; + + /** + * 铝箱1重量 + */ + @ExcelProperty(value = "铝箱1重量") + private BigDecimal G1; + + /** + * 铝箱长度2 + */ + @ExcelProperty(value = "铝箱长度2") + private Long V9; + + /** + * 铝箱2重量 + */ + @ExcelProperty(value = "铝箱2重量") + private BigDecimal G2; + + /** + * 导向条长度1 + */ + @ExcelProperty(value = "导向条长度1") + private Long V10; + + /** + * 导向条1单重 + */ + @ExcelProperty(value = "导向条1单重") + private BigDecimal G5; + + /** + * 导向条长度1数量 + */ + @ExcelProperty(value = "导向条长度1数量") + private Long V11; + + /** + * 导向条长度2 + */ + @ExcelProperty(value = "导向条长度2") + private Long V12; + + /** + * 导向条2单重 + */ + @ExcelProperty(value = "导向条2单重") + private BigDecimal G6; + + /** + * 导向条2数量 + */ + @ExcelProperty(value = "导向条2数量") + private Long V13; + + /** + * 导向条长度3 + */ + @ExcelProperty(value = "导向条长度3") + private Long V14; + + /** + * 导向条3单重 + */ + @ExcelProperty(value = "导向条3单重") + private BigDecimal G7; + + /** + * 导向条3数量 + */ + @ExcelProperty(value = "导向条3数量") + private Long V15; + + /** + * 外链板 + */ + @ExcelProperty(value = "外链板") + private Long V41; + + /** + * 内链板 + */ + @ExcelProperty(value = "内链板") + private Long V42; + + /** + * 连接板 + */ + @ExcelProperty(value = "连接板") + private Long V43; + + /** + * 滚轮轴 + */ + @ExcelProperty(value = "滚轮轴") + private Long V44; + + /** + * 隔套 + */ + @ExcelProperty(value = "隔套") + private Long V45; + + /** + * 隔垫 + */ + @ExcelProperty(value = "隔垫") + private Long V46; + + /** + * 滚轮 + */ + @ExcelProperty(value = "滚轮") + private Long V47; + + /** + * 垫圈 + */ + @ExcelProperty(value = "垫圈") + private Long V48; + + /** + * 挡圈 + */ + @ExcelProperty(value = "挡圈") + private Long V49; + + /** + * 滚轮隔套 + */ + @ExcelProperty(value = "滚轮隔套") + private Long V50; + + /** + * 内链板组件 + */ + @ExcelProperty(value = "内链板组件") + private Long V51; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec60rVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec60rVo.java new file mode 100644 index 0000000..9fa1b58 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec60rVo.java @@ -0,0 +1,224 @@ +package com.ruoyi.system.domain.vo; + +import java.math.BigDecimal; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.annotation.ExcelDictFormat; +import com.ruoyi.common.convert.ExcelDictConvert; +import lombok.Data; +import com.ruoyi.common.core.domain.BaseEntity; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; + +/** + * 60R设备规格参数视图对象 device_spec_60r + * + * @author ruoyi + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +public class DeviceSpec60rVo { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 行程变量 + */ + @ExcelProperty(value = "行程变量") + private String travelLength; + + /** + * 类型 + */ + @ExcelProperty(value = "类型") + private String itemType; + + /** + * 轴向 + */ + @ExcelProperty(value = "轴向") + private String axialType; + + /** + * 箱体 + */ + @ExcelProperty(value = "箱体") + private String boxType; + + /** + * v1 + */ + @ExcelProperty(value = "v1") + private Long v1; + + /** + * v2 + */ + @ExcelProperty(value = "v2") + private Long v2; + + /** + * v3 + */ + @ExcelProperty(value = "v3") + private Long v3; + + /** + * v5 + */ + @ExcelProperty(value = "v5") + private Long v5; + + /** + * v6 + */ + @ExcelProperty(value = "v6") + private Long v6; + + /** + * v8 + */ + @ExcelProperty(value = "v8") + private Long v8; + + /** + * g1 + */ + @ExcelProperty(value = "g1") + private BigDecimal g1; + + /** + * v9 + */ + @ExcelProperty(value = "v9") + private Long v9; + + /** + * g2 + */ + @ExcelProperty(value = "g2") + private BigDecimal g2; + + /** + * v10 + */ + @ExcelProperty(value = "v10") + private Long v10; + + /** + * g5 + */ + @ExcelProperty(value = "g5") + private BigDecimal g5; + + /** + * v11 + */ + @ExcelProperty(value = "v11") + private Long v11; + + /** + * v12 + */ + @ExcelProperty(value = "v12") + private Long v12; + + /** + * g6 + */ + @ExcelProperty(value = "g6") + private BigDecimal g6; + + /** + * v13 + */ + @ExcelProperty(value = "v13") + private Long v13; + + /** + * v14 + */ + @ExcelProperty(value = "v14") + private Long v14; + + /** + * g7 + */ + @ExcelProperty(value = "g7") + private BigDecimal g7; + + /** + * v15 + */ + @ExcelProperty(value = "v15") + private Long v15; + + /** + * v41 + */ + @ExcelProperty(value = "v41") + private Long v41; + + /** + * v42 + */ + @ExcelProperty(value = "v42") + private Long v42; + + /** + * v43 + */ + @ExcelProperty(value = "v43") + private Long v43; + + /** + * v44 + */ + @ExcelProperty(value = "v44") + private Long v44; + + /** + * v45 + */ + @ExcelProperty(value = "v45") + private Long v45; + + /** + * v46 + */ + @ExcelProperty(value = "v46") + private Long v46; + + /** + * v47 + */ + @ExcelProperty(value = "v47") + private Long v47; + + /** + * v48 + */ + @ExcelProperty(value = "v48") + private Long v48; + + /** + * v49 + */ + @ExcelProperty(value = "v49") + private Long v49; + + /** + * v50 + */ + @ExcelProperty(value = "v50") + private Long v50; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec80rVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec80rVo.java new file mode 100644 index 0000000..2ad7eff --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/DeviceSpec80rVo.java @@ -0,0 +1,228 @@ +package com.ruoyi.system.domain.vo; + +import java.math.BigDecimal; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.ruoyi.common.annotation.ExcelDictFormat; +import com.ruoyi.common.convert.ExcelDictConvert; +import lombok.Data; + + +/** + * 80R设备规格参数视图对象 device_spec_80r + * + * @author ruoyi + * @date 2025-12-03 + */ +@Data +@ExcelIgnoreUnannotated +public class DeviceSpec80rVo { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + @ExcelProperty(value = "id") + private Long id; + + /** + * 行程变量 + */ + @ExcelProperty(value = "行程变量") + private String travelLength; + + /** + * 类型 + */ + @ExcelProperty(value = "类型") + private String itemType; + + /** + * 轴向 + */ + @ExcelProperty(value = "轴向") + private String axialType; + + /** + * 箱体 + */ + @ExcelProperty(value = "箱体") + private String boxType; + + /** + * v1 + */ + @ExcelProperty(value = "v1") + private Long v1; + + /** + * v2 + */ + @ExcelProperty(value = "v2") + private Long v2; + + /** + * v3 + */ + @ExcelProperty(value = "v3") + private Long v3; + + /** + * v5 + */ + @ExcelProperty(value = "v5") + private Long v5; + + /** + * v6 + */ + @ExcelProperty(value = "v6") + private Long v6; + + /** + * v8 + */ + @ExcelProperty(value = "v8") + private Long v8; + + /** + * g1 + */ + @ExcelProperty(value = "g1") + private BigDecimal g1; + + /** + * v9 + */ + @ExcelProperty(value = "v9") + private Long v9; + + /** + * g2 + */ + @ExcelProperty(value = "g2") + private BigDecimal g2; + + /** + * v10 + */ + @ExcelProperty(value = "v10") + private Long v10; + + /** + * g5 + */ + @ExcelProperty(value = "g5") + private BigDecimal g5; + + /** + * v11 + */ + @ExcelProperty(value = "v11") + private Long v11; + + /** + * v12 + */ + @ExcelProperty(value = "v12") + private Long v12; + + /** + * g6 + */ + @ExcelProperty(value = "g6") + private BigDecimal g6; + + /** + * v13 + */ + @ExcelProperty(value = "v13") + private Long v13; + + /** + * v14 + */ + @ExcelProperty(value = "v14") + private Long v14; + + /** + * g7 + */ + @ExcelProperty(value = "g7") + private BigDecimal g7; + + /** + * v15 + */ + @ExcelProperty(value = "v15") + private Long v15; + + /** + * v41 + */ + @ExcelProperty(value = "v41") + private Long v41; + + /** + * v42 + */ + @ExcelProperty(value = "v42") + private Long v42; + + /** + * v43 + */ + @ExcelProperty(value = "v43") + private Long v43; + + /** + * v44 + */ + @ExcelProperty(value = "v44") + private Long v44; + + /** + * v45 + */ + @ExcelProperty(value = "v45") + private Long v45; + + /** + * v46 + */ + @ExcelProperty(value = "v46") + private Long v46; + + /** + * v47 + */ + @ExcelProperty(value = "v47") + private Long v47; + + /** + * v48 + */ + @ExcelProperty(value = "v48") + private Long v48; + + /** + * v49 + */ + @ExcelProperty(value = "v49") + private Long v49; + + /** + * v50 + */ + @ExcelProperty(value = "v50") + private Long v50; + + /** + * v51 + */ + @ExcelProperty(value = "v51") + private Long v51; + + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/ElectricalMaterialBomVO.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/ElectricalMaterialBomVO.java index 01edf56..36233fc 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/ElectricalMaterialBomVO.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/ElectricalMaterialBomVO.java @@ -51,7 +51,7 @@ public class ElectricalMaterialBomVO { /** * 批次数量 */ - @ExcelProperty(value = "批次数量") + @ExcelProperty(value = "本批数量") private String batchQuantity; /** diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/FigureSaveVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/FigureSaveVo.java index dc6ba54..38a4cf7 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/FigureSaveVo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/FigureSaveVo.java @@ -69,4 +69,15 @@ public class FigureSaveVo { */ @ExcelProperty(value = "关联项目表") private Long pid; + /** + * 轴向 + */ + @ExcelProperty(value = "轴向") + private String axialType; + + /** + * 箱体类型 + */ + @ExcelProperty(value = "箱体类型") + private String boxType; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/KingdeeWorkCenterDataVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/KingdeeWorkCenterDataVo.java index 2754492..fc129a1 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/KingdeeWorkCenterDataVo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/KingdeeWorkCenterDataVo.java @@ -6,6 +6,8 @@ import com.ruoyi.common.annotation.ExcelDictFormat; import com.ruoyi.common.convert.ExcelDictConvert; import lombok.Data; +import java.math.BigDecimal; + /** * 金蝶工段数据视图对象 kingdee_work_center_data @@ -96,6 +98,15 @@ public class KingdeeWorkCenterDataVo { */ @ExcelProperty(value = "计划完成时间") private String operPlanFinishTime; + /** + * 计划开始时间2 (YYYY-MM-DD) + */ + private String operPlanStartTime2; + + /** + * 计划完成时间2 (YYYY-MM-DD) + */ + private String operPlanFinishTime2; /** * 延迟天数 @@ -107,6 +118,16 @@ public class KingdeeWorkCenterDataVo { */ @ExcelProperty(value = "工作中心") private String workCenter; - + /** + * 汇报数量 + */ + @ExcelProperty(value = "汇报数量") + private BigDecimal FReportQty; + /** + * 工废数量 + * + */ + @ExcelProperty(value = "工废数量") + private BigDecimal FScrapQty; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/ProcessOrderProVo.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/ProcessOrderProVo.java index 6ffb6ff..8d87f2a 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/ProcessOrderProVo.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/ProcessOrderProVo.java @@ -116,6 +116,10 @@ public class ProcessOrderProVo { private String drawingPathUrl; private Date createTime; + /** + * 创建人 + */ + private String createBy; /** * 工艺上传日志 */ diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/jdmain/rouplan/FSubEntity.java b/ruoyi-system/src/main/java/com/ruoyi/system/jdmain/rouplan/FSubEntity.java index 6b24249..8f52c22 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/jdmain/rouplan/FSubEntity.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/jdmain/rouplan/FSubEntity.java @@ -18,4 +18,9 @@ public class FSubEntity { @JsonProperty("FOperNumber") private Long FOperNumber; + /* + 入库仓库 + */ + @JsonProperty("F_HBYT_RKCK.FName") + private String rkckName; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/jdmain/rouplan/FidEntryIdDTO.java b/ruoyi-system/src/main/java/com/ruoyi/system/jdmain/rouplan/FidEntryIdDTO.java new file mode 100644 index 0000000..7a45b87 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/jdmain/rouplan/FidEntryIdDTO.java @@ -0,0 +1,27 @@ +package com.ruoyi.system.jdmain.rouplan; + +import lombok.Data; + +@Data +public class FidEntryIdDTO { + private Long fid; + private Long fEntryId; + private String warehouseNumber; + public FidEntryIdDTO(Long fid, Long fEntryId, String warehouseNumber) { + this.fid = fid; + this.fEntryId = fEntryId; + this.warehouseNumber = warehouseNumber; + } + + public Long getFid() { + return fid; + } + + public Long getFEntryId() { + return fEntryId; + } + + public String getWarehouseNumber() { + return warehouseNumber; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/jdmain/rouplan/Model.java b/ruoyi-system/src/main/java/com/ruoyi/system/jdmain/rouplan/Model.java index 7758964..1d4707c 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/jdmain/rouplan/Model.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/jdmain/rouplan/Model.java @@ -18,7 +18,6 @@ public class Model { private String FProcessId_number; @JsonProperty("FMONumber") private String FMONumber; - @JsonProperty("FPlanFinishTime") private Date FPlanFinishTime; diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec100rMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec100rMapper.java new file mode 100644 index 0000000..887463e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec100rMapper.java @@ -0,0 +1,15 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.system.domain.DeviceSpec100r; +import com.ruoyi.system.domain.vo.DeviceSpec100rVo; +import com.ruoyi.common.core.mapper.BaseMapperPlus; + +/** + * 100R设备规格参数Mapper接口 + * + * @author ruoyi + * @date 2025-12-03 + */ +public interface DeviceSpec100rMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec125rMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec125rMapper.java new file mode 100644 index 0000000..e66bd14 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec125rMapper.java @@ -0,0 +1,15 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.system.domain.DeviceSpec125r; +import com.ruoyi.system.domain.vo.DeviceSpec125rVo; +import com.ruoyi.common.core.mapper.BaseMapperPlus; + +/** + * 125R设备规格参数Mapper接口 + * + * @author ruoyi + * @date 2025-12-06 + */ +public interface DeviceSpec125rMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec150rMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec150rMapper.java new file mode 100644 index 0000000..db5d5be --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec150rMapper.java @@ -0,0 +1,15 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.system.domain.DeviceSpec150r; +import com.ruoyi.system.domain.vo.DeviceSpec150rVo; +import com.ruoyi.common.core.mapper.BaseMapperPlus; + +/** + * 150R设备规格参数Mapper接口 + * + * @author ruoyi + * @date 2025-12-06 + */ +public interface DeviceSpec150rMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec30dMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec30dMapper.java new file mode 100644 index 0000000..3874858 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec30dMapper.java @@ -0,0 +1,15 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.system.domain.DeviceSpec30d; +import com.ruoyi.system.domain.vo.DeviceSpec30dVo; +import com.ruoyi.common.core.mapper.BaseMapperPlus; + +/** + * device_spec_30D Mapper接口 + * + * @author ruoyi + * @date 2025-12-03 + */ +public interface DeviceSpec30dMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec30sMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec30sMapper.java new file mode 100644 index 0000000..c7f0361 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec30sMapper.java @@ -0,0 +1,15 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.system.domain.DeviceSpec30s; +import com.ruoyi.system.domain.vo.DeviceSpec30sVo; +import com.ruoyi.common.core.mapper.BaseMapperPlus; + +/** + * 30S设备规格参数Mapper接口 + * + * @author ruoyi + * @date 2025-12-03 + */ +public interface DeviceSpec30sMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec40rMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec40rMapper.java new file mode 100644 index 0000000..5893c2b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec40rMapper.java @@ -0,0 +1,15 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.system.domain.DeviceSpec40r; +import com.ruoyi.system.domain.vo.DeviceSpec40rVo; +import com.ruoyi.common.core.mapper.BaseMapperPlus; + +/** + * 40R设备规格参数Mapper接口 + * + * @author ruoyi + * @date 2025-12-03 + */ +public interface DeviceSpec40rMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec40sMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec40sMapper.java new file mode 100644 index 0000000..26e0bcc --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec40sMapper.java @@ -0,0 +1,15 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.system.domain.DeviceSpec40s; +import com.ruoyi.system.domain.vo.DeviceSpec40sVo; +import com.ruoyi.common.core.mapper.BaseMapperPlus; + +/** + * 40S设备规格参数Mapper接口 + * + * @author ruoyi + * @date 2025-12-03 + */ +public interface DeviceSpec40sMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec60rMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec60rMapper.java new file mode 100644 index 0000000..e47308d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec60rMapper.java @@ -0,0 +1,15 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.system.domain.DeviceSpec60r; +import com.ruoyi.system.domain.vo.DeviceSpec60rVo; +import com.ruoyi.common.core.mapper.BaseMapperPlus; + +/** + * 60R设备规格参数Mapper接口 + * + * @author ruoyi + * @date 2025-12-03 + */ +public interface DeviceSpec60rMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec80rMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec80rMapper.java new file mode 100644 index 0000000..850e83b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DeviceSpec80rMapper.java @@ -0,0 +1,15 @@ +package com.ruoyi.system.mapper; + +import com.ruoyi.system.domain.DeviceSpec80r; +import com.ruoyi.system.domain.vo.DeviceSpec80rVo; +import com.ruoyi.common.core.mapper.BaseMapperPlus; + +/** + * 80R设备规格参数Mapper接口 + * + * @author ruoyi + * @date 2025-12-03 + */ +public interface DeviceSpec80rMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/runner/JdUtil.java b/ruoyi-system/src/main/java/com/ruoyi/system/runner/JdUtil.java index 1db5393..174c15d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/runner/JdUtil.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/runner/JdUtil.java @@ -4,10 +4,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.gson.Gson; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; +import com.google.gson.*; import com.kingdee.bos.webapi.entity.RepoRet; import com.kingdee.bos.webapi.sdk.K3CloudApi; import com.ruoyi.common.core.domain.R; @@ -17,6 +14,7 @@ import com.ruoyi.system.domain.BomDetails; import com.ruoyi.system.domain.PartCost; import com.ruoyi.system.domain.dto.*; import com.ruoyi.system.domain.vo.*; +import com.ruoyi.system.jdmain.rouplan.FidEntryIdDTO; import com.ruoyi.system.jdmain.rouplan.Model; import org.aspectj.bridge.MessageUtil; import org.slf4j.Logger; @@ -2055,8 +2053,9 @@ public class JdUtil { return null; // 如果没有找到,返回 null } - - //保存更新生产订单的开工时间 + /** + * 保存更新生产订单的开工时间 + */ public static String updateOrder(JdHuoZhu jdHuoZhu, Model numDTO, Date xuStartTime, Date xuEndTime) throws Exception { String planStartDate = dateFormat.format(xuStartTime); String planFinishDate = dateFormat.format(xuEndTime); @@ -3332,4 +3331,218 @@ public class JdUtil { } return Collections.emptyList(); } + + /** + * 获取此令号下的所有物料编码 + * @param productionOrderNo + * @return + */ + public static List getOrderNumberCollection(String productionOrderNo) { + K3CloudApi client = new K3CloudApi(); + // 请求参数,要求为json字符串 + JsonObject json = new JsonObject(); + json.addProperty("FormId", "PRD_MO"); + json.addProperty("FieldKeys", "FMaterialId.FNumber"); + JsonArray filterString = new JsonArray(); + JsonObject filterObject = new JsonObject(); + filterObject.addProperty("FieldName", "F_HBYT_SCLH"); + filterObject.addProperty("Compare", "67"); + filterObject.addProperty("Value", productionOrderNo); + filterObject.addProperty("Left", ""); + filterObject.addProperty("Right", ""); + filterObject.addProperty("Logic", 0); + filterString.add(filterObject); + + json.add("FilterString", filterString); + json.addProperty("OrderString", ""); + json.addProperty("TopRowCount", 0); + json.addProperty("StartRow", 0); + json.addProperty("Limit", 2000); + json.addProperty("SubSystemId", ""); + + String jsonData = json.toString(); + try { + String resultJson = String.valueOf(client.billQuery(jsonData)); + JsonArray jsonArray = new Gson().fromJson(resultJson, JsonArray.class); + List list = new ArrayList<>(); + for (int i = 0; i < jsonArray.size(); i++) { + JsonObject jsonObject = jsonArray.get(i).getAsJsonObject(); + if (jsonObject.has("FMaterialId.FNumber")) { + list.add(jsonObject.get("FMaterialId.FNumber").getAsString()); + } + } + return list; + } catch (Exception e) { + log.error("调用接口时发生异常: " + e.getMessage(), e); + } + return Collections.emptyList(); + } + /** + * 获取此令号下的采购申请单对应的所有物料编码 + * @param productionOrderNo + * @return + */ + public static List getCaiGouOrderNumberList(String productionOrderNo) { + K3CloudApi client = new K3CloudApi(); + // 请求参数,要求为json字符串 + JsonObject json = new JsonObject(); + json.addProperty("FormId", "PUR_Requisition"); + json.addProperty("FieldKeys", "FMaterialId.FNumber"); + JsonArray filterString = new JsonArray(); + JsonObject filterObject = new JsonObject(); + filterObject.addProperty("FieldName", "F_UCHN_Text"); + filterObject.addProperty("Compare", "67"); + filterObject.addProperty("Value", productionOrderNo); + filterObject.addProperty("Left", ""); + filterObject.addProperty("Right", ""); + filterObject.addProperty("Logic", 0); + filterString.add(filterObject); + json.add("FilterString", filterString); + json.addProperty("OrderString", ""); + json.addProperty("TopRowCount", 0); + json.addProperty("StartRow", 0); + json.addProperty("Limit", 2000); + json.addProperty("SubSystemId", ""); + + String jsonData = json.toString(); + try { + String resultJson = String.valueOf(client.billQuery(jsonData)); + JsonArray jsonArray = new Gson().fromJson(resultJson, JsonArray.class); + List list = new ArrayList<>(); + for (int i = 0; i < jsonArray.size(); i++) { + JsonObject jsonObject = jsonArray.get(i).getAsJsonObject(); + if (jsonObject.has("FMaterialId.FNumber")) { + list.add(jsonObject.get("FMaterialId.FNumber").getAsString()); + } + } + return list; + } catch (Exception e) { + log.error("调用接口时发生异常: " + e.getMessage(), e); + } + return Collections.emptyList(); + } + public static String updateOrder2(JdHuoZhu jdHuoZhu, String cangKuNum) throws Exception { + + K3CloudApi api = new K3CloudApi(false); + JsonObject json = new JsonObject(); + + JsonArray needUpDateFields = new JsonArray(); + needUpDateFields.add("FID"); + needUpDateFields.add("F_HBYT_RKCK.FName"); + needUpDateFields.add("FTreeEntity_FENTRYID"); + json.add("NeedUpDateFields", needUpDateFields); + + json.addProperty("IsDeleteEntry", "false"); + + JsonObject model = new JsonObject(); + model.addProperty("FID", jdHuoZhu.getFID()); + + JsonArray fTreeEntity = new JsonArray(); + JsonObject fTreeEntityItem = new JsonObject(); + fTreeEntityItem.addProperty("F_HBYT_RKCK.FName", cangKuNum); + fTreeEntityItem.addProperty("FENTRYID", jdHuoZhu.getFTreeEntityFENTRYID()); + fTreeEntity.add(fTreeEntityItem); + model.add("FTreeEntity", fTreeEntity); + + json.add("Model", model); + + // Gson 自己序列化自己 + String data = json.toString(); + System.out.println(data); + + String result = api.save("PRD_MO", data); + + Gson gson = new Gson(); + RepoRet sRet = gson.fromJson(result, RepoRet.class); + + if (sRet.isSuccessfully()) { + return "生产订单保存成功"; + } else { + return "生产订单保存失败:" + gson.toJson(sRet.getResult()); + } + } + + public static String updateCgOrder1(List list, String cangKuNum) throws Exception { + + K3CloudApi api = new K3CloudApi(false); + JsonObject json = new JsonObject(); + + JsonArray needUpDateFields = new JsonArray(); + needUpDateFields.add("FID"); + needUpDateFields.add("F_HBYT_RKCK.FName"); + needUpDateFields.add("FTreeEntity_FENTRYID"); + json.add("NeedUpDateFields", needUpDateFields); + + json.addProperty("IsDeleteEntry", "false"); + + JsonObject model = new JsonObject(); + model.addProperty("FID", jdHuoZhu.getFID()); + + JsonArray fTreeEntity = new JsonArray(); + JsonObject fTreeEntityItem = new JsonObject(); + fTreeEntityItem.addProperty("F_HBYT_RKCK.FName", cangKuNum); + fTreeEntityItem.addProperty("FENTRYID", jdHuoZhu.getFTreeEntityFENTRYID()); + fTreeEntity.add(fTreeEntityItem); + model.add("FTreeEntity", fTreeEntity); + + json.add("Model", model); + + // Gson 自己序列化自己 + String data = json.toString(); + System.out.println(data); + + String result = api.save("PRD_MO", data); + + Gson gson = new Gson(); + RepoRet sRet = gson.fromJson(result, RepoRet.class); + + if (sRet.isSuccessfully()) { + return "生产订单保存成功"; + } else { + return "生产订单保存失败:" + gson.toJson(sRet.getResult()); + } + } + /* + + */ + public static List getCaiGouOrderNumberList(String productionOrderNo) { + K3CloudApi client = new K3CloudApi(); + // 请求参数,要求为json字符串 + JsonObject json = new JsonObject(); + json.addProperty("FormId", "PUR_Requisition"); + json.addProperty("FieldKeys", "FMaterialId.FNumber"); + JsonArray filterString = new JsonArray(); + JsonObject filterObject = new JsonObject(); + filterObject.addProperty("FieldName", "F_UCHN_Text"); + filterObject.addProperty("Compare", "67"); + filterObject.addProperty("Value", productionOrderNo); + filterObject.addProperty("Left", ""); + filterObject.addProperty("Right", ""); + filterObject.addProperty("Logic", 0); + filterString.add(filterObject); + json.add("FilterString", filterString); + json.addProperty("OrderString", ""); + json.addProperty("TopRowCount", 0); + json.addProperty("StartRow", 0); + json.addProperty("Limit", 2000); + json.addProperty("SubSystemId", ""); + + String jsonData = json.toString(); + try { + String resultJson = String.valueOf(client.billQuery(jsonData)); + JsonArray jsonArray = new Gson().fromJson(resultJson, JsonArray.class); + List list = new ArrayList<>(); + for (int i = 0; i < jsonArray.size(); i++) { + JsonObject jsonObject = jsonArray.get(i).getAsJsonObject(); + if (jsonObject.has("FMaterialId.FNumber")) { + list.add(jsonObject.get("FMaterialId.FNumber").getAsString()); + } + } + return list; + } catch (Exception e) { + log.error("调用接口时发生异常: " + e.getMessage(), e); + } + return Collections.emptyList(); + } + } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/runner/updatePcessPlanConver.java b/ruoyi-system/src/main/java/com/ruoyi/system/runner/updatePcessPlanConver.java index 4b49deb..2e683a1 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/runner/updatePcessPlanConver.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/runner/updatePcessPlanConver.java @@ -25,30 +25,25 @@ public class updatePcessPlanConver { subEntity.setFDetailID(numDTO.getFEntity().get(0).getFSubEntity().get(0).getFDetailID()); // 确保获取正确的 FDetailID subEntity.setFOperPlanStartTime(processRoute.getXuStartTime()); subEntity.setFOperPlanFinishTime(processRoute.getXuEndTime()); - // 创建 Entity 对象并设置字段 FEntity entity = new FEntity(); entity.setFEntryID(numDTO.getFEntity().get(0).getFEntryID()); entity.setFSeqNumber(numDTO.getFEntity().get(0).getFSeqNumber()); entity.setFSeqName(numDTO.getFEntity().get(0).getFSeqName()); - // 将 SubEntity 添加到 Entity 的 FSubEntity 列表中 List subEntities = new ArrayList<>(); subEntities.add(subEntity); entity.setFSubEntity(subEntities); - // 创建 Model 对象并设置字段 Model model = new Model(); model.setFID(numDTO.getFID()); model.setFPlanStartTime(processTimeInfo.getTenthProcessStartTime()); model.setFPlanFinishTime(processTimeInfo.getLastProcessEndTime()); - // 将 Entity 添加到 Model 的 FEntity 列表中 List entities = new ArrayList<>(); entities.add(entity); model.setFEntity(entities); - // 创建 MainModel 并设置字段 MainModel mainModel = new MainModel(); List needUpDateFields = Arrays.asList( @@ -113,7 +108,7 @@ public class updatePcessPlanConver { //对返回结果进行解析和校验 repoRet = gson.fromJson(resultJson, RepoRet.class); if (repoRet.getResult().getResponseStatus().isIsSuccess()) { - System.out.printf("接口返回结果: %s%n", gson.toJson(repoRet.getResult())); + System.out.printf("接口返回结果====================》: %s%n", gson.toJson(repoRet.getResult())); } else { fail("接口返回结果: " + gson.toJson(repoRet.getResult().getResponseStatus().getErrors().get(1))); } @@ -125,5 +120,42 @@ public class updatePcessPlanConver { return repoRet; } + public static RepoRet updatePcessPlan2(List numDTO) { + + RepoRet repoRet = null; + for (Model model : numDTO) { + MainModel mainModel = new MainModel(); + List needUpDateFields = Arrays.asList( + "FEntity", "FSubEntity", "F_HBYT_RKCK.FName" + ); + mainModel.setNeedUpDateFields(needUpDateFields); + mainModel.setDeleteEntry(false); + mainModel.setModel(model); + // 将对象转换为 JSON + Gson gson1 = new GsonBuilder().setPrettyPrinting().create(); + K3CloudApi client = new K3CloudApi(); + String jsonOutput = gson1.toJson(mainModel); + repoRet = null; + try { + //业务对象标识工序计划表 + String formId = "SFC_OperationPlanning"; + //调用接口 + String resultJson = client.save(formId, jsonOutput); + //用于记录结果 + Gson gson = new Gson(); + //对返回结果进行解析和校验 + repoRet = gson.fromJson(resultJson, RepoRet.class); + if (repoRet.getResult().getResponseStatus().isIsSuccess()) { + System.out.printf("接口返回结果====================》: %s%n", gson.toJson(repoRet.getResult())); + } else { + fail("接口返回结果: " + gson.toJson(repoRet.getResult().getResponseStatus().getErrors().get(1))); + } + } catch (Exception e) { + fail(e.getMessage()); + return repoRet; + } + } + return repoRet; + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec100rService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec100rService.java new file mode 100644 index 0000000..d1f482b --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec100rService.java @@ -0,0 +1,49 @@ +package com.ruoyi.system.service; + +import com.ruoyi.system.domain.DeviceSpec100r; +import com.ruoyi.system.domain.vo.DeviceSpec100rVo; +import com.ruoyi.system.domain.bo.DeviceSpec100rBo; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 100R设备规格参数Service接口 + * + * @author ruoyi + * @date 2025-12-03 + */ +public interface IDeviceSpec100rService { + + /** + * 查询100R设备规格参数 + */ + DeviceSpec100rVo queryById(Long id); + + /** + * 查询100R设备规格参数列表 + */ + TableDataInfo queryPageList(DeviceSpec100rBo bo, PageQuery pageQuery); + + /** + * 查询100R设备规格参数列表 + */ + List queryList(DeviceSpec100rBo bo); + + /** + * 新增100R设备规格参数 + */ + Boolean insertByBo(DeviceSpec100rBo bo); + + /** + * 修改100R设备规格参数 + */ + Boolean updateByBo(DeviceSpec100rBo bo); + + /** + * 校验并批量删除100R设备规格参数信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec125rService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec125rService.java new file mode 100644 index 0000000..054f99e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec125rService.java @@ -0,0 +1,49 @@ +package com.ruoyi.system.service; + +import com.ruoyi.system.domain.DeviceSpec125r; +import com.ruoyi.system.domain.vo.DeviceSpec125rVo; +import com.ruoyi.system.domain.bo.DeviceSpec125rBo; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 125R设备规格参数Service接口 + * + * @author ruoyi + * @date 2025-12-06 + */ +public interface IDeviceSpec125rService { + + /** + * 查询125R设备规格参数 + */ + DeviceSpec125rVo queryById(Long id); + + /** + * 查询125R设备规格参数列表 + */ + TableDataInfo queryPageList(DeviceSpec125rBo bo, PageQuery pageQuery); + + /** + * 查询125R设备规格参数列表 + */ + List queryList(DeviceSpec125rBo bo); + + /** + * 新增125R设备规格参数 + */ + Boolean insertByBo(DeviceSpec125rBo bo); + + /** + * 修改125R设备规格参数 + */ + Boolean updateByBo(DeviceSpec125rBo bo); + + /** + * 校验并批量删除125R设备规格参数信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec150rService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec150rService.java new file mode 100644 index 0000000..3ece96d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec150rService.java @@ -0,0 +1,49 @@ +package com.ruoyi.system.service; + +import com.ruoyi.system.domain.DeviceSpec150r; +import com.ruoyi.system.domain.vo.DeviceSpec150rVo; +import com.ruoyi.system.domain.bo.DeviceSpec150rBo; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 150R设备规格参数Service接口 + * + * @author ruoyi + * @date 2025-12-06 + */ +public interface IDeviceSpec150rService { + + /** + * 查询150R设备规格参数 + */ + DeviceSpec150rVo queryById(Long id); + + /** + * 查询150R设备规格参数列表 + */ + TableDataInfo queryPageList(DeviceSpec150rBo bo, PageQuery pageQuery); + + /** + * 查询150R设备规格参数列表 + */ + List queryList(DeviceSpec150rBo bo); + + /** + * 新增150R设备规格参数 + */ + Boolean insertByBo(DeviceSpec150rBo bo); + + /** + * 修改150R设备规格参数 + */ + Boolean updateByBo(DeviceSpec150rBo bo); + + /** + * 校验并批量删除150R设备规格参数信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec30dService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec30dService.java new file mode 100644 index 0000000..8ac8659 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec30dService.java @@ -0,0 +1,49 @@ +package com.ruoyi.system.service; + +import com.ruoyi.system.domain.DeviceSpec30d; +import com.ruoyi.system.domain.vo.DeviceSpec30dVo; +import com.ruoyi.system.domain.bo.DeviceSpec30dBo; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * device_spec_30D Service接口 + * + * @author ruoyi + * @date 2025-12-03 + */ +public interface IDeviceSpec30dService { + + /** + * 查询device_spec_30D + */ + DeviceSpec30dVo queryById(Long id); + + /** + * 查询device_spec_30D 列表 + */ + TableDataInfo queryPageList(DeviceSpec30dBo bo, PageQuery pageQuery); + + /** + * 查询device_spec_30D 列表 + */ + List queryList(DeviceSpec30dBo bo); + + /** + * 新增device_spec_30D + */ + Boolean insertByBo(DeviceSpec30dBo bo); + + /** + * 修改device_spec_30D + */ + Boolean updateByBo(DeviceSpec30dBo bo); + + /** + * 校验并批量删除device_spec_30D 信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec30sService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec30sService.java new file mode 100644 index 0000000..33550bf --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec30sService.java @@ -0,0 +1,49 @@ +package com.ruoyi.system.service; + +import com.ruoyi.system.domain.DeviceSpec30s; +import com.ruoyi.system.domain.vo.DeviceSpec30sVo; +import com.ruoyi.system.domain.bo.DeviceSpec30sBo; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 30S设备规格参数Service接口 + * + * @author ruoyi + * @date 2025-12-03 + */ +public interface IDeviceSpec30sService { + + /** + * 查询30S设备规格参数 + */ + DeviceSpec30sVo queryById(Long id); + + /** + * 查询30S设备规格参数列表 + */ + TableDataInfo queryPageList(DeviceSpec30sBo bo, PageQuery pageQuery); + + /** + * 查询30S设备规格参数列表 + */ + List queryList(DeviceSpec30sBo bo); + + /** + * 新增30S设备规格参数 + */ + Boolean insertByBo(DeviceSpec30sBo bo); + + /** + * 修改30S设备规格参数 + */ + Boolean updateByBo(DeviceSpec30sBo bo); + + /** + * 校验并批量删除30S设备规格参数信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec40rService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec40rService.java new file mode 100644 index 0000000..5537133 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec40rService.java @@ -0,0 +1,49 @@ +package com.ruoyi.system.service; + +import com.ruoyi.system.domain.DeviceSpec40r; +import com.ruoyi.system.domain.vo.DeviceSpec40rVo; +import com.ruoyi.system.domain.bo.DeviceSpec40rBo; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 40R设备规格参数Service接口 + * + * @author ruoyi + * @date 2025-12-03 + */ +public interface IDeviceSpec40rService { + + /** + * 查询40R设备规格参数 + */ + DeviceSpec40rVo queryById(Long id); + + /** + * 查询40R设备规格参数列表 + */ + TableDataInfo queryPageList(DeviceSpec40rBo bo, PageQuery pageQuery); + + /** + * 查询40R设备规格参数列表 + */ + List queryList(DeviceSpec40rBo bo); + + /** + * 新增40R设备规格参数 + */ + Boolean insertByBo(DeviceSpec40rBo bo); + + /** + * 修改40R设备规格参数 + */ + Boolean updateByBo(DeviceSpec40rBo bo); + + /** + * 校验并批量删除40R设备规格参数信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec40sService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec40sService.java new file mode 100644 index 0000000..a48b9bc --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec40sService.java @@ -0,0 +1,49 @@ +package com.ruoyi.system.service; + +import com.ruoyi.system.domain.DeviceSpec40s; +import com.ruoyi.system.domain.vo.DeviceSpec40sVo; +import com.ruoyi.system.domain.bo.DeviceSpec40sBo; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 40S设备规格参数Service接口 + * + * @author ruoyi + * @date 2025-12-03 + */ +public interface IDeviceSpec40sService { + + /** + * 查询40S设备规格参数 + */ + DeviceSpec40sVo queryById(Long id); + + /** + * 查询40S设备规格参数列表 + */ + TableDataInfo queryPageList(DeviceSpec40sBo bo, PageQuery pageQuery); + + /** + * 查询40S设备规格参数列表 + */ + List queryList(DeviceSpec40sBo bo); + + /** + * 新增40S设备规格参数 + */ + Boolean insertByBo(DeviceSpec40sBo bo); + + /** + * 修改40S设备规格参数 + */ + Boolean updateByBo(DeviceSpec40sBo bo); + + /** + * 校验并批量删除40S设备规格参数信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec60rService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec60rService.java new file mode 100644 index 0000000..93f2a97 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec60rService.java @@ -0,0 +1,49 @@ +package com.ruoyi.system.service; + +import com.ruoyi.system.domain.DeviceSpec60r; +import com.ruoyi.system.domain.vo.DeviceSpec60rVo; +import com.ruoyi.system.domain.bo.DeviceSpec60rBo; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 60R设备规格参数Service接口 + * + * @author ruoyi + * @date 2025-12-03 + */ +public interface IDeviceSpec60rService { + + /** + * 查询60R设备规格参数 + */ + DeviceSpec60rVo queryById(Long id); + + /** + * 查询60R设备规格参数列表 + */ + TableDataInfo queryPageList(DeviceSpec60rBo bo, PageQuery pageQuery); + + /** + * 查询60R设备规格参数列表 + */ + List queryList(DeviceSpec60rBo bo); + + /** + * 新增60R设备规格参数 + */ + Boolean insertByBo(DeviceSpec60rBo bo); + + /** + * 修改60R设备规格参数 + */ + Boolean updateByBo(DeviceSpec60rBo bo); + + /** + * 校验并批量删除60R设备规格参数信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec80rService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec80rService.java new file mode 100644 index 0000000..6a3a50e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IDeviceSpec80rService.java @@ -0,0 +1,49 @@ +package com.ruoyi.system.service; + +import com.ruoyi.system.domain.DeviceSpec80r; +import com.ruoyi.system.domain.vo.DeviceSpec80rVo; +import com.ruoyi.system.domain.bo.DeviceSpec80rBo; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 80R设备规格参数Service接口 + * + * @author ruoyi + * @date 2025-12-03 + */ +public interface IDeviceSpec80rService { + + /** + * 查询80R设备规格参数 + */ + DeviceSpec80rVo queryById(Long id); + + /** + * 查询80R设备规格参数列表 + */ + TableDataInfo queryPageList(DeviceSpec80rBo bo, PageQuery pageQuery); + + /** + * 查询80R设备规格参数列表 + */ + List queryList(DeviceSpec80rBo bo); + + /** + * 新增80R设备规格参数 + */ + Boolean insertByBo(DeviceSpec80rBo bo); + + /** + * 修改80R设备规格参数 + */ + Boolean updateByBo(DeviceSpec80rBo bo); + + /** + * 校验并批量删除80R设备规格参数信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IProcessOrderProService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IProcessOrderProService.java index 2ebeefc..6df141d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/IProcessOrderProService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IProcessOrderProService.java @@ -9,6 +9,7 @@ import com.ruoyi.system.domain.bo.FigureSaveBo; import com.ruoyi.system.domain.dto.ProcessRouteExcelDTO; import com.ruoyi.system.domain.dto.ProcessRoutePushResultDTO; import com.ruoyi.system.domain.dto.ProcessRouteXuDTO; +import com.ruoyi.system.domain.dto.excuteDrawing.RigidChainModelDTO; import com.ruoyi.system.domain.vo.OverdueProjectVo; import com.ruoyi.system.domain.vo.ProcessOrderProVo; import com.ruoyi.system.domain.bo.ProcessOrderProBo; @@ -16,6 +17,7 @@ import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.system.domain.vo.ProductionOrderVo; import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import java.util.Collection; import java.util.List; @@ -67,7 +69,7 @@ public interface IProcessOrderProService { void batchUpdateProjectTimeRanges(); List selectByProjectNumbers(Set routeDescSet); - void addProduct(FigureSaveBo bo, ProcessOrderProBo orderPro); + void addProduct( RigidChainModelDTO orderPro); String executDrawing(ProcessOrderProBo orderPro); @@ -85,4 +87,6 @@ public interface IProcessOrderProService { List getRouteAndBomDetail(List routlist,List processDataList,ProcessOrderPro orderPro); R getRouteLog(Long id) throws JsonProcessingException; + + SseEmitter startDrawingSse(Long id); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IProcessRouteService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IProcessRouteService.java index 81df52b..7ee9796 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/IProcessRouteService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IProcessRouteService.java @@ -149,4 +149,8 @@ public interface IProcessRouteService { //根据令号和物料编码 查询工艺路线 ProcessRoute getProcessRoutesXuTime(String productionOrderNo, String materialCode,String xu); + + List updateProductionOrders(String rooteProdet,String cangKuNum) throws Exception; + + List updateCgOrders(String rooteProdet, String cangKuNum) throws Exception; } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/IProductionOrderService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/IProductionOrderService.java index ec9954c..3d4ee71 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/IProductionOrderService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/IProductionOrderService.java @@ -58,4 +58,8 @@ public interface IProductionOrderService { Boolean executDrawing(ProcessOrderProBo orderPro); List selectByProCode(String productionOrderNo); + /** + * 是否属于外购件 + */ + Boolean isPurchas(String proCode,String materialCode); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/MssqlQueryService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/MssqlQueryService.java new file mode 100644 index 0000000..372f183 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/MssqlQueryService.java @@ -0,0 +1,139 @@ +package com.ruoyi.system.service; + +import com.baomidou.dynamic.datasource.annotation.DS; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Service; + +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.system.domain.bo.KingdeeWorkCenterDataBo; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Service +public class MssqlQueryService { + + private final JdbcTemplate jdbcTemplate; + + public MssqlQueryService(JdbcTemplate jdbcTemplate) { + this.jdbcTemplate = jdbcTemplate; + } + + @DS("sqlserver") + public List> queryForList(String sql) { + return jdbcTemplate.queryForList(sql); + } + + @DS("sqlserver") + public List getKingdeeProduceData(String workCenterName) { + String sql = "select t8.FBillNo as MoBillNo,t8.F_HBYT_SCLH as MoOrderNo, \n" + + " t5.FNumber as FMaterialNumber,t6.FName as FMaterialName, \n" + + " t3.FOperQty,t4.FTransInQty,t4.FTransOutQty, \n" + + " t4.FReportQty as FReportQty, \n" + + " t4.FScrapQty as FScrapQty, \n" + + " case when FTransOutQty = 0 and FTransInQty > 0 \n" + + " \t then '未转出' \n" + + " \t when FTransOutQty = 0 and FTransInQty = 0 \n" + + " \t then '未转入' \n" + + " \t when FTransOutQty > 0 and FTransInQty > 0 \n" + + " \t then '已转出' \n" + + " end as FMaterialStatus, \n" + + " t3.FOperNumber,t7.FName as FProcessName, \n" + + " SUBSTRING(CONVERT(varchar,t3.FOperPlanStartTime,23),6,8) as FOperPlanStartTime, \n" + + " SUBSTRING(CONVERT(varchar,t3.FOperPlanFinishTime,23),6,8) as FOperPlanFinishTime, \n" + + " CONVERT(varchar,t3.FOperPlanStartTime,23) as FOperPlanStartTime2, \n" + + " CONVERT(varchar,t3.FOperPlanFinishTime,23) as FOperPlanFinishTime2, \n" + + " DATEDIFF(day,t3.FOperPlanFinishTime,GETDATE()) as FDelayDays, \n" + + " t9.FName as WorkCenterName \n" + + " from T_SFC_OPERPLANNING t1 \n" + + " inner join T_SFC_OPERPLANNINGSEQ t2 on t1.FID = t2.FID \n" + + " inner join T_SFC_OPERPLANNINGDETAIL t3 on t2.FENTRYID = t3.FENTRYID \n" + + " inner join T_SFC_OPERPLANNINGDETAIL_B t4 on t3.FDETAILID = t4.FDETAILID \n" + + " inner join T_BD_MATERIAL t5 on t1.FProductId = t5.FMaterialId \n" + + " inner join T_BD_MATERIAL_L t6 on t1.FProductId = t6.FMaterialId \n" + + " inner join T_ENG_PROCESS_L t7 on t3.FProcessId = t7.FID \n" + + " left join T_PRD_MO t8 on t1.FMoId = t8.FID \n" + + " inner join T_ENG_WORKCENTER_L t9 on t3.FWorkCenterId = t9.FID \n" + + " where t1.FDOCUMENTSTATUS = 'C' and (FOperStatus =2 or FOperStatus =3 or FOperStatus =4) \n" + + " and t8.F_HBYT_SCLH not like '%YF%'"; + + List> resultList; + if (StringUtils.isNotEmpty(workCenterName)) { + sql += " and t9.FName = ?"; + resultList = jdbcTemplate.queryForList(sql, workCenterName); + } else { + resultList = jdbcTemplate.queryForList(sql); + } + + List boList = new ArrayList<>(); + for (Map row : resultList) { + KingdeeWorkCenterDataBo bo = new KingdeeWorkCenterDataBo(); + bo.setMoBillNo(getString(row, "MoBillNo")); + bo.setMoOrderNo(getString(row, "MoOrderNo")); + bo.setMaterialNumber(getString(row, "FMaterialNumber")); + bo.setMaterialName(getString(row, "FMaterialName")); + + BigDecimal operQty = getBigDecimal(row, "FOperQty"); + bo.setOperQty(operQty); + + BigDecimal FTransInQty = getBigDecimal(row, "FTransInQty"); + bo.setTransInQty(FTransInQty); + + BigDecimal FTransOutQty = getBigDecimal(row, "FTransOutQty"); + bo.setTransOutQty(FTransOutQty); + + bo.setFReportQty(getBigDecimal(row, "FReportQty")); + bo.setFScrapQty(getBigDecimal(row, "FScrapQty")); + + /* FRemainQty = FTransInQty - FTransOutQty + if (transInQty != null && transOutQty != null) { + bo.setRemainQty(transInQty.subtract(transOutQty).setScale(2, RoundingMode.HALF_UP)); + } else { + bo.setRemainQty(BigDecimal.ZERO); + }*/ + + bo.setMaterialStatus(getString(row, "FMaterialStatus")); + bo.setOperNumber(getString(row, "FOperNumber")); + bo.setProcessName(getString(row, "FProcessName")); + bo.setOperPlanStartTime(getString(row, "FOperPlanStartTime")); + bo.setOperPlanFinishTime(getString(row, "FOperPlanFinishTime")); + bo.setOperPlanStartTime2(getString(row, "FOperPlanStartTime2")); + bo.setOperPlanFinishTime2(getString(row, "FOperPlanFinishTime2")); + bo.setWorkCenter(getString(row, "WorkCenterName")); + + // Delay Days Logic + Object delayDaysObj = row.get("FDelayDays"); + int delayDays = 0; + if (delayDaysObj != null) { + try { + delayDays = Integer.parseInt(delayDaysObj.toString()); + } catch (NumberFormatException e) { + // ignore + } + } + bo.setDelayDays(delayDays <= 0 ? "" : String.valueOf(delayDays)); + + boList.add(bo); + } + return boList; + } + + private String getString(Map row, String key) { + Object val = row.get(key); + return val != null ? val.toString() : ""; + } + + + private BigDecimal getBigDecimal(Map row, String key) { + Object val = row.get(key); + if (val == null) return BigDecimal.ZERO; + try { + return new BigDecimal(val.toString()).setScale(2, RoundingMode.HALF_UP); + } catch (Exception e) { + return BigDecimal.ZERO; + } + } +} + diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec100rServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec100rServiceImpl.java new file mode 100644 index 0000000..2c03d1e --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec100rServiceImpl.java @@ -0,0 +1,144 @@ +package com.ruoyi.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.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 com.ruoyi.common.utils.StringUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import com.ruoyi.system.domain.bo.DeviceSpec100rBo; +import com.ruoyi.system.domain.vo.DeviceSpec100rVo; +import com.ruoyi.system.domain.DeviceSpec100r; +import com.ruoyi.system.mapper.DeviceSpec100rMapper; +import com.ruoyi.system.service.IDeviceSpec100rService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 100R设备规格参数Service业务层处理 + * + * @author ruoyi + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class DeviceSpec100rServiceImpl implements IDeviceSpec100rService { + + private final DeviceSpec100rMapper baseMapper; + + /** + * 查询100R设备规格参数 + */ + @Override + public DeviceSpec100rVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 查询100R设备规格参数列表 + */ + @Override + public TableDataInfo queryPageList(DeviceSpec100rBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询100R设备规格参数列表 + */ + @Override + public List queryList(DeviceSpec100rBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(DeviceSpec100rBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getTravelLength()), DeviceSpec100r::getTravelLength, bo.getTravelLength()); + lqw.eq(StringUtils.isNotBlank(bo.getItemType()), DeviceSpec100r::getItemType, bo.getItemType()); + lqw.eq(StringUtils.isNotBlank(bo.getAxialType()), DeviceSpec100r::getAxialType, bo.getAxialType()); + lqw.eq(StringUtils.isNotBlank(bo.getBoxType()), DeviceSpec100r::getBoxType, bo.getBoxType()); + lqw.eq(bo.getV1() != null, DeviceSpec100r::getV1, bo.getV1()); + lqw.eq(bo.getV2() != null, DeviceSpec100r::getV2, bo.getV2()); + lqw.eq(bo.getV3() != null, DeviceSpec100r::getV3, bo.getV3()); + lqw.eq(bo.getV4() != null, DeviceSpec100r::getV4, bo.getV4()); + lqw.eq(bo.getV5() != null, DeviceSpec100r::getV5, bo.getV5()); + lqw.eq(bo.getV6() != null, DeviceSpec100r::getV6, bo.getV6()); + lqw.eq(bo.getV7() != null, DeviceSpec100r::getV7, bo.getV7()); + lqw.eq(bo.getV8() != null, DeviceSpec100r::getV8, bo.getV8()); + lqw.eq(bo.getG1() != null, DeviceSpec100r::getG1, bo.getG1()); + lqw.eq(bo.getV9() != null, DeviceSpec100r::getV9, bo.getV9()); + lqw.eq(bo.getG2() != null, DeviceSpec100r::getG2, bo.getG2()); + lqw.eq(bo.getV10() != null, DeviceSpec100r::getV10, bo.getV10()); + lqw.eq(bo.getG5() != null, DeviceSpec100r::getG5, bo.getG5()); + lqw.eq(bo.getV11() != null, DeviceSpec100r::getV11, bo.getV11()); + lqw.eq(bo.getV12() != null, DeviceSpec100r::getV12, bo.getV12()); + lqw.eq(bo.getG6() != null, DeviceSpec100r::getG6, bo.getG6()); + lqw.eq(bo.getV13() != null, DeviceSpec100r::getV13, bo.getV13()); + lqw.eq(bo.getV14() != null, DeviceSpec100r::getV14, bo.getV14()); + lqw.eq(bo.getG7() != null, DeviceSpec100r::getG7, bo.getG7()); + lqw.eq(bo.getV15() != null, DeviceSpec100r::getV15, bo.getV15()); + lqw.eq(bo.getV41() != null, DeviceSpec100r::getV41, bo.getV41()); + lqw.eq(bo.getV42() != null, DeviceSpec100r::getV42, bo.getV42()); + lqw.eq(bo.getV43() != null, DeviceSpec100r::getV43, bo.getV43()); + lqw.eq(bo.getV44() != null, DeviceSpec100r::getV44, bo.getV44()); + lqw.eq(bo.getV45() != null, DeviceSpec100r::getV45, bo.getV45()); + lqw.eq(bo.getV46() != null, DeviceSpec100r::getV46, bo.getV46()); + lqw.eq(bo.getV47() != null, DeviceSpec100r::getV47, bo.getV47()); + lqw.eq(bo.getV48() != null, DeviceSpec100r::getV48, bo.getV48()); + lqw.eq(bo.getV49() != null, DeviceSpec100r::getV49, bo.getV49()); + lqw.eq(bo.getV50() != null, DeviceSpec100r::getV50, bo.getV50()); + lqw.eq(bo.getV51() != null, DeviceSpec100r::getV51, bo.getV51()); + lqw.eq(bo.getV52() != null, DeviceSpec100r::getV52, bo.getV52()); + return lqw; + } + + /** + * 新增100R设备规格参数 + */ + @Override + public Boolean insertByBo(DeviceSpec100rBo bo) { + DeviceSpec100r add = BeanUtil.toBean(bo, DeviceSpec100r.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改100R设备规格参数 + */ + @Override + public Boolean updateByBo(DeviceSpec100rBo bo) { + DeviceSpec100r update = BeanUtil.toBean(bo, DeviceSpec100r.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(DeviceSpec100r entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除100R设备规格参数 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec125rServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec125rServiceImpl.java new file mode 100644 index 0000000..9cefbd8 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec125rServiceImpl.java @@ -0,0 +1,150 @@ +package com.ruoyi.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.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 com.ruoyi.common.utils.StringUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import com.ruoyi.system.domain.bo.DeviceSpec125rBo; +import com.ruoyi.system.domain.vo.DeviceSpec125rVo; +import com.ruoyi.system.domain.DeviceSpec125r; +import com.ruoyi.system.mapper.DeviceSpec125rMapper; +import com.ruoyi.system.service.IDeviceSpec125rService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 125R设备规格参数Service业务层处理 + * + * @author ruoyi + * @date 2025-12-06 + */ +@RequiredArgsConstructor +@Service +public class DeviceSpec125rServiceImpl implements IDeviceSpec125rService { + + private final DeviceSpec125rMapper baseMapper; + + /** + * 查询125R设备规格参数 + */ + @Override + public DeviceSpec125rVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 查询125R设备规格参数列表 + */ + @Override + public TableDataInfo queryPageList(DeviceSpec125rBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询125R设备规格参数列表 + */ + @Override + public List queryList(DeviceSpec125rBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(DeviceSpec125rBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getTravelLength()), DeviceSpec125r::getTravelLength, bo.getTravelLength()); + lqw.eq(StringUtils.isNotBlank(bo.getItemType()), DeviceSpec125r::getItemType, bo.getItemType()); + lqw.eq(StringUtils.isNotBlank(bo.getAxialType()), DeviceSpec125r::getAxialType, bo.getAxialType()); + lqw.eq(StringUtils.isNotBlank(bo.getBoxType()), DeviceSpec125r::getBoxType, bo.getBoxType()); + lqw.eq(bo.getV1() != null, DeviceSpec125r::getV1, bo.getV1()); + lqw.eq(bo.getV2() != null, DeviceSpec125r::getV2, bo.getV2()); + lqw.eq(bo.getV3() != null, DeviceSpec125r::getV3, bo.getV3()); + lqw.eq(bo.getV4() != null, DeviceSpec125r::getV4, bo.getV4()); + lqw.eq(bo.getV5() != null, DeviceSpec125r::getV5, bo.getV5()); + lqw.eq(bo.getV6() != null, DeviceSpec125r::getV6, bo.getV6()); + lqw.eq(bo.getV7() != null, DeviceSpec125r::getV7, bo.getV7()); + lqw.eq(bo.getV8() != null, DeviceSpec125r::getV8, bo.getV8()); + lqw.eq(bo.getG1() != null, DeviceSpec125r::getG1, bo.getG1()); + lqw.eq(bo.getV9() != null, DeviceSpec125r::getV9, bo.getV9()); + lqw.eq(bo.getG2() != null, DeviceSpec125r::getG2, bo.getG2()); + lqw.eq(bo.getG3() != null, DeviceSpec125r::getG3, bo.getG3()); + lqw.eq(bo.getG4() != null, DeviceSpec125r::getG4, bo.getG4()); + lqw.eq(bo.getV10() != null, DeviceSpec125r::getV10, bo.getV10()); + lqw.eq(bo.getG5() != null, DeviceSpec125r::getG5, bo.getG5()); + lqw.eq(bo.getV11() != null, DeviceSpec125r::getV11, bo.getV11()); + lqw.eq(bo.getV12() != null, DeviceSpec125r::getV12, bo.getV12()); + lqw.eq(bo.getG6() != null, DeviceSpec125r::getG6, bo.getG6()); + lqw.eq(bo.getV13() != null, DeviceSpec125r::getV13, bo.getV13()); + lqw.eq(bo.getV14() != null, DeviceSpec125r::getV14, bo.getV14()); + lqw.eq(bo.getG7() != null, DeviceSpec125r::getG7, bo.getG7()); + lqw.eq(bo.getV15() != null, DeviceSpec125r::getV15, bo.getV15()); + lqw.eq(bo.getV16() != null, DeviceSpec125r::getV16, bo.getV16()); + lqw.eq(bo.getV17() != null, DeviceSpec125r::getV17, bo.getV17()); + lqw.eq(bo.getV18() != null, DeviceSpec125r::getV18, bo.getV18()); + lqw.eq(bo.getV19() != null, DeviceSpec125r::getV19, bo.getV19()); + lqw.eq(bo.getV20() != null, DeviceSpec125r::getV20, bo.getV20()); + lqw.eq(bo.getV41() != null, DeviceSpec125r::getV41, bo.getV41()); + lqw.eq(bo.getV42() != null, DeviceSpec125r::getV42, bo.getV42()); + lqw.eq(bo.getV43() != null, DeviceSpec125r::getV43, bo.getV43()); + lqw.eq(bo.getV44() != null, DeviceSpec125r::getV44, bo.getV44()); + lqw.eq(bo.getV45() != null, DeviceSpec125r::getV45, bo.getV45()); + lqw.eq(bo.getV46() != null, DeviceSpec125r::getV46, bo.getV46()); + lqw.eq(bo.getV47() != null, DeviceSpec125r::getV47, bo.getV47()); + lqw.eq(bo.getV48() != null, DeviceSpec125r::getV48, bo.getV48()); + lqw.eq(bo.getV49() != null, DeviceSpec125r::getV49, bo.getV49()); + lqw.eq(bo.getV50() != null, DeviceSpec125r::getV50, bo.getV50()); + lqw.eq(bo.getV51() != null, DeviceSpec125r::getV51, bo.getV51()); + return lqw; + } + + /** + * 新增125R设备规格参数 + */ + @Override + public Boolean insertByBo(DeviceSpec125rBo bo) { + DeviceSpec125r add = BeanUtil.toBean(bo, DeviceSpec125r.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改125R设备规格参数 + */ + @Override + public Boolean updateByBo(DeviceSpec125rBo bo) { + DeviceSpec125r update = BeanUtil.toBean(bo, DeviceSpec125r.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(DeviceSpec125r entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除125R设备规格参数 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec150rServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec150rServiceImpl.java new file mode 100644 index 0000000..679707c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec150rServiceImpl.java @@ -0,0 +1,154 @@ +package com.ruoyi.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.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 com.ruoyi.common.utils.StringUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import com.ruoyi.system.domain.bo.DeviceSpec150rBo; +import com.ruoyi.system.domain.vo.DeviceSpec150rVo; +import com.ruoyi.system.domain.DeviceSpec150r; +import com.ruoyi.system.mapper.DeviceSpec150rMapper; +import com.ruoyi.system.service.IDeviceSpec150rService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 150R设备规格参数Service业务层处理 + * + * @author ruoyi + * @date 2025-12-06 + */ +@RequiredArgsConstructor +@Service +public class DeviceSpec150rServiceImpl implements IDeviceSpec150rService { + + private final DeviceSpec150rMapper baseMapper; + + /** + * 查询150R设备规格参数 + */ + @Override + public DeviceSpec150rVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 查询150R设备规格参数列表 + */ + @Override + public TableDataInfo queryPageList(DeviceSpec150rBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询150R设备规格参数列表 + */ + @Override + public List queryList(DeviceSpec150rBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(DeviceSpec150rBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getTravelLength()), DeviceSpec150r::getTravelLength, bo.getTravelLength()); + lqw.eq(StringUtils.isNotBlank(bo.getItemType()), DeviceSpec150r::getItemType, bo.getItemType()); + lqw.eq(StringUtils.isNotBlank(bo.getAxialType()), DeviceSpec150r::getAxialType, bo.getAxialType()); + lqw.eq(StringUtils.isNotBlank(bo.getBoxType()), DeviceSpec150r::getBoxType, bo.getBoxType()); + lqw.eq(bo.getV1() != null, DeviceSpec150r::getV1, bo.getV1()); + lqw.eq(bo.getV2() != null, DeviceSpec150r::getV2, bo.getV2()); + lqw.eq(bo.getV3() != null, DeviceSpec150r::getV3, bo.getV3()); + lqw.eq(bo.getV4() != null, DeviceSpec150r::getV4, bo.getV4()); + lqw.eq(bo.getV21() != null, DeviceSpec150r::getV21, bo.getV21()); + lqw.eq(bo.getV22() != null, DeviceSpec150r::getV22, bo.getV22()); + lqw.eq(bo.getV23() != null, DeviceSpec150r::getV23, bo.getV23()); + lqw.eq(bo.getV24() != null, DeviceSpec150r::getV24, bo.getV24()); + lqw.eq(bo.getV5() != null, DeviceSpec150r::getV5, bo.getV5()); + lqw.eq(bo.getV6() != null, DeviceSpec150r::getV6, bo.getV6()); + lqw.eq(bo.getV7() != null, DeviceSpec150r::getV7, bo.getV7()); + lqw.eq(bo.getV8() != null, DeviceSpec150r::getV8, bo.getV8()); + lqw.eq(bo.getG1() != null, DeviceSpec150r::getG1, bo.getG1()); + lqw.eq(bo.getV9() != null, DeviceSpec150r::getV9, bo.getV9()); + lqw.eq(bo.getG2() != null, DeviceSpec150r::getG2, bo.getG2()); + lqw.eq(bo.getG3() != null, DeviceSpec150r::getG3, bo.getG3()); + lqw.eq(bo.getG4() != null, DeviceSpec150r::getG4, bo.getG4()); + lqw.eq(bo.getV10() != null, DeviceSpec150r::getV10, bo.getV10()); + lqw.eq(bo.getG5() != null, DeviceSpec150r::getG5, bo.getG5()); + lqw.eq(bo.getV11() != null, DeviceSpec150r::getV11, bo.getV11()); + lqw.eq(bo.getV12() != null, DeviceSpec150r::getV12, bo.getV12()); + lqw.eq(bo.getG6() != null, DeviceSpec150r::getG6, bo.getG6()); + lqw.eq(bo.getV13() != null, DeviceSpec150r::getV13, bo.getV13()); + lqw.eq(bo.getV14() != null, DeviceSpec150r::getV14, bo.getV14()); + lqw.eq(bo.getG7() != null, DeviceSpec150r::getG7, bo.getG7()); + lqw.eq(bo.getV15() != null, DeviceSpec150r::getV15, bo.getV15()); + lqw.eq(bo.getV16() != null, DeviceSpec150r::getV16, bo.getV16()); + lqw.eq(bo.getV17() != null, DeviceSpec150r::getV17, bo.getV17()); + lqw.eq(bo.getV18() != null, DeviceSpec150r::getV18, bo.getV18()); + lqw.eq(bo.getV19() != null, DeviceSpec150r::getV19, bo.getV19()); + lqw.eq(bo.getV20() != null, DeviceSpec150r::getV20, bo.getV20()); + lqw.eq(bo.getV41() != null, DeviceSpec150r::getV41, bo.getV41()); + lqw.eq(bo.getV42() != null, DeviceSpec150r::getV42, bo.getV42()); + lqw.eq(bo.getV43() != null, DeviceSpec150r::getV43, bo.getV43()); + lqw.eq(bo.getV44() != null, DeviceSpec150r::getV44, bo.getV44()); + lqw.eq(bo.getV45() != null, DeviceSpec150r::getV45, bo.getV45()); + lqw.eq(bo.getV46() != null, DeviceSpec150r::getV46, bo.getV46()); + lqw.eq(bo.getV47() != null, DeviceSpec150r::getV47, bo.getV47()); + lqw.eq(bo.getV48() != null, DeviceSpec150r::getV48, bo.getV48()); + lqw.eq(bo.getV49() != null, DeviceSpec150r::getV49, bo.getV49()); + lqw.eq(bo.getV50() != null, DeviceSpec150r::getV50, bo.getV50()); + lqw.eq(bo.getV51() != null, DeviceSpec150r::getV51, bo.getV51()); + return lqw; + } + + /** + * 新增150R设备规格参数 + */ + @Override + public Boolean insertByBo(DeviceSpec150rBo bo) { + DeviceSpec150r add = BeanUtil.toBean(bo, DeviceSpec150r.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改150R设备规格参数 + */ + @Override + public Boolean updateByBo(DeviceSpec150rBo bo) { + DeviceSpec150r update = BeanUtil.toBean(bo, DeviceSpec150r.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(DeviceSpec150r entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除150R设备规格参数 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec30dServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec30dServiceImpl.java new file mode 100644 index 0000000..1cace98 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec30dServiceImpl.java @@ -0,0 +1,133 @@ +package com.ruoyi.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.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 com.ruoyi.common.utils.StringUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import com.ruoyi.system.domain.bo.DeviceSpec30dBo; +import com.ruoyi.system.domain.vo.DeviceSpec30dVo; +import com.ruoyi.system.domain.DeviceSpec30d; +import com.ruoyi.system.mapper.DeviceSpec30dMapper; +import com.ruoyi.system.service.IDeviceSpec30dService; +import com.ruoyi.common.utils.StringUtils; +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * device_spec_30D Service业务层处理 + * + * @author ruoyi + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class DeviceSpec30dServiceImpl implements IDeviceSpec30dService { + + private final DeviceSpec30dMapper baseMapper; + + /** + * 查询device_spec_30D + */ + @Override + public DeviceSpec30dVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 查询device_spec_30D 列表 + */ + @Override + public TableDataInfo queryPageList(DeviceSpec30dBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询device_spec_30D 列表 + */ + @Override + public List queryList(DeviceSpec30dBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(DeviceSpec30dBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getTravelLength()), DeviceSpec30d::getTravelLength, bo.getTravelLength()); + lqw.eq(StringUtils.isNotBlank(bo.getItemType()), DeviceSpec30d::getItemType, bo.getItemType()); + lqw.eq(StringUtils.isNotBlank(bo.getAxialType()), DeviceSpec30d::getAxialType, bo.getAxialType()); + lqw.eq(StringUtils.isNotBlank(bo.getBoxType()), DeviceSpec30d::getBoxType, bo.getBoxType()); + lqw.eq(bo.getV1() != null, DeviceSpec30d::getV1, bo.getV1()); + lqw.eq(bo.getV2() != null, DeviceSpec30d::getV2, bo.getV2()); + lqw.eq(bo.getV3() != null, DeviceSpec30d::getV3, bo.getV3()); + lqw.eq(bo.getV5() != null, DeviceSpec30d::getV5, bo.getV5()); + lqw.eq(bo.getV6() != null, DeviceSpec30d::getV6, bo.getV6()); + lqw.eq(bo.getV8() != null, DeviceSpec30d::getV8, bo.getV8()); + lqw.eq(bo.getG1() != null, DeviceSpec30d::getG1, bo.getG1()); + lqw.eq(bo.getV10() != null, DeviceSpec30d::getV10, bo.getV10()); + lqw.eq(bo.getG5() != null, DeviceSpec30d::getG5, bo.getG5()); + lqw.eq(bo.getG8() != null, DeviceSpec30d::getG8, bo.getG8()); + lqw.eq(bo.getV12() != null, DeviceSpec30d::getV12, bo.getV12()); + lqw.eq(bo.getG6() != null, DeviceSpec30d::getG6, bo.getG6()); + lqw.eq(bo.getG9() != null, DeviceSpec30d::getG9, bo.getG9()); + lqw.eq(bo.getV41() != null, DeviceSpec30d::getV41, bo.getV41()); + lqw.eq(bo.getV42() != null, DeviceSpec30d::getV42, bo.getV42()); + lqw.eq(bo.getV43() != null, DeviceSpec30d::getV43, bo.getV43()); + lqw.eq(bo.getV44() != null, DeviceSpec30d::getV44, bo.getV44()); + lqw.eq(bo.getV45() != null, DeviceSpec30d::getV45, bo.getV45()); + lqw.eq(bo.getV46() != null, DeviceSpec30d::getV46, bo.getV46()); + lqw.eq(bo.getV47() != null, DeviceSpec30d::getV47, bo.getV47()); + lqw.eq(bo.getV48() != null, DeviceSpec30d::getV48, bo.getV48()); + return lqw; + } + + /** + * 新增device_spec_30D + */ + @Override + public Boolean insertByBo(DeviceSpec30dBo bo) { + DeviceSpec30d add = BeanUtil.toBean(bo, DeviceSpec30d.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改device_spec_30D + */ + @Override + public Boolean updateByBo(DeviceSpec30dBo bo) { + DeviceSpec30d update = BeanUtil.toBean(bo, DeviceSpec30d.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(DeviceSpec30d entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除device_spec_30D + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec30sServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec30sServiceImpl.java new file mode 100644 index 0000000..9676f1c --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec30sServiceImpl.java @@ -0,0 +1,127 @@ +package com.ruoyi.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.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 com.ruoyi.system.domain.bo.DeviceSpec30sBo; +import com.ruoyi.system.domain.vo.DeviceSpec30sVo; +import com.ruoyi.system.domain.DeviceSpec30s; +import com.ruoyi.system.mapper.DeviceSpec30sMapper; +import com.ruoyi.system.service.IDeviceSpec30sService; +import com.ruoyi.common.utils.StringUtils; +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 30S设备规格参数Service业务层处理 + * + * @author ruoyi + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class DeviceSpec30sServiceImpl implements IDeviceSpec30sService { + + private final DeviceSpec30sMapper baseMapper; + + /** + * 查询30S设备规格参数 + */ + @Override + public DeviceSpec30sVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 查询30S设备规格参数列表 + */ + @Override + public TableDataInfo queryPageList(DeviceSpec30sBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询30S设备规格参数列表 + */ + @Override + public List queryList(DeviceSpec30sBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(DeviceSpec30sBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getTravelLength()), DeviceSpec30s::getTravelLength, bo.getTravelLength()); + lqw.eq(StringUtils.isNotBlank(bo.getItemType()), DeviceSpec30s::getItemType, bo.getItemType()); + lqw.eq(StringUtils.isNotBlank(bo.getAxialType()), DeviceSpec30s::getAxialType, bo.getAxialType()); + lqw.eq(StringUtils.isNotBlank(bo.getBoxType()), DeviceSpec30s::getBoxType, bo.getBoxType()); + lqw.eq(bo.getV1() != null, DeviceSpec30s::getV1, bo.getV1()); + lqw.eq(bo.getV2() != null, DeviceSpec30s::getV2, bo.getV2()); + lqw.eq(bo.getV3() != null, DeviceSpec30s::getV3, bo.getV3()); + lqw.eq(bo.getV5() != null, DeviceSpec30s::getV5, bo.getV5()); + lqw.eq(bo.getV8() != null, DeviceSpec30s::getV8, bo.getV8()); + lqw.eq(bo.getG1() != null, DeviceSpec30s::getG1, bo.getG1()); + lqw.eq(bo.getV10() != null, DeviceSpec30s::getV10, bo.getV10()); + lqw.eq(bo.getG5() != null, DeviceSpec30s::getG5, bo.getG5()); + lqw.eq(bo.getV12() != null, DeviceSpec30s::getV12, bo.getV12()); + lqw.eq(bo.getG6() != null, DeviceSpec30s::getG6, bo.getG6()); + lqw.eq(bo.getV41() != null, DeviceSpec30s::getV41, bo.getV41()); + lqw.eq(bo.getV42() != null, DeviceSpec30s::getV42, bo.getV42()); + lqw.eq(bo.getV43() != null, DeviceSpec30s::getV43, bo.getV43()); + lqw.eq(bo.getV44() != null, DeviceSpec30s::getV44, bo.getV44()); + lqw.eq(bo.getV45() != null, DeviceSpec30s::getV45, bo.getV45()); + lqw.eq(bo.getV46() != null, DeviceSpec30s::getV46, bo.getV46()); + return lqw; + } + + /** + * 新增30S设备规格参数 + */ + @Override + public Boolean insertByBo(DeviceSpec30sBo bo) { + DeviceSpec30s add = BeanUtil.toBean(bo, DeviceSpec30s.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改30S设备规格参数 + */ + @Override + public Boolean updateByBo(DeviceSpec30sBo bo) { + DeviceSpec30s update = BeanUtil.toBean(bo, DeviceSpec30s.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(DeviceSpec30s entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除30S设备规格参数 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec40rServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec40rServiceImpl.java new file mode 100644 index 0000000..cd98c71 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec40rServiceImpl.java @@ -0,0 +1,140 @@ +package com.ruoyi.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.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 com.ruoyi.common.utils.StringUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import com.ruoyi.system.domain.bo.DeviceSpec40rBo; +import com.ruoyi.system.domain.vo.DeviceSpec40rVo; +import com.ruoyi.system.domain.DeviceSpec40r; +import com.ruoyi.system.mapper.DeviceSpec40rMapper; +import com.ruoyi.system.service.IDeviceSpec40rService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 40R设备规格参数Service业务层处理 + * + * @author ruoyi + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class DeviceSpec40rServiceImpl implements IDeviceSpec40rService { + + private final DeviceSpec40rMapper baseMapper; + + /** + * 查询40R设备规格参数 + */ + @Override + public DeviceSpec40rVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 查询40R设备规格参数列表 + */ + @Override + public TableDataInfo queryPageList(DeviceSpec40rBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询40R设备规格参数列表 + */ + @Override + public List queryList(DeviceSpec40rBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(DeviceSpec40rBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getTravelLength()), DeviceSpec40r::getTravelLength, bo.getTravelLength()); + lqw.eq(StringUtils.isNotBlank(bo.getItemType()), DeviceSpec40r::getItemType, bo.getItemType()); + lqw.eq(StringUtils.isNotBlank(bo.getAxialType()), DeviceSpec40r::getAxialType, bo.getAxialType()); + lqw.eq(StringUtils.isNotBlank(bo.getBoxType()), DeviceSpec40r::getBoxType, bo.getBoxType()); + lqw.eq(bo.getV1() != null, DeviceSpec40r::getV1, bo.getV1()); + lqw.eq(bo.getV2() != null, DeviceSpec40r::getV2, bo.getV2()); + lqw.eq(bo.getV3() != null, DeviceSpec40r::getV3, bo.getV3()); + lqw.eq(bo.getV5() != null, DeviceSpec40r::getV5, bo.getV5()); + lqw.eq(bo.getV6() != null, DeviceSpec40r::getV6, bo.getV6()); + lqw.eq(bo.getV8() != null, DeviceSpec40r::getV8, bo.getV8()); + lqw.eq(bo.getG1() != null, DeviceSpec40r::getG1, bo.getG1()); + lqw.eq(bo.getV9() != null, DeviceSpec40r::getV9, bo.getV9()); + lqw.eq(bo.getG2() != null, DeviceSpec40r::getG2, bo.getG2()); + lqw.eq(bo.getV10() != null, DeviceSpec40r::getV10, bo.getV10()); + lqw.eq(bo.getG5() != null, DeviceSpec40r::getG5, bo.getG5()); + lqw.eq(bo.getV11() != null, DeviceSpec40r::getV11, bo.getV11()); + lqw.eq(bo.getV12() != null, DeviceSpec40r::getV12, bo.getV12()); + lqw.eq(bo.getG6() != null, DeviceSpec40r::getG6, bo.getG6()); + lqw.eq(bo.getV13() != null, DeviceSpec40r::getV13, bo.getV13()); + lqw.eq(bo.getV14() != null, DeviceSpec40r::getV14, bo.getV14()); + lqw.eq(bo.getG7() != null, DeviceSpec40r::getG7, bo.getG7()); + lqw.eq(bo.getV15() != null, DeviceSpec40r::getV15, bo.getV15()); + lqw.eq(bo.getV41() != null, DeviceSpec40r::getV41, bo.getV41()); + lqw.eq(bo.getV42() != null, DeviceSpec40r::getV42, bo.getV42()); + lqw.eq(bo.getV43() != null, DeviceSpec40r::getV43, bo.getV43()); + lqw.eq(bo.getV44() != null, DeviceSpec40r::getV44, bo.getV44()); + lqw.eq(bo.getV45() != null, DeviceSpec40r::getV45, bo.getV45()); + lqw.eq(bo.getV46() != null, DeviceSpec40r::getV46, bo.getV46()); + lqw.eq(bo.getV47() != null, DeviceSpec40r::getV47, bo.getV47()); + lqw.eq(bo.getV48() != null, DeviceSpec40r::getV48, bo.getV48()); + lqw.eq(bo.getV49() != null, DeviceSpec40r::getV49, bo.getV49()); + lqw.eq(bo.getV50() != null, DeviceSpec40r::getV50, bo.getV50()); + return lqw; + } + + /** + * 新增40R设备规格参数 + */ + @Override + public Boolean insertByBo(DeviceSpec40rBo bo) { + DeviceSpec40r add = BeanUtil.toBean(bo, DeviceSpec40r.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改40R设备规格参数 + */ + @Override + public Boolean updateByBo(DeviceSpec40rBo bo) { + DeviceSpec40r update = BeanUtil.toBean(bo, DeviceSpec40r.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(DeviceSpec40r entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除40R设备规格参数 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec40sServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec40sServiceImpl.java new file mode 100644 index 0000000..8818057 --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec40sServiceImpl.java @@ -0,0 +1,143 @@ +package com.ruoyi.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.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 com.ruoyi.common.utils.StringUtils; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import com.ruoyi.system.domain.bo.DeviceSpec40sBo; +import com.ruoyi.system.domain.vo.DeviceSpec40sVo; +import com.ruoyi.system.domain.DeviceSpec40s; +import com.ruoyi.system.mapper.DeviceSpec40sMapper; +import com.ruoyi.system.service.IDeviceSpec40sService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 40S设备规格参数Service业务层处理 + * + * @author ruoyi + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class DeviceSpec40sServiceImpl implements IDeviceSpec40sService { + + private final DeviceSpec40sMapper baseMapper; + + /** + * 查询40S设备规格参数 + */ + @Override + public DeviceSpec40sVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 查询40S设备规格参数列表 + */ + @Override + public TableDataInfo queryPageList(DeviceSpec40sBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询40S设备规格参数列表 + */ + @Override + public List queryList(DeviceSpec40sBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(DeviceSpec40sBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getTravelLength()), DeviceSpec40s::getTravelLength, bo.getTravelLength()); + lqw.eq(StringUtils.isNotBlank(bo.getItemType()), DeviceSpec40s::getItemType, bo.getItemType()); + lqw.eq(StringUtils.isNotBlank(bo.getAxialType()), DeviceSpec40s::getAxialType, bo.getAxialType()); + lqw.eq(StringUtils.isNotBlank(bo.getBoxType()), DeviceSpec40s::getBoxType, bo.getBoxType()); + lqw.eq(bo.getV1() != null, DeviceSpec40s::getV1, bo.getV1()); + lqw.eq(bo.getV2() != null, DeviceSpec40s::getV2, bo.getV2()); + lqw.eq(bo.getV22() != null, DeviceSpec40s::getV22, bo.getV22()); + lqw.eq(bo.getV3() != null, DeviceSpec40s::getV3, bo.getV3()); + lqw.eq(bo.getV23() != null, DeviceSpec40s::getV23, bo.getV23()); + lqw.eq(bo.getV5() != null, DeviceSpec40s::getV5, bo.getV5()); + lqw.eq(bo.getV6() != null, DeviceSpec40s::getV6, bo.getV6()); + lqw.eq(bo.getV8() != null, DeviceSpec40s::getV8, bo.getV8()); + lqw.eq(bo.getG1() != null, DeviceSpec40s::getG1, bo.getG1()); + lqw.eq(bo.getV9() != null, DeviceSpec40s::getV9, bo.getV9()); + lqw.eq(bo.getG2() != null, DeviceSpec40s::getG2, bo.getG2()); + lqw.eq(bo.getV10() != null, DeviceSpec40s::getV10, bo.getV10()); + lqw.eq(bo.getG5() != null, DeviceSpec40s::getG5, bo.getG5()); + lqw.eq(bo.getV11() != null, DeviceSpec40s::getV11, bo.getV11()); + lqw.eq(bo.getV12() != null, DeviceSpec40s::getV12, bo.getV12()); + lqw.eq(bo.getG6() != null, DeviceSpec40s::getG6, bo.getG6()); + lqw.eq(bo.getV13() != null, DeviceSpec40s::getV13, bo.getV13()); + lqw.eq(bo.getV14() != null, DeviceSpec40s::getV14, bo.getV14()); + lqw.eq(bo.getG7() != null, DeviceSpec40s::getG7, bo.getG7()); + lqw.eq(bo.getV15() != null, DeviceSpec40s::getV15, bo.getV15()); + lqw.eq(bo.getV41() != null, DeviceSpec40s::getV41, bo.getV41()); + lqw.eq(bo.getV42() != null, DeviceSpec40s::getV42, bo.getV42()); + lqw.eq(bo.getV43() != null, DeviceSpec40s::getV43, bo.getV43()); + lqw.eq(bo.getV44() != null, DeviceSpec40s::getV44, bo.getV44()); + lqw.eq(bo.getV45() != null, DeviceSpec40s::getV45, bo.getV45()); + lqw.eq(bo.getV46() != null, DeviceSpec40s::getV46, bo.getV46()); + lqw.eq(bo.getV47() != null, DeviceSpec40s::getV47, bo.getV47()); + lqw.eq(bo.getV48() != null, DeviceSpec40s::getV48, bo.getV48()); + lqw.eq(bo.getV49() != null, DeviceSpec40s::getV49, bo.getV49()); + lqw.eq(bo.getV50() != null, DeviceSpec40s::getV50, bo.getV50()); + lqw.eq(bo.getV51() != null, DeviceSpec40s::getV51, bo.getV51()); + return lqw; + } + + /** + * 新增40S设备规格参数 + */ + @Override + public Boolean insertByBo(DeviceSpec40sBo bo) { + DeviceSpec40s add = BeanUtil.toBean(bo, DeviceSpec40s.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改40S设备规格参数 + */ + @Override + public Boolean updateByBo(DeviceSpec40sBo bo) { + DeviceSpec40s update = BeanUtil.toBean(bo, DeviceSpec40s.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(DeviceSpec40s entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除40S设备规格参数 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec60rServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec60rServiceImpl.java new file mode 100644 index 0000000..1be9b5d --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec60rServiceImpl.java @@ -0,0 +1,139 @@ +package com.ruoyi.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.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 com.ruoyi.system.domain.bo.DeviceSpec60rBo; +import com.ruoyi.system.domain.vo.DeviceSpec60rVo; +import com.ruoyi.system.domain.DeviceSpec60r; +import com.ruoyi.system.mapper.DeviceSpec60rMapper; +import com.ruoyi.system.service.IDeviceSpec60rService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; +import com.ruoyi.common.utils.StringUtils; +/** + * 60R设备规格参数Service业务层处理 + * + * @author ruoyi + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class DeviceSpec60rServiceImpl implements IDeviceSpec60rService { + + private final DeviceSpec60rMapper baseMapper; + + /** + * 查询60R设备规格参数 + */ + @Override + public DeviceSpec60rVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 查询60R设备规格参数列表 + */ + @Override + public TableDataInfo queryPageList(DeviceSpec60rBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询60R设备规格参数列表 + */ + @Override + public List queryList(DeviceSpec60rBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(DeviceSpec60rBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getTravelLength()), DeviceSpec60r::getTravelLength, bo.getTravelLength()); + lqw.eq(StringUtils.isNotBlank(bo.getItemType()), DeviceSpec60r::getItemType, bo.getItemType()); + lqw.eq(StringUtils.isNotBlank(bo.getAxialType()), DeviceSpec60r::getAxialType, bo.getAxialType()); + lqw.eq(StringUtils.isNotBlank(bo.getBoxType()), DeviceSpec60r::getBoxType, bo.getBoxType()); + lqw.eq(bo.getV1() != null, DeviceSpec60r::getV1, bo.getV1()); + lqw.eq(bo.getV2() != null, DeviceSpec60r::getV2, bo.getV2()); + lqw.eq(bo.getV3() != null, DeviceSpec60r::getV3, bo.getV3()); + lqw.eq(bo.getV5() != null, DeviceSpec60r::getV5, bo.getV5()); + lqw.eq(bo.getV6() != null, DeviceSpec60r::getV6, bo.getV6()); + lqw.eq(bo.getV8() != null, DeviceSpec60r::getV8, bo.getV8()); + lqw.eq(bo.getG1() != null, DeviceSpec60r::getG1, bo.getG1()); + lqw.eq(bo.getV9() != null, DeviceSpec60r::getV9, bo.getV9()); + lqw.eq(bo.getG2() != null, DeviceSpec60r::getG2, bo.getG2()); + lqw.eq(bo.getV10() != null, DeviceSpec60r::getV10, bo.getV10()); + lqw.eq(bo.getG5() != null, DeviceSpec60r::getG5, bo.getG5()); + lqw.eq(bo.getV11() != null, DeviceSpec60r::getV11, bo.getV11()); + lqw.eq(bo.getV12() != null, DeviceSpec60r::getV12, bo.getV12()); + lqw.eq(bo.getG6() != null, DeviceSpec60r::getG6, bo.getG6()); + lqw.eq(bo.getV13() != null, DeviceSpec60r::getV13, bo.getV13()); + lqw.eq(bo.getV14() != null, DeviceSpec60r::getV14, bo.getV14()); + lqw.eq(bo.getG7() != null, DeviceSpec60r::getG7, bo.getG7()); + lqw.eq(bo.getV15() != null, DeviceSpec60r::getV15, bo.getV15()); + lqw.eq(bo.getV41() != null, DeviceSpec60r::getV41, bo.getV41()); + lqw.eq(bo.getV42() != null, DeviceSpec60r::getV42, bo.getV42()); + lqw.eq(bo.getV43() != null, DeviceSpec60r::getV43, bo.getV43()); + lqw.eq(bo.getV44() != null, DeviceSpec60r::getV44, bo.getV44()); + lqw.eq(bo.getV45() != null, DeviceSpec60r::getV45, bo.getV45()); + lqw.eq(bo.getV46() != null, DeviceSpec60r::getV46, bo.getV46()); + lqw.eq(bo.getV47() != null, DeviceSpec60r::getV47, bo.getV47()); + lqw.eq(bo.getV48() != null, DeviceSpec60r::getV48, bo.getV48()); + lqw.eq(bo.getV49() != null, DeviceSpec60r::getV49, bo.getV49()); + lqw.eq(bo.getV50() != null, DeviceSpec60r::getV50, bo.getV50()); + return lqw; + } + + /** + * 新增60R设备规格参数 + */ + @Override + public Boolean insertByBo(DeviceSpec60rBo bo) { + DeviceSpec60r add = BeanUtil.toBean(bo, DeviceSpec60r.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改60R设备规格参数 + */ + @Override + public Boolean updateByBo(DeviceSpec60rBo bo) { + DeviceSpec60r update = BeanUtil.toBean(bo, DeviceSpec60r.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(DeviceSpec60r entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除60R设备规格参数 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec80rServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec80rServiceImpl.java new file mode 100644 index 0000000..903089a --- /dev/null +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DeviceSpec80rServiceImpl.java @@ -0,0 +1,140 @@ +package com.ruoyi.system.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.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 com.ruoyi.system.domain.bo.DeviceSpec80rBo; +import com.ruoyi.system.domain.vo.DeviceSpec80rVo; +import com.ruoyi.system.domain.DeviceSpec80r; +import com.ruoyi.system.mapper.DeviceSpec80rMapper; +import com.ruoyi.system.service.IDeviceSpec80rService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; +import com.ruoyi.common.utils.StringUtils; +/** + * 80R设备规格参数Service业务层处理 + * + * @author ruoyi + * @date 2025-12-03 + */ +@RequiredArgsConstructor +@Service +public class DeviceSpec80rServiceImpl implements IDeviceSpec80rService { + + private final DeviceSpec80rMapper baseMapper; + + /** + * 查询80R设备规格参数 + */ + @Override + public DeviceSpec80rVo queryById(Long id){ + return baseMapper.selectVoById(id); + } + + /** + * 查询80R设备规格参数列表 + */ + @Override + public TableDataInfo queryPageList(DeviceSpec80rBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询80R设备规格参数列表 + */ + @Override + public List queryList(DeviceSpec80rBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(DeviceSpec80rBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getTravelLength()), DeviceSpec80r::getTravelLength, bo.getTravelLength()); + lqw.eq(StringUtils.isNotBlank(bo.getItemType()), DeviceSpec80r::getItemType, bo.getItemType()); + lqw.eq(StringUtils.isNotBlank(bo.getAxialType()), DeviceSpec80r::getAxialType, bo.getAxialType()); + lqw.eq(StringUtils.isNotBlank(bo.getBoxType()), DeviceSpec80r::getBoxType, bo.getBoxType()); + lqw.eq(bo.getV1() != null, DeviceSpec80r::getV1, bo.getV1()); + lqw.eq(bo.getV2() != null, DeviceSpec80r::getV2, bo.getV2()); + lqw.eq(bo.getV3() != null, DeviceSpec80r::getV3, bo.getV3()); + lqw.eq(bo.getV5() != null, DeviceSpec80r::getV5, bo.getV5()); + lqw.eq(bo.getV6() != null, DeviceSpec80r::getV6, bo.getV6()); + lqw.eq(bo.getV8() != null, DeviceSpec80r::getV8, bo.getV8()); + lqw.eq(bo.getG1() != null, DeviceSpec80r::getG1, bo.getG1()); + lqw.eq(bo.getV9() != null, DeviceSpec80r::getV9, bo.getV9()); + lqw.eq(bo.getG2() != null, DeviceSpec80r::getG2, bo.getG2()); + lqw.eq(bo.getV10() != null, DeviceSpec80r::getV10, bo.getV10()); + lqw.eq(bo.getG5() != null, DeviceSpec80r::getG5, bo.getG5()); + lqw.eq(bo.getV11() != null, DeviceSpec80r::getV11, bo.getV11()); + lqw.eq(bo.getV12() != null, DeviceSpec80r::getV12, bo.getV12()); + lqw.eq(bo.getG6() != null, DeviceSpec80r::getG6, bo.getG6()); + lqw.eq(bo.getV13() != null, DeviceSpec80r::getV13, bo.getV13()); + lqw.eq(bo.getV14() != null, DeviceSpec80r::getV14, bo.getV14()); + lqw.eq(bo.getG7() != null, DeviceSpec80r::getG7, bo.getG7()); + lqw.eq(bo.getV15() != null, DeviceSpec80r::getV15, bo.getV15()); + lqw.eq(bo.getV41() != null, DeviceSpec80r::getV41, bo.getV41()); + lqw.eq(bo.getV42() != null, DeviceSpec80r::getV42, bo.getV42()); + lqw.eq(bo.getV43() != null, DeviceSpec80r::getV43, bo.getV43()); + lqw.eq(bo.getV44() != null, DeviceSpec80r::getV44, bo.getV44()); + lqw.eq(bo.getV45() != null, DeviceSpec80r::getV45, bo.getV45()); + lqw.eq(bo.getV46() != null, DeviceSpec80r::getV46, bo.getV46()); + lqw.eq(bo.getV47() != null, DeviceSpec80r::getV47, bo.getV47()); + lqw.eq(bo.getV48() != null, DeviceSpec80r::getV48, bo.getV48()); + lqw.eq(bo.getV49() != null, DeviceSpec80r::getV49, bo.getV49()); + lqw.eq(bo.getV50() != null, DeviceSpec80r::getV50, bo.getV50()); + lqw.eq(bo.getV51() != null, DeviceSpec80r::getV51, bo.getV51()); + return lqw; + } + + /** + * 新增80R设备规格参数 + */ + @Override + public Boolean insertByBo(DeviceSpec80rBo bo) { + DeviceSpec80r add = BeanUtil.toBean(bo, DeviceSpec80r.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setId(add.getId()); + } + return flag; + } + + /** + * 修改80R设备规格参数 + */ + @Override + public Boolean updateByBo(DeviceSpec80rBo bo) { + DeviceSpec80r update = BeanUtil.toBean(bo, DeviceSpec80r.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(DeviceSpec80r entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除80R设备规格参数 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EleMaterialsServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EleMaterialsServiceImpl.java index ebb23fa..11f6b11 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EleMaterialsServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/EleMaterialsServiceImpl.java @@ -198,41 +198,27 @@ public class EleMaterialsServiceImpl implements IEleMaterialsService { */ @Override public R> addToJindie() { - // 查询未处理的物料 - List newMaterials = baseMapper.selectList( - new LambdaQueryWrapper() - .eq(EleMaterials::getMaterialValue, "0") - ); - - if (newMaterials.isEmpty()) { + List newMaterials = baseMapper.selectList(new LambdaQueryWrapper() + .eq(EleMaterials::getMaterialValue, "0")); + if (newMaterials == null || newMaterials.isEmpty()) { log.warn("未找到符合条件的物料"); return R.fail("未找到需要处理的物料"); } - - // 处理物料并收集结果 - List results = newMaterials.stream() - .filter(material -> isValidMaterialValue(material.getMaterialValue())) - //推送金蝶 - .map(this::processMaterial) - .collect(Collectors.toList()); - - // 统计处理结果 - List successMaterials = results.stream() - .filter(ProcessResult::isSuccess) - .map(ProcessResult::getMaterial) - .collect(Collectors.toList()); - - List errorMessages = results.stream() - .filter(result -> !result.isSuccess()) - .map(ProcessResult::getErrorMessage) - .collect(Collectors.toList()); - - // 返回处理结果 + List successMaterials = new ArrayList<>(); + List errorMessages = new ArrayList<>(); + for (EleMaterials m : newMaterials) { + ProcessResult pr = processMaterial(m); + if (pr.success) { + successMaterials.add(pr.material); + } else { + String err = pr.errorMessage != null ? pr.errorMessage : "未知错误"; + errorMessages.add("ID=" + (m.getId() == null ? "" : m.getId()) + ":" + err); + } + } if (!successMaterials.isEmpty()) { return R.ok("成功推送 " + successMaterials.size() + " 条物料", successMaterials); - } else { - return R.fail("推送失败,错误信息: " + String.join(", ", errorMessages)); } + return R.fail("推送失败,错误信息: " + String.join(", ", errorMessages)); } /** @@ -342,7 +328,6 @@ public class EleMaterialsServiceImpl implements IEleMaterialsService { // 如果没有找到旧的物料编码,设置为默认编码 newCode = newMaterialsVo.getMaterialType() + "0000000001"; } - newMaterialsVo.setMaterialCode(newCode); log.info("生成新的物料编码======================>: {}", newCode); EleMaterials eleMaterials = BeanUtil.copyProperties(newMaterialsVo, EleMaterials.class); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProcessOrderProServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProcessOrderProServiceImpl.java index aef41c0..2f44f3d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProcessOrderProServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProcessOrderProServiceImpl.java @@ -1,13 +1,12 @@ package com.ruoyi.system.service.impl; import cn.hutool.core.bean.BeanUtil; -import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSONObject; + import java.math.BigDecimal; + import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; import com.lowagie.text.Rectangle; import com.lowagie.text.pdf.PdfReader; import com.ruoyi.common.constant.Constants; @@ -23,18 +22,17 @@ import com.ruoyi.common.utils.file.DeleteFile; import com.ruoyi.common.utils.file.PDFDocHelper; import com.ruoyi.system.domain.*; -import com.ruoyi.system.domain.bo.FigureSaveBo; import com.ruoyi.system.domain.dto.ProcessRouteExcelDTO; -import com.ruoyi.system.domain.dto.ProcessRoutePushResultDTO; import com.ruoyi.system.domain.dto.excuteDrawing.DataInfo; import com.ruoyi.system.domain.dto.excuteDrawing.ProductInfo; import com.ruoyi.system.domain.dto.excuteDrawing.PwProductionBill; +import com.ruoyi.system.domain.dto.excuteDrawing.RigidChainModelDTO; import com.ruoyi.system.domain.vo.OverdueProjectVo; import com.ruoyi.system.domain.vo.ProductionOrderVo; import com.ruoyi.system.listener.FileToZip; import com.ruoyi.system.listener.SmbUtils; -import com.ruoyi.system.mapper.FigureSaveMapper; -import com.ruoyi.system.mapper.ProcessRouteMapper; +import com.ruoyi.system.mapper.*; +import com.ruoyi.system.runner.JdUtil; import com.ruoyi.system.service.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -46,17 +44,19 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.system.domain.bo.ProcessOrderProBo; import com.ruoyi.system.domain.vo.ProcessOrderProVo; -import com.ruoyi.system.mapper.ProcessOrderProMapper; import com.ruoyi.common.utils.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.multipart.MultipartFile; -import com.fasterxml.jackson.core.type.TypeReference; +import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; + import java.io.*; import java.nio.file.Paths; import java.text.SimpleDateFormat; import java.time.ZoneId; import java.time.temporal.ChronoUnit; import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.ArrayList; import java.util.HashMap; @@ -77,20 +77,27 @@ public class ProcessOrderProServiceImpl implements IProcessOrderProService { private final IMaterialBomService materialBomService; private final ProcessOrderProMapper baseMapper; + private final DeviceSpec35rMapper deviceSpec35rMapper; + private final DeviceSpec30sMapper deviceSpec30sMapper; + private final DeviceSpec30dMapper deviceSpec30dMapper; + private final DeviceSpec40rMapper deviceSpec40rMapper; + private final DeviceSpec40sMapper deviceSpec40sMapper; + private final DeviceSpec60rMapper deviceSpec60rMapper; + private final DeviceSpec80rMapper deviceSpec80rMapper; + private final DeviceSpec100rMapper deviceSpec100rMapper; + + private final SafetyStockMapper safetyStockMapper; + @Autowired private ProcessRouteMapper processRouteMapper; @Autowired private IPcRigidChainService pcRigidChainService; private final IProcessRouteService iProcessRouteService; - private final IBomDetailsService iBomDetailsService; + private final IProductionOrderService iProductionOrderService; private static final String FILE_EXTENSION = ".xlsx"; // 目标文件后缀 private static final String LOCAL_DIR = "D:/file/"; private static final String ROBOTID = "8af8abea-3f21-4ca7-ad0a-5b7a2cf4d78e"; - // 企业ID - public static final String corpsecret = "ww3cd1a87df502cf3a"; - //应用ID - public static final String corpid = "1000002"; @Value("${app.drawing.base-path:F:}") private String basePath; @@ -100,11 +107,129 @@ public class ProcessOrderProServiceImpl implements IProcessOrderProService { @Value("${app.drawing.api-url:http://192.168.5.18:9000/generatedrawingscompatible}") private String apiUrl; - @Value("${app.drawing.api-url:http://192.168.5.18:9000/getstate}") - private String status; + @Value("${app.drawing.status-url:http://192.168.5.18:9000/getstate}") + private String statusUrl; @Autowired private IFigureSaveService iFigureSaveService; + private interface SpecStrategy { + ProductInfo build(FigureSave figureSave); + } + + private Map specStrategies; + + private void initStrategies() { + if (specStrategies != null) return; + specStrategies = new HashMap<>(); + specStrategies.put("35R", figureSave -> { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(DeviceSpec35r::getBoxType, figureSave.getBoxType()) + .eq(DeviceSpec35r::getTravelLength, Objects.toString(figureSave.getJdInventory(), "")) + .eq(DeviceSpec35r::getItemType, figureSave.getProductType()); + DeviceSpec35r device = deviceSpec35rMapper.selectOne(wrapper); + if (device == null) return null; + return buildProductInfo(figureSave, device); + }); + specStrategies.put("30S", figureSave -> { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(DeviceSpec30s::getBoxType, figureSave.getBoxType()) + .eq(DeviceSpec30s::getTravelLength, Objects.toString(figureSave.getJdInventory(), "")) + .eq(DeviceSpec30s::getItemType, figureSave.getProductType()); + DeviceSpec30s device = deviceSpec30sMapper.selectOne(wrapper); + if (device == null) return null; + return buildProductInfo30S(figureSave, device); + }); + specStrategies.put("30D", figureSave -> { + LambdaQueryWrapper w = new LambdaQueryWrapper<>(); + w.eq(DeviceSpec30d::getBoxType, figureSave.getBoxType()) + .eq(DeviceSpec30d::getTravelLength, Objects.toString(figureSave.getJdInventory(), "")) + .eq(DeviceSpec30d::getItemType, figureSave.getProductType()); + DeviceSpec30d d = deviceSpec30dMapper.selectOne(w); + if (d == null) return null; + return buildProductInfoGeneric(figureSave, d); + }); + specStrategies.put("40R", figureSave -> { + LambdaQueryWrapper w = new LambdaQueryWrapper<>(); + w.eq(DeviceSpec40r::getBoxType, figureSave.getBoxType()) + .eq(DeviceSpec40r::getTravelLength, Objects.toString(figureSave.getJdInventory(), "")) + .eq(DeviceSpec40r::getItemType, figureSave.getProductType()); + DeviceSpec40r d = deviceSpec40rMapper.selectOne(w); + if (d == null) return null; + return buildProductInfoGeneric(figureSave, d); + }); + specStrategies.put("40S", figureSave -> { + LambdaQueryWrapper w = new LambdaQueryWrapper<>(); + w.eq(DeviceSpec40s::getBoxType, figureSave.getBoxType()) + .eq(DeviceSpec40s::getTravelLength, Objects.toString(figureSave.getJdInventory(), "")) + .eq(DeviceSpec40s::getItemType, figureSave.getProductType()); + DeviceSpec40s d = deviceSpec40sMapper.selectOne(w); + if (d == null) return null; + return buildProductInfoGeneric(figureSave, d); + }); + specStrategies.put("60R", figureSave -> { + LambdaQueryWrapper w = new LambdaQueryWrapper<>(); + w.eq(DeviceSpec60r::getBoxType, figureSave.getBoxType()) + .eq(DeviceSpec60r::getTravelLength, Objects.toString(figureSave.getJdInventory(), "")) + .eq(DeviceSpec60r::getItemType, figureSave.getProductType()); + DeviceSpec60r d = deviceSpec60rMapper.selectOne(w); + if (d == null) return null; + return buildProductInfoGeneric(figureSave, d); + }); + specStrategies.put("80R", figureSave -> { + LambdaQueryWrapper w = new LambdaQueryWrapper<>(); + w.eq(DeviceSpec80r::getBoxType, figureSave.getBoxType()) + .eq(DeviceSpec80r::getTravelLength, Objects.toString(figureSave.getJdInventory(), "")) + .eq(DeviceSpec80r::getItemType, figureSave.getProductType()); + DeviceSpec80r d = deviceSpec80rMapper.selectOne(w); + if (d == null) return null; + return buildProductInfoGeneric(figureSave, d); + }); + specStrategies.put("100R", figureSave -> { + LambdaQueryWrapper w = new LambdaQueryWrapper<>(); + w.eq(DeviceSpec100r::getBoxType, figureSave.getBoxType()) + .eq(DeviceSpec100r::getTravelLength, Objects.toString(figureSave.getJdInventory(), "")) + .eq(DeviceSpec100r::getItemType, figureSave.getProductType()); + DeviceSpec100r d = deviceSpec100rMapper.selectOne(w); + if (d == null) return null; + return buildProductInfoGeneric(figureSave, d); + }); + + + } + + private SpecStrategy getStrategyForType(String productType) { + initStrategies(); + String key = Objects.toString(productType, "").toUpperCase().replace(" ", ""); + Map alias = new HashMap<>(); + alias.put("35R(W)", "35R"); + alias.put("35RX", "35R"); + alias.put("60R-FR", "60R"); + alias.put("60RX", "60R"); + alias.put("40P", "40S"); + alias.put("40RX", "40R"); + alias.put("40RT", "40R"); + alias.put("40R-FR", "40R"); + alias.put("80R-FR04", "80R"); + alias.put("80R-FR06", "80R"); + alias.put("80RX", "80R"); + + alias.put("100R-FR15", "100R"); + alias.put("100R-FR25", "100R"); + alias.put("100RX", "100R"); + alias.put("125R-FR", "125R"); + String mapped = alias.get(key); + if (mapped != null) { + SpecStrategy st = specStrategies.get(mapped); + if (st != null) return st; + } + for (String prefix : specStrategies.keySet()) { + if (key.startsWith(prefix)){ + return specStrategies.get(prefix); + } + } + return null; + } + /** * 查询项目令号 */ @@ -325,13 +450,47 @@ public class ProcessOrderProServiceImpl implements IProcessOrderProService { return baseMapper.selectList(qw); } - /** - * @param bo - */ + @Override - public void addProduct(FigureSaveBo bo, ProcessOrderProBo orderPro) { + public void addProduct(RigidChainModelDTO orderPro) { FigureSave figureSave = new FigureSave(); - BeanUtils.copyProperties(bo, figureSave); + // 解析图号格式: 类型/轴向-变量/层级(D|T|S) + // 仅当符合该格式时执行解析; 不符合时使用入参中的各字段直接生成名称 + String fig = orderPro.getFigureNumber(); + String type; + String axial; + String journey; + String box; + Pattern FIGURE_PATTERN = Pattern.compile("^(?[^/]+)/(?[^/-]+)-(?[^/]+)(?:/(?[DTS]))?$"); + Matcher m = fig != null ? FIGURE_PATTERN.matcher(fig) : null; + if (m != null && m.matches()) { + type = m.group("type"); + axial = m.group("axial"); + journey = m.group("journey"); + box = m.group("box"); + } else { + axial = Objects.toString(orderPro.getAxialType(), ""); + type = Objects.toString(orderPro.getProductType(),""); + journey = Objects.toString(orderPro.getJourney(), ""); + box = Objects.toString(orderPro.getBoxType(), ""); + } + + + figureSave.setProductionCode(orderPro.getProductionCode()); + figureSave.setFigureNum(Long.valueOf(orderPro.getFigureNum())); + figureSave.setDrawPath(orderPro.getDrawPath()); + figureSave.setPid(orderPro.getPid()); + figureSave.setId(orderPro.getId()); + figureSave.setProductType(type); + figureSave.setFigureNumber(fig); + figureSave.setFigureName(orderPro.getFigureName()); + figureSave.setAxialType(axial); + figureSave.setBoxType(box); + try { + figureSave.setJdInventory(Long.valueOf(journey)); + } catch (Exception ignore) { + } + //更新产品类型 figureSaveMapper.insert(figureSave); } @@ -419,17 +578,25 @@ public class ProcessOrderProServiceImpl implements IProcessOrderProService { } private List buildProductInfos(Long orderId) { - // 查询FigureSave - List productionOrders = figureSaveMapper.selectList(new LambdaQueryWrapper().eq(FigureSave::getPid, orderId)); - - // 批量查询PcRigidChain,避免N+1问题 - Set figureNumbers = productionOrders.stream().map(FigureSave::getFigureNumber).collect(Collectors.toSet()); - - Map rigidChainMap = pcRigidChainService.selectByTypeNames(figureNumbers).stream().collect(Collectors.toMap(PcRigidChain::getTypeName, Function.identity())); - - return productionOrders.stream().map(figureSave -> buildProductInfo(figureSave, rigidChainMap.get(figureSave.getFigureNumber()))).collect(Collectors.toList()); + List figureSaveList = figureSaveMapper.selectList(new LambdaQueryWrapper().eq(FigureSave::getPid, orderId)); + return figureSaveList.stream() + .map(fs -> { + SpecStrategy st = getStrategyForType(fs.getProductType()); + ProductInfo pi = st != null ? st.build(fs) : null; + return pi != null ? pi : buildProductInfoFallback(fs); + }) + .collect(Collectors.toList()); } - + //出图时如果不是标准的产品,而是零件图的话,变量会为空 + private ProductInfo buildProductInfoFallback(FigureSave figureSave) { + ProductInfo productInfo = new ProductInfo(); + productInfo.setAssembledrawing(figureSave.getFigureNumber()); + productInfo.setNumber(String.valueOf(figureSave.getFigureNum())); + productInfo.setSourcefile(figureSave.getDrawPath().replace("/", "\\")); + productInfo.setVars(new DataInfo()); + return productInfo; + } +/* private ProductInfo buildProductInfo(FigureSave figureSave, PcRigidChain rigidChain) { ProductInfo productInfo = new ProductInfo(); productInfo.setAssembledrawing(figureSave.getFigureNumber()); @@ -439,6 +606,37 @@ public class ProcessOrderProServiceImpl implements IProcessOrderProService { DataInfo datainfo = buildDataInfo(rigidChain); productInfo.setVars(datainfo); return productInfo; + }*/ + + private ProductInfo buildProductInfo(FigureSave figureSave, DeviceSpec35r device) { + ProductInfo productInfo = new ProductInfo(); + productInfo.setAssembledrawing(figureSave.getFigureNumber()); + productInfo.setNumber(String.valueOf(figureSave.getFigureNum())); + productInfo.setSourcefile(figureSave.getDrawPath().replace("/", "\\")); + log.info("项目生产令号为:{}查询设备参数: {}+ 产品名称: {}", figureSave.getProductionCode(), figureSave.getFigureNumber(), figureSave.getFigureName()); + DataInfo datainfo = buildDataInfo(device); + productInfo.setVars(datainfo); + return productInfo; + } + private ProductInfo buildProductInfo30S(FigureSave figureSave, DeviceSpec30s device) { + ProductInfo productInfo = new ProductInfo(); + productInfo.setAssembledrawing(figureSave.getFigureNumber()); + productInfo.setNumber(String.valueOf(figureSave.getFigureNum())); + productInfo.setSourcefile(figureSave.getDrawPath().replace("/", "\\")); + log.info("项目生产令号为:{}查询设备参数: {}+ 产品名称: {}", figureSave.getProductionCode(), figureSave.getFigureNumber(), figureSave.getFigureName()); + DataInfo datainfo = buildDataInfo30S(device); + productInfo.setVars(datainfo); + return productInfo; + } + + private ProductInfo buildProductInfoGeneric(FigureSave figureSave, Object device) { + ProductInfo productInfo = new ProductInfo(); + productInfo.setAssembledrawing(figureSave.getFigureNumber()); + productInfo.setNumber(String.valueOf(figureSave.getFigureNum())); + productInfo.setSourcefile(figureSave.getDrawPath().replace("/", "\\")); + DataInfo datainfo = buildDataInfoGeneric(device); + productInfo.setVars(datainfo); + return productInfo; } private DataInfo buildDataInfo(PcRigidChain rigidChain) { @@ -449,6 +647,28 @@ public class ProcessOrderProServiceImpl implements IProcessOrderProService { return datainfo; } + private DataInfo buildDataInfo(DeviceSpec35r device) { + DataInfo datainfo = new DataInfo(); + if (device != null) { + setDataInfoFields(datainfo, device); + } + return datainfo; + } private DataInfo buildDataInfo30S(DeviceSpec30s device) { + DataInfo datainfo = new DataInfo(); + if (device != null) { + setDataInfoFields(datainfo, device); + } + return datainfo; + } + + private DataInfo buildDataInfoGeneric(Object device) { + DataInfo datainfo = new DataInfo(); + if (device != null) { + setDataInfoFields(datainfo, device); + } + return datainfo; + } + private void setDataInfoFields(DataInfo datainfo, PcRigidChain rigidChain) { if (rigidChain == null) { return; @@ -531,41 +751,180 @@ public class ProcessOrderProServiceImpl implements IProcessOrderProService { datainfo.setG20(String.valueOf(rigidChain.getGTwenty())); } + private void setDataInfoFields(DataInfo datainfo, Object device) { + BeanWrapper bw = new BeanWrapperImpl(device); + Function read = name -> { + Object val = null; + if (bw.isReadableProperty(name)) val = bw.getPropertyValue(name); + else { + String alt = name.toLowerCase(); + if (bw.isReadableProperty(alt)) val = bw.getPropertyValue(alt); + } + return Objects.toString(val, ""); + }; + datainfo.setV1(read.apply("V1")); + datainfo.setV2(read.apply("V2")); + datainfo.setV3(read.apply("V3")); + datainfo.setV4(read.apply("V4")); + datainfo.setV5(read.apply("V5")); + datainfo.setV6(read.apply("V6")); + datainfo.setV7(read.apply("V7")); + datainfo.setV8(read.apply("V8")); + datainfo.setV9(read.apply("V9")); + datainfo.setV10(read.apply("V10")); + datainfo.setV11(read.apply("V11")); + datainfo.setV12(read.apply("V12")); + datainfo.setV13(read.apply("V13")); + datainfo.setV14(read.apply("V14")); + datainfo.setV15(read.apply("V15")); + datainfo.setV16(read.apply("V16")); + datainfo.setV17(read.apply("V17")); + datainfo.setV18(read.apply("V18")); + datainfo.setV19(read.apply("V19")); + datainfo.setV20(read.apply("V20")); + datainfo.setV21(read.apply("V21")); + datainfo.setV22(read.apply("V22")); + datainfo.setV23(read.apply("V23")); + datainfo.setV24(read.apply("V24")); + datainfo.setV25(read.apply("V25")); + datainfo.setV26(read.apply("V26")); + datainfo.setV27(read.apply("V27")); + datainfo.setV28(read.apply("V28")); + datainfo.setV29(read.apply("V29")); + datainfo.setV30(read.apply("V30")); + datainfo.setV31(read.apply("V31")); + datainfo.setV32(read.apply("V32")); + datainfo.setV33(read.apply("V33")); + datainfo.setV34(read.apply("V34")); + datainfo.setV35(read.apply("V35")); + datainfo.setV36(read.apply("V36")); + datainfo.setV37(read.apply("V37")); + datainfo.setV38(read.apply("V38")); + datainfo.setV39(read.apply("V39")); + datainfo.setV40(read.apply("V40")); + datainfo.setV41(read.apply("V41")); + datainfo.setV42(read.apply("V42")); + datainfo.setV43(read.apply("V43")); + datainfo.setV44(read.apply("V44")); + datainfo.setV45(read.apply("V45")); + datainfo.setV46(read.apply("V46")); + datainfo.setV47(read.apply("V47")); + datainfo.setV48(read.apply("V48")); + datainfo.setV49(read.apply("V49")); + datainfo.setV50(read.apply("V50")); + datainfo.setV51(read.apply("V51")); + datainfo.setV52(read.apply("V52")); + datainfo.setV53(read.apply("V53")); + + datainfo.setG1(read.apply("G1")); + datainfo.setG2(read.apply("G2")); + datainfo.setG3(read.apply("G3")); + datainfo.setG4(read.apply("G4")); + datainfo.setG5(read.apply("G5")); + datainfo.setG6(read.apply("G6")); + datainfo.setG7(read.apply("G7")); + } + + /** + * 创建35R变量实体 + * @param datainfo + * @param device + */ + private void setDataInfoFields(DataInfo datainfo, DeviceSpec35r device) { + if (device == null) { + return; + } + + datainfo.setV1(Objects.toString(device.getV1(), "")); + datainfo.setV2(Objects.toString(device.getV2(), "")); + datainfo.setV3(Objects.toString(device.getV3(), "")); + datainfo.setV5(Objects.toString(device.getV5(), "")); + datainfo.setV6(Objects.toString(device.getV6(), "")); + datainfo.setV8(Objects.toString(device.getV8(), "")); + datainfo.setV9(Objects.toString(device.getV9(), "")); + datainfo.setV10(Objects.toString(device.getV10(), "")); + datainfo.setV12(Objects.toString(device.getV12(), "")); + datainfo.setV14(Objects.toString(device.getV14(), "")); + datainfo.setV41(Objects.toString(device.getV41(), "")); + datainfo.setV42(Objects.toString(device.getV42(), "")); + datainfo.setV43(Objects.toString(device.getV43(), "")); + datainfo.setV44(Objects.toString(device.getV44(), "")); + datainfo.setV45(Objects.toString(device.getV45(), "")); + datainfo.setV46(Objects.toString(device.getV46(), "")); + datainfo.setV47(Objects.toString(device.getV47(), "")); + datainfo.setV48(Objects.toString(device.getV48(), "")); + + datainfo.setG1(Objects.toString(device.getG1(), "")); + datainfo.setG2(Objects.toString(device.getG2(), "")); + datainfo.setG5(Objects.toString(device.getG5(), "")); + datainfo.setG6(Objects.toString(device.getG6(), "")); + datainfo.setG7(Objects.toString(device.getG7(), "")); + } + /** + * 创建30S变量实体 + * @param datainfo + * @param device + */ + private void setDataInfoFields(DataInfo datainfo, DeviceSpec30s device) { + if (device == null) { + return; + } + + datainfo.setV1(Objects.toString(device.getV1(), "")); + datainfo.setV2(Objects.toString(device.getV2(), "")); + datainfo.setV3(Objects.toString(device.getV3(), "")); + datainfo.setV5(Objects.toString(device.getV5(), "")); + datainfo.setV8(Objects.toString(device.getV8(), "")); + datainfo.setV10(Objects.toString(device.getV10(), "")); + datainfo.setV12(Objects.toString(device.getV12(), "")); + datainfo.setV41(Objects.toString(device.getV41(), "")); + datainfo.setV42(Objects.toString(device.getV42(), "")); + datainfo.setV43(Objects.toString(device.getV43(), "")); + datainfo.setV44(Objects.toString(device.getV44(), "")); + datainfo.setV45(Objects.toString(device.getV45(), "")); + datainfo.setV46(Objects.toString(device.getV46(), "")); + + datainfo.setG1(Objects.toString(device.getG1(), "")); + datainfo.setG5(Objects.toString(device.getG5(), "")); + datainfo.setG6(Objects.toString(device.getG6(), "")); + } + private String callDrawingApi(PwProductionBill pwProductionBill, ProcessOrderProBo orderPro) { try { String drawingDate = JSONObject.toJSONString(pwProductionBill); log.info("请求出图报文=====>{}", drawingDate); + String preStatusResp = HttpUtils.sendGet(statusUrl, "UTF-8"); + JSONObject preJson = JSONObject.parseObject(preStatusResp); + String preStatus = preJson.getString("status"); + if ("busy".equals(preStatus)) { + throw new RuntimeException("出图服务忙,请稍后再试"); + } + // 1. 先发起生成请求 String response = HttpUtils.sendPost(apiUrl, drawingDate); log.info("出图接口响应=====>{}", response); - // 2. 开始轮询状态接口,直到完成 - boolean finished = false; - int maxRetry = 360; // 最多轮询 60 次(根据需求调整,比如 60*5s=5分钟) - int count = 0; - - while (!finished && count < maxRetry) { - String statusResp = HttpUtils.sendGet(status, "UTF-8"); + int productCount = pwProductionBill.getProduct() == null ? 1 : pwProductionBill.getProduct().size(); + long start = System.currentTimeMillis(); + long maxWaitMs = Math.min(30 * 60_000L, 8 * 60_000L + productCount * 60_000L); + int tick = 0; + while (System.currentTimeMillis() - start < maxWaitMs) { + String statusResp = HttpUtils.sendGet(statusUrl, "UTF-8"); JSONObject json = JSONObject.parseObject(statusResp); - String currentStatus = json.getString("status"); int processState = json.getIntValue("processstate"); - log.info("进度状态=====>status={}, processstate={}", currentStatus, processState); - // 判断完成条件processstate=4 表示完成 if ("idle".equals(currentStatus) && processState == 4) { ProcessOrderPro processOrderPro = new ProcessOrderPro(); BeanUtils.copyProperties(orderPro, processOrderPro); - - processOrderPro.setBomStatus(1L);// + processOrderPro.setBomStatus(1L); baseMapper.updateById(processOrderPro); log.info("图纸处理完成!"); return response; } - - // 没完成就等待一会儿再查 - Thread.sleep(1000); // 1 秒轮询一次 - count++; + long sleepMs = tick < 60 ? 1000L : (tick < 240 ? 2000L : 5000L); + Thread.sleep(sleepMs); + tick++; } throw new RuntimeException("图纸生成超时未完成"); @@ -576,6 +935,54 @@ public class ProcessOrderProServiceImpl implements IProcessOrderProService { } } + @Override + public SseEmitter startDrawingSse(Long id) { + SseEmitter emitter = new SseEmitter(0L); + new Thread(() -> { + try { + ProcessOrderPro order = baseMapper.selectById(id); + ProcessOrderProBo bo = new ProcessOrderProBo(); + BeanUtils.copyProperties(order, bo); + String dirPath = buildDirectoryPath(order.getProductionOrderNo()); + PwProductionBill bill = buildProductionBill(bo, dirPath); + List infos = buildProductInfos(order.getId()); + bill.setProduct(infos); + String startResp = HttpUtils.sendPost(apiUrl, JSONObject.toJSONString(bill)); + emitter.send(SseEmitter.event().name("start").data(startResp)); + boolean finished = false; + int maxRetry = 360; + int count = 0; + while (count < maxRetry) { + String statusResp = HttpUtils.sendGet(statusUrl, "UTF-8"); + JSONObject json = JSONObject.parseObject(statusResp); + String currentStatus = json.getString("status"); + int processState = json.getIntValue("processstate"); + emitter.send(SseEmitter.event().name("progress").id(String.valueOf(count)).data(json.toJSONString())); + if ("idle".equals(currentStatus) && processState == 4) { + ProcessOrderPro update = new ProcessOrderPro(); + BeanUtils.copyProperties(order, update); + update.setBomStatus(1L); + baseMapper.updateById(update); + emitter.send(SseEmitter.event().name("completed").data(startResp)); + finished = true; + emitter.complete(); + return; + } + Thread.sleep(1000); + count++; + } + emitter.send(SseEmitter.event().name("error").data("timeout")); + emitter.complete(); + } catch (Exception ex) { + try { + emitter.send(SseEmitter.event().name("error").data(Objects.toString(ex.getMessage(), "error"))); + } catch (Exception ignore) {} + emitter.completeWithError(ex); + } + }).start(); + return emitter; + } + /** * @param id @@ -670,7 +1077,9 @@ public class ProcessOrderProServiceImpl implements IProcessOrderProService { // 8. 分类PDF到 zip/工作中心/ 文件夹 String watermarkedPdfDir = arr + code + "/zip"; - classifyPdfByWorkCenterToTarget(watermarkedPdfDir, code, arr + code + "/zip"); + String productionOrderNo = processOrderPro.getProductionOrderNo(); + + classifyPdfByWorkCenterToTarget(productionOrderNo,watermarkedPdfDir, code, arr + code + "/zip"); // 8.1 删除 zip/ 根目录中未分类的 PDF 文件(只保留分类目录) File[] zipPdfFiles = new File(watermarkedPdfDir).listFiles((dir, name) -> name.toLowerCase().endsWith(".pdf")); @@ -737,19 +1146,36 @@ public class ProcessOrderProServiceImpl implements IProcessOrderProService { /** * 将 PDF 按工作中心分类复制到目标目录(如 zip/工作中心/) */ - private void classifyPdfByWorkCenterToTarget(String sourceDirPath, String code, String targetBaseDirPath) { + private void classifyPdfByWorkCenterToTarget(String productionOrderNo,String sourceDirPath, String code, String targetBaseDirPath) { + //按工作中心 分类时 查找是否有采购申请单 和生产订单 + //获取这个项目的所有生产令号 + List orderList = JdUtil.getOrderNumberCollection(productionOrderNo); + List cgorderList = JdUtil.getCaiGouOrderNumberList(productionOrderNo); + + File sourceDir = new File(sourceDirPath); if (!sourceDir.exists() || !sourceDir.isDirectory()) return; - File[] pdfFiles = sourceDir.listFiles((dir, name) -> name.endsWith(".pdf")); + File[] pdfFiles = sourceDir.listFiles((dir, name) -> name.toLowerCase().endsWith(".pdf")); if (pdfFiles == null || pdfFiles.length == 0) return; + List unmovedMaterials = new ArrayList<>(); + for (File pdf : pdfFiles) { String materialCode = extractMaterialCode(pdf.getName()); if (materialCode == null) continue; - String workCenter = iProcessRouteService.getRouteCode(materialCode, code); - if (workCenter == null || workCenter.isEmpty()) workCenter = "无工段"; + String workCenter; + //如果这个文件的生产令号 在 生产令号列表 中 或者 采购申请单列表 中 ,则 可以分类到对应的文件夹中 + // 由于物料名近似(如KP08和KP08.7),使用equals精确匹配,不使用contains + if (!orderList.contains(materialCode) && !cgorderList.contains(materialCode)) { + unmovedMaterials.add(materialCode); + workCenter = "未匹配订单"; + } else { + workCenter = iProcessRouteService.getRouteCode(materialCode, code); + if (iProductionOrderService.isPurchas(productionOrderNo, materialCode)) workCenter = "外购件"; + if (workCenter == null || workCenter.isEmpty()) workCenter = "无工段"; + } File workCenterDir = new File(targetBaseDirPath, workCenter); if (!workCenterDir.exists()) workCenterDir.mkdirs(); @@ -762,6 +1188,10 @@ public class ProcessOrderProServiceImpl implements IProcessOrderProService { log.warn("PDF {} 复制失败: {}", pdf.getName(), e.getMessage()); } } + + if (!unmovedMaterials.isEmpty()) { + log.info("以下物料未匹配到生产订单或采购申请单,未进行分类移动: {}", unmovedMaterials); + } } /** @@ -967,9 +1397,11 @@ public class ProcessOrderProServiceImpl implements IProcessOrderProService { @Override public String uploadContractPDF(Integer id, String originalFilename, MultipartFile filePath) { + if (id == null) { + return "ID不能为空"; + } // 1. 获取数据 FigureSave figureSave = figureSaveMapper.selectById(id); - ProcessOrderPro processOrderPro = baseMapper.selectById(figureSave); if (figureSave == null) return "图纸信息不存在"; String code = figureSave.getProductionCode(); // 2. 拼接本地路径和FTP路径 @@ -1132,7 +1564,7 @@ public class ProcessOrderProServiceImpl implements IProcessOrderProService { * @return */ @Override - public List getRouteAndBomDetail(List routlist,List processDataList, ProcessOrderPro orderPro) { + public List getRouteAndBomDetail(List routlist, List processDataList, ProcessOrderPro orderPro) { String proRoot = orderPro.getProductionOrderNo(); // 查出所有工艺路线和BOM diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProcessRouteServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProcessRouteServiceImpl.java index 8d38d77..3208e4e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProcessRouteServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProcessRouteServiceImpl.java @@ -30,6 +30,7 @@ import com.ruoyi.system.domain.dto.*; import com.ruoyi.system.domain.vo.*; import com.ruoyi.system.jdmain.rouplan.FEntity; import com.ruoyi.system.jdmain.rouplan.FSubEntity; +import com.ruoyi.system.jdmain.rouplan.FidEntryIdDTO; import com.ruoyi.system.jdmain.rouplan.Model; import com.ruoyi.system.jdmain.route.ProcessModel; import com.ruoyi.system.listener.LoadBomResult; @@ -54,8 +55,10 @@ import java.util.concurrent.*; import java.util.stream.Collectors; import static com.ruoyi.system.controller.BomDetailsController.*; +import static com.ruoyi.system.runner.JdUtil.updateCgOrder1; import static com.ruoyi.system.runner.JsonConverter.createProcessModel; import static com.ruoyi.system.runner.updatePcessPlanConver.updatePcessPlan1; +import static com.ruoyi.system.runner.updatePcessPlanConver.updatePcessPlan2; /** * 工艺路线Service业务层处理 @@ -331,6 +334,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { } + private String generateKey1(BomDetails bomDetail, ProcessRoute processRoute) { return String.format("%s:%s:%s", processRoute.getMaterialCode(), processRoute.getMaterialName(), bomDetail.getName(), bomDetail.getPartNumber()); } @@ -839,11 +843,8 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { bomDetails.setMaterial(productionOrderVo.getMaterial()); String materialCode = productionOrderVo.getDrawingNo(); - if (iMaterialTotalService.getVMIByCode(materialCode)) { - bomDetails.setRemarks("VMI"); - } else { - bomDetails.setRemarks(productionOrderVo.getRemark()); - } + bomDetails.setRemarks(productionOrderVo.getRemark()); + bomDetails.setDanZhong(productionOrderVo.getSingleWeight()); // 判断外购或自制 String drawingNo = productionOrderVo.getDrawingNo(); @@ -1519,20 +1520,14 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { public List getSelectProceOrder1(String rooteProdet) { K3CloudApi client = new K3CloudApi(); - // 第一次查询:使用 F_HBYT_SCLH List result = queryWithFieldName(client, "F_HBYT_SCLH", rooteProdet); - - /* - * // 如果第一次查询结果为空,使用 子生产令号 重新查询 - * if (result == null || result.isEmpty()) { - * result = queryWithFieldName(client, "F_HBYT_ZSCLH", rooteProdet); - * } - */ return result; } - // 将查询方法提取为私有方法 + /* + 根据生产令号查询 返回订单编号 物料编码名称 + */ private List queryWithFieldName(K3CloudApi client, String fieldName, String rooteProdet) { JsonObject json = new JsonObject(); json.addProperty("FormId", "PRD_MO"); @@ -1669,11 +1664,15 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { for (ProcessRoute processRoute : rawBomList) { ProcessTimeInfo processTimeInfo = selectProcessRouteByMaterialCode(numDTO.getFProcessId_number(), rooteProdet); if (numDTO.getFProcessId_number().equals(processRoute.getMaterialCode())) { + numDTO.setFPlanStartTime(processTimeInfo.getTenthProcessStartTime()); numDTO.setFPlanFinishTime(processTimeInfo.getLastProcessEndTime()); List fEntity = numDTO.getFEntity(); + for (FEntity entity : fEntity) { + for (FSubEntity fSubEntity : entity.getFSubEntity()) { + if (fSubEntity.getFOperNumber().equals(processRoute.getProcessNo())) { fSubEntity.setFOperPlanStartTime(processRoute.getXuStartTime()); fSubEntity.setFOperPlanFinishTime(processRoute.getXuEndTime()); @@ -2031,7 +2030,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { json.addProperty("FieldKeys", "FID,FSubEntity_FDetailID,FProductId.FNumber,FOperNumber,FEntity_FEntryID,FProcessId.FName,FSeqNumber,FSeqName,FPlanStartTime,FPlanFinishTime," + - "FOperPlanStartTime,FOperPlanFinishTime,FMONumber"); + "FOperPlanStartTime,FOperPlanFinishTime,FMONumber,F_HBYT_RKCK.FName"); JsonArray filterString = new JsonArray(); JsonObject filterObject = new JsonObject(); @@ -2115,6 +2114,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { fSubEntity.setFOperNumber(dto.getFOperNumber()); fSubEntity.setFOperPlanStartTime((dto.getFOperPlanStartTime())); fSubEntity.setFOperPlanFinishTime(dto.getFOperPlanFinishTime()); + fSubEntity.setRkckName(dto.getFRKCKFName()); fEntity.getFSubEntity().add(fSubEntity); } @@ -2495,17 +2495,12 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(ProcessRoute::getRouteDescription, rooteProdet); List routeList = baseMapper.selectList(wrapper); - - Map> groupedByMaterialCode = routeList.stream() - .collect(Collectors.groupingBy(ProcessRoute::getMaterialCode)); - + Map> groupedByMaterialCode = routeList.stream().collect(Collectors.groupingBy(ProcessRoute::getMaterialCode)); Set processedMaterialCodes = new HashSet<>(); // 用于去重 - if (planOrderList == null || planOrderList.isEmpty()) { log.warn("没有找到生产订单"); return Collections.emptyList(); } - for (PlanOrderVo planOrder : planOrderList) { for (Model numDTO : numDTOS) { if (planOrder.getFBillNo().equals(numDTO.getFMONumber())) { @@ -2514,8 +2509,7 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { String materialCode = String.valueOf(fidToProductionOrder.getFID()); if (!processedMaterialCodes.contains(materialCode)) { try { - List routeList1 = groupedByMaterialCode - .get(planOrder.getFmaterialidFnumber()); + List routeList1 = groupedByMaterialCode.get(planOrder.getFmaterialidFnumber()); Date xuStartTime = null; Date xuEndTime = null; if (routeList1 != null && !routeList1.isEmpty()) { @@ -2601,5 +2595,57 @@ public class ProcessRouteServiceImpl implements IProcessRouteService { return null; // 如果没有找到,返回 null } + /** + * 更新生产订单仓库字段 + */ + @Override + public List updateProductionOrders(String rooteProdet, String cangKuNum) throws Exception { + // 1. 更新生产订单 (PRD_MO) + List planOrderList = getSelectProceOrder1(rooteProdet); + for (PlanOrderVo planOrderVo : planOrderList) { + JdHuoZhu fidToProductionOrder = JdUtil.getFIDToProductionOrder(planOrderVo); + if (fidToProductionOrder != null) { + // 更新生产订单的仓库 + JdUtil.updateOrder2(fidToProductionOrder, cangKuNum); + } + } + + // 2. 更新工序计划单 (SFC_OperationPlanning) + List numDTOS = getSelecPlan(rooteProdet); + boolean needUpdate = false; + for (Model numDTO : numDTOS) { + List fEntityList = numDTO.getFEntity(); + if (fEntityList != null && !fEntityList.isEmpty()) { + for (FEntity fEntity : fEntityList) { + List fSubEntityList = fEntity.getFSubEntity(); + if (fSubEntityList != null && !fSubEntityList.isEmpty()) { + for (FSubEntity fSubEntity : fSubEntityList) { + // 设置入库仓库 + fSubEntity.setRkckName(cangKuNum); + needUpdate = true; + } + } + } + } + } + + if (needUpdate) { + updatePcessPlan2(numDTOS); + } + + return Collections.emptyList(); + } + + public List updateCgOrders(String rooteProdet, String cangKuNum) throws Exception { + List planOrderList = getSelectProceOrder1(rooteProdet); + for (PlanOrderVo planOrderVo : planOrderList) { + List fidEntryIdDTOS = JdUtil.queryFidAndEntryId(planOrderVo.getFBillNo()); + for (FidEntryIdDTO fidEntryIdDTO : fidEntryIdDTOS) { + + } + String s = updateCgOrder1(fidEntryIdDTOS, cangKuNum); + } + return null; + } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProductionOrderServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProductionOrderServiceImpl.java index f0a523f..a2c1ad3 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProductionOrderServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/ProductionOrderServiceImpl.java @@ -320,5 +320,27 @@ public class ProductionOrderServiceImpl implements IProductionOrderService { return baseMapper.selectList(wrapper); } + /** + * 判断如果是外购产品,返回true + * @param proCode + * @param materialCode + * @return + */ + @Override + public Boolean isPurchas(String proCode, String materialCode) { + if (proCode == null || materialCode == null) { + return false; + } + String p = proCode.trim(); + String m = materialCode.trim(); + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(ProductionOrder::getProductionOrderNo, p) + .eq(ProductionOrder::getDrawingNo, m) + .isNotNull(ProductionOrder::getRemark) + .like(ProductionOrder::getRemark, "外购"); + Long count = baseMapper.selectCount(wrapper); + return count != null && count > 0; + } + } diff --git a/ruoyi-system/src/main/resources/jpg/安全库存数据模板.xlsx b/ruoyi-system/src/main/resources/jpg/安全库存数据模板.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..edc75bff904aae6bca7d494e78e0711becc9733f GIT binary patch literal 13637 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 E0HX?y>;M1& literal 0 HcmV?d00001 diff --git a/ruoyi-system/src/main/resources/jpg/工段数据模板.xlsx b/ruoyi-system/src/main/resources/jpg/工段数据模板.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e10e4add6841405efba4b148c2532df18dedfdd4 GIT binary patch literal 12680 zcmaJ{Wmp}{vc=uq-63d@0KsMB?h@SH-Q8V+27(3;?oJ5q8r(HNaC@8N-Xpo^o&GU< zzC9(~t9z=ZyOz8ZI0PKXOAD3V5P13hZ-WKi7}*-iJJ{MeGRXtQFo1u+{1ii(k|2=- z1p$!*0|7z#tC+r>9iyAIRaQc^B)A|-h-a6pdc7P6EE(DfBMlt~DQ(_kGiNG;wo7c* z8KBHc5l%HAH#lq!Up>q=pR_&L(=`{nt|nvQc{j&41kvNO`Bw+K;&NE`mW2(3sG4ey z%{by%Bz&GsQVH~-X*`%)g1GCvk!Za=E2x;)Bp0Yq!hED(n}u@UcPbl94fWH9J1a@F zI~(dJiqOwD99Y4Hh!o8%Vlk65v-CzE(Z{KUf6IKr$J0{zzCLJ{?Y>4cKT@MiFX1y( zT$%jY4Bf!Hq?R-i-Gx~x4l2(EK1Kk`6i4!y8P4HgC-)0?$lWq=Ue7{_2n|#aZ>p@6 zu#dd{r}s6oY!ujS{QT{0D-|a>VC$C$LDFVbZp0it-!Q(cx>46=JgrEXp|+9Iu{+H62&HF4@`C1~FbaXM z(smfKhyU@(KWr303uSa!aDhYu8A1RjKdXl)|FBt?3x8oMTojclYLfBw*eQm`L~0^3 z@ZPAVOMT8+UalF3k-v{PV|UI*gjs=uqTYE56K3x#WOI97_XV&B4{a$lZ25yaibp0knF=)1_8RF zpUyG4HmlP>#HRxZAL&-rXIB{R&Lr@YO$1d2*j}^9aT*aLf zX6Gn3lk}ZhTYrB9AGa4Qx{z1}c|rZ3qY^j}bvLV@@#vogkbVic+B#S|ni(5A{T{oN zMA)jn0j(UtgMi@tkL*tsmX~>qR$Yq8=R)x&Hh%{F;7u4vN{UU1J3^7wZd@>NqMiM1 zjiMNoZ7t}eW3>j63TK*3wc&%8mo}dYW9!{{3e{{fmho^+U39#q)@yhT4AY{z$BTid zi{*Mr*_tp4hJ4HWtdy(Nk#{+&nDn|sYz50;A!XW2rlS`Hn@Q{Gg&##2ig2R{G~&^a zD*Fa$F9H$(vXbZnj^8>ZBr+Ew^fjW^^#%+HCJEu0Xh#~!Xw8JUZr){Ywpz`vR`)3%7V%9qiHeof$4+>|O0XLkDm6PPKRpW4*h(jIsRCPfRcR^StuiN&_Nw{ zx#mNIX*FB1kAWH`Nw!BXy47Tc>ZZ;qv*inb$WMT|3xOdgsO?w)kbT!i6I?}+i6gGH zKAJ6LNBzN$+W)2F(L9!K7AAn~Z9qHe`S^0i=zA#e{9Y(n3e@R>5SV-o=Dy}=3e9Pe z@i~$5X5v#w;rJxJuuzW*C4)T6R7AQY$Oi1AiB#Y0 z*2b2kQIQUAH@r#>$>mCDNHSEq=-?yh*LuS*NYM`L_Sj$`-k`2Rv_h<|eSy7E>!O#< zgG`jH(&aq)+7tn4(aRYehY65fcps8w-Uyt>DLY#{BI%xdb2nDRvBLFSgi;@W0!{R= zpmC92y(B6>Xc>~TTB`YR5mEue=Pj1vXPTmE2+-oc$nefw1E~44NfacZ zYud7*jX&sghYdC0fp5L)4;!xU_v-=vj@X0^gpGbfiABwM1YSPelM<1OA%pW~qkbF! zB^nExoI;Vqr_vzH4s}DwLS~2JF8?rhungNklMOzR#4Z6k<1MPvorFd0-bY&=r^Bi@ zAU|JQ*QTQHJ~aVuhd4MG{v;fsl$oq56w5p#Di00k934NFxjhNT*T#%=-LP|vFlPow zIU`zCKyKLT?(b0Ee>F){+R$EP`vm>}$CsCk3XCttZcfGyHu_f5<~EkUN021fac?zX z5@-P?0kVG*|Euz^SduUz*&~1vd>wGgJS>UrGFd7rITe8Mfy8DS8Yf|iDs4C@y?Rd; zl~$(_MZw7!6GG>vflj$Am1XJJm6#}`_$p&ZO^NeYcFJW0YEAnx+xo!SSN!` zOPS5aad}-ZX4J>L;X)!)y$$cUM(y`mwB6ZYUBwM2HG~-H%;pB-CAk7&wFKWwhQEWT zi&$viD2o;pqvOKl);obDoyKSCZ-vY0gh-)xsEmsHK%Nnc>wap&Qf{m}1XmK40wq#W zAlYy9?*(9JFZJeGnC8C;T)>}(zTJ$*n`X10Z#ryfejIhIy!Ri(c(Ta8vZ-`#nd)eg z>uj41Y;TkVSwD;C^PQlUgFU)UrduI^Qo|MN_w0EmcES6R#(=U!iEGjZ!?B!Ts`~T14%eO0V z7M;wDt&M;CcAZLqi`#$%0inSCmBRlJ`zic$x{fuZZ1Fi!+OhY1)sNcZjSf+93L1Z>}8h=RWs2-LkZM4&L6BAy_1ts|qP z^XUw&4f8&8=)m>K#Pt!buwC|gFMo>TD5$=8W;s{d9y;Y0OcBlf)HAX6`LLauLQ+^n zBZB9N0RDOBq$p=ufQPjo_NtQ)lc#udK+%LJIRZuxC)|>uhqg6?IhzDFmbWyBAj@wx zNVUFn#)MLk;<62ca_wrxNC@mGI!Vgcb-h(?oh4Za5h4jW+0shG%!;d=HYhEUaeIX& zkC1o=c3}{PKe=5zKJI(orrKrfyM;CdL7rgLWPB^c7XK&OBe+1j=7Qa=iN?%YUEApl z&jMe>TnEBA+slkclYKdGd6Z5`N5=ZGS=9zzJw*AZq8``EnWYL1x1Q%Kyxq2tySndq zN%xhN>(GIWA`{(~@-en$>-hJ_kJ-oX0v)^@5m!r3E)QM}bwKqceVk%558eDBCKG z)~6^F=)%mpvMcPbj<3k(LAFMbNcij$qW6xWt=;|c?#IHXDbtP|K3|`^Bekg(V^_b) zFSVZ6Q=HEa-wUp2%X>8ali#uVVREcZoO>1rJ+NZQr$dT|CbDK0b7> zd&lNi!xG0sz@IYmoe@<*U=`;ZUUV7yutX|Eg&F%Bd_T7PmRb$j$|F7V)kCp_7n36?J`rA$mFSB0b#GZ@k*_gi*2_;@T7! zhQ_|>sDD1sJtt2&52i@nPQM?~p7uBSvbgQ>WCMj-wwF*EgA3Q-o zcZV?`&VrspJhs(aOy|?dx*q1Q%jW!f7rkN*5`~O8pbl1tnOP(d1FUYn(nFn#xgrJJzX2@HSzQg(ffjH7OT+9l^+W4 z`6WL;cckvfc-|gBx|ej3j2&R4?@V7~i!8&7vmg%&nQimebbl zufcgz=E0?^vO^VL?BA635j5hBQh+kOeqWg>l4nN<%VY?466G2qDHc=8GR5@6L88zSjg6o8YsKv7Rfp&2QNN#WfRlKTd* zm#hODSs&QvyzLWT%8n&aJ`6_?&C4b4{2)ds-3h}e6Sg70O)Gav*20~xmcB33RZEu( zN6Zlcr*6_*-e{wpt*N7HvHPV~w3~)ABPb^7M4wEIl(AGPIyF z?nLtwA6DuJ`+T_txQt9eZi(yUS;i6~O*)7%p)Z)L>kZpru1gU2BpF^8bd|ulSI;{! z4OT`Y&Y)o=%O*-oKte=1p|drKM&dd-2Nl1h zTsBOm!7Z@!!yVv#9Y7s1PN2gm8vmX&{RW1eF+*{IMTL$x{2sB>yT{(LzKL6b3~eMZzO*<>LkVz|I5w z82fvYWOBD~3-MzN>(*Hns^m?qm^clK4myWogtO*X;gg2 zB)S$PBBeJIAQj2fLLLatO0&fl06i5IXo0bUKCdUN%e0>w5_qOUo{_}dX(kfD#WKQJZc8Bd1ML6*rs z@axU$otm{?v%y$&3bF0{P9}x_ADB@pU^<3FRlpS_w zU9RsBtnXeLnU@7G9qV5+m-Hzei1cS|kpA4)X77iEWakSQ@yNx*DQ zO9nR#sr|k`co;ewbgw`9YUj258dF-`W~~b9SM#@@ZC6G;c@9@jSYI@WB1-{)dY{9+ULag>#;PqG)345?TQ67FX~)~DzZh3ihDfI~B>@_xIU zUNN7SxRJ|libQ?MJ9Q~9U*(J#TR~zp9_bDyUI2|WR3n^{H)$-C8D!2D)97C;_a5gf zK?T~YjbhOqCbxi=timM{r>gqxc!zOOni3PoidZ!tjkwF>FyV^I?;K7JjAZHjAU@oj zZnz^ROLcZ0i0_KKn+=>rCib_Nh&wuT9-7>IZ?`wMi^iUMU{})X+==los)iT`kn4!u zA+Ow`GnBZsURs7>a98d~J!X;zL)`NG=FS}ozjI&%fYVFrx$ zV8KeG!$qsAuN8^*>FT$3n|>!wMg?W1&(K~`wk-aLU0o9)oozjXRyCwodc2jt_R+gnSv%IjZ90zIYbU$j~2~-8CP5pnO69zVJ4f9c)5?hp{#xARvhU31Uv} zR>nW0*D;}a>{9=wr~ebQpy2(7VpR-Lozau#Pk{n{wJ;XgG~-wys(CKqk{cm;na&X) zHjZ4d?+g7ixL_4uLlYDU9M{XnH`*IKrvqBUm^Akf<&yF(YKs(LGPa5DwwX~)QaQJ`m+SR^GJDX#`Aqpzk_yjk#yt_NYPGwza z6^GkYF+F3=eSX_I$jF@DDVJukChkIxh2Ez@rCo~uRr>h`5%m7{;)17SWCNL5s$f?i z`QhM-?Z@?-;VqqG8{4ZgQneaQ&{v5(OBwmQY^h7$cIe4w#fF!!csBj&0#o3XO^^M% zGzq@>9PfP!t)1~%BJxjU?#vTAQNXs>LXu`ycVHVcV~{kzTdy0eQ;RuS;c9wT#d!;Q z$*A9X99AlivW)t5ZTu8Q@9`?*5T2Zor1xs&L{-)G8C9C#K0TZkAX`GmUJ#G+rqsI7 zx50IYEH$brI$j2YB1;KFbk1-vfsSmkog7BhUoSZ?qBc1V;%#K=57{~Y#dNf#zKt@p zCfMpc9I1rh#_I0g>42}F_O_U?2GeRVn$;wmJ;B)Nnkj;5<%PSQ9#5iFI0xt=JrpXF z!tKVsLUuRrh%pOQrDbN3Xn4Tt7fni!pHe`WBXLW`k51&Y*RH%uLNjQ-$&BeLZnLYm z$Pg}@^&9sp)MZXpZ%XnS({|1>?~Zq-gZ+#m1h7N#dS6XWm=U8FWPNr2)LRM|Shh3u zM5l6((MNW^NwBYE(tYEHdX2J^-802E{KTf@tY{RN2}|0B+RF3>Dc^;}+wCeXM5ecy)^jcLfLE8wfOcD9?e{Xa_0V z+7w}_IsD}935yv^iKP!205f^X@nvsTpWG6G%o41xGZuA)nD9eI@5uZs)XS4q^n@iA zl>;A{z-}c=lwV<5l&S)_AsTatV9V=3 zW1pJPIJc-MQy&R?lAMm(s}vb=ie_Rx8L=P43L{SE zh>`d$Dc^$MUPZOoY8Q7$Wqey&Il_MnO;ujs)F8*FKPgvOm9p7c@#D&5&gxX7$Ay^j zf+*-(f<)hu=xV*8W|Z$J-*X7&xZ1EuE5Usd&`AUC(ajJ@Dg zeIhY&E9{(yNug)H*?BI)7oY)pk86i-v}SLz@D5R{CJC~<55q3;iF^p{3)LFFWBcvw z)^#E~pYcaKYjBqHo6kt_uU8^y8{$;}Z50XprB7*!;wYJy?k)i!@)Y5)sB<*}E=l+| z5M-bdNKqAUh;9ZY?2>{cZZ>hE87R#$WlGE_>xPYpQm=T;&qgjA-9ZF;q6mO%0!k6Y?Qj?}8 zoVi?u8%FetCHiwFBt$=wUt)Bv=HD~C&KU^dAqbgp9@x8Piqrqj{zHE z)O}8<81F4{D^?kqT2S)mCfUo+XL@s0&K_Zz_izhhyQ?W{+F^$35SnZ;@v&W$$gXyP zRM83)Qus3l|FGa7NwNT5vaxNuU=x9$1{;P%y?PTxDnXfk*38XlTin4#8~-TO$x(7# z0)RUN=+v1c009Jt$P7Kj5GNK@UsBJ$sVNs^sWDrfH1WeY90!Yd87w>+q}LbKF#5Rf z2aQ4{x?2_nHA4FY2`CAe#V*b@a6_Sx^2Y=fPF>gub*yeKUmCm{MH0Y8i-N_I&H&vz z(xb7oms>@aA|5AB%Ayi6TXjhe;gbZsAgQX13TUL^ZwhKe+`*CR%fVAS?In%F*%^mz z6}LCjr1Xp9=oqVY;3T-~wBaOpRJ6&W6SdQQP8FsyJmYi{tkM-V3>bm;RXW|yK)ohu z+mkLlIp9URkn>tEx(IlAc^uatxj*tYZRp1i(Z@3b4@cx3*0v^SO9C!gbD$_twW$~H zo%_k)ri@!XWvt7lehklNEkwaVttXPynga7i-}yw_A#$_YZg5vf758x~_6X}SVaH~U z;Mx8!hNafNpS@RWMt1e}p{yGQmi@$~|BVCD+H{ZYIs27vopb*zsFQ*|m*=}3us zdO=99BE+#C^_4@CycfU9o_ynJzeF?ea<#ewZp(eOF+kil`)oVh4bKngsZXE#zyr&| zJJk_ioeqDL+P&d#pt|-s1&tFK*&nAqHQgs@y9No9e%?nXWy$OrANXRbPZieij<(~h z7`0_1?#JMk2B4oPfHY#8`3K7!$S^ijjP!>9LB$U|RA90$e^`BAc9=kfRvz+4rO zUO|2obRWLyp=u@#_4{byNbCQmDM{qQ&vdt&R!|8WP>Za}tDn-g2|Y*6bU!OtKN~;& zZ8D8bk(y+#{k$X$3-oXoZ8qlA%gJds1et6Rg26;epfE=}>*;uBE4qQ2se|kByCtz| zExbx8jmbHvdNX*JXr-jL$K9#r)TisW4o*BE{s3zWhYS3UHXL^45((+{*3AZNa;RyI z=@E*S}t49-WjR!v;ADpuygn{Z$+*?##8^ma`aXqpU@nMIAx4~{(UKhI61 z6f+Q$;l#-`Z6qw3emQuhFtk0C!(4kxbiNx$B07Pu>)*{*(kZ^Zmogq%+B8>s=z>dyD7pz!ipe^tc|#`me#&4)i9*yuof_UGQ{*56)SUgtuh$28J&MOy zCYtO$SR8o=B5q@0{sK2}916|QF_=-t0MU!aA?C7+X*jGSuc}P2g)ecpt^^J1KDgUo z>Pjo-%wVz)zht)$TD&DmeVc~ZAZN`O`=PfxioD*mN<=6>(vsj~F7GD_hM=@BtogdI zMY++W@^%(AHb}%523I9REsSU#m#Uv87bVOc-atBXF=zKrehW>dEzZ3ypiWK8lGCqM z=fO4L^il?g<9>2TkoxqIeaPwjhmM1OK}r6ky>xgmZm3n`R|`K++FoDZXcT}vQJh+z zE<-TI+OsKVnr!Phm#VDaF;_lkNBgj%1|mdyx_PX;6dz&}3{@`6*LFj#Bvmx~w}xj1 zDw7d%ifBTYs1ns^ABMAu%N{)xb=%PPziUb|&r|bxN3wY4FY5T;p*LIu3{hTFmH@XK z7&V!CZA72~o$a$OYxpJCE)b+yYxd@ue%QXv5neHr%D0}hXcKICBbNweY}c8)p)d{= zOz3ai$~GC$m|pu9C3>qfgEl0Tk_}&v*92oQ(x@;YF=XD0y}lBU^;g8J;8oB|*=L|KGulCjI!pNs$U6+4uILn2RZnUXh|;nHovB+? zMvyjiUV;As`>Ld0*YqRe6lY^BWlxiYgCIB@)ZI2i!rpfxnflwCZ)6g!q6uke@N6;j z*@A}Qjb1gqm~P#CR`=Xnz+FEQCI4i4Fv65&?ER?d^FTR6#}nrrNQy*XR63F#XEE{G_dHQCz-kzLYc68Gg<=-O@KIg2OQt!p^-)#;qy(8eiVbUh> z{ehcFp5b$|y>-aRgbAnFf=CUqZ1AIs9;s5CpOfPQ^Ui6+456rPQt6vEjTuMHg4y92 zDGN%qvShmNL?5#PW*OQ@m?sZUZj6H0Pfb;I)tdRi2%OW0DioG;-h{aKT#c` zv$h*xm;oIk7xdl`2W7(oD(bywc8}=({fTAu4;|WL7fU-n(ZW;Bwz{c+RGwWIyh{UF z`Wd(;P2uwG1D%i^Ls?baoTfY+?8+@GK;b2c31zRh8=&Ae=3eEoA8}qP5#5 z$GZkDBl58DMiiUsb4M5S7phjEvof;=5G{$P-L=;pvXq)aP~-M83H6Y`VU)P1eKQOX z*ELOuPegY6sBYe!j52!weICz94bH?8m(Q`SX&#d{{MZ zs_8&4ulS-)c^5l%RN(p)@yJVAQ$;xnYtytT_v}Hu; zYh6EHzCC2|T_pHLRhLzJq|xn*{Lyw6vsex&lYx3M)v<-WPD|r5-LWH_+X;Wfeb-uB zoYCAIHOzvP%57-tJ2G4W2b<|o)q0*hdvO}yY7CP9~2-}h@T8~sr8BxlAD-N z$d;b}rRoX=Jg|7@U~Kh!snwIqrS%#3Y!!H-2IOn}M~3l5vOHl-vX>d9|1{tfWv5-n z6%%#AiHYn;#>m?*P5OD93OzyNxV=qKfnmBCIyU`wCu7yis0IHUi7rcFOlyF%LV$qn z7ngR0?_O@|-vR(-Z8PBR%68olEeGcY_d$U>yh)3U6!AJ*>eTA-rCxh9*(ZPP0tq|W24_vj?Z$o zio=Ww^va*_K)Do!f_gLN;LJC4>M9vpR&MeNQB*rPO(|k|Tf4)aA$>qwmN7M45N^Ou;(PyOrY3$NmoBaQ^C(>;GT-#Qt^o^VcG@Bhx>DEB76a z?*=Gr0IX%d`u~;wYUpQq^e6nmaUGJq0x1126u&~w3?31YnkKPeaLD+ngZKKb=b=(A zJtuTc;#F0(b3#>$EuHLqBYnIf@Y!qrdhElTULB`~2@+arM=53W(OAq826`V06beQm zwMS&Hk^JApYU&%mhE-1plxS{A)K(1UOVd{1h=Gi70fRfuARoFy`4{>TV>Yv@~ zv2a|;)z*{sA{c;Pelihg?lV%N?3A5>nYUU9+In7~8j_S45L=o4_(+VJsVS#w=&X9s z2YE+UHL28m>Wqp6!gWy=)di#KQw@Kl{(qITY zuguM?>Eyo)Nh->fe+A1%B;k17U^4SO7PcP!ezs40u{yN;XcMiX7_jsBs_#)97bJ z$YtH6M?>`GhKuq`-6U3xu8c0)5cZlsNifi8hjQ$oiVEV)bH_~V-IuOlv6?l?&5vs+ z^t80%$!GW!CFPvVppkeqaGPRDmR>DO*IvJxt>0D72a(O~cZ=Mj9D#?lNDYc#MR>ua#8h-L`wwGf8^+(Z3b%jV<)498CO zlwMC4y0U?Z!BuPSDm^tQLd}uAbCqGTw3}@$MttUZlZr3R?R$B7BksVuD>q>doK=ZE zmnZ15&6SeZg7jbd$$B{_5)dmg37~i56F(Sqd_~HrD6NHfr4TDteE|x1^+%-!1)3J1t9@m zV6scXCB{6O8C`Y7{*pq{|)}XJN-RHyy*OL8uy3J&sXc;oV~oezuJqlm-ZLt z^WO*gJNNlT_?JKGzpDL*3H^I-e<$z$sr?bS%KvcsUn=kK>c8_(|5PUdhL%6o|6rs3 z+n`^ll)u``pi_VaD`4UC-xU6i5;N^jh5yF8zoYbf#C!4c3njI`s{K#=`#1M5)U03a zrN37&Ki&T|JH328ymaHA7t~8${MBC68-cS09PZ!M|9LFG=gAi%zs7R>{~P(M;XkwH zum1g6dH$VB_NQq|AlU!YzyC4%yS?8l*?-!*0uK70>e|0s_`Qtur-c^GUl#r-D*YSS ze_txCz!?EL|1TZu?@Q%(Le`%iH~*^kCq3);F8^L~{nLODFl7M!{&ki8Tc=;B!@t_g y3TgQDLcA#dK_vcr≀9zv%v27@Pm2`zNtjUJCMOY{LY>1mOUtHC~1nz5fHTl>*)X literal 0 HcmV?d00001 diff --git a/ruoyi-system/src/main/resources/jpg/延期工段数据模板.xlsx b/ruoyi-system/src/main/resources/jpg/延期工段数据模板.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..fce416ca37812f75aaac083b90f5534567011476 GIT binary patch literal 13314 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/system/DeviceSpec125rMapper.xml b/ruoyi-system/src/main/resources/mapper/system/DeviceSpec125rMapper.xml new file mode 100644 index 0000000..a66287e --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/DeviceSpec125rMapper.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/system/DeviceSpec150rMapper.xml b/ruoyi-system/src/main/resources/mapper/system/DeviceSpec150rMapper.xml new file mode 100644 index 0000000..3375708 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/DeviceSpec150rMapper.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/system/DeviceSpec30dMapper.xml b/ruoyi-system/src/main/resources/mapper/system/DeviceSpec30dMapper.xml new file mode 100644 index 0000000..b9f7939 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/DeviceSpec30dMapper.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/system/DeviceSpec30sMapper.xml b/ruoyi-system/src/main/resources/mapper/system/DeviceSpec30sMapper.xml new file mode 100644 index 0000000..66c1858 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/DeviceSpec30sMapper.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/system/DeviceSpec35rMapper.xml b/ruoyi-system/src/main/resources/mapper/system/DeviceSpec35rMapper.xml index fec99dc..9b6a356 100644 --- a/ruoyi-system/src/main/resources/mapper/system/DeviceSpec35rMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/DeviceSpec35rMapper.xml @@ -31,6 +31,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + diff --git a/ruoyi-system/src/main/resources/mapper/system/DeviceSpec40rMapper.xml b/ruoyi-system/src/main/resources/mapper/system/DeviceSpec40rMapper.xml new file mode 100644 index 0000000..8e93acb --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/DeviceSpec40rMapper.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/system/DeviceSpec40sMapper.xml b/ruoyi-system/src/main/resources/mapper/system/DeviceSpec40sMapper.xml new file mode 100644 index 0000000..d9c9fd7 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/DeviceSpec40sMapper.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/system/DeviceSpec60rMapper.xml b/ruoyi-system/src/main/resources/mapper/system/DeviceSpec60rMapper.xml new file mode 100644 index 0000000..4eb0020 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/DeviceSpec60rMapper.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/system/DeviceSpec80rMapper.xml b/ruoyi-system/src/main/resources/mapper/system/DeviceSpec80rMapper.xml new file mode 100644 index 0000000..59c9318 --- /dev/null +++ b/ruoyi-system/src/main/resources/mapper/system/DeviceSpec80rMapper.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-system/src/main/resources/mapper/system/FigureSaveMapper.xml b/ruoyi-system/src/main/resources/mapper/system/FigureSaveMapper.xml index 9180074..b7ad7d3 100644 --- a/ruoyi-system/src/main/resources/mapper/system/FigureSaveMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/FigureSaveMapper.xml @@ -18,6 +18,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + +